brd-ui-kit 0.1.76 → 0.1.78

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 (359) hide show
  1. package/dist/brd-ui-kit.css +1 -1
  2. package/dist/calendar-PqChui7l.cjs +2 -0
  3. package/dist/{calendar-B5QCV34E.cjs.map → calendar-PqChui7l.cjs.map} +1 -1
  4. package/dist/{calendar-Ba3kHG6w.js → calendar-XWqEaWHP.js} +4 -3
  5. package/dist/{calendar-Ba3kHG6w.js.map → calendar-XWqEaWHP.js.map} +1 -1
  6. package/dist/{calendar-locale-BHyNJPb2.cjs → calendar-locale-CosU_VZY.cjs} +2 -2
  7. package/dist/{calendar-locale-BHyNJPb2.cjs.map → calendar-locale-CosU_VZY.cjs.map} +1 -1
  8. package/dist/{calendar-locale-DQ9wj0zF.js → calendar-locale-DqQZymBn.js} +2 -2
  9. package/dist/{calendar-locale-DQ9wj0zF.js.map → calendar-locale-DqQZymBn.js.map} +1 -1
  10. package/dist/components/app-sidebar/app-sidebar.d.ts +2 -2
  11. package/dist/components/checkbox-group/checkbox-group.d.ts +29 -0
  12. package/dist/components/checkbox-group/index.d.ts +2 -0
  13. package/dist/components/checkbox-group.d.ts +2 -0
  14. package/dist/components/data-table/data-table-row-actions-column.d.ts +2 -2
  15. package/dist/components/files-uploader/files-uploader.d.ts +2 -2
  16. package/dist/components/icons/ArrowCounterClockwise.d.ts +1 -0
  17. package/dist/components/icons/BoundingBox.d.ts +1 -0
  18. package/dist/components/icons/Briefcase.d.ts +1 -0
  19. package/dist/components/icons/Building.d.ts +1 -0
  20. package/dist/components/icons/Buildings.d.ts +1 -0
  21. package/dist/components/icons/CaretDown.d.ts +1 -0
  22. package/dist/components/icons/CaretLeft.d.ts +1 -0
  23. package/dist/components/icons/CaretRight.d.ts +1 -0
  24. package/dist/components/icons/CaretUp.d.ts +1 -0
  25. package/dist/components/icons/CaretUpDown.d.ts +1 -0
  26. package/dist/components/icons/ChartLine.d.ts +1 -0
  27. package/dist/components/icons/Check.d.ts +1 -0
  28. package/dist/components/icons/CheckCircle.d.ts +1 -0
  29. package/dist/components/icons/Clock.d.ts +1 -0
  30. package/dist/components/icons/CreditCard.d.ts +1 -0
  31. package/dist/components/icons/DotsThree.d.ts +1 -0
  32. package/dist/components/icons/DownloadSimple.d.ts +1 -0
  33. package/dist/components/icons/EnvelopeSimple.d.ts +1 -0
  34. package/dist/components/icons/Eye.d.ts +1 -0
  35. package/dist/components/icons/EyeSlash.d.ts +1 -0
  36. package/dist/components/icons/FileText.d.ts +1 -0
  37. package/dist/components/icons/Folder.d.ts +1 -0
  38. package/dist/components/icons/Funnel.d.ts +1 -0
  39. package/dist/components/icons/Gear.d.ts +1 -0
  40. package/dist/components/icons/Info.d.ts +1 -0
  41. package/dist/components/icons/LockKey.d.ts +1 -0
  42. package/dist/components/icons/MagnifyingGlass.d.ts +1 -0
  43. package/dist/components/icons/MaxLogo.d.ts +1 -0
  44. package/dist/components/icons/Package.d.ts +1 -0
  45. package/dist/components/icons/Pencil.d.ts +1 -0
  46. package/dist/components/icons/Phone.d.ts +1 -0
  47. package/dist/components/icons/Plus.d.ts +1 -0
  48. package/dist/components/icons/PresentationChart.d.ts +1 -0
  49. package/dist/components/icons/SpinnerGap.d.ts +1 -0
  50. package/dist/components/icons/TelegramLogo.d.ts +1 -0
  51. package/dist/components/icons/Trash.d.ts +1 -0
  52. package/dist/components/icons/UserCircleGear.d.ts +1 -0
  53. package/dist/components/icons/Users.d.ts +1 -0
  54. package/dist/components/icons/UsersFour.d.ts +1 -0
  55. package/dist/components/icons/Warning.d.ts +1 -0
  56. package/dist/components/icons/WarningCircle.d.ts +1 -0
  57. package/dist/components/icons/WhatsAppLogoFilled.d.ts +1 -0
  58. package/dist/components/icons/Wrench.d.ts +1 -0
  59. package/dist/components/icons/X.d.ts +1 -0
  60. package/dist/components/icons/XCircle.d.ts +1 -0
  61. package/dist/components/icons/index.d.ts +50 -0
  62. package/dist/components/icons/stroke-icon.d.ts +19 -0
  63. package/dist/components/icons.d.ts +2 -0
  64. package/dist/components/input-password/input-password.d.ts +1 -1
  65. package/dist/components/ui/dropdown-menu/dropdown-menu.d.ts +2 -2
  66. package/dist/components/ui/icon/icon-map.d.ts +68 -0
  67. package/dist/components/ui/icon/icon.d.ts +6 -6
  68. package/dist/components/ui/icon/index.d.ts +3 -1
  69. package/dist/components/ui/toggle-group/toggle-group.styles.d.ts +1 -1
  70. package/dist/components-app-pagination-app-pagination.cjs +1 -1
  71. package/dist/components-app-pagination-app-pagination.cjs.map +1 -1
  72. package/dist/components-app-pagination-app-pagination.js +34 -32
  73. package/dist/components-app-pagination-app-pagination.js.map +1 -1
  74. package/dist/components-app-sidebar-app-sidebar.cjs +1 -1
  75. package/dist/components-app-sidebar-app-sidebar.cjs.map +1 -1
  76. package/dist/components-app-sidebar-app-sidebar.js +33 -32
  77. package/dist/components-app-sidebar-app-sidebar.js.map +1 -1
  78. package/dist/components-avatar-uploader-avatar-uploader.cjs +2 -2
  79. package/dist/components-avatar-uploader-avatar-uploader.cjs.map +1 -1
  80. package/dist/components-avatar-uploader-avatar-uploader.js +23 -4
  81. package/dist/components-avatar-uploader-avatar-uploader.js.map +1 -1
  82. package/dist/components-basic-avatar-basic-avatar.cjs +2 -2
  83. package/dist/components-basic-avatar-basic-avatar.cjs.map +1 -1
  84. package/dist/components-basic-avatar-basic-avatar.js +24 -4
  85. package/dist/components-basic-avatar-basic-avatar.js.map +1 -1
  86. package/dist/components-checkbox-group-checkbox-group.cjs +4 -0
  87. package/dist/components-checkbox-group-checkbox-group.cjs.map +1 -0
  88. package/dist/components-checkbox-group-checkbox-group.js +305 -0
  89. package/dist/components-checkbox-group-checkbox-group.js.map +1 -0
  90. package/dist/components-checkbox-group.cjs +2 -0
  91. package/dist/components-checkbox-group.cjs.map +1 -0
  92. package/dist/components-checkbox-group.js +5 -0
  93. package/dist/components-checkbox-group.js.map +1 -0
  94. package/dist/components-data-table-data-table-actions-column.cjs +1 -1
  95. package/dist/components-data-table-data-table-actions-column.cjs.map +1 -1
  96. package/dist/components-data-table-data-table-actions-column.js +6 -5
  97. package/dist/components-data-table-data-table-actions-column.js.map +1 -1
  98. package/dist/components-data-table-data-table-column-visibility.cjs +1 -1
  99. package/dist/components-data-table-data-table-column-visibility.cjs.map +1 -1
  100. package/dist/components-data-table-data-table-column-visibility.js +10 -9
  101. package/dist/components-data-table-data-table-column-visibility.js.map +1 -1
  102. package/dist/components-data-table-data-table-row-actions-column.cjs +1 -1
  103. package/dist/components-data-table-data-table-row-actions-column.cjs.map +1 -1
  104. package/dist/components-data-table-data-table-row-actions-column.js +20 -19
  105. package/dist/components-data-table-data-table-row-actions-column.js.map +1 -1
  106. package/dist/components-files-uploader-files-uploader.cjs +3 -3
  107. package/dist/components-files-uploader-files-uploader.cjs.map +1 -1
  108. package/dist/components-files-uploader-files-uploader.js +41 -38
  109. package/dist/components-files-uploader-files-uploader.js.map +1 -1
  110. package/dist/components-icons-ArrowCounterClockwise.cjs +2 -0
  111. package/dist/components-icons-ArrowCounterClockwise.cjs.map +1 -0
  112. package/dist/components-icons-ArrowCounterClockwise.js +5 -0
  113. package/dist/components-icons-ArrowCounterClockwise.js.map +1 -0
  114. package/dist/components-icons-BoundingBox.cjs +2 -0
  115. package/dist/components-icons-BoundingBox.cjs.map +1 -0
  116. package/dist/components-icons-BoundingBox.js +5 -0
  117. package/dist/components-icons-BoundingBox.js.map +1 -0
  118. package/dist/components-icons-Briefcase.cjs +2 -0
  119. package/dist/components-icons-Briefcase.cjs.map +1 -0
  120. package/dist/components-icons-Briefcase.js +5 -0
  121. package/dist/components-icons-Briefcase.js.map +1 -0
  122. package/dist/components-icons-Building.cjs +2 -0
  123. package/dist/components-icons-Building.cjs.map +1 -0
  124. package/dist/components-icons-Building.js +5 -0
  125. package/dist/components-icons-Building.js.map +1 -0
  126. package/dist/components-icons-Buildings.cjs +2 -0
  127. package/dist/components-icons-Buildings.cjs.map +1 -0
  128. package/dist/components-icons-Buildings.js +5 -0
  129. package/dist/components-icons-Buildings.js.map +1 -0
  130. package/dist/components-icons-CaretDown.cjs +2 -0
  131. package/dist/components-icons-CaretDown.cjs.map +1 -0
  132. package/dist/components-icons-CaretDown.js +5 -0
  133. package/dist/components-icons-CaretDown.js.map +1 -0
  134. package/dist/components-icons-CaretLeft.cjs +2 -0
  135. package/dist/components-icons-CaretLeft.cjs.map +1 -0
  136. package/dist/components-icons-CaretLeft.js +5 -0
  137. package/dist/components-icons-CaretLeft.js.map +1 -0
  138. package/dist/components-icons-CaretRight.cjs +2 -0
  139. package/dist/components-icons-CaretRight.cjs.map +1 -0
  140. package/dist/components-icons-CaretRight.js +5 -0
  141. package/dist/components-icons-CaretRight.js.map +1 -0
  142. package/dist/components-icons-CaretUp.cjs +2 -0
  143. package/dist/components-icons-CaretUp.cjs.map +1 -0
  144. package/dist/components-icons-CaretUp.js +5 -0
  145. package/dist/components-icons-CaretUp.js.map +1 -0
  146. package/dist/components-icons-CaretUpDown.cjs +2 -0
  147. package/dist/components-icons-CaretUpDown.cjs.map +1 -0
  148. package/dist/components-icons-CaretUpDown.js +5 -0
  149. package/dist/components-icons-CaretUpDown.js.map +1 -0
  150. package/dist/components-icons-ChartLine.cjs +2 -0
  151. package/dist/components-icons-ChartLine.cjs.map +1 -0
  152. package/dist/components-icons-ChartLine.js +5 -0
  153. package/dist/components-icons-ChartLine.js.map +1 -0
  154. package/dist/components-icons-Check.cjs +2 -0
  155. package/dist/components-icons-Check.cjs.map +1 -0
  156. package/dist/components-icons-Check.js +5 -0
  157. package/dist/components-icons-Check.js.map +1 -0
  158. package/dist/components-icons-CheckCircle.cjs +2 -0
  159. package/dist/components-icons-CheckCircle.cjs.map +1 -0
  160. package/dist/components-icons-CheckCircle.js +5 -0
  161. package/dist/components-icons-CheckCircle.js.map +1 -0
  162. package/dist/components-icons-Clock.cjs +2 -0
  163. package/dist/components-icons-Clock.cjs.map +1 -0
  164. package/dist/components-icons-Clock.js +5 -0
  165. package/dist/components-icons-Clock.js.map +1 -0
  166. package/dist/components-icons-CreditCard.cjs +2 -0
  167. package/dist/components-icons-CreditCard.cjs.map +1 -0
  168. package/dist/components-icons-CreditCard.js +5 -0
  169. package/dist/components-icons-CreditCard.js.map +1 -0
  170. package/dist/components-icons-DotsThree.cjs +2 -0
  171. package/dist/components-icons-DotsThree.cjs.map +1 -0
  172. package/dist/components-icons-DotsThree.js +5 -0
  173. package/dist/components-icons-DotsThree.js.map +1 -0
  174. package/dist/components-icons-DownloadSimple.cjs +2 -0
  175. package/dist/components-icons-DownloadSimple.cjs.map +1 -0
  176. package/dist/components-icons-DownloadSimple.js +5 -0
  177. package/dist/components-icons-DownloadSimple.js.map +1 -0
  178. package/dist/components-icons-EnvelopeSimple.cjs +2 -0
  179. package/dist/components-icons-EnvelopeSimple.cjs.map +1 -0
  180. package/dist/components-icons-EnvelopeSimple.js +5 -0
  181. package/dist/components-icons-EnvelopeSimple.js.map +1 -0
  182. package/dist/components-icons-Eye.cjs +2 -0
  183. package/dist/components-icons-Eye.cjs.map +1 -0
  184. package/dist/components-icons-Eye.js +5 -0
  185. package/dist/components-icons-Eye.js.map +1 -0
  186. package/dist/components-icons-EyeSlash.cjs +2 -0
  187. package/dist/components-icons-EyeSlash.cjs.map +1 -0
  188. package/dist/components-icons-EyeSlash.js +5 -0
  189. package/dist/components-icons-EyeSlash.js.map +1 -0
  190. package/dist/components-icons-FileText.cjs +2 -0
  191. package/dist/components-icons-FileText.cjs.map +1 -0
  192. package/dist/components-icons-FileText.js +5 -0
  193. package/dist/components-icons-FileText.js.map +1 -0
  194. package/dist/components-icons-Folder.cjs +2 -0
  195. package/dist/components-icons-Folder.cjs.map +1 -0
  196. package/dist/components-icons-Folder.js +5 -0
  197. package/dist/components-icons-Folder.js.map +1 -0
  198. package/dist/components-icons-Funnel.cjs +2 -0
  199. package/dist/components-icons-Funnel.cjs.map +1 -0
  200. package/dist/components-icons-Funnel.js +5 -0
  201. package/dist/components-icons-Funnel.js.map +1 -0
  202. package/dist/components-icons-Gear.cjs +2 -0
  203. package/dist/components-icons-Gear.cjs.map +1 -0
  204. package/dist/components-icons-Gear.js +5 -0
  205. package/dist/components-icons-Gear.js.map +1 -0
  206. package/dist/components-icons-Info.cjs +2 -0
  207. package/dist/components-icons-Info.cjs.map +1 -0
  208. package/dist/components-icons-Info.js +5 -0
  209. package/dist/components-icons-Info.js.map +1 -0
  210. package/dist/components-icons-LockKey.cjs +2 -0
  211. package/dist/components-icons-LockKey.cjs.map +1 -0
  212. package/dist/components-icons-LockKey.js +5 -0
  213. package/dist/components-icons-LockKey.js.map +1 -0
  214. package/dist/components-icons-MagnifyingGlass.cjs +2 -0
  215. package/dist/components-icons-MagnifyingGlass.cjs.map +1 -0
  216. package/dist/components-icons-MagnifyingGlass.js +5 -0
  217. package/dist/components-icons-MagnifyingGlass.js.map +1 -0
  218. package/dist/components-icons-MaxLogo.cjs +2 -0
  219. package/dist/components-icons-MaxLogo.cjs.map +1 -0
  220. package/dist/components-icons-MaxLogo.js +5 -0
  221. package/dist/components-icons-MaxLogo.js.map +1 -0
  222. package/dist/components-icons-Package.cjs +2 -0
  223. package/dist/components-icons-Package.cjs.map +1 -0
  224. package/dist/components-icons-Package.js +5 -0
  225. package/dist/components-icons-Package.js.map +1 -0
  226. package/dist/components-icons-Pencil.cjs +2 -0
  227. package/dist/components-icons-Pencil.cjs.map +1 -0
  228. package/dist/components-icons-Pencil.js +5 -0
  229. package/dist/components-icons-Pencil.js.map +1 -0
  230. package/dist/components-icons-Phone.cjs +2 -0
  231. package/dist/components-icons-Phone.cjs.map +1 -0
  232. package/dist/components-icons-Phone.js +5 -0
  233. package/dist/components-icons-Phone.js.map +1 -0
  234. package/dist/components-icons-Plus.cjs +2 -0
  235. package/dist/components-icons-Plus.cjs.map +1 -0
  236. package/dist/components-icons-Plus.js +5 -0
  237. package/dist/components-icons-Plus.js.map +1 -0
  238. package/dist/components-icons-PresentationChart.cjs +2 -0
  239. package/dist/components-icons-PresentationChart.cjs.map +1 -0
  240. package/dist/components-icons-PresentationChart.js +5 -0
  241. package/dist/components-icons-PresentationChart.js.map +1 -0
  242. package/dist/components-icons-SpinnerGap.cjs +2 -0
  243. package/dist/components-icons-SpinnerGap.cjs.map +1 -0
  244. package/dist/components-icons-SpinnerGap.js +5 -0
  245. package/dist/components-icons-SpinnerGap.js.map +1 -0
  246. package/dist/components-icons-TelegramLogo.cjs +2 -0
  247. package/dist/components-icons-TelegramLogo.cjs.map +1 -0
  248. package/dist/components-icons-TelegramLogo.js +5 -0
  249. package/dist/components-icons-TelegramLogo.js.map +1 -0
  250. package/dist/components-icons-Trash.cjs +2 -0
  251. package/dist/components-icons-Trash.cjs.map +1 -0
  252. package/dist/components-icons-Trash.js +5 -0
  253. package/dist/components-icons-Trash.js.map +1 -0
  254. package/dist/components-icons-UserCircleGear.cjs +2 -0
  255. package/dist/components-icons-UserCircleGear.cjs.map +1 -0
  256. package/dist/components-icons-UserCircleGear.js +5 -0
  257. package/dist/components-icons-UserCircleGear.js.map +1 -0
  258. package/dist/components-icons-Users.cjs +2 -0
  259. package/dist/components-icons-Users.cjs.map +1 -0
  260. package/dist/components-icons-Users.js +5 -0
  261. package/dist/components-icons-Users.js.map +1 -0
  262. package/dist/components-icons-UsersFour.cjs +2 -0
  263. package/dist/components-icons-UsersFour.cjs.map +1 -0
  264. package/dist/components-icons-UsersFour.js +5 -0
  265. package/dist/components-icons-UsersFour.js.map +1 -0
  266. package/dist/components-icons-Warning.cjs +2 -0
  267. package/dist/components-icons-Warning.cjs.map +1 -0
  268. package/dist/components-icons-Warning.js +5 -0
  269. package/dist/components-icons-Warning.js.map +1 -0
  270. package/dist/components-icons-WarningCircle.cjs +2 -0
  271. package/dist/components-icons-WarningCircle.cjs.map +1 -0
  272. package/dist/components-icons-WarningCircle.js +5 -0
  273. package/dist/components-icons-WarningCircle.js.map +1 -0
  274. package/dist/components-icons-WhatsAppLogoFilled.cjs +2 -0
  275. package/dist/components-icons-WhatsAppLogoFilled.cjs.map +1 -0
  276. package/dist/components-icons-WhatsAppLogoFilled.js +5 -0
  277. package/dist/components-icons-WhatsAppLogoFilled.js.map +1 -0
  278. package/dist/components-icons-Wrench.cjs +2 -0
  279. package/dist/components-icons-Wrench.cjs.map +1 -0
  280. package/dist/components-icons-Wrench.js +5 -0
  281. package/dist/components-icons-Wrench.js.map +1 -0
  282. package/dist/components-icons-X.cjs +2 -0
  283. package/dist/components-icons-X.cjs.map +1 -0
  284. package/dist/components-icons-X.js +5 -0
  285. package/dist/components-icons-X.js.map +1 -0
  286. package/dist/components-icons-XCircle.cjs +2 -0
  287. package/dist/components-icons-XCircle.cjs.map +1 -0
  288. package/dist/components-icons-XCircle.js +5 -0
  289. package/dist/components-icons-XCircle.js.map +1 -0
  290. package/dist/components-icons-stroke-icon.cjs +2 -0
  291. package/dist/components-icons-stroke-icon.cjs.map +1 -0
  292. package/dist/components-icons-stroke-icon.js +39 -0
  293. package/dist/components-icons-stroke-icon.js.map +1 -0
  294. package/dist/components-icons.cjs +2 -0
  295. package/dist/components-icons.cjs.map +1 -0
  296. package/dist/components-icons.js +97 -0
  297. package/dist/components-icons.js.map +1 -0
  298. package/dist/components-input-contact-input-contact.cjs +4 -4
  299. package/dist/components-input-contact-input-contact.cjs.map +1 -1
  300. package/dist/components-input-contact-input-contact.js +103 -74
  301. package/dist/components-input-contact-input-contact.js.map +1 -1
  302. package/dist/components-input-password-input-password.cjs +1 -1
  303. package/dist/components-input-password-input-password.cjs.map +1 -1
  304. package/dist/components-input-password-input-password.js +14 -52
  305. package/dist/components-input-password-input-password.js.map +1 -1
  306. package/dist/components-ui-calendar-calendar.cjs +1 -1
  307. package/dist/components-ui-calendar-calendar.js +4 -3
  308. package/dist/components-ui-calendar-calendar.js.map +1 -1
  309. package/dist/components-ui-calendar.cjs +1 -1
  310. package/dist/components-ui-calendar.js +2 -2
  311. package/dist/components-ui-checkbox-checkbox.cjs +1 -1
  312. package/dist/components-ui-checkbox-checkbox.cjs.map +1 -1
  313. package/dist/components-ui-checkbox-checkbox.js +15 -14
  314. package/dist/components-ui-checkbox-checkbox.js.map +1 -1
  315. package/dist/components-ui-combobox-combobox.cjs +1 -1
  316. package/dist/components-ui-combobox-combobox.cjs.map +1 -1
  317. package/dist/components-ui-combobox-combobox.js +31 -30
  318. package/dist/components-ui-combobox-combobox.js.map +1 -1
  319. package/dist/components-ui-dialog-dialog.cjs +1 -1
  320. package/dist/components-ui-dialog-dialog.cjs.map +1 -1
  321. package/dist/components-ui-dialog-dialog.js +26 -25
  322. package/dist/components-ui-dialog-dialog.js.map +1 -1
  323. package/dist/components-ui-dropdown-menu-dropdown-menu.cjs +2 -2
  324. package/dist/components-ui-dropdown-menu-dropdown-menu.cjs.map +1 -1
  325. package/dist/components-ui-dropdown-menu-dropdown-menu.js +46 -45
  326. package/dist/components-ui-dropdown-menu-dropdown-menu.js.map +1 -1
  327. package/dist/components-ui-icon-icon-map.cjs +2 -0
  328. package/dist/components-ui-icon-icon-map.cjs.map +1 -0
  329. package/dist/components-ui-icon-icon-map.js +71 -0
  330. package/dist/components-ui-icon-icon-map.js.map +1 -0
  331. package/dist/components-ui-icon-icon.cjs +1 -1
  332. package/dist/components-ui-icon-icon.cjs.map +1 -1
  333. package/dist/components-ui-icon-icon.js +27 -54
  334. package/dist/components-ui-icon-icon.js.map +1 -1
  335. package/dist/components-ui-icon.cjs +1 -1
  336. package/dist/components-ui-icon.js +3 -1
  337. package/dist/components-ui-icon.js.map +1 -1
  338. package/dist/components-ui-pagination-pagination.cjs +2 -2
  339. package/dist/components-ui-pagination-pagination.cjs.map +1 -1
  340. package/dist/components-ui-pagination-pagination.js +48 -45
  341. package/dist/components-ui-pagination-pagination.js.map +1 -1
  342. package/dist/components-ui-select-calendar-menu-select-calendar-menu.cjs +1 -1
  343. package/dist/components-ui-select-calendar-menu-select-calendar-menu.cjs.map +1 -1
  344. package/dist/components-ui-select-calendar-menu-select-calendar-menu.js +4 -3
  345. package/dist/components-ui-select-calendar-menu-select-calendar-menu.js.map +1 -1
  346. package/dist/components-ui-select-select.cjs +1 -1
  347. package/dist/components-ui-select-select.cjs.map +1 -1
  348. package/dist/components-ui-select-select.js +42 -41
  349. package/dist/components-ui-select-select.js.map +1 -1
  350. package/dist/components-ui-sonner-sonner.cjs +1 -1
  351. package/dist/components-ui-sonner-sonner.cjs.map +1 -1
  352. package/dist/components-ui-sonner-sonner.js +38 -32
  353. package/dist/components-ui-sonner-sonner.js.map +1 -1
  354. package/dist/index.cjs +1 -1
  355. package/dist/index.d.ts +9 -7
  356. package/dist/index.js +228 -225
  357. package/dist/index.js.map +1 -1
  358. package/package.json +33 -16
  359. package/dist/calendar-B5QCV34E.cjs +0 -2
@@ -1 +1 @@
1
- {"version":3,"file":"components-data-table-data-table-row-actions-column.cjs","sources":["../src/components/data-table/data-table-row-actions-column.tsx"],"sourcesContent":["import type { ColumnDef, Row } from \"@tanstack/react-table\";\nimport type { IconName } from \"phosphor-strokes-icons/by-name\";\nimport type { ReactNode } from \"react\";\n\nimport { Button } from \"@/components/ui/button\";\nimport {\n ConfigurableDropdownMenu,\n type DropdownMenuConfigNode,\n} from \"@/components/ui/dropdown-menu\";\nimport { Icon } from \"@/components/ui/icon\";\nimport { cn } from \"@/lib/utils\";\n\nimport { createDataTableActionsColumn } from \"./data-table-actions-column\";\n\ntype DataTableRowActionContext<TData> = {\n row: Row<TData>;\n data: TData;\n};\n\ntype DataTableRowActionBase = {\n hidden?: boolean;\n id?: string;\n};\n\ntype DataTableRowActionLabel = DataTableRowActionBase & {\n label: string;\n type: \"label\";\n};\n\ntype DataTableRowActionSeparator = DataTableRowActionBase & {\n type: \"separator\";\n};\n\ntype DataTableRowActionItem<TData> = DataTableRowActionBase & {\n type?: \"item\";\n label: string;\n icon?: ReactNode;\n iconType?: IconName;\n shortcut?: string;\n disabled?: boolean;\n readOnly?: boolean;\n alert?: boolean;\n children?: DataTableRowActionNode<TData>[];\n onSelect?: (ctx: DataTableRowActionContext<TData>) => void;\n};\n\ntype DataTableRowActionNode<TData> =\n | DataTableRowActionItem<TData>\n | DataTableRowActionLabel\n | DataTableRowActionSeparator;\n\ntype DataTableRowActionsColumnOptions<TData> = {\n id?: string;\n header?: ColumnDef<TData>[\"header\"];\n align?: \"start\" | \"center\" | \"end\";\n editingRowId?: string | null;\n trigger?: (ctx: DataTableRowActionContext<TData>) => ReactNode;\n actions?:\n | DataTableRowActionNode<TData>[]\n | ((ctx: DataTableRowActionContext<TData>) => DataTableRowActionNode<TData>[]);\n onStartEdit?: (ctx: DataTableRowActionContext<TData>) => void;\n onSaveEdit?: (ctx: DataTableRowActionContext<TData>) => void;\n onCancelEdit?: (ctx: DataTableRowActionContext<TData>) => void;\n onDelete?: (ctx: DataTableRowActionContext<TData>) => void;\n includeDefaultActions?: boolean;\n labels?: {\n cancelAriaLabel?: string;\n delete?: string;\n edit?: string;\n empty?: string;\n saveAriaLabel?: string;\n };\n};\n\nfunction mapRowActionNode<TData>(\n item: DataTableRowActionNode<TData>,\n ctx: DataTableRowActionContext<TData>,\n): DropdownMenuConfigNode | null {\n if (item.hidden) {\n return null;\n }\n\n if (item.type === \"separator\") {\n return {\n id: item.id,\n type: \"separator\",\n };\n }\n\n if (item.type === \"label\") {\n return {\n id: item.id,\n type: \"label\",\n label: item.label,\n };\n }\n\n const children = item.children\n ?.map((child) => mapRowActionNode(child, ctx))\n .filter((child): child is DropdownMenuConfigNode => child !== null);\n\n return {\n id: item.id,\n type: \"item\",\n label: item.label,\n disabled: item.disabled,\n readOnly: item.readOnly,\n alert: item.alert,\n icon: item.icon,\n iconType: item.iconType,\n shortcut: item.shortcut,\n children,\n onSelect: item.onSelect ? () => item.onSelect?.(ctx) : undefined,\n };\n}\n\nexport function createDataTableRowActionsColumn<TData>(\n options: DataTableRowActionsColumnOptions<TData> = {},\n): ColumnDef<TData> {\n const {\n id = \"actions\",\n header,\n align = \"end\",\n editingRowId,\n trigger,\n actions,\n onStartEdit,\n onSaveEdit,\n onCancelEdit,\n onDelete,\n labels,\n includeDefaultActions = true,\n } = options;\n\n return createDataTableActionsColumn<TData>({\n id,\n header,\n renderCell: ({ row, data }) => {\n const ctx = { row, data };\n const isEditingRow = editingRowId === row.id;\n\n if (isEditingRow && (onSaveEdit || onCancelEdit)) {\n return (\n <div\n className=\"flex flex-col items-center gap-6\"\n onClick={(event) => event.stopPropagation()}\n onKeyDown={(event) => event.stopPropagation()}\n role=\"presentation\"\n >\n {onSaveEdit ? (\n <Button\n type=\"button\"\n variant=\"circleGhost\"\n size=\"icon-md\"\n aria-label={labels?.saveAriaLabel ?? \"Сохранить изменения\"}\n onClick={() => onSaveEdit(ctx)}\n >\n <Icon\n type=\"check-circle\"\n className=\"text-success-text\"\n aria-hidden\n />\n </Button>\n ) : null}\n {onCancelEdit ? (\n <Button\n type=\"button\"\n variant=\"circleGhost\"\n size=\"icon-md\"\n aria-label={labels?.cancelAriaLabel ?? \"Отменить редактирование\"}\n onClick={() => onCancelEdit(ctx)}\n >\n <Icon\n type=\"x-circle\"\n className=\"text-error-text\"\n aria-hidden\n />\n </Button>\n ) : null}\n </div>\n );\n }\n\n const resolvedActions =\n typeof actions === \"function\" ? actions(ctx) : (actions ?? []);\n const defaultActions: DataTableRowActionNode<TData>[] = [\n ...(onStartEdit\n ? [\n {\n id: `${id}-edit-${row.id}`,\n label: labels?.edit ?? \"Редактировать\",\n onSelect: onStartEdit,\n iconType: \"pencil-simple\",\n } satisfies DataTableRowActionItem<TData>,\n ]\n : []),\n ...(onDelete\n ? [\n { type: \"separator\" } satisfies DataTableRowActionSeparator,\n {\n id: `${id}-delete-${row.id}`,\n label: labels?.delete ?? \"Удалить\",\n iconType: \"trash\",\n alert: true,\n onSelect: onDelete,\n } satisfies DataTableRowActionItem<TData>,\n ]\n : []),\n ];\n\n const menuItems = [\n ...resolvedActions,\n ...(includeDefaultActions ? defaultActions : []),\n ]\n .map((item) => mapRowActionNode(item, ctx))\n .filter((item): item is DropdownMenuConfigNode => item !== null);\n\n const resolvedTrigger = trigger ? (\n trigger(ctx)\n ) : (\n <Button\n type=\"button\"\n variant=\"circleGhost\"\n size=\"icon-xs\"\n aria-label=\"Открыть действия строки\"\n >\n <Icon\n type=\"dots-three\"\n aria-hidden\n />\n </Button>\n );\n\n return (\n <div\n className={cn(\"flex justify-end\")}\n onClick={(event) => event.stopPropagation()}\n onKeyDown={(event) => event.stopPropagation()}\n role=\"presentation\"\n >\n <ConfigurableDropdownMenu\n trigger={resolvedTrigger}\n items={\n menuItems.length > 0\n ? menuItems\n : [\n {\n id: `${id}-empty-${row.id}`,\n type: \"item\",\n label: labels?.empty ?? \"Нет действий\",\n readOnly: true,\n },\n ]\n }\n contentProps={{ align }}\n />\n </div>\n );\n },\n });\n}\n\nexport type {\n DataTableRowActionContext,\n DataTableRowActionItem,\n DataTableRowActionLabel,\n DataTableRowActionNode,\n DataTableRowActionSeparator,\n DataTableRowActionsColumnOptions,\n};\n"],"names":["mapRowActionNode","item","ctx","children","child","createDataTableRowActionsColumn","options","id","header","align","editingRowId","trigger","actions","onStartEdit","onSaveEdit","onCancelEdit","onDelete","labels","includeDefaultActions","createDataTableActionsColumn","row","data","jsxs","event","jsx","Button","Icon","resolvedActions","defaultActions","menuItems","resolvedTrigger","cn","ConfigurableDropdownMenu"],"mappings":"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"}
1
+ {"version":3,"file":"components-data-table-data-table-row-actions-column.cjs","sources":["../src/components/data-table/data-table-row-actions-column.tsx"],"sourcesContent":["import type { ColumnDef, Row } from \"@tanstack/react-table\";\nimport type { ReactNode } from \"react\";\n\nimport { Button } from \"@/components/ui/button\";\nimport {\n ConfigurableDropdownMenu,\n type DropdownMenuConfigNode,\n} from \"@/components/ui/dropdown-menu\";\nimport { Icon } from \"@/components/ui/icon\";\nimport type { IconType } from \"@/components/ui/icon\";\nimport { cn } from \"@/lib/utils\";\n\nimport { createDataTableActionsColumn } from \"./data-table-actions-column\";\n\ntype DataTableRowActionContext<TData> = {\n row: Row<TData>;\n data: TData;\n};\n\ntype DataTableRowActionBase = {\n hidden?: boolean;\n id?: string;\n};\n\ntype DataTableRowActionLabel = DataTableRowActionBase & {\n label: string;\n type: \"label\";\n};\n\ntype DataTableRowActionSeparator = DataTableRowActionBase & {\n type: \"separator\";\n};\n\ntype DataTableRowActionItem<TData> = DataTableRowActionBase & {\n type?: \"item\";\n label: string;\n icon?: ReactNode;\n iconType?: IconType;\n shortcut?: string;\n disabled?: boolean;\n readOnly?: boolean;\n alert?: boolean;\n children?: DataTableRowActionNode<TData>[];\n onSelect?: (ctx: DataTableRowActionContext<TData>) => void;\n};\n\ntype DataTableRowActionNode<TData> =\n | DataTableRowActionItem<TData>\n | DataTableRowActionLabel\n | DataTableRowActionSeparator;\n\ntype DataTableRowActionsColumnOptions<TData> = {\n id?: string;\n header?: ColumnDef<TData>[\"header\"];\n align?: \"start\" | \"center\" | \"end\";\n editingRowId?: string | null;\n trigger?: (ctx: DataTableRowActionContext<TData>) => ReactNode;\n actions?:\n | DataTableRowActionNode<TData>[]\n | ((ctx: DataTableRowActionContext<TData>) => DataTableRowActionNode<TData>[]);\n onStartEdit?: (ctx: DataTableRowActionContext<TData>) => void;\n onSaveEdit?: (ctx: DataTableRowActionContext<TData>) => void;\n onCancelEdit?: (ctx: DataTableRowActionContext<TData>) => void;\n onDelete?: (ctx: DataTableRowActionContext<TData>) => void;\n includeDefaultActions?: boolean;\n labels?: {\n cancelAriaLabel?: string;\n delete?: string;\n edit?: string;\n empty?: string;\n saveAriaLabel?: string;\n };\n};\n\nfunction mapRowActionNode<TData>(\n item: DataTableRowActionNode<TData>,\n ctx: DataTableRowActionContext<TData>,\n): DropdownMenuConfigNode | null {\n if (item.hidden) {\n return null;\n }\n\n if (item.type === \"separator\") {\n return {\n id: item.id,\n type: \"separator\",\n };\n }\n\n if (item.type === \"label\") {\n return {\n id: item.id,\n type: \"label\",\n label: item.label,\n };\n }\n\n const children = item.children\n ?.map((child) => mapRowActionNode(child, ctx))\n .filter((child): child is DropdownMenuConfigNode => child !== null);\n\n return {\n id: item.id,\n type: \"item\",\n label: item.label,\n disabled: item.disabled,\n readOnly: item.readOnly,\n alert: item.alert,\n icon: item.icon,\n iconType: item.iconType,\n shortcut: item.shortcut,\n children,\n onSelect: item.onSelect ? () => item.onSelect?.(ctx) : undefined,\n };\n}\n\nexport function createDataTableRowActionsColumn<TData>(\n options: DataTableRowActionsColumnOptions<TData> = {},\n): ColumnDef<TData> {\n const {\n id = \"actions\",\n header,\n align = \"end\",\n editingRowId,\n trigger,\n actions,\n onStartEdit,\n onSaveEdit,\n onCancelEdit,\n onDelete,\n labels,\n includeDefaultActions = true,\n } = options;\n\n return createDataTableActionsColumn<TData>({\n id,\n header,\n renderCell: ({ row, data }) => {\n const ctx = { row, data };\n const isEditingRow = editingRowId === row.id;\n\n if (isEditingRow && (onSaveEdit || onCancelEdit)) {\n return (\n <div\n className=\"flex flex-col items-center gap-6\"\n onClick={(event) => event.stopPropagation()}\n onKeyDown={(event) => event.stopPropagation()}\n role=\"presentation\"\n >\n {onSaveEdit ? (\n <Button\n type=\"button\"\n variant=\"circleGhost\"\n size=\"icon-md\"\n aria-label={labels?.saveAriaLabel ?? \"Сохранить изменения\"}\n onClick={() => onSaveEdit(ctx)}\n >\n <Icon\n type=\"check-circle\"\n className=\"text-success-text\"\n aria-hidden\n />\n </Button>\n ) : null}\n {onCancelEdit ? (\n <Button\n type=\"button\"\n variant=\"circleGhost\"\n size=\"icon-md\"\n aria-label={labels?.cancelAriaLabel ?? \"Отменить редактирование\"}\n onClick={() => onCancelEdit(ctx)}\n >\n <Icon\n type=\"x-circle\"\n className=\"text-error-text\"\n aria-hidden\n />\n </Button>\n ) : null}\n </div>\n );\n }\n\n const resolvedActions =\n typeof actions === \"function\" ? actions(ctx) : (actions ?? []);\n const defaultActions: DataTableRowActionNode<TData>[] = [\n ...(onStartEdit\n ? [\n {\n id: `${id}-edit-${row.id}`,\n label: labels?.edit ?? \"Редактировать\",\n onSelect: onStartEdit,\n iconType: \"pencil-simple\",\n } satisfies DataTableRowActionItem<TData>,\n ]\n : []),\n ...(onDelete\n ? [\n { type: \"separator\" } satisfies DataTableRowActionSeparator,\n {\n id: `${id}-delete-${row.id}`,\n label: labels?.delete ?? \"Удалить\",\n iconType: \"trash\",\n alert: true,\n onSelect: onDelete,\n } satisfies DataTableRowActionItem<TData>,\n ]\n : []),\n ];\n\n const menuItems = [\n ...resolvedActions,\n ...(includeDefaultActions ? defaultActions : []),\n ]\n .map((item) => mapRowActionNode(item, ctx))\n .filter((item): item is DropdownMenuConfigNode => item !== null);\n\n const resolvedTrigger = trigger ? (\n trigger(ctx)\n ) : (\n <Button\n type=\"button\"\n variant=\"circleGhost\"\n size=\"icon-xs\"\n aria-label=\"Открыть действия строки\"\n >\n <Icon\n type=\"dots-three\"\n aria-hidden\n />\n </Button>\n );\n\n return (\n <div\n className={cn(\"flex justify-end\")}\n onClick={(event) => event.stopPropagation()}\n onKeyDown={(event) => event.stopPropagation()}\n role=\"presentation\"\n >\n <ConfigurableDropdownMenu\n trigger={resolvedTrigger}\n items={\n menuItems.length > 0\n ? menuItems\n : [\n {\n id: `${id}-empty-${row.id}`,\n type: \"item\",\n label: labels?.empty ?? \"Нет действий\",\n readOnly: true,\n },\n ]\n }\n contentProps={{ align }}\n />\n </div>\n );\n },\n });\n}\n\nexport type {\n DataTableRowActionContext,\n DataTableRowActionItem,\n DataTableRowActionLabel,\n DataTableRowActionNode,\n DataTableRowActionSeparator,\n DataTableRowActionsColumnOptions,\n};\n"],"names":["mapRowActionNode","item","ctx","children","child","createDataTableRowActionsColumn","options","id","header","align","editingRowId","trigger","actions","onStartEdit","onSaveEdit","onCancelEdit","onDelete","labels","includeDefaultActions","createDataTableActionsColumn","row","data","jsxs","event","jsx","Button","Icon","resolvedActions","defaultActions","menuItems","resolvedTrigger","cn","ConfigurableDropdownMenu"],"mappings":"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"}
@@ -3,9 +3,10 @@ import { Button as u } from "./components-ui-button-button.js";
3
3
  import "./components-ui-button-button.styles.js";
4
4
  import { ConfigurableDropdownMenu as $ } from "./components-ui-dropdown-menu-dropdown-menu.js";
5
5
  import { Icon as y } from "./components-ui-icon-icon.js";
6
+ import "phosphor-strokes-icons/icons";
6
7
  import { cn as k } from "./lib-utils.js";
7
8
  import { createDataTableActionsColumn as E } from "./components-data-table-data-table-actions-column.js";
8
- function m(e, o) {
9
+ function g(e, o) {
9
10
  if (e.hidden)
10
11
  return null;
11
12
  if (e.type === "separator")
@@ -19,7 +20,7 @@ function m(e, o) {
19
20
  type: "label",
20
21
  label: e.label
21
22
  };
22
- const c = e.children?.map((i) => m(i, o)).filter((i) => i !== null);
23
+ const c = e.children?.map((i) => g(i, o)).filter((i) => i !== null);
23
24
  return {
24
25
  id: e.id,
25
26
  type: "item",
@@ -34,7 +35,7 @@ function m(e, o) {
34
35
  onSelect: e.onSelect ? () => e.onSelect?.(o) : void 0
35
36
  };
36
37
  }
37
- function O(e = {}) {
38
+ function K(e = {}) {
38
39
  const {
39
40
  id: o = "actions",
40
41
  header: c,
@@ -46,15 +47,15 @@ function O(e = {}) {
46
47
  onSaveEdit: s,
47
48
  onCancelEdit: p,
48
49
  onDelete: h,
49
- labels: l,
50
+ labels: r,
50
51
  includeDefaultActions: v = !0
51
52
  } = e;
52
53
  return E({
53
54
  id: o,
54
55
  header: c,
55
- renderCell: ({ row: r, data: C }) => {
56
- const a = { row: r, data: C };
57
- if (x === r.id && (s || p))
56
+ renderCell: ({ row: l, data: C }) => {
57
+ const a = { row: l, data: C };
58
+ if (x === l.id && (s || p))
58
59
  return /* @__PURE__ */ T(
59
60
  "div",
60
61
  {
@@ -69,7 +70,7 @@ function O(e = {}) {
69
70
  type: "button",
70
71
  variant: "circleGhost",
71
72
  size: "icon-md",
72
- "aria-label": l?.saveAriaLabel ?? "Сохранить изменения",
73
+ "aria-label": r?.saveAriaLabel ?? "Сохранить изменения",
73
74
  onClick: () => s(a),
74
75
  children: /* @__PURE__ */ n(
75
76
  y,
@@ -87,7 +88,7 @@ function O(e = {}) {
87
88
  type: "button",
88
89
  variant: "circleGhost",
89
90
  size: "icon-md",
90
- "aria-label": l?.cancelAriaLabel ?? "Отменить редактирование",
91
+ "aria-label": r?.cancelAriaLabel ?? "Отменить редактирование",
91
92
  onClick: () => p(a),
92
93
  children: /* @__PURE__ */ n(
93
94
  y,
@@ -105,8 +106,8 @@ function O(e = {}) {
105
106
  const A = typeof d == "function" ? d(a) : d ?? [], D = [
106
107
  ...f ? [
107
108
  {
108
- id: `${o}-edit-${r.id}`,
109
- label: l?.edit ?? "Редактировать",
109
+ id: `${o}-edit-${l.id}`,
110
+ label: r?.edit ?? "Редактировать",
110
111
  onSelect: f,
111
112
  iconType: "pencil-simple"
112
113
  }
@@ -114,17 +115,17 @@ function O(e = {}) {
114
115
  ...h ? [
115
116
  { type: "separator" },
116
117
  {
117
- id: `${o}-delete-${r.id}`,
118
- label: l?.delete ?? "Удалить",
118
+ id: `${o}-delete-${l.id}`,
119
+ label: r?.delete ?? "Удалить",
119
120
  iconType: "trash",
120
121
  alert: !0,
121
122
  onSelect: h
122
123
  }
123
124
  ] : []
124
- ], g = [
125
+ ], m = [
125
126
  ...A,
126
127
  ...v ? D : []
127
- ].map((t) => m(t, a)).filter((t) => t !== null), S = b ? b(a) : /* @__PURE__ */ n(
128
+ ].map((t) => g(t, a)).filter((t) => t !== null), S = b ? b(a) : /* @__PURE__ */ n(
128
129
  u,
129
130
  {
130
131
  type: "button",
@@ -151,11 +152,11 @@ function O(e = {}) {
151
152
  $,
152
153
  {
153
154
  trigger: S,
154
- items: g.length > 0 ? g : [
155
+ items: m.length > 0 ? m : [
155
156
  {
156
- id: `${o}-empty-${r.id}`,
157
+ id: `${o}-empty-${l.id}`,
157
158
  type: "item",
158
- label: l?.empty ?? "Нет действий",
159
+ label: r?.empty ?? "Нет действий",
159
160
  readOnly: !0
160
161
  }
161
162
  ],
@@ -168,6 +169,6 @@ function O(e = {}) {
168
169
  });
169
170
  }
170
171
  export {
171
- O as createDataTableRowActionsColumn
172
+ K as createDataTableRowActionsColumn
172
173
  };
173
174
  //# sourceMappingURL=components-data-table-data-table-row-actions-column.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"components-data-table-data-table-row-actions-column.js","sources":["../src/components/data-table/data-table-row-actions-column.tsx"],"sourcesContent":["import type { ColumnDef, Row } from \"@tanstack/react-table\";\nimport type { IconName } from \"phosphor-strokes-icons/by-name\";\nimport type { ReactNode } from \"react\";\n\nimport { Button } from \"@/components/ui/button\";\nimport {\n ConfigurableDropdownMenu,\n type DropdownMenuConfigNode,\n} from \"@/components/ui/dropdown-menu\";\nimport { Icon } from \"@/components/ui/icon\";\nimport { cn } from \"@/lib/utils\";\n\nimport { createDataTableActionsColumn } from \"./data-table-actions-column\";\n\ntype DataTableRowActionContext<TData> = {\n row: Row<TData>;\n data: TData;\n};\n\ntype DataTableRowActionBase = {\n hidden?: boolean;\n id?: string;\n};\n\ntype DataTableRowActionLabel = DataTableRowActionBase & {\n label: string;\n type: \"label\";\n};\n\ntype DataTableRowActionSeparator = DataTableRowActionBase & {\n type: \"separator\";\n};\n\ntype DataTableRowActionItem<TData> = DataTableRowActionBase & {\n type?: \"item\";\n label: string;\n icon?: ReactNode;\n iconType?: IconName;\n shortcut?: string;\n disabled?: boolean;\n readOnly?: boolean;\n alert?: boolean;\n children?: DataTableRowActionNode<TData>[];\n onSelect?: (ctx: DataTableRowActionContext<TData>) => void;\n};\n\ntype DataTableRowActionNode<TData> =\n | DataTableRowActionItem<TData>\n | DataTableRowActionLabel\n | DataTableRowActionSeparator;\n\ntype DataTableRowActionsColumnOptions<TData> = {\n id?: string;\n header?: ColumnDef<TData>[\"header\"];\n align?: \"start\" | \"center\" | \"end\";\n editingRowId?: string | null;\n trigger?: (ctx: DataTableRowActionContext<TData>) => ReactNode;\n actions?:\n | DataTableRowActionNode<TData>[]\n | ((ctx: DataTableRowActionContext<TData>) => DataTableRowActionNode<TData>[]);\n onStartEdit?: (ctx: DataTableRowActionContext<TData>) => void;\n onSaveEdit?: (ctx: DataTableRowActionContext<TData>) => void;\n onCancelEdit?: (ctx: DataTableRowActionContext<TData>) => void;\n onDelete?: (ctx: DataTableRowActionContext<TData>) => void;\n includeDefaultActions?: boolean;\n labels?: {\n cancelAriaLabel?: string;\n delete?: string;\n edit?: string;\n empty?: string;\n saveAriaLabel?: string;\n };\n};\n\nfunction mapRowActionNode<TData>(\n item: DataTableRowActionNode<TData>,\n ctx: DataTableRowActionContext<TData>,\n): DropdownMenuConfigNode | null {\n if (item.hidden) {\n return null;\n }\n\n if (item.type === \"separator\") {\n return {\n id: item.id,\n type: \"separator\",\n };\n }\n\n if (item.type === \"label\") {\n return {\n id: item.id,\n type: \"label\",\n label: item.label,\n };\n }\n\n const children = item.children\n ?.map((child) => mapRowActionNode(child, ctx))\n .filter((child): child is DropdownMenuConfigNode => child !== null);\n\n return {\n id: item.id,\n type: \"item\",\n label: item.label,\n disabled: item.disabled,\n readOnly: item.readOnly,\n alert: item.alert,\n icon: item.icon,\n iconType: item.iconType,\n shortcut: item.shortcut,\n children,\n onSelect: item.onSelect ? () => item.onSelect?.(ctx) : undefined,\n };\n}\n\nexport function createDataTableRowActionsColumn<TData>(\n options: DataTableRowActionsColumnOptions<TData> = {},\n): ColumnDef<TData> {\n const {\n id = \"actions\",\n header,\n align = \"end\",\n editingRowId,\n trigger,\n actions,\n onStartEdit,\n onSaveEdit,\n onCancelEdit,\n onDelete,\n labels,\n includeDefaultActions = true,\n } = options;\n\n return createDataTableActionsColumn<TData>({\n id,\n header,\n renderCell: ({ row, data }) => {\n const ctx = { row, data };\n const isEditingRow = editingRowId === row.id;\n\n if (isEditingRow && (onSaveEdit || onCancelEdit)) {\n return (\n <div\n className=\"flex flex-col items-center gap-6\"\n onClick={(event) => event.stopPropagation()}\n onKeyDown={(event) => event.stopPropagation()}\n role=\"presentation\"\n >\n {onSaveEdit ? (\n <Button\n type=\"button\"\n variant=\"circleGhost\"\n size=\"icon-md\"\n aria-label={labels?.saveAriaLabel ?? \"Сохранить изменения\"}\n onClick={() => onSaveEdit(ctx)}\n >\n <Icon\n type=\"check-circle\"\n className=\"text-success-text\"\n aria-hidden\n />\n </Button>\n ) : null}\n {onCancelEdit ? (\n <Button\n type=\"button\"\n variant=\"circleGhost\"\n size=\"icon-md\"\n aria-label={labels?.cancelAriaLabel ?? \"Отменить редактирование\"}\n onClick={() => onCancelEdit(ctx)}\n >\n <Icon\n type=\"x-circle\"\n className=\"text-error-text\"\n aria-hidden\n />\n </Button>\n ) : null}\n </div>\n );\n }\n\n const resolvedActions =\n typeof actions === \"function\" ? actions(ctx) : (actions ?? []);\n const defaultActions: DataTableRowActionNode<TData>[] = [\n ...(onStartEdit\n ? [\n {\n id: `${id}-edit-${row.id}`,\n label: labels?.edit ?? \"Редактировать\",\n onSelect: onStartEdit,\n iconType: \"pencil-simple\",\n } satisfies DataTableRowActionItem<TData>,\n ]\n : []),\n ...(onDelete\n ? [\n { type: \"separator\" } satisfies DataTableRowActionSeparator,\n {\n id: `${id}-delete-${row.id}`,\n label: labels?.delete ?? \"Удалить\",\n iconType: \"trash\",\n alert: true,\n onSelect: onDelete,\n } satisfies DataTableRowActionItem<TData>,\n ]\n : []),\n ];\n\n const menuItems = [\n ...resolvedActions,\n ...(includeDefaultActions ? defaultActions : []),\n ]\n .map((item) => mapRowActionNode(item, ctx))\n .filter((item): item is DropdownMenuConfigNode => item !== null);\n\n const resolvedTrigger = trigger ? (\n trigger(ctx)\n ) : (\n <Button\n type=\"button\"\n variant=\"circleGhost\"\n size=\"icon-xs\"\n aria-label=\"Открыть действия строки\"\n >\n <Icon\n type=\"dots-three\"\n aria-hidden\n />\n </Button>\n );\n\n return (\n <div\n className={cn(\"flex justify-end\")}\n onClick={(event) => event.stopPropagation()}\n onKeyDown={(event) => event.stopPropagation()}\n role=\"presentation\"\n >\n <ConfigurableDropdownMenu\n trigger={resolvedTrigger}\n items={\n menuItems.length > 0\n ? menuItems\n : [\n {\n id: `${id}-empty-${row.id}`,\n type: \"item\",\n label: labels?.empty ?? \"Нет действий\",\n readOnly: true,\n },\n ]\n }\n contentProps={{ align }}\n />\n </div>\n );\n },\n });\n}\n\nexport type {\n DataTableRowActionContext,\n DataTableRowActionItem,\n DataTableRowActionLabel,\n DataTableRowActionNode,\n DataTableRowActionSeparator,\n DataTableRowActionsColumnOptions,\n};\n"],"names":["mapRowActionNode","item","ctx","children","child","createDataTableRowActionsColumn","options","id","header","align","editingRowId","trigger","actions","onStartEdit","onSaveEdit","onCancelEdit","onDelete","labels","includeDefaultActions","createDataTableActionsColumn","row","data","jsxs","event","jsx","Button","Icon","resolvedActions","defaultActions","menuItems","resolvedTrigger","cn","ConfigurableDropdownMenu"],"mappings":"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"}
1
+ {"version":3,"file":"components-data-table-data-table-row-actions-column.js","sources":["../src/components/data-table/data-table-row-actions-column.tsx"],"sourcesContent":["import type { ColumnDef, Row } from \"@tanstack/react-table\";\nimport type { ReactNode } from \"react\";\n\nimport { Button } from \"@/components/ui/button\";\nimport {\n ConfigurableDropdownMenu,\n type DropdownMenuConfigNode,\n} from \"@/components/ui/dropdown-menu\";\nimport { Icon } from \"@/components/ui/icon\";\nimport type { IconType } from \"@/components/ui/icon\";\nimport { cn } from \"@/lib/utils\";\n\nimport { createDataTableActionsColumn } from \"./data-table-actions-column\";\n\ntype DataTableRowActionContext<TData> = {\n row: Row<TData>;\n data: TData;\n};\n\ntype DataTableRowActionBase = {\n hidden?: boolean;\n id?: string;\n};\n\ntype DataTableRowActionLabel = DataTableRowActionBase & {\n label: string;\n type: \"label\";\n};\n\ntype DataTableRowActionSeparator = DataTableRowActionBase & {\n type: \"separator\";\n};\n\ntype DataTableRowActionItem<TData> = DataTableRowActionBase & {\n type?: \"item\";\n label: string;\n icon?: ReactNode;\n iconType?: IconType;\n shortcut?: string;\n disabled?: boolean;\n readOnly?: boolean;\n alert?: boolean;\n children?: DataTableRowActionNode<TData>[];\n onSelect?: (ctx: DataTableRowActionContext<TData>) => void;\n};\n\ntype DataTableRowActionNode<TData> =\n | DataTableRowActionItem<TData>\n | DataTableRowActionLabel\n | DataTableRowActionSeparator;\n\ntype DataTableRowActionsColumnOptions<TData> = {\n id?: string;\n header?: ColumnDef<TData>[\"header\"];\n align?: \"start\" | \"center\" | \"end\";\n editingRowId?: string | null;\n trigger?: (ctx: DataTableRowActionContext<TData>) => ReactNode;\n actions?:\n | DataTableRowActionNode<TData>[]\n | ((ctx: DataTableRowActionContext<TData>) => DataTableRowActionNode<TData>[]);\n onStartEdit?: (ctx: DataTableRowActionContext<TData>) => void;\n onSaveEdit?: (ctx: DataTableRowActionContext<TData>) => void;\n onCancelEdit?: (ctx: DataTableRowActionContext<TData>) => void;\n onDelete?: (ctx: DataTableRowActionContext<TData>) => void;\n includeDefaultActions?: boolean;\n labels?: {\n cancelAriaLabel?: string;\n delete?: string;\n edit?: string;\n empty?: string;\n saveAriaLabel?: string;\n };\n};\n\nfunction mapRowActionNode<TData>(\n item: DataTableRowActionNode<TData>,\n ctx: DataTableRowActionContext<TData>,\n): DropdownMenuConfigNode | null {\n if (item.hidden) {\n return null;\n }\n\n if (item.type === \"separator\") {\n return {\n id: item.id,\n type: \"separator\",\n };\n }\n\n if (item.type === \"label\") {\n return {\n id: item.id,\n type: \"label\",\n label: item.label,\n };\n }\n\n const children = item.children\n ?.map((child) => mapRowActionNode(child, ctx))\n .filter((child): child is DropdownMenuConfigNode => child !== null);\n\n return {\n id: item.id,\n type: \"item\",\n label: item.label,\n disabled: item.disabled,\n readOnly: item.readOnly,\n alert: item.alert,\n icon: item.icon,\n iconType: item.iconType,\n shortcut: item.shortcut,\n children,\n onSelect: item.onSelect ? () => item.onSelect?.(ctx) : undefined,\n };\n}\n\nexport function createDataTableRowActionsColumn<TData>(\n options: DataTableRowActionsColumnOptions<TData> = {},\n): ColumnDef<TData> {\n const {\n id = \"actions\",\n header,\n align = \"end\",\n editingRowId,\n trigger,\n actions,\n onStartEdit,\n onSaveEdit,\n onCancelEdit,\n onDelete,\n labels,\n includeDefaultActions = true,\n } = options;\n\n return createDataTableActionsColumn<TData>({\n id,\n header,\n renderCell: ({ row, data }) => {\n const ctx = { row, data };\n const isEditingRow = editingRowId === row.id;\n\n if (isEditingRow && (onSaveEdit || onCancelEdit)) {\n return (\n <div\n className=\"flex flex-col items-center gap-6\"\n onClick={(event) => event.stopPropagation()}\n onKeyDown={(event) => event.stopPropagation()}\n role=\"presentation\"\n >\n {onSaveEdit ? (\n <Button\n type=\"button\"\n variant=\"circleGhost\"\n size=\"icon-md\"\n aria-label={labels?.saveAriaLabel ?? \"Сохранить изменения\"}\n onClick={() => onSaveEdit(ctx)}\n >\n <Icon\n type=\"check-circle\"\n className=\"text-success-text\"\n aria-hidden\n />\n </Button>\n ) : null}\n {onCancelEdit ? (\n <Button\n type=\"button\"\n variant=\"circleGhost\"\n size=\"icon-md\"\n aria-label={labels?.cancelAriaLabel ?? \"Отменить редактирование\"}\n onClick={() => onCancelEdit(ctx)}\n >\n <Icon\n type=\"x-circle\"\n className=\"text-error-text\"\n aria-hidden\n />\n </Button>\n ) : null}\n </div>\n );\n }\n\n const resolvedActions =\n typeof actions === \"function\" ? actions(ctx) : (actions ?? []);\n const defaultActions: DataTableRowActionNode<TData>[] = [\n ...(onStartEdit\n ? [\n {\n id: `${id}-edit-${row.id}`,\n label: labels?.edit ?? \"Редактировать\",\n onSelect: onStartEdit,\n iconType: \"pencil-simple\",\n } satisfies DataTableRowActionItem<TData>,\n ]\n : []),\n ...(onDelete\n ? [\n { type: \"separator\" } satisfies DataTableRowActionSeparator,\n {\n id: `${id}-delete-${row.id}`,\n label: labels?.delete ?? \"Удалить\",\n iconType: \"trash\",\n alert: true,\n onSelect: onDelete,\n } satisfies DataTableRowActionItem<TData>,\n ]\n : []),\n ];\n\n const menuItems = [\n ...resolvedActions,\n ...(includeDefaultActions ? defaultActions : []),\n ]\n .map((item) => mapRowActionNode(item, ctx))\n .filter((item): item is DropdownMenuConfigNode => item !== null);\n\n const resolvedTrigger = trigger ? (\n trigger(ctx)\n ) : (\n <Button\n type=\"button\"\n variant=\"circleGhost\"\n size=\"icon-xs\"\n aria-label=\"Открыть действия строки\"\n >\n <Icon\n type=\"dots-three\"\n aria-hidden\n />\n </Button>\n );\n\n return (\n <div\n className={cn(\"flex justify-end\")}\n onClick={(event) => event.stopPropagation()}\n onKeyDown={(event) => event.stopPropagation()}\n role=\"presentation\"\n >\n <ConfigurableDropdownMenu\n trigger={resolvedTrigger}\n items={\n menuItems.length > 0\n ? menuItems\n : [\n {\n id: `${id}-empty-${row.id}`,\n type: \"item\",\n label: labels?.empty ?? \"Нет действий\",\n readOnly: true,\n },\n ]\n }\n contentProps={{ align }}\n />\n </div>\n );\n },\n });\n}\n\nexport type {\n DataTableRowActionContext,\n DataTableRowActionItem,\n DataTableRowActionLabel,\n DataTableRowActionNode,\n DataTableRowActionSeparator,\n DataTableRowActionsColumnOptions,\n};\n"],"names":["mapRowActionNode","item","ctx","children","child","createDataTableRowActionsColumn","options","id","header","align","editingRowId","trigger","actions","onStartEdit","onSaveEdit","onCancelEdit","onDelete","labels","includeDefaultActions","createDataTableActionsColumn","row","data","jsxs","event","jsx","Button","Icon","resolvedActions","defaultActions","menuItems","resolvedTrigger","cn","ConfigurableDropdownMenu"],"mappings":"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"}
@@ -1,8 +1,8 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const s=require("react/jsx-runtime"),p=require("./lib-utils.cjs"),A=require("react"),X=require("./index-DJD-8LQA.cjs"),j=require("./components-ui-icon-icon.cjs"),M=require("./components-ui-typography-typography.cjs");require("./components-ui-typography-typography.styles.cjs");const G=["B","KB","MB","GB","TB"],f=1024,V=5*f*f,H=5,J=["all"],Q=800,W={image:{"image/*":[".jpg",".jpeg",".png",".webp"]},pdf:{"application/pdf":[".pdf"]},doc:{"application/msword":[".doc"],"application/vnd.openxmlformats-officedocument.wordprocessingml.document":[".docx"]},excel:{"application/vnd.ms-excel":[".xls"],"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet":[".xlsx"]},text:{"text/plain":[".txt"]},all:{}},Y=e=>{if(!e)return"0 B";const t=Math.floor(Math.log(e)/Math.log(f));return`${(e/Math.pow(f,t)).toFixed(2)} ${G[t]}`},v=e=>`${e.name}:${e.size}`,ee=e=>e.reduce((t,o)=>({...t,...W[o]}),{}),te=(e,t)=>{const o=e.filter(n=>n.status==="uploaded"),l=e.filter(n=>n.status==="error"),a=Math.max(0,t-o.length);return[...o,...l.slice(0,a)]},w=(e,t,o)=>({url:URL.createObjectURL(e),name:e.name,size:Y(e.size),addedAt:new Date().toISOString(),status:t,error:o}),re=e=>e==="file-too-large"?"Файл слишком большой":"Неподдерживаемый формат",se=(e,t,o)=>{const l=new Set(o.map(v)),a=new Set(t.map(v));return e.filter(n=>{if(n.status!=="error")return!0;const g=v(n);return!l.has(g)&&!a.has(g)})},oe=e=>{const t=e.name.split(".").pop()?.toLowerCase();return t?["jpg","jpeg","png","webp"].includes(t)?"image":t==="pdf"?"pdf":["doc","docx"].includes(t)?"doc":["xls","xlsx"].includes(t)?"excel":t==="txt"?"text":"other":"other"},ne=({value:e=[],onChange:t,multiple:o=!1,maxFiles:l=H,disabled:a=!1,className:n,maxSize:g=V,variant:h="grid",accepts:U=J,icon:L,title:F,text:_,showFiles:$=!0,isErrorText:N=!1})=>{const[y,E]=A.useState(!1),[I,S]=A.useState(null),m=e,b=m.filter(r=>r.status==="uploaded").length,q=(r,c)=>{S(null);const u=Math.max(0,l-b),x=r.slice(0,u),Z=r.slice(u),d=[...c.map(i=>w(i.file,"error",re(i.errors[0]?.code))),...Z.map(i=>w(i,"error",`Максимальное количество файлов: ${l}`))];d.length&&S(d[0].error||"Ошибка загрузки"),!(!x.length&&!d.length)&&(E(!0),setTimeout(()=>{const i=x.map(K=>w(K,"uploaded")),k=se(m,i,d),T=o?te([...k,...i,...d],l):[...i,...d].slice(0,1);t?.(T.length?T:[]),E(!1)},Q))},{getRootProps:D,getInputProps:B,isDragActive:C}=X.useDropzone({onDrop:q,accept:ee(U),maxSize:g,multiple:o&&l>1,disabled:a||y}),R=r=>()=>{const c=m.filter((u,x)=>x!==r);t?.(c.length?c:[])},P=m.map((r,c)=>({file:r,index:c})).filter(({file:r})=>r.status==="uploaded"),z=b>=l,O={grid:"grid-cols-2 sm:grid-cols-3 md:grid-cols-4",list:"grid-cols-1",compact:"grid-cols-2 sm:grid-cols-3"};return s.jsxs("div",{className:p.cn("w-full space-y-4",n?.container),children:[s.jsxs("div",{className:p.cn("grid h-full w-full gap-4",h==="list"?"grid-cols-1":O[h]),children:[$&&P.map(({file:r,index:c})=>{const u=oe(r);return s.jsxs("div",{className:`group bg-primary-bg relative aspect-square h-full w-full
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const s=require("react/jsx-runtime"),p=require("./lib-utils.cjs"),A=require("react"),K=require("./index-DJD-8LQA.cjs"),V=require("phosphor-strokes-icons/icons/Plus"),H=require("phosphor-strokes-icons/icons/SpinnerGap"),j=require("./components-icons-stroke-icon.cjs"),J=require("phosphor-strokes-icons/icons/X"),M=require("./components-ui-typography-typography.cjs");require("./components-ui-typography-typography.styles.cjs");const Q=["B","KB","MB","GB","TB"],x=1024,W=5*x*x,Y=5,ee=["all"],te=800,re={image:{"image/*":[".jpg",".jpeg",".png",".webp"]},pdf:{"application/pdf":[".pdf"]},doc:{"application/msword":[".doc"],"application/vnd.openxmlformats-officedocument.wordprocessingml.document":[".docx"]},excel:{"application/vnd.ms-excel":[".xls"],"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet":[".xlsx"]},text:{"text/plain":[".txt"]},all:{}},se=e=>{if(!e)return"0 B";const t=Math.floor(Math.log(e)/Math.log(x));return`${(e/Math.pow(x,t)).toFixed(2)} ${Q[t]}`},v=e=>`${e.name}:${e.size}`,oe=e=>e.reduce((t,o)=>({...t,...re[o]}),{}),ne=(e,t)=>{const o=e.filter(n=>n.status==="uploaded"),c=e.filter(n=>n.status==="error"),a=Math.max(0,t-o.length);return[...o,...c.slice(0,a)]},S=(e,t,o)=>({url:URL.createObjectURL(e),name:e.name,size:se(e.size),addedAt:new Date().toISOString(),status:t,error:o}),ce=e=>e==="file-too-large"?"Файл слишком большой":"Неподдерживаемый формат",le=(e,t,o)=>{const c=new Set(o.map(v)),a=new Set(t.map(v));return e.filter(n=>{if(n.status!=="error")return!0;const g=v(n);return!c.has(g)&&!a.has(g)})},ie=e=>{const t=e.name.split(".").pop()?.toLowerCase();return t?["jpg","jpeg","png","webp"].includes(t)?"image":t==="pdf"?"pdf":["doc","docx"].includes(t)?"doc":["xls","xlsx"].includes(t)?"excel":t==="txt"?"text":"other":"other"},ae=({value:e=[],onChange:t,multiple:o=!1,maxFiles:c=Y,disabled:a=!1,className:n,maxSize:g=W,variant:h="grid",accepts:U=ee,icon:q,title:w,text:F,showFiles:L=!0,isErrorText:$=!1})=>{const[b,I]=A.useState(!1),[_,E]=A.useState(null),m=e,y=m.filter(r=>r.status==="uploaded").length,N=(r,l)=>{E(null);const u=Math.max(0,c-y),f=r.slice(0,u),X=r.slice(u),d=[...l.map(i=>S(i.file,"error",ce(i.errors[0]?.code))),...X.map(i=>S(i,"error",`Максимальное количество файлов: ${c}`))];d.length&&E(d[0].error||"Ошибка загрузки"),!(!f.length&&!d.length)&&(I(!0),setTimeout(()=>{const i=f.map(Z=>S(Z,"uploaded")),G=le(m,i,d),T=o?ne([...G,...i,...d],c):[...i,...d].slice(0,1);t?.(T.length?T:[]),I(!1)},te))},{getRootProps:D,getInputProps:B,isDragActive:C}=K.useDropzone({onDrop:N,accept:oe(U),maxSize:g,multiple:o&&c>1,disabled:a||b}),P=r=>()=>{const l=m.filter((u,f)=>f!==r);t?.(l.length?l:[])},R=m.map((r,l)=>({file:r,index:l})).filter(({file:r})=>r.status==="uploaded"),k=y>=c,z=q??V.Plus,O={grid:"grid-cols-2 sm:grid-cols-3 md:grid-cols-4",list:"grid-cols-1",compact:"grid-cols-2 sm:grid-cols-3"};return s.jsxs("div",{className:p.cn("w-full space-y-4",n?.container),children:[s.jsxs("div",{className:p.cn("grid h-full w-full gap-4",h==="list"?"grid-cols-1":O[h]),children:[L&&R.map(({file:r,index:l})=>{const u=ie(r);return s.jsxs("div",{className:`group bg-primary-bg relative aspect-square h-full w-full
2
2
  overflow-hidden rounded-lg`,children:[u==="image"?s.jsx("img",{src:r.url,className:"h-full w-full object-cover"}):s.jsx("div",{className:`flex h-full w-full items-center justify-center bg-gray-100
3
3
  text-sm font-semibold`,children:r.name.split(".").pop()?.toUpperCase()}),s.jsx("div",{className:`bg-primary-inverse-bg/50 text-primary-bg absolute inset-0
4
4
  flex items-center justify-center opacity-0 transition-opacity
5
- hover:opacity-100`,children:s.jsx(j.Icon,{onClick:R(c),type:"x"})})]},`${r.url}-${r.addedAt}-${c}`)}),!z&&s.jsxs("div",{...D(),className:p.cn(`relative flex cursor-pointer flex-col items-center justify-center
5
+ hover:opacity-100`,children:s.jsx(j.StrokeIcon,{onClick:P(l),icon:J.X})})]},`${r.url}-${r.addedAt}-${l}`)}),!k&&s.jsxs("div",{...D(),className:p.cn(`relative flex cursor-pointer flex-col items-center justify-center
6
6
  rounded-lg border-2 border-dashed border-gray-300 bg-gray-50
7
- transition-colors hover:bg-gray-100`,C&&"border-primary bg-primary/5",(a||y)&&"cursor-not-allowed opacity-50",h==="list"?"min-h-37.5":"aspect-square",n?.blockAdd),children:[s.jsx("input",{...B()}),y?s.jsx(j.Icon,{type:"spinner-gap",className:"text-sub-label-text h-8 w-8 animate-spin"}):s.jsxs("div",{className:"flex flex-col items-center space-y-2 p-4 text-center",children:[s.jsx(j.Icon,{type:L?.type??"plus",className:p.cn("text-sub-label-text h-8 w-8",n?.icon)}),s.jsx(M.Typography,{className:p.cn("text-sub-label-text",n?.title),children:o?`${F||"Добавить"} (${b}/${l})`:F||"Добавить"}),_&&s.jsx(M.Typography,{className:p.cn("text-sub-label-text",n?.text),children:_})]})]})]}),!N&&I&&s.jsx("div",{className:"rounded-lg bg-red-50 p-3 text-sm text-red-600",children:I})]})};exports.FilesUploader=ne;
7
+ transition-colors hover:bg-gray-100`,C&&"border-primary bg-primary/5",(a||b)&&"cursor-not-allowed opacity-50",h==="list"?"min-h-37.5":"aspect-square",n?.blockAdd),children:[s.jsx("input",{...B()}),b?s.jsx(j.StrokeIcon,{icon:H.SpinnerGap,className:"text-sub-label-text h-8 w-8 animate-spin"}):s.jsxs("div",{className:"flex flex-col items-center space-y-2 p-4 text-center",children:[s.jsx(j.StrokeIcon,{icon:z,className:p.cn("text-sub-label-text h-8 w-8",n?.icon)}),s.jsx(M.Typography,{className:p.cn("text-sub-label-text",n?.title),children:o?`${w||"Добавить"} (${y}/${c})`:w||"Добавить"}),F&&s.jsx(M.Typography,{className:p.cn("text-sub-label-text",n?.text),children:F})]})]})]}),!$&&_&&s.jsx("div",{className:"rounded-lg bg-red-50 p-3 text-sm text-red-600",children:_})]})};exports.FilesUploader=ae;
8
8
  //# sourceMappingURL=components-files-uploader-files-uploader.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"components-files-uploader-files-uploader.cjs","sources":["../src/components/files-uploader/files-uploader.tsx"],"sourcesContent":["import { cn } from \"@/lib/utils\";\nimport { useState } from \"react\";\nimport { type FileRejection, useDropzone } from \"react-dropzone\";\nimport { Icon, type IconProps } from \"../ui/icon\";\nimport { Typography } from \"../ui/typography\";\n\ntype Variant = \"grid\" | \"list\" | \"compact\";\ntype AcceptType = \"image\" | \"pdf\" | \"doc\" | \"excel\" | \"text\" | \"all\";\n\nexport type UploadedFileData = {\n url: string;\n name: string;\n size: string;\n addedAt: string;\n status: \"uploaded\" | \"error\";\n error?: string;\n};\n\nexport type FilesUploaderValue = UploadedFileData[] | [];\n\nexport type PropsFilesUploader = {\n value?: FilesUploaderValue;\n onChange?: (value: FilesUploaderValue) => void;\n multiple?: boolean;\n maxFiles?: number;\n disabled?: boolean;\n isErrorText?: boolean;\n className?: {\n container?: string;\n blockAdd?: string;\n title?: string;\n text?: string;\n icon?: string;\n };\n maxSize?: number;\n variant?: Variant;\n accepts?: AcceptType[];\n icon?: IconProps;\n title?: string;\n text?: string;\n showFiles?: boolean;\n};\n\nconst FILE_SIZE_UNITS = [\"B\", \"KB\", \"MB\", \"GB\", \"TB\"];\nconst FILE_SIZE_KB = 1024;\n\nconst DEFAULT_MAX_SIZE = 5 * FILE_SIZE_KB * FILE_SIZE_KB;\nconst DEFAULT_MAX_FILES = 5;\nconst DEFAULT_ACCEPT: AcceptType[] = [\"all\"];\nconst DEFAULT_TIMEOUT = 800;\n\nconst ACCEPT_MAP: Record<AcceptType, Record<string, string[]>> = {\n image: { \"image/*\": [\".jpg\", \".jpeg\", \".png\", \".webp\"] },\n pdf: { \"application/pdf\": [\".pdf\"] },\n doc: {\n \"application/msword\": [\".doc\"],\n \"application/vnd.openxmlformats-officedocument.wordprocessingml.document\": [\".docx\"],\n },\n excel: {\n \"application/vnd.ms-excel\": [\".xls\"],\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet\": [\".xlsx\"],\n },\n text: { \"text/plain\": [\".txt\"] },\n all: {},\n};\n\nconst formatFileSize = (bytes: number) => {\n if (!bytes) return \"0 B\";\n const i = Math.floor(Math.log(bytes) / Math.log(FILE_SIZE_KB));\n return `${(bytes / Math.pow(FILE_SIZE_KB, i)).toFixed(2)} ${FILE_SIZE_UNITS[i]}`;\n};\n\nconst getFileIdentity = (file: Pick<UploadedFileData, \"name\" | \"size\">) =>\n `${file.name}:${file.size}`;\n\nconst fileAcceptMap = (accepts: AcceptType[]) =>\n accepts.reduce((acc, t) => ({ ...acc, ...ACCEPT_MAP[t] }), {});\n\nconst limitFilesForValue = (\n nextFiles: UploadedFileData[],\n maxFiles: number,\n): UploadedFileData[] => {\n const uploadedFiles = nextFiles.filter((file) => file.status === \"uploaded\");\n const errorFiles = nextFiles.filter((file) => file.status === \"error\");\n const availableErrorSlots = Math.max(0, maxFiles - uploadedFiles.length);\n\n return [...uploadedFiles, ...errorFiles.slice(0, availableErrorSlots)];\n};\n\nconst mapFile = (\n file: File,\n status: UploadedFileData[\"status\"],\n error?: string,\n): UploadedFileData => ({\n url: URL.createObjectURL(file),\n name: file.name,\n size: formatFileSize(file.size),\n addedAt: new Date().toISOString(),\n status,\n error,\n});\n\nconst getRejectedError = (code?: string) =>\n code === \"file-too-large\" ? \"Файл слишком большой\" : \"Неподдерживаемый формат\";\n\nconst replaceDuplicateErrors = (\n currentFiles: UploadedFileData[],\n newFiles: UploadedFileData[],\n rejectedFiles: UploadedFileData[],\n) => {\n const rejectedFileIds = new Set(rejectedFiles.map(getFileIdentity));\n const acceptedFileIds = new Set(newFiles.map(getFileIdentity));\n\n return currentFiles.filter((existingFile) => {\n if (existingFile.status !== \"error\") return true;\n const id = getFileIdentity(existingFile);\n return !rejectedFileIds.has(id) && !acceptedFileIds.has(id);\n });\n};\n\nconst getFileType = (file: UploadedFileData) => {\n const ext = file.name.split(\".\").pop()?.toLowerCase();\n\n if (!ext) return \"other\";\n if ([\"jpg\", \"jpeg\", \"png\", \"webp\"].includes(ext)) return \"image\";\n if (ext === \"pdf\") return \"pdf\";\n if ([\"doc\", \"docx\"].includes(ext)) return \"doc\";\n if ([\"xls\", \"xlsx\"].includes(ext)) return \"excel\";\n if (ext === \"txt\") return \"text\";\n\n return \"other\";\n};\n\nexport const FilesUploader = ({\n value = [],\n onChange,\n multiple = false,\n maxFiles = DEFAULT_MAX_FILES,\n disabled = false,\n className,\n maxSize = DEFAULT_MAX_SIZE,\n variant = \"grid\",\n accepts = DEFAULT_ACCEPT,\n icon,\n title,\n text,\n showFiles = true,\n isErrorText = false,\n}: PropsFilesUploader) => {\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState<string | null>(null);\n\n const files = value;\n const uploadedCount = files.filter((file) => file.status === \"uploaded\").length;\n\n const onDrop = (acceptedFiles: File[], rejectedFiles: FileRejection[]) => {\n setError(null);\n const remainingUploadSlots = Math.max(0, maxFiles - uploadedCount);\n const acceptedFilesToUpload = acceptedFiles.slice(0, remainingUploadSlots);\n const overflowAcceptedFiles = acceptedFiles.slice(remainingUploadSlots);\n\n const rejectedMapped = [\n ...rejectedFiles.map((rejection) =>\n mapFile(rejection.file, \"error\", getRejectedError(rejection.errors[0]?.code)),\n ),\n ...overflowAcceptedFiles.map((file) =>\n mapFile(file, \"error\", `Максимальное количество файлов: ${maxFiles}`),\n ),\n ];\n\n if (rejectedMapped.length) {\n setError(rejectedMapped[0].error || \"Ошибка загрузки\");\n }\n\n if (!acceptedFilesToUpload.length && !rejectedMapped.length) return;\n\n setLoading(true);\n\n setTimeout(() => {\n const newFiles = acceptedFilesToUpload.map((file) => mapFile(file, \"uploaded\"));\n const nextBaseFiles = replaceDuplicateErrors(files, newFiles, rejectedMapped);\n const nextFiles = multiple\n ? limitFilesForValue([...nextBaseFiles, ...newFiles, ...rejectedMapped], maxFiles)\n : [...newFiles, ...rejectedMapped].slice(0, 1);\n\n onChange?.(nextFiles.length ? nextFiles : []);\n setLoading(false);\n }, DEFAULT_TIMEOUT);\n };\n\n const { getRootProps, getInputProps, isDragActive } = useDropzone({\n onDrop,\n accept: fileAcceptMap(accepts),\n maxSize,\n multiple: multiple && maxFiles > 1,\n disabled: disabled || loading,\n });\n\n const removeFile = (index: number) => () => {\n const updated = files.filter((_, i) => i !== index);\n onChange?.(updated.length ? updated : []);\n };\n\n const uploadedFiles = files\n .map((file, index) => ({ file, index }))\n .filter(({ file }) => file.status === \"uploaded\");\n\n const isMaxFilesReached = uploadedCount >= maxFiles;\n\n const gridClasses = {\n grid: \"grid-cols-2 sm:grid-cols-3 md:grid-cols-4\",\n list: \"grid-cols-1\",\n compact: \"grid-cols-2 sm:grid-cols-3\",\n };\n\n return (\n <div className={cn(\"w-full space-y-4\", className?.container)}>\n <div\n className={cn(\n \"grid h-full w-full gap-4\",\n variant === \"list\" ? \"grid-cols-1\" : gridClasses[variant],\n )}\n >\n {showFiles &&\n uploadedFiles.map(({ file, index }) => {\n const type = getFileType(file);\n\n return (\n <div\n key={`${file.url}-${file.addedAt}-${index}`}\n className=\"group bg-primary-bg relative aspect-square h-full w-full\n overflow-hidden rounded-lg\"\n >\n {type === \"image\" ? (\n <img\n src={file.url}\n className=\"h-full w-full object-cover\"\n />\n ) : (\n <div\n className=\"flex h-full w-full items-center justify-center bg-gray-100\n text-sm font-semibold\"\n >\n {file.name.split(\".\").pop()?.toUpperCase()}\n </div>\n )}\n\n <div\n className=\"bg-primary-inverse-bg/50 text-primary-bg absolute inset-0\n flex items-center justify-center opacity-0 transition-opacity\n hover:opacity-100\"\n >\n <Icon\n onClick={removeFile(index)}\n type={\"x\"}\n />\n </div>\n </div>\n );\n })}\n\n {!isMaxFilesReached && (\n <div\n {...getRootProps()}\n className={cn(\n `relative flex cursor-pointer flex-col items-center justify-center\n rounded-lg border-2 border-dashed border-gray-300 bg-gray-50\n transition-colors hover:bg-gray-100`,\n isDragActive && \"border-primary bg-primary/5\",\n (disabled || loading) && \"cursor-not-allowed opacity-50\",\n variant === \"list\" ? \"min-h-37.5\" : \"aspect-square\",\n className?.blockAdd,\n )}\n >\n <input {...getInputProps()} />\n\n {loading ? (\n <Icon\n type=\"spinner-gap\"\n className=\"text-sub-label-text h-8 w-8 animate-spin\"\n />\n ) : (\n <div className=\"flex flex-col items-center space-y-2 p-4 text-center\">\n <Icon\n type={icon?.type ?? \"plus\"}\n className={cn(\"text-sub-label-text h-8 w-8\", className?.icon)}\n />\n\n <Typography className={cn(\"text-sub-label-text\", className?.title)}>\n {multiple\n ? `${title || \"Добавить\"} (${uploadedCount}/${maxFiles})`\n : title || \"Добавить\"}\n </Typography>\n\n {text && (\n <Typography className={cn(\"text-sub-label-text\", className?.text)}>\n {text}\n </Typography>\n )}\n </div>\n )}\n </div>\n )}\n </div>\n\n {!isErrorText && error && (\n <div className=\"rounded-lg bg-red-50 p-3 text-sm text-red-600\">{error}</div>\n )}\n </div>\n );\n};\n"],"names":["FILE_SIZE_UNITS","FILE_SIZE_KB","DEFAULT_MAX_SIZE","DEFAULT_MAX_FILES","DEFAULT_ACCEPT","DEFAULT_TIMEOUT","ACCEPT_MAP","formatFileSize","bytes","i","getFileIdentity","file","fileAcceptMap","accepts","acc","t","limitFilesForValue","nextFiles","maxFiles","uploadedFiles","errorFiles","availableErrorSlots","mapFile","status","error","getRejectedError","code","replaceDuplicateErrors","currentFiles","newFiles","rejectedFiles","rejectedFileIds","acceptedFileIds","existingFile","id","getFileType","ext","FilesUploader","value","onChange","multiple","disabled","className","maxSize","variant","icon","title","text","showFiles","isErrorText","loading","setLoading","useState","setError","files","uploadedCount","onDrop","acceptedFiles","remainingUploadSlots","acceptedFilesToUpload","overflowAcceptedFiles","rejectedMapped","rejection","nextBaseFiles","getRootProps","getInputProps","isDragActive","useDropzone","removeFile","index","updated","_","isMaxFilesReached","gridClasses","cn","jsxs","type","jsx","Icon","Typography"],"mappings":"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"}
1
+ {"version":3,"file":"components-files-uploader-files-uploader.cjs","sources":["../src/components/files-uploader/files-uploader.tsx"],"sourcesContent":["import { cn } from \"@/lib/utils\";\nimport { useState } from \"react\";\nimport { type FileRejection, useDropzone } from \"react-dropzone\";\nimport { Plus } from \"@/components/icons/Plus\";\nimport { SpinnerGap } from \"@/components/icons/SpinnerGap\";\nimport { StrokeIcon, type StrokeIconComponent } from \"@/components/icons/stroke-icon\";\nimport { X } from \"@/components/icons/X\";\nimport { Typography } from \"../ui/typography\";\n\ntype Variant = \"grid\" | \"list\" | \"compact\";\ntype AcceptType = \"image\" | \"pdf\" | \"doc\" | \"excel\" | \"text\" | \"all\";\n\nexport type UploadedFileData = {\n url: string;\n name: string;\n size: string;\n addedAt: string;\n status: \"uploaded\" | \"error\";\n error?: string;\n};\n\nexport type FilesUploaderValue = UploadedFileData[] | [];\n\nexport type PropsFilesUploader = {\n value?: FilesUploaderValue;\n onChange?: (value: FilesUploaderValue) => void;\n multiple?: boolean;\n maxFiles?: number;\n disabled?: boolean;\n isErrorText?: boolean;\n className?: {\n container?: string;\n blockAdd?: string;\n title?: string;\n text?: string;\n icon?: string;\n };\n maxSize?: number;\n variant?: Variant;\n accepts?: AcceptType[];\n icon?: StrokeIconComponent;\n title?: string;\n text?: string;\n showFiles?: boolean;\n};\n\nconst FILE_SIZE_UNITS = [\"B\", \"KB\", \"MB\", \"GB\", \"TB\"];\nconst FILE_SIZE_KB = 1024;\n\nconst DEFAULT_MAX_SIZE = 5 * FILE_SIZE_KB * FILE_SIZE_KB;\nconst DEFAULT_MAX_FILES = 5;\nconst DEFAULT_ACCEPT: AcceptType[] = [\"all\"];\nconst DEFAULT_TIMEOUT = 800;\n\nconst ACCEPT_MAP: Record<AcceptType, Record<string, string[]>> = {\n image: { \"image/*\": [\".jpg\", \".jpeg\", \".png\", \".webp\"] },\n pdf: { \"application/pdf\": [\".pdf\"] },\n doc: {\n \"application/msword\": [\".doc\"],\n \"application/vnd.openxmlformats-officedocument.wordprocessingml.document\": [\".docx\"],\n },\n excel: {\n \"application/vnd.ms-excel\": [\".xls\"],\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet\": [\".xlsx\"],\n },\n text: { \"text/plain\": [\".txt\"] },\n all: {},\n};\n\nconst formatFileSize = (bytes: number) => {\n if (!bytes) return \"0 B\";\n const i = Math.floor(Math.log(bytes) / Math.log(FILE_SIZE_KB));\n return `${(bytes / Math.pow(FILE_SIZE_KB, i)).toFixed(2)} ${FILE_SIZE_UNITS[i]}`;\n};\n\nconst getFileIdentity = (file: Pick<UploadedFileData, \"name\" | \"size\">) =>\n `${file.name}:${file.size}`;\n\nconst fileAcceptMap = (accepts: AcceptType[]) =>\n accepts.reduce((acc, t) => ({ ...acc, ...ACCEPT_MAP[t] }), {});\n\nconst limitFilesForValue = (\n nextFiles: UploadedFileData[],\n maxFiles: number,\n): UploadedFileData[] => {\n const uploadedFiles = nextFiles.filter((file) => file.status === \"uploaded\");\n const errorFiles = nextFiles.filter((file) => file.status === \"error\");\n const availableErrorSlots = Math.max(0, maxFiles - uploadedFiles.length);\n\n return [...uploadedFiles, ...errorFiles.slice(0, availableErrorSlots)];\n};\n\nconst mapFile = (\n file: File,\n status: UploadedFileData[\"status\"],\n error?: string,\n): UploadedFileData => ({\n url: URL.createObjectURL(file),\n name: file.name,\n size: formatFileSize(file.size),\n addedAt: new Date().toISOString(),\n status,\n error,\n});\n\nconst getRejectedError = (code?: string) =>\n code === \"file-too-large\" ? \"Файл слишком большой\" : \"Неподдерживаемый формат\";\n\nconst replaceDuplicateErrors = (\n currentFiles: UploadedFileData[],\n newFiles: UploadedFileData[],\n rejectedFiles: UploadedFileData[],\n) => {\n const rejectedFileIds = new Set(rejectedFiles.map(getFileIdentity));\n const acceptedFileIds = new Set(newFiles.map(getFileIdentity));\n\n return currentFiles.filter((existingFile) => {\n if (existingFile.status !== \"error\") return true;\n const id = getFileIdentity(existingFile);\n return !rejectedFileIds.has(id) && !acceptedFileIds.has(id);\n });\n};\n\nconst getFileType = (file: UploadedFileData) => {\n const ext = file.name.split(\".\").pop()?.toLowerCase();\n\n if (!ext) return \"other\";\n if ([\"jpg\", \"jpeg\", \"png\", \"webp\"].includes(ext)) return \"image\";\n if (ext === \"pdf\") return \"pdf\";\n if ([\"doc\", \"docx\"].includes(ext)) return \"doc\";\n if ([\"xls\", \"xlsx\"].includes(ext)) return \"excel\";\n if (ext === \"txt\") return \"text\";\n\n return \"other\";\n};\n\nexport const FilesUploader = ({\n value = [],\n onChange,\n multiple = false,\n maxFiles = DEFAULT_MAX_FILES,\n disabled = false,\n className,\n maxSize = DEFAULT_MAX_SIZE,\n variant = \"grid\",\n accepts = DEFAULT_ACCEPT,\n icon,\n title,\n text,\n showFiles = true,\n isErrorText = false,\n}: PropsFilesUploader) => {\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState<string | null>(null);\n\n const files = value;\n const uploadedCount = files.filter((file) => file.status === \"uploaded\").length;\n\n const onDrop = (acceptedFiles: File[], rejectedFiles: FileRejection[]) => {\n setError(null);\n const remainingUploadSlots = Math.max(0, maxFiles - uploadedCount);\n const acceptedFilesToUpload = acceptedFiles.slice(0, remainingUploadSlots);\n const overflowAcceptedFiles = acceptedFiles.slice(remainingUploadSlots);\n\n const rejectedMapped = [\n ...rejectedFiles.map((rejection) =>\n mapFile(rejection.file, \"error\", getRejectedError(rejection.errors[0]?.code)),\n ),\n ...overflowAcceptedFiles.map((file) =>\n mapFile(file, \"error\", `Максимальное количество файлов: ${maxFiles}`),\n ),\n ];\n\n if (rejectedMapped.length) {\n setError(rejectedMapped[0].error || \"Ошибка загрузки\");\n }\n\n if (!acceptedFilesToUpload.length && !rejectedMapped.length) return;\n\n setLoading(true);\n\n setTimeout(() => {\n const newFiles = acceptedFilesToUpload.map((file) => mapFile(file, \"uploaded\"));\n const nextBaseFiles = replaceDuplicateErrors(files, newFiles, rejectedMapped);\n const nextFiles = multiple\n ? limitFilesForValue([...nextBaseFiles, ...newFiles, ...rejectedMapped], maxFiles)\n : [...newFiles, ...rejectedMapped].slice(0, 1);\n\n onChange?.(nextFiles.length ? nextFiles : []);\n setLoading(false);\n }, DEFAULT_TIMEOUT);\n };\n\n const { getRootProps, getInputProps, isDragActive } = useDropzone({\n onDrop,\n accept: fileAcceptMap(accepts),\n maxSize,\n multiple: multiple && maxFiles > 1,\n disabled: disabled || loading,\n });\n\n const removeFile = (index: number) => () => {\n const updated = files.filter((_, i) => i !== index);\n onChange?.(updated.length ? updated : []);\n };\n\n const uploadedFiles = files\n .map((file, index) => ({ file, index }))\n .filter(({ file }) => file.status === \"uploaded\");\n\n const isMaxFilesReached = uploadedCount >= maxFiles;\n const uploadIcon = icon ?? Plus;\n\n const gridClasses = {\n grid: \"grid-cols-2 sm:grid-cols-3 md:grid-cols-4\",\n list: \"grid-cols-1\",\n compact: \"grid-cols-2 sm:grid-cols-3\",\n };\n\n return (\n <div className={cn(\"w-full space-y-4\", className?.container)}>\n <div\n className={cn(\n \"grid h-full w-full gap-4\",\n variant === \"list\" ? \"grid-cols-1\" : gridClasses[variant],\n )}\n >\n {showFiles &&\n uploadedFiles.map(({ file, index }) => {\n const type = getFileType(file);\n\n return (\n <div\n key={`${file.url}-${file.addedAt}-${index}`}\n className=\"group bg-primary-bg relative aspect-square h-full w-full\n overflow-hidden rounded-lg\"\n >\n {type === \"image\" ? (\n <img\n src={file.url}\n className=\"h-full w-full object-cover\"\n />\n ) : (\n <div\n className=\"flex h-full w-full items-center justify-center bg-gray-100\n text-sm font-semibold\"\n >\n {file.name.split(\".\").pop()?.toUpperCase()}\n </div>\n )}\n\n <div\n className=\"bg-primary-inverse-bg/50 text-primary-bg absolute inset-0\n flex items-center justify-center opacity-0 transition-opacity\n hover:opacity-100\"\n >\n <StrokeIcon\n onClick={removeFile(index)}\n icon={X}\n />\n </div>\n </div>\n );\n })}\n\n {!isMaxFilesReached && (\n <div\n {...getRootProps()}\n className={cn(\n `relative flex cursor-pointer flex-col items-center justify-center\n rounded-lg border-2 border-dashed border-gray-300 bg-gray-50\n transition-colors hover:bg-gray-100`,\n isDragActive && \"border-primary bg-primary/5\",\n (disabled || loading) && \"cursor-not-allowed opacity-50\",\n variant === \"list\" ? \"min-h-37.5\" : \"aspect-square\",\n className?.blockAdd,\n )}\n >\n <input {...getInputProps()} />\n\n {loading ? (\n <StrokeIcon\n icon={SpinnerGap}\n className=\"text-sub-label-text h-8 w-8 animate-spin\"\n />\n ) : (\n <div className=\"flex flex-col items-center space-y-2 p-4 text-center\">\n <StrokeIcon\n icon={uploadIcon}\n className={cn(\"text-sub-label-text h-8 w-8\", className?.icon)}\n />\n\n <Typography className={cn(\"text-sub-label-text\", className?.title)}>\n {multiple\n ? `${title || \"Добавить\"} (${uploadedCount}/${maxFiles})`\n : title || \"Добавить\"}\n </Typography>\n\n {text && (\n <Typography className={cn(\"text-sub-label-text\", className?.text)}>\n {text}\n </Typography>\n )}\n </div>\n )}\n </div>\n )}\n </div>\n\n {!isErrorText && error && (\n <div className=\"rounded-lg bg-red-50 p-3 text-sm text-red-600\">{error}</div>\n )}\n </div>\n );\n};\n"],"names":["FILE_SIZE_UNITS","FILE_SIZE_KB","DEFAULT_MAX_SIZE","DEFAULT_MAX_FILES","DEFAULT_ACCEPT","DEFAULT_TIMEOUT","ACCEPT_MAP","formatFileSize","bytes","i","getFileIdentity","file","fileAcceptMap","accepts","acc","t","limitFilesForValue","nextFiles","maxFiles","uploadedFiles","errorFiles","availableErrorSlots","mapFile","status","error","getRejectedError","code","replaceDuplicateErrors","currentFiles","newFiles","rejectedFiles","rejectedFileIds","acceptedFileIds","existingFile","id","getFileType","ext","FilesUploader","value","onChange","multiple","disabled","className","maxSize","variant","icon","title","text","showFiles","isErrorText","loading","setLoading","useState","setError","files","uploadedCount","onDrop","acceptedFiles","remainingUploadSlots","acceptedFilesToUpload","overflowAcceptedFiles","rejectedMapped","rejection","nextBaseFiles","getRootProps","getInputProps","isDragActive","useDropzone","removeFile","index","updated","_","isMaxFilesReached","uploadIcon","Plus","gridClasses","cn","jsxs","type","jsx","StrokeIcon","X","SpinnerGap","Typography"],"mappings":"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"}
@@ -1,11 +1,14 @@
1
1
  import { jsxs as m, jsx as n } from "react/jsx-runtime";
2
2
  import { cn as p } from "./lib-utils.js";
3
3
  import { useState as U } from "react";
4
- import { u as G } from "./index-CVlBIwtP.js";
5
- import { Icon as w } from "./components-ui-icon-icon.js";
4
+ import { u as V } from "./index-CVlBIwtP.js";
5
+ import { Plus as H } from "phosphor-strokes-icons/icons/Plus";
6
+ import { SpinnerGap as J } from "phosphor-strokes-icons/icons/SpinnerGap";
7
+ import { StrokeIcon as w } from "./components-icons-stroke-icon.js";
8
+ import { X as Q } from "phosphor-strokes-icons/icons/X";
6
9
  import { Typography as _ } from "./components-ui-typography-typography.js";
7
10
  import "./components-ui-typography-typography.styles.js";
8
- const V = ["B", "KB", "MB", "GB", "TB"], x = 1024, H = 5 * x * x, J = 5, Q = ["all"], W = 800, Y = {
11
+ const W = ["B", "KB", "MB", "GB", "TB"], x = 1024, Y = 5 * x * x, ee = 5, te = ["all"], re = 800, oe = {
9
12
  image: { "image/*": [".jpg", ".jpeg", ".png", ".webp"] },
10
13
  pdf: { "application/pdf": [".pdf"] },
11
14
  doc: {
@@ -18,70 +21,70 @@ const V = ["B", "KB", "MB", "GB", "TB"], x = 1024, H = 5 * x * x, J = 5, Q = ["a
18
21
  },
19
22
  text: { "text/plain": [".txt"] },
20
23
  all: {}
21
- }, ee = (e) => {
24
+ }, se = (e) => {
22
25
  if (!e) return "0 B";
23
26
  const t = Math.floor(Math.log(e) / Math.log(x));
24
- return `${(e / Math.pow(x, t)).toFixed(2)} ${V[t]}`;
25
- }, F = (e) => `${e.name}:${e.size}`, te = (e) => e.reduce((t, o) => ({ ...t, ...Y[o] }), {}), re = (e, t) => {
27
+ return `${(e / Math.pow(x, t)).toFixed(2)} ${W[t]}`;
28
+ }, F = (e) => `${e.name}:${e.size}`, le = (e) => e.reduce((t, o) => ({ ...t, ...oe[o] }), {}), ne = (e, t) => {
26
29
  const o = e.filter((s) => s.status === "uploaded"), l = e.filter((s) => s.status === "error"), a = Math.max(0, t - o.length);
27
30
  return [...o, ...l.slice(0, a)];
28
31
  }, E = (e, t, o) => ({
29
32
  url: URL.createObjectURL(e),
30
33
  name: e.name,
31
- size: ee(e.size),
34
+ size: se(e.size),
32
35
  addedAt: (/* @__PURE__ */ new Date()).toISOString(),
33
36
  status: t,
34
37
  error: o
35
- }), oe = (e) => e === "file-too-large" ? "Файл слишком большой" : "Неподдерживаемый формат", se = (e, t, o) => {
38
+ }), ce = (e) => e === "file-too-large" ? "Файл слишком большой" : "Неподдерживаемый формат", ie = (e, t, o) => {
36
39
  const l = new Set(o.map(F)), a = new Set(t.map(F));
37
40
  return e.filter((s) => {
38
41
  if (s.status !== "error") return !0;
39
- const g = F(s);
40
- return !l.has(g) && !a.has(g);
42
+ const f = F(s);
43
+ return !l.has(f) && !a.has(f);
41
44
  });
42
- }, le = (e) => {
45
+ }, ae = (e) => {
43
46
  const t = e.name.split(".").pop()?.toLowerCase();
44
47
  return t ? ["jpg", "jpeg", "png", "webp"].includes(t) ? "image" : t === "pdf" ? "pdf" : ["doc", "docx"].includes(t) ? "doc" : ["xls", "xlsx"].includes(t) ? "excel" : t === "txt" ? "text" : "other" : "other";
45
- }, me = ({
48
+ }, ve = ({
46
49
  value: e = [],
47
50
  onChange: t,
48
51
  multiple: o = !1,
49
- maxFiles: l = J,
52
+ maxFiles: l = ee,
50
53
  disabled: a = !1,
51
54
  className: s,
52
- maxSize: g = H,
55
+ maxSize: f = Y,
53
56
  variant: b = "grid",
54
- accepts: L = Q,
57
+ accepts: L = te,
55
58
  icon: $,
56
59
  title: A,
57
60
  text: I,
58
61
  showFiles: N = !0,
59
62
  isErrorText: D = !1
60
63
  }) => {
61
- const [y, M] = U(!1), [T, j] = U(null), f = e, v = f.filter((r) => r.status === "uploaded").length, B = (r, c) => {
62
- j(null);
64
+ const [y, S] = U(!1), [M, T] = U(null), g = e, v = g.filter((r) => r.status === "uploaded").length, B = (r, c) => {
65
+ T(null);
63
66
  const u = Math.max(0, l - v), h = r.slice(0, u), q = r.slice(u), d = [
64
67
  ...c.map(
65
- (i) => E(i.file, "error", oe(i.errors[0]?.code))
68
+ (i) => E(i.file, "error", ce(i.errors[0]?.code))
66
69
  ),
67
70
  ...q.map(
68
71
  (i) => E(i, "error", `Максимальное количество файлов: ${l}`)
69
72
  )
70
73
  ];
71
- d.length && j(d[0].error || "Ошибка загрузки"), !(!h.length && !d.length) && (M(!0), setTimeout(() => {
72
- const i = h.map((X) => E(X, "uploaded")), K = se(f, i, d), S = o ? re([...K, ...i, ...d], l) : [...i, ...d].slice(0, 1);
73
- t?.(S.length ? S : []), M(!1);
74
- }, W));
75
- }, { getRootProps: C, getInputProps: z, isDragActive: P } = G({
74
+ d.length && T(d[0].error || "Ошибка загрузки"), !(!h.length && !d.length) && (S(!0), setTimeout(() => {
75
+ const i = h.map((K) => E(K, "uploaded")), G = ie(g, i, d), j = o ? ne([...G, ...i, ...d], l) : [...i, ...d].slice(0, 1);
76
+ t?.(j.length ? j : []), S(!1);
77
+ }, re));
78
+ }, { getRootProps: C, getInputProps: P, isDragActive: z } = V({
76
79
  onDrop: B,
77
- accept: te(L),
78
- maxSize: g,
80
+ accept: le(L),
81
+ maxSize: f,
79
82
  multiple: o && l > 1,
80
83
  disabled: a || y
81
84
  }), R = (r) => () => {
82
- const c = f.filter((u, h) => h !== r);
85
+ const c = g.filter((u, h) => h !== r);
83
86
  t?.(c.length ? c : []);
84
- }, O = f.map((r, c) => ({ file: r, index: c })).filter(({ file: r }) => r.status === "uploaded"), Z = v >= l, k = {
87
+ }, k = g.map((r, c) => ({ file: r, index: c })).filter(({ file: r }) => r.status === "uploaded"), O = v >= l, X = $ ?? H, Z = {
85
88
  grid: "grid-cols-2 sm:grid-cols-3 md:grid-cols-4",
86
89
  list: "grid-cols-1",
87
90
  compact: "grid-cols-2 sm:grid-cols-3"
@@ -92,11 +95,11 @@ const V = ["B", "KB", "MB", "GB", "TB"], x = 1024, H = 5 * x * x, J = 5, Q = ["a
92
95
  {
93
96
  className: p(
94
97
  "grid h-full w-full gap-4",
95
- b === "list" ? "grid-cols-1" : k[b]
98
+ b === "list" ? "grid-cols-1" : Z[b]
96
99
  ),
97
100
  children: [
98
- N && O.map(({ file: r, index: c }) => {
99
- const u = le(r);
101
+ N && k.map(({ file: r, index: c }) => {
102
+ const u = ae(r);
100
103
  return /* @__PURE__ */ m(
101
104
  "div",
102
105
  {
@@ -127,7 +130,7 @@ const V = ["B", "KB", "MB", "GB", "TB"], x = 1024, H = 5 * x * x, J = 5, Q = ["a
127
130
  w,
128
131
  {
129
132
  onClick: R(c),
130
- type: "x"
133
+ icon: Q
131
134
  }
132
135
  )
133
136
  }
@@ -137,7 +140,7 @@ const V = ["B", "KB", "MB", "GB", "TB"], x = 1024, H = 5 * x * x, J = 5, Q = ["a
137
140
  `${r.url}-${r.addedAt}-${c}`
138
141
  );
139
142
  }),
140
- !Z && /* @__PURE__ */ m(
143
+ !O && /* @__PURE__ */ m(
141
144
  "div",
142
145
  {
143
146
  ...C(),
@@ -145,24 +148,24 @@ const V = ["B", "KB", "MB", "GB", "TB"], x = 1024, H = 5 * x * x, J = 5, Q = ["a
145
148
  `relative flex cursor-pointer flex-col items-center justify-center
146
149
  rounded-lg border-2 border-dashed border-gray-300 bg-gray-50
147
150
  transition-colors hover:bg-gray-100`,
148
- P && "border-primary bg-primary/5",
151
+ z && "border-primary bg-primary/5",
149
152
  (a || y) && "cursor-not-allowed opacity-50",
150
153
  b === "list" ? "min-h-37.5" : "aspect-square",
151
154
  s?.blockAdd
152
155
  ),
153
156
  children: [
154
- /* @__PURE__ */ n("input", { ...z() }),
157
+ /* @__PURE__ */ n("input", { ...P() }),
155
158
  y ? /* @__PURE__ */ n(
156
159
  w,
157
160
  {
158
- type: "spinner-gap",
161
+ icon: J,
159
162
  className: "text-sub-label-text h-8 w-8 animate-spin"
160
163
  }
161
164
  ) : /* @__PURE__ */ m("div", { className: "flex flex-col items-center space-y-2 p-4 text-center", children: [
162
165
  /* @__PURE__ */ n(
163
166
  w,
164
167
  {
165
- type: $?.type ?? "plus",
168
+ icon: X,
166
169
  className: p("text-sub-label-text h-8 w-8", s?.icon)
167
170
  }
168
171
  ),
@@ -175,10 +178,10 @@ const V = ["B", "KB", "MB", "GB", "TB"], x = 1024, H = 5 * x * x, J = 5, Q = ["a
175
178
  ]
176
179
  }
177
180
  ),
178
- !D && T && /* @__PURE__ */ n("div", { className: "rounded-lg bg-red-50 p-3 text-sm text-red-600", children: T })
181
+ !D && M && /* @__PURE__ */ n("div", { className: "rounded-lg bg-red-50 p-3 text-sm text-red-600", children: M })
179
182
  ] });
180
183
  };
181
184
  export {
182
- me as FilesUploader
185
+ ve as FilesUploader
183
186
  };
184
187
  //# sourceMappingURL=components-files-uploader-files-uploader.js.map