@archytechtor/ui 0.0.0-stage → 0.1.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 (449) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +105 -2
  3. package/dist/components/accordion/accordion.d.ts +25 -0
  4. package/dist/components/accordion/accordion.js +88 -0
  5. package/dist/components/accordion/index.d.ts +3 -0
  6. package/dist/components/accordion/index.js +1 -0
  7. package/dist/components/accordion/types.d.ts +39 -0
  8. package/dist/components/alert/alert.d.ts +25 -0
  9. package/dist/components/alert/alert.js +59 -0
  10. package/dist/components/alert/index.d.ts +3 -0
  11. package/dist/components/alert/index.js +3 -0
  12. package/dist/components/alert/types.d.ts +32 -0
  13. package/dist/components/alert/types.js +19 -0
  14. package/dist/components/alert-dialog/alert-dialog.d.ts +73 -0
  15. package/dist/components/alert-dialog/alert-dialog.js +170 -0
  16. package/dist/components/alert-dialog/index.d.ts +3 -0
  17. package/dist/components/alert-dialog/index.js +1 -0
  18. package/dist/components/alert-dialog/types.d.ts +80 -0
  19. package/dist/components/aspect-ratio/aspect-ratio.d.ts +8 -0
  20. package/dist/components/aspect-ratio/aspect-ratio.js +20 -0
  21. package/dist/components/aspect-ratio/index.d.ts +3 -0
  22. package/dist/components/aspect-ratio/index.js +1 -0
  23. package/dist/components/aspect-ratio/types.d.ts +8 -0
  24. package/dist/components/attachment/attachment.d.ts +57 -0
  25. package/dist/components/attachment/attachment.js +139 -0
  26. package/dist/components/attachment/index.d.ts +3 -0
  27. package/dist/components/attachment/index.js +3 -0
  28. package/dist/components/attachment/types.d.ts +79 -0
  29. package/dist/components/attachment/types.js +43 -0
  30. package/dist/components/avatar/avatar.d.ts +39 -0
  31. package/dist/components/avatar/avatar.js +88 -0
  32. package/dist/components/avatar/index.d.ts +3 -0
  33. package/dist/components/avatar/index.js +3 -0
  34. package/dist/components/avatar/types.d.ts +54 -0
  35. package/dist/components/avatar/types.js +21 -0
  36. package/dist/components/badge/badge.d.ts +7 -0
  37. package/dist/components/badge/badge.js +23 -0
  38. package/dist/components/badge/index.d.ts +3 -0
  39. package/dist/components/badge/index.js +3 -0
  40. package/dist/components/badge/types.d.ts +21 -0
  41. package/dist/components/badge/types.js +26 -0
  42. package/dist/components/breadcrumb/breadcrumb.d.ts +43 -0
  43. package/dist/components/breadcrumb/breadcrumb.js +115 -0
  44. package/dist/components/breadcrumb/index.d.ts +3 -0
  45. package/dist/components/breadcrumb/index.js +1 -0
  46. package/dist/components/breadcrumb/types.d.ts +36 -0
  47. package/dist/components/bubble/bubble.d.ts +25 -0
  48. package/dist/components/bubble/bubble.js +69 -0
  49. package/dist/components/bubble/index.d.ts +3 -0
  50. package/dist/components/bubble/index.js +3 -0
  51. package/dist/components/bubble/types.d.ts +51 -0
  52. package/dist/components/bubble/types.js +60 -0
  53. package/dist/components/button/button.d.ts +7 -0
  54. package/dist/components/button/button.js +155 -0
  55. package/dist/components/button/index.d.ts +4 -0
  56. package/dist/components/button/index.js +4 -0
  57. package/dist/components/button/types.d.ts +80 -0
  58. package/dist/components/button/types.js +99 -0
  59. package/dist/components/button/use-hold-to-confirm.d.ts +25 -0
  60. package/dist/components/button/use-hold-to-confirm.js +161 -0
  61. package/dist/components/button-group/button-group.d.ts +20 -0
  62. package/dist/components/button-group/button-group.js +62 -0
  63. package/dist/components/button-group/index.d.ts +3 -0
  64. package/dist/components/button-group/index.js +3 -0
  65. package/dist/components/button-group/types.d.ts +30 -0
  66. package/dist/components/button-group/types.js +19 -0
  67. package/dist/components/calendar/calendar.d.ts +15 -0
  68. package/dist/components/calendar/calendar.js +157 -0
  69. package/dist/components/calendar/index.d.ts +3 -0
  70. package/dist/components/calendar/index.js +1 -0
  71. package/dist/components/calendar/types.d.ts +21 -0
  72. package/dist/components/card/card.d.ts +43 -0
  73. package/dist/components/card/card.js +97 -0
  74. package/dist/components/card/index.d.ts +3 -0
  75. package/dist/components/card/index.js +3 -0
  76. package/dist/components/card/types.d.ts +44 -0
  77. package/dist/components/card/types.js +19 -0
  78. package/dist/components/carousel/carousel.d.ts +36 -0
  79. package/dist/components/carousel/carousel.js +190 -0
  80. package/dist/components/carousel/index.d.ts +3 -0
  81. package/dist/components/carousel/index.js +1 -0
  82. package/dist/components/carousel/types.d.ts +79 -0
  83. package/dist/components/chart/chart.d.ts +35 -0
  84. package/dist/components/chart/chart.js +212 -0
  85. package/dist/components/chart/index.d.ts +3 -0
  86. package/dist/components/chart/index.js +1 -0
  87. package/dist/components/chart/types.d.ts +89 -0
  88. package/dist/components/chart/types.js +7 -0
  89. package/dist/components/checkbox/checkbox.d.ts +7 -0
  90. package/dist/components/checkbox/checkbox.js +31 -0
  91. package/dist/components/checkbox/index.d.ts +3 -0
  92. package/dist/components/checkbox/index.js +1 -0
  93. package/dist/components/checkbox/types.d.ts +25 -0
  94. package/dist/components/code-block/code-block.d.ts +49 -0
  95. package/dist/components/code-block/code-block.js +188 -0
  96. package/dist/components/code-block/highlighter.d.ts +15 -0
  97. package/dist/components/code-block/highlighter.js +123 -0
  98. package/dist/components/code-block/index.d.ts +5 -0
  99. package/dist/components/code-block/index.js +5 -0
  100. package/dist/components/code-block/types.d.ts +94 -0
  101. package/dist/components/code-block/types.js +38 -0
  102. package/dist/components/code-block/use-highlighted-code.d.ts +9 -0
  103. package/dist/components/code-block/use-highlighted-code.js +67 -0
  104. package/dist/components/collapsible/collapsible.d.ts +19 -0
  105. package/dist/components/collapsible/collapsible.js +44 -0
  106. package/dist/components/collapsible/index.d.ts +3 -0
  107. package/dist/components/collapsible/index.js +1 -0
  108. package/dist/components/collapsible/types.d.ts +26 -0
  109. package/dist/components/combobox/combobox.d.ts +104 -0
  110. package/dist/components/combobox/combobox.js +365 -0
  111. package/dist/components/combobox/index.d.ts +3 -0
  112. package/dist/components/combobox/index.js +1 -0
  113. package/dist/components/combobox/types.d.ts +229 -0
  114. package/dist/components/command/command.d.ts +55 -0
  115. package/dist/components/command/command.js +179 -0
  116. package/dist/components/command/index.d.ts +3 -0
  117. package/dist/components/command/index.js +1 -0
  118. package/dist/components/command/types.d.ts +69 -0
  119. package/dist/components/context-menu/context-menu.d.ts +92 -0
  120. package/dist/components/context-menu/context-menu.js +270 -0
  121. package/dist/components/context-menu/index.d.ts +3 -0
  122. package/dist/components/context-menu/index.js +1 -0
  123. package/dist/components/context-menu/types.d.ts +138 -0
  124. package/dist/components/data-table/data-table-features.d.ts +21 -0
  125. package/dist/components/data-table/data-table-features.js +22 -0
  126. package/dist/components/data-table/data-table.d.ts +69 -0
  127. package/dist/components/data-table/data-table.js +283 -0
  128. package/dist/components/data-table/index.d.ts +4 -0
  129. package/dist/components/data-table/index.js +3 -0
  130. package/dist/components/data-table/types.d.ts +63 -0
  131. package/dist/components/date-input/date-input.d.ts +7 -0
  132. package/dist/components/date-input/date-input.js +147 -0
  133. package/dist/components/date-input/index.d.ts +3 -0
  134. package/dist/components/date-input/index.js +1 -0
  135. package/dist/components/date-input/types.d.ts +27 -0
  136. package/dist/components/date-picker/date-picker.d.ts +7 -0
  137. package/dist/components/date-picker/date-picker.js +74 -0
  138. package/dist/components/date-picker/index.d.ts +3 -0
  139. package/dist/components/date-picker/index.js +1 -0
  140. package/dist/components/date-picker/types.d.ts +38 -0
  141. package/dist/components/date-range-picker/date-range-picker.d.ts +7 -0
  142. package/dist/components/date-range-picker/date-range-picker.js +89 -0
  143. package/dist/components/date-range-picker/index.d.ts +3 -0
  144. package/dist/components/date-range-picker/index.js +1 -0
  145. package/dist/components/date-range-picker/types.d.ts +43 -0
  146. package/dist/components/dialog/dialog.d.ts +61 -0
  147. package/dist/components/dialog/dialog.js +160 -0
  148. package/dist/components/dialog/index.d.ts +3 -0
  149. package/dist/components/dialog/index.js +1 -0
  150. package/dist/components/dialog/types.d.ts +68 -0
  151. package/dist/components/drawer/drawer.d.ts +69 -0
  152. package/dist/components/drawer/drawer.js +245 -0
  153. package/dist/components/drawer/index.d.ts +3 -0
  154. package/dist/components/drawer/index.js +1 -0
  155. package/dist/components/drawer/types.d.ts +93 -0
  156. package/dist/components/dropdown-menu/dropdown-menu.d.ts +92 -0
  157. package/dist/components/dropdown-menu/dropdown-menu.js +268 -0
  158. package/dist/components/dropdown-menu/index.d.ts +3 -0
  159. package/dist/components/dropdown-menu/index.js +1 -0
  160. package/dist/components/dropdown-menu/types.d.ts +143 -0
  161. package/dist/components/empty/empty.d.ts +37 -0
  162. package/dist/components/empty/empty.js +84 -0
  163. package/dist/components/empty/index.d.ts +3 -0
  164. package/dist/components/empty/index.js +3 -0
  165. package/dist/components/empty/types.d.ts +39 -0
  166. package/dist/components/empty/types.js +13 -0
  167. package/dist/components/expanded-card/expanded-card.d.ts +43 -0
  168. package/dist/components/expanded-card/expanded-card.js +352 -0
  169. package/dist/components/expanded-card/index.d.ts +3 -0
  170. package/dist/components/expanded-card/index.js +1 -0
  171. package/dist/components/expanded-card/types.d.ts +52 -0
  172. package/dist/components/field/field.d.ts +62 -0
  173. package/dist/components/field/field.js +173 -0
  174. package/dist/components/field/index.d.ts +3 -0
  175. package/dist/components/field/index.js +3 -0
  176. package/dist/components/field/types.d.ts +81 -0
  177. package/dist/components/field/types.js +21 -0
  178. package/dist/components/form/form.d.ts +49 -0
  179. package/dist/components/form/form.js +136 -0
  180. package/dist/components/form/index.d.ts +3 -0
  181. package/dist/components/form/index.js +1 -0
  182. package/dist/components/form/types.d.ts +59 -0
  183. package/dist/components/hover-card/hover-card.d.ts +19 -0
  184. package/dist/components/hover-card/hover-card.js +63 -0
  185. package/dist/components/hover-card/index.d.ts +3 -0
  186. package/dist/components/hover-card/index.js +1 -0
  187. package/dist/components/hover-card/types.d.ts +27 -0
  188. package/dist/components/image-gallery/image-gallery.d.ts +8 -0
  189. package/dist/components/image-gallery/image-gallery.js +294 -0
  190. package/dist/components/image-gallery/index.d.ts +4 -0
  191. package/dist/components/image-gallery/index.js +3 -0
  192. package/dist/components/image-gallery/masonry.d.ts +11 -0
  193. package/dist/components/image-gallery/masonry.js +62 -0
  194. package/dist/components/image-gallery/types.d.ts +80 -0
  195. package/dist/components/input/index.d.ts +3 -0
  196. package/dist/components/input/index.js +1 -0
  197. package/dist/components/input/input.d.ts +7 -0
  198. package/dist/components/input/input.js +18 -0
  199. package/dist/components/input/types.d.ts +28 -0
  200. package/dist/components/input-group/index.d.ts +3 -0
  201. package/dist/components/input-group/index.js +3 -0
  202. package/dist/components/input-group/input-group.d.ts +37 -0
  203. package/dist/components/input-group/input-group.js +103 -0
  204. package/dist/components/input-group/types.d.ts +64 -0
  205. package/dist/components/input-group/types.js +31 -0
  206. package/dist/components/input-otp/index.d.ts +3 -0
  207. package/dist/components/input-otp/index.js +1 -0
  208. package/dist/components/input-otp/input-otp.d.ts +25 -0
  209. package/dist/components/input-otp/input-otp.js +76 -0
  210. package/dist/components/input-otp/types.d.ts +43 -0
  211. package/dist/components/item/index.d.ts +3 -0
  212. package/dist/components/item/index.js +3 -0
  213. package/dist/components/item/item.d.ts +61 -0
  214. package/dist/components/item/item.js +149 -0
  215. package/dist/components/item/types.d.ts +75 -0
  216. package/dist/components/item/types.js +48 -0
  217. package/dist/components/kbd/index.d.ts +3 -0
  218. package/dist/components/kbd/index.js +1 -0
  219. package/dist/components/kbd/kbd.d.ts +13 -0
  220. package/dist/components/kbd/kbd.js +30 -0
  221. package/dist/components/kbd/types.d.ts +9 -0
  222. package/dist/components/label/index.d.ts +3 -0
  223. package/dist/components/label/index.js +1 -0
  224. package/dist/components/label/label.d.ts +7 -0
  225. package/dist/components/label/label.js +17 -0
  226. package/dist/components/label/types.d.ts +8 -0
  227. package/dist/components/loader/index.d.ts +3 -0
  228. package/dist/components/loader/index.js +3 -0
  229. package/dist/components/loader/loader.d.ts +8 -0
  230. package/dist/components/loader/loader.js +386 -0
  231. package/dist/components/loader/types.d.ts +27 -0
  232. package/dist/components/loader/types.js +58 -0
  233. package/dist/components/marker/index.d.ts +3 -0
  234. package/dist/components/marker/index.js +3 -0
  235. package/dist/components/marker/marker.d.ts +19 -0
  236. package/dist/components/marker/marker.js +51 -0
  237. package/dist/components/marker/types.d.ts +30 -0
  238. package/dist/components/marker/types.js +16 -0
  239. package/dist/components/menubar/index.d.ts +3 -0
  240. package/dist/components/menubar/index.js +1 -0
  241. package/dist/components/menubar/menubar.d.ts +98 -0
  242. package/dist/components/menubar/menubar.js +284 -0
  243. package/dist/components/menubar/types.d.ts +146 -0
  244. package/dist/components/message/index.d.ts +3 -0
  245. package/dist/components/message/index.js +1 -0
  246. package/dist/components/message/message.d.ts +37 -0
  247. package/dist/components/message/message.js +83 -0
  248. package/dist/components/message/types.d.ts +32 -0
  249. package/dist/components/message-scroller/index.d.ts +4 -0
  250. package/dist/components/message-scroller/index.js +3 -0
  251. package/dist/components/message-scroller/message-scroller-primitive.d.ts +21 -0
  252. package/dist/components/message-scroller/message-scroller-primitive.js +1349 -0
  253. package/dist/components/message-scroller/message-scroller.d.ts +39 -0
  254. package/dist/components/message-scroller/message-scroller.js +103 -0
  255. package/dist/components/message-scroller/types.d.ts +107 -0
  256. package/dist/components/money-input/index.d.ts +3 -0
  257. package/dist/components/money-input/index.js +1 -0
  258. package/dist/components/money-input/money-input.d.ts +7 -0
  259. package/dist/components/money-input/money-input.js +143 -0
  260. package/dist/components/money-input/types.d.ts +20 -0
  261. package/dist/components/morph-image/index.d.ts +3 -0
  262. package/dist/components/morph-image/index.js +3 -0
  263. package/dist/components/morph-image/morph-image.d.ts +8 -0
  264. package/dist/components/morph-image/morph-image.js +155 -0
  265. package/dist/components/morph-image/types.d.ts +38 -0
  266. package/dist/components/morph-image/types.js +18 -0
  267. package/dist/components/native-select/index.d.ts +3 -0
  268. package/dist/components/native-select/index.js +3 -0
  269. package/dist/components/native-select/native-select.d.ts +20 -0
  270. package/dist/components/native-select/native-select.js +57 -0
  271. package/dist/components/native-select/types.d.ts +52 -0
  272. package/dist/components/native-select/types.js +23 -0
  273. package/dist/components/navigation-menu/index.d.ts +3 -0
  274. package/dist/components/navigation-menu/index.js +3 -0
  275. package/dist/components/navigation-menu/navigation-menu.d.ts +50 -0
  276. package/dist/components/navigation-menu/navigation-menu.js +145 -0
  277. package/dist/components/navigation-menu/types.d.ts +79 -0
  278. package/dist/components/navigation-menu/types.js +15 -0
  279. package/dist/components/number-stepper/index.d.ts +3 -0
  280. package/dist/components/number-stepper/index.js +3 -0
  281. package/dist/components/number-stepper/number-stepper.d.ts +9 -0
  282. package/dist/components/number-stepper/number-stepper.js +223 -0
  283. package/dist/components/number-stepper/types.d.ts +47 -0
  284. package/dist/components/number-stepper/types.js +174 -0
  285. package/dist/components/pagination/index.d.ts +3 -0
  286. package/dist/components/pagination/index.js +1 -0
  287. package/dist/components/pagination/pagination.d.ts +43 -0
  288. package/dist/components/pagination/pagination.js +121 -0
  289. package/dist/components/pagination/types.d.ts +37 -0
  290. package/dist/components/phone-input/index.d.ts +3 -0
  291. package/dist/components/phone-input/index.js +1 -0
  292. package/dist/components/phone-input/phone-input.d.ts +7 -0
  293. package/dist/components/phone-input/phone-input.js +54 -0
  294. package/dist/components/phone-input/types.d.ts +12 -0
  295. package/dist/components/popover/index.d.ts +3 -0
  296. package/dist/components/popover/index.js +1 -0
  297. package/dist/components/popover/popover.d.ts +37 -0
  298. package/dist/components/popover/popover.js +100 -0
  299. package/dist/components/popover/types.d.ts +51 -0
  300. package/dist/components/progress/index.d.ts +3 -0
  301. package/dist/components/progress/index.js +1 -0
  302. package/dist/components/progress/progress.d.ts +32 -0
  303. package/dist/components/progress/progress.js +100 -0
  304. package/dist/components/progress/types.d.ts +31 -0
  305. package/dist/components/questionnaire/index.d.ts +3 -0
  306. package/dist/components/questionnaire/index.js +1 -0
  307. package/dist/components/questionnaire/questionnaire-primitive.js +1563 -0
  308. package/dist/components/questionnaire/questionnaire.d.ts +91 -0
  309. package/dist/components/questionnaire/questionnaire.js +315 -0
  310. package/dist/components/questionnaire/types.d.ts +203 -0
  311. package/dist/components/radio-group/index.d.ts +3 -0
  312. package/dist/components/radio-group/index.js +1 -0
  313. package/dist/components/radio-group/radio-group.d.ts +13 -0
  314. package/dist/components/radio-group/radio-group.js +44 -0
  315. package/dist/components/radio-group/types.d.ts +33 -0
  316. package/dist/components/reorder-list/index.d.ts +3 -0
  317. package/dist/components/reorder-list/index.js +1 -0
  318. package/dist/components/reorder-list/reorder-list.d.ts +19 -0
  319. package/dist/components/reorder-list/reorder-list.js +279 -0
  320. package/dist/components/reorder-list/types.d.ts +65 -0
  321. package/dist/components/resizable/index.d.ts +3 -0
  322. package/dist/components/resizable/index.js +1 -0
  323. package/dist/components/resizable/resizable.d.ts +19 -0
  324. package/dist/components/resizable/resizable.js +44 -0
  325. package/dist/components/resizable/types.d.ts +89 -0
  326. package/dist/components/scroll-area/index.d.ts +3 -0
  327. package/dist/components/scroll-area/index.js +1 -0
  328. package/dist/components/scroll-area/scroll-area.d.ts +13 -0
  329. package/dist/components/scroll-area/scroll-area.js +47 -0
  330. package/dist/components/scroll-area/types.d.ts +19 -0
  331. package/dist/components/select/index.d.ts +3 -0
  332. package/dist/components/select/index.js +1 -0
  333. package/dist/components/select/select.d.ts +61 -0
  334. package/dist/components/select/select.js +183 -0
  335. package/dist/components/select/types.d.ts +100 -0
  336. package/dist/components/separator/index.d.ts +3 -0
  337. package/dist/components/separator/index.js +1 -0
  338. package/dist/components/separator/separator.d.ts +7 -0
  339. package/dist/components/separator/separator.js +20 -0
  340. package/dist/components/separator/types.d.ts +9 -0
  341. package/dist/components/sheet/index.d.ts +3 -0
  342. package/dist/components/sheet/index.js +1 -0
  343. package/dist/components/sheet/sheet.d.ts +61 -0
  344. package/dist/components/sheet/sheet.js +155 -0
  345. package/dist/components/sheet/types.d.ts +69 -0
  346. package/dist/components/sidebar/index.d.ts +3 -0
  347. package/dist/components/sidebar/index.js +3 -0
  348. package/dist/components/sidebar/sidebar.d.ts +145 -0
  349. package/dist/components/sidebar/sidebar.js +550 -0
  350. package/dist/components/sidebar/types.d.ts +186 -0
  351. package/dist/components/sidebar/types.js +42 -0
  352. package/dist/components/sidebar/use-mobile.js +21 -0
  353. package/dist/components/skeleton/index.d.ts +3 -0
  354. package/dist/components/skeleton/index.js +1 -0
  355. package/dist/components/skeleton/skeleton.d.ts +8 -0
  356. package/dist/components/skeleton/skeleton.js +18 -0
  357. package/dist/components/skeleton/types.d.ts +5 -0
  358. package/dist/components/slider/index.d.ts +3 -0
  359. package/dist/components/slider/index.js +1 -0
  360. package/dist/components/slider/slider.d.ts +7 -0
  361. package/dist/components/slider/slider.js +106 -0
  362. package/dist/components/slider/types.d.ts +39 -0
  363. package/dist/components/spinner/index.d.ts +3 -0
  364. package/dist/components/spinner/index.js +1 -0
  365. package/dist/components/spinner/spinner.d.ts +7 -0
  366. package/dist/components/spinner/spinner.js +21 -0
  367. package/dist/components/spinner/types.d.ts +8 -0
  368. package/dist/components/switch/index.d.ts +3 -0
  369. package/dist/components/switch/index.js +3 -0
  370. package/dist/components/switch/switch.d.ts +7 -0
  371. package/dist/components/switch/switch.js +32 -0
  372. package/dist/components/switch/types.d.ts +37 -0
  373. package/dist/components/switch/types.js +23 -0
  374. package/dist/components/table/index.d.ts +3 -0
  375. package/dist/components/table/index.js +1 -0
  376. package/dist/components/table/table.d.ts +49 -0
  377. package/dist/components/table/table.js +112 -0
  378. package/dist/components/table/types.d.ts +33 -0
  379. package/dist/components/tabs/index.d.ts +3 -0
  380. package/dist/components/tabs/index.js +3 -0
  381. package/dist/components/tabs/tabs.d.ts +25 -0
  382. package/dist/components/tabs/tabs.js +81 -0
  383. package/dist/components/tabs/types.d.ts +61 -0
  384. package/dist/components/tabs/types.js +18 -0
  385. package/dist/components/textarea/index.d.ts +3 -0
  386. package/dist/components/textarea/index.js +1 -0
  387. package/dist/components/textarea/textarea.d.ts +7 -0
  388. package/dist/components/textarea/textarea.js +17 -0
  389. package/dist/components/textarea/types.d.ts +26 -0
  390. package/dist/components/toast/index.d.ts +3 -0
  391. package/dist/components/toast/index.js +1 -0
  392. package/dist/components/toast/toast.d.ts +63 -0
  393. package/dist/components/toast/toast.js +321 -0
  394. package/dist/components/toast/types.d.ts +120 -0
  395. package/dist/components/toggle/index.d.ts +3 -0
  396. package/dist/components/toggle/index.js +3 -0
  397. package/dist/components/toggle/toggle.d.ts +7 -0
  398. package/dist/components/toggle/toggle.js +32 -0
  399. package/dist/components/toggle/types.d.ts +35 -0
  400. package/dist/components/toggle/types.js +37 -0
  401. package/dist/components/toggle-group/index.d.ts +3 -0
  402. package/dist/components/toggle-group/index.js +1 -0
  403. package/dist/components/toggle-group/toggle-group.d.ts +13 -0
  404. package/dist/components/toggle-group/toggle-group.js +88 -0
  405. package/dist/components/toggle-group/types.d.ts +52 -0
  406. package/dist/components/tooltip/index.d.ts +3 -0
  407. package/dist/components/tooltip/index.js +1 -0
  408. package/dist/components/tooltip/tooltip.d.ts +25 -0
  409. package/dist/components/tooltip/tooltip.js +79 -0
  410. package/dist/components/tooltip/types.d.ts +48 -0
  411. package/dist/components/trace/index.d.ts +3 -0
  412. package/dist/components/trace/index.js +1 -0
  413. package/dist/components/trace/trace.d.ts +52 -0
  414. package/dist/components/trace/trace.js +132 -0
  415. package/dist/components/trace/types.d.ts +54 -0
  416. package/dist/components/typography/index.d.ts +3 -0
  417. package/dist/components/typography/index.js +3 -0
  418. package/dist/components/typography/types.d.ts +29 -0
  419. package/dist/components/typography/types.js +25 -0
  420. package/dist/components/typography/typography.d.ts +7 -0
  421. package/dist/components/typography/typography.js +40 -0
  422. package/dist/components/video-player/index.d.ts +6 -0
  423. package/dist/components/video-player/index.js +5 -0
  424. package/dist/components/video-player/types.d.ts +143 -0
  425. package/dist/components/video-player/use-video-player.js +319 -0
  426. package/dist/components/video-player/video-player-context.d.ts +45 -0
  427. package/dist/components/video-player/video-player-context.js +15 -0
  428. package/dist/components/video-player/video-player-controls.d.ts +38 -0
  429. package/dist/components/video-player/video-player-controls.js +226 -0
  430. package/dist/components/video-player/video-player-overlay.d.ts +13 -0
  431. package/dist/components/video-player/video-player-overlay.js +113 -0
  432. package/dist/components/video-player/video-player.d.ts +8 -0
  433. package/dist/components/video-player/video-player.js +139 -0
  434. package/dist/index.d.ts +244 -0
  435. package/dist/index.js +114 -0
  436. package/dist/lib/floating.d.ts +44 -0
  437. package/dist/lib/focus-source.js +51 -0
  438. package/dist/lib/format.d.ts +67 -0
  439. package/dist/lib/format.js +130 -0
  440. package/dist/lib/locale.d.ts +104 -0
  441. package/dist/lib/locale.js +103 -0
  442. package/dist/lib/part-props.d.ts +15 -0
  443. package/dist/lib/use-controllable-state.js +22 -0
  444. package/dist/lib/utils.d.ts +9 -0
  445. package/dist/lib/utils.js +16 -0
  446. package/dist/styles/index.css +126 -0
  447. package/dist/styles/theme.css +80 -0
  448. package/dist/styles/utilities.css +553 -0
  449. package/package.json +89 -3
@@ -0,0 +1,283 @@
1
+ "use client";
2
+ import { cn } from "../../lib/utils.js";
3
+ import { ROW_FORMS, texts } from "../../lib/locale.js";
4
+ import { pluralize } from "../../lib/format.js";
5
+ import { Button } from "../button/button.js";
6
+ import { DropdownMenu, DropdownMenuCheckboxItem, DropdownMenuContent, DropdownMenuGroup, DropdownMenuItem, DropdownMenuLabel, DropdownMenuSeparator, DropdownMenuTrigger } from "../dropdown-menu/dropdown-menu.js";
7
+ import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from "../select/select.js";
8
+ import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from "../table/table.js";
9
+ import { dataTableFeatures } from "./data-table-features.js";
10
+ import { ArrowDownIcon, ArrowUpIcon, ChevronLeftIcon, ChevronRightIcon, ChevronsLeftIcon, ChevronsRightIcon, ChevronsUpDownIcon, EyeOffIcon, Settings2Icon } from "lucide-react";
11
+ import { jsx, jsxs } from "react/jsx-runtime";
12
+ import { FlexRender, createColumnHelper, useTable } from "@tanstack/react-table";
13
+ // src/components/data-table/data-table.tsx
14
+ /**
15
+ * Помощник для описания столбцов таблицы с нужным типом строк
16
+ * @returns помощник: accessor(), display(), columns()
17
+ */
18
+ function createDataTableColumnHelper() {
19
+ return createColumnHelper();
20
+ }
21
+ /**
22
+ * Создать таблицу: сортировка, фильтры, страницы, выбор строк и скрытие столбцов уже подключены
23
+ * @param options - data, columns и остальные параметры useTable
24
+ * @returns экземпляр таблицы для DataTable и помощников
25
+ */
26
+ function useDataTable(options) {
27
+ return useTable({
28
+ features: dataTableFeatures,
29
+ ...options
30
+ });
31
+ }
32
+ /**
33
+ * Таблица данных: заголовки и строки текущей страницы в рамке
34
+ * @param props - пропсы; table — экземпляр из useDataTable
35
+ * @returns div с таблицей
36
+ */
37
+ function DataTable({ table, emptyText = texts.empty, className, ...props }) {
38
+ const classes = cn("overflow-hidden", "rounded-md", "border", className);
39
+ const rows = table.getRowModel().rows;
40
+ const columnCount = table.getVisibleLeafColumns().length;
41
+ const headerRows = [];
42
+ const bodyRows = [];
43
+ for (const headerGroup of table.getHeaderGroups()) {
44
+ const cells = [];
45
+ for (const header of headerGroup.headers) {
46
+ const content = header.isPlaceholder ? null : /* @__PURE__ */ jsx(FlexRender, { header });
47
+ cells.push(/* @__PURE__ */ jsx(TableHead, { children: content }, header.id));
48
+ }
49
+ headerRows.push(/* @__PURE__ */ jsx(TableRow, { children: cells }, headerGroup.id));
50
+ }
51
+ for (const row of rows) {
52
+ const cells = [];
53
+ const state = row.getIsSelected() ? "selected" : void 0;
54
+ for (const cell of row.getVisibleCells()) cells.push(/* @__PURE__ */ jsx(TableCell, { children: /* @__PURE__ */ jsx(FlexRender, { cell }) }, cell.id));
55
+ bodyRows.push(/* @__PURE__ */ jsx(TableRow, {
56
+ "data-state": state,
57
+ children: cells
58
+ }, row.id));
59
+ }
60
+ if (bodyRows.length === 0) bodyRows.push(/* @__PURE__ */ jsx(TableRow, { children: /* @__PURE__ */ jsx(TableCell, {
61
+ colSpan: columnCount,
62
+ className: "h-24 text-center",
63
+ children: emptyText
64
+ }) }, "empty"));
65
+ return /* @__PURE__ */ jsx("div", {
66
+ "data-slot": "data-table",
67
+ className: classes,
68
+ ...props,
69
+ children: /* @__PURE__ */ jsxs(Table, { children: [/* @__PURE__ */ jsx(TableHeader, { children: headerRows }), /* @__PURE__ */ jsx(TableBody, { children: bodyRows })] })
70
+ });
71
+ }
72
+ /**
73
+ * Заголовок столбца с меню: сортировка по возрастанию и убыванию, скрыть столбец
74
+ * @param props - столбец и название
75
+ * @returns div с кнопкой меню или просто название, если сортировать нельзя
76
+ */
77
+ function DataTableColumnHeader({ column, title, ascendingLabel = texts.sortAscending, descendingLabel = texts.sortDescending, hideLabel = texts.hide, className, ...props }) {
78
+ if (!column.getCanSort()) return /* @__PURE__ */ jsx("div", {
79
+ "data-slot": "data-table-column-header",
80
+ className: cn(className),
81
+ ...props,
82
+ children: title
83
+ });
84
+ const sorted = column.getIsSorted();
85
+ let icon = /* @__PURE__ */ jsx(ChevronsUpDownIcon, {});
86
+ if (sorted === "desc") icon = /* @__PURE__ */ jsx(ArrowDownIcon, {});
87
+ else if (sorted === "asc") icon = /* @__PURE__ */ jsx(ArrowUpIcon, {});
88
+ const classes = cn("flex", "items-center", "gap-2", className);
89
+ const headerButtonClasses = "-ml-3 h-8 data-open:bg-accent in-[th:first-child]:-ml-2";
90
+ return /* @__PURE__ */ jsx("div", {
91
+ "data-slot": "data-table-column-header",
92
+ className: classes,
93
+ ...props,
94
+ children: /* @__PURE__ */ jsxs(DropdownMenu, { children: [/* @__PURE__ */ jsxs(DropdownMenuTrigger, {
95
+ render: /* @__PURE__ */ jsx(Button, {
96
+ variant: "ghost",
97
+ size: "sm",
98
+ className: headerButtonClasses
99
+ }),
100
+ children: [/* @__PURE__ */ jsx("span", { children: title }), icon]
101
+ }), /* @__PURE__ */ jsxs(DropdownMenuContent, {
102
+ align: "start",
103
+ className: "w-auto",
104
+ children: [
105
+ /* @__PURE__ */ jsxs(DropdownMenuItem, {
106
+ onClick: () => column.toggleSorting(false),
107
+ children: [/* @__PURE__ */ jsx(ArrowUpIcon, {}), ascendingLabel]
108
+ }),
109
+ /* @__PURE__ */ jsxs(DropdownMenuItem, {
110
+ onClick: () => column.toggleSorting(true),
111
+ children: [/* @__PURE__ */ jsx(ArrowDownIcon, {}), descendingLabel]
112
+ }),
113
+ /* @__PURE__ */ jsx(DropdownMenuSeparator, {}),
114
+ /* @__PURE__ */ jsxs(DropdownMenuItem, {
115
+ onClick: () => column.toggleVisibility(false),
116
+ children: [/* @__PURE__ */ jsx(EyeOffIcon, {}), hideLabel]
117
+ })
118
+ ]
119
+ })] })
120
+ });
121
+ }
122
+ /** Размеры страницы в выпадающем списке */
123
+ const PAGE_SIZES = [
124
+ 10,
125
+ 20,
126
+ 25,
127
+ 30,
128
+ 40,
129
+ 50
130
+ ];
131
+ /**
132
+ * Пагинация таблицы: выбрано строк, размер страницы, номер страницы и кнопки перехода
133
+ * @param props - пропсы; table — экземпляр из useDataTable
134
+ * @returns div
135
+ */
136
+ function DataTablePagination({ table, pageSizes = PAGE_SIZES, showSelected = true, className, ...props }) {
137
+ const { pageIndex, pageSize } = table.state.pagination;
138
+ const selectedCount = table.getFilteredSelectedRowModel().rows.length;
139
+ const totalCount = table.getFilteredRowModel().rows.length;
140
+ const rowsWord = pluralize(totalCount, ROW_FORMS);
141
+ const selectedText = `${texts.selected} ${selectedCount} ${texts.of} ${totalCount} ${rowsWord}`;
142
+ const pageNumber = pageIndex + 1;
143
+ const pageCount = Math.max(table.getPageCount(), 1);
144
+ const pageText = `${texts.page} ${pageNumber} ${texts.of} ${pageCount}`;
145
+ const canPrevious = table.getCanPreviousPage();
146
+ const canNext = table.getCanNextPage();
147
+ const classes = cn("flex", "flex-wrap", "items-center", "justify-between", "gap-x-6", "gap-y-2", "px-2", className);
148
+ const sizeItems = [];
149
+ for (const size of pageSizes) sizeItems.push(/* @__PURE__ */ jsx(SelectItem, {
150
+ value: `${size}`,
151
+ children: size
152
+ }, size));
153
+ return /* @__PURE__ */ jsxs("div", {
154
+ "data-slot": "data-table-pagination",
155
+ className: classes,
156
+ ...props,
157
+ children: [/* @__PURE__ */ jsx("div", {
158
+ className: "flex-1 text-sm whitespace-nowrap text-muted-foreground",
159
+ children: showSelected && selectedText
160
+ }), /* @__PURE__ */ jsxs("div", {
161
+ className: "flex flex-wrap items-center gap-x-6 gap-y-2 lg:gap-x-8",
162
+ children: [
163
+ /* @__PURE__ */ jsxs("div", {
164
+ className: "flex items-center gap-2",
165
+ children: [/* @__PURE__ */ jsx("p", {
166
+ className: "text-sm font-medium whitespace-nowrap",
167
+ children: texts.rowsPerPage
168
+ }), /* @__PURE__ */ jsxs(Select, {
169
+ value: `${pageSize}`,
170
+ onValueChange: (value) => table.setPageSize(Number(value)),
171
+ children: [/* @__PURE__ */ jsx(SelectTrigger, {
172
+ "aria-label": texts.rowsPerPage,
173
+ className: "h-8 w-[70px]",
174
+ children: /* @__PURE__ */ jsx(SelectValue, { placeholder: `${pageSize}` })
175
+ }), /* @__PURE__ */ jsx(SelectContent, {
176
+ side: "top",
177
+ children: sizeItems
178
+ })]
179
+ })]
180
+ }),
181
+ /* @__PURE__ */ jsx("div", {
182
+ className: "flex min-w-[100px] items-center justify-center text-sm font-medium whitespace-nowrap",
183
+ children: pageText
184
+ }),
185
+ /* @__PURE__ */ jsxs("div", {
186
+ className: "flex items-center gap-2",
187
+ children: [
188
+ /* @__PURE__ */ jsxs(Button, {
189
+ variant: "outline",
190
+ size: "icon",
191
+ className: "hidden size-8 lg:flex",
192
+ onClick: () => table.setPageIndex(0),
193
+ disabled: !canPrevious,
194
+ children: [/* @__PURE__ */ jsx("span", {
195
+ className: "sr-only",
196
+ children: texts.firstPage
197
+ }), /* @__PURE__ */ jsx(ChevronsLeftIcon, {})]
198
+ }),
199
+ /* @__PURE__ */ jsxs(Button, {
200
+ variant: "outline",
201
+ size: "icon",
202
+ className: "size-8",
203
+ onClick: () => table.previousPage(),
204
+ disabled: !canPrevious,
205
+ children: [/* @__PURE__ */ jsx("span", {
206
+ className: "sr-only",
207
+ children: texts.previousPage
208
+ }), /* @__PURE__ */ jsx(ChevronLeftIcon, {})]
209
+ }),
210
+ /* @__PURE__ */ jsxs(Button, {
211
+ variant: "outline",
212
+ size: "icon",
213
+ className: "size-8",
214
+ onClick: () => table.nextPage(),
215
+ disabled: !canNext,
216
+ children: [/* @__PURE__ */ jsx("span", {
217
+ className: "sr-only",
218
+ children: texts.nextPage
219
+ }), /* @__PURE__ */ jsx(ChevronRightIcon, {})]
220
+ }),
221
+ /* @__PURE__ */ jsxs(Button, {
222
+ variant: "outline",
223
+ size: "icon",
224
+ className: "hidden size-8 lg:flex",
225
+ onClick: () => table.setPageIndex(table.getPageCount() - 1),
226
+ disabled: !canNext,
227
+ children: [/* @__PURE__ */ jsx("span", {
228
+ className: "sr-only",
229
+ children: texts.lastPage
230
+ }), /* @__PURE__ */ jsx(ChevronsRightIcon, {})]
231
+ })
232
+ ]
233
+ })
234
+ ]
235
+ })]
236
+ });
237
+ }
238
+ /**
239
+ * Название столбца для меню: заголовок-строка или id
240
+ * @param column - столбец
241
+ * @returns название
242
+ */
243
+ function getColumnTitle(column) {
244
+ const header = column.columnDef.header;
245
+ if (typeof header === "string") return header;
246
+ return column.id;
247
+ }
248
+ /**
249
+ * Выбор столбцов: меню с флажками, какие столбцы показывать
250
+ * @param props - пропсы; table — экземпляр из useDataTable
251
+ * @returns меню
252
+ */
253
+ function DataTableViewOptions({ table, label = texts.view, menuLabel = texts.columns, className }) {
254
+ const classes = cn("ml-auto", "h-8", className);
255
+ const items = [];
256
+ for (const column of table.getAllColumns()) {
257
+ if (typeof column.accessorFn === "undefined" || !column.getCanHide()) continue;
258
+ const title = getColumnTitle(column);
259
+ items.push(/* @__PURE__ */ jsx(DropdownMenuCheckboxItem, {
260
+ checked: column.getIsVisible(),
261
+ onCheckedChange: (value) => column.toggleVisibility(Boolean(value)),
262
+ children: title
263
+ }, column.id));
264
+ }
265
+ return /* @__PURE__ */ jsxs(DropdownMenu, { children: [/* @__PURE__ */ jsxs(DropdownMenuTrigger, {
266
+ render: /* @__PURE__ */ jsx(Button, {
267
+ "data-slot": "data-table-view-options",
268
+ variant: "outline",
269
+ size: "sm",
270
+ className: classes
271
+ }),
272
+ children: [/* @__PURE__ */ jsx(Settings2Icon, {}), label]
273
+ }), /* @__PURE__ */ jsxs(DropdownMenuContent, {
274
+ align: "end",
275
+ className: "w-[180px]",
276
+ children: [
277
+ /* @__PURE__ */ jsx(DropdownMenuGroup, { children: /* @__PURE__ */ jsx(DropdownMenuLabel, { children: menuLabel }) }),
278
+ /* @__PURE__ */ jsx(DropdownMenuSeparator, {}),
279
+ items
280
+ ]
281
+ })] });
282
+ }
283
+ export { DataTable, DataTableColumnHeader, DataTablePagination, DataTableViewOptions, createDataTableColumnHelper, useDataTable };
@@ -0,0 +1,4 @@
1
+ import { dataTableFeatures } from "./data-table-features.js";
2
+ import { DataTableColumnHeaderPropsT, DataTableFeaturesT, DataTableOptionsT, DataTablePaginationPropsT, DataTablePropsT, DataTableT, DataTableViewOptionsPropsT } from "./types.js";
3
+ import { DataTable, DataTableColumnHeader, DataTablePagination, DataTableViewOptions, createDataTableColumnHelper, useDataTable } from "./data-table.js";
4
+ export { DataTable, DataTableColumnHeader, type DataTableColumnHeaderPropsT, type DataTableFeaturesT, type DataTableOptionsT, DataTablePagination, type DataTablePaginationPropsT, type DataTablePropsT, type DataTableT, DataTableViewOptions, type DataTableViewOptionsPropsT, createDataTableColumnHelper, dataTableFeatures, useDataTable };
@@ -0,0 +1,3 @@
1
+ import { dataTableFeatures } from "./data-table-features.js";
2
+ import { DataTable, DataTableColumnHeader, DataTablePagination, DataTableViewOptions, createDataTableColumnHelper, useDataTable } from "./data-table.js";
3
+ export { DataTable, DataTableColumnHeader, DataTablePagination, DataTableViewOptions, createDataTableColumnHelper, dataTableFeatures, useDataTable };
@@ -0,0 +1,63 @@
1
+ import { dataTableFeatures } from "./data-table-features.js";
2
+ import { ComponentProps, ReactNode } from "react";
3
+ import { Column, ReactTable, RowData, TableOptions } from "@tanstack/react-table";
4
+ /**
5
+ * Набор возможностей таблицы
6
+ */
7
+ export type DataTableFeaturesT = typeof dataTableFeatures;
8
+ /**
9
+ * Экземпляр таблицы с возможностями dataTableFeatures
10
+ */
11
+ export type DataTableT<TData extends RowData> = ReactTable<DataTableFeaturesT, TData>;
12
+ /**
13
+ * Параметры таблицы: как у useTable, но features уже заданы
14
+ */
15
+ export type DataTableOptionsT<TData extends RowData> = Omit<TableOptions<DataTableFeaturesT, TData>, 'features'>;
16
+ /**
17
+ * Пропсы таблицы данных
18
+ */
19
+ export type DataTablePropsT<TData extends RowData> = Omit<ComponentProps<'div'>, 'children'> & {
20
+ /** Таблица из useDataTable */
21
+ table: DataTableT<TData>;
22
+ /** Текст, когда строк нет. По умолчанию «Ничего не найдено» */
23
+ emptyText?: ReactNode;
24
+ };
25
+ /**
26
+ * Пропсы заголовка столбца
27
+ */
28
+ export type DataTableColumnHeaderPropsT<TData extends RowData, TValue> = ComponentProps<'div'> & {
29
+ /** Столбец из контекста header */
30
+ column: Column<DataTableFeaturesT, TData, TValue>;
31
+ /** Название столбца */
32
+ title: string;
33
+ /** Подпись «По возрастанию». По умолчанию из locale */
34
+ ascendingLabel?: string;
35
+ /** Подпись «По убыванию». По умолчанию из locale */
36
+ descendingLabel?: string;
37
+ /** Подпись «Скрыть». По умолчанию из locale */
38
+ hideLabel?: string;
39
+ };
40
+ /**
41
+ * Пропсы пагинации
42
+ */
43
+ export type DataTablePaginationPropsT<TData extends RowData> = ComponentProps<'div'> & {
44
+ /** Таблица из useDataTable */
45
+ table: DataTableT<TData>;
46
+ /** Варианты размера страницы. По умолчанию 10, 20, 25, 30, 40, 50 */
47
+ pageSizes?: number[];
48
+ /** Показать счётчик выбранных строк. По умолчанию true */
49
+ showSelected?: boolean;
50
+ };
51
+ /**
52
+ * Пропсы выбора столбцов
53
+ */
54
+ export type DataTableViewOptionsPropsT<TData extends RowData> = {
55
+ /** Таблица из useDataTable */
56
+ table: DataTableT<TData>;
57
+ /** Текст кнопки. По умолчанию «Вид» */
58
+ label?: string;
59
+ /** Заголовок меню. По умолчанию «Столбцы» */
60
+ menuLabel?: string;
61
+ /** Классы кнопки */
62
+ className?: string;
63
+ };
@@ -0,0 +1,7 @@
1
+ import { DateInputPropsT } from "./types.js";
2
+ /**
3
+ * Поле даты: ввод по маске дд.мм.гггг и выбор в календаре
4
+ * @param props - пропсы поля; value — дата, onValueChange — дата или null
5
+ * @returns группа поля
6
+ */
7
+ export declare function DateInput({ value, defaultValue, onValueChange, showCalendar, calendarLabel, captionLayout, startMonth, endMonth, disabledDates, groupClassName, placeholder, onChange, onKeyDown, disabled, ...props }: DateInputPropsT): import("react").JSX.Element;
@@ -0,0 +1,147 @@
1
+ "use client";
2
+ import { cn } from "../../lib/utils.js";
3
+ import { DATE_FORMAT, DATE_MASK, texts } from "../../lib/locale.js";
4
+ import { formatDate } from "../../lib/format.js";
5
+ import { Calendar } from "../calendar/calendar.js";
6
+ import { InputGroup, InputGroupAddon, InputGroupButton, InputGroupInput } from "../input-group/input-group.js";
7
+ import { useControllableState } from "../../lib/use-controllable-state.js";
8
+ import { Popover, PopoverContent, PopoverTrigger } from "../popover/popover.js";
9
+ import { isValid, parse } from "date-fns";
10
+ import { CalendarIcon } from "lucide-react";
11
+ import { jsx, jsxs } from "react/jsx-runtime";
12
+ import { useState } from "react";
13
+ // src/components/date-input/date-input.tsx
14
+ /** Цифр в полной дате дд.мм.гггг */
15
+ const DATE_DIGITS = 8;
16
+ /**
17
+ * Наложить маску дд.мм.гггг на цифры
18
+ * @param raw - текст из поля
19
+ * @returns текст с точками: 31.12.2026
20
+ */
21
+ function maskDate(raw) {
22
+ const digits = raw.replace(/\D/g, "").slice(0, DATE_DIGITS);
23
+ const day = digits.slice(0, 2);
24
+ const month = digits.slice(2, 4);
25
+ const year = digits.slice(4, 8);
26
+ let result = day;
27
+ if (digits.length > 2) result += `.${month}`;
28
+ if (digits.length > 4) result += `.${year}`;
29
+ return result;
30
+ }
31
+ /**
32
+ * Дата из текста, если он полный и дата существует
33
+ * @param text - текст дд.мм.гггг
34
+ * @returns дата или null
35
+ */
36
+ function parseDate(text) {
37
+ if (text.replace(/\D/g, "").length !== DATE_DIGITS) return null;
38
+ const date = parse(text, DATE_FORMAT, /* @__PURE__ */ new Date());
39
+ if (!isValid(date)) return null;
40
+ return date;
41
+ }
42
+ /**
43
+ * Поле даты: ввод по маске дд.мм.гггг и выбор в календаре
44
+ * @param props - пропсы поля; value — дата, onValueChange — дата или null
45
+ * @returns группа поля
46
+ */
47
+ function DateInput({ value, defaultValue = null, onValueChange, showCalendar = true, calendarLabel = texts.pickDate, captionLayout = "label", startMonth, endMonth, disabledDates, groupClassName, placeholder = DATE_MASK, onChange, onKeyDown, disabled, ...props }) {
48
+ const [date, setDate] = useControllableState({
49
+ prop: value,
50
+ defaultProp: defaultValue,
51
+ onChange: onValueChange,
52
+ caller: "DateInput"
53
+ });
54
+ const [text, setText] = useState(() => date ? formatDate(date) : "");
55
+ const [open, setOpen] = useState(false);
56
+ const [month, setMonth] = useState(date ?? void 0);
57
+ const parsed = parseDate(text);
58
+ const isTextInSync = parsed?.getTime() === date?.getTime() || parsed === null && date === null;
59
+ const dateText = date ? formatDate(date) : "";
60
+ const shownText = isTextInSync ? text : dateText;
61
+ const selected = date ?? void 0;
62
+ const classes = cn(groupClassName);
63
+ /**
64
+ * Новый текст поля: наложить маску; полная верная дата уходит наружу
65
+ * @param event - событие изменения
66
+ */
67
+ const handleChange = (event) => {
68
+ onChange?.(event);
69
+ const nextText = maskDate(event.target.value);
70
+ const nextDate = parseDate(nextText);
71
+ setText(nextText);
72
+ if (nextDate) {
73
+ setDate(nextDate);
74
+ setMonth(nextDate);
75
+ } else if (date !== null) setDate(null);
76
+ };
77
+ /**
78
+ * Стрелка вниз открывает календарь
79
+ * @param event - нажатие клавиши
80
+ */
81
+ const handleKeyDown = (event) => {
82
+ onKeyDown?.(event);
83
+ if (event.key === "ArrowDown" && showCalendar) {
84
+ event.preventDefault();
85
+ setOpen(true);
86
+ }
87
+ };
88
+ /**
89
+ * Выбрана дата в календаре: показать в поле и закрыть
90
+ * @param day - выбранная дата или undefined
91
+ */
92
+ const selectDate = (day) => {
93
+ const nextDate = day ?? null;
94
+ const nextText = day ? formatDate(day) : "";
95
+ setDate(nextDate);
96
+ setText(nextText);
97
+ setOpen(false);
98
+ };
99
+ return /* @__PURE__ */ jsxs(InputGroup, {
100
+ "data-slot": "date-input",
101
+ "data-disabled": disabled,
102
+ className: classes,
103
+ children: [/* @__PURE__ */ jsx(InputGroupInput, {
104
+ type: "text",
105
+ inputMode: "numeric",
106
+ autoComplete: "off",
107
+ placeholder,
108
+ value: shownText,
109
+ onChange: handleChange,
110
+ onKeyDown: handleKeyDown,
111
+ disabled,
112
+ ...props
113
+ }), showCalendar && /* @__PURE__ */ jsx(InputGroupAddon, {
114
+ align: "inline-end",
115
+ children: /* @__PURE__ */ jsxs(Popover, {
116
+ open,
117
+ onOpenChange: setOpen,
118
+ children: [/* @__PURE__ */ jsx(PopoverTrigger, {
119
+ render: /* @__PURE__ */ jsx(InputGroupButton, {
120
+ variant: "ghost",
121
+ size: "icon-xs",
122
+ "aria-label": calendarLabel,
123
+ disabled
124
+ }),
125
+ children: /* @__PURE__ */ jsx(CalendarIcon, {})
126
+ }), /* @__PURE__ */ jsx(PopoverContent, {
127
+ className: "w-auto overflow-hidden p-0",
128
+ align: "end",
129
+ alignOffset: -8,
130
+ sideOffset: 10,
131
+ children: /* @__PURE__ */ jsx(Calendar, {
132
+ mode: "single",
133
+ selected,
134
+ onSelect: selectDate,
135
+ month,
136
+ onMonthChange: setMonth,
137
+ captionLayout,
138
+ startMonth,
139
+ endMonth,
140
+ disabled: disabledDates
141
+ })
142
+ })]
143
+ })
144
+ })]
145
+ });
146
+ }
147
+ export { DateInput };
@@ -0,0 +1,3 @@
1
+ import { DateInputPropsT } from "./types.js";
2
+ import { DateInput } from "./date-input.js";
3
+ export { DateInput, type DateInputPropsT };
@@ -0,0 +1 @@
1
+ export { DateInput } from "./date-input.js";
@@ -0,0 +1,27 @@
1
+ import { InputPropsT } from "../input/types.js";
2
+ import { Matcher } from "react-day-picker";
3
+ /**
4
+ * Пропсы поля даты
5
+ */
6
+ export type DateInputPropsT = Omit<InputPropsT, 'type' | 'value' | 'defaultValue' | 'inputMode'> & {
7
+ /** Дата — контролируемый режим, вместе с onValueChange. null — дата не введена */
8
+ value?: Date | null;
9
+ /** Дата при первом рендере — неконтролируемый режим */
10
+ defaultValue?: Date | null;
11
+ /** Введена полная верная дата или поле очищено: дата или null */
12
+ onValueChange?: (value: Date | null) => void;
13
+ /** Показать кнопку календаря справа. По умолчанию true */
14
+ showCalendar?: boolean;
15
+ /** Подпись кнопки календаря для скринридеров. По умолчанию «Выберите дату» */
16
+ calendarLabel?: string;
17
+ /** label — заголовок месяца, dropdown — списки месяца и года. По умолчанию label */
18
+ captionLayout?: 'label' | 'dropdown' | 'dropdown-months' | 'dropdown-years';
19
+ /** Первый месяц, до которого можно листать календарь */
20
+ startMonth?: Date;
21
+ /** Последний месяц, до которого можно листать календарь */
22
+ endMonth?: Date;
23
+ /** Недоступные в календаре даты: дата, массив, { before }, { after } или функция */
24
+ disabledDates?: Matcher | Matcher[];
25
+ /** Классы рамки поля */
26
+ groupClassName?: string;
27
+ };
@@ -0,0 +1,7 @@
1
+ import { DatePickerPropsT } from "./types.js";
2
+ /**
3
+ * Выбор даты: кнопка с датой в формате дд.мм.гггг открывает календарь
4
+ * @param props - пропсы; остальные пропсы уходят на кнопку (id, aria-invalid, disabled)
5
+ * @returns окно с календарём
6
+ */
7
+ export declare function DatePicker({ value, defaultValue, onValueChange, open, defaultOpen, onOpenChange, placeholder, dateFormat, closeOnSelect, captionLayout, startMonth, endMonth, disabledDates, align, className, contentClassName, ...props }: DatePickerPropsT): import("react").JSX.Element;
@@ -0,0 +1,74 @@
1
+ "use client";
2
+ import { cn } from "../../lib/utils.js";
3
+ import { DATE_FORMAT, texts } from "../../lib/locale.js";
4
+ import { formatDate } from "../../lib/format.js";
5
+ import { Button } from "../button/button.js";
6
+ import { Calendar } from "../calendar/calendar.js";
7
+ import { useControllableState } from "../../lib/use-controllable-state.js";
8
+ import { Popover, PopoverContent, PopoverTrigger } from "../popover/popover.js";
9
+ import { ChevronDownIcon } from "lucide-react";
10
+ import { jsx, jsxs } from "react/jsx-runtime";
11
+ // src/components/date-picker/date-picker.tsx
12
+ /**
13
+ * Выбор даты: кнопка с датой в формате дд.мм.гггг открывает календарь
14
+ * @param props - пропсы; остальные пропсы уходят на кнопку (id, aria-invalid, disabled)
15
+ * @returns окно с календарём
16
+ */
17
+ function DatePicker({ value, defaultValue = null, onValueChange, open, defaultOpen = false, onOpenChange, placeholder = texts.pickDate, dateFormat = DATE_FORMAT, closeOnSelect = true, captionLayout = "label", startMonth, endMonth, disabledDates, align = "start", className, contentClassName, ...props }) {
18
+ const [date, setDate] = useControllableState({
19
+ prop: value,
20
+ defaultProp: defaultValue,
21
+ onChange: onValueChange,
22
+ caller: "DatePicker"
23
+ });
24
+ const [isOpen, setOpen] = useControllableState({
25
+ prop: open,
26
+ defaultProp: defaultOpen,
27
+ onChange: onOpenChange,
28
+ caller: "DatePicker"
29
+ });
30
+ const isEmpty = date === null;
31
+ const label = date === null ? placeholder : formatDate(date, dateFormat);
32
+ const selected = date ?? void 0;
33
+ const classes = cn("w-[212px]", "justify-between", "text-left", "font-normal", "data-[empty=true]:text-muted-foreground", className);
34
+ const contentClasses = cn("w-auto", "overflow-hidden", "p-0", contentClassName);
35
+ /**
36
+ * Выбрана дата в календаре: сохранить и при необходимости закрыть
37
+ * @param day - выбранная дата или undefined, если выбор снят
38
+ */
39
+ const selectDate = (day) => {
40
+ setDate(day ?? null);
41
+ if (closeOnSelect) setOpen(false);
42
+ };
43
+ return /* @__PURE__ */ jsxs(Popover, {
44
+ open: isOpen,
45
+ onOpenChange: setOpen,
46
+ children: [/* @__PURE__ */ jsxs(PopoverTrigger, {
47
+ render: /* @__PURE__ */ jsx(Button, {
48
+ "data-slot": "date-picker",
49
+ "data-empty": isEmpty,
50
+ variant: "outline",
51
+ className: classes,
52
+ ...props
53
+ }),
54
+ children: [/* @__PURE__ */ jsx("span", {
55
+ className: "truncate",
56
+ children: label
57
+ }), /* @__PURE__ */ jsx(ChevronDownIcon, { className: "text-muted-foreground" })]
58
+ }), /* @__PURE__ */ jsx(PopoverContent, {
59
+ className: contentClasses,
60
+ align,
61
+ children: /* @__PURE__ */ jsx(Calendar, {
62
+ mode: "single",
63
+ selected,
64
+ onSelect: selectDate,
65
+ defaultMonth: selected,
66
+ captionLayout,
67
+ startMonth,
68
+ endMonth,
69
+ disabled: disabledDates
70
+ })
71
+ })]
72
+ });
73
+ }
74
+ export { DatePicker };
@@ -0,0 +1,3 @@
1
+ import { DatePickerPropsT } from "./types.js";
2
+ import { DatePicker } from "./date-picker.js";
3
+ export { DatePicker, type DatePickerPropsT };
@@ -0,0 +1 @@
1
+ export { DatePicker } from "./date-picker.js";