@customafk/lunas-ui 0.0.7 → 0.0.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (584) hide show
  1. package/dist/{add-new-BaABbnol.js → add-new-BaTjxsdU.js} +1 -1
  2. package/dist/{add-new-BaABbnol.js.map → add-new-BaTjxsdU.js.map} +1 -1
  3. package/dist/{add-new-DUoS_-n2.cjs → add-new-aIL8RwI8.cjs} +2 -2
  4. package/dist/{add-new-DUoS_-n2.cjs.map → add-new-aIL8RwI8.cjs.map} +1 -1
  5. package/dist/alert-dialog-0KwdjY-6.js.map +1 -1
  6. package/dist/{alert-dialog-D5ZqgIiC.cjs → alert-dialog-BQv-ZvW9.cjs} +2 -2
  7. package/dist/{alert-dialog-D5ZqgIiC.cjs.map → alert-dialog-BQv-ZvW9.cjs.map} +1 -1
  8. package/dist/badge-D_qEoSL8.js.map +1 -1
  9. package/dist/{badge-CRXT2dH_.cjs → badge-DfSj5nwV.cjs} +2 -2
  10. package/dist/{badge-CRXT2dH_.cjs.map → badge-DfSj5nwV.cjs.map} +1 -1
  11. package/dist/button-Bku3bKv9.js.map +1 -1
  12. package/dist/button-Blg2XhHo.d.ts +23 -0
  13. package/dist/{button-Dzv_nos1.cjs → button-CycE0WzB.cjs} +2 -2
  14. package/dist/{button-Dzv_nos1.cjs.map → button-CycE0WzB.cjs.map} +1 -1
  15. package/dist/button-DThtZ8g0.d.cts +23 -0
  16. package/dist/calendar-5D53vIAn.js +2 -0
  17. package/dist/calendar-5D53vIAn.js.map +1 -0
  18. package/dist/calendar-CPFb8F_s.cjs +2 -0
  19. package/dist/calendar-CPFb8F_s.cjs.map +1 -0
  20. package/dist/{card-Dta5eW8u.cjs → card-D7C05tvk.cjs} +2 -2
  21. package/dist/{card-Dta5eW8u.cjs.map → card-D7C05tvk.cjs.map} +1 -1
  22. package/dist/card-D8cxRC5y.js.map +1 -1
  23. package/dist/cards/simple-card.cjs +1 -1
  24. package/dist/cards/simple-card.cjs.map +1 -1
  25. package/dist/cards/simple-card.d.cts +2 -1
  26. package/dist/cards/simple-card.d.ts +2 -1
  27. package/dist/cards/simple-card.js.map +1 -1
  28. package/dist/chunk-hhQzssFb.cjs +1 -0
  29. package/dist/command-ByvjNMyq.d.cts +53 -0
  30. package/dist/{command-CsntVmEz.cjs → command-D8k85t1c.cjs} +2 -2
  31. package/dist/{command-CsntVmEz.cjs.map → command-D8k85t1c.cjs.map} +1 -1
  32. package/dist/command-DXhsKiMq.d.ts +53 -0
  33. package/dist/{command-_L9bD9a-.js → command-DieInaEN.js} +1 -1
  34. package/dist/{command-_L9bD9a-.js.map → command-DieInaEN.js.map} +1 -1
  35. package/dist/data-display/country.cjs +1 -1
  36. package/dist/data-display/country.cjs.map +1 -1
  37. package/dist/data-display/country.d.ts +1 -1
  38. package/dist/data-display/country.js.map +1 -1
  39. package/dist/data-display/data-list.cjs +1 -1
  40. package/dist/data-display/data-list.cjs.map +1 -1
  41. package/dist/data-display/data-list.js.map +1 -1
  42. package/dist/data-display/date.cjs +1 -1
  43. package/dist/data-display/empty.cjs +1 -1
  44. package/dist/data-display/empty.d.cts +3 -1
  45. package/dist/data-display/empty.d.ts +3 -1
  46. package/dist/data-display/name.cjs +1 -1
  47. package/dist/data-display/name.cjs.map +1 -1
  48. package/dist/data-display/name.js.map +1 -1
  49. package/dist/data-display/phone-number.cjs +1 -1
  50. package/dist/data-display/phone-number.cjs.map +1 -1
  51. package/dist/data-display/phone-number.js.map +1 -1
  52. package/dist/data-display/role-badge.cjs +1 -1
  53. package/dist/data-display/role-badge.cjs.map +1 -1
  54. package/dist/data-display/role-badge.d.ts +1 -1
  55. package/dist/data-display/role-badge.js.map +1 -1
  56. package/dist/data-display/statistic.cjs +1 -1
  57. package/dist/data-display/statistic.cjs.map +1 -1
  58. package/dist/data-display/statistic.d.cts +25 -1
  59. package/dist/data-display/statistic.d.ts +25 -1
  60. package/dist/data-display/statistic.js +1 -1
  61. package/dist/data-display/statistic.js.map +1 -1
  62. package/dist/date-BMq_DNsv.js.map +1 -1
  63. package/dist/{date-nd8WkPlx.cjs → date-ByLOGsKl.cjs} +2 -2
  64. package/dist/{date-nd8WkPlx.cjs.map → date-ByLOGsKl.cjs.map} +1 -1
  65. package/dist/{dialog-MLCAvDJH.d.ts → dialog-B3V9xxdD.d.cts} +12 -11
  66. package/dist/dialog-C4hf-Puw.js.map +1 -1
  67. package/dist/{dialog-W-DmDMEE.cjs → dialog-Cn8cFeu-.cjs} +2 -2
  68. package/dist/{dialog-W-DmDMEE.cjs.map → dialog-Cn8cFeu-.cjs.map} +1 -1
  69. package/dist/{dialog-D3VF5qxy.d.cts → dialog-Dlozd6qY.d.ts} +12 -11
  70. package/dist/dialogs/confirm-dialog.cjs +1 -1
  71. package/dist/dialogs/confirm-dialog.cjs.map +1 -1
  72. package/dist/dialogs/confirm-dialog.js.map +1 -1
  73. package/dist/dialogs/detail-dialog/index.cjs +1 -1
  74. package/dist/dialogs/detail-dialog/index.cjs.map +1 -1
  75. package/dist/dialogs/detail-dialog/index.js +1 -1
  76. package/dist/dialogs/detail-dialog/index.js.map +1 -1
  77. package/dist/dialogs/error-dialog.cjs +1 -1
  78. package/dist/dialogs/form-dialog.cjs +1 -1
  79. package/dist/dialogs/form-dialog.cjs.map +1 -1
  80. package/dist/dialogs/form-dialog.d.cts +2 -1
  81. package/dist/dialogs/form-dialog.d.ts +2 -1
  82. package/dist/dialogs/form-dialog.js.map +1 -1
  83. package/dist/dialogs/loading-dialog.cjs +1 -1
  84. package/dist/dialogs/loading-dialog.cjs.map +1 -1
  85. package/dist/dialogs/loading-dialog.js.map +1 -1
  86. package/dist/{dropdown-menu-Bv18S56o.cjs → dropdown-menu-D2Kh77uw.cjs} +2 -2
  87. package/dist/{dropdown-menu-Bv18S56o.cjs.map → dropdown-menu-D2Kh77uw.cjs.map} +1 -1
  88. package/dist/{dropdown-menu-jCQwh2rG.js → dropdown-menu-DTFOCPH_.js} +1 -1
  89. package/dist/{dropdown-menu-jCQwh2rG.js.map → dropdown-menu-DTFOCPH_.js.map} +1 -1
  90. package/dist/{error-dialog-DpQgL5Hy.cjs → error-dialog-DO0Bb-pi.cjs} +2 -2
  91. package/dist/{error-dialog-DpQgL5Hy.cjs.map → error-dialog-DO0Bb-pi.cjs.map} +1 -1
  92. package/dist/error-dialog-D_4WL-Hj.js.map +1 -1
  93. package/dist/flex-ILvQrYMJ.js.map +1 -1
  94. package/dist/{flex-CNA_SId-.cjs → flex-yTyoLpgH.cjs} +2 -2
  95. package/dist/{flex-CNA_SId-.cjs.map → flex-yTyoLpgH.cjs.map} +1 -1
  96. package/dist/form-CA4hhSV5.js.map +1 -1
  97. package/dist/{form-CYZkgobJ.cjs → form-C_PCHrpx.cjs} +2 -2
  98. package/dist/{form-CYZkgobJ.cjs.map → form-C_PCHrpx.cjs.map} +1 -1
  99. package/dist/form-wrapper-D-2Uz518.js.map +1 -1
  100. package/dist/{form-wrapper-BYbwt1zC.cjs → form-wrapper-FYiHHas7.cjs} +2 -2
  101. package/dist/{form-wrapper-BYbwt1zC.cjs.map → form-wrapper-FYiHHas7.cjs.map} +1 -1
  102. package/dist/forms/combobox-field.cjs +42 -0
  103. package/dist/forms/combobox-field.cjs.map +1 -0
  104. package/dist/forms/combobox-field.d.cts +28 -0
  105. package/dist/forms/combobox-field.d.ts +28 -0
  106. package/dist/forms/combobox-field.js +42 -0
  107. package/dist/forms/combobox-field.js.map +1 -0
  108. package/dist/forms/date-field.cjs +2 -0
  109. package/dist/forms/date-field.cjs.map +1 -0
  110. package/dist/forms/date-field.d.cts +22 -0
  111. package/dist/forms/date-field.d.ts +22 -0
  112. package/dist/forms/date-field.js +2 -0
  113. package/dist/forms/date-field.js.map +1 -0
  114. package/dist/forms/form-wrapper.cjs +1 -1
  115. package/dist/forms/form-wrapper.d.cts +2 -1
  116. package/dist/forms/form-wrapper.d.ts +2 -1
  117. package/dist/forms/multi-select-field.cjs +2 -0
  118. package/dist/forms/multi-select-field.cjs.map +1 -0
  119. package/dist/forms/multi-select-field.d.cts +30 -0
  120. package/dist/forms/multi-select-field.d.ts +30 -0
  121. package/dist/forms/multi-select-field.js +2 -0
  122. package/dist/forms/multi-select-field.js.map +1 -0
  123. package/dist/forms/number-field.cjs +2 -0
  124. package/dist/forms/number-field.cjs.map +1 -0
  125. package/dist/forms/number-field.d.cts +28 -0
  126. package/dist/forms/number-field.d.ts +28 -0
  127. package/dist/forms/number-field.js +2 -0
  128. package/dist/forms/number-field.js.map +1 -0
  129. package/dist/forms/password-field.cjs +2 -0
  130. package/dist/forms/password-field.cjs.map +1 -0
  131. package/dist/forms/password-field.d.cts +23 -0
  132. package/dist/forms/password-field.d.ts +23 -0
  133. package/dist/forms/password-field.js +2 -0
  134. package/dist/forms/password-field.js.map +1 -0
  135. package/dist/forms/select-field.cjs +2 -0
  136. package/dist/forms/select-field.cjs.map +1 -0
  137. package/dist/forms/select-field.d.cts +33 -0
  138. package/dist/forms/select-field.d.ts +33 -0
  139. package/dist/forms/select-field.js +2 -0
  140. package/dist/forms/select-field.js.map +1 -0
  141. package/dist/forms/switch-field.cjs +2 -0
  142. package/dist/forms/switch-field.cjs.map +1 -0
  143. package/dist/forms/switch-field.d.cts +19 -0
  144. package/dist/forms/switch-field.d.ts +19 -0
  145. package/dist/forms/switch-field.js +2 -0
  146. package/dist/forms/switch-field.js.map +1 -0
  147. package/dist/forms/text-field.cjs +2 -0
  148. package/dist/forms/text-field.cjs.map +1 -0
  149. package/dist/forms/text-field.d.cts +31 -0
  150. package/dist/forms/text-field.d.ts +31 -0
  151. package/dist/forms/text-field.js +2 -0
  152. package/dist/forms/text-field.js.map +1 -0
  153. package/dist/forms/textarea-field.cjs +2 -0
  154. package/dist/forms/textarea-field.cjs.map +1 -0
  155. package/dist/forms/textarea-field.d.cts +27 -0
  156. package/dist/forms/textarea-field.d.ts +27 -0
  157. package/dist/forms/textarea-field.js +2 -0
  158. package/dist/forms/textarea-field.js.map +1 -0
  159. package/dist/{input-DXEBB91E.cjs → input-C8Sebaue.cjs} +2 -2
  160. package/dist/{input-DXEBB91E.cjs.map → input-C8Sebaue.cjs.map} +1 -1
  161. package/dist/{input-D0Phuz25.d.cts → input-DlRU8OGl.d.cts} +3 -2
  162. package/dist/{input-FzKbxUq2.js → input-Dmaq3fzf.js} +1 -1
  163. package/dist/{input-FzKbxUq2.js.map → input-Dmaq3fzf.js.map} +1 -1
  164. package/dist/{input-tHIKXxVS.d.ts → input-yduNlg8y.d.ts} +3 -2
  165. package/dist/label-Cxbctr6x.js.map +1 -1
  166. package/dist/{label-CunjD1rx.cjs → label-i858Jr98.cjs} +2 -2
  167. package/dist/{label-CunjD1rx.cjs.map → label-i858Jr98.cjs.map} +1 -1
  168. package/dist/layouts/flex.cjs +1 -1
  169. package/dist/layouts/flex.d.cts +13 -2
  170. package/dist/layouts/flex.d.ts +13 -2
  171. package/dist/layouts/main/index.cjs +1 -1
  172. package/dist/layouts/main/index.cjs.map +1 -1
  173. package/dist/layouts/main/index.d.cts +14 -4
  174. package/dist/layouts/main/index.d.ts +14 -4
  175. package/dist/layouts/main/index.js +1 -1
  176. package/dist/layouts/main/index.js.map +1 -1
  177. package/dist/multi-select-Bbv0Z0TP.js +2 -0
  178. package/dist/multi-select-Bbv0Z0TP.js.map +1 -0
  179. package/dist/multi-select-EqlnkO5V.cjs +2 -0
  180. package/dist/multi-select-EqlnkO5V.cjs.map +1 -0
  181. package/dist/paragraph-Bey03JkA.js.map +1 -1
  182. package/dist/{paragraph-ZxI8zxuf.cjs → paragraph-DWQ0PZt_.cjs} +2 -2
  183. package/dist/{paragraph-ZxI8zxuf.cjs.map → paragraph-DWQ0PZt_.cjs.map} +1 -1
  184. package/dist/popover-B8j86VQv.js +2 -0
  185. package/dist/popover-B8j86VQv.js.map +1 -0
  186. package/dist/popover-CAokgoc_.cjs +2 -0
  187. package/dist/popover-CAokgoc_.cjs.map +1 -0
  188. package/dist/{progress-BnnOfAZN.cjs → progress-CHh9eRZi.cjs} +2 -2
  189. package/dist/{progress-BnnOfAZN.cjs.map → progress-CHh9eRZi.cjs.map} +1 -1
  190. package/dist/{progress-CBccqUUJ.js → progress-CeXKNvJc.js} +1 -1
  191. package/dist/{progress-CBccqUUJ.js.map → progress-CeXKNvJc.js.map} +1 -1
  192. package/dist/{refresh-BHt_h3N_.js → refresh-B__T7OFC.js} +1 -1
  193. package/dist/{refresh-BHt_h3N_.js.map → refresh-B__T7OFC.js.map} +1 -1
  194. package/dist/{refresh-DrolZxuC.cjs → refresh-BuL5nDf9.cjs} +2 -2
  195. package/dist/{refresh-DrolZxuC.cjs.map → refresh-BuL5nDf9.cjs.map} +1 -1
  196. package/dist/{scroll-area-Bdb_LSFF.js → scroll-area-C0KQbcG0.js} +1 -1
  197. package/dist/{scroll-area-Bdb_LSFF.js.map → scroll-area-C0KQbcG0.js.map} +1 -1
  198. package/dist/{scroll-area-DWWpaz5j.cjs → scroll-area-fNeFxa8L.cjs} +2 -2
  199. package/dist/{scroll-area-DWWpaz5j.cjs.map → scroll-area-fNeFxa8L.cjs.map} +1 -1
  200. package/dist/{search-input-L2sq0eB0.js → search-input-BGmx8sXy.js} +2 -2
  201. package/dist/{search-input-L2sq0eB0.js.map → search-input-BGmx8sXy.js.map} +1 -1
  202. package/dist/{search-input-Bf4-FeWu.cjs → search-input-CWCcWgmA.cjs} +2 -2
  203. package/dist/{search-input-Bf4-FeWu.cjs.map → search-input-CWCcWgmA.cjs.map} +1 -1
  204. package/dist/{select-CWUsisI0.js → select-4IO3vAjO.js} +1 -1
  205. package/dist/{select-CWUsisI0.js.map → select-4IO3vAjO.js.map} +1 -1
  206. package/dist/{select-ZSyt5zCe.cjs → select-UsiicIRo.cjs} +2 -2
  207. package/dist/{select-ZSyt5zCe.cjs.map → select-UsiicIRo.cjs.map} +1 -1
  208. package/dist/{separator-2cwfp8qT.d.ts → separator-C4XPc_2Y.d.cts} +3 -2
  209. package/dist/{separator-DTB3sDNG.cjs → separator-D4iTmsID.cjs} +2 -2
  210. package/dist/{separator-DTB3sDNG.cjs.map → separator-D4iTmsID.cjs.map} +1 -1
  211. package/dist/{separator-BpsL0PlX.js → separator-DMdqEz29.js} +1 -1
  212. package/dist/{separator-BpsL0PlX.js.map → separator-DMdqEz29.js.map} +1 -1
  213. package/dist/{separator-COXs-I-Q.d.cts → separator-o7tKOtGF.d.ts} +3 -2
  214. package/dist/{sheet-C8r2QGpq.js → sheet-2JqHfdYi.js} +1 -1
  215. package/dist/{sheet-C8r2QGpq.js.map → sheet-2JqHfdYi.js.map} +1 -1
  216. package/dist/{sheet-CCwbAaA6.cjs → sheet-Dr-a3-o2.cjs} +2 -2
  217. package/dist/{sheet-CCwbAaA6.cjs.map → sheet-Dr-a3-o2.cjs.map} +1 -1
  218. package/dist/{sidebar-C166f_9B.js → sidebar-COBzB7S8.js} +2 -2
  219. package/dist/{sidebar-C166f_9B.js.map → sidebar-COBzB7S8.js.map} +1 -1
  220. package/dist/{sidebar-BLPMNltJ.cjs → sidebar-gXuaHBie.cjs} +2 -2
  221. package/dist/{sidebar-BLPMNltJ.cjs.map → sidebar-gXuaHBie.cjs.map} +1 -1
  222. package/dist/{skeleton-m3giaF4T.cjs → skeleton-BTQm_mtV.cjs} +2 -2
  223. package/dist/{skeleton-m3giaF4T.cjs.map → skeleton-BTQm_mtV.cjs.map} +1 -1
  224. package/dist/{skeleton-DYmX0k94.js → skeleton-D1_Brnl9.js} +1 -1
  225. package/dist/{skeleton-DYmX0k94.js.map → skeleton-D1_Brnl9.js.map} +1 -1
  226. package/dist/switch-BlK-TC1h.js +2 -0
  227. package/dist/switch-BlK-TC1h.js.map +1 -0
  228. package/dist/switch-CoP3UwNk.cjs +2 -0
  229. package/dist/switch-CoP3UwNk.cjs.map +1 -0
  230. package/dist/table/index.cjs +1 -1
  231. package/dist/table/index.cjs.map +1 -1
  232. package/dist/table/index.d.cts +2 -1
  233. package/dist/table/index.d.ts +2 -1
  234. package/dist/table/index.js +1 -1
  235. package/dist/table/index.js.map +1 -1
  236. package/dist/{table-BSeev7T0.cjs → table-CFqnfTKO.cjs} +2 -2
  237. package/dist/{table-BSeev7T0.cjs.map → table-CFqnfTKO.cjs.map} +1 -1
  238. package/dist/{table-BvA64mE8.js → table-DrnU8YJP.js} +1 -1
  239. package/dist/{table-BvA64mE8.js.map → table-DrnU8YJP.js.map} +1 -1
  240. package/dist/textarea-Dz6npuI4.cjs +2 -0
  241. package/dist/textarea-Dz6npuI4.cjs.map +1 -0
  242. package/dist/textarea-dM1DYNfF.js +2 -0
  243. package/dist/textarea-dM1DYNfF.js.map +1 -0
  244. package/dist/{title-DTkABsIG.js → title-CA6PvqiD.js} +1 -1
  245. package/dist/{title-DTkABsIG.js.map → title-CA6PvqiD.js.map} +1 -1
  246. package/dist/{title-xsPZpQpb.cjs → title-CIQdEGOd.cjs} +2 -2
  247. package/dist/{title-xsPZpQpb.cjs.map → title-CIQdEGOd.cjs.map} +1 -1
  248. package/dist/toggle-BCSHdzP0.d.cts +20 -0
  249. package/dist/{toggle-D_MDMruK.js → toggle-CHJ2edke.js} +1 -1
  250. package/dist/{toggle-D_MDMruK.js.map → toggle-CHJ2edke.js.map} +1 -1
  251. package/dist/{toggle-CfL3GVe2.cjs → toggle-CzMYdDvC.cjs} +2 -2
  252. package/dist/{toggle-CfL3GVe2.cjs.map → toggle-CzMYdDvC.cjs.map} +1 -1
  253. package/dist/toggle-D42pqCTD.d.ts +20 -0
  254. package/dist/tooltip-DZ2Shzgg.d.ts +24 -0
  255. package/dist/tooltip-Dn8AOhc4.d.cts +24 -0
  256. package/dist/tooltip-Dzyf5smh.js.map +1 -1
  257. package/dist/{tooltip-Beb-_EPp.cjs → tooltip-MgToVOzy.cjs} +2 -2
  258. package/dist/{tooltip-Beb-_EPp.cjs.map → tooltip-MgToVOzy.cjs.map} +1 -1
  259. package/dist/{types-DLrIc2fL.d.ts → types-CmcNT14g.d.ts} +1 -1
  260. package/dist/types-CrbWxjnp.cjs.map +1 -1
  261. package/dist/types-DaIHddx7.js.map +1 -1
  262. package/dist/typography/paragraph.cjs +1 -1
  263. package/dist/typography/paragraph.d.cts +2 -1
  264. package/dist/typography/paragraph.d.ts +2 -1
  265. package/dist/typography/title.cjs +1 -1
  266. package/dist/typography/title.d.cts +3 -1
  267. package/dist/typography/title.d.ts +3 -1
  268. package/dist/typography/title.js +1 -1
  269. package/dist/ui/alert-dialog.cjs +1 -1
  270. package/dist/ui/alert-dialog.d.cts +12 -11
  271. package/dist/ui/alert-dialog.d.ts +12 -11
  272. package/dist/ui/alert.cjs +1 -1
  273. package/dist/ui/alert.cjs.map +1 -1
  274. package/dist/ui/alert.d.cts +8 -4
  275. package/dist/ui/alert.d.ts +8 -4
  276. package/dist/ui/alert.js.map +1 -1
  277. package/dist/ui/aspect-ratio.cjs +1 -1
  278. package/dist/ui/aspect-ratio.cjs.map +1 -1
  279. package/dist/ui/aspect-ratio.d.cts +2 -1
  280. package/dist/ui/aspect-ratio.d.ts +2 -1
  281. package/dist/ui/aspect-ratio.js.map +1 -1
  282. package/dist/ui/avatar.cjs +1 -1
  283. package/dist/ui/avatar.cjs.map +1 -1
  284. package/dist/ui/avatar.d.cts +4 -3
  285. package/dist/ui/avatar.d.ts +4 -3
  286. package/dist/ui/avatar.js.map +1 -1
  287. package/dist/ui/badge.cjs +1 -1
  288. package/dist/ui/badge.d.cts +8 -2
  289. package/dist/ui/badge.d.ts +8 -2
  290. package/dist/ui/breadcrumb.cjs +1 -1
  291. package/dist/ui/breadcrumb.cjs.map +1 -1
  292. package/dist/ui/breadcrumb.d.cts +8 -7
  293. package/dist/ui/breadcrumb.d.ts +8 -7
  294. package/dist/ui/breadcrumb.js.map +1 -1
  295. package/dist/ui/button.cjs +1 -1
  296. package/dist/ui/button.d.cts +1 -1
  297. package/dist/ui/button.d.ts +1 -1
  298. package/dist/ui/buttons/add-new.cjs +1 -1
  299. package/dist/ui/buttons/add-new.js +1 -1
  300. package/dist/ui/buttons/refresh.cjs +1 -1
  301. package/dist/ui/buttons/refresh.js +1 -1
  302. package/dist/ui/calendar.cjs +1 -2
  303. package/dist/ui/calendar.d.cts +4 -3
  304. package/dist/ui/calendar.d.ts +4 -3
  305. package/dist/ui/calendar.js +1 -2
  306. package/dist/ui/card.cjs +1 -1
  307. package/dist/ui/card.d.cts +8 -7
  308. package/dist/ui/card.d.ts +8 -7
  309. package/dist/ui/carousel.cjs +1 -1
  310. package/dist/ui/carousel.cjs.map +1 -1
  311. package/dist/ui/carousel.d.cts +7 -6
  312. package/dist/ui/carousel.d.ts +7 -6
  313. package/dist/ui/carousel.js.map +1 -1
  314. package/dist/ui/collapsible.cjs +1 -1
  315. package/dist/ui/collapsible.cjs.map +1 -1
  316. package/dist/ui/collapsible.d.cts +4 -3
  317. package/dist/ui/collapsible.d.ts +4 -3
  318. package/dist/ui/collapsible.js.map +1 -1
  319. package/dist/ui/command.cjs +1 -1
  320. package/dist/ui/command.d.cts +3 -52
  321. package/dist/ui/command.d.ts +3 -52
  322. package/dist/ui/command.js +1 -1
  323. package/dist/ui/context-menu.cjs +1 -1
  324. package/dist/ui/context-menu.cjs.map +1 -1
  325. package/dist/ui/context-menu.d.cts +16 -15
  326. package/dist/ui/context-menu.d.ts +16 -15
  327. package/dist/ui/context-menu.js.map +1 -1
  328. package/dist/ui/dialog.cjs +1 -1
  329. package/dist/ui/dialog.d.cts +1 -1
  330. package/dist/ui/dialog.d.ts +1 -1
  331. package/dist/ui/dropdown-menu.cjs +1 -1
  332. package/dist/ui/dropdown-menu.d.cts +16 -15
  333. package/dist/ui/dropdown-menu.d.ts +16 -15
  334. package/dist/ui/dropdown-menu.js +1 -1
  335. package/dist/ui/file-uploader.cjs +1 -1
  336. package/dist/ui/file-uploader.cjs.map +1 -1
  337. package/dist/ui/file-uploader.d.cts +2 -1
  338. package/dist/ui/file-uploader.d.ts +2 -1
  339. package/dist/ui/file-uploader.js +1 -1
  340. package/dist/ui/file-uploader.js.map +1 -1
  341. package/dist/ui/form.cjs +1 -1
  342. package/dist/ui/form.d.cts +23 -8
  343. package/dist/ui/form.d.ts +23 -8
  344. package/dist/ui/hover-card.cjs +1 -1
  345. package/dist/ui/hover-card.cjs.map +1 -1
  346. package/dist/ui/hover-card.d.cts +4 -3
  347. package/dist/ui/hover-card.d.ts +4 -3
  348. package/dist/ui/hover-card.js.map +1 -1
  349. package/dist/ui/input-otp.cjs +1 -1
  350. package/dist/ui/input-otp.cjs.map +1 -1
  351. package/dist/ui/input-otp.d.cts +5 -4
  352. package/dist/ui/input-otp.d.ts +5 -4
  353. package/dist/ui/input-otp.js.map +1 -1
  354. package/dist/ui/input.cjs +1 -1
  355. package/dist/ui/input.d.cts +1 -1
  356. package/dist/ui/input.d.ts +1 -1
  357. package/dist/ui/input.js +1 -1
  358. package/dist/ui/inputs/search-input.cjs +1 -1
  359. package/dist/ui/inputs/search-input.d.cts +3 -2
  360. package/dist/ui/inputs/search-input.d.ts +3 -2
  361. package/dist/ui/inputs/search-input.js +1 -1
  362. package/dist/ui/label.cjs +1 -1
  363. package/dist/ui/label.d.cts +2 -1
  364. package/dist/ui/label.d.ts +2 -1
  365. package/dist/ui/menubar.cjs +1 -1
  366. package/dist/ui/menubar.cjs.map +1 -1
  367. package/dist/ui/menubar.d.cts +17 -16
  368. package/dist/ui/menubar.d.ts +17 -16
  369. package/dist/ui/menubar.js.map +1 -1
  370. package/dist/ui/multi-select.cjs +1 -2
  371. package/dist/ui/multi-select.d.cts +61 -1
  372. package/dist/ui/multi-select.d.ts +61 -1
  373. package/dist/ui/multi-select.js +1 -2
  374. package/dist/ui/navigation-menu.cjs +1 -1
  375. package/dist/ui/navigation-menu.cjs.map +1 -1
  376. package/dist/ui/navigation-menu.d.cts +11 -9
  377. package/dist/ui/navigation-menu.d.ts +11 -9
  378. package/dist/ui/navigation-menu.js.map +1 -1
  379. package/dist/ui/pagination.cjs +1 -1
  380. package/dist/ui/pagination.cjs.map +1 -1
  381. package/dist/ui/pagination.d.cts +9 -8
  382. package/dist/ui/pagination.d.ts +9 -8
  383. package/dist/ui/pagination.js.map +1 -1
  384. package/dist/ui/popover.cjs +1 -2
  385. package/dist/ui/popover.d.cts +5 -4
  386. package/dist/ui/popover.d.ts +5 -4
  387. package/dist/ui/popover.js +1 -2
  388. package/dist/ui/progress.cjs +1 -1
  389. package/dist/ui/progress.d.cts +2 -1
  390. package/dist/ui/progress.d.ts +2 -1
  391. package/dist/ui/progress.js +1 -1
  392. package/dist/ui/radio-group.cjs +1 -1
  393. package/dist/ui/radio-group.cjs.map +1 -1
  394. package/dist/ui/radio-group.d.cts +3 -2
  395. package/dist/ui/radio-group.d.ts +3 -2
  396. package/dist/ui/radio-group.js.map +1 -1
  397. package/dist/ui/resizable.cjs +1 -1
  398. package/dist/ui/resizable.cjs.map +1 -1
  399. package/dist/ui/resizable.d.cts +4 -3
  400. package/dist/ui/resizable.d.ts +4 -3
  401. package/dist/ui/resizable.js.map +1 -1
  402. package/dist/ui/scroll-area.cjs +1 -1
  403. package/dist/ui/scroll-area.d.cts +3 -2
  404. package/dist/ui/scroll-area.d.ts +3 -2
  405. package/dist/ui/scroll-area.js +1 -1
  406. package/dist/ui/select.cjs +1 -1
  407. package/dist/ui/select.d.cts +11 -10
  408. package/dist/ui/select.d.ts +11 -10
  409. package/dist/ui/select.js +1 -1
  410. package/dist/ui/separator.cjs +1 -1
  411. package/dist/ui/separator.d.cts +1 -1
  412. package/dist/ui/separator.d.ts +1 -1
  413. package/dist/ui/separator.js +1 -1
  414. package/dist/ui/sheet.cjs +1 -1
  415. package/dist/ui/sheet.d.cts +9 -8
  416. package/dist/ui/sheet.d.ts +9 -8
  417. package/dist/ui/sheet.js +1 -1
  418. package/dist/ui/sidebar.cjs +1 -1
  419. package/dist/ui/sidebar.d.cts +43 -29
  420. package/dist/ui/sidebar.d.ts +43 -29
  421. package/dist/ui/sidebar.js +1 -1
  422. package/dist/ui/skeleton.cjs +1 -1
  423. package/dist/ui/skeleton.d.cts +2 -1
  424. package/dist/ui/skeleton.d.ts +2 -1
  425. package/dist/ui/skeleton.js +1 -1
  426. package/dist/ui/slider.cjs +1 -1
  427. package/dist/ui/slider.cjs.map +1 -1
  428. package/dist/ui/slider.d.cts +2 -1
  429. package/dist/ui/slider.d.ts +2 -1
  430. package/dist/ui/slider.js.map +1 -1
  431. package/dist/ui/sonner.cjs +1 -1
  432. package/dist/ui/sonner.cjs.map +1 -1
  433. package/dist/ui/sonner.d.cts +3 -1
  434. package/dist/ui/sonner.d.ts +3 -1
  435. package/dist/ui/sonner.js.map +1 -1
  436. package/dist/ui/switch.cjs +1 -2
  437. package/dist/ui/switch.d.cts +2 -1
  438. package/dist/ui/switch.d.ts +2 -1
  439. package/dist/ui/switch.js +1 -2
  440. package/dist/ui/table.cjs +1 -1
  441. package/dist/ui/table.d.cts +9 -8
  442. package/dist/ui/table.d.ts +9 -8
  443. package/dist/ui/table.js +1 -1
  444. package/dist/ui/tabs.cjs +1 -1
  445. package/dist/ui/tabs.cjs.map +1 -1
  446. package/dist/ui/tabs.d.cts +5 -4
  447. package/dist/ui/tabs.d.ts +5 -4
  448. package/dist/ui/tabs.js.map +1 -1
  449. package/dist/ui/textarea.cjs +1 -2
  450. package/dist/ui/textarea.d.cts +2 -1
  451. package/dist/ui/textarea.d.ts +2 -1
  452. package/dist/ui/textarea.js +1 -2
  453. package/dist/ui/toggle-group.cjs +1 -1
  454. package/dist/ui/toggle-group.cjs.map +1 -1
  455. package/dist/ui/toggle-group.d.cts +4 -3
  456. package/dist/ui/toggle-group.d.ts +4 -3
  457. package/dist/ui/toggle-group.js +1 -1
  458. package/dist/ui/toggle-group.js.map +1 -1
  459. package/dist/ui/toggle.cjs +1 -1
  460. package/dist/ui/toggle.d.cts +1 -1
  461. package/dist/ui/toggle.d.ts +1 -1
  462. package/dist/ui/toggle.js +1 -1
  463. package/dist/ui/tooltip.cjs +1 -1
  464. package/dist/ui/tooltip.d.cts +1 -1
  465. package/dist/ui/tooltip.d.ts +1 -1
  466. package/dist/utils-D9AH0PUV.js +1 -1
  467. package/dist/utils-D9AH0PUV.js.map +1 -1
  468. package/dist/utils-DaJ1XZgX.cjs +2 -0
  469. package/dist/{utils-BsjVK5EW.cjs.map → utils-DaJ1XZgX.cjs.map} +1 -1
  470. package/package.json +51 -4
  471. package/packages/components/cards/simple-card.tsx +37 -0
  472. package/packages/components/data-display/country.tsx +59 -0
  473. package/packages/components/data-display/data-list.tsx +38 -0
  474. package/packages/components/data-display/date.tsx +215 -0
  475. package/packages/components/data-display/empty.tsx +25 -0
  476. package/packages/components/data-display/name.tsx +25 -0
  477. package/packages/components/data-display/phone-number.tsx +22 -0
  478. package/packages/components/data-display/role-badge.tsx +33 -0
  479. package/packages/components/data-display/statistic.tsx +141 -0
  480. package/packages/components/dialogs/confirm-dialog.tsx +51 -0
  481. package/packages/components/dialogs/detail-dialog/component/header.tsx +14 -0
  482. package/packages/components/dialogs/detail-dialog/component/main.tsx +39 -0
  483. package/packages/components/dialogs/detail-dialog/component/sidebar.tsx +747 -0
  484. package/packages/components/dialogs/detail-dialog/component/wrapper.tsx +17 -0
  485. package/packages/components/dialogs/detail-dialog/index.tsx +100 -0
  486. package/packages/components/dialogs/error-dialog.tsx +48 -0
  487. package/packages/components/dialogs/form-dialog.tsx +106 -0
  488. package/packages/components/dialogs/loading-dialog.tsx +23 -0
  489. package/packages/components/forms/combobox-field.tsx +113 -0
  490. package/packages/components/forms/date-field.tsx +65 -0
  491. package/packages/components/forms/form-wrapper.tsx +146 -0
  492. package/packages/components/forms/multi-select-field.tsx +56 -0
  493. package/packages/components/forms/number-field.tsx +56 -0
  494. package/packages/components/forms/password-field.tsx +38 -0
  495. package/packages/components/forms/select-field.tsx +58 -0
  496. package/packages/components/forms/switch-field.tsx +42 -0
  497. package/packages/components/forms/text-field.tsx +80 -0
  498. package/packages/components/forms/textarea-field.tsx +53 -0
  499. package/packages/components/index.tsx +0 -0
  500. package/packages/components/layouts/flex.tsx +110 -0
  501. package/packages/components/layouts/main/content.tsx +11 -0
  502. package/packages/components/layouts/main/header.tsx +53 -0
  503. package/packages/components/layouts/main/index.tsx +3 -0
  504. package/packages/components/layouts/main/wrapper.tsx +5 -0
  505. package/packages/components/table/data-table-pagination.tsx +99 -0
  506. package/packages/components/table/data-table.tsx +328 -0
  507. package/packages/components/table/index.tsx +126 -0
  508. package/packages/components/typography/paragraph.tsx +32 -0
  509. package/packages/components/typography/title.tsx +36 -0
  510. package/packages/components/ui/alert-dialog.tsx +173 -0
  511. package/packages/components/ui/alert.tsx +71 -0
  512. package/packages/components/ui/aspect-ratio.tsx +20 -0
  513. package/packages/components/ui/avatar.tsx +52 -0
  514. package/packages/components/ui/badge.tsx +63 -0
  515. package/packages/components/ui/breadcrumb.tsx +110 -0
  516. package/packages/components/ui/button.tsx +88 -0
  517. package/packages/components/ui/buttons/add-new.tsx +26 -0
  518. package/packages/components/ui/buttons/refresh.tsx +30 -0
  519. package/packages/components/ui/calendar.tsx +209 -0
  520. package/packages/components/ui/card.tsx +95 -0
  521. package/packages/components/ui/carousel.tsx +241 -0
  522. package/packages/components/ui/checkbox.tsx +44 -0
  523. package/packages/components/ui/collapsible.tsx +33 -0
  524. package/packages/components/ui/command.tsx +217 -0
  525. package/packages/components/ui/context-menu.tsx +258 -0
  526. package/packages/components/ui/dialog.tsx +174 -0
  527. package/packages/components/ui/dropdown-menu.tsx +318 -0
  528. package/packages/components/ui/file-uploader.tsx +372 -0
  529. package/packages/components/ui/form.tsx +168 -0
  530. package/packages/components/ui/hover-card.tsx +43 -0
  531. package/packages/components/ui/input-otp.tsx +76 -0
  532. package/packages/components/ui/input.tsx +59 -0
  533. package/packages/components/ui/inputs/number-input.tsx +325 -0
  534. package/packages/components/ui/inputs/password-input.tsx +35 -0
  535. package/packages/components/ui/inputs/search-input.tsx +24 -0
  536. package/packages/components/ui/label.tsx +29 -0
  537. package/packages/components/ui/menubar.tsx +275 -0
  538. package/packages/components/ui/multi-select.tsx +693 -0
  539. package/packages/components/ui/navigation-menu.tsx +170 -0
  540. package/packages/components/ui/pagination.tsx +128 -0
  541. package/packages/components/ui/popover.tsx +64 -0
  542. package/packages/components/ui/progress.tsx +30 -0
  543. package/packages/components/ui/radio-group.tsx +53 -0
  544. package/packages/components/ui/resizable.tsx +55 -0
  545. package/packages/components/ui/scroll-area.tsx +51 -0
  546. package/packages/components/ui/select.tsx +246 -0
  547. package/packages/components/ui/separator.tsx +27 -0
  548. package/packages/components/ui/sheet.tsx +155 -0
  549. package/packages/components/ui/sidebar.tsx +751 -0
  550. package/packages/components/ui/skeleton.tsx +15 -0
  551. package/packages/components/ui/slider.tsx +62 -0
  552. package/packages/components/ui/sonner.tsx +43 -0
  553. package/packages/components/ui/switch.tsx +52 -0
  554. package/packages/components/ui/table.tsx +118 -0
  555. package/packages/components/ui/tabs.tsx +85 -0
  556. package/packages/components/ui/textarea.tsx +47 -0
  557. package/packages/components/ui/toggle-group.tsx +72 -0
  558. package/packages/components/ui/toggle.tsx +47 -0
  559. package/packages/components/ui/tooltip.tsx +71 -0
  560. package/packages/constants.tsx +79 -0
  561. package/packages/hooks/use-callback-ref.ts +27 -0
  562. package/packages/hooks/use-controllable-state.ts +67 -0
  563. package/packages/hooks/use-mobile.ts +21 -0
  564. package/packages/index.css +392 -0
  565. package/packages/lib/utils.ts +28 -0
  566. package/packages/types.ts +50 -0
  567. package/dist/button-D_E_bNRb.d.ts +0 -18
  568. package/dist/button-YHI7I64h.d.cts +0 -18
  569. package/dist/chunk-CUT6urMc.cjs +0 -1
  570. package/dist/toggle-BVkMTVAz.d.ts +0 -15
  571. package/dist/toggle-CW-ZnYMy.d.cts +0 -15
  572. package/dist/tooltip-Cjuu_Ld4.d.ts +0 -23
  573. package/dist/tooltip-Dk4HsZVR.d.cts +0 -23
  574. package/dist/ui/calendar.cjs.map +0 -1
  575. package/dist/ui/calendar.js.map +0 -1
  576. package/dist/ui/multi-select.cjs.map +0 -1
  577. package/dist/ui/multi-select.js.map +0 -1
  578. package/dist/ui/popover.cjs.map +0 -1
  579. package/dist/ui/popover.js.map +0 -1
  580. package/dist/ui/switch.cjs.map +0 -1
  581. package/dist/ui/switch.js.map +0 -1
  582. package/dist/ui/textarea.cjs.map +0 -1
  583. package/dist/ui/textarea.js.map +0 -1
  584. package/dist/utils-BsjVK5EW.cjs +0 -2
@@ -1 +1 @@
1
- {"version":3,"file":"sidebar-BLPMNltJ.cjs","names":["React","React","open","TooltipProvider","cn","Sheet","SheetContent","SheetHeader","SheetTitle","SheetDescription","Button","MenuIcon","Input","Separator","SlotPrimitive","Tooltip","TooltipTrigger","TooltipContent","Skeleton"],"sources":["../packages/hooks/use-mobile.ts","../packages/components/ui/sidebar.tsx"],"sourcesContent":["import React from \"react\";\n\nconst MOBILE_BREAKPOINT = 768;\n\nexport function useIsMobile() {\n const [isMobile, setIsMobile] = React.useState<boolean | undefined>(\n undefined,\n );\n\n React.useEffect(() => {\n const mql = window.matchMedia(`(max-width: ${MOBILE_BREAKPOINT - 1}px)`);\n const onChange = () => {\n setIsMobile(window.innerWidth < MOBILE_BREAKPOINT);\n };\n mql.addEventListener(\"change\", onChange);\n setIsMobile(window.innerWidth < MOBILE_BREAKPOINT);\n return () => mql.removeEventListener(\"change\", onChange);\n }, []);\n\n return !!isMobile;\n}\n","\"use client\";\nimport React from \"react\";\nimport { Slot as SlotPrimitive } from \"radix-ui\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport { MenuIcon } from \"lucide-react\";\n\nimport { Button } from \"@/components/ui/button\";\nimport { Input } from \"@/components/ui/input\";\nimport { Separator } from \"@/components/ui/separator\";\nimport {\n Sheet,\n SheetContent,\n SheetDescription,\n SheetHeader,\n SheetTitle,\n} from \"@/components/ui/sheet\";\nimport { Skeleton } from \"@/components/ui/skeleton\";\nimport {\n Tooltip,\n TooltipContent,\n TooltipProvider,\n TooltipTrigger,\n} from \"@/components/ui/tooltip\";\nimport { useIsMobile } from \"@/hooks/use-mobile\";\nimport { cn } from \"@/lib/utils\";\n\nconst SIDEBAR_COOKIE_NAME = \"sidebar_state\";\nconst SIDEBAR_COOKIE_MAX_AGE = 60 * 60 * 24 * 7;\nconst SIDEBAR_WIDTH = \"16rem\";\nconst SIDEBAR_WIDTH_MOBILE = \"18rem\";\nconst SIDEBAR_WIDTH_ICON = \"3rem\";\nconst SIDEBAR_KEYBOARD_SHORTCUT = \"b\";\n\ntype SidebarContextProps = {\n state: \"expanded\" | \"collapsed\";\n open: boolean;\n setOpen: (open: boolean) => void;\n openMobile: boolean;\n setOpenMobile: (open: boolean) => void;\n isMobile: boolean;\n toggleSidebar: () => void;\n};\n\nconst SidebarContext = React.createContext<SidebarContextProps | null>(null);\n\nfunction useSidebar() {\n const context = React.useContext(SidebarContext);\n if (!context) {\n throw new Error(\"useSidebar must be used within a SidebarProvider.\");\n }\n\n return context;\n}\n\nfunction SidebarProvider({\n defaultOpen = true,\n open: openProp,\n onOpenChange: setOpenProp,\n className,\n style,\n children,\n ...props\n}: React.ComponentProps<\"div\"> & {\n defaultOpen?: boolean;\n open?: boolean;\n onOpenChange?: (open: boolean) => void;\n}) {\n const isMobile = useIsMobile();\n const [openMobile, setOpenMobile] = React.useState(false);\n\n // This is the internal state of the sidebar.\n // We use openProp and setOpenProp for control from outside the component.\n const [_open, _setOpen] = React.useState(defaultOpen);\n const open = openProp ?? _open;\n const setOpen = React.useCallback(\n (value: boolean | ((value: boolean) => boolean)) => {\n const openState = typeof value === \"function\" ? value(open) : value;\n if (setOpenProp) {\n setOpenProp(openState);\n } else {\n _setOpen(openState);\n }\n\n // This sets the cookie to keep the sidebar state.\n document.cookie = `${SIDEBAR_COOKIE_NAME}=${openState}; path=/; max-age=${SIDEBAR_COOKIE_MAX_AGE}`;\n },\n [setOpenProp, open],\n );\n\n // Helper to toggle the sidebar.\n const toggleSidebar = React.useCallback(() => {\n return isMobile ? setOpenMobile((open) => !open) : setOpen((open) => !open);\n }, [isMobile, setOpen, setOpenMobile]);\n\n // Adds a keyboard shortcut to toggle the sidebar.\n React.useEffect(() => {\n const handleKeyDown = (event: KeyboardEvent) => {\n if (\n event.key === SIDEBAR_KEYBOARD_SHORTCUT &&\n (event.metaKey || event.ctrlKey)\n ) {\n event.preventDefault();\n toggleSidebar();\n }\n };\n\n window.addEventListener(\"keydown\", handleKeyDown);\n return () => window.removeEventListener(\"keydown\", handleKeyDown);\n }, [toggleSidebar]);\n\n // We add a state so that we can do data-state=\"expanded\" or \"collapsed\".\n // This makes it easier to style the sidebar with Tailwind classes.\n const state = open ? \"expanded\" : \"collapsed\";\n\n const contextValue = React.useMemo<SidebarContextProps>(\n () => ({\n state,\n isMobile,\n\n toggleSidebar,\n\n open,\n setOpen,\n\n openMobile,\n setOpenMobile,\n }),\n [state, open, setOpen, isMobile, openMobile, setOpenMobile, toggleSidebar],\n );\n\n return (\n <SidebarContext.Provider value={contextValue}>\n <TooltipProvider delayDuration={0}>\n <div\n data-slot=\"sidebar-wrapper\"\n style={\n {\n \"--sidebar-width\": SIDEBAR_WIDTH,\n \"--sidebar-width-icon\": SIDEBAR_WIDTH_ICON,\n ...style,\n } as React.CSSProperties\n }\n className={cn(\n \"group/sidebar-wrapper\",\n \"has-data-[variant=inset]:bg-sidebar\",\n \"flex min-h-svh w-full\",\n className,\n )}\n {...props}\n >\n {children}\n </div>\n </TooltipProvider>\n </SidebarContext.Provider>\n );\n}\n\nfunction Sidebar({\n side = \"left\",\n variant = \"sidebar\",\n collapsible = \"offcanvas\",\n className,\n children,\n ...props\n}: React.ComponentProps<\"div\"> & {\n side?: \"left\" | \"right\";\n variant?: \"sidebar\" | \"floating\" | \"inset\";\n collapsible?: \"offcanvas\" | \"icon\" | \"none\";\n}) {\n const { isMobile, state, openMobile, setOpenMobile } = useSidebar();\n\n if (collapsible === \"none\") {\n return (\n <aside\n data-slot=\"sidebar\"\n className={cn(\n \"bg-sidebar\",\n \"text-sidebar-foreground\",\n \"flex h-full w-(--sidebar-width) flex-col\",\n \"border-r\",\n className,\n )}\n {...props}\n >\n {children}\n </aside>\n );\n }\n\n if (isMobile) {\n return (\n <Sheet open={openMobile} onOpenChange={setOpenMobile} {...props}>\n <SheetContent\n data-sidebar=\"sidebar\"\n data-slot=\"sidebar\"\n data-mobile=\"true\"\n className=\"bg-sidebar text-sidebar-foreground w-(--sidebar-width) p-0 [&>button]:hidden\"\n style={\n {\n \"--sidebar-width\": SIDEBAR_WIDTH_MOBILE,\n } as React.CSSProperties\n }\n side={side}\n >\n <SheetHeader className=\"sr-only\">\n <SheetTitle>Sidebar</SheetTitle>\n <SheetDescription>Displays the mobile sidebar.</SheetDescription>\n </SheetHeader>\n <div className=\"flex h-full w-full flex-col\">{children}</div>\n </SheetContent>\n </Sheet>\n );\n }\n\n return (\n <aside\n className=\"group peer text-sidebar-foreground bg-card hidden md:block\"\n data-state={state}\n data-collapsible={state === \"collapsed\" ? collapsible : \"\"}\n data-variant={variant}\n data-side={side}\n data-slot=\"sidebar\"\n >\n {/* This is what handles the sidebar gap on desktop */}\n <div\n data-slot=\"sidebar-gap\"\n className={cn(\n \"relative\",\n \"bg-transparent\",\n \"transition-[width] duration-200 ease-linear\",\n \"h-14 w-(--sidebar-width)\",\n \"group-data-[collapsible=offcanvas]:w-0\",\n \"group-data-[side=right]:rotate-180\",\n variant === \"floating\" || variant === \"inset\"\n ? \"group-data-[collapsible=icon]:w-[calc(var(--sidebar-width-icon)+(--spacing(4)))]\"\n : \"group-data-[collapsible=icon]:w-(--sidebar-width-icon)\",\n )}\n />\n <div\n data-slot=\"sidebar-container\"\n className={cn(\n \"hidden md:flex\",\n \"fixed inset-y-0 top-14 z-10\",\n \"h-[calc(100svh-3.5rem)] w-(--sidebar-width)\",\n \"border-r\",\n \"transition-[left,right,width] duration-200 ease-linear\",\n side === \"left\" &&\n \"left-0 group-data-[collapsible=offcanvas]:left-[calc(var(--sidebar-width)*-1)]\",\n side === \"right\" &&\n \"right-0 group-data-[collapsible=offcanvas]:right-[calc(var(--sidebar-width)*-1)]\",\n // Adjust the padding for floating and inset variants.\n variant === \"floating\" || variant === \"inset\"\n ? \"p-2 group-data-[collapsible=icon]:w-[calc(var(--sidebar-width-icon)+(--spacing(4))+2px)]\"\n : \"group-data-[collapsible=icon]:w-(--sidebar-width-icon) group-data-[side=left]:border-r group-data-[side=right]:border-l\",\n className,\n )}\n {...props}\n >\n <div\n data-sidebar=\"sidebar\"\n data-slot=\"sidebar-inner\"\n className={cn(\n \"flex size-full flex-col\",\n \"group-data-[variant=floating]:rounded-lg\",\n \"group-data-[variant=floating]:border\",\n \"group-data-[variant=floating]:border-sidebar-border\",\n \"group-data-[variant=floating]:shadow-sm\",\n )}\n >\n {children}\n </div>\n </div>\n </aside>\n );\n}\n\nfunction SidebarTrigger({\n className,\n onClick,\n ...props\n}: React.ComponentProps<typeof Button>) {\n const { toggleSidebar } = useSidebar();\n\n return (\n <Button\n data-sidebar=\"trigger\"\n data-slot=\"sidebar-trigger\"\n variant=\"ghost\"\n size=\"icon\"\n className={cn(\"size-10 rounded-full\", className)}\n onClick={(event) => {\n onClick?.(event);\n toggleSidebar();\n }}\n {...props}\n >\n <MenuIcon className=\"!size-6\" />\n <span className=\"sr-only\">Toggle Sidebar</span>\n </Button>\n );\n}\n\nfunction SidebarRail({ className, ...props }: React.ComponentProps<\"button\">) {\n const { toggleSidebar } = useSidebar();\n\n return (\n <button\n data-sidebar=\"rail\"\n data-slot=\"sidebar-rail\"\n aria-label=\"Toggle Sidebar\"\n tabIndex={-1}\n onClick={toggleSidebar}\n title=\"Toggle Sidebar\"\n className={cn(\n \"hover:after:bg-sidebar-border absolute inset-y-0 z-20 hidden w-4 -translate-x-1/2 transition-all ease-linear group-data-[side=left]:-right-4 group-data-[side=right]:left-0 after:absolute after:inset-y-0 after:left-1/2 after:w-[2px] sm:flex\",\n \"in-data-[side=left]:cursor-w-resize in-data-[side=right]:cursor-e-resize\",\n \"[[data-side=left][data-state=collapsed]_&]:cursor-e-resize [[data-side=right][data-state=collapsed]_&]:cursor-w-resize\",\n \"hover:group-data-[collapsible=offcanvas]:bg-sidebar group-data-[collapsible=offcanvas]:translate-x-0 group-data-[collapsible=offcanvas]:after:left-full\",\n \"[[data-side=left][data-collapsible=offcanvas]_&]:-right-2\",\n \"[[data-side=right][data-collapsible=offcanvas]_&]:-left-2\",\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction SidebarInset({\n className,\n children,\n ...props\n}: React.ComponentProps<\"main\">) {\n return (\n <main\n data-slot=\"sidebar-inset\"\n className={cn(\"w-full\", \"relative\", \"flex flex-1 flex-col\", className)}\n {...props}\n >\n <div className=\"h-14 w-full\" />\n <div className={cn(\"flex-1 inset-shadow-sm\")}>{children}</div>\n </main>\n );\n}\n\nfunction SidebarInput({\n className,\n ...props\n}: React.ComponentProps<typeof Input>) {\n return (\n <Input\n data-slot=\"sidebar-input\"\n data-sidebar=\"input\"\n className={cn(\"bg-background h-8 w-full shadow-none\", className)}\n {...props}\n />\n );\n}\n\nfunction SidebarHeader({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"sidebar-header\"\n data-sidebar=\"header\"\n className={cn(\"flex flex-col gap-2 p-2\", className)}\n {...props}\n />\n );\n}\n\nfunction SidebarFooter({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"sidebar-footer\"\n data-sidebar=\"footer\"\n className={cn(\"flex flex-col gap-2 p-2\", className)}\n {...props}\n />\n );\n}\n\nfunction SidebarSeparator({\n className,\n ...props\n}: React.ComponentProps<typeof Separator>) {\n return (\n <Separator\n data-slot=\"sidebar-separator\"\n data-sidebar=\"separator\"\n className={cn(\"bg-sidebar-border mx-2 w-auto\", className)}\n {...props}\n />\n );\n}\n\nfunction SidebarContent({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"sidebar-content\"\n data-sidebar=\"content\"\n className={cn(\n \"flex min-h-0 flex-1 flex-col gap-2 overflow-auto group-data-[collapsible=icon]:overflow-hidden\",\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction SidebarGroup({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"sidebar-group\"\n data-sidebar=\"group\"\n className={cn(\"relative flex w-full min-w-0 flex-col p-2\", className)}\n {...props}\n />\n );\n}\n\nfunction SidebarGroupLabel({\n className,\n asChild = false,\n ...props\n}: React.ComponentProps<\"div\"> & { asChild?: boolean }) {\n const Comp = asChild ? SlotPrimitive.Slot : \"div\";\n\n return (\n <Comp\n data-slot=\"sidebar-group-label\"\n data-sidebar=\"group-label\"\n className={cn(\n \"text-sidebar-foreground/70 ring-sidebar-ring flex h-8 shrink-0 items-center rounded-md px-2 text-xs font-medium outline-hidden transition-[margin,opacity] duration-200 ease-linear focus-visible:ring-2 [&>svg]:size-4 [&>svg]:shrink-0\",\n \"group-data-[collapsible=icon]:-mt-8 group-data-[collapsible=icon]:opacity-0\",\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction SidebarGroupAction({\n className,\n asChild = false,\n ...props\n}: React.ComponentProps<\"button\"> & { asChild?: boolean }) {\n const Comp = asChild ? SlotPrimitive.Slot : \"button\";\n\n return (\n <Comp\n data-slot=\"sidebar-group-action\"\n data-sidebar=\"group-action\"\n className={cn(\n \"text-sidebar-foreground ring-sidebar-ring hover:bg-sidebar-accent hover:text-sidebar-accent-foreground absolute top-3.5 right-3 flex aspect-square w-5 items-center justify-center rounded-md p-0 outline-hidden transition-transform focus-visible:ring-2 [&>svg]:size-4 [&>svg]:shrink-0\",\n // Increases the hit area of the button on mobile.\n \"after:absolute after:-inset-2 md:after:hidden\",\n \"group-data-[collapsible=icon]:hidden\",\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction SidebarGroupContent({\n className,\n ...props\n}: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"sidebar-group-content\"\n data-sidebar=\"group-content\"\n className={cn(\"w-full text-sm\", className)}\n {...props}\n />\n );\n}\n\nfunction SidebarMenu({ className, ...props }: React.ComponentProps<\"ul\">) {\n return (\n <ul\n data-slot=\"sidebar-menu\"\n data-sidebar=\"menu\"\n className={cn(\"flex w-full min-w-0 flex-col gap-1\", className)}\n {...props}\n />\n );\n}\n\nfunction SidebarMenuItem({ className, ...props }: React.ComponentProps<\"li\">) {\n return (\n <li\n data-slot=\"sidebar-menu-item\"\n data-sidebar=\"menu-item\"\n className={cn(\"group/menu-item relative\", className)}\n {...props}\n />\n );\n}\n\nconst sidebarMenuButtonVariants = cva(\n \"peer/menu-button cursor-pointer flex w-full items-center gap-2 overflow-hidden rounded-md p-2 text-left text-sm outline-hidden ring-sidebar-ring transition-[width,height,padding] hover:bg-sidebar-accent hover:text-sidebar-accent-foreground focus-visible:ring-2 active:bg-sidebar-accent active:text-sidebar-accent-foreground disabled:pointer-events-none disabled:opacity-50 group-has-data-[sidebar=menu-action]/menu-item:pr-8 aria-disabled:pointer-events-none aria-disabled:opacity-50 data-[active=true]:bg-sidebar-accent data-[active=true]:font-medium data-[active=true]:text-sidebar-accent-foreground data-[state=open]:hover:bg-sidebar-accent data-[state=open]:hover:text-sidebar-accent-foreground group-data-[collapsible=icon]:size-8! group-data-[collapsible=icon]:p-2! [&>span:last-child]:truncate [&>svg]:size-4 [&>svg]:shrink-0\",\n {\n variants: {\n variant: {\n default: \"hover:bg-sidebar-accent hover:text-sidebar-accent-foreground\",\n outline:\n \"bg-background shadow-[0_0_0_1px_hsl(var(--sidebar-border))] hover:bg-sidebar-accent hover:text-sidebar-accent-foreground hover:shadow-[0_0_0_1px_hsl(var(--sidebar-accent))]\",\n },\n size: {\n default: \"h-8 text-sm\",\n sm: \"h-7 text-xs\",\n lg: \"h-12 text-sm group-data-[collapsible=icon]:p-0!\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n size: \"default\",\n },\n },\n);\n\nfunction SidebarMenuButton({\n asChild = false,\n isActive = false,\n variant = \"default\",\n size = \"default\",\n tooltip,\n className,\n ...props\n}: React.ComponentProps<\"button\"> & {\n asChild?: boolean;\n isActive?: boolean;\n tooltip?: string | React.ComponentProps<typeof TooltipContent>;\n} & VariantProps<typeof sidebarMenuButtonVariants>) {\n const Comp = asChild ? SlotPrimitive.Slot : \"button\";\n const { isMobile, state } = useSidebar();\n\n const button = (\n <Comp\n data-slot=\"sidebar-menu-button\"\n data-sidebar=\"menu-button\"\n data-size={size}\n data-active={isActive}\n className={cn(sidebarMenuButtonVariants({ variant, size }), className)}\n {...props}\n />\n );\n\n if (!tooltip) {\n return button;\n }\n\n if (typeof tooltip === \"string\") {\n tooltip = {\n children: tooltip,\n };\n }\n\n return (\n <Tooltip>\n <TooltipTrigger asChild>{button}</TooltipTrigger>\n <TooltipContent\n side=\"right\"\n align=\"center\"\n hidden={state !== \"collapsed\" || isMobile}\n {...tooltip}\n />\n </Tooltip>\n );\n}\n\nfunction SidebarMenuAction({\n className,\n asChild = false,\n showOnHover = false,\n ...props\n}: React.ComponentProps<\"button\"> & {\n asChild?: boolean;\n showOnHover?: boolean;\n}) {\n const Comp = asChild ? SlotPrimitive.Slot : \"button\";\n\n return (\n <Comp\n data-slot=\"sidebar-menu-action\"\n data-sidebar=\"menu-action\"\n className={cn(\n \"text-sidebar-foreground ring-sidebar-ring hover:bg-sidebar-accent hover:text-sidebar-accent-foreground peer-hover/menu-button:text-sidebar-accent-foreground absolute top-1.5 right-1 flex aspect-square w-5 items-center justify-center rounded-md p-0 outline-hidden transition-transform focus-visible:ring-2 [&>svg]:size-4 [&>svg]:shrink-0\",\n // Increases the hit area of the button on mobile.\n \"after:absolute after:-inset-2 md:after:hidden\",\n \"peer-data-[size=sm]/menu-button:top-1\",\n \"peer-data-[size=default]/menu-button:top-1.5\",\n \"peer-data-[size=lg]/menu-button:top-2.5\",\n \"group-data-[collapsible=icon]:hidden\",\n showOnHover &&\n \"peer-data-[active=true]/menu-button:text-sidebar-accent-foreground group-focus-within/menu-item:opacity-100 group-hover/menu-item:opacity-100 data-[state=open]:opacity-100 md:opacity-0\",\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction SidebarMenuBadge({\n className,\n ...props\n}: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"sidebar-menu-badge\"\n data-sidebar=\"menu-badge\"\n className={cn(\n \"text-sidebar-foreground pointer-events-none absolute right-1 flex h-5 min-w-5 items-center justify-center rounded-md px-1 text-xs font-medium tabular-nums select-none\",\n \"peer-hover/menu-button:text-sidebar-accent-foreground peer-data-[active=true]/menu-button:text-sidebar-accent-foreground\",\n \"peer-data-[size=sm]/menu-button:top-1\",\n \"peer-data-[size=default]/menu-button:top-1.5\",\n \"peer-data-[size=lg]/menu-button:top-2.5\",\n \"group-data-[collapsible=icon]:hidden\",\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction SidebarMenuSkeleton({\n className,\n showIcon = false,\n ...props\n}: React.ComponentProps<\"div\"> & {\n showIcon?: boolean;\n}) {\n // Random width between 50 to 90%.\n const width = React.useMemo(() => {\n return `${Math.floor(Math.random() * 40) + 50}%`;\n }, []);\n\n return (\n <div\n data-slot=\"sidebar-menu-skeleton\"\n data-sidebar=\"menu-skeleton\"\n className={cn(\"flex h-8 items-center gap-2 rounded-md px-2\", className)}\n {...props}\n >\n {showIcon && (\n <Skeleton\n className=\"size-4 rounded-md\"\n data-sidebar=\"menu-skeleton-icon\"\n />\n )}\n <Skeleton\n className=\"h-4 max-w-(--skeleton-width) flex-1\"\n data-sidebar=\"menu-skeleton-text\"\n style={\n {\n \"--skeleton-width\": width,\n } as React.CSSProperties\n }\n />\n </div>\n );\n}\n\nfunction SidebarMenuSub({ className, ...props }: React.ComponentProps<\"ul\">) {\n return (\n <ul\n data-slot=\"sidebar-menu-sub\"\n data-sidebar=\"menu-sub\"\n className={cn(\n \"border-sidebar-border mx-3.5 flex min-w-0 translate-x-px flex-col gap-1 border-l px-2.5 py-0.5\",\n \"group-data-[collapsible=icon]:hidden\",\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction SidebarMenuSubItem({\n className,\n ...props\n}: React.ComponentProps<\"li\">) {\n return (\n <li\n data-slot=\"sidebar-menu-sub-item\"\n data-sidebar=\"menu-sub-item\"\n className={cn(\"group/menu-sub-item relative\", className)}\n {...props}\n />\n );\n}\n\nfunction SidebarMenuSubButton({\n asChild = false,\n size = \"md\",\n isActive = false,\n className,\n ...props\n}: React.ComponentProps<\"a\"> & {\n asChild?: boolean;\n size?: \"sm\" | \"md\";\n isActive?: boolean;\n}) {\n const Comp = asChild ? SlotPrimitive.Slot : \"a\";\n\n return (\n <Comp\n data-slot=\"sidebar-menu-sub-button\"\n data-sidebar=\"menu-sub-button\"\n data-size={size}\n data-active={isActive}\n className={cn(\n \"text-sidebar-foreground ring-sidebar-ring hover:bg-sidebar-accent hover:text-sidebar-accent-foreground active:bg-sidebar-accent active:text-sidebar-accent-foreground [&>svg]:text-sidebar-accent-foreground flex h-7 min-w-0 -translate-x-px items-center gap-2 overflow-hidden rounded-md px-2 outline-hidden focus-visible:ring-2 disabled:pointer-events-none disabled:opacity-50 aria-disabled:pointer-events-none aria-disabled:opacity-50 [&>span:last-child]:truncate [&>svg]:size-4 [&>svg]:shrink-0\",\n \"data-[active=true]:bg-sidebar-accent data-[active=true]:text-sidebar-accent-foreground\",\n size === \"sm\" && \"text-xs\",\n size === \"md\" && \"text-sm\",\n \"group-data-[collapsible=icon]:hidden\",\n className,\n )}\n {...props}\n />\n );\n}\n\nexport {\n Sidebar,\n SidebarContent,\n SidebarFooter,\n SidebarGroup,\n SidebarGroupAction,\n SidebarGroupContent,\n SidebarGroupLabel,\n SidebarHeader,\n SidebarInput,\n SidebarInset,\n SidebarMenu,\n SidebarMenuAction,\n SidebarMenuBadge,\n SidebarMenuButton,\n SidebarMenuItem,\n SidebarMenuSkeleton,\n SidebarMenuSub,\n SidebarMenuSubButton,\n SidebarMenuSubItem,\n SidebarProvider,\n SidebarRail,\n SidebarSeparator,\n SidebarTrigger,\n // eslint-disable-next-line react-refresh/only-export-components\n useSidebar,\n};\n"],"mappings":"+dAEM,EAAoB,IAE1B,SAAgB,GAAc,CAC5B,GAAM,CAAC,EAAU,EAAY,CAAGC,EAAAA,QAAM,SACpC,IAAA,IAaF,OAVA,EAAA,QAAM,cAAgB,CACpB,IAAM,EAAM,OAAO,WAAW,sBACxB,MAAiB,CACrB,EAAY,OAAO,WAAa,IACjC,EAGD,OAFA,EAAI,iBAAiB,SAAU,GAC/B,EAAY,OAAO,WAAa,SACnB,EAAI,oBAAoB,SAAU,EAChD,EAAE,EAAE,EAEE,CAAC,CAAC,CACV,CCMD,MAAM,EAAsB,gBACtB,EAAyB,KAAU,GAAK,EACxC,EAAgB,QAChB,EAAuB,QACvB,EAAqB,OACrB,EAA4B,IAY5B,EAAiBA,EAAAA,QAAM,cAA0C,MAEvE,SAAS,GAAa,CACpB,IAAM,EAAUA,EAAAA,QAAM,WAAW,GACjC,GAAI,CAAC,EACH,MAAU,MAAM,qDAGlB,OAAO,CACR,CAED,SAAS,EAAgB,CACvB,cAAc,GACd,KAAM,EACN,aAAc,EACd,YACA,QACA,WACA,GAAG,EAKJ,CAAE,CACD,IAAM,EAAW,IACX,CAAC,EAAY,EAAc,CAAGA,EAAAA,QAAM,SAAS,IAI7C,CAAC,EAAO,EAAS,CAAGA,EAAAA,QAAM,SAAS,GACnC,EAAO,GAAY,EACnB,EAAUA,EAAAA,QAAM,YACnB,GAAmD,CAClD,IAAM,EAAY,OAAO,GAAU,WAAa,EAAM,GAAQ,EAC1D,EACF,EAAY,GAEZ,EAAS,GAIX,SAAS,OAAS,iBAA0B,EAAU,yBACvD,EACD,CAAC,EAAa,EAAK,EAIf,EAAgBA,EAAAA,QAAM,gBACnB,EAAW,EAAe,GAAS,CAACC,GAAQ,EAAS,GAAS,CAACA,GACrE,CAAC,EAAU,EAAS,EAAc,EAGrC,EAAA,QAAM,cAAgB,CACpB,IAAM,EAAiB,GAAyB,CAE5C,EAAM,MAAQ,MACb,EAAM,SAAW,EAAM,WAExB,EAAM,iBACN,IAEH,EAGD,OADA,OAAO,iBAAiB,UAAW,OACtB,OAAO,oBAAoB,UAAW,EACpD,EAAE,CAAC,EAAc,EAIlB,IAAM,EAAQ,EAAO,WAAa,YAE5B,EAAeD,EAAAA,QAAM,aAClB,CACL,QACA,WAEA,gBAEA,OACA,UAEA,aACA,gBACD,EACD,CAAC,EAAO,EAAM,EAAS,EAAU,EAAY,EAAe,EAAc,EAG5E,OACE,EAAA,EAAA,KAAC,EAAe,SAAA,CAAS,MAAO,YAC9B,EAAA,EAAA,KAACE,EAAAA,gBAAAA,CAAgB,cAAe,YAC9B,EAAA,EAAA,KAAC,MAAA,CACC,YAAU,kBACV,MACE,CACE,kBAAmB,QACnB,uBAAwB,OACxB,GAAG,EACJ,CAEH,UAAWC,EAAAA,GACT,wBACA,sCACA,wBACA,GAEF,GAAI,EAEH,gBAKV,CAED,SAAS,EAAQ,CACf,OAAO,OACP,UAAU,UACV,cAAc,YACd,YACA,WACA,GAAG,EAKJ,CAAE,CACD,GAAM,CAAE,WAAU,QAAO,aAAY,gBAAe,CAAG,IA6CvD,OA3CI,IAAgB,QAEhB,EAAA,EAAA,KAAC,QAAA,CACC,YAAU,UACV,UAAWA,EAAAA,GACT,aACA,0BACA,2CACA,WACA,GAEF,GAAI,EAEH,aAKH,GAEA,EAAA,EAAA,KAACC,EAAAA,MAAAA,CAAM,KAAM,EAAY,aAAc,EAAe,GAAI,YACxD,EAAA,EAAA,MAACC,EAAAA,aAAAA,CACC,eAAa,UACb,YAAU,UACV,cAAY,OACZ,UAAU,+EACV,MACE,CACE,kBAAmB,QACpB,CAEG,kBAEN,EAAA,EAAA,MAACC,EAAAA,YAAAA,CAAY,UAAU,qBACrB,EAAA,EAAA,KAACC,EAAAA,WAAAA,CAAAA,SAAW,UAAA,GACZ,EAAA,EAAA,KAACC,EAAAA,iBAAAA,CAAAA,SAAiB,+BAAA,EAAA,IAEpB,EAAA,EAAA,KAAC,MAAA,CAAI,UAAU,8BAA+B,mBAOpD,EAAA,EAAA,MAAC,QAAA,CACC,UAAU,6DACV,aAAY,EACZ,mBAAkB,IAAU,YAAc,EAAc,GACxD,eAAc,EACd,YAAW,EACX,YAAU,qBAGV,EAAA,EAAA,KAAC,MAAA,CACC,YAAU,cACV,UAAWL,EAAAA,GACT,WACA,iBACA,8CACA,2BACA,yCACA,qCACA,IAAY,YAAc,IAAY,QAClC,mFACA,6DAGR,EAAA,EAAA,KAAC,MAAA,CACC,YAAU,oBACV,UAAWA,EAAAA,GACT,iBACA,8BACA,8CACA,WACA,yDACA,IAAS,QACP,iFACF,IAAS,SACP,mFAEF,IAAY,YAAc,IAAY,QAClC,2FACA,0HACJ,GAEF,GAAI,YAEJ,EAAA,EAAA,KAAC,MAAA,CACC,eAAa,UACb,YAAU,gBACV,UAAWA,EAAAA,GACT,0BACA,2CACA,uCACA,sDACA,2CAGD,iBAKV,CAED,SAAS,EAAe,CACtB,YACA,UACA,GAAG,EACiC,CAAE,CACtC,GAAM,CAAE,gBAAe,CAAG,IAE1B,OACE,EAAA,EAAA,MAACM,EAAAA,OAAAA,CACC,eAAa,UACb,YAAU,kBACV,QAAQ,QACR,KAAK,OACL,UAAWN,EAAAA,GAAG,uBAAwB,GACtC,QAAU,GAAU,CAClB,IAAU,GACV,GACD,EACD,GAAI,aAEJ,EAAA,EAAA,KAACO,EAAAA,SAAAA,CAAS,UAAU,UAAA,GACpB,EAAA,EAAA,KAAC,OAAA,CAAK,UAAU,mBAAU,qBAG/B,CAED,SAAS,EAAY,CAAE,YAAW,GAAG,EAAuC,CAAE,CAC5E,GAAM,CAAE,gBAAe,CAAG,IAE1B,OACE,EAAA,EAAA,KAAC,SAAA,CACC,eAAa,OACb,YAAU,eACV,aAAW,iBACX,SAAU,GACV,QAAS,EACT,MAAM,iBACN,UAAWP,EAAAA,GACT,kPACA,2EACA,yHACA,0JACA,4DACA,4DACA,GAEF,GAAI,GAGT,CAED,SAAS,EAAa,CACpB,YACA,WACA,GAAG,EAC0B,CAAE,CAC/B,OACE,EAAA,EAAA,MAAC,OAAA,CACC,YAAU,gBACV,UAAWA,EAAAA,GAAG,SAAU,WAAY,uBAAwB,GAC5D,GAAI,aAEJ,EAAA,EAAA,KAAC,MAAA,CAAI,UAAU,cAAA,GACf,EAAA,EAAA,KAAC,MAAA,CAAI,UAAWA,EAAAA,GAAG,0BAA4B,eAGpD,CAED,SAAS,EAAa,CACpB,YACA,GAAG,EACgC,CAAE,CACrC,OACE,EAAA,EAAA,KAACQ,EAAAA,MAAAA,CACC,YAAU,gBACV,eAAa,QACb,UAAWR,EAAAA,GAAG,uCAAwC,GACtD,GAAI,GAGT,CAED,SAAS,EAAc,CAAE,YAAW,GAAG,EAAoC,CAAE,CAC3E,OACE,EAAA,EAAA,KAAC,MAAA,CACC,YAAU,iBACV,eAAa,SACb,UAAWA,EAAAA,GAAG,0BAA2B,GACzC,GAAI,GAGT,CAED,SAAS,EAAc,CAAE,YAAW,GAAG,EAAoC,CAAE,CAC3E,OACE,EAAA,EAAA,KAAC,MAAA,CACC,YAAU,iBACV,eAAa,SACb,UAAWA,EAAAA,GAAG,0BAA2B,GACzC,GAAI,GAGT,CAED,SAAS,EAAiB,CACxB,YACA,GAAG,EACoC,CAAE,CACzC,OACE,EAAA,EAAA,KAACS,EAAAA,UAAAA,CACC,YAAU,oBACV,eAAa,YACb,UAAWT,EAAAA,GAAG,gCAAiC,GAC/C,GAAI,GAGT,CAED,SAAS,EAAe,CAAE,YAAW,GAAG,EAAoC,CAAE,CAC5E,OACE,EAAA,EAAA,KAAC,MAAA,CACC,YAAU,kBACV,eAAa,UACb,UAAWA,EAAAA,GACT,iGACA,GAEF,GAAI,GAGT,CAED,SAAS,EAAa,CAAE,YAAW,GAAG,EAAoC,CAAE,CAC1E,OACE,EAAA,EAAA,KAAC,MAAA,CACC,YAAU,gBACV,eAAa,QACb,UAAWA,EAAAA,GAAG,4CAA6C,GAC3D,GAAI,GAGT,CAED,SAAS,EAAkB,CACzB,YACA,UAAU,GACV,GAAG,EACiD,CAAE,CACtD,IAAM,EAAO,EAAUU,EAAAA,KAAc,KAAO,MAE5C,OACE,EAAA,EAAA,KAAC,EAAA,CACC,YAAU,sBACV,eAAa,cACb,UAAWV,EAAAA,GACT,2OACA,8EACA,GAEF,GAAI,GAGT,CAED,SAAS,EAAmB,CAC1B,YACA,UAAU,GACV,GAAG,EACoD,CAAE,CACzD,IAAM,EAAO,EAAUU,EAAAA,KAAc,KAAO,SAE5C,OACE,EAAA,EAAA,KAAC,EAAA,CACC,YAAU,uBACV,eAAa,eACb,UAAWV,EAAAA,GACT,6RAEA,gDACA,uCACA,GAEF,GAAI,GAGT,CAED,SAAS,EAAoB,CAC3B,YACA,GAAG,EACyB,CAAE,CAC9B,OACE,EAAA,EAAA,KAAC,MAAA,CACC,YAAU,wBACV,eAAa,gBACb,UAAWA,EAAAA,GAAG,iBAAkB,GAChC,GAAI,GAGT,CAED,SAAS,EAAY,CAAE,YAAW,GAAG,EAAmC,CAAE,CACxE,OACE,EAAA,EAAA,KAAC,KAAA,CACC,YAAU,eACV,eAAa,OACb,UAAWA,EAAAA,GAAG,qCAAsC,GACpD,GAAI,GAGT,CAED,SAAS,EAAgB,CAAE,YAAW,GAAG,EAAmC,CAAE,CAC5E,OACE,EAAA,EAAA,KAAC,KAAA,CACC,YAAU,oBACV,eAAa,YACb,UAAWA,EAAAA,GAAG,2BAA4B,GAC1C,GAAI,GAGT,CAED,MAAM,GAAA,EAAA,EAAA,KACJ,m0BACA,CACE,SAAU,CACR,QAAS,CACP,QAAS,+DACT,QACE,+KACH,CACD,KAAM,CACJ,QAAS,cACT,GAAI,cACJ,GAAI,kDACL,CACF,CACD,gBAAiB,CACf,QAAS,UACT,KAAM,UACP,CACF,EAGH,SAAS,EAAkB,CACzB,UAAU,GACV,WAAW,GACX,UAAU,UACV,OAAO,UACP,UACA,YACA,GAAG,EAK6C,CAAE,CAClD,IAAM,EAAO,EAAUU,EAAAA,KAAc,KAAO,SACtC,CAAE,WAAU,QAAO,CAAG,IAEtB,GACJ,EAAA,EAAA,KAAC,EAAA,CACC,YAAU,sBACV,eAAa,cACb,YAAW,EACX,cAAa,EACb,UAAWV,EAAAA,GAAG,EAA0B,CAAE,UAAS,OAAM,EAAG,GAC5D,GAAI,IAcR,OAVK,GAID,OAAO,GAAY,WACrB,EAAU,CACR,SAAU,EACX,GAID,EAAA,EAAA,MAACW,EAAAA,QAAAA,CAAAA,SAAAA,EACC,EAAA,EAAA,KAACC,EAAAA,eAAAA,CAAe,QAAA,YAAS,KACzB,EAAA,EAAA,KAACC,EAAAA,eAAAA,CACC,KAAK,QACL,MAAM,SACN,OAAQ,IAAU,aAAe,EACjC,GAAI,QAhBD,CAoBV,CAED,SAAS,EAAkB,CACzB,YACA,UAAU,GACV,cAAc,GACd,GAAG,EAIJ,CAAE,CACD,IAAM,EAAO,EAAUH,EAAAA,KAAc,KAAO,SAE5C,OACE,EAAA,EAAA,KAAC,EAAA,CACC,YAAU,sBACV,eAAa,cACb,UAAWV,EAAAA,GACT,mVAEA,gDACA,wCACA,+CACA,0CACA,uCACA,GACE,2LACF,GAEF,GAAI,GAGT,CAED,SAAS,EAAiB,CACxB,YACA,GAAG,EACyB,CAAE,CAC9B,OACE,EAAA,EAAA,KAAC,MAAA,CACC,YAAU,qBACV,eAAa,aACb,UAAWA,EAAAA,GACT,yKACA,2HACA,wCACA,+CACA,0CACA,uCACA,GAEF,GAAI,GAGT,CAED,SAAS,EAAoB,CAC3B,YACA,WAAW,GACX,GAAG,EAGJ,CAAE,CAED,IAAM,EAAQH,EAAAA,QAAM,YACX,GAAG,KAAK,MAAM,KAAK,SAAW,IAAM,GAAG,GAC7C,EAAE,EAEL,OACE,EAAA,EAAA,MAAC,MAAA,CACC,YAAU,wBACV,eAAa,gBACb,UAAWG,EAAAA,GAAG,8CAA+C,GAC7D,GAAI,YAEH,IACC,EAAA,EAAA,KAACc,EAAAA,SAAAA,CACC,UAAU,oBACV,eAAa,wBAGjB,EAAA,EAAA,KAACA,EAAAA,SAAAA,CACC,UAAU,sCACV,eAAa,qBACb,MACE,CACE,mBAAoB,EACrB,KAKV,CAED,SAAS,EAAe,CAAE,YAAW,GAAG,EAAmC,CAAE,CAC3E,OACE,EAAA,EAAA,KAAC,KAAA,CACC,YAAU,mBACV,eAAa,WACb,UAAWd,EAAAA,GACT,iGACA,uCACA,GAEF,GAAI,GAGT,CAED,SAAS,EAAmB,CAC1B,YACA,GAAG,EACwB,CAAE,CAC7B,OACE,EAAA,EAAA,KAAC,KAAA,CACC,YAAU,wBACV,eAAa,gBACb,UAAWA,EAAAA,GAAG,+BAAgC,GAC9C,GAAI,GAGT,CAED,SAAS,EAAqB,CAC5B,UAAU,GACV,OAAO,KACP,WAAW,GACX,YACA,GAAG,EAKJ,CAAE,CACD,IAAM,EAAO,EAAUU,EAAAA,KAAc,KAAO,IAE5C,OACE,EAAA,EAAA,KAAC,EAAA,CACC,YAAU,0BACV,eAAa,kBACb,YAAW,EACX,cAAa,EACb,UAAWV,EAAAA,GACT,gfACA,yFACA,IAAS,MAAQ,UACjB,IAAS,MAAQ,UACjB,uCACA,GAEF,GAAI,GAGT"}
1
+ {"version":3,"file":"sidebar-gXuaHBie.cjs","names":["React","React","open","TooltipProvider","cn","Sheet","SheetContent","SheetHeader","SheetTitle","SheetDescription","Button","MenuIcon","Input","Separator","SlotPrimitive","Tooltip","TooltipTrigger","TooltipContent","Skeleton"],"sources":["../packages/hooks/use-mobile.ts","../packages/components/ui/sidebar.tsx"],"sourcesContent":["import React from \"react\";\n\nconst MOBILE_BREAKPOINT = 768;\n\nexport function useIsMobile() {\n const [isMobile, setIsMobile] = React.useState<boolean | undefined>(\n undefined,\n );\n\n React.useEffect(() => {\n const mql = window.matchMedia(`(max-width: ${MOBILE_BREAKPOINT - 1}px)`);\n const onChange = () => {\n setIsMobile(window.innerWidth < MOBILE_BREAKPOINT);\n };\n mql.addEventListener(\"change\", onChange);\n setIsMobile(window.innerWidth < MOBILE_BREAKPOINT);\n return () => mql.removeEventListener(\"change\", onChange);\n }, []);\n\n return !!isMobile;\n}\n","\"use client\";\nimport React from \"react\";\nimport { Slot as SlotPrimitive } from \"radix-ui\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport { MenuIcon } from \"lucide-react\";\n\nimport { Button } from \"@/components/ui/button\";\nimport { Input } from \"@/components/ui/input\";\nimport { Separator } from \"@/components/ui/separator\";\nimport {\n Sheet,\n SheetContent,\n SheetDescription,\n SheetHeader,\n SheetTitle,\n} from \"@/components/ui/sheet\";\nimport { Skeleton } from \"@/components/ui/skeleton\";\nimport {\n Tooltip,\n TooltipContent,\n TooltipProvider,\n TooltipTrigger,\n} from \"@/components/ui/tooltip\";\nimport { useIsMobile } from \"@/hooks/use-mobile\";\nimport { cn } from \"@/lib/utils\";\n\nconst SIDEBAR_COOKIE_NAME = \"sidebar_state\";\nconst SIDEBAR_COOKIE_MAX_AGE = 60 * 60 * 24 * 7;\nconst SIDEBAR_WIDTH = \"16rem\";\nconst SIDEBAR_WIDTH_MOBILE = \"18rem\";\nconst SIDEBAR_WIDTH_ICON = \"3rem\";\nconst SIDEBAR_KEYBOARD_SHORTCUT = \"b\";\n\ntype SidebarContextProps = {\n state: \"expanded\" | \"collapsed\";\n open: boolean;\n setOpen: (open: boolean) => void;\n openMobile: boolean;\n setOpenMobile: (open: boolean) => void;\n isMobile: boolean;\n toggleSidebar: () => void;\n};\n\nconst SidebarContext = React.createContext<SidebarContextProps | null>(null);\n\nfunction useSidebar() {\n const context = React.useContext(SidebarContext);\n if (!context) {\n throw new Error(\"useSidebar must be used within a SidebarProvider.\");\n }\n\n return context;\n}\n\nfunction SidebarProvider({\n defaultOpen = true,\n open: openProp,\n onOpenChange: setOpenProp,\n className,\n style,\n children,\n ...props\n}: React.ComponentProps<\"div\"> & {\n defaultOpen?: boolean;\n open?: boolean;\n onOpenChange?: (open: boolean) => void;\n}) {\n const isMobile = useIsMobile();\n const [openMobile, setOpenMobile] = React.useState(false);\n\n // This is the internal state of the sidebar.\n // We use openProp and setOpenProp for control from outside the component.\n const [_open, _setOpen] = React.useState(defaultOpen);\n const open = openProp ?? _open;\n const setOpen = React.useCallback(\n (value: boolean | ((value: boolean) => boolean)) => {\n const openState = typeof value === \"function\" ? value(open) : value;\n if (setOpenProp) {\n setOpenProp(openState);\n } else {\n _setOpen(openState);\n }\n\n // This sets the cookie to keep the sidebar state.\n document.cookie = `${SIDEBAR_COOKIE_NAME}=${openState}; path=/; max-age=${SIDEBAR_COOKIE_MAX_AGE}`;\n },\n [setOpenProp, open],\n );\n\n // Helper to toggle the sidebar.\n const toggleSidebar = React.useCallback(() => {\n return isMobile ? setOpenMobile((open) => !open) : setOpen((open) => !open);\n }, [isMobile, setOpen, setOpenMobile]);\n\n // Adds a keyboard shortcut to toggle the sidebar.\n React.useEffect(() => {\n const handleKeyDown = (event: KeyboardEvent) => {\n if (\n event.key === SIDEBAR_KEYBOARD_SHORTCUT &&\n (event.metaKey || event.ctrlKey)\n ) {\n event.preventDefault();\n toggleSidebar();\n }\n };\n\n window.addEventListener(\"keydown\", handleKeyDown);\n return () => window.removeEventListener(\"keydown\", handleKeyDown);\n }, [toggleSidebar]);\n\n // We add a state so that we can do data-state=\"expanded\" or \"collapsed\".\n // This makes it easier to style the sidebar with Tailwind classes.\n const state = open ? \"expanded\" : \"collapsed\";\n\n const contextValue = React.useMemo<SidebarContextProps>(\n () => ({\n state,\n isMobile,\n\n toggleSidebar,\n\n open,\n setOpen,\n\n openMobile,\n setOpenMobile,\n }),\n [state, open, setOpen, isMobile, openMobile, setOpenMobile, toggleSidebar],\n );\n\n return (\n <SidebarContext.Provider value={contextValue}>\n <TooltipProvider delayDuration={0}>\n <div\n data-slot=\"sidebar-wrapper\"\n style={\n {\n \"--sidebar-width\": SIDEBAR_WIDTH,\n \"--sidebar-width-icon\": SIDEBAR_WIDTH_ICON,\n ...style,\n } as React.CSSProperties\n }\n className={cn(\n \"group/sidebar-wrapper\",\n \"has-data-[variant=inset]:bg-sidebar\",\n \"flex min-h-svh w-full\",\n className,\n )}\n {...props}\n >\n {children}\n </div>\n </TooltipProvider>\n </SidebarContext.Provider>\n );\n}\n\nfunction Sidebar({\n side = \"left\",\n variant = \"sidebar\",\n collapsible = \"offcanvas\",\n className,\n children,\n ...props\n}: React.ComponentProps<\"div\"> & {\n side?: \"left\" | \"right\";\n variant?: \"sidebar\" | \"floating\" | \"inset\";\n collapsible?: \"offcanvas\" | \"icon\" | \"none\";\n}) {\n const { isMobile, state, openMobile, setOpenMobile } = useSidebar();\n\n if (collapsible === \"none\") {\n return (\n <aside\n data-slot=\"sidebar\"\n className={cn(\n \"bg-sidebar\",\n \"text-sidebar-foreground\",\n \"flex h-full w-(--sidebar-width) flex-col\",\n \"border-r\",\n className,\n )}\n {...props}\n >\n {children}\n </aside>\n );\n }\n\n if (isMobile) {\n return (\n <Sheet open={openMobile} onOpenChange={setOpenMobile} {...props}>\n <SheetContent\n data-sidebar=\"sidebar\"\n data-slot=\"sidebar\"\n data-mobile=\"true\"\n className=\"bg-sidebar text-sidebar-foreground w-(--sidebar-width) p-0 [&>button]:hidden\"\n style={\n {\n \"--sidebar-width\": SIDEBAR_WIDTH_MOBILE,\n } as React.CSSProperties\n }\n side={side}\n >\n <SheetHeader className=\"sr-only\">\n <SheetTitle>Sidebar</SheetTitle>\n <SheetDescription>Displays the mobile sidebar.</SheetDescription>\n </SheetHeader>\n <div className=\"flex h-full w-full flex-col\">{children}</div>\n </SheetContent>\n </Sheet>\n );\n }\n\n return (\n <aside\n className=\"group peer text-sidebar-foreground bg-card hidden md:block\"\n data-state={state}\n data-collapsible={state === \"collapsed\" ? collapsible : \"\"}\n data-variant={variant}\n data-side={side}\n data-slot=\"sidebar\"\n >\n {/* This is what handles the sidebar gap on desktop */}\n <div\n data-slot=\"sidebar-gap\"\n className={cn(\n \"relative\",\n \"bg-transparent\",\n \"transition-[width] duration-200 ease-linear\",\n \"h-14 w-(--sidebar-width)\",\n \"group-data-[collapsible=offcanvas]:w-0\",\n \"group-data-[side=right]:rotate-180\",\n variant === \"floating\" || variant === \"inset\"\n ? \"group-data-[collapsible=icon]:w-[calc(var(--sidebar-width-icon)+(--spacing(4)))]\"\n : \"group-data-[collapsible=icon]:w-(--sidebar-width-icon)\",\n )}\n />\n <div\n data-slot=\"sidebar-container\"\n className={cn(\n \"hidden md:flex\",\n \"fixed inset-y-0 top-14 z-10\",\n \"h-[calc(100svh-3.5rem)] w-(--sidebar-width)\",\n \"border-r\",\n \"transition-[left,right,width] duration-200 ease-linear\",\n side === \"left\" &&\n \"left-0 group-data-[collapsible=offcanvas]:left-[calc(var(--sidebar-width)*-1)]\",\n side === \"right\" &&\n \"right-0 group-data-[collapsible=offcanvas]:right-[calc(var(--sidebar-width)*-1)]\",\n // Adjust the padding for floating and inset variants.\n variant === \"floating\" || variant === \"inset\"\n ? \"p-2 group-data-[collapsible=icon]:w-[calc(var(--sidebar-width-icon)+(--spacing(4))+2px)]\"\n : \"group-data-[collapsible=icon]:w-(--sidebar-width-icon) group-data-[side=left]:border-r group-data-[side=right]:border-l\",\n className,\n )}\n {...props}\n >\n <div\n data-sidebar=\"sidebar\"\n data-slot=\"sidebar-inner\"\n className={cn(\n \"flex size-full flex-col\",\n \"group-data-[variant=floating]:rounded-lg\",\n \"group-data-[variant=floating]:border\",\n \"group-data-[variant=floating]:border-sidebar-border\",\n \"group-data-[variant=floating]:shadow-sm\",\n )}\n >\n {children}\n </div>\n </div>\n </aside>\n );\n}\n\nfunction SidebarTrigger({\n className,\n onClick,\n ...props\n}: React.ComponentProps<typeof Button>) {\n const { toggleSidebar } = useSidebar();\n\n return (\n <Button\n data-sidebar=\"trigger\"\n data-slot=\"sidebar-trigger\"\n variant=\"ghost\"\n size=\"icon\"\n className={cn(\"size-10 rounded-full\", className)}\n onClick={(event) => {\n onClick?.(event);\n toggleSidebar();\n }}\n {...props}\n >\n <MenuIcon className=\"!size-6\" />\n <span className=\"sr-only\">Toggle Sidebar</span>\n </Button>\n );\n}\n\nfunction SidebarRail({ className, ...props }: React.ComponentProps<\"button\">) {\n const { toggleSidebar } = useSidebar();\n\n return (\n <button\n data-sidebar=\"rail\"\n data-slot=\"sidebar-rail\"\n aria-label=\"Toggle Sidebar\"\n tabIndex={-1}\n onClick={toggleSidebar}\n title=\"Toggle Sidebar\"\n className={cn(\n \"hover:after:bg-sidebar-border absolute inset-y-0 z-20 hidden w-4 -translate-x-1/2 transition-all ease-linear group-data-[side=left]:-right-4 group-data-[side=right]:left-0 after:absolute after:inset-y-0 after:left-1/2 after:w-[2px] sm:flex\",\n \"in-data-[side=left]:cursor-w-resize in-data-[side=right]:cursor-e-resize\",\n \"[[data-side=left][data-state=collapsed]_&]:cursor-e-resize [[data-side=right][data-state=collapsed]_&]:cursor-w-resize\",\n \"hover:group-data-[collapsible=offcanvas]:bg-sidebar group-data-[collapsible=offcanvas]:translate-x-0 group-data-[collapsible=offcanvas]:after:left-full\",\n \"[[data-side=left][data-collapsible=offcanvas]_&]:-right-2\",\n \"[[data-side=right][data-collapsible=offcanvas]_&]:-left-2\",\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction SidebarInset({\n className,\n children,\n ...props\n}: React.ComponentProps<\"main\">) {\n return (\n <main\n data-slot=\"sidebar-inset\"\n className={cn(\"w-full\", \"relative\", \"flex flex-1 flex-col\", className)}\n {...props}\n >\n <div className=\"h-14 w-full\" />\n <div className={cn(\"flex-1 inset-shadow-sm\")}>{children}</div>\n </main>\n );\n}\n\nfunction SidebarInput({\n className,\n ...props\n}: React.ComponentProps<typeof Input>) {\n return (\n <Input\n data-slot=\"sidebar-input\"\n data-sidebar=\"input\"\n className={cn(\"bg-background h-8 w-full shadow-none\", className)}\n {...props}\n />\n );\n}\n\nfunction SidebarHeader({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"sidebar-header\"\n data-sidebar=\"header\"\n className={cn(\"flex flex-col gap-2 p-2\", className)}\n {...props}\n />\n );\n}\n\nfunction SidebarFooter({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"sidebar-footer\"\n data-sidebar=\"footer\"\n className={cn(\"flex flex-col gap-2 p-2\", className)}\n {...props}\n />\n );\n}\n\nfunction SidebarSeparator({\n className,\n ...props\n}: React.ComponentProps<typeof Separator>) {\n return (\n <Separator\n data-slot=\"sidebar-separator\"\n data-sidebar=\"separator\"\n className={cn(\"bg-sidebar-border mx-2 w-auto\", className)}\n {...props}\n />\n );\n}\n\nfunction SidebarContent({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"sidebar-content\"\n data-sidebar=\"content\"\n className={cn(\n \"flex min-h-0 flex-1 flex-col gap-2 overflow-auto group-data-[collapsible=icon]:overflow-hidden\",\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction SidebarGroup({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"sidebar-group\"\n data-sidebar=\"group\"\n className={cn(\"relative flex w-full min-w-0 flex-col p-2\", className)}\n {...props}\n />\n );\n}\n\nfunction SidebarGroupLabel({\n className,\n asChild = false,\n ...props\n}: React.ComponentProps<\"div\"> & { asChild?: boolean }) {\n const Comp = asChild ? SlotPrimitive.Slot : \"div\";\n\n return (\n <Comp\n data-slot=\"sidebar-group-label\"\n data-sidebar=\"group-label\"\n className={cn(\n \"text-sidebar-foreground/70 ring-sidebar-ring flex h-8 shrink-0 items-center rounded-md px-2 text-xs font-medium outline-hidden transition-[margin,opacity] duration-200 ease-linear focus-visible:ring-2 [&>svg]:size-4 [&>svg]:shrink-0\",\n \"group-data-[collapsible=icon]:-mt-8 group-data-[collapsible=icon]:opacity-0\",\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction SidebarGroupAction({\n className,\n asChild = false,\n ...props\n}: React.ComponentProps<\"button\"> & { asChild?: boolean }) {\n const Comp = asChild ? SlotPrimitive.Slot : \"button\";\n\n return (\n <Comp\n data-slot=\"sidebar-group-action\"\n data-sidebar=\"group-action\"\n className={cn(\n \"text-sidebar-foreground ring-sidebar-ring hover:bg-sidebar-accent hover:text-sidebar-accent-foreground absolute top-3.5 right-3 flex aspect-square w-5 items-center justify-center rounded-md p-0 outline-hidden transition-transform focus-visible:ring-2 [&>svg]:size-4 [&>svg]:shrink-0\",\n // Increases the hit area of the button on mobile.\n \"after:absolute after:-inset-2 md:after:hidden\",\n \"group-data-[collapsible=icon]:hidden\",\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction SidebarGroupContent({\n className,\n ...props\n}: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"sidebar-group-content\"\n data-sidebar=\"group-content\"\n className={cn(\"w-full text-sm\", className)}\n {...props}\n />\n );\n}\n\nfunction SidebarMenu({ className, ...props }: React.ComponentProps<\"ul\">) {\n return (\n <ul\n data-slot=\"sidebar-menu\"\n data-sidebar=\"menu\"\n className={cn(\"flex w-full min-w-0 flex-col gap-1\", className)}\n {...props}\n />\n );\n}\n\nfunction SidebarMenuItem({ className, ...props }: React.ComponentProps<\"li\">) {\n return (\n <li\n data-slot=\"sidebar-menu-item\"\n data-sidebar=\"menu-item\"\n className={cn(\"group/menu-item relative\", className)}\n {...props}\n />\n );\n}\n\nconst sidebarMenuButtonVariants = cva(\n \"peer/menu-button cursor-pointer flex w-full items-center gap-2 overflow-hidden rounded-md p-2 text-left text-sm outline-hidden ring-sidebar-ring transition-[width,height,padding] hover:bg-sidebar-accent hover:text-sidebar-accent-foreground focus-visible:ring-2 active:bg-sidebar-accent active:text-sidebar-accent-foreground disabled:pointer-events-none disabled:opacity-50 group-has-data-[sidebar=menu-action]/menu-item:pr-8 aria-disabled:pointer-events-none aria-disabled:opacity-50 data-[active=true]:bg-sidebar-accent data-[active=true]:font-medium data-[active=true]:text-sidebar-accent-foreground data-[state=open]:hover:bg-sidebar-accent data-[state=open]:hover:text-sidebar-accent-foreground group-data-[collapsible=icon]:size-8! group-data-[collapsible=icon]:p-2! [&>span:last-child]:truncate [&>svg]:size-4 [&>svg]:shrink-0\",\n {\n variants: {\n variant: {\n default: \"hover:bg-sidebar-accent hover:text-sidebar-accent-foreground\",\n outline:\n \"bg-background shadow-[0_0_0_1px_hsl(var(--sidebar-border))] hover:bg-sidebar-accent hover:text-sidebar-accent-foreground hover:shadow-[0_0_0_1px_hsl(var(--sidebar-accent))]\",\n },\n size: {\n default: \"h-8 text-sm\",\n sm: \"h-7 text-xs\",\n lg: \"h-12 text-sm group-data-[collapsible=icon]:p-0!\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n size: \"default\",\n },\n },\n);\n\nfunction SidebarMenuButton({\n asChild = false,\n isActive = false,\n variant = \"default\",\n size = \"default\",\n tooltip,\n className,\n ...props\n}: React.ComponentProps<\"button\"> & {\n asChild?: boolean;\n isActive?: boolean;\n tooltip?: string | React.ComponentProps<typeof TooltipContent>;\n} & VariantProps<typeof sidebarMenuButtonVariants>) {\n const Comp = asChild ? SlotPrimitive.Slot : \"button\";\n const { isMobile, state } = useSidebar();\n\n const button = (\n <Comp\n data-slot=\"sidebar-menu-button\"\n data-sidebar=\"menu-button\"\n data-size={size}\n data-active={isActive}\n className={cn(sidebarMenuButtonVariants({ variant, size }), className)}\n {...props}\n />\n );\n\n if (!tooltip) {\n return button;\n }\n\n if (typeof tooltip === \"string\") {\n tooltip = {\n children: tooltip,\n };\n }\n\n return (\n <Tooltip>\n <TooltipTrigger asChild>{button}</TooltipTrigger>\n <TooltipContent\n side=\"right\"\n align=\"center\"\n hidden={state !== \"collapsed\" || isMobile}\n {...tooltip}\n />\n </Tooltip>\n );\n}\n\nfunction SidebarMenuAction({\n className,\n asChild = false,\n showOnHover = false,\n ...props\n}: React.ComponentProps<\"button\"> & {\n asChild?: boolean;\n showOnHover?: boolean;\n}) {\n const Comp = asChild ? SlotPrimitive.Slot : \"button\";\n\n return (\n <Comp\n data-slot=\"sidebar-menu-action\"\n data-sidebar=\"menu-action\"\n className={cn(\n \"text-sidebar-foreground ring-sidebar-ring hover:bg-sidebar-accent hover:text-sidebar-accent-foreground peer-hover/menu-button:text-sidebar-accent-foreground absolute top-1.5 right-1 flex aspect-square w-5 items-center justify-center rounded-md p-0 outline-hidden transition-transform focus-visible:ring-2 [&>svg]:size-4 [&>svg]:shrink-0\",\n // Increases the hit area of the button on mobile.\n \"after:absolute after:-inset-2 md:after:hidden\",\n \"peer-data-[size=sm]/menu-button:top-1\",\n \"peer-data-[size=default]/menu-button:top-1.5\",\n \"peer-data-[size=lg]/menu-button:top-2.5\",\n \"group-data-[collapsible=icon]:hidden\",\n showOnHover &&\n \"peer-data-[active=true]/menu-button:text-sidebar-accent-foreground group-focus-within/menu-item:opacity-100 group-hover/menu-item:opacity-100 data-[state=open]:opacity-100 md:opacity-0\",\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction SidebarMenuBadge({\n className,\n ...props\n}: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"sidebar-menu-badge\"\n data-sidebar=\"menu-badge\"\n className={cn(\n \"text-sidebar-foreground pointer-events-none absolute right-1 flex h-5 min-w-5 items-center justify-center rounded-md px-1 text-xs font-medium tabular-nums select-none\",\n \"peer-hover/menu-button:text-sidebar-accent-foreground peer-data-[active=true]/menu-button:text-sidebar-accent-foreground\",\n \"peer-data-[size=sm]/menu-button:top-1\",\n \"peer-data-[size=default]/menu-button:top-1.5\",\n \"peer-data-[size=lg]/menu-button:top-2.5\",\n \"group-data-[collapsible=icon]:hidden\",\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction SidebarMenuSkeleton({\n className,\n showIcon = false,\n ...props\n}: React.ComponentProps<\"div\"> & {\n showIcon?: boolean;\n}) {\n // Random width between 50 to 90%.\n const width = React.useMemo(() => {\n return `${Math.floor(Math.random() * 40) + 50}%`;\n }, []);\n\n return (\n <div\n data-slot=\"sidebar-menu-skeleton\"\n data-sidebar=\"menu-skeleton\"\n className={cn(\"flex h-8 items-center gap-2 rounded-md px-2\", className)}\n {...props}\n >\n {showIcon && (\n <Skeleton\n className=\"size-4 rounded-md\"\n data-sidebar=\"menu-skeleton-icon\"\n />\n )}\n <Skeleton\n className=\"h-4 max-w-(--skeleton-width) flex-1\"\n data-sidebar=\"menu-skeleton-text\"\n style={\n {\n \"--skeleton-width\": width,\n } as React.CSSProperties\n }\n />\n </div>\n );\n}\n\nfunction SidebarMenuSub({ className, ...props }: React.ComponentProps<\"ul\">) {\n return (\n <ul\n data-slot=\"sidebar-menu-sub\"\n data-sidebar=\"menu-sub\"\n className={cn(\n \"border-sidebar-border mx-3.5 flex min-w-0 translate-x-px flex-col gap-1 border-l px-2.5 py-0.5\",\n \"group-data-[collapsible=icon]:hidden\",\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction SidebarMenuSubItem({\n className,\n ...props\n}: React.ComponentProps<\"li\">) {\n return (\n <li\n data-slot=\"sidebar-menu-sub-item\"\n data-sidebar=\"menu-sub-item\"\n className={cn(\"group/menu-sub-item relative\", className)}\n {...props}\n />\n );\n}\n\nfunction SidebarMenuSubButton({\n asChild = false,\n size = \"md\",\n isActive = false,\n className,\n ...props\n}: React.ComponentProps<\"a\"> & {\n asChild?: boolean;\n size?: \"sm\" | \"md\";\n isActive?: boolean;\n}) {\n const Comp = asChild ? SlotPrimitive.Slot : \"a\";\n\n return (\n <Comp\n data-slot=\"sidebar-menu-sub-button\"\n data-sidebar=\"menu-sub-button\"\n data-size={size}\n data-active={isActive}\n className={cn(\n \"text-sidebar-foreground ring-sidebar-ring hover:bg-sidebar-accent hover:text-sidebar-accent-foreground active:bg-sidebar-accent active:text-sidebar-accent-foreground [&>svg]:text-sidebar-accent-foreground flex h-7 min-w-0 -translate-x-px items-center gap-2 overflow-hidden rounded-md px-2 outline-hidden focus-visible:ring-2 disabled:pointer-events-none disabled:opacity-50 aria-disabled:pointer-events-none aria-disabled:opacity-50 [&>span:last-child]:truncate [&>svg]:size-4 [&>svg]:shrink-0\",\n \"data-[active=true]:bg-sidebar-accent data-[active=true]:text-sidebar-accent-foreground\",\n size === \"sm\" && \"text-xs\",\n size === \"md\" && \"text-sm\",\n \"group-data-[collapsible=icon]:hidden\",\n className,\n )}\n {...props}\n />\n );\n}\n\nexport {\n Sidebar,\n SidebarContent,\n SidebarFooter,\n SidebarGroup,\n SidebarGroupAction,\n SidebarGroupContent,\n SidebarGroupLabel,\n SidebarHeader,\n SidebarInput,\n SidebarInset,\n SidebarMenu,\n SidebarMenuAction,\n SidebarMenuBadge,\n SidebarMenuButton,\n SidebarMenuItem,\n SidebarMenuSkeleton,\n SidebarMenuSub,\n SidebarMenuSubButton,\n SidebarMenuSubItem,\n SidebarProvider,\n SidebarRail,\n SidebarSeparator,\n SidebarTrigger,\n // eslint-disable-next-line react-refresh/only-export-components\n useSidebar,\n};\n"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- const e=require(`./chunk-CUT6urMc.cjs`),t=require(`./utils-BsjVK5EW.cjs`),n=e.__toESM(require(`react`)),r=e.__toESM(require(`react/jsx-runtime`));function i({className:e,...n}){return(0,r.jsx)(`div`,{"data-slot":`skeleton`,className:t.cn(`bg-accent animate-pulse rounded-md`,e),...n})}Object.defineProperty(exports,`Skeleton`,{enumerable:!0,get:function(){return i}});
2
- //# sourceMappingURL=skeleton-m3giaF4T.cjs.map
1
+ const e=require(`./chunk-hhQzssFb.cjs`),t=require(`./utils-DaJ1XZgX.cjs`),n=e.__toESM(require(`react`)),r=e.__toESM(require(`react/jsx-runtime`));function i({className:e,...n}){return(0,r.jsx)(`div`,{"data-slot":`skeleton`,className:t.cn(`bg-accent animate-pulse rounded-md`,e),...n})}Object.defineProperty(exports,`Skeleton`,{enumerable:!0,get:function(){return i}});
2
+ //# sourceMappingURL=skeleton-BTQm_mtV.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"skeleton-m3giaF4T.cjs","names":["cn"],"sources":["../packages/components/ui/skeleton.tsx"],"sourcesContent":["\"use client\";\nimport React from \"react\";\nimport { cn } from \"@/lib/utils\";\n\nfunction Skeleton({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"skeleton\"\n className={cn(\"bg-accent animate-pulse rounded-md\", className)}\n {...props}\n />\n );\n}\n\nexport { Skeleton };\n"],"mappings":"kJAIA,SAAS,EAAS,CAAE,YAAW,GAAG,EAAoC,CAAE,CACtE,OACE,EAAA,EAAA,KAAC,MAAA,CACC,YAAU,WACV,UAAWA,EAAAA,GAAG,qCAAsC,GACpD,GAAI,GAGT"}
1
+ {"version":3,"file":"skeleton-BTQm_mtV.cjs","names":["cn"],"sources":["../packages/components/ui/skeleton.tsx"],"sourcesContent":["\"use client\";\nimport React from \"react\";\nimport { cn } from \"@/lib/utils\";\n\nfunction Skeleton({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"skeleton\"\n className={cn(\"bg-accent animate-pulse rounded-md\", className)}\n {...props}\n />\n );\n}\n\nexport { Skeleton };\n"],"mappings":"kJAIA,SAAS,EAAS,CAAE,YAAW,GAAG,GAAsC,CACtE,OACE,EAAA,EAAA,KAAC,MAAA,CACC,YAAU,WACV,UAAWA,EAAAA,GAAG,qCAAsC,GACpD,GAAI"}
@@ -1,2 +1,2 @@
1
1
  import{cn as e}from"./utils-D9AH0PUV.js";import t from"react";import{jsx as n}from"react/jsx-runtime";function r({className:t,...r}){return n(`div`,{"data-slot":`skeleton`,className:e(`bg-accent animate-pulse rounded-md`,t),...r})}export{r as Skeleton};
2
- //# sourceMappingURL=skeleton-DYmX0k94.js.map
2
+ //# sourceMappingURL=skeleton-D1_Brnl9.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"skeleton-DYmX0k94.js","names":[],"sources":["../packages/components/ui/skeleton.tsx"],"sourcesContent":["\"use client\";\nimport React from \"react\";\nimport { cn } from \"@/lib/utils\";\n\nfunction Skeleton({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"skeleton\"\n className={cn(\"bg-accent animate-pulse rounded-md\", className)}\n {...props}\n />\n );\n}\n\nexport { Skeleton };\n"],"mappings":"sGAIA,SAAS,EAAS,CAAE,YAAW,GAAG,EAAoC,CAAE,CACtE,OACE,EAAC,MAAA,CACC,YAAU,WACV,UAAW,EAAG,qCAAsC,GACpD,GAAI,GAGT"}
1
+ {"version":3,"file":"skeleton-D1_Brnl9.js","names":[],"sources":["../packages/components/ui/skeleton.tsx"],"sourcesContent":["\"use client\";\nimport React from \"react\";\nimport { cn } from \"@/lib/utils\";\n\nfunction Skeleton({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"skeleton\"\n className={cn(\"bg-accent animate-pulse rounded-md\", className)}\n {...props}\n />\n );\n}\n\nexport { Skeleton };\n"],"mappings":"sGAIA,SAAS,EAAS,CAAE,YAAW,GAAG,GAAsC,CACtE,OACE,EAAC,MAAA,CACC,YAAU,WACV,UAAW,EAAG,qCAAsC,GACpD,GAAI"}
@@ -0,0 +1,2 @@
1
+ import{cn as e}from"./utils-D9AH0PUV.js";import t from"react";import{jsx as n}from"react/jsx-runtime";import{Switch as r}from"radix-ui";function i({className:t,...i}){return n(r.Root,{"data-slot":`switch`,className:e(`peer`,`w-8 shrink-0 cursor-pointer items-center rounded-full border border-transparent shadow-xs transition-all outline-none`,`inline-flex h-[20px]`,`data-[state=checked]:bg-primary`,`data-[state=unchecked]:bg-input`,`dark:data-[state=unchecked]:bg-input/80`,`focus-visible:border-ring`,`focus-visible:ring-ring/50`,`focus-visible:ring-4`,`disabled:cursor-not-allowed`,`disabled:opacity-50`,`data-[state=unchecked]:border-input`,`data-[state=unchecked]:[&_span]:bg-input`,`data-[state=unchecked]:bg-transparent`,`data-[state=unchecked]:[&_span]:size-4`,`data-[state=unchecked]:[&_span]:translate-x-0.5`,`data-[state=unchecked]:[&_span]:shadow-none`,`data-[state=unchecked]:[&_span]:rtl:-translate-x-0.5`,t),...i,children:n(r.Thumb,{"data-slot":`switch-thumb`,className:e(`bg-background`,`pointer-events-none block size-4 rounded-full ring-0 transition-transform`,`data-[state=checked]:translate-x-[calc(100%-3px)]`,`data-[state=unchecked]:translate-x-0`,`dark:data-[state=unchecked]:bg-foreground`,`dark:data-[state=checked]:bg-primary-foreground`)})})}export{i as Switch};
2
+ //# sourceMappingURL=switch-BlK-TC1h.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"switch-BlK-TC1h.js","names":["Switch","SwitchPrimitive"],"sources":["../packages/components/ui/switch.tsx"],"sourcesContent":["\"use client\";\nimport React from \"react\";\nimport { Switch as SwitchPrimitive } from \"radix-ui\";\n\nimport { cn } from \"@/lib/utils\";\n\nfunction Switch({\n className,\n ...props\n}: React.ComponentProps<typeof SwitchPrimitive.Root>) {\n return (\n <SwitchPrimitive.Root\n data-slot=\"switch\"\n className={cn(\n \"peer\",\n \"w-8 shrink-0 cursor-pointer items-center rounded-full border border-transparent shadow-xs transition-all outline-none\",\n \"inline-flex h-[20px]\",\n \"data-[state=checked]:bg-primary\",\n \"data-[state=unchecked]:bg-input\",\n \"dark:data-[state=unchecked]:bg-input/80\",\n \"focus-visible:border-ring\",\n \"focus-visible:ring-ring/50\",\n \"focus-visible:ring-4\",\n \"disabled:cursor-not-allowed\",\n \"disabled:opacity-50\",\n \"data-[state=unchecked]:border-input\",\n \"data-[state=unchecked]:[&_span]:bg-input\",\n \"data-[state=unchecked]:bg-transparent\",\n \"data-[state=unchecked]:[&_span]:size-4\",\n \"data-[state=unchecked]:[&_span]:translate-x-0.5\",\n \"data-[state=unchecked]:[&_span]:shadow-none\",\n \"data-[state=unchecked]:[&_span]:rtl:-translate-x-0.5\",\n className,\n )}\n {...props}\n >\n <SwitchPrimitive.Thumb\n data-slot=\"switch-thumb\"\n className={cn(\n \"bg-background\",\n \"pointer-events-none block size-4 rounded-full ring-0 transition-transform\",\n \"data-[state=checked]:translate-x-[calc(100%-3px)]\",\n \"data-[state=unchecked]:translate-x-0\",\n \"dark:data-[state=unchecked]:bg-foreground\",\n \"dark:data-[state=checked]:bg-primary-foreground\",\n )}\n />\n </SwitchPrimitive.Root>\n );\n}\n\nexport { Switch };\n"],"mappings":"wIAMA,SAASA,EAAO,CACd,YACA,GAAG,GACiD,CACpD,OACE,EAACC,EAAgB,KAAA,CACf,YAAU,SACV,UAAW,EACT,OACA,wHACA,uBACA,kCACA,kCACA,0CACA,4BACA,6BACA,uBACA,8BACA,sBACA,sCACA,2CACA,wCACA,yCACA,kDACA,8CACA,uDACA,GAEF,GAAI,WAEJ,EAACA,EAAgB,MAAA,CACf,YAAU,eACV,UAAW,EACT,gBACA,4EACA,oDACA,uCACA,4CACA"}
@@ -0,0 +1,2 @@
1
+ const e=require(`./chunk-hhQzssFb.cjs`),t=require(`./utils-DaJ1XZgX.cjs`),n=e.__toESM(require(`react`)),r=e.__toESM(require(`react/jsx-runtime`)),i=e.__toESM(require(`radix-ui`));function a({className:e,...n}){return(0,r.jsx)(i.Switch.Root,{"data-slot":`switch`,className:t.cn(`peer`,`w-8 shrink-0 cursor-pointer items-center rounded-full border border-transparent shadow-xs transition-all outline-none`,`inline-flex h-[20px]`,`data-[state=checked]:bg-primary`,`data-[state=unchecked]:bg-input`,`dark:data-[state=unchecked]:bg-input/80`,`focus-visible:border-ring`,`focus-visible:ring-ring/50`,`focus-visible:ring-4`,`disabled:cursor-not-allowed`,`disabled:opacity-50`,`data-[state=unchecked]:border-input`,`data-[state=unchecked]:[&_span]:bg-input`,`data-[state=unchecked]:bg-transparent`,`data-[state=unchecked]:[&_span]:size-4`,`data-[state=unchecked]:[&_span]:translate-x-0.5`,`data-[state=unchecked]:[&_span]:shadow-none`,`data-[state=unchecked]:[&_span]:rtl:-translate-x-0.5`,e),...n,children:(0,r.jsx)(i.Switch.Thumb,{"data-slot":`switch-thumb`,className:t.cn(`bg-background`,`pointer-events-none block size-4 rounded-full ring-0 transition-transform`,`data-[state=checked]:translate-x-[calc(100%-3px)]`,`data-[state=unchecked]:translate-x-0`,`dark:data-[state=unchecked]:bg-foreground`,`dark:data-[state=checked]:bg-primary-foreground`)})})}Object.defineProperty(exports,`Switch`,{enumerable:!0,get:function(){return a}});
2
+ //# sourceMappingURL=switch-CoP3UwNk.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"switch-CoP3UwNk.cjs","names":["SwitchPrimitive","cn"],"sources":["../packages/components/ui/switch.tsx"],"sourcesContent":["\"use client\";\nimport React from \"react\";\nimport { Switch as SwitchPrimitive } from \"radix-ui\";\n\nimport { cn } from \"@/lib/utils\";\n\nfunction Switch({\n className,\n ...props\n}: React.ComponentProps<typeof SwitchPrimitive.Root>) {\n return (\n <SwitchPrimitive.Root\n data-slot=\"switch\"\n className={cn(\n \"peer\",\n \"w-8 shrink-0 cursor-pointer items-center rounded-full border border-transparent shadow-xs transition-all outline-none\",\n \"inline-flex h-[20px]\",\n \"data-[state=checked]:bg-primary\",\n \"data-[state=unchecked]:bg-input\",\n \"dark:data-[state=unchecked]:bg-input/80\",\n \"focus-visible:border-ring\",\n \"focus-visible:ring-ring/50\",\n \"focus-visible:ring-4\",\n \"disabled:cursor-not-allowed\",\n \"disabled:opacity-50\",\n \"data-[state=unchecked]:border-input\",\n \"data-[state=unchecked]:[&_span]:bg-input\",\n \"data-[state=unchecked]:bg-transparent\",\n \"data-[state=unchecked]:[&_span]:size-4\",\n \"data-[state=unchecked]:[&_span]:translate-x-0.5\",\n \"data-[state=unchecked]:[&_span]:shadow-none\",\n \"data-[state=unchecked]:[&_span]:rtl:-translate-x-0.5\",\n className,\n )}\n {...props}\n >\n <SwitchPrimitive.Thumb\n data-slot=\"switch-thumb\"\n className={cn(\n \"bg-background\",\n \"pointer-events-none block size-4 rounded-full ring-0 transition-transform\",\n \"data-[state=checked]:translate-x-[calc(100%-3px)]\",\n \"data-[state=unchecked]:translate-x-0\",\n \"dark:data-[state=unchecked]:bg-foreground\",\n \"dark:data-[state=checked]:bg-primary-foreground\",\n )}\n />\n </SwitchPrimitive.Root>\n );\n}\n\nexport { Switch };\n"],"mappings":"mLAMA,SAAS,EAAO,CACd,YACA,GAAG,GACiD,CACpD,OACE,EAAA,EAAA,KAACA,EAAAA,OAAgB,KAAA,CACf,YAAU,SACV,UAAWC,EAAAA,GACT,OACA,wHACA,uBACA,kCACA,kCACA,0CACA,4BACA,6BACA,uBACA,8BACA,sBACA,sCACA,2CACA,wCACA,yCACA,kDACA,8CACA,uDACA,GAEF,GAAI,YAEJ,EAAA,EAAA,KAACD,EAAAA,OAAgB,MAAA,CACf,YAAU,eACV,UAAWC,EAAAA,GACT,gBACA,4EACA,oDACA,uCACA,4CACA"}
@@ -1,2 +1,2 @@
1
- const e=require(`../chunk-CUT6urMc.cjs`),t=require(`../utils-BsjVK5EW.cjs`),n=require(`../flex-CNA_SId-.cjs`);require(`../paragraph-ZxI8zxuf.cjs`);const r=require(`../button-Dzv_nos1.cjs`),i=require(`../dropdown-menu-Bv18S56o.cjs`),a=require(`../scroll-area-DWWpaz5j.cjs`),o=require(`../table-BSeev7T0.cjs`),s=require(`../select-ZSyt5zCe.cjs`),c=require(`../add-new-DUoS_-n2.cjs`),l=require(`../refresh-DrolZxuC.cjs`);require(`../input-DXEBB91E.cjs`);const u=require(`../search-input-Bf4-FeWu.cjs`),d=e.__toESM(require(`react`)),f=e.__toESM(require(`react/jsx-runtime`)),p=e.__toESM(require(`lucide-react`)),m=e.__toESM(require(`@tanstack/react-table`)),h=e=>{let t=e.getIsPinned();return{left:t===`left`?`${e.getStart(`left`)}px`:void 0,right:t===`right`?`${e.getAfter(`right`)}px`:void 0,position:t?`sticky`:`relative`,width:e.getSize(),zIndex:t?1:0}},g=({column:e})=>{let t=e.getIsSorted(),n={asc:(0,f.jsx)(p.ChevronUp,{className:`shrink-0 opacity-60`,size:16,strokeWidth:2,"aria-hidden":`true`}),desc:(0,f.jsx)(p.ChevronDown,{className:`shrink-0 opacity-60`,size:16,strokeWidth:2,"aria-hidden":`true`})};return t?n[t]:null},_=({column:e})=>{let t=e.columnDef.header;return e.getCanPin()?e.getIsPinned()?(0,f.jsx)(r.Button,{size:`icon`,variant:`ghost`,className:`hover:[&_svg]:text-secondary-foreground -mr-1 size-7 shadow-none`,"aria-label":`Unpin ${t} column`,title:`Unpin ${t} column`,onClick:()=>e.pin(!1),children:(0,f.jsx)(p.PinOffIcon,{className:`opacity-60`,size:16,"aria-hidden":`true`})}):(0,f.jsxs)(i.DropdownMenu,{children:[(0,f.jsx)(i.DropdownMenuTrigger,{asChild:!0,children:(0,f.jsx)(r.Button,{size:`icon`,variant:`ghost`,className:`-mr-1 size-7 shadow-none`,"aria-label":`Pin options for ${t} column`,title:`Pin options for ${t} column`,children:(0,f.jsx)(p.EllipsisIcon,{className:`opacity-60`,size:16,"aria-hidden":`true`})})}),(0,f.jsxs)(i.DropdownMenuContent,{align:`end`,children:[(0,f.jsxs)(i.DropdownMenuItem,{onClick:()=>e.pin(`left`),children:[(0,f.jsx)(p.ArrowLeftToLineIcon,{size:16,className:`opacity-60`,"aria-hidden":`true`}),`Stick to left`]}),(0,f.jsxs)(i.DropdownMenuItem,{onClick:()=>e.pin(`right`),children:[(0,f.jsx)(p.ArrowRightToLineIcon,{size:16,className:`opacity-60`,"aria-hidden":`true`}),`Stick to right`]})]})]}):null},v=({header:e})=>{let{column:n}=e,r=e=>{n.getCanSort()&&(e.key===`Enter`||e.key===` `)&&(e.preventDefault(),n.getToggleSortingHandler()?.(e))};return(0,f.jsxs)(`div`,{className:`flex items-center justify-between gap-2 truncate`,children:[!e.isPlaceholder&&(0,f.jsxs)(`div`,{className:t.cn(n.getCanSort()&&`flex h-full cursor-pointer items-center justify-between gap-2 select-none`),onClick:n.getToggleSortingHandler(),onKeyDown:r,tabIndex:n.getCanSort()?0:void 0,children:[(0,f.jsx)(`span`,{className:`truncate`,children:(0,m.flexRender)(n.columnDef.header,e.getContext())}),(0,f.jsx)(g,{column:n})]}),!e.isPlaceholder&&(0,f.jsx)(_,{column:n})]})},y=({table:e,isLoading:n,onClickRow:r})=>{"use no memo";return(0,f.jsxs)(a.ScrollArea,{className:`border-border bg-background relative w-full overflow-auto rounded-lg border`,children:[(0,f.jsxs)(o.Table,{className:t.cn(`!w-full`,`[&_td]:border-border`,`[&_th]:border-border`,`table-fixed border-separate border-spacing-0`,`[&_tfoot_td]:border-t`,`[&_th]:border-b`,`[&_tr]:border-none`,`[&_tr:not(:last-child)_td]:border-b`),style:{width:e.getTotalSize()},children:[(0,f.jsx)(o.TableHeader,{className:`bg-muted/50 sticky top-0 z-10 backdrop-blur-xs`,children:e.getHeaderGroups().map(e=>(0,f.jsx)(o.TableRow,{className:`bg-muted/50`,children:e.headers.map(e=>{let{column:n}=e,r=n.getIsPinned(),i=r===`left`&&n.getIsLastColumn(`left`),a=r===`right`&&n.getIsFirstColumn(`right`);return(0,f.jsx)(o.TableHead,{"data-pinned":r||void 0,"data-last-col":i?`left`:a?`right`:void 0,className:t.cn(`text-accent-foreground/60 relative h-9 border-r font-semibold select-none`,`data-pinned:backdrop-blur-xs`,`data-pinned:bg-muted/90`,`[&>.cursor-col-resize]:last:opacity-0`,`[&[data-pinned][data-last-col]]:border-border`,`[&:not([data-pinned]):has(+[data-pinned])_div.cursor-col-resize:last-child]:opacity-0`,`[&[data-last-col=left]_div.cursor-col-resize:last-child]:opacity-0`,`[&[data-pinned=left][data-last-col=left]]:border-r`,`[&[data-pinned=right]:last-child_div.cursor-col-resize:last-child]:opacity-0`,`[&[data-pinned=right][data-last-col=right]]:border-l`),colSpan:e.colSpan,style:{width:e.getSize(),maxWidth:e.getSize(),...h(e.column)},children:(0,f.jsx)(v,{header:e})},e.id)})},e.id))}),(0,f.jsx)(o.TableBody,{className:t.cn(n&&`h-36`,e.getRowModel().rows?.length===0&&`h-48`),children:n?(0,f.jsx)(o.TableRow,{className:`absolute top-9 flex h-36 w-full items-center justify-center`,children:(0,f.jsx)(o.TableCell,{children:`loading...`})}):(0,f.jsx)(d.default.Fragment,{children:e.getRowModel().rows?.length?e.getRowModel().rows.map(e=>(0,f.jsx)(o.TableRow,{"data-state":e.getIsSelected()&&`selected`,className:`cursor-pointer border-none focus:outline-none`,onClick:()=>r?.(e?.id||e.original?.id?.toString()||e.original?.uuid||void 0),children:e.getVisibleCells().map(e=>{let{column:n}=e,r=n.getIsPinned(),i=r===`left`&&n.getIsLastColumn(`left`),a=r===`right`&&n.getIsFirstColumn(`right`);return(0,f.jsx)(o.TableCell,{style:{...h(n),width:e.column.getSize(),maxWidth:e.column.getSize()},"data-pinned":r||void 0,"data-last-col":i?`left`:a?`right`:void 0,className:t.cn(`overflow-hidden py-2.5`,`[&[data-pinned][data-last-col]]:border-border`,`[&[data-pinned=left][data-last-col=left]]:border-r`,`[&[data-pinned=right][data-last-col=right]]:border-l`,`data-pinned:bg-background/90`),children:(0,m.flexRender)(e.column.columnDef.cell,e.getContext())},e.id)})},e.id)):(0,f.jsx)(o.TableRow,{className:`absolute top-9 flex h-36 w-full items-center justify-center`,children:(0,f.jsx)(o.TableCell,{children:(0,f.jsxs)(`div`,{className:`text-muted-foreground flex size-full flex-col items-center justify-center gap-y-8 text-base`,children:[(0,f.jsx)(p.PackagePlusIcon,{size:48,strokeWidth:2}),(0,f.jsx)(`p`,{children:`Thêm dữ liệu để hiển thị`})]})})})})})]}),(0,f.jsx)(a.ScrollBar,{orientation:`vertical`,className:`z-10 w-2`}),(0,f.jsx)(a.ScrollBar,{orientation:`horizontal`,className:`absolute right-0 bottom-0 left-0 h-2`})]})};function b({table:e}){"use no memo";return(0,f.jsxs)(`div`,{className:`mt-4 flex w-full flex-0 flex-wrap items-center justify-between gap-y-4 px-2`,children:[(0,f.jsxs)(`div`,{className:`text-muted-foreground flex-1 text-sm`,children:[e.getFilteredSelectedRowModel().rows.length,` of`,` `,e.getFilteredRowModel().rows.length,` row(s) selected.`]}),(0,f.jsxs)(`div`,{className:`flex flex-wrap items-center space-x-6 gap-y-4 lg:space-x-8`,children:[(0,f.jsxs)(`div`,{className:`flex items-center space-x-2`,children:[(0,f.jsx)(`p`,{className:`text-sm font-medium`,children:`Rows per page`}),(0,f.jsxs)(s.Select,{value:`${e.getState().pagination.pageSize}`,onValueChange:t=>{e.setPageSize(Number(t))},children:[(0,f.jsx)(s.SelectTrigger,{className:`h-8 w-[70px]`,children:(0,f.jsx)(s.SelectValue,{placeholder:e.getState().pagination.pageSize})}),(0,f.jsx)(s.SelectContent,{side:`top`,children:[10,20,30,40,50].map(e=>(0,f.jsx)(s.SelectItem,{value:`${e}`,children:e},e))})]})]}),(0,f.jsxs)(`div`,{className:`flex w-25 items-center justify-center text-sm font-medium`,children:[`Page `,e.getState().pagination.pageIndex+1,` of`,` `,e.getPageCount()]}),(0,f.jsxs)(`div`,{className:`flex items-center space-x-2 *:size-9 *:p-0`,children:[(0,f.jsxs)(r.Button,{variant:`outline`,className:`lg:flex`,onClick:()=>e.setPageIndex(0),disabled:!e.getCanPreviousPage(),children:[(0,f.jsx)(`span`,{className:`sr-only`,children:`Go to first page`}),(0,f.jsx)(p.ChevronsLeft,{})]}),(0,f.jsxs)(r.Button,{variant:`outline`,onClick:()=>e.previousPage(),disabled:!e.getCanPreviousPage(),children:[(0,f.jsx)(`span`,{className:`sr-only`,children:`Go to previous page`}),(0,f.jsx)(p.ChevronLeft,{})]}),(0,f.jsxs)(r.Button,{type:`button`,variant:`outline`,onClick:()=>e.nextPage(),disabled:!e.getCanNextPage(),children:[(0,f.jsx)(`span`,{className:`sr-only`,children:`Go to next page`}),(0,f.jsx)(p.ChevronRight,{})]}),(0,f.jsxs)(r.Button,{variant:`outline`,className:`lg:flex`,onClick:()=>{e.setPageIndex(e.getPageCount()-1)},disabled:!e.getCanNextPage(),children:[(0,f.jsx)(`span`,{className:`sr-only`,children:`Go to last page`}),(0,f.jsx)(p.ChevronsRight,{})]})]})]})]})}function x({data:e,totalCount:t,isLoading:r,columns:i,pagination:a,onAdd:o,onRefresh:s,onClickRow:p,onPaginationChange:h}){"use no memo";let[g,_]=d.default.useState({}),[v,x]=d.default.useState([]),[S,C]=d.default.useState([]),[w,T]=d.default.useState({}),E=d.default.useMemo(()=>({columnPinning:{right:[`actions`,`update`,`delete`]},pagination:{pageIndex:0,pageSize:20}}),[]),D=(0,m.useReactTable)({initialState:E,data:e,columns:i,rowCount:t,columnResizeMode:`onChange`,manualPagination:!0,enableColumnResizing:!1,enableMultiRowSelection:!1,getCoreRowModel:(0,m.getCoreRowModel)(),getPaginationRowModel:(0,m.getPaginationRowModel)(),getSortedRowModel:(0,m.getSortedRowModel)(),getFilteredRowModel:(0,m.getFilteredRowModel)(),getFacetedRowModel:(0,m.getFacetedRowModel)(),getFacetedUniqueValues:(0,m.getFacetedUniqueValues)(),getRowId:e=>e.id||e.uuid,state:{rowSelection:g,sorting:v,columnVisibility:w,columnFilters:S,...a?{pagination:a}:{}},onRowSelectionChange:_,onSortingChange:x,onColumnVisibilityChange:T,onColumnFiltersChange:C,...h?{onPaginationChange:h}:{}});return(0,f.jsxs)(n.Flex,{vertical:!0,wrap:!1,gap:`sm`,align:`start`,className:`size-full overflow-y-auto pt-1`,children:[(0,f.jsxs)(n.Flex,{justify:`between`,padding:`none`,width:`full`,className:`flex-0`,children:[(0,f.jsx)(u.SearchInput,{placeholder:`Search...`}),(0,f.jsxs)(n.Flex,{className:`px-0`,children:[o&&(0,f.jsx)(c.AddNewBtn,{onClick:o}),(0,f.jsx)(l.RefreshBtn,{onClick:s})]})]}),(0,f.jsxs)(n.Flex,{padding:`none`,vertical:!0,wrap:!1,width:`full`,className:`flex-1 overflow-auto`,children:[(0,f.jsx)(y,{table:D,isLoading:r,onClickRow:p}),(0,f.jsx)(b,{table:D})]})]})}exports.Table=x;
1
+ const e=require(`../chunk-hhQzssFb.cjs`),t=require(`../utils-DaJ1XZgX.cjs`),n=require(`../flex-yTyoLpgH.cjs`);require(`../paragraph-DWQ0PZt_.cjs`);const r=require(`../button-CycE0WzB.cjs`);require(`../input-C8Sebaue.cjs`);const i=require(`../select-UsiicIRo.cjs`),a=require(`../dropdown-menu-D2Kh77uw.cjs`),o=require(`../scroll-area-fNeFxa8L.cjs`),s=require(`../table-CFqnfTKO.cjs`),c=require(`../add-new-aIL8RwI8.cjs`),l=require(`../refresh-BuL5nDf9.cjs`),u=require(`../search-input-CWCcWgmA.cjs`),d=e.__toESM(require(`react`)),f=e.__toESM(require(`react/jsx-runtime`)),p=e.__toESM(require(`lucide-react`)),m=e.__toESM(require(`@tanstack/react-table`)),h=e=>{let t=e.getIsPinned();return{left:t===`left`?`${e.getStart(`left`)}px`:void 0,right:t===`right`?`${e.getAfter(`right`)}px`:void 0,position:t?`sticky`:`relative`,width:e.getSize(),zIndex:t?1:0}},g=({column:e})=>{let t=e.getIsSorted(),n={asc:(0,f.jsx)(p.ChevronUp,{className:`shrink-0 opacity-60`,size:16,strokeWidth:2,"aria-hidden":`true`}),desc:(0,f.jsx)(p.ChevronDown,{className:`shrink-0 opacity-60`,size:16,strokeWidth:2,"aria-hidden":`true`})};return t?n[t]:null},_=({column:e})=>{let t=e.columnDef.header;return e.getCanPin()?e.getIsPinned()?(0,f.jsx)(r.Button,{size:`icon`,variant:`ghost`,className:`hover:[&_svg]:text-secondary-foreground -mr-1 size-7 shadow-none`,"aria-label":`Unpin ${t} column`,title:`Unpin ${t} column`,onClick:()=>e.pin(!1),children:(0,f.jsx)(p.PinOffIcon,{className:`opacity-60`,size:16,"aria-hidden":`true`})}):(0,f.jsxs)(a.DropdownMenu,{children:[(0,f.jsx)(a.DropdownMenuTrigger,{asChild:!0,children:(0,f.jsx)(r.Button,{size:`icon`,variant:`ghost`,className:`-mr-1 size-7 shadow-none`,"aria-label":`Pin options for ${t} column`,title:`Pin options for ${t} column`,children:(0,f.jsx)(p.EllipsisIcon,{className:`opacity-60`,size:16,"aria-hidden":`true`})})}),(0,f.jsxs)(a.DropdownMenuContent,{align:`end`,children:[(0,f.jsxs)(a.DropdownMenuItem,{onClick:()=>e.pin(`left`),children:[(0,f.jsx)(p.ArrowLeftToLineIcon,{size:16,className:`opacity-60`,"aria-hidden":`true`}),`Stick to left`]}),(0,f.jsxs)(a.DropdownMenuItem,{onClick:()=>e.pin(`right`),children:[(0,f.jsx)(p.ArrowRightToLineIcon,{size:16,className:`opacity-60`,"aria-hidden":`true`}),`Stick to right`]})]})]}):null},v=({header:e})=>{let{column:n}=e,r=e=>{n.getCanSort()&&(e.key===`Enter`||e.key===` `)&&(e.preventDefault(),n.getToggleSortingHandler()?.(e))};return(0,f.jsxs)(`div`,{className:`flex items-center justify-between gap-2 truncate`,children:[!e.isPlaceholder&&(0,f.jsxs)(`div`,{className:t.cn(n.getCanSort()&&`flex h-full cursor-pointer items-center justify-between gap-2 select-none`),onClick:n.getToggleSortingHandler(),onKeyDown:r,tabIndex:n.getCanSort()?0:void 0,children:[(0,f.jsx)(`span`,{className:`truncate`,children:(0,m.flexRender)(n.columnDef.header,e.getContext())}),(0,f.jsx)(g,{column:n})]}),!e.isPlaceholder&&(0,f.jsx)(_,{column:n})]})},y=({table:e,isLoading:n,onClickRow:r})=>{"use no memo";return(0,f.jsxs)(o.ScrollArea,{className:`border-border bg-background relative w-full overflow-auto rounded-lg border`,children:[(0,f.jsxs)(s.Table,{className:t.cn(`!w-full`,`[&_td]:border-border`,`[&_th]:border-border`,`table-fixed border-separate border-spacing-0`,`[&_tfoot_td]:border-t`,`[&_th]:border-b`,`[&_tr]:border-none`,`[&_tr:not(:last-child)_td]:border-b`),style:{width:e.getTotalSize()},children:[(0,f.jsx)(s.TableHeader,{className:`bg-muted/50 sticky top-0 z-10 backdrop-blur-xs`,children:e.getHeaderGroups().map(e=>(0,f.jsx)(s.TableRow,{className:`bg-muted/50`,children:e.headers.map(e=>{let{column:n}=e,r=n.getIsPinned(),i=r===`left`&&n.getIsLastColumn(`left`),a=r===`right`&&n.getIsFirstColumn(`right`);return(0,f.jsx)(s.TableHead,{"data-pinned":r||void 0,"data-last-col":i?`left`:a?`right`:void 0,className:t.cn(`text-accent-foreground/60 relative h-9 border-r font-semibold select-none`,`data-pinned:backdrop-blur-xs`,`data-pinned:bg-muted/90`,`[&>.cursor-col-resize]:last:opacity-0`,`[&[data-pinned][data-last-col]]:border-border`,`[&:not([data-pinned]):has(+[data-pinned])_div.cursor-col-resize:last-child]:opacity-0`,`[&[data-last-col=left]_div.cursor-col-resize:last-child]:opacity-0`,`[&[data-pinned=left][data-last-col=left]]:border-r`,`[&[data-pinned=right]:last-child_div.cursor-col-resize:last-child]:opacity-0`,`[&[data-pinned=right][data-last-col=right]]:border-l`),colSpan:e.colSpan,style:{width:e.getSize(),maxWidth:e.getSize(),...h(e.column)},children:(0,f.jsx)(v,{header:e})},e.id)})},e.id))}),(0,f.jsx)(s.TableBody,{className:t.cn(n&&`h-36`,e.getRowModel().rows?.length===0&&`h-48`),children:n?(0,f.jsx)(s.TableRow,{className:`absolute top-9 flex h-36 w-full items-center justify-center`,children:(0,f.jsx)(s.TableCell,{children:`loading...`})}):(0,f.jsx)(d.default.Fragment,{children:e.getRowModel().rows?.length?e.getRowModel().rows.map(e=>(0,f.jsx)(s.TableRow,{"data-state":e.getIsSelected()&&`selected`,className:`cursor-pointer border-none focus:outline-none`,onClick:()=>r?.(e?.id||e.original?.id?.toString()||e.original?.uuid||void 0),children:e.getVisibleCells().map(e=>{let{column:n}=e,r=n.getIsPinned(),i=r===`left`&&n.getIsLastColumn(`left`),a=r===`right`&&n.getIsFirstColumn(`right`);return(0,f.jsx)(s.TableCell,{style:{...h(n),width:e.column.getSize(),maxWidth:e.column.getSize()},"data-pinned":r||void 0,"data-last-col":i?`left`:a?`right`:void 0,className:t.cn(`overflow-hidden py-2.5`,`[&[data-pinned][data-last-col]]:border-border`,`[&[data-pinned=left][data-last-col=left]]:border-r`,`[&[data-pinned=right][data-last-col=right]]:border-l`,`data-pinned:bg-background/90`),children:(0,m.flexRender)(e.column.columnDef.cell,e.getContext())},e.id)})},e.id)):(0,f.jsx)(s.TableRow,{className:`absolute top-9 flex h-36 w-full items-center justify-center`,children:(0,f.jsx)(s.TableCell,{children:(0,f.jsxs)(`div`,{className:`text-muted-foreground flex size-full flex-col items-center justify-center gap-y-8 text-base`,children:[(0,f.jsx)(p.PackagePlusIcon,{size:48,strokeWidth:2}),(0,f.jsx)(`p`,{children:`Thêm dữ liệu để hiển thị`})]})})})})})]}),(0,f.jsx)(o.ScrollBar,{orientation:`vertical`,className:`z-10 w-2`}),(0,f.jsx)(o.ScrollBar,{orientation:`horizontal`,className:`absolute right-0 bottom-0 left-0 h-2`})]})};function b({table:e}){"use no memo";return(0,f.jsxs)(`div`,{className:`mt-4 flex w-full flex-0 flex-wrap items-center justify-between gap-y-4 px-2`,children:[(0,f.jsxs)(`div`,{className:`text-muted-foreground flex-1 text-sm`,children:[e.getFilteredSelectedRowModel().rows.length,` of`,` `,e.getFilteredRowModel().rows.length,` row(s) selected.`]}),(0,f.jsxs)(`div`,{className:`flex flex-wrap items-center space-x-6 gap-y-4 lg:space-x-8`,children:[(0,f.jsxs)(`div`,{className:`flex items-center space-x-2`,children:[(0,f.jsx)(`p`,{className:`text-sm font-medium`,children:`Rows per page`}),(0,f.jsxs)(i.Select,{value:`${e.getState().pagination.pageSize}`,onValueChange:t=>{e.setPageSize(Number(t))},children:[(0,f.jsx)(i.SelectTrigger,{className:`h-8 w-[70px]`,children:(0,f.jsx)(i.SelectValue,{placeholder:e.getState().pagination.pageSize})}),(0,f.jsx)(i.SelectContent,{side:`top`,children:[10,20,30,40,50].map(e=>(0,f.jsx)(i.SelectItem,{value:`${e}`,children:e},e))})]})]}),(0,f.jsxs)(`div`,{className:`flex w-25 items-center justify-center text-sm font-medium`,children:[`Page `,e.getState().pagination.pageIndex+1,` of`,` `,e.getPageCount()]}),(0,f.jsxs)(`div`,{className:`flex items-center space-x-2 *:size-9 *:p-0`,children:[(0,f.jsxs)(r.Button,{variant:`outline`,className:`lg:flex`,onClick:()=>e.setPageIndex(0),disabled:!e.getCanPreviousPage(),children:[(0,f.jsx)(`span`,{className:`sr-only`,children:`Go to first page`}),(0,f.jsx)(p.ChevronsLeft,{})]}),(0,f.jsxs)(r.Button,{variant:`outline`,onClick:()=>e.previousPage(),disabled:!e.getCanPreviousPage(),children:[(0,f.jsx)(`span`,{className:`sr-only`,children:`Go to previous page`}),(0,f.jsx)(p.ChevronLeft,{})]}),(0,f.jsxs)(r.Button,{type:`button`,variant:`outline`,onClick:()=>e.nextPage(),disabled:!e.getCanNextPage(),children:[(0,f.jsx)(`span`,{className:`sr-only`,children:`Go to next page`}),(0,f.jsx)(p.ChevronRight,{})]}),(0,f.jsxs)(r.Button,{variant:`outline`,className:`lg:flex`,onClick:()=>{e.setPageIndex(e.getPageCount()-1)},disabled:!e.getCanNextPage(),children:[(0,f.jsx)(`span`,{className:`sr-only`,children:`Go to last page`}),(0,f.jsx)(p.ChevronsRight,{})]})]})]})]})}function x({data:e,totalCount:t,isLoading:r,columns:i,pagination:a,onAdd:o,onRefresh:s,onClickRow:p,onPaginationChange:h}){"use no memo";let[g,_]=d.default.useState({}),[v,x]=d.default.useState([]),[S,C]=d.default.useState([]),[w,T]=d.default.useState({}),E=d.default.useMemo(()=>({columnPinning:{right:[`actions`,`update`,`delete`]},pagination:{pageIndex:0,pageSize:20}}),[]),D=(0,m.useReactTable)({initialState:E,data:e,columns:i,rowCount:t,columnResizeMode:`onChange`,manualPagination:!0,enableColumnResizing:!1,enableMultiRowSelection:!1,getCoreRowModel:(0,m.getCoreRowModel)(),getPaginationRowModel:(0,m.getPaginationRowModel)(),getSortedRowModel:(0,m.getSortedRowModel)(),getFilteredRowModel:(0,m.getFilteredRowModel)(),getFacetedRowModel:(0,m.getFacetedRowModel)(),getFacetedUniqueValues:(0,m.getFacetedUniqueValues)(),getRowId:e=>e.id||e.uuid,state:{rowSelection:g,sorting:v,columnVisibility:w,columnFilters:S,...a?{pagination:a}:{}},onRowSelectionChange:_,onSortingChange:x,onColumnVisibilityChange:T,onColumnFiltersChange:C,...h?{onPaginationChange:h}:{}});return(0,f.jsxs)(n.Flex,{vertical:!0,wrap:!1,gap:`sm`,align:`start`,className:`size-full overflow-y-auto pt-1`,children:[(0,f.jsxs)(n.Flex,{justify:`between`,padding:`none`,width:`full`,className:`flex-0`,children:[(0,f.jsx)(u.SearchInput,{placeholder:`Search...`}),(0,f.jsxs)(n.Flex,{className:`px-0`,children:[o&&(0,f.jsx)(c.AddNewBtn,{onClick:o}),(0,f.jsx)(l.RefreshBtn,{onClick:s})]})]}),(0,f.jsxs)(n.Flex,{padding:`none`,vertical:!0,wrap:!1,width:`full`,className:`flex-1 overflow-auto`,children:[(0,f.jsx)(y,{table:D,isLoading:r,onClickRow:p}),(0,f.jsx)(b,{table:D})]})]})}exports.Table=x;
2
2
  //# sourceMappingURL=index.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs","names":["ChevronUp","ChevronDown","Button","PinOffIcon","DropdownMenu","DropdownMenuTrigger","EllipsisIcon","DropdownMenuContent","DropdownMenuItem","ArrowLeftToLineIcon","ArrowRightToLineIcon","cn","ScrollArea","Table","TableHeader","TableRow","TableHead","TableBody","TableCell","React","PackagePlusIcon","ScrollBar","Select","SelectTrigger","SelectValue","SelectContent","SelectItem","Button","ChevronsLeft","ChevronLeft","ChevronRight","ChevronsRight","React","Flex","SearchInput","AddNewBtn","RefreshBtn"],"sources":["../../packages/components/table/data-table.tsx","../../packages/components/table/data-table-pagination.tsx","../../packages/components/table/index.tsx"],"sourcesContent":["import React, { type CSSProperties } from \"react\";\nimport {\n type Column,\n flexRender,\n type Header,\n type Table as ReactTable,\n} from \"@tanstack/react-table\";\nimport {\n ArrowLeftToLineIcon,\n ArrowRightToLineIcon,\n ChevronDown,\n ChevronUp,\n EllipsisIcon,\n PackagePlusIcon,\n PinOffIcon,\n} from \"lucide-react\";\n\nimport { cn } from \"@/lib/utils\";\nimport type { AnyEntity } from \"@/types\";\n\nimport { Button } from \"../ui/button\";\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuTrigger,\n} from \"../ui/dropdown-menu\";\nimport { ScrollArea, ScrollBar } from \"../ui/scroll-area\";\nimport {\n Table,\n TableBody,\n TableCell,\n TableHead,\n TableHeader,\n TableRow,\n} from \"../ui/table\";\n\n// Helper function to compute pinning styles for columns\nconst getPinningStyles = (column: Column<AnyEntity>): CSSProperties => {\n const isPinned = column.getIsPinned();\n return {\n left: isPinned === \"left\" ? `${column.getStart(\"left\")}px` : undefined,\n right: isPinned === \"right\" ? `${column.getAfter(\"right\")}px` : undefined,\n position: isPinned ? \"sticky\" : \"relative\",\n width: column.getSize(),\n zIndex: isPinned ? 1 : 0,\n };\n};\n\nconst SortingIndicator = ({ column }: { column: Column<AnyEntity> }) => {\n const sortDirection = column.getIsSorted();\n\n const icons = {\n asc: (\n <ChevronUp\n className=\"shrink-0 opacity-60\"\n size={16}\n strokeWidth={2}\n aria-hidden=\"true\"\n />\n ),\n desc: (\n <ChevronDown\n className=\"shrink-0 opacity-60\"\n size={16}\n strokeWidth={2}\n aria-hidden=\"true\"\n />\n ),\n };\n\n return sortDirection ? icons[sortDirection] : null;\n};\n\nconst PinControls = ({ column }: { column: Column<AnyEntity> }) => {\n const columnHeader = column.columnDef.header as string;\n\n if (!column.getCanPin()) return null;\n\n if (column.getIsPinned()) {\n return (\n <Button\n size=\"icon\"\n variant=\"ghost\"\n className=\"hover:[&_svg]:text-secondary-foreground -mr-1 size-7 shadow-none\"\n aria-label={`Unpin ${columnHeader} column`}\n title={`Unpin ${columnHeader} column`}\n onClick={() => column.pin(false)}\n >\n <PinOffIcon className=\"opacity-60\" size={16} aria-hidden=\"true\" />\n </Button>\n );\n }\n\n return (\n <DropdownMenu>\n <DropdownMenuTrigger asChild>\n <Button\n size=\"icon\"\n variant=\"ghost\"\n className=\"-mr-1 size-7 shadow-none\"\n aria-label={`Pin options for ${columnHeader} column`}\n title={`Pin options for ${columnHeader} column`}\n >\n <EllipsisIcon className=\"opacity-60\" size={16} aria-hidden=\"true\" />\n </Button>\n </DropdownMenuTrigger>\n <DropdownMenuContent align=\"end\">\n <DropdownMenuItem onClick={() => column.pin(\"left\")}>\n <ArrowLeftToLineIcon\n size={16}\n className=\"opacity-60\"\n aria-hidden=\"true\"\n />\n Stick to left\n </DropdownMenuItem>\n <DropdownMenuItem onClick={() => column.pin(\"right\")}>\n <ArrowRightToLineIcon\n size={16}\n className=\"opacity-60\"\n aria-hidden=\"true\"\n />\n Stick to right\n </DropdownMenuItem>\n </DropdownMenuContent>\n </DropdownMenu>\n );\n};\n\nconst HeaderContent = ({ header }: { header: Header<AnyEntity, unknown> }) => {\n const { column } = header;\n\n const handleSort = (e: React.KeyboardEvent) => {\n if (column.getCanSort() && (e.key === \"Enter\" || e.key === \" \")) {\n e.preventDefault();\n column.getToggleSortingHandler()?.(e);\n }\n };\n\n return (\n <div className=\"flex items-center justify-between gap-2 truncate\">\n {!header.isPlaceholder && (\n <div\n className={cn(\n column.getCanSort() &&\n \"flex h-full cursor-pointer items-center justify-between gap-2 select-none\",\n )}\n onClick={column.getToggleSortingHandler()}\n onKeyDown={handleSort}\n tabIndex={column.getCanSort() ? 0 : undefined}\n >\n <span className=\"truncate\">\n {flexRender(column.columnDef.header, header.getContext())}\n </span>\n <SortingIndicator column={column} />\n </div>\n )}\n {!header.isPlaceholder && <PinControls column={column} />}\n </div>\n );\n};\n\ninterface DataTableProps {\n table: ReactTable<AnyEntity>;\n columnsLength?: number;\n isLoading?: boolean;\n onClickRow?: (id: string) => void;\n}\n\nexport const DataTable = ({ table, isLoading, onClickRow }: DataTableProps) => {\n \"use no memo\";\n return (\n <ScrollArea className=\"border-border bg-background relative w-full overflow-auto rounded-lg border\">\n <Table\n className={cn(\n \"!w-full\",\n \"[&_td]:border-border\",\n \"[&_th]:border-border\",\n \"table-fixed border-separate border-spacing-0\",\n \"[&_tfoot_td]:border-t\",\n \"[&_th]:border-b\",\n \"[&_tr]:border-none\",\n \"[&_tr:not(:last-child)_td]:border-b\",\n )}\n style={{\n width: table.getTotalSize(),\n }}\n >\n <TableHeader className=\"bg-muted/50 sticky top-0 z-10 backdrop-blur-xs\">\n {table.getHeaderGroups().map((headerGroup) => (\n <TableRow key={headerGroup.id} className=\"bg-muted/50\">\n {headerGroup.headers.map((header) => {\n const { column } = header;\n const isPinned = column.getIsPinned();\n const isLastLeftPinned =\n isPinned === \"left\" && column.getIsLastColumn(\"left\");\n const isFirstRightPinned =\n isPinned === \"right\" && column.getIsFirstColumn(\"right\");\n return (\n <TableHead\n key={header.id}\n data-pinned={isPinned || undefined}\n data-last-col={\n isLastLeftPinned\n ? \"left\"\n : isFirstRightPinned\n ? \"right\"\n : undefined\n }\n className={cn(\n \"text-accent-foreground/60 relative h-9 border-r font-semibold select-none\",\n \"data-pinned:backdrop-blur-xs\",\n \"data-pinned:bg-muted/90\",\n \"[&>.cursor-col-resize]:last:opacity-0\",\n \"[&[data-pinned][data-last-col]]:border-border\",\n \"[&:not([data-pinned]):has(+[data-pinned])_div.cursor-col-resize:last-child]:opacity-0\",\n \"[&[data-last-col=left]_div.cursor-col-resize:last-child]:opacity-0\",\n \"[&[data-pinned=left][data-last-col=left]]:border-r\",\n \"[&[data-pinned=right]:last-child_div.cursor-col-resize:last-child]:opacity-0\",\n \"[&[data-pinned=right][data-last-col=right]]:border-l\",\n )}\n {...{\n colSpan: header.colSpan,\n style: {\n width: header.getSize(),\n maxWidth: header.getSize(),\n ...getPinningStyles(header.column),\n },\n }}\n >\n <HeaderContent header={header} />\n </TableHead>\n );\n })}\n </TableRow>\n ))}\n </TableHeader>\n\n <TableBody\n className={cn(\n isLoading && \"h-36\",\n table.getRowModel().rows?.length === 0 && \"h-48\",\n )}\n >\n {isLoading ? (\n <TableRow className=\"absolute top-9 flex h-36 w-full items-center justify-center\">\n <TableCell>loading...</TableCell>\n </TableRow>\n ) : (\n <React.Fragment>\n {table.getRowModel().rows?.length ? (\n table.getRowModel().rows.map((row) => (\n <TableRow\n key={row.id}\n data-state={row.getIsSelected() && \"selected\"}\n className=\"cursor-pointer border-none focus:outline-none\"\n onClick={() =>\n onClickRow?.(\n row?.id ||\n row.original?.id?.toString() ||\n row.original?.uuid ||\n undefined,\n )\n }\n >\n {row.getVisibleCells().map((cell) => {\n const { column } = cell;\n const isPinned = column.getIsPinned();\n const isLastLeftPinned =\n isPinned === \"left\" && column.getIsLastColumn(\"left\");\n const isFirstRightPinned =\n isPinned === \"right\" &&\n column.getIsFirstColumn(\"right\");\n return (\n <TableCell\n key={cell.id}\n style={{\n ...getPinningStyles(column),\n width: cell.column.getSize(),\n maxWidth: cell.column.getSize(),\n }}\n data-pinned={isPinned || undefined}\n data-last-col={\n isLastLeftPinned\n ? \"left\"\n : isFirstRightPinned\n ? \"right\"\n : undefined\n }\n className={cn(\n \"overflow-hidden py-2.5\",\n \"[&[data-pinned][data-last-col]]:border-border\",\n \"[&[data-pinned=left][data-last-col=left]]:border-r\",\n \"[&[data-pinned=right][data-last-col=right]]:border-l\",\n \"data-pinned:bg-background/90\",\n )}\n >\n {flexRender(\n cell.column.columnDef.cell,\n cell.getContext(),\n )}\n </TableCell>\n );\n })}\n </TableRow>\n ))\n ) : (\n <TableRow className=\"absolute top-9 flex h-36 w-full items-center justify-center\">\n <TableCell>\n <div className=\"text-muted-foreground flex size-full flex-col items-center justify-center gap-y-8 text-base\">\n <PackagePlusIcon size={48} strokeWidth={2} />\n <p>Thêm dữ liệu để hiển thị</p>\n </div>\n </TableCell>\n </TableRow>\n )}\n </React.Fragment>\n )}\n </TableBody>\n </Table>\n <ScrollBar orientation=\"vertical\" className=\"z-10 w-2\" />\n <ScrollBar\n orientation=\"horizontal\"\n className=\"absolute right-0 bottom-0 left-0 h-2\"\n />\n </ScrollArea>\n );\n};\n","import { type Table } from \"@tanstack/react-table\";\nimport {\n ChevronLeft,\n ChevronRight,\n ChevronsLeft,\n ChevronsRight,\n} from \"lucide-react\";\n\nimport { Button } from \"@/components/ui/button\";\nimport {\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from \"@/components/ui/select\";\n\ninterface DataTablePaginationProps<TData> {\n table: Table<TData>;\n}\n\nexport function DataTablePagination<TData>({\n table,\n}: DataTablePaginationProps<TData>) {\n \"use no memo\";\n return (\n <div className=\"mt-4 flex w-full flex-0 flex-wrap items-center justify-between gap-y-4 px-2\">\n <div className=\"text-muted-foreground flex-1 text-sm\">\n {table.getFilteredSelectedRowModel().rows.length} of{\" \"}\n {table.getFilteredRowModel().rows.length} row(s) selected.\n </div>\n <div className=\"flex flex-wrap items-center space-x-6 gap-y-4 lg:space-x-8\">\n <div className=\"flex items-center space-x-2\">\n <p className=\"text-sm font-medium\">Rows per page</p>\n <Select\n value={`${table.getState().pagination.pageSize}`}\n onValueChange={(value) => {\n table.setPageSize(Number(value));\n }}\n >\n <SelectTrigger className=\"h-8 w-[70px]\">\n <SelectValue placeholder={table.getState().pagination.pageSize} />\n </SelectTrigger>\n <SelectContent side=\"top\">\n {[10, 20, 30, 40, 50].map((pageSize) => (\n <SelectItem key={pageSize} value={`${pageSize}`}>\n {pageSize}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n </div>\n <div className=\"flex w-25 items-center justify-center text-sm font-medium\">\n Page {table.getState().pagination.pageIndex + 1} of{\" \"}\n {table.getPageCount()}\n </div>\n <div className=\"flex items-center space-x-2 *:size-9 *:p-0\">\n <Button\n variant=\"outline\"\n className=\"lg:flex\"\n onClick={() => table.setPageIndex(0)}\n disabled={!table.getCanPreviousPage()}\n >\n <span className=\"sr-only\">Go to first page</span>\n <ChevronsLeft />\n </Button>\n <Button\n variant=\"outline\"\n onClick={() => table.previousPage()}\n disabled={!table.getCanPreviousPage()}\n >\n <span className=\"sr-only\">Go to previous page</span>\n <ChevronLeft />\n </Button>\n <Button\n type=\"button\"\n variant=\"outline\"\n onClick={() => table.nextPage()}\n disabled={!table.getCanNextPage()}\n >\n <span className=\"sr-only\">Go to next page</span>\n <ChevronRight />\n </Button>\n <Button\n variant=\"outline\"\n className=\"lg:flex\"\n onClick={() => {\n table.setPageIndex(table.getPageCount() - 1);\n }}\n disabled={!table.getCanNextPage()}\n >\n <span className=\"sr-only\">Go to last page</span>\n <ChevronsRight />\n </Button>\n </div>\n </div>\n </div>\n );\n}\n","import React from \"react\";\nimport {\n type ColumnDef,\n type ColumnFiltersState,\n getCoreRowModel,\n getFacetedRowModel,\n getFacetedUniqueValues,\n getFilteredRowModel,\n getPaginationRowModel,\n getSortedRowModel,\n type PaginationState,\n type RowSelectionState,\n type SortingState,\n useReactTable,\n type VisibilityState,\n} from \"@tanstack/react-table\";\n\nimport { DataTable } from \"./data-table\";\nimport { DataTablePagination } from \"./data-table-pagination\";\nimport { Flex } from \"../layouts/flex\";\nimport { AddNewBtn } from \"../ui/buttons/add-new\";\nimport { RefreshBtn } from \"../ui/buttons/refresh\";\nimport { SearchInput } from \"../ui/inputs/search-input\";\n\ntype Props<T> = {\n data: T[];\n totalCount?: number;\n isLoading?: boolean;\n columns: ColumnDef<T>[];\n pagination?: PaginationState;\n onAdd?: () => void;\n onRefresh?: () => void;\n onClickRow?: (id: string) => void;\n onPaginationChange?: React.Dispatch<React.SetStateAction<PaginationState>>;\n};\nexport function Table<T extends Record<string, unknown>>({\n data,\n totalCount,\n isLoading,\n columns,\n pagination,\n onAdd,\n onRefresh,\n onClickRow,\n onPaginationChange,\n}: Props<T>) {\n \"use no memo\";\n\n const [rowSelection, setRowSelection] = React.useState<RowSelectionState>({});\n const [sorting, setSorting] = React.useState<SortingState>([]);\n const [columnFilters, setColumnFilters] = React.useState<ColumnFiltersState>(\n [],\n );\n const [columnVisibility, setColumnVisibility] =\n React.useState<VisibilityState>({});\n\n const initialState = React.useMemo(\n () => ({\n columnPinning: { right: [\"actions\", \"update\", \"delete\"] },\n pagination: { pageIndex: 0, pageSize: 20 },\n }),\n [],\n );\n\n const table = useReactTable<T>({\n initialState,\n data,\n columns,\n rowCount: totalCount,\n columnResizeMode: \"onChange\",\n manualPagination: true,\n enableColumnResizing: false,\n enableMultiRowSelection: false,\n getCoreRowModel: getCoreRowModel(),\n getPaginationRowModel: getPaginationRowModel(),\n getSortedRowModel: getSortedRowModel(),\n getFilteredRowModel: getFilteredRowModel(),\n getFacetedRowModel: getFacetedRowModel(),\n getFacetedUniqueValues: getFacetedUniqueValues(),\n getRowId: (row) => (row.id as string) || (row.uuid as string),\n state: {\n rowSelection,\n sorting,\n columnVisibility,\n columnFilters,\n ...(pagination ? { pagination } : {}),\n },\n onRowSelectionChange: setRowSelection,\n onSortingChange: setSorting,\n onColumnVisibilityChange: setColumnVisibility,\n onColumnFiltersChange: setColumnFilters,\n ...(onPaginationChange ? { onPaginationChange } : {}),\n });\n\n return (\n <Flex\n vertical\n wrap={false}\n gap=\"sm\"\n align=\"start\"\n className=\"size-full overflow-y-auto pt-1\"\n >\n <Flex justify=\"between\" padding=\"none\" width=\"full\" className=\"flex-0\">\n <SearchInput placeholder=\"Search...\" />\n <Flex className=\"px-0\">\n {onAdd && <AddNewBtn onClick={onAdd} />}\n <RefreshBtn onClick={onRefresh} />\n </Flex>\n </Flex>\n <Flex\n padding=\"none\"\n vertical\n wrap={false}\n width=\"full\"\n className=\"flex-1 overflow-auto\"\n >\n <DataTable\n table={table}\n isLoading={isLoading}\n onClickRow={onClickRow}\n />\n <DataTablePagination<T> table={table} />\n </Flex>\n </Flex>\n );\n}\n"],"mappings":"8oBAsCM,EAAoB,GAA6C,CACrE,IAAM,EAAW,EAAO,cACxB,MAAO,CACL,KAAM,IAAa,OAAS,GAAG,EAAO,SAAS,QAAQ,IAAM,IAAA,GAC7D,MAAO,IAAa,QAAU,GAAG,EAAO,SAAS,SAAS,IAAM,IAAA,GAChE,SAAU,EAAW,SAAW,WAChC,MAAO,EAAO,UACd,OAAQ,EAAW,EAAI,EACxB,AACF,EAEK,GAAoB,CAAE,SAAuC,GAAK,CACtE,IAAM,EAAgB,EAAO,cAEvB,EAAQ,CACZ,KACE,EAAA,EAAA,KAACA,EAAAA,UAAAA,CACC,UAAU,sBACV,KAAM,GACN,YAAa,EACb,cAAY,SAGhB,MACE,EAAA,EAAA,KAACC,EAAAA,YAAAA,CACC,UAAU,sBACV,KAAM,GACN,YAAa,EACb,cAAY,SAGjB,CAED,OAAO,EAAgB,EAAM,GAAiB,IAC/C,EAEK,GAAe,CAAE,SAAuC,GAAK,CACjE,IAAM,EAAe,EAAO,UAAU,OAmBtC,OAjBK,EAAO,YAER,EAAO,eAEP,EAAA,EAAA,KAAC0B,EAAAA,OAAAA,CACC,KAAK,OACL,QAAQ,QACR,UAAU,mEACV,aAAY,SAAS,EAAa,SAClC,MAAO,SAAS,EAAa,SAC7B,YAAe,EAAO,IAAI,cAE1B,EAAA,EAAA,KAACxB,EAAAA,WAAAA,CAAW,UAAU,aAAa,KAAM,GAAI,cAAY,YAM7D,EAAA,EAAA,MAACC,EAAAA,aAAAA,CAAAA,SAAAA,EACC,EAAA,EAAA,KAACC,EAAAA,oBAAAA,CAAoB,QAAA,aACnB,EAAA,EAAA,KAACsB,EAAAA,OAAAA,CACC,KAAK,OACL,QAAQ,QACR,UAAU,2BACV,aAAY,mBAAmB,EAAa,SAC5C,MAAO,mBAAmB,EAAa,mBAEvC,EAAA,EAAA,KAACrB,EAAAA,aAAAA,CAAa,UAAU,aAAa,KAAM,GAAI,cAAY,cAG/D,EAAA,EAAA,MAACC,EAAAA,oBAAAA,CAAoB,MAAM,iBACzB,EAAA,EAAA,MAACC,EAAAA,iBAAAA,CAAiB,YAAe,EAAO,IAAI,mBAC1C,EAAA,EAAA,KAACC,EAAAA,oBAAAA,CACC,KAAM,GACN,UAAU,aACV,cAAY,SACZ,gBAAA,IAGJ,EAAA,EAAA,MAACD,EAAAA,iBAAAA,CAAiB,YAAe,EAAO,IAAI,oBAC1C,EAAA,EAAA,KAACE,EAAAA,qBAAAA,CACC,KAAM,GACN,UAAU,aACV,cAAY,SACZ,iBAAA,SA5CsB,IAkDjC,EAEK,GAAiB,CAAE,SAAgD,GAAK,CAC5E,GAAM,CAAE,SAAQ,CAAG,EAEb,EAAc,GAA2B,CACzC,EAAO,eAAiB,EAAE,MAAQ,SAAW,EAAE,MAAQ,OACzD,EAAE,iBACF,EAAO,4BAA4B,GAEtC,EAED,OACE,EAAA,EAAA,MAAC,MAAA,CAAI,UAAU,6DACZ,CAAC,EAAO,gBACP,EAAA,EAAA,MAAC,MAAA,CACC,UAAWC,EAAAA,GACT,EAAO,cACL,6EAEJ,QAAS,EAAO,0BAChB,UAAW,EACX,SAAU,EAAO,aAAe,EAAI,IAAA,cAEpC,EAAA,EAAA,KAAC,OAAA,CAAK,UAAU,qCACF,EAAO,UAAU,OAAQ,EAAO,iBAE9C,EAAA,EAAA,KAAC,EAAA,CAAyB,SAAA,EAAA,GAG7B,CAAC,EAAO,gBAAiB,EAAA,EAAA,KAAC,EAAA,CAAoB,SAAA,EAAA,EAGpD,EASY,GAAa,CAAE,QAAO,YAAW,aAA4B,GAAK,CAC7E,cACA,OACE,EAAA,EAAA,MAACC,EAAAA,WAAAA,CAAW,UAAU,yFACpB,EAAA,EAAA,MAACC,EAAAA,MAAAA,CACC,UAAWF,EAAAA,GACT,UACA,uBACA,uBACA,+CACA,wBACA,kBACA,qBACA,uCAEF,MAAO,CACL,MAAO,EAAM,eACd,YAED,EAAA,EAAA,KAACG,EAAAA,YAAAA,CAAY,UAAU,0DACpB,EAAM,kBAAkB,IAAK,IAC5B,EAAA,EAAA,KAACC,EAAAA,SAAAA,CAA8B,UAAU,uBACtC,EAAY,QAAQ,IAAK,GAAW,CACnC,GAAM,CAAE,SAAQ,CAAG,EACb,EAAW,EAAO,cAClB,EACJ,IAAa,QAAU,EAAO,gBAAgB,QAC1C,EACJ,IAAa,SAAW,EAAO,iBAAiB,SAClD,OACE,EAAA,EAAA,KAACC,EAAAA,UAAAA,CAEC,cAAa,GAAY,IAAA,GACzB,gBACE,EACI,OACA,EACE,QACA,IAAA,GAER,UAAWL,EAAAA,GACT,4EACA,+BACA,0BACA,wCACA,gDACA,wFACA,qEACA,qDACA,+EACA,wDAGA,QAAS,EAAO,QAChB,MAAO,CACL,MAAO,EAAO,UACd,SAAU,EAAO,UACjB,GAAG,EAAiB,EAAO,QAC5B,WAGH,EAAA,EAAA,KAAC,EAAA,CAAsB,SAAA,GA9BlB,EAAO,GAiCjB,IA3CY,EAAY,QAgD/B,EAAA,EAAA,KAACM,EAAAA,UAAAA,CACC,UAAWN,EAAAA,GACT,GAAa,OACb,EAAM,cAAc,MAAM,SAAW,GAAK,iBAG3C,GACC,EAAA,EAAA,KAACI,EAAAA,SAAAA,CAAS,UAAU,wEAClB,EAAA,EAAA,KAACG,EAAAA,UAAAA,CAAAA,SAAU,aAAA,KAGb,EAAA,EAAA,KAACc,EAAAA,QAAM,SAAA,CAAA,SACJ,EAAM,cAAc,MAAM,OACzB,EAAM,cAAc,KAAK,IAAK,IAC5B,EAAA,EAAA,KAACjB,EAAAA,SAAAA,CAEC,aAAY,EAAI,iBAAmB,WACnC,UAAU,gDACV,YACE,IACE,GAAK,IACH,EAAI,UAAU,IAAI,YAClB,EAAI,UAAU,MACd,IAAA,aAIL,EAAI,kBAAkB,IAAK,GAAS,CACnC,GAAM,CAAE,SAAQ,CAAG,EACb,EAAW,EAAO,cAClB,EACJ,IAAa,QAAU,EAAO,gBAAgB,QAC1C,EACJ,IAAa,SACb,EAAO,iBAAiB,SAC1B,OACE,EAAA,EAAA,KAACG,EAAAA,UAAAA,CAEC,MAAO,CACL,GAAG,EAAiB,GACpB,MAAO,EAAK,OAAO,UACnB,SAAU,EAAK,OAAO,UACvB,CACD,cAAa,GAAY,IAAA,GACzB,gBACE,EACI,OACA,EACE,QACA,IAAA,GAER,UAAWP,EAAAA,GACT,yBACA,gDACA,qDACA,uDACA,0DAIA,EAAK,OAAO,UAAU,KACtB,EAAK,eAxBF,EAAK,GA4Bf,IAlDI,EAAI,MAsDb,EAAA,EAAA,KAACI,EAAAA,SAAAA,CAAS,UAAU,wEAClB,EAAA,EAAA,KAACG,EAAAA,UAAAA,CAAAA,UACC,EAAA,EAAA,MAAC,MAAA,CAAI,UAAU,yGACb,EAAA,EAAA,KAACE,EAAAA,gBAAAA,CAAgB,KAAM,GAAI,YAAa,KACxC,EAAA,EAAA,KAAC,IAAA,CAAA,SAAE,2BAAA,EAAA,eASnB,EAAA,EAAA,KAACC,EAAAA,UAAAA,CAAU,YAAY,WAAW,UAAU,cAC5C,EAAA,EAAA,KAACA,EAAAA,UAAAA,CACC,YAAY,aACZ,UAAU,2CAIjB,EClTD,SAAgB,EAA2B,CACzC,QACgC,CAAE,CAClC,cACA,OACE,EAAA,EAAA,MAAC,MAAA,CAAI,UAAU,yFACb,EAAA,EAAA,MAAC,MAAA,CAAI,UAAU,iDACZ,EAAM,8BAA8B,KAAK,OAAO,MAAI,IACpD,EAAM,sBAAsB,KAAK,OAAO,wBAE3C,EAAA,EAAA,MAAC,MAAA,CAAI,UAAU,wEACb,EAAA,EAAA,MAAC,MAAA,CAAI,UAAU,yCACb,EAAA,EAAA,KAAC,IAAA,CAAE,UAAU,+BAAsB,mBACnC,EAAA,EAAA,MAACC,EAAAA,OAAAA,CACC,MAAO,GAAG,EAAM,WAAW,WAAW,WACtC,cAAgB,GAAU,CACxB,EAAM,YAAY,OAAO,GAC1B,aAED,EAAA,EAAA,KAACC,EAAAA,cAAAA,CAAc,UAAU,yBACvB,EAAA,EAAA,KAACC,EAAAA,YAAAA,CAAY,YAAa,EAAM,WAAW,WAAW,SAAA,KAExD,EAAA,EAAA,KAACC,EAAAA,cAAAA,CAAc,KAAK,eACjB,CAAC,GAAI,GAAI,GAAI,GAAI,GAAG,CAAC,IAAK,IACzB,EAAA,EAAA,KAACC,EAAAA,WAAAA,CAA0B,MAAO,GAAG,aAClC,GADc,aAOzB,EAAA,EAAA,MAAC,MAAA,CAAI,UAAU,sEAA4D,QACnE,EAAM,WAAW,WAAW,UAAY,EAAE,MAAI,IACnD,EAAM,mBAET,EAAA,EAAA,MAAC,MAAA,CAAI,UAAU,wDACb,EAAA,EAAA,MAACC,EAAAA,OAAAA,CACC,QAAQ,UACR,UAAU,UACV,YAAe,EAAM,aAAa,GAClC,SAAU,CAAC,EAAM,gCAEjB,EAAA,EAAA,KAAC,OAAA,CAAK,UAAU,mBAAU,sBAC1B,EAAA,EAAA,KAACC,EAAAA,aAAAA,EAAAA,EAAAA,IAEH,EAAA,EAAA,MAACD,EAAAA,OAAAA,CACC,QAAQ,UACR,YAAe,EAAM,eACrB,SAAU,CAAC,EAAM,gCAEjB,EAAA,EAAA,KAAC,OAAA,CAAK,UAAU,mBAAU,yBAC1B,EAAA,EAAA,KAACE,EAAAA,YAAAA,EAAAA,EAAAA,IAEH,EAAA,EAAA,MAACF,EAAAA,OAAAA,CACC,KAAK,SACL,QAAQ,UACR,YAAe,EAAM,WACrB,SAAU,CAAC,EAAM,4BAEjB,EAAA,EAAA,KAAC,OAAA,CAAK,UAAU,mBAAU,qBAC1B,EAAA,EAAA,KAACG,EAAAA,aAAAA,EAAAA,EAAAA,IAEH,EAAA,EAAA,MAACH,EAAAA,OAAAA,CACC,QAAQ,UACR,UAAU,UACV,YAAe,CACb,EAAM,aAAa,EAAM,eAAiB,EAC3C,EACD,SAAU,CAAC,EAAM,4BAEjB,EAAA,EAAA,KAAC,OAAA,CAAK,UAAU,mBAAU,qBAC1B,EAAA,EAAA,KAACI,EAAAA,cAAAA,EAAAA,EAAAA,WAMZ,CC/DD,SAAgB,EAAyC,CACvD,OACA,aACA,YACA,UACA,aACA,QACA,YACA,aACA,qBACS,CAAE,CACX,cAEA,GAAM,CAAC,EAAc,EAAgB,CAAGC,EAAAA,QAAM,SAA4B,EAAE,EACtE,CAAC,EAAS,EAAW,CAAGA,EAAAA,QAAM,SAAuB,EAAE,EACvD,CAAC,EAAe,EAAiB,CAAGA,EAAAA,QAAM,SAC9C,EAAE,EAEE,CAAC,EAAkB,EAAoB,CAC3CA,EAAAA,QAAM,SAA0B,EAAE,EAE9B,EAAeA,EAAAA,QAAM,aAClB,CACL,cAAe,CAAE,MAAO,CAAC,UAAW,SAAU,SAAS,CAAE,CACzD,WAAY,CAAE,UAAW,EAAG,SAAU,GAAI,CAC3C,EACD,EAAE,EAGE,GAAA,EAAA,EAAA,eAAyB,CAC7B,eACA,OACA,UACA,SAAU,EACV,iBAAkB,WAClB,iBAAkB,GAClB,qBAAsB,GACtB,wBAAyB,GACzB,iBAAA,EAAA,EAAA,mBACA,uBAAA,EAAA,EAAA,yBACA,mBAAA,EAAA,EAAA,qBACA,qBAAA,EAAA,EAAA,uBACA,oBAAA,EAAA,EAAA,sBACA,wBAAA,EAAA,EAAA,0BACA,SAAW,GAAS,EAAI,IAAkB,EAAI,KAC9C,MAAO,CACL,eACA,UACA,mBACA,gBACA,GAAI,EAAa,CAAE,aAAY,CAAG,EAAE,CACrC,CACD,qBAAsB,EACtB,gBAAiB,EACjB,yBAA0B,EAC1B,sBAAuB,EACvB,GAAI,EAAqB,CAAE,qBAAoB,CAAG,EAAE,CACrD,EAED,OACE,EAAA,EAAA,MAACC,EAAAA,KAAAA,CACC,SAAA,GACA,KAAM,GACN,IAAI,KACJ,MAAM,QACN,UAAU,4CAEV,EAAA,EAAA,MAACA,EAAAA,KAAAA,CAAK,QAAQ,UAAU,QAAQ,OAAO,MAAM,OAAO,UAAU,oBAC5D,EAAA,EAAA,KAACC,EAAAA,YAAAA,CAAY,YAAY,YAAA,GACzB,EAAA,EAAA,MAACD,EAAAA,KAAAA,CAAK,UAAU,iBACb,IAAS,EAAA,EAAA,KAACE,EAAAA,UAAAA,CAAU,QAAS,EAAA,GAC9B,EAAA,EAAA,KAACC,EAAAA,WAAAA,CAAW,QAAS,EAAA,EAAA,OAGzB,EAAA,EAAA,MAACH,EAAAA,KAAAA,CACC,QAAQ,OACR,SAAA,GACA,KAAM,GACN,MAAM,OACN,UAAU,kCAEV,EAAA,EAAA,KAAC,EAAA,CACQ,QACI,YACC,gBAEd,EAAA,EAAA,KAAC,EAAA,CAA8B,QAAA,EAAA,KAItC"}
1
+ {"version":3,"file":"index.cjs","names":["ChevronUp","ChevronDown","Button","PinOffIcon","DropdownMenu","DropdownMenuTrigger","EllipsisIcon","DropdownMenuContent","DropdownMenuItem","ArrowLeftToLineIcon","ArrowRightToLineIcon","cn","ScrollArea","Table","TableHeader","TableRow","TableHead","TableBody","TableCell","React","PackagePlusIcon","ScrollBar","Select","SelectTrigger","SelectValue","SelectContent","SelectItem","Button","ChevronsLeft","ChevronLeft","ChevronRight","ChevronsRight","React","Flex","SearchInput","AddNewBtn","RefreshBtn"],"sources":["../../packages/components/table/data-table.tsx","../../packages/components/table/data-table-pagination.tsx","../../packages/components/table/index.tsx"],"sourcesContent":["import React, { type CSSProperties } from \"react\";\nimport {\n type Column,\n flexRender,\n type Header,\n type Table as ReactTable,\n} from \"@tanstack/react-table\";\nimport {\n ArrowLeftToLineIcon,\n ArrowRightToLineIcon,\n ChevronDown,\n ChevronUp,\n EllipsisIcon,\n PackagePlusIcon,\n PinOffIcon,\n} from \"lucide-react\";\n\nimport { cn } from \"@/lib/utils\";\nimport type { AnyEntity } from \"@/types\";\n\nimport { Button } from \"../ui/button\";\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuTrigger,\n} from \"../ui/dropdown-menu\";\nimport { ScrollArea, ScrollBar } from \"../ui/scroll-area\";\nimport {\n Table,\n TableBody,\n TableCell,\n TableHead,\n TableHeader,\n TableRow,\n} from \"../ui/table\";\n\n// Helper function to compute pinning styles for columns\nconst getPinningStyles = (column: Column<AnyEntity>): CSSProperties => {\n const isPinned = column.getIsPinned();\n return {\n left: isPinned === \"left\" ? `${column.getStart(\"left\")}px` : undefined,\n right: isPinned === \"right\" ? `${column.getAfter(\"right\")}px` : undefined,\n position: isPinned ? \"sticky\" : \"relative\",\n width: column.getSize(),\n zIndex: isPinned ? 1 : 0,\n };\n};\n\nconst SortingIndicator = ({ column }: { column: Column<AnyEntity> }) => {\n const sortDirection = column.getIsSorted();\n\n const icons = {\n asc: (\n <ChevronUp\n className=\"shrink-0 opacity-60\"\n size={16}\n strokeWidth={2}\n aria-hidden=\"true\"\n />\n ),\n desc: (\n <ChevronDown\n className=\"shrink-0 opacity-60\"\n size={16}\n strokeWidth={2}\n aria-hidden=\"true\"\n />\n ),\n };\n\n return sortDirection ? icons[sortDirection] : null;\n};\n\nconst PinControls = ({ column }: { column: Column<AnyEntity> }) => {\n const columnHeader = column.columnDef.header as string;\n\n if (!column.getCanPin()) return null;\n\n if (column.getIsPinned()) {\n return (\n <Button\n size=\"icon\"\n variant=\"ghost\"\n className=\"hover:[&_svg]:text-secondary-foreground -mr-1 size-7 shadow-none\"\n aria-label={`Unpin ${columnHeader} column`}\n title={`Unpin ${columnHeader} column`}\n onClick={() => column.pin(false)}\n >\n <PinOffIcon className=\"opacity-60\" size={16} aria-hidden=\"true\" />\n </Button>\n );\n }\n\n return (\n <DropdownMenu>\n <DropdownMenuTrigger asChild>\n <Button\n size=\"icon\"\n variant=\"ghost\"\n className=\"-mr-1 size-7 shadow-none\"\n aria-label={`Pin options for ${columnHeader} column`}\n title={`Pin options for ${columnHeader} column`}\n >\n <EllipsisIcon className=\"opacity-60\" size={16} aria-hidden=\"true\" />\n </Button>\n </DropdownMenuTrigger>\n <DropdownMenuContent align=\"end\">\n <DropdownMenuItem onClick={() => column.pin(\"left\")}>\n <ArrowLeftToLineIcon\n size={16}\n className=\"opacity-60\"\n aria-hidden=\"true\"\n />\n Stick to left\n </DropdownMenuItem>\n <DropdownMenuItem onClick={() => column.pin(\"right\")}>\n <ArrowRightToLineIcon\n size={16}\n className=\"opacity-60\"\n aria-hidden=\"true\"\n />\n Stick to right\n </DropdownMenuItem>\n </DropdownMenuContent>\n </DropdownMenu>\n );\n};\n\nconst HeaderContent = ({ header }: { header: Header<AnyEntity, unknown> }) => {\n const { column } = header;\n\n const handleSort = (e: React.KeyboardEvent) => {\n if (column.getCanSort() && (e.key === \"Enter\" || e.key === \" \")) {\n e.preventDefault();\n column.getToggleSortingHandler()?.(e);\n }\n };\n\n return (\n <div className=\"flex items-center justify-between gap-2 truncate\">\n {!header.isPlaceholder && (\n <div\n className={cn(\n column.getCanSort() &&\n \"flex h-full cursor-pointer items-center justify-between gap-2 select-none\",\n )}\n onClick={column.getToggleSortingHandler()}\n onKeyDown={handleSort}\n tabIndex={column.getCanSort() ? 0 : undefined}\n >\n <span className=\"truncate\">\n {flexRender(column.columnDef.header, header.getContext())}\n </span>\n <SortingIndicator column={column} />\n </div>\n )}\n {!header.isPlaceholder && <PinControls column={column} />}\n </div>\n );\n};\n\ninterface DataTableProps {\n table: ReactTable<AnyEntity>;\n columnsLength?: number;\n isLoading?: boolean;\n onClickRow?: (id: string) => void;\n}\n\nexport const DataTable = ({ table, isLoading, onClickRow }: DataTableProps) => {\n \"use no memo\";\n return (\n <ScrollArea className=\"border-border bg-background relative w-full overflow-auto rounded-lg border\">\n <Table\n className={cn(\n \"!w-full\",\n \"[&_td]:border-border\",\n \"[&_th]:border-border\",\n \"table-fixed border-separate border-spacing-0\",\n \"[&_tfoot_td]:border-t\",\n \"[&_th]:border-b\",\n \"[&_tr]:border-none\",\n \"[&_tr:not(:last-child)_td]:border-b\",\n )}\n style={{\n width: table.getTotalSize(),\n }}\n >\n <TableHeader className=\"bg-muted/50 sticky top-0 z-10 backdrop-blur-xs\">\n {table.getHeaderGroups().map((headerGroup) => (\n <TableRow key={headerGroup.id} className=\"bg-muted/50\">\n {headerGroup.headers.map((header) => {\n const { column } = header;\n const isPinned = column.getIsPinned();\n const isLastLeftPinned =\n isPinned === \"left\" && column.getIsLastColumn(\"left\");\n const isFirstRightPinned =\n isPinned === \"right\" && column.getIsFirstColumn(\"right\");\n return (\n <TableHead\n key={header.id}\n data-pinned={isPinned || undefined}\n data-last-col={\n isLastLeftPinned\n ? \"left\"\n : isFirstRightPinned\n ? \"right\"\n : undefined\n }\n className={cn(\n \"text-accent-foreground/60 relative h-9 border-r font-semibold select-none\",\n \"data-pinned:backdrop-blur-xs\",\n \"data-pinned:bg-muted/90\",\n \"[&>.cursor-col-resize]:last:opacity-0\",\n \"[&[data-pinned][data-last-col]]:border-border\",\n \"[&:not([data-pinned]):has(+[data-pinned])_div.cursor-col-resize:last-child]:opacity-0\",\n \"[&[data-last-col=left]_div.cursor-col-resize:last-child]:opacity-0\",\n \"[&[data-pinned=left][data-last-col=left]]:border-r\",\n \"[&[data-pinned=right]:last-child_div.cursor-col-resize:last-child]:opacity-0\",\n \"[&[data-pinned=right][data-last-col=right]]:border-l\",\n )}\n {...{\n colSpan: header.colSpan,\n style: {\n width: header.getSize(),\n maxWidth: header.getSize(),\n ...getPinningStyles(header.column),\n },\n }}\n >\n <HeaderContent header={header} />\n </TableHead>\n );\n })}\n </TableRow>\n ))}\n </TableHeader>\n\n <TableBody\n className={cn(\n isLoading && \"h-36\",\n table.getRowModel().rows?.length === 0 && \"h-48\",\n )}\n >\n {isLoading ? (\n <TableRow className=\"absolute top-9 flex h-36 w-full items-center justify-center\">\n <TableCell>loading...</TableCell>\n </TableRow>\n ) : (\n <React.Fragment>\n {table.getRowModel().rows?.length ? (\n table.getRowModel().rows.map((row) => (\n <TableRow\n key={row.id}\n data-state={row.getIsSelected() && \"selected\"}\n className=\"cursor-pointer border-none focus:outline-none\"\n onClick={() =>\n onClickRow?.(\n row?.id ||\n row.original?.id?.toString() ||\n row.original?.uuid ||\n undefined,\n )\n }\n >\n {row.getVisibleCells().map((cell) => {\n const { column } = cell;\n const isPinned = column.getIsPinned();\n const isLastLeftPinned =\n isPinned === \"left\" && column.getIsLastColumn(\"left\");\n const isFirstRightPinned =\n isPinned === \"right\" &&\n column.getIsFirstColumn(\"right\");\n return (\n <TableCell\n key={cell.id}\n style={{\n ...getPinningStyles(column),\n width: cell.column.getSize(),\n maxWidth: cell.column.getSize(),\n }}\n data-pinned={isPinned || undefined}\n data-last-col={\n isLastLeftPinned\n ? \"left\"\n : isFirstRightPinned\n ? \"right\"\n : undefined\n }\n className={cn(\n \"overflow-hidden py-2.5\",\n \"[&[data-pinned][data-last-col]]:border-border\",\n \"[&[data-pinned=left][data-last-col=left]]:border-r\",\n \"[&[data-pinned=right][data-last-col=right]]:border-l\",\n \"data-pinned:bg-background/90\",\n )}\n >\n {flexRender(\n cell.column.columnDef.cell,\n cell.getContext(),\n )}\n </TableCell>\n );\n })}\n </TableRow>\n ))\n ) : (\n <TableRow className=\"absolute top-9 flex h-36 w-full items-center justify-center\">\n <TableCell>\n <div className=\"text-muted-foreground flex size-full flex-col items-center justify-center gap-y-8 text-base\">\n <PackagePlusIcon size={48} strokeWidth={2} />\n <p>Thêm dữ liệu để hiển thị</p>\n </div>\n </TableCell>\n </TableRow>\n )}\n </React.Fragment>\n )}\n </TableBody>\n </Table>\n <ScrollBar orientation=\"vertical\" className=\"z-10 w-2\" />\n <ScrollBar\n orientation=\"horizontal\"\n className=\"absolute right-0 bottom-0 left-0 h-2\"\n />\n </ScrollArea>\n );\n};\n","import { type Table } from \"@tanstack/react-table\";\nimport {\n ChevronLeft,\n ChevronRight,\n ChevronsLeft,\n ChevronsRight,\n} from \"lucide-react\";\n\nimport { Button } from \"@/components/ui/button\";\nimport {\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from \"@/components/ui/select\";\n\ninterface DataTablePaginationProps<TData> {\n table: Table<TData>;\n}\n\nexport function DataTablePagination<TData>({\n table,\n}: DataTablePaginationProps<TData>) {\n \"use no memo\";\n return (\n <div className=\"mt-4 flex w-full flex-0 flex-wrap items-center justify-between gap-y-4 px-2\">\n <div className=\"text-muted-foreground flex-1 text-sm\">\n {table.getFilteredSelectedRowModel().rows.length} of{\" \"}\n {table.getFilteredRowModel().rows.length} row(s) selected.\n </div>\n <div className=\"flex flex-wrap items-center space-x-6 gap-y-4 lg:space-x-8\">\n <div className=\"flex items-center space-x-2\">\n <p className=\"text-sm font-medium\">Rows per page</p>\n <Select\n value={`${table.getState().pagination.pageSize}`}\n onValueChange={(value) => {\n table.setPageSize(Number(value));\n }}\n >\n <SelectTrigger className=\"h-8 w-[70px]\">\n <SelectValue placeholder={table.getState().pagination.pageSize} />\n </SelectTrigger>\n <SelectContent side=\"top\">\n {[10, 20, 30, 40, 50].map((pageSize) => (\n <SelectItem key={pageSize} value={`${pageSize}`}>\n {pageSize}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n </div>\n <div className=\"flex w-25 items-center justify-center text-sm font-medium\">\n Page {table.getState().pagination.pageIndex + 1} of{\" \"}\n {table.getPageCount()}\n </div>\n <div className=\"flex items-center space-x-2 *:size-9 *:p-0\">\n <Button\n variant=\"outline\"\n className=\"lg:flex\"\n onClick={() => table.setPageIndex(0)}\n disabled={!table.getCanPreviousPage()}\n >\n <span className=\"sr-only\">Go to first page</span>\n <ChevronsLeft />\n </Button>\n <Button\n variant=\"outline\"\n onClick={() => table.previousPage()}\n disabled={!table.getCanPreviousPage()}\n >\n <span className=\"sr-only\">Go to previous page</span>\n <ChevronLeft />\n </Button>\n <Button\n type=\"button\"\n variant=\"outline\"\n onClick={() => table.nextPage()}\n disabled={!table.getCanNextPage()}\n >\n <span className=\"sr-only\">Go to next page</span>\n <ChevronRight />\n </Button>\n <Button\n variant=\"outline\"\n className=\"lg:flex\"\n onClick={() => {\n table.setPageIndex(table.getPageCount() - 1);\n }}\n disabled={!table.getCanNextPage()}\n >\n <span className=\"sr-only\">Go to last page</span>\n <ChevronsRight />\n </Button>\n </div>\n </div>\n </div>\n );\n}\n","import React from \"react\";\nimport {\n type ColumnDef,\n type ColumnFiltersState,\n getCoreRowModel,\n getFacetedRowModel,\n getFacetedUniqueValues,\n getFilteredRowModel,\n getPaginationRowModel,\n getSortedRowModel,\n type PaginationState,\n type RowSelectionState,\n type SortingState,\n useReactTable,\n type VisibilityState,\n} from \"@tanstack/react-table\";\n\nimport { DataTable } from \"./data-table\";\nimport { DataTablePagination } from \"./data-table-pagination\";\nimport { Flex } from \"../layouts/flex\";\nimport { AddNewBtn } from \"../ui/buttons/add-new\";\nimport { RefreshBtn } from \"../ui/buttons/refresh\";\nimport { SearchInput } from \"../ui/inputs/search-input\";\n\ntype Props<T> = {\n data: T[];\n totalCount?: number;\n isLoading?: boolean;\n columns: ColumnDef<T>[];\n pagination?: PaginationState;\n onAdd?: () => void;\n onRefresh?: () => void;\n onClickRow?: (id: string) => void;\n onPaginationChange?: React.Dispatch<React.SetStateAction<PaginationState>>;\n};\nexport function Table<T extends Record<string, unknown>>({\n data,\n totalCount,\n isLoading,\n columns,\n pagination,\n onAdd,\n onRefresh,\n onClickRow,\n onPaginationChange,\n}: Props<T>) {\n \"use no memo\";\n\n const [rowSelection, setRowSelection] = React.useState<RowSelectionState>({});\n const [sorting, setSorting] = React.useState<SortingState>([]);\n const [columnFilters, setColumnFilters] = React.useState<ColumnFiltersState>(\n [],\n );\n const [columnVisibility, setColumnVisibility] =\n React.useState<VisibilityState>({});\n\n const initialState = React.useMemo(\n () => ({\n columnPinning: { right: [\"actions\", \"update\", \"delete\"] },\n pagination: { pageIndex: 0, pageSize: 20 },\n }),\n [],\n );\n\n const table = useReactTable<T>({\n initialState,\n data,\n columns,\n rowCount: totalCount,\n columnResizeMode: \"onChange\",\n manualPagination: true,\n enableColumnResizing: false,\n enableMultiRowSelection: false,\n getCoreRowModel: getCoreRowModel(),\n getPaginationRowModel: getPaginationRowModel(),\n getSortedRowModel: getSortedRowModel(),\n getFilteredRowModel: getFilteredRowModel(),\n getFacetedRowModel: getFacetedRowModel(),\n getFacetedUniqueValues: getFacetedUniqueValues(),\n getRowId: (row) => (row.id as string) || (row.uuid as string),\n state: {\n rowSelection,\n sorting,\n columnVisibility,\n columnFilters,\n ...(pagination ? { pagination } : {}),\n },\n onRowSelectionChange: setRowSelection,\n onSortingChange: setSorting,\n onColumnVisibilityChange: setColumnVisibility,\n onColumnFiltersChange: setColumnFilters,\n ...(onPaginationChange ? { onPaginationChange } : {}),\n });\n\n return (\n <Flex\n vertical\n wrap={false}\n gap=\"sm\"\n align=\"start\"\n className=\"size-full overflow-y-auto pt-1\"\n >\n <Flex justify=\"between\" padding=\"none\" width=\"full\" className=\"flex-0\">\n <SearchInput placeholder=\"Search...\" />\n <Flex className=\"px-0\">\n {onAdd && <AddNewBtn onClick={onAdd} />}\n <RefreshBtn onClick={onRefresh} />\n </Flex>\n </Flex>\n <Flex\n padding=\"none\"\n vertical\n wrap={false}\n width=\"full\"\n className=\"flex-1 overflow-auto\"\n >\n <DataTable\n table={table}\n isLoading={isLoading}\n onClickRow={onClickRow}\n />\n <DataTablePagination<T> table={table} />\n </Flex>\n </Flex>\n );\n}\n"],"mappings":"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"}
@@ -1,3 +1,4 @@
1
+ import * as react_jsx_runtime14 from "react/jsx-runtime";
1
2
  import React from "react";
2
3
  import { ColumnDef, PaginationState } from "@tanstack/react-table";
3
4
 
@@ -23,7 +24,7 @@ declare function Table<T extends Record<string, unknown>>({
23
24
  onRefresh,
24
25
  onClickRow,
25
26
  onPaginationChange
26
- }: Props<T>): any;
27
+ }: Props<T>): react_jsx_runtime14.JSX.Element;
27
28
  //#endregion
28
29
  export { Table };
29
30
  //# sourceMappingURL=index.d.cts.map
@@ -1,4 +1,5 @@
1
1
  import React from "react";
2
+ import * as react_jsx_runtime10 from "react/jsx-runtime";
2
3
  import { ColumnDef, PaginationState } from "@tanstack/react-table";
3
4
 
4
5
  //#region packages/components/table/index.d.ts
@@ -23,7 +24,7 @@ declare function Table<T extends Record<string, unknown>>({
23
24
  onRefresh,
24
25
  onClickRow,
25
26
  onPaginationChange
26
- }: Props<T>): any;
27
+ }: Props<T>): react_jsx_runtime10.JSX.Element;
27
28
  //#endregion
28
29
  export { Table };
29
30
  //# sourceMappingURL=index.d.ts.map
@@ -1,2 +1,2 @@
1
- import{cn as e}from"../utils-D9AH0PUV.js";import{Flex as t}from"../flex-ILvQrYMJ.js";import"../paragraph-Bey03JkA.js";import{Button as n}from"../button-Bku3bKv9.js";import{DropdownMenu as r,DropdownMenuContent as i,DropdownMenuItem as a,DropdownMenuTrigger as o}from"../dropdown-menu-jCQwh2rG.js";import{ScrollArea as s,ScrollBar as c}from"../scroll-area-Bdb_LSFF.js";import{Table as l,TableBody as u,TableCell as d,TableHead as f,TableHeader as p,TableRow as m}from"../table-BvA64mE8.js";import{Select as h,SelectContent as g,SelectItem as _,SelectTrigger as v,SelectValue as y}from"../select-CWUsisI0.js";import{AddNewBtn as b}from"../add-new-BaABbnol.js";import{RefreshBtn as x}from"../refresh-BHt_h3N_.js";import"../input-FzKbxUq2.js";import{SearchInput as S}from"../search-input-L2sq0eB0.js";import C from"react";import{jsx as w,jsxs as T}from"react/jsx-runtime";import{ArrowLeftToLineIcon as E,ArrowRightToLineIcon as D,ChevronDown as O,ChevronLeft as k,ChevronRight as A,ChevronUp as j,ChevronsLeft as M,ChevronsRight as N,EllipsisIcon as P,PackagePlusIcon as F,PinOffIcon as I}from"lucide-react";import{flexRender as L,getCoreRowModel as R,getFacetedRowModel as z,getFacetedUniqueValues as B,getFilteredRowModel as V,getPaginationRowModel as H,getSortedRowModel as U,useReactTable as W}from"@tanstack/react-table";const G=e=>{let t=e.getIsPinned();return{left:t===`left`?`${e.getStart(`left`)}px`:void 0,right:t===`right`?`${e.getAfter(`right`)}px`:void 0,position:t?`sticky`:`relative`,width:e.getSize(),zIndex:t?1:0}},K=({column:e})=>{let t=e.getIsSorted(),n={asc:w(j,{className:`shrink-0 opacity-60`,size:16,strokeWidth:2,"aria-hidden":`true`}),desc:w(O,{className:`shrink-0 opacity-60`,size:16,strokeWidth:2,"aria-hidden":`true`})};return t?n[t]:null},q=({column:e})=>{let t=e.columnDef.header;return e.getCanPin()?e.getIsPinned()?w(n,{size:`icon`,variant:`ghost`,className:`hover:[&_svg]:text-secondary-foreground -mr-1 size-7 shadow-none`,"aria-label":`Unpin ${t} column`,title:`Unpin ${t} column`,onClick:()=>e.pin(!1),children:w(I,{className:`opacity-60`,size:16,"aria-hidden":`true`})}):T(r,{children:[w(o,{asChild:!0,children:w(n,{size:`icon`,variant:`ghost`,className:`-mr-1 size-7 shadow-none`,"aria-label":`Pin options for ${t} column`,title:`Pin options for ${t} column`,children:w(P,{className:`opacity-60`,size:16,"aria-hidden":`true`})})}),T(i,{align:`end`,children:[T(a,{onClick:()=>e.pin(`left`),children:[w(E,{size:16,className:`opacity-60`,"aria-hidden":`true`}),`Stick to left`]}),T(a,{onClick:()=>e.pin(`right`),children:[w(D,{size:16,className:`opacity-60`,"aria-hidden":`true`}),`Stick to right`]})]})]}):null},J=({header:t})=>{let{column:n}=t,r=e=>{n.getCanSort()&&(e.key===`Enter`||e.key===` `)&&(e.preventDefault(),n.getToggleSortingHandler()?.(e))};return T(`div`,{className:`flex items-center justify-between gap-2 truncate`,children:[!t.isPlaceholder&&T(`div`,{className:e(n.getCanSort()&&`flex h-full cursor-pointer items-center justify-between gap-2 select-none`),onClick:n.getToggleSortingHandler(),onKeyDown:r,tabIndex:n.getCanSort()?0:void 0,children:[w(`span`,{className:`truncate`,children:L(n.columnDef.header,t.getContext())}),w(K,{column:n})]}),!t.isPlaceholder&&w(q,{column:n})]})},Y=({table:t,isLoading:n,onClickRow:r})=>{"use no memo";return T(s,{className:`border-border bg-background relative w-full overflow-auto rounded-lg border`,children:[T(l,{className:e(`!w-full`,`[&_td]:border-border`,`[&_th]:border-border`,`table-fixed border-separate border-spacing-0`,`[&_tfoot_td]:border-t`,`[&_th]:border-b`,`[&_tr]:border-none`,`[&_tr:not(:last-child)_td]:border-b`),style:{width:t.getTotalSize()},children:[w(p,{className:`bg-muted/50 sticky top-0 z-10 backdrop-blur-xs`,children:t.getHeaderGroups().map(t=>w(m,{className:`bg-muted/50`,children:t.headers.map(t=>{let{column:n}=t,r=n.getIsPinned(),i=r===`left`&&n.getIsLastColumn(`left`),a=r===`right`&&n.getIsFirstColumn(`right`);return w(f,{"data-pinned":r||void 0,"data-last-col":i?`left`:a?`right`:void 0,className:e(`text-accent-foreground/60 relative h-9 border-r font-semibold select-none`,`data-pinned:backdrop-blur-xs`,`data-pinned:bg-muted/90`,`[&>.cursor-col-resize]:last:opacity-0`,`[&[data-pinned][data-last-col]]:border-border`,`[&:not([data-pinned]):has(+[data-pinned])_div.cursor-col-resize:last-child]:opacity-0`,`[&[data-last-col=left]_div.cursor-col-resize:last-child]:opacity-0`,`[&[data-pinned=left][data-last-col=left]]:border-r`,`[&[data-pinned=right]:last-child_div.cursor-col-resize:last-child]:opacity-0`,`[&[data-pinned=right][data-last-col=right]]:border-l`),colSpan:t.colSpan,style:{width:t.getSize(),maxWidth:t.getSize(),...G(t.column)},children:w(J,{header:t})},t.id)})},t.id))}),w(u,{className:e(n&&`h-36`,t.getRowModel().rows?.length===0&&`h-48`),children:n?w(m,{className:`absolute top-9 flex h-36 w-full items-center justify-center`,children:w(d,{children:`loading...`})}):w(C.Fragment,{children:t.getRowModel().rows?.length?t.getRowModel().rows.map(t=>w(m,{"data-state":t.getIsSelected()&&`selected`,className:`cursor-pointer border-none focus:outline-none`,onClick:()=>r?.(t?.id||t.original?.id?.toString()||t.original?.uuid||void 0),children:t.getVisibleCells().map(t=>{let{column:n}=t,r=n.getIsPinned(),i=r===`left`&&n.getIsLastColumn(`left`),a=r===`right`&&n.getIsFirstColumn(`right`);return w(d,{style:{...G(n),width:t.column.getSize(),maxWidth:t.column.getSize()},"data-pinned":r||void 0,"data-last-col":i?`left`:a?`right`:void 0,className:e(`overflow-hidden py-2.5`,`[&[data-pinned][data-last-col]]:border-border`,`[&[data-pinned=left][data-last-col=left]]:border-r`,`[&[data-pinned=right][data-last-col=right]]:border-l`,`data-pinned:bg-background/90`),children:L(t.column.columnDef.cell,t.getContext())},t.id)})},t.id)):w(m,{className:`absolute top-9 flex h-36 w-full items-center justify-center`,children:w(d,{children:T(`div`,{className:`text-muted-foreground flex size-full flex-col items-center justify-center gap-y-8 text-base`,children:[w(F,{size:48,strokeWidth:2}),w(`p`,{children:`Thêm dữ liệu để hiển thị`})]})})})})})]}),w(c,{orientation:`vertical`,className:`z-10 w-2`}),w(c,{orientation:`horizontal`,className:`absolute right-0 bottom-0 left-0 h-2`})]})};function X({table:e}){"use no memo";return T(`div`,{className:`mt-4 flex w-full flex-0 flex-wrap items-center justify-between gap-y-4 px-2`,children:[T(`div`,{className:`text-muted-foreground flex-1 text-sm`,children:[e.getFilteredSelectedRowModel().rows.length,` of`,` `,e.getFilteredRowModel().rows.length,` row(s) selected.`]}),T(`div`,{className:`flex flex-wrap items-center space-x-6 gap-y-4 lg:space-x-8`,children:[T(`div`,{className:`flex items-center space-x-2`,children:[w(`p`,{className:`text-sm font-medium`,children:`Rows per page`}),T(h,{value:`${e.getState().pagination.pageSize}`,onValueChange:t=>{e.setPageSize(Number(t))},children:[w(v,{className:`h-8 w-[70px]`,children:w(y,{placeholder:e.getState().pagination.pageSize})}),w(g,{side:`top`,children:[10,20,30,40,50].map(e=>w(_,{value:`${e}`,children:e},e))})]})]}),T(`div`,{className:`flex w-25 items-center justify-center text-sm font-medium`,children:[`Page `,e.getState().pagination.pageIndex+1,` of`,` `,e.getPageCount()]}),T(`div`,{className:`flex items-center space-x-2 *:size-9 *:p-0`,children:[T(n,{variant:`outline`,className:`lg:flex`,onClick:()=>e.setPageIndex(0),disabled:!e.getCanPreviousPage(),children:[w(`span`,{className:`sr-only`,children:`Go to first page`}),w(M,{})]}),T(n,{variant:`outline`,onClick:()=>e.previousPage(),disabled:!e.getCanPreviousPage(),children:[w(`span`,{className:`sr-only`,children:`Go to previous page`}),w(k,{})]}),T(n,{type:`button`,variant:`outline`,onClick:()=>e.nextPage(),disabled:!e.getCanNextPage(),children:[w(`span`,{className:`sr-only`,children:`Go to next page`}),w(A,{})]}),T(n,{variant:`outline`,className:`lg:flex`,onClick:()=>{e.setPageIndex(e.getPageCount()-1)},disabled:!e.getCanNextPage(),children:[w(`span`,{className:`sr-only`,children:`Go to last page`}),w(N,{})]})]})]})]})}function Z({data:e,totalCount:n,isLoading:r,columns:i,pagination:a,onAdd:o,onRefresh:s,onClickRow:c,onPaginationChange:l}){"use no memo";let[u,d]=C.useState({}),[f,p]=C.useState([]),[m,h]=C.useState([]),[g,_]=C.useState({}),v=C.useMemo(()=>({columnPinning:{right:[`actions`,`update`,`delete`]},pagination:{pageIndex:0,pageSize:20}}),[]),y=W({initialState:v,data:e,columns:i,rowCount:n,columnResizeMode:`onChange`,manualPagination:!0,enableColumnResizing:!1,enableMultiRowSelection:!1,getCoreRowModel:R(),getPaginationRowModel:H(),getSortedRowModel:U(),getFilteredRowModel:V(),getFacetedRowModel:z(),getFacetedUniqueValues:B(),getRowId:e=>e.id||e.uuid,state:{rowSelection:u,sorting:f,columnVisibility:g,columnFilters:m,...a?{pagination:a}:{}},onRowSelectionChange:d,onSortingChange:p,onColumnVisibilityChange:_,onColumnFiltersChange:h,...l?{onPaginationChange:l}:{}});return T(t,{vertical:!0,wrap:!1,gap:`sm`,align:`start`,className:`size-full overflow-y-auto pt-1`,children:[T(t,{justify:`between`,padding:`none`,width:`full`,className:`flex-0`,children:[w(S,{placeholder:`Search...`}),T(t,{className:`px-0`,children:[o&&w(b,{onClick:o}),w(x,{onClick:s})]})]}),T(t,{padding:`none`,vertical:!0,wrap:!1,width:`full`,className:`flex-1 overflow-auto`,children:[w(Y,{table:y,isLoading:r,onClickRow:c}),w(X,{table:y})]})]})}export{Z as Table};
1
+ import{cn as e}from"../utils-D9AH0PUV.js";import{Flex as t}from"../flex-ILvQrYMJ.js";import"../paragraph-Bey03JkA.js";import{Button as n}from"../button-Bku3bKv9.js";import"../input-Dmaq3fzf.js";import{Select as r,SelectContent as i,SelectItem as a,SelectTrigger as o,SelectValue as s}from"../select-4IO3vAjO.js";import{DropdownMenu as c,DropdownMenuContent as l,DropdownMenuItem as u,DropdownMenuTrigger as d}from"../dropdown-menu-DTFOCPH_.js";import{ScrollArea as f,ScrollBar as p}from"../scroll-area-C0KQbcG0.js";import{Table as m,TableBody as h,TableCell as g,TableHead as _,TableHeader as v,TableRow as y}from"../table-DrnU8YJP.js";import{AddNewBtn as b}from"../add-new-BaTjxsdU.js";import{RefreshBtn as x}from"../refresh-B__T7OFC.js";import{SearchInput as S}from"../search-input-BGmx8sXy.js";import C from"react";import{jsx as w,jsxs as T}from"react/jsx-runtime";import{ArrowLeftToLineIcon as E,ArrowRightToLineIcon as D,ChevronDown as O,ChevronLeft as k,ChevronRight as A,ChevronUp as j,ChevronsLeft as M,ChevronsRight as N,EllipsisIcon as P,PackagePlusIcon as F,PinOffIcon as I}from"lucide-react";import{flexRender as L,getCoreRowModel as R,getFacetedRowModel as z,getFacetedUniqueValues as B,getFilteredRowModel as V,getPaginationRowModel as H,getSortedRowModel as U,useReactTable as W}from"@tanstack/react-table";const G=e=>{let t=e.getIsPinned();return{left:t===`left`?`${e.getStart(`left`)}px`:void 0,right:t===`right`?`${e.getAfter(`right`)}px`:void 0,position:t?`sticky`:`relative`,width:e.getSize(),zIndex:t?1:0}},K=({column:e})=>{let t=e.getIsSorted(),n={asc:w(j,{className:`shrink-0 opacity-60`,size:16,strokeWidth:2,"aria-hidden":`true`}),desc:w(O,{className:`shrink-0 opacity-60`,size:16,strokeWidth:2,"aria-hidden":`true`})};return t?n[t]:null},q=({column:e})=>{let t=e.columnDef.header;return e.getCanPin()?e.getIsPinned()?w(n,{size:`icon`,variant:`ghost`,className:`hover:[&_svg]:text-secondary-foreground -mr-1 size-7 shadow-none`,"aria-label":`Unpin ${t} column`,title:`Unpin ${t} column`,onClick:()=>e.pin(!1),children:w(I,{className:`opacity-60`,size:16,"aria-hidden":`true`})}):T(c,{children:[w(d,{asChild:!0,children:w(n,{size:`icon`,variant:`ghost`,className:`-mr-1 size-7 shadow-none`,"aria-label":`Pin options for ${t} column`,title:`Pin options for ${t} column`,children:w(P,{className:`opacity-60`,size:16,"aria-hidden":`true`})})}),T(l,{align:`end`,children:[T(u,{onClick:()=>e.pin(`left`),children:[w(E,{size:16,className:`opacity-60`,"aria-hidden":`true`}),`Stick to left`]}),T(u,{onClick:()=>e.pin(`right`),children:[w(D,{size:16,className:`opacity-60`,"aria-hidden":`true`}),`Stick to right`]})]})]}):null},J=({header:t})=>{let{column:n}=t,r=e=>{n.getCanSort()&&(e.key===`Enter`||e.key===` `)&&(e.preventDefault(),n.getToggleSortingHandler()?.(e))};return T(`div`,{className:`flex items-center justify-between gap-2 truncate`,children:[!t.isPlaceholder&&T(`div`,{className:e(n.getCanSort()&&`flex h-full cursor-pointer items-center justify-between gap-2 select-none`),onClick:n.getToggleSortingHandler(),onKeyDown:r,tabIndex:n.getCanSort()?0:void 0,children:[w(`span`,{className:`truncate`,children:L(n.columnDef.header,t.getContext())}),w(K,{column:n})]}),!t.isPlaceholder&&w(q,{column:n})]})},Y=({table:t,isLoading:n,onClickRow:r})=>{"use no memo";return T(f,{className:`border-border bg-background relative w-full overflow-auto rounded-lg border`,children:[T(m,{className:e(`!w-full`,`[&_td]:border-border`,`[&_th]:border-border`,`table-fixed border-separate border-spacing-0`,`[&_tfoot_td]:border-t`,`[&_th]:border-b`,`[&_tr]:border-none`,`[&_tr:not(:last-child)_td]:border-b`),style:{width:t.getTotalSize()},children:[w(v,{className:`bg-muted/50 sticky top-0 z-10 backdrop-blur-xs`,children:t.getHeaderGroups().map(t=>w(y,{className:`bg-muted/50`,children:t.headers.map(t=>{let{column:n}=t,r=n.getIsPinned(),i=r===`left`&&n.getIsLastColumn(`left`),a=r===`right`&&n.getIsFirstColumn(`right`);return w(_,{"data-pinned":r||void 0,"data-last-col":i?`left`:a?`right`:void 0,className:e(`text-accent-foreground/60 relative h-9 border-r font-semibold select-none`,`data-pinned:backdrop-blur-xs`,`data-pinned:bg-muted/90`,`[&>.cursor-col-resize]:last:opacity-0`,`[&[data-pinned][data-last-col]]:border-border`,`[&:not([data-pinned]):has(+[data-pinned])_div.cursor-col-resize:last-child]:opacity-0`,`[&[data-last-col=left]_div.cursor-col-resize:last-child]:opacity-0`,`[&[data-pinned=left][data-last-col=left]]:border-r`,`[&[data-pinned=right]:last-child_div.cursor-col-resize:last-child]:opacity-0`,`[&[data-pinned=right][data-last-col=right]]:border-l`),colSpan:t.colSpan,style:{width:t.getSize(),maxWidth:t.getSize(),...G(t.column)},children:w(J,{header:t})},t.id)})},t.id))}),w(h,{className:e(n&&`h-36`,t.getRowModel().rows?.length===0&&`h-48`),children:n?w(y,{className:`absolute top-9 flex h-36 w-full items-center justify-center`,children:w(g,{children:`loading...`})}):w(C.Fragment,{children:t.getRowModel().rows?.length?t.getRowModel().rows.map(t=>w(y,{"data-state":t.getIsSelected()&&`selected`,className:`cursor-pointer border-none focus:outline-none`,onClick:()=>r?.(t?.id||t.original?.id?.toString()||t.original?.uuid||void 0),children:t.getVisibleCells().map(t=>{let{column:n}=t,r=n.getIsPinned(),i=r===`left`&&n.getIsLastColumn(`left`),a=r===`right`&&n.getIsFirstColumn(`right`);return w(g,{style:{...G(n),width:t.column.getSize(),maxWidth:t.column.getSize()},"data-pinned":r||void 0,"data-last-col":i?`left`:a?`right`:void 0,className:e(`overflow-hidden py-2.5`,`[&[data-pinned][data-last-col]]:border-border`,`[&[data-pinned=left][data-last-col=left]]:border-r`,`[&[data-pinned=right][data-last-col=right]]:border-l`,`data-pinned:bg-background/90`),children:L(t.column.columnDef.cell,t.getContext())},t.id)})},t.id)):w(y,{className:`absolute top-9 flex h-36 w-full items-center justify-center`,children:w(g,{children:T(`div`,{className:`text-muted-foreground flex size-full flex-col items-center justify-center gap-y-8 text-base`,children:[w(F,{size:48,strokeWidth:2}),w(`p`,{children:`Thêm dữ liệu để hiển thị`})]})})})})})]}),w(p,{orientation:`vertical`,className:`z-10 w-2`}),w(p,{orientation:`horizontal`,className:`absolute right-0 bottom-0 left-0 h-2`})]})};function X({table:e}){"use no memo";return T(`div`,{className:`mt-4 flex w-full flex-0 flex-wrap items-center justify-between gap-y-4 px-2`,children:[T(`div`,{className:`text-muted-foreground flex-1 text-sm`,children:[e.getFilteredSelectedRowModel().rows.length,` of`,` `,e.getFilteredRowModel().rows.length,` row(s) selected.`]}),T(`div`,{className:`flex flex-wrap items-center space-x-6 gap-y-4 lg:space-x-8`,children:[T(`div`,{className:`flex items-center space-x-2`,children:[w(`p`,{className:`text-sm font-medium`,children:`Rows per page`}),T(r,{value:`${e.getState().pagination.pageSize}`,onValueChange:t=>{e.setPageSize(Number(t))},children:[w(o,{className:`h-8 w-[70px]`,children:w(s,{placeholder:e.getState().pagination.pageSize})}),w(i,{side:`top`,children:[10,20,30,40,50].map(e=>w(a,{value:`${e}`,children:e},e))})]})]}),T(`div`,{className:`flex w-25 items-center justify-center text-sm font-medium`,children:[`Page `,e.getState().pagination.pageIndex+1,` of`,` `,e.getPageCount()]}),T(`div`,{className:`flex items-center space-x-2 *:size-9 *:p-0`,children:[T(n,{variant:`outline`,className:`lg:flex`,onClick:()=>e.setPageIndex(0),disabled:!e.getCanPreviousPage(),children:[w(`span`,{className:`sr-only`,children:`Go to first page`}),w(M,{})]}),T(n,{variant:`outline`,onClick:()=>e.previousPage(),disabled:!e.getCanPreviousPage(),children:[w(`span`,{className:`sr-only`,children:`Go to previous page`}),w(k,{})]}),T(n,{type:`button`,variant:`outline`,onClick:()=>e.nextPage(),disabled:!e.getCanNextPage(),children:[w(`span`,{className:`sr-only`,children:`Go to next page`}),w(A,{})]}),T(n,{variant:`outline`,className:`lg:flex`,onClick:()=>{e.setPageIndex(e.getPageCount()-1)},disabled:!e.getCanNextPage(),children:[w(`span`,{className:`sr-only`,children:`Go to last page`}),w(N,{})]})]})]})]})}function Z({data:e,totalCount:n,isLoading:r,columns:i,pagination:a,onAdd:o,onRefresh:s,onClickRow:c,onPaginationChange:l}){"use no memo";let[u,d]=C.useState({}),[f,p]=C.useState([]),[m,h]=C.useState([]),[g,_]=C.useState({}),v=C.useMemo(()=>({columnPinning:{right:[`actions`,`update`,`delete`]},pagination:{pageIndex:0,pageSize:20}}),[]),y=W({initialState:v,data:e,columns:i,rowCount:n,columnResizeMode:`onChange`,manualPagination:!0,enableColumnResizing:!1,enableMultiRowSelection:!1,getCoreRowModel:R(),getPaginationRowModel:H(),getSortedRowModel:U(),getFilteredRowModel:V(),getFacetedRowModel:z(),getFacetedUniqueValues:B(),getRowId:e=>e.id||e.uuid,state:{rowSelection:u,sorting:f,columnVisibility:g,columnFilters:m,...a?{pagination:a}:{}},onRowSelectionChange:d,onSortingChange:p,onColumnVisibilityChange:_,onColumnFiltersChange:h,...l?{onPaginationChange:l}:{}});return T(t,{vertical:!0,wrap:!1,gap:`sm`,align:`start`,className:`size-full overflow-y-auto pt-1`,children:[T(t,{justify:`between`,padding:`none`,width:`full`,className:`flex-0`,children:[w(S,{placeholder:`Search...`}),T(t,{className:`px-0`,children:[o&&w(b,{onClick:o}),w(x,{onClick:s})]})]}),T(t,{padding:`none`,vertical:!0,wrap:!1,width:`full`,className:`flex-1 overflow-auto`,children:[w(Y,{table:y,isLoading:r,onClickRow:c}),w(X,{table:y})]})]})}export{Z as Table};
2
2
  //# sourceMappingURL=index.js.map