@senitix/ui 0.4.1 → 0.4.3

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 (393) hide show
  1. package/dist/accordion-BcwB0wwz.cjs +2 -0
  2. package/dist/accordion-BcwB0wwz.cjs.map +1 -0
  3. package/dist/accordion-BwnJKrKm.js +360 -0
  4. package/dist/accordion-BwnJKrKm.js.map +1 -0
  5. package/dist/appointment-scheduler-BoQQO51F.cjs +2 -0
  6. package/dist/appointment-scheduler-BoQQO51F.cjs.map +1 -0
  7. package/dist/appointment-scheduler-DHAs-mF_.js +192 -0
  8. package/dist/appointment-scheduler-DHAs-mF_.js.map +1 -0
  9. package/dist/arrow-right-CM3nmiZe.js +15 -0
  10. package/dist/arrow-right-CM3nmiZe.js.map +1 -0
  11. package/dist/arrow-right-vDxRZOfm.cjs +7 -0
  12. package/dist/arrow-right-vDxRZOfm.cjs.map +1 -0
  13. package/dist/avatar-BlEcWE7T.js +191 -0
  14. package/dist/avatar-BlEcWE7T.js.map +1 -0
  15. package/dist/avatar-Cl38Ye4J.cjs +2 -0
  16. package/dist/avatar-Cl38Ye4J.cjs.map +1 -0
  17. package/dist/badge-BZcdBG5J.cjs +23 -0
  18. package/dist/badge-BZcdBG5J.cjs.map +1 -0
  19. package/dist/badge-D0C_rP2l.js +157 -0
  20. package/dist/badge-D0C_rP2l.js.map +1 -0
  21. package/dist/button-BP_ug5gP.js +126 -0
  22. package/dist/button-BP_ug5gP.js.map +1 -0
  23. package/dist/button-CPuCii0R.cjs +2 -0
  24. package/dist/button-CPuCii0R.cjs.map +1 -0
  25. package/dist/{calendar-DgnhzEfp.js → calendar-86qoSnO7.js} +368 -433
  26. package/dist/calendar-86qoSnO7.js.map +1 -0
  27. package/dist/{calendar-D3RWU0_G.cjs → calendar-BH-AuyiB.cjs} +2 -2
  28. package/dist/{calendar-D3RWU0_G.cjs.map → calendar-BH-AuyiB.cjs.map} +1 -1
  29. package/dist/calendar-CSJ060ym.cjs +2 -0
  30. package/dist/calendar-CSJ060ym.cjs.map +1 -0
  31. package/dist/{calendar-CUxm1K7J.js → calendar-JUSWONQ0.js} +2 -2
  32. package/dist/{calendar-CUxm1K7J.js.map → calendar-JUSWONQ0.js.map} +1 -1
  33. package/dist/{card-DISL3sPJ.cjs → card-CToWUN1K.cjs} +2 -2
  34. package/dist/{card-DISL3sPJ.cjs.map → card-CToWUN1K.cjs.map} +1 -1
  35. package/dist/{card-fId5vof_.js → card-yxbWFvZ1.js} +2 -2
  36. package/dist/{card-fId5vof_.js.map → card-yxbWFvZ1.js.map} +1 -1
  37. package/dist/checkbox-BmugT50K.cjs +2 -0
  38. package/dist/checkbox-BmugT50K.cjs.map +1 -0
  39. package/dist/{checkbox-BY2zxQVv.js → checkbox-CTa9e4SG.js} +95 -97
  40. package/dist/checkbox-CTa9e4SG.js.map +1 -0
  41. package/dist/chevron-left-5h87iFo_.cjs +7 -0
  42. package/dist/chevron-left-5h87iFo_.cjs.map +1 -0
  43. package/dist/chevron-left-DD5mQuvf.js +14 -0
  44. package/dist/chevron-left-DD5mQuvf.js.map +1 -0
  45. package/dist/{chevron-right-Bxf8i4gi.cjs → chevron-right-D-TdAZ7l.cjs} +2 -2
  46. package/dist/{chevron-right-Bxf8i4gi.cjs.map → chevron-right-D-TdAZ7l.cjs.map} +1 -1
  47. package/dist/{chevron-right-BLyGmyaF.js → chevron-right-Di90aqSn.js} +2 -2
  48. package/dist/{chevron-right-BLyGmyaF.js.map → chevron-right-Di90aqSn.js.map} +1 -1
  49. package/dist/chevron-up-Bq55Db6X.cjs +7 -0
  50. package/dist/{chevron-up-C3RClqXD.cjs.map → chevron-up-Bq55Db6X.cjs.map} +1 -1
  51. package/dist/{chevron-up-BmYZUtrk.js → chevron-up-Dr7EIn9V.js} +2 -2
  52. package/dist/{chevron-up-BmYZUtrk.js.map → chevron-up-Dr7EIn9V.js.map} +1 -1
  53. package/dist/clock-BjJE8PGr.js +15 -0
  54. package/dist/clock-BjJE8PGr.js.map +1 -0
  55. package/dist/clock-CnxBAA_O.cjs +7 -0
  56. package/dist/clock-CnxBAA_O.cjs.map +1 -0
  57. package/dist/command-BEpaOk-5.cjs +2 -0
  58. package/dist/command-BEpaOk-5.cjs.map +1 -0
  59. package/dist/command-CYhMM7gX.js +404 -0
  60. package/dist/command-CYhMM7gX.js.map +1 -0
  61. package/dist/components/builders/index.cjs.js +2 -0
  62. package/dist/components/builders/index.cjs.js.map +1 -0
  63. package/dist/components/builders/index.es.js +42 -0
  64. package/dist/components/builders/index.es.js.map +1 -0
  65. package/dist/components/charts/index.cjs.js +1 -1
  66. package/dist/components/charts/index.es.js +7 -6
  67. package/dist/components/charts/index.es.js.map +1 -1
  68. package/dist/components/data-display/index.cjs.js +1 -1
  69. package/dist/components/data-display/index.es.js +43 -20
  70. package/dist/components/dnd/index.cjs.js +1 -1
  71. package/dist/components/dnd/index.es.js +1 -1
  72. package/dist/components/feedback/index.cjs.js +1 -1
  73. package/dist/components/feedback/index.es.js +1 -1
  74. package/dist/components/forms/index.cjs.js +1 -1
  75. package/dist/components/forms/index.es.js +24 -23
  76. package/dist/components/forms/index.es.js.map +1 -1
  77. package/dist/components/layouts/index.cjs.js +1 -1
  78. package/dist/components/layouts/index.es.js +45 -21
  79. package/dist/components/messaging/index.cjs.js +2 -0
  80. package/dist/components/messaging/index.cjs.js.map +1 -0
  81. package/dist/components/messaging/index.es.js +15 -0
  82. package/dist/components/messaging/index.es.js.map +1 -0
  83. package/dist/components/navigation/index.cjs.js +1 -1
  84. package/dist/components/navigation/index.es.js +1 -1
  85. package/dist/components/scheduling/index.cjs.js +2 -0
  86. package/dist/components/scheduling/index.cjs.js.map +1 -0
  87. package/dist/components/scheduling/index.es.js +6 -0
  88. package/dist/components/scheduling/index.es.js.map +1 -0
  89. package/dist/components/ui/index.cjs.js +1 -1
  90. package/dist/components/ui/index.es.js +168 -158
  91. package/dist/components/ui/index.es.js.map +1 -1
  92. package/dist/dialog-Cr9SYCaD.cjs +6 -0
  93. package/dist/dialog-Cr9SYCaD.cjs.map +1 -0
  94. package/dist/dialog-MYAx3Qrc.js +387 -0
  95. package/dist/dialog-MYAx3Qrc.js.map +1 -0
  96. package/dist/dropdown-menu-CkCCV_tw.js +969 -0
  97. package/dist/dropdown-menu-CkCCV_tw.js.map +1 -0
  98. package/dist/dropdown-menu-ejikFvg2.cjs +7 -0
  99. package/dist/dropdown-menu-ejikFvg2.cjs.map +1 -0
  100. package/dist/{ellipsis-6eUne95u.js → ellipsis-CKhpjj5H.js} +2 -2
  101. package/dist/{ellipsis-6eUne95u.js.map → ellipsis-CKhpjj5H.js.map} +1 -1
  102. package/dist/{ellipsis-DkM3GBF5.cjs → ellipsis-Dk7Wfc4i.cjs} +3 -3
  103. package/dist/{ellipsis-DkM3GBF5.cjs.map → ellipsis-Dk7Wfc4i.cjs.map} +1 -1
  104. package/dist/external-link-CGBqsrbm.cjs +7 -0
  105. package/dist/external-link-CGBqsrbm.cjs.map +1 -0
  106. package/dist/external-link-UeWW0ty3.js +16 -0
  107. package/dist/external-link-UeWW0ty3.js.map +1 -0
  108. package/dist/eye-Cved4eAo.cjs +7 -0
  109. package/dist/eye-Cved4eAo.cjs.map +1 -0
  110. package/dist/eye-KdCUpmO8.js +21 -0
  111. package/dist/eye-KdCUpmO8.js.map +1 -0
  112. package/dist/{file-Cw_u_aJB.js → file-CHbdXCWO.js} +2 -2
  113. package/dist/{file-Cw_u_aJB.js.map → file-CHbdXCWO.js.map} +1 -1
  114. package/dist/{file-Cp5UoYUZ.cjs → file-CqYRamm8.cjs} +3 -3
  115. package/dist/{file-Cp5UoYUZ.cjs.map → file-CqYRamm8.cjs.map} +1 -1
  116. package/dist/file-spreadsheet-CpySxI0-.cjs +7 -0
  117. package/dist/file-spreadsheet-CpySxI0-.cjs.map +1 -0
  118. package/dist/file-spreadsheet-EqZMR-mM.js +19 -0
  119. package/dist/file-spreadsheet-EqZMR-mM.js.map +1 -0
  120. package/dist/form-preview-Bm5xHtkw.js +12075 -0
  121. package/dist/form-preview-Bm5xHtkw.js.map +1 -0
  122. package/dist/form-preview-IPEZdspX.cjs +111 -0
  123. package/dist/form-preview-IPEZdspX.cjs.map +1 -0
  124. package/dist/full-calendar-4Ut52QNO.cjs +18 -0
  125. package/dist/full-calendar-4Ut52QNO.cjs.map +1 -0
  126. package/dist/full-calendar-DD_tBy69.js +2631 -0
  127. package/dist/full-calendar-DD_tBy69.js.map +1 -0
  128. package/dist/funnel-chart-Dfj1pOyV.cjs +6 -0
  129. package/dist/funnel-chart-Dfj1pOyV.cjs.map +1 -0
  130. package/dist/funnel-chart-o9qcEMgg.js +2952 -0
  131. package/dist/funnel-chart-o9qcEMgg.js.map +1 -0
  132. package/dist/global-search-DcBKVaM4.cjs +22 -0
  133. package/dist/global-search-DcBKVaM4.cjs.map +1 -0
  134. package/dist/global-search-Dul9CD6-.js +1331 -0
  135. package/dist/global-search-Dul9CD6-.js.map +1 -0
  136. package/dist/hooks/index.cjs.js +1 -1
  137. package/dist/hooks/index.es.js +9 -7
  138. package/dist/hooks/index.es.js.map +1 -1
  139. package/dist/{index-DtaLkIY8.js → index-BGUveO6l.js} +84 -79
  140. package/dist/{index-DtaLkIY8.js.map → index-BGUveO6l.js.map} +1 -1
  141. package/dist/{index-gVbM3K4f.cjs → index-Bhee6XHk.cjs} +2 -2
  142. package/dist/{index-gVbM3K4f.cjs.map → index-Bhee6XHk.cjs.map} +1 -1
  143. package/dist/index-CrSlyWAA.js +1090 -0
  144. package/dist/index-CrSlyWAA.js.map +1 -0
  145. package/dist/{index-Dk_Et2WJ.js → index-D8-pHJim.js} +2 -2
  146. package/dist/{index-Dk_Et2WJ.js.map → index-D8-pHJim.js.map} +1 -1
  147. package/dist/index-Dy_9oyP3.cjs +2 -0
  148. package/dist/{index-D2U2F80P.cjs.map → index-Dy_9oyP3.cjs.map} +1 -1
  149. package/dist/index-hnbbvGmb.cjs +21 -0
  150. package/dist/index-hnbbvGmb.cjs.map +1 -0
  151. package/dist/index.cjs.js +1 -1
  152. package/dist/index.es.js +434 -319
  153. package/dist/index.es.js.map +1 -1
  154. package/dist/input-Pfq8fkiV.js +2718 -0
  155. package/dist/input-Pfq8fkiV.js.map +1 -0
  156. package/dist/input-UBp7V7li.cjs +52 -0
  157. package/dist/input-UBp7V7li.cjs.map +1 -0
  158. package/dist/label-CExiitfO.js +50 -0
  159. package/dist/label-CExiitfO.js.map +1 -0
  160. package/dist/label-F0zGAiI2.cjs +2 -0
  161. package/dist/label-F0zGAiI2.cjs.map +1 -0
  162. package/dist/loader-circle-CBVYGIRp.js +14 -0
  163. package/dist/loader-circle-CBVYGIRp.js.map +1 -0
  164. package/dist/loader-circle-IaJKvYsP.cjs +7 -0
  165. package/dist/loader-circle-IaJKvYsP.cjs.map +1 -0
  166. package/dist/locale-provider-BHGNO4j7.js +1786 -0
  167. package/dist/locale-provider-BHGNO4j7.js.map +1 -0
  168. package/dist/locale-provider-BScpm-eC.cjs +2 -0
  169. package/dist/locale-provider-BScpm-eC.cjs.map +1 -0
  170. package/dist/locale-selector-CRC0VBKl.cjs +12 -0
  171. package/dist/locale-selector-CRC0VBKl.cjs.map +1 -0
  172. package/dist/locale-selector-HuzfE0zZ.js +1740 -0
  173. package/dist/locale-selector-HuzfE0zZ.js.map +1 -0
  174. package/dist/map-pin-CHh0xl6i.js +46 -0
  175. package/dist/map-pin-CHh0xl6i.js.map +1 -0
  176. package/dist/map-pin-DGObSZ40.cjs +17 -0
  177. package/dist/map-pin-DGObSZ40.cjs.map +1 -0
  178. package/dist/message-square-B_xLey5D.js +14 -0
  179. package/dist/message-square-B_xLey5D.js.map +1 -0
  180. package/dist/message-square-_69ua8rH.cjs +7 -0
  181. package/dist/message-square-_69ua8rH.cjs.map +1 -0
  182. package/dist/minus-BUFkTM0k.cjs +7 -0
  183. package/dist/{minus-C0uyaz70.cjs.map → minus-BUFkTM0k.cjs.map} +1 -1
  184. package/dist/{minus-CiwV65ZG.js → minus-DJ0tmymW.js} +2 -2
  185. package/dist/{minus-CiwV65ZG.js.map → minus-DJ0tmymW.js.map} +1 -1
  186. package/dist/multi-container-CytCGxsc.cjs +7 -0
  187. package/dist/multi-container-CytCGxsc.cjs.map +1 -0
  188. package/dist/multi-container-DmkgnCJN.js +799 -0
  189. package/dist/multi-container-DmkgnCJN.js.map +1 -0
  190. package/dist/multi-select-Bj_kIDHE.cjs +7 -0
  191. package/dist/multi-select-Bj_kIDHE.cjs.map +1 -0
  192. package/dist/multi-select-CPF7w871.js +224 -0
  193. package/dist/multi-select-CPF7w871.js.map +1 -0
  194. package/dist/pencil-BJULwaDl.cjs +12 -0
  195. package/dist/pencil-BJULwaDl.cjs.map +1 -0
  196. package/dist/pencil-HL0trGIs.js +31 -0
  197. package/dist/pencil-HL0trGIs.js.map +1 -0
  198. package/dist/permission-matrix-BRqw2RPb.js +6128 -0
  199. package/dist/permission-matrix-BRqw2RPb.js.map +1 -0
  200. package/dist/permission-matrix-CqE8q8Hi.cjs +93 -0
  201. package/dist/permission-matrix-CqE8q8Hi.cjs.map +1 -0
  202. package/dist/phone-B0J1dGIE.js +31 -0
  203. package/dist/phone-B0J1dGIE.js.map +1 -0
  204. package/dist/phone-DPA6vucM.cjs +12 -0
  205. package/dist/phone-DPA6vucM.cjs.map +1 -0
  206. package/dist/plus-Bcuujcqd.cjs +7 -0
  207. package/dist/{plus-BsV82JJ5.cjs.map → plus-Bcuujcqd.cjs.map} +1 -1
  208. package/dist/{plus-DxD6rofl.js → plus-D7DMDKb8.js} +2 -2
  209. package/dist/{plus-DxD6rofl.js.map → plus-D7DMDKb8.js.map} +1 -1
  210. package/dist/popover-Bba1ELMX.cjs +2 -0
  211. package/dist/popover-Bba1ELMX.cjs.map +1 -0
  212. package/dist/popover-CZWAuYUL.js +281 -0
  213. package/dist/popover-CZWAuYUL.js.map +1 -0
  214. package/dist/progress-BPpsmZ48.js +218 -0
  215. package/dist/progress-BPpsmZ48.js.map +1 -0
  216. package/dist/progress-BrzjVhWG.cjs +22 -0
  217. package/dist/progress-BrzjVhWG.cjs.map +1 -0
  218. package/dist/providers/index.cjs.js +1 -1
  219. package/dist/providers/index.es.js +1 -1
  220. package/dist/radio-group-B9RM_c7e.js +244 -0
  221. package/dist/radio-group-B9RM_c7e.js.map +1 -0
  222. package/dist/radio-group-_n8TTqNQ.cjs +2 -0
  223. package/dist/radio-group-_n8TTqNQ.cjs.map +1 -0
  224. package/dist/record-dialog-footer-DbH9A6eA.js +2577 -0
  225. package/dist/record-dialog-footer-DbH9A6eA.js.map +1 -0
  226. package/dist/record-dialog-footer-DpDxH5wX.cjs +37 -0
  227. package/dist/record-dialog-footer-DpDxH5wX.cjs.map +1 -0
  228. package/dist/scroll-area-CGNbDUBQ.js +889 -0
  229. package/dist/scroll-area-CGNbDUBQ.js.map +1 -0
  230. package/dist/scroll-area-HsTSI_58.cjs +22 -0
  231. package/dist/scroll-area-HsTSI_58.cjs.map +1 -0
  232. package/dist/select-CEsYpjPi.cjs +2 -0
  233. package/dist/select-CEsYpjPi.cjs.map +1 -0
  234. package/dist/{select-BJpZrtep.js → select-Ce2C2acZ.js} +184 -179
  235. package/dist/select-Ce2C2acZ.js.map +1 -0
  236. package/dist/send-DIkOd-pu.js +21 -0
  237. package/dist/send-DIkOd-pu.js.map +1 -0
  238. package/dist/send-H6HC-rS8.cjs +7 -0
  239. package/dist/send-H6HC-rS8.cjs.map +1 -0
  240. package/dist/shared-inbox-Bv0AgLew.js +702 -0
  241. package/dist/shared-inbox-Bv0AgLew.js.map +1 -0
  242. package/dist/shared-inbox-DWEKfDX3.cjs +22 -0
  243. package/dist/shared-inbox-DWEKfDX3.cjs.map +1 -0
  244. package/dist/sheet-DTimb4SJ.cjs +2 -0
  245. package/dist/sheet-DTimb4SJ.cjs.map +1 -0
  246. package/dist/sheet-DgpAPCAp.js +147 -0
  247. package/dist/sheet-DgpAPCAp.js.map +1 -0
  248. package/dist/{skeleton-Bl6FAxHT.js → skeleton-C_dwS3_6.js} +2 -2
  249. package/dist/{skeleton-Bl6FAxHT.js.map → skeleton-C_dwS3_6.js.map} +1 -1
  250. package/dist/{skeleton-Cb6MWerF.cjs → skeleton-D3YsjVWD.cjs} +2 -2
  251. package/dist/{skeleton-Cb6MWerF.cjs.map → skeleton-D3YsjVWD.cjs.map} +1 -1
  252. package/dist/sparkline-chart-BP4bk24J.js +15881 -0
  253. package/dist/sparkline-chart-BP4bk24J.js.map +1 -0
  254. package/dist/sparkline-chart-D6SLZVjp.cjs +79 -0
  255. package/dist/sparkline-chart-D6SLZVjp.cjs.map +1 -0
  256. package/dist/styles.css +1 -1
  257. package/dist/switch-AEZvZSRV.cjs +2 -0
  258. package/dist/switch-AEZvZSRV.cjs.map +1 -0
  259. package/dist/switch-BF4LLvaU.js +147 -0
  260. package/dist/switch-BF4LLvaU.js.map +1 -0
  261. package/dist/table-2-Bn-YjZ9s.cjs +17 -0
  262. package/dist/table-2-Bn-YjZ9s.cjs.map +1 -0
  263. package/dist/table-2-C7E_N72K.js +52 -0
  264. package/dist/table-2-C7E_N72K.js.map +1 -0
  265. package/dist/textarea-4qZDuQ-C.js +206 -0
  266. package/dist/textarea-4qZDuQ-C.js.map +1 -0
  267. package/dist/textarea-Bq_zyt0L.cjs +2 -0
  268. package/dist/textarea-Bq_zyt0L.cjs.map +1 -0
  269. package/dist/tooltip-Dd7le9EO.cjs +2 -0
  270. package/dist/tooltip-Dd7le9EO.cjs.map +1 -0
  271. package/dist/tooltip-Dee-pNPI.js +338 -0
  272. package/dist/tooltip-Dee-pNPI.js.map +1 -0
  273. package/dist/trash-2-B3EP3JfM.js +18 -0
  274. package/dist/trash-2-B3EP3JfM.js.map +1 -0
  275. package/dist/trash-2-DWEeKlWT.cjs +7 -0
  276. package/dist/trash-2-DWEeKlWT.cjs.map +1 -0
  277. package/dist/{trending-up-BHFXgLWy.js → trending-up-ljWtN4pj.js} +2 -2
  278. package/dist/{trending-up-BHFXgLWy.js.map → trending-up-ljWtN4pj.js.map} +1 -1
  279. package/dist/{trending-up-BBjz_E69.cjs → trending-up-mLgmkp--.cjs} +2 -2
  280. package/dist/{trending-up-BBjz_E69.cjs.map → trending-up-mLgmkp--.cjs.map} +1 -1
  281. package/dist/upload-2tm-XihE.cjs +7 -0
  282. package/dist/upload-2tm-XihE.cjs.map +1 -0
  283. package/dist/upload-C_JDP8O0.js +16 -0
  284. package/dist/upload-C_JDP8O0.js.map +1 -0
  285. package/dist/use-controllable-state-3ATd6Fqd.cjs +2 -0
  286. package/dist/use-controllable-state-3ATd6Fqd.cjs.map +1 -0
  287. package/dist/use-controllable-state-CEa-Zlq6.js +23 -0
  288. package/dist/use-controllable-state-CEa-Zlq6.js.map +1 -0
  289. package/dist/use-formatters-Bb0fX1lW.cjs +2 -0
  290. package/dist/{use-formatters-CObUgipW.cjs.map → use-formatters-Bb0fX1lW.cjs.map} +1 -1
  291. package/dist/{use-formatters-Bgj3JA4i.js → use-formatters-xeMS4gdV.js} +1160 -1165
  292. package/dist/{use-formatters-Bgj3JA4i.js.map → use-formatters-xeMS4gdV.js.map} +1 -1
  293. package/dist/utils/index.cjs.js +1 -1
  294. package/dist/utils/index.es.js +1 -1
  295. package/dist/welcome-card-Ccbl_miQ.js +1007 -0
  296. package/dist/welcome-card-Ccbl_miQ.js.map +1 -0
  297. package/dist/welcome-card-D-ShMkaS.cjs +37 -0
  298. package/dist/welcome-card-D-ShMkaS.cjs.map +1 -0
  299. package/dist/x-BBkgEhUv.js +15 -0
  300. package/dist/x-BBkgEhUv.js.map +1 -0
  301. package/dist/x-D-El5XAY.cjs +7 -0
  302. package/dist/x-D-El5XAY.cjs.map +1 -0
  303. package/package.json +20 -2
  304. package/dist/avatar-BT_SPwFW.cjs +0 -18
  305. package/dist/avatar-BT_SPwFW.cjs.map +0 -1
  306. package/dist/avatar-C5-ZWIqT.js +0 -305
  307. package/dist/avatar-C5-ZWIqT.js.map +0 -1
  308. package/dist/calendar-BF5drX5u.cjs +0 -12
  309. package/dist/calendar-BF5drX5u.cjs.map +0 -1
  310. package/dist/calendar-DgnhzEfp.js.map +0 -1
  311. package/dist/checkbox-BY2zxQVv.js.map +0 -1
  312. package/dist/checkbox-CL6u7vL6.cjs +0 -2
  313. package/dist/checkbox-CL6u7vL6.cjs.map +0 -1
  314. package/dist/chevron-down-BiUlxZA-.js +0 -14
  315. package/dist/chevron-down-BiUlxZA-.js.map +0 -1
  316. package/dist/chevron-down-Ce0kqXiD.cjs +0 -7
  317. package/dist/chevron-down-Ce0kqXiD.cjs.map +0 -1
  318. package/dist/chevron-up-C3RClqXD.cjs +0 -7
  319. package/dist/createLucideIcon-BC8wu-bu.js +0 -80
  320. package/dist/createLucideIcon-BC8wu-bu.js.map +0 -1
  321. package/dist/createLucideIcon-Cv8nC2E9.cjs +0 -22
  322. package/dist/createLucideIcon-Cv8nC2E9.cjs.map +0 -1
  323. package/dist/filter-tags-DoRzXjuY.cjs +0 -48
  324. package/dist/filter-tags-DoRzXjuY.cjs.map +0 -1
  325. package/dist/filter-tags-zEQmRhEU.js +0 -2712
  326. package/dist/filter-tags-zEQmRhEU.js.map +0 -1
  327. package/dist/full-calendar-5Z4JSj8g.js +0 -3551
  328. package/dist/full-calendar-5Z4JSj8g.js.map +0 -1
  329. package/dist/full-calendar-DjAvCfuE.cjs +0 -23
  330. package/dist/full-calendar-DjAvCfuE.cjs.map +0 -1
  331. package/dist/global-search-BbZfc-VL.js +0 -1216
  332. package/dist/global-search-BbZfc-VL.js.map +0 -1
  333. package/dist/global-search-Bd74_wPV.cjs +0 -22
  334. package/dist/global-search-Bd74_wPV.cjs.map +0 -1
  335. package/dist/index-D2U2F80P.cjs +0 -2
  336. package/dist/index-DG0KV-sw.cjs +0 -11
  337. package/dist/index-DG0KV-sw.cjs.map +0 -1
  338. package/dist/index-XnFSmCuh.js +0 -299
  339. package/dist/index-XnFSmCuh.js.map +0 -1
  340. package/dist/input-BgPy-4Qu.js +0 -3658
  341. package/dist/input-BgPy-4Qu.js.map +0 -1
  342. package/dist/input-Cfr2WB-P.cjs +0 -47
  343. package/dist/input-Cfr2WB-P.cjs.map +0 -1
  344. package/dist/locale-provider-BojNdf1Y.cjs +0 -2
  345. package/dist/locale-provider-BojNdf1Y.cjs.map +0 -1
  346. package/dist/locale-provider-DzBeb-X3.js +0 -1013
  347. package/dist/locale-provider-DzBeb-X3.js.map +0 -1
  348. package/dist/locale-selector-BD1IWk6X.cjs +0 -22
  349. package/dist/locale-selector-BD1IWk6X.cjs.map +0 -1
  350. package/dist/locale-selector-DLRSyVye.js +0 -1772
  351. package/dist/locale-selector-DLRSyVye.js.map +0 -1
  352. package/dist/minus-C0uyaz70.cjs +0 -7
  353. package/dist/multi-container-BZia7HCU.js +0 -748
  354. package/dist/multi-container-BZia7HCU.js.map +0 -1
  355. package/dist/multi-container-BdNbgtPZ.cjs +0 -7
  356. package/dist/multi-container-BdNbgtPZ.cjs.map +0 -1
  357. package/dist/pipeline-Dh052Dvj.cjs +0 -27
  358. package/dist/pipeline-Dh052Dvj.cjs.map +0 -1
  359. package/dist/pipeline-DqWvleNy.js +0 -1076
  360. package/dist/pipeline-DqWvleNy.js.map +0 -1
  361. package/dist/plus-BsV82JJ5.cjs +0 -7
  362. package/dist/popover-BgLxmm1z.cjs +0 -7
  363. package/dist/popover-BgLxmm1z.cjs.map +0 -1
  364. package/dist/popover-PI9jbhnS.js +0 -775
  365. package/dist/popover-PI9jbhnS.js.map +0 -1
  366. package/dist/progress-CTTt_CP3.js +0 -260
  367. package/dist/progress-CTTt_CP3.js.map +0 -1
  368. package/dist/progress-CTWb7X1Q.cjs +0 -37
  369. package/dist/progress-CTWb7X1Q.cjs.map +0 -1
  370. package/dist/scroll-area-A3jGu-Ta.js +0 -974
  371. package/dist/scroll-area-A3jGu-Ta.js.map +0 -1
  372. package/dist/scroll-area-DzDnWIYJ.cjs +0 -12
  373. package/dist/scroll-area-DzDnWIYJ.cjs.map +0 -1
  374. package/dist/select-BJpZrtep.js.map +0 -1
  375. package/dist/select-Ii8HRuXa.cjs +0 -2
  376. package/dist/select-Ii8HRuXa.cjs.map +0 -1
  377. package/dist/separator-BzcDE0Ei.cjs +0 -2
  378. package/dist/separator-BzcDE0Ei.cjs.map +0 -1
  379. package/dist/separator-DyarVo1-.js +0 -396
  380. package/dist/separator-DyarVo1-.js.map +0 -1
  381. package/dist/sheet-DPSdOoE6.js +0 -84
  382. package/dist/sheet-DPSdOoE6.js.map +0 -1
  383. package/dist/sheet-XtjvbEMq.cjs +0 -2
  384. package/dist/sheet-XtjvbEMq.cjs.map +0 -1
  385. package/dist/sparkline-chart-CeCDeMNk.cjs +0 -102
  386. package/dist/sparkline-chart-CeCDeMNk.cjs.map +0 -1
  387. package/dist/sparkline-chart-DUS4CoW_.js +0 -19787
  388. package/dist/sparkline-chart-DUS4CoW_.js.map +0 -1
  389. package/dist/use-formatters-CObUgipW.cjs +0 -2
  390. package/dist/welcome-card-CNuEa6Ck.cjs +0 -67
  391. package/dist/welcome-card-CNuEa6Ck.cjs.map +0 -1
  392. package/dist/welcome-card-Cp6t6G3j.js +0 -1041
  393. package/dist/welcome-card-Cp6t6G3j.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"permission-matrix-CqE8q8Hi.cjs","sources":["../node_modules/lucide-react/dist/esm/icons/arrow-left.js","../node_modules/lucide-react/dist/esm/icons/arrow-up-down.js","../node_modules/lucide-react/dist/esm/icons/bookmark.js","../node_modules/lucide-react/dist/esm/icons/calendar-days.js","../node_modules/lucide-react/dist/esm/icons/calendar-range.js","../node_modules/lucide-react/dist/esm/icons/diamond.js","../node_modules/lucide-react/dist/esm/icons/eye-off.js","../node_modules/lucide-react/dist/esm/icons/rotate-ccw.js","../node_modules/lucide-react/dist/esm/icons/save.js","../node_modules/lucide-react/dist/esm/icons/settings-2.js","../node_modules/lucide-react/dist/esm/icons/skip-forward.js","../node_modules/lucide-react/dist/esm/icons/target.js","../node_modules/lucide-react/dist/esm/icons/trending-down.js","../node_modules/@tanstack/table-core/build/lib/index.mjs","../node_modules/@tanstack/react-table/build/lib/index.mjs","../src/components/data-display/data-table.tsx","../src/components/data-display/data-table-cell-editors/text-editor.tsx","../src/components/data-display/data-table-cell-editors/number-editor.tsx","../src/components/data-display/data-table-cell-editors/select-editor.tsx","../src/components/data-display/data-table-cell-editors/date-editor.tsx","../src/components/data-display/data-table-cell-editors/checkbox-editor.tsx","../src/components/data-display/data-table-cell-editors/multi-select-editor.tsx","../src/components/data-display/data-table-editable-cell.tsx","../src/components/data-display/data-table-export.ts","../node_modules/@tanstack/virtual-core/dist/esm/utils.js","../node_modules/@tanstack/virtual-core/dist/esm/index.js","../node_modules/@tanstack/react-virtual/dist/esm/index.js","../src/components/data-display/data-table-virtual.tsx","../src/components/data-display/kpi-card.tsx","../src/components/data-display/stat-card.tsx","../src/components/data-display/empty-state.tsx","../src/components/data-display/timeline.tsx","../src/components/data-display/activity-feed.tsx","../src/components/data-display/column-visibility.tsx","../src/components/data-display/bulk-actions-toolbar.tsx","../src/components/data-display/per-page-selector.tsx","../src/components/data-display/quick-filters.tsx","../src/components/data-display/filter-tags.tsx","../src/components/data-display/filter-field-selector.tsx","../src/components/data-display/filter-types.ts","../src/components/data-display/filter-operator-selector.tsx","../src/components/data-display/filter-value-input.tsx","../src/components/data-display/filter-rule.tsx","../src/components/data-display/filter-group.tsx","../src/components/data-display/filter-presets.tsx","../src/components/data-display/use-filter-builder.ts","../src/components/data-display/query-filter-builder.tsx","../src/components/data-display/forecast-board/forecast-types.ts","../src/components/data-display/forecast-board/forecast-bucket.tsx","../src/components/data-display/forecast-board/forecast-summary.tsx","../src/components/data-display/forecast-board/forecast-board.tsx","../src/components/data-display/bulk-data-ops/import-mapper.tsx","../src/components/data-display/bulk-data-ops/validation-table.tsx","../src/components/data-display/bulk-data-ops/bulk-data-ops.tsx","../src/components/data-display/bulk-data-ops/merge-preview.tsx","../src/components/data-display/gantt-planner/gantt-sidebar.tsx","../src/components/data-display/gantt-planner/gantt-chart.tsx","../src/components/data-display/gantt-planner/use-gantt-planner.ts","../src/components/data-display/gantt-planner/gantt-planner.tsx","../src/components/data-display/permission-matrix.tsx"],"sourcesContent":["/**\n * @license lucide-react v0.441.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst ArrowLeft = createLucideIcon(\"ArrowLeft\", [\n [\"path\", { d: \"m12 19-7-7 7-7\", key: \"1l729n\" }],\n [\"path\", { d: \"M19 12H5\", key: \"x3x0zl\" }]\n]);\n\nexport { ArrowLeft as default };\n//# sourceMappingURL=arrow-left.js.map\n","/**\n * @license lucide-react v0.441.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst ArrowUpDown = createLucideIcon(\"ArrowUpDown\", [\n [\"path\", { d: \"m21 16-4 4-4-4\", key: \"f6ql7i\" }],\n [\"path\", { d: \"M17 20V4\", key: \"1ejh1v\" }],\n [\"path\", { d: \"m3 8 4-4 4 4\", key: \"11wl7u\" }],\n [\"path\", { d: \"M7 4v16\", key: \"1glfcx\" }]\n]);\n\nexport { ArrowUpDown as default };\n//# sourceMappingURL=arrow-up-down.js.map\n","/**\n * @license lucide-react v0.441.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst Bookmark = createLucideIcon(\"Bookmark\", [\n [\"path\", { d: \"m19 21-7-4-7 4V5a2 2 0 0 1 2-2h10a2 2 0 0 1 2 2v16z\", key: \"1fy3hk\" }]\n]);\n\nexport { Bookmark as default };\n//# sourceMappingURL=bookmark.js.map\n","/**\n * @license lucide-react v0.441.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst CalendarDays = createLucideIcon(\"CalendarDays\", [\n [\"path\", { d: \"M8 2v4\", key: \"1cmpym\" }],\n [\"path\", { d: \"M16 2v4\", key: \"4m81vk\" }],\n [\"rect\", { width: \"18\", height: \"18\", x: \"3\", y: \"4\", rx: \"2\", key: \"1hopcy\" }],\n [\"path\", { d: \"M3 10h18\", key: \"8toen8\" }],\n [\"path\", { d: \"M8 14h.01\", key: \"6423bh\" }],\n [\"path\", { d: \"M12 14h.01\", key: \"1etili\" }],\n [\"path\", { d: \"M16 14h.01\", key: \"1gbofw\" }],\n [\"path\", { d: \"M8 18h.01\", key: \"lrp35t\" }],\n [\"path\", { d: \"M12 18h.01\", key: \"mhygvu\" }],\n [\"path\", { d: \"M16 18h.01\", key: \"kzsmim\" }]\n]);\n\nexport { CalendarDays as default };\n//# sourceMappingURL=calendar-days.js.map\n","/**\n * @license lucide-react v0.441.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst CalendarRange = createLucideIcon(\"CalendarRange\", [\n [\"rect\", { width: \"18\", height: \"18\", x: \"3\", y: \"4\", rx: \"2\", key: \"1hopcy\" }],\n [\"path\", { d: \"M16 2v4\", key: \"4m81vk\" }],\n [\"path\", { d: \"M3 10h18\", key: \"8toen8\" }],\n [\"path\", { d: \"M8 2v4\", key: \"1cmpym\" }],\n [\"path\", { d: \"M17 14h-6\", key: \"bkmgh3\" }],\n [\"path\", { d: \"M13 18H7\", key: \"bb0bb7\" }],\n [\"path\", { d: \"M7 14h.01\", key: \"1qa3f1\" }],\n [\"path\", { d: \"M17 18h.01\", key: \"1bdyru\" }]\n]);\n\nexport { CalendarRange as default };\n//# sourceMappingURL=calendar-range.js.map\n","/**\n * @license lucide-react v0.441.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst Diamond = createLucideIcon(\"Diamond\", [\n [\n \"path\",\n {\n d: \"M2.7 10.3a2.41 2.41 0 0 0 0 3.41l7.59 7.59a2.41 2.41 0 0 0 3.41 0l7.59-7.59a2.41 2.41 0 0 0 0-3.41l-7.59-7.59a2.41 2.41 0 0 0-3.41 0Z\",\n key: \"1f1r0c\"\n }\n ]\n]);\n\nexport { Diamond as default };\n//# sourceMappingURL=diamond.js.map\n","/**\n * @license lucide-react v0.441.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst EyeOff = createLucideIcon(\"EyeOff\", [\n [\n \"path\",\n {\n d: \"M10.733 5.076a10.744 10.744 0 0 1 11.205 6.575 1 1 0 0 1 0 .696 10.747 10.747 0 0 1-1.444 2.49\",\n key: \"ct8e1f\"\n }\n ],\n [\"path\", { d: \"M14.084 14.158a3 3 0 0 1-4.242-4.242\", key: \"151rxh\" }],\n [\n \"path\",\n {\n d: \"M17.479 17.499a10.75 10.75 0 0 1-15.417-5.151 1 1 0 0 1 0-.696 10.75 10.75 0 0 1 4.446-5.143\",\n key: \"13bj9a\"\n }\n ],\n [\"path\", { d: \"m2 2 20 20\", key: \"1ooewy\" }]\n]);\n\nexport { EyeOff as default };\n//# sourceMappingURL=eye-off.js.map\n","/**\n * @license lucide-react v0.441.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst RotateCcw = createLucideIcon(\"RotateCcw\", [\n [\"path\", { d: \"M3 12a9 9 0 1 0 9-9 9.75 9.75 0 0 0-6.74 2.74L3 8\", key: \"1357e3\" }],\n [\"path\", { d: \"M3 3v5h5\", key: \"1xhq8a\" }]\n]);\n\nexport { RotateCcw as default };\n//# sourceMappingURL=rotate-ccw.js.map\n","/**\n * @license lucide-react v0.441.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst Save = createLucideIcon(\"Save\", [\n [\n \"path\",\n {\n d: \"M15.2 3a2 2 0 0 1 1.4.6l3.8 3.8a2 2 0 0 1 .6 1.4V19a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2z\",\n key: \"1c8476\"\n }\n ],\n [\"path\", { d: \"M17 21v-7a1 1 0 0 0-1-1H8a1 1 0 0 0-1 1v7\", key: \"1ydtos\" }],\n [\"path\", { d: \"M7 3v4a1 1 0 0 0 1 1h7\", key: \"t51u73\" }]\n]);\n\nexport { Save as default };\n//# sourceMappingURL=save.js.map\n","/**\n * @license lucide-react v0.441.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst Settings2 = createLucideIcon(\"Settings2\", [\n [\"path\", { d: \"M20 7h-9\", key: \"3s1dr2\" }],\n [\"path\", { d: \"M14 17H5\", key: \"gfn3mx\" }],\n [\"circle\", { cx: \"17\", cy: \"17\", r: \"3\", key: \"18b49y\" }],\n [\"circle\", { cx: \"7\", cy: \"7\", r: \"3\", key: \"dfmy0x\" }]\n]);\n\nexport { Settings2 as default };\n//# sourceMappingURL=settings-2.js.map\n","/**\n * @license lucide-react v0.441.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst SkipForward = createLucideIcon(\"SkipForward\", [\n [\"polygon\", { points: \"5 4 15 12 5 20 5 4\", key: \"16p6eg\" }],\n [\"line\", { x1: \"19\", x2: \"19\", y1: \"5\", y2: \"19\", key: \"futhcm\" }]\n]);\n\nexport { SkipForward as default };\n//# sourceMappingURL=skip-forward.js.map\n","/**\n * @license lucide-react v0.441.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst Target = createLucideIcon(\"Target\", [\n [\"circle\", { cx: \"12\", cy: \"12\", r: \"10\", key: \"1mglay\" }],\n [\"circle\", { cx: \"12\", cy: \"12\", r: \"6\", key: \"1vlfrh\" }],\n [\"circle\", { cx: \"12\", cy: \"12\", r: \"2\", key: \"1c9p78\" }]\n]);\n\nexport { Target as default };\n//# sourceMappingURL=target.js.map\n","/**\n * @license lucide-react v0.441.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst TrendingDown = createLucideIcon(\"TrendingDown\", [\n [\"polyline\", { points: \"22 17 13.5 8.5 8.5 13.5 2 7\", key: \"1r2t7k\" }],\n [\"polyline\", { points: \"16 17 22 17 22 11\", key: \"11uiuu\" }]\n]);\n\nexport { TrendingDown as default };\n//# sourceMappingURL=trending-down.js.map\n","/**\n * table-core\n *\n * Copyright (c) TanStack\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE.md file in the root directory of this source tree.\n *\n * @license MIT\n */\n// type Person = {\n// firstName: string\n// lastName: string\n// age: number\n// visits: number\n// status: string\n// progress: number\n// createdAt: Date\n// nested: {\n// foo: [\n// {\n// bar: 'bar'\n// }\n// ]\n// bar: { subBar: boolean }[]\n// baz: {\n// foo: 'foo'\n// bar: {\n// baz: 'baz'\n// }\n// }\n// }\n// }\n\n// const test: DeepKeys<Person> = 'nested.foo.0.bar'\n// const test2: DeepKeys<Person> = 'nested.bar'\n\n// const helper = createColumnHelper<Person>()\n\n// helper.accessor('nested.foo', {\n// cell: info => info.getValue(),\n// })\n\n// helper.accessor('nested.foo.0.bar', {\n// cell: info => info.getValue(),\n// })\n\n// helper.accessor('nested.bar', {\n// cell: info => info.getValue(),\n// })\n\nfunction createColumnHelper() {\n return {\n accessor: (accessor, column) => {\n return typeof accessor === 'function' ? {\n ...column,\n accessorFn: accessor\n } : {\n ...column,\n accessorKey: accessor\n };\n },\n display: column => column,\n group: column => column\n };\n}\n\n// Is this type a tuple?\n\n// If this type is a tuple, what indices are allowed?\n\n///\n\nfunction functionalUpdate(updater, input) {\n return typeof updater === 'function' ? updater(input) : updater;\n}\nfunction noop() {\n //\n}\nfunction makeStateUpdater(key, instance) {\n return updater => {\n instance.setState(old => {\n return {\n ...old,\n [key]: functionalUpdate(updater, old[key])\n };\n });\n };\n}\nfunction isFunction(d) {\n return d instanceof Function;\n}\nfunction isNumberArray(d) {\n return Array.isArray(d) && d.every(val => typeof val === 'number');\n}\nfunction flattenBy(arr, getChildren) {\n const flat = [];\n const recurse = subArr => {\n subArr.forEach(item => {\n flat.push(item);\n const children = getChildren(item);\n if (children != null && children.length) {\n recurse(children);\n }\n });\n };\n recurse(arr);\n return flat;\n}\nfunction memo(getDeps, fn, opts) {\n let deps = [];\n let result;\n return depArgs => {\n let depTime;\n if (opts.key && opts.debug) depTime = Date.now();\n const newDeps = getDeps(depArgs);\n const depsChanged = newDeps.length !== deps.length || newDeps.some((dep, index) => deps[index] !== dep);\n if (!depsChanged) {\n return result;\n }\n deps = newDeps;\n let resultTime;\n if (opts.key && opts.debug) resultTime = Date.now();\n result = fn(...newDeps);\n opts == null || opts.onChange == null || opts.onChange(result);\n if (opts.key && opts.debug) {\n if (opts != null && opts.debug()) {\n const depEndTime = Math.round((Date.now() - depTime) * 100) / 100;\n const resultEndTime = Math.round((Date.now() - resultTime) * 100) / 100;\n const resultFpsPercentage = resultEndTime / 16;\n const pad = (str, num) => {\n str = String(str);\n while (str.length < num) {\n str = ' ' + str;\n }\n return str;\n };\n console.info(`%c⏱ ${pad(resultEndTime, 5)} /${pad(depEndTime, 5)} ms`, `\n font-size: .6rem;\n font-weight: bold;\n color: hsl(${Math.max(0, Math.min(120 - 120 * resultFpsPercentage, 120))}deg 100% 31%);`, opts == null ? void 0 : opts.key);\n }\n }\n return result;\n };\n}\nfunction getMemoOptions(tableOptions, debugLevel, key, onChange) {\n return {\n debug: () => {\n var _tableOptions$debugAl;\n return (_tableOptions$debugAl = tableOptions == null ? void 0 : tableOptions.debugAll) != null ? _tableOptions$debugAl : tableOptions[debugLevel];\n },\n key: process.env.NODE_ENV === 'development' && key,\n onChange\n };\n}\n\nfunction createCell(table, row, column, columnId) {\n const getRenderValue = () => {\n var _cell$getValue;\n return (_cell$getValue = cell.getValue()) != null ? _cell$getValue : table.options.renderFallbackValue;\n };\n const cell = {\n id: `${row.id}_${column.id}`,\n row,\n column,\n getValue: () => row.getValue(columnId),\n renderValue: getRenderValue,\n getContext: memo(() => [table, column, row, cell], (table, column, row, cell) => ({\n table,\n column,\n row,\n cell: cell,\n getValue: cell.getValue,\n renderValue: cell.renderValue\n }), getMemoOptions(table.options, 'debugCells', 'cell.getContext'))\n };\n table._features.forEach(feature => {\n feature.createCell == null || feature.createCell(cell, column, row, table);\n }, {});\n return cell;\n}\n\nfunction createColumn(table, columnDef, depth, parent) {\n var _ref, _resolvedColumnDef$id;\n const defaultColumn = table._getDefaultColumnDef();\n const resolvedColumnDef = {\n ...defaultColumn,\n ...columnDef\n };\n const accessorKey = resolvedColumnDef.accessorKey;\n let id = (_ref = (_resolvedColumnDef$id = resolvedColumnDef.id) != null ? _resolvedColumnDef$id : accessorKey ? typeof String.prototype.replaceAll === 'function' ? accessorKey.replaceAll('.', '_') : accessorKey.replace(/\\./g, '_') : undefined) != null ? _ref : typeof resolvedColumnDef.header === 'string' ? resolvedColumnDef.header : undefined;\n let accessorFn;\n if (resolvedColumnDef.accessorFn) {\n accessorFn = resolvedColumnDef.accessorFn;\n } else if (accessorKey) {\n // Support deep accessor keys\n if (accessorKey.includes('.')) {\n accessorFn = originalRow => {\n let result = originalRow;\n for (const key of accessorKey.split('.')) {\n var _result;\n result = (_result = result) == null ? void 0 : _result[key];\n if (process.env.NODE_ENV !== 'production' && result === undefined) {\n console.warn(`\"${key}\" in deeply nested key \"${accessorKey}\" returned undefined.`);\n }\n }\n return result;\n };\n } else {\n accessorFn = originalRow => originalRow[resolvedColumnDef.accessorKey];\n }\n }\n if (!id) {\n if (process.env.NODE_ENV !== 'production') {\n throw new Error(resolvedColumnDef.accessorFn ? `Columns require an id when using an accessorFn` : `Columns require an id when using a non-string header`);\n }\n throw new Error();\n }\n let column = {\n id: `${String(id)}`,\n accessorFn,\n parent: parent,\n depth,\n columnDef: resolvedColumnDef,\n columns: [],\n getFlatColumns: memo(() => [true], () => {\n var _column$columns;\n return [column, ...((_column$columns = column.columns) == null ? void 0 : _column$columns.flatMap(d => d.getFlatColumns()))];\n }, getMemoOptions(table.options, 'debugColumns', 'column.getFlatColumns')),\n getLeafColumns: memo(() => [table._getOrderColumnsFn()], orderColumns => {\n var _column$columns2;\n if ((_column$columns2 = column.columns) != null && _column$columns2.length) {\n let leafColumns = column.columns.flatMap(column => column.getLeafColumns());\n return orderColumns(leafColumns);\n }\n return [column];\n }, getMemoOptions(table.options, 'debugColumns', 'column.getLeafColumns'))\n };\n for (const feature of table._features) {\n feature.createColumn == null || feature.createColumn(column, table);\n }\n\n // Yes, we have to convert table to unknown, because we know more than the compiler here.\n return column;\n}\n\nconst debug = 'debugHeaders';\n//\n\nfunction createHeader(table, column, options) {\n var _options$id;\n const id = (_options$id = options.id) != null ? _options$id : column.id;\n let header = {\n id,\n column,\n index: options.index,\n isPlaceholder: !!options.isPlaceholder,\n placeholderId: options.placeholderId,\n depth: options.depth,\n subHeaders: [],\n colSpan: 0,\n rowSpan: 0,\n headerGroup: null,\n getLeafHeaders: () => {\n const leafHeaders = [];\n const recurseHeader = h => {\n if (h.subHeaders && h.subHeaders.length) {\n h.subHeaders.map(recurseHeader);\n }\n leafHeaders.push(h);\n };\n recurseHeader(header);\n return leafHeaders;\n },\n getContext: () => ({\n table,\n header: header,\n column\n })\n };\n table._features.forEach(feature => {\n feature.createHeader == null || feature.createHeader(header, table);\n });\n return header;\n}\nconst Headers = {\n createTable: table => {\n // Header Groups\n\n table.getHeaderGroups = memo(() => [table.getAllColumns(), table.getVisibleLeafColumns(), table.getState().columnPinning.left, table.getState().columnPinning.right], (allColumns, leafColumns, left, right) => {\n var _left$map$filter, _right$map$filter;\n const leftColumns = (_left$map$filter = left == null ? void 0 : left.map(columnId => leafColumns.find(d => d.id === columnId)).filter(Boolean)) != null ? _left$map$filter : [];\n const rightColumns = (_right$map$filter = right == null ? void 0 : right.map(columnId => leafColumns.find(d => d.id === columnId)).filter(Boolean)) != null ? _right$map$filter : [];\n const centerColumns = leafColumns.filter(column => !(left != null && left.includes(column.id)) && !(right != null && right.includes(column.id)));\n const headerGroups = buildHeaderGroups(allColumns, [...leftColumns, ...centerColumns, ...rightColumns], table);\n return headerGroups;\n }, getMemoOptions(table.options, debug, 'getHeaderGroups'));\n table.getCenterHeaderGroups = memo(() => [table.getAllColumns(), table.getVisibleLeafColumns(), table.getState().columnPinning.left, table.getState().columnPinning.right], (allColumns, leafColumns, left, right) => {\n leafColumns = leafColumns.filter(column => !(left != null && left.includes(column.id)) && !(right != null && right.includes(column.id)));\n return buildHeaderGroups(allColumns, leafColumns, table, 'center');\n }, getMemoOptions(table.options, debug, 'getCenterHeaderGroups'));\n table.getLeftHeaderGroups = memo(() => [table.getAllColumns(), table.getVisibleLeafColumns(), table.getState().columnPinning.left], (allColumns, leafColumns, left) => {\n var _left$map$filter2;\n const orderedLeafColumns = (_left$map$filter2 = left == null ? void 0 : left.map(columnId => leafColumns.find(d => d.id === columnId)).filter(Boolean)) != null ? _left$map$filter2 : [];\n return buildHeaderGroups(allColumns, orderedLeafColumns, table, 'left');\n }, getMemoOptions(table.options, debug, 'getLeftHeaderGroups'));\n table.getRightHeaderGroups = memo(() => [table.getAllColumns(), table.getVisibleLeafColumns(), table.getState().columnPinning.right], (allColumns, leafColumns, right) => {\n var _right$map$filter2;\n const orderedLeafColumns = (_right$map$filter2 = right == null ? void 0 : right.map(columnId => leafColumns.find(d => d.id === columnId)).filter(Boolean)) != null ? _right$map$filter2 : [];\n return buildHeaderGroups(allColumns, orderedLeafColumns, table, 'right');\n }, getMemoOptions(table.options, debug, 'getRightHeaderGroups'));\n\n // Footer Groups\n\n table.getFooterGroups = memo(() => [table.getHeaderGroups()], headerGroups => {\n return [...headerGroups].reverse();\n }, getMemoOptions(table.options, debug, 'getFooterGroups'));\n table.getLeftFooterGroups = memo(() => [table.getLeftHeaderGroups()], headerGroups => {\n return [...headerGroups].reverse();\n }, getMemoOptions(table.options, debug, 'getLeftFooterGroups'));\n table.getCenterFooterGroups = memo(() => [table.getCenterHeaderGroups()], headerGroups => {\n return [...headerGroups].reverse();\n }, getMemoOptions(table.options, debug, 'getCenterFooterGroups'));\n table.getRightFooterGroups = memo(() => [table.getRightHeaderGroups()], headerGroups => {\n return [...headerGroups].reverse();\n }, getMemoOptions(table.options, debug, 'getRightFooterGroups'));\n\n // Flat Headers\n\n table.getFlatHeaders = memo(() => [table.getHeaderGroups()], headerGroups => {\n return headerGroups.map(headerGroup => {\n return headerGroup.headers;\n }).flat();\n }, getMemoOptions(table.options, debug, 'getFlatHeaders'));\n table.getLeftFlatHeaders = memo(() => [table.getLeftHeaderGroups()], left => {\n return left.map(headerGroup => {\n return headerGroup.headers;\n }).flat();\n }, getMemoOptions(table.options, debug, 'getLeftFlatHeaders'));\n table.getCenterFlatHeaders = memo(() => [table.getCenterHeaderGroups()], left => {\n return left.map(headerGroup => {\n return headerGroup.headers;\n }).flat();\n }, getMemoOptions(table.options, debug, 'getCenterFlatHeaders'));\n table.getRightFlatHeaders = memo(() => [table.getRightHeaderGroups()], left => {\n return left.map(headerGroup => {\n return headerGroup.headers;\n }).flat();\n }, getMemoOptions(table.options, debug, 'getRightFlatHeaders'));\n\n // Leaf Headers\n\n table.getCenterLeafHeaders = memo(() => [table.getCenterFlatHeaders()], flatHeaders => {\n return flatHeaders.filter(header => {\n var _header$subHeaders;\n return !((_header$subHeaders = header.subHeaders) != null && _header$subHeaders.length);\n });\n }, getMemoOptions(table.options, debug, 'getCenterLeafHeaders'));\n table.getLeftLeafHeaders = memo(() => [table.getLeftFlatHeaders()], flatHeaders => {\n return flatHeaders.filter(header => {\n var _header$subHeaders2;\n return !((_header$subHeaders2 = header.subHeaders) != null && _header$subHeaders2.length);\n });\n }, getMemoOptions(table.options, debug, 'getLeftLeafHeaders'));\n table.getRightLeafHeaders = memo(() => [table.getRightFlatHeaders()], flatHeaders => {\n return flatHeaders.filter(header => {\n var _header$subHeaders3;\n return !((_header$subHeaders3 = header.subHeaders) != null && _header$subHeaders3.length);\n });\n }, getMemoOptions(table.options, debug, 'getRightLeafHeaders'));\n table.getLeafHeaders = memo(() => [table.getLeftHeaderGroups(), table.getCenterHeaderGroups(), table.getRightHeaderGroups()], (left, center, right) => {\n var _left$0$headers, _left$, _center$0$headers, _center$, _right$0$headers, _right$;\n return [...((_left$0$headers = (_left$ = left[0]) == null ? void 0 : _left$.headers) != null ? _left$0$headers : []), ...((_center$0$headers = (_center$ = center[0]) == null ? void 0 : _center$.headers) != null ? _center$0$headers : []), ...((_right$0$headers = (_right$ = right[0]) == null ? void 0 : _right$.headers) != null ? _right$0$headers : [])].map(header => {\n return header.getLeafHeaders();\n }).flat();\n }, getMemoOptions(table.options, debug, 'getLeafHeaders'));\n }\n};\nfunction buildHeaderGroups(allColumns, columnsToGroup, table, headerFamily) {\n var _headerGroups$0$heade, _headerGroups$;\n // Find the max depth of the columns:\n // build the leaf column row\n // build each buffer row going up\n // placeholder for non-existent level\n // real column for existing level\n\n let maxDepth = 0;\n const findMaxDepth = function (columns, depth) {\n if (depth === void 0) {\n depth = 1;\n }\n maxDepth = Math.max(maxDepth, depth);\n columns.filter(column => column.getIsVisible()).forEach(column => {\n var _column$columns;\n if ((_column$columns = column.columns) != null && _column$columns.length) {\n findMaxDepth(column.columns, depth + 1);\n }\n }, 0);\n };\n findMaxDepth(allColumns);\n let headerGroups = [];\n const createHeaderGroup = (headersToGroup, depth) => {\n // The header group we are creating\n const headerGroup = {\n depth,\n id: [headerFamily, `${depth}`].filter(Boolean).join('_'),\n headers: []\n };\n\n // The parent columns we're going to scan next\n const pendingParentHeaders = [];\n\n // Scan each column for parents\n headersToGroup.forEach(headerToGroup => {\n // What is the latest (last) parent column?\n\n const latestPendingParentHeader = [...pendingParentHeaders].reverse()[0];\n const isLeafHeader = headerToGroup.column.depth === headerGroup.depth;\n let column;\n let isPlaceholder = false;\n if (isLeafHeader && headerToGroup.column.parent) {\n // The parent header is new\n column = headerToGroup.column.parent;\n } else {\n // The parent header is repeated\n column = headerToGroup.column;\n isPlaceholder = true;\n }\n if (latestPendingParentHeader && (latestPendingParentHeader == null ? void 0 : latestPendingParentHeader.column) === column) {\n // This column is repeated. Add it as a sub header to the next batch\n latestPendingParentHeader.subHeaders.push(headerToGroup);\n } else {\n // This is a new header. Let's create it\n const header = createHeader(table, column, {\n id: [headerFamily, depth, column.id, headerToGroup == null ? void 0 : headerToGroup.id].filter(Boolean).join('_'),\n isPlaceholder,\n placeholderId: isPlaceholder ? `${pendingParentHeaders.filter(d => d.column === column).length}` : undefined,\n depth,\n index: pendingParentHeaders.length\n });\n\n // Add the headerToGroup as a subHeader of the new header\n header.subHeaders.push(headerToGroup);\n // Add the new header to the pendingParentHeaders to get grouped\n // in the next batch\n pendingParentHeaders.push(header);\n }\n headerGroup.headers.push(headerToGroup);\n headerToGroup.headerGroup = headerGroup;\n });\n headerGroups.push(headerGroup);\n if (depth > 0) {\n createHeaderGroup(pendingParentHeaders, depth - 1);\n }\n };\n const bottomHeaders = columnsToGroup.map((column, index) => createHeader(table, column, {\n depth: maxDepth,\n index\n }));\n createHeaderGroup(bottomHeaders, maxDepth - 1);\n headerGroups.reverse();\n\n // headerGroups = headerGroups.filter(headerGroup => {\n // return !headerGroup.headers.every(header => header.isPlaceholder)\n // })\n\n const recurseHeadersForSpans = headers => {\n const filteredHeaders = headers.filter(header => header.column.getIsVisible());\n return filteredHeaders.map(header => {\n let colSpan = 0;\n let rowSpan = 0;\n let childRowSpans = [0];\n if (header.subHeaders && header.subHeaders.length) {\n childRowSpans = [];\n recurseHeadersForSpans(header.subHeaders).forEach(_ref => {\n let {\n colSpan: childColSpan,\n rowSpan: childRowSpan\n } = _ref;\n colSpan += childColSpan;\n childRowSpans.push(childRowSpan);\n });\n } else {\n colSpan = 1;\n }\n const minChildRowSpan = Math.min(...childRowSpans);\n rowSpan = rowSpan + minChildRowSpan;\n header.colSpan = colSpan;\n header.rowSpan = rowSpan;\n return {\n colSpan,\n rowSpan\n };\n });\n };\n recurseHeadersForSpans((_headerGroups$0$heade = (_headerGroups$ = headerGroups[0]) == null ? void 0 : _headerGroups$.headers) != null ? _headerGroups$0$heade : []);\n return headerGroups;\n}\n\nconst createRow = (table, id, original, rowIndex, depth, subRows, parentId) => {\n let row = {\n id,\n index: rowIndex,\n original,\n depth,\n parentId,\n _valuesCache: {},\n _uniqueValuesCache: {},\n getValue: columnId => {\n if (row._valuesCache.hasOwnProperty(columnId)) {\n return row._valuesCache[columnId];\n }\n const column = table.getColumn(columnId);\n if (!(column != null && column.accessorFn)) {\n return undefined;\n }\n row._valuesCache[columnId] = column.accessorFn(row.original, rowIndex);\n return row._valuesCache[columnId];\n },\n getUniqueValues: columnId => {\n if (row._uniqueValuesCache.hasOwnProperty(columnId)) {\n return row._uniqueValuesCache[columnId];\n }\n const column = table.getColumn(columnId);\n if (!(column != null && column.accessorFn)) {\n return undefined;\n }\n if (!column.columnDef.getUniqueValues) {\n row._uniqueValuesCache[columnId] = [row.getValue(columnId)];\n return row._uniqueValuesCache[columnId];\n }\n row._uniqueValuesCache[columnId] = column.columnDef.getUniqueValues(row.original, rowIndex);\n return row._uniqueValuesCache[columnId];\n },\n renderValue: columnId => {\n var _row$getValue;\n return (_row$getValue = row.getValue(columnId)) != null ? _row$getValue : table.options.renderFallbackValue;\n },\n subRows: subRows != null ? subRows : [],\n getLeafRows: () => flattenBy(row.subRows, d => d.subRows),\n getParentRow: () => row.parentId ? table.getRow(row.parentId, true) : undefined,\n getParentRows: () => {\n let parentRows = [];\n let currentRow = row;\n while (true) {\n const parentRow = currentRow.getParentRow();\n if (!parentRow) break;\n parentRows.push(parentRow);\n currentRow = parentRow;\n }\n return parentRows.reverse();\n },\n getAllCells: memo(() => [table.getAllLeafColumns()], leafColumns => {\n return leafColumns.map(column => {\n return createCell(table, row, column, column.id);\n });\n }, getMemoOptions(table.options, 'debugRows', 'getAllCells')),\n _getAllCellsByColumnId: memo(() => [row.getAllCells()], allCells => {\n return allCells.reduce((acc, cell) => {\n acc[cell.column.id] = cell;\n return acc;\n }, {});\n }, getMemoOptions(table.options, 'debugRows', 'getAllCellsByColumnId'))\n };\n for (let i = 0; i < table._features.length; i++) {\n const feature = table._features[i];\n feature == null || feature.createRow == null || feature.createRow(row, table);\n }\n return row;\n};\n\n//\n\nconst ColumnFaceting = {\n createColumn: (column, table) => {\n column._getFacetedRowModel = table.options.getFacetedRowModel && table.options.getFacetedRowModel(table, column.id);\n column.getFacetedRowModel = () => {\n if (!column._getFacetedRowModel) {\n return table.getPreFilteredRowModel();\n }\n return column._getFacetedRowModel();\n };\n column._getFacetedUniqueValues = table.options.getFacetedUniqueValues && table.options.getFacetedUniqueValues(table, column.id);\n column.getFacetedUniqueValues = () => {\n if (!column._getFacetedUniqueValues) {\n return new Map();\n }\n return column._getFacetedUniqueValues();\n };\n column._getFacetedMinMaxValues = table.options.getFacetedMinMaxValues && table.options.getFacetedMinMaxValues(table, column.id);\n column.getFacetedMinMaxValues = () => {\n if (!column._getFacetedMinMaxValues) {\n return undefined;\n }\n return column._getFacetedMinMaxValues();\n };\n }\n};\n\nconst includesString = (row, columnId, filterValue) => {\n var _filterValue$toString, _row$getValue;\n const search = filterValue == null || (_filterValue$toString = filterValue.toString()) == null ? void 0 : _filterValue$toString.toLowerCase();\n return Boolean((_row$getValue = row.getValue(columnId)) == null || (_row$getValue = _row$getValue.toString()) == null || (_row$getValue = _row$getValue.toLowerCase()) == null ? void 0 : _row$getValue.includes(search));\n};\nincludesString.autoRemove = val => testFalsey(val);\nconst includesStringSensitive = (row, columnId, filterValue) => {\n var _row$getValue2;\n return Boolean((_row$getValue2 = row.getValue(columnId)) == null || (_row$getValue2 = _row$getValue2.toString()) == null ? void 0 : _row$getValue2.includes(filterValue));\n};\nincludesStringSensitive.autoRemove = val => testFalsey(val);\nconst equalsString = (row, columnId, filterValue) => {\n var _row$getValue3;\n return ((_row$getValue3 = row.getValue(columnId)) == null || (_row$getValue3 = _row$getValue3.toString()) == null ? void 0 : _row$getValue3.toLowerCase()) === (filterValue == null ? void 0 : filterValue.toLowerCase());\n};\nequalsString.autoRemove = val => testFalsey(val);\nconst arrIncludes = (row, columnId, filterValue) => {\n var _row$getValue4;\n return (_row$getValue4 = row.getValue(columnId)) == null ? void 0 : _row$getValue4.includes(filterValue);\n};\narrIncludes.autoRemove = val => testFalsey(val);\nconst arrIncludesAll = (row, columnId, filterValue) => {\n return !filterValue.some(val => {\n var _row$getValue5;\n return !((_row$getValue5 = row.getValue(columnId)) != null && _row$getValue5.includes(val));\n });\n};\narrIncludesAll.autoRemove = val => testFalsey(val) || !(val != null && val.length);\nconst arrIncludesSome = (row, columnId, filterValue) => {\n return filterValue.some(val => {\n var _row$getValue6;\n return (_row$getValue6 = row.getValue(columnId)) == null ? void 0 : _row$getValue6.includes(val);\n });\n};\narrIncludesSome.autoRemove = val => testFalsey(val) || !(val != null && val.length);\nconst equals = (row, columnId, filterValue) => {\n return row.getValue(columnId) === filterValue;\n};\nequals.autoRemove = val => testFalsey(val);\nconst weakEquals = (row, columnId, filterValue) => {\n return row.getValue(columnId) == filterValue;\n};\nweakEquals.autoRemove = val => testFalsey(val);\nconst inNumberRange = (row, columnId, filterValue) => {\n let [min, max] = filterValue;\n const rowValue = row.getValue(columnId);\n return rowValue >= min && rowValue <= max;\n};\ninNumberRange.resolveFilterValue = val => {\n let [unsafeMin, unsafeMax] = val;\n let parsedMin = typeof unsafeMin !== 'number' ? parseFloat(unsafeMin) : unsafeMin;\n let parsedMax = typeof unsafeMax !== 'number' ? parseFloat(unsafeMax) : unsafeMax;\n let min = unsafeMin === null || Number.isNaN(parsedMin) ? -Infinity : parsedMin;\n let max = unsafeMax === null || Number.isNaN(parsedMax) ? Infinity : parsedMax;\n if (min > max) {\n const temp = min;\n min = max;\n max = temp;\n }\n return [min, max];\n};\ninNumberRange.autoRemove = val => testFalsey(val) || testFalsey(val[0]) && testFalsey(val[1]);\n\n// Export\n\nconst filterFns = {\n includesString,\n includesStringSensitive,\n equalsString,\n arrIncludes,\n arrIncludesAll,\n arrIncludesSome,\n equals,\n weakEquals,\n inNumberRange\n};\n// Utils\n\nfunction testFalsey(val) {\n return val === undefined || val === null || val === '';\n}\n\n//\n\nconst ColumnFiltering = {\n getDefaultColumnDef: () => {\n return {\n filterFn: 'auto'\n };\n },\n getInitialState: state => {\n return {\n columnFilters: [],\n ...state\n };\n },\n getDefaultOptions: table => {\n return {\n onColumnFiltersChange: makeStateUpdater('columnFilters', table),\n filterFromLeafRows: false,\n maxLeafRowFilterDepth: 100\n };\n },\n createColumn: (column, table) => {\n column.getAutoFilterFn = () => {\n const firstRow = table.getCoreRowModel().flatRows[0];\n const value = firstRow == null ? void 0 : firstRow.getValue(column.id);\n if (typeof value === 'string') {\n return filterFns.includesString;\n }\n if (typeof value === 'number') {\n return filterFns.inNumberRange;\n }\n if (typeof value === 'boolean') {\n return filterFns.equals;\n }\n if (value !== null && typeof value === 'object') {\n return filterFns.equals;\n }\n if (Array.isArray(value)) {\n return filterFns.arrIncludes;\n }\n return filterFns.weakEquals;\n };\n column.getFilterFn = () => {\n var _table$options$filter, _table$options$filter2;\n return isFunction(column.columnDef.filterFn) ? column.columnDef.filterFn : column.columnDef.filterFn === 'auto' ? column.getAutoFilterFn() : // @ts-ignore\n (_table$options$filter = (_table$options$filter2 = table.options.filterFns) == null ? void 0 : _table$options$filter2[column.columnDef.filterFn]) != null ? _table$options$filter : filterFns[column.columnDef.filterFn];\n };\n column.getCanFilter = () => {\n var _column$columnDef$ena, _table$options$enable, _table$options$enable2;\n return ((_column$columnDef$ena = column.columnDef.enableColumnFilter) != null ? _column$columnDef$ena : true) && ((_table$options$enable = table.options.enableColumnFilters) != null ? _table$options$enable : true) && ((_table$options$enable2 = table.options.enableFilters) != null ? _table$options$enable2 : true) && !!column.accessorFn;\n };\n column.getIsFiltered = () => column.getFilterIndex() > -1;\n column.getFilterValue = () => {\n var _table$getState$colum;\n return (_table$getState$colum = table.getState().columnFilters) == null || (_table$getState$colum = _table$getState$colum.find(d => d.id === column.id)) == null ? void 0 : _table$getState$colum.value;\n };\n column.getFilterIndex = () => {\n var _table$getState$colum2, _table$getState$colum3;\n return (_table$getState$colum2 = (_table$getState$colum3 = table.getState().columnFilters) == null ? void 0 : _table$getState$colum3.findIndex(d => d.id === column.id)) != null ? _table$getState$colum2 : -1;\n };\n column.setFilterValue = value => {\n table.setColumnFilters(old => {\n const filterFn = column.getFilterFn();\n const previousFilter = old == null ? void 0 : old.find(d => d.id === column.id);\n const newFilter = functionalUpdate(value, previousFilter ? previousFilter.value : undefined);\n\n //\n if (shouldAutoRemoveFilter(filterFn, newFilter, column)) {\n var _old$filter;\n return (_old$filter = old == null ? void 0 : old.filter(d => d.id !== column.id)) != null ? _old$filter : [];\n }\n const newFilterObj = {\n id: column.id,\n value: newFilter\n };\n if (previousFilter) {\n var _old$map;\n return (_old$map = old == null ? void 0 : old.map(d => {\n if (d.id === column.id) {\n return newFilterObj;\n }\n return d;\n })) != null ? _old$map : [];\n }\n if (old != null && old.length) {\n return [...old, newFilterObj];\n }\n return [newFilterObj];\n });\n };\n },\n createRow: (row, _table) => {\n row.columnFilters = {};\n row.columnFiltersMeta = {};\n },\n createTable: table => {\n table.setColumnFilters = updater => {\n const leafColumns = table.getAllLeafColumns();\n const updateFn = old => {\n var _functionalUpdate;\n return (_functionalUpdate = functionalUpdate(updater, old)) == null ? void 0 : _functionalUpdate.filter(filter => {\n const column = leafColumns.find(d => d.id === filter.id);\n if (column) {\n const filterFn = column.getFilterFn();\n if (shouldAutoRemoveFilter(filterFn, filter.value, column)) {\n return false;\n }\n }\n return true;\n });\n };\n table.options.onColumnFiltersChange == null || table.options.onColumnFiltersChange(updateFn);\n };\n table.resetColumnFilters = defaultState => {\n var _table$initialState$c, _table$initialState;\n table.setColumnFilters(defaultState ? [] : (_table$initialState$c = (_table$initialState = table.initialState) == null ? void 0 : _table$initialState.columnFilters) != null ? _table$initialState$c : []);\n };\n table.getPreFilteredRowModel = () => table.getCoreRowModel();\n table.getFilteredRowModel = () => {\n if (!table._getFilteredRowModel && table.options.getFilteredRowModel) {\n table._getFilteredRowModel = table.options.getFilteredRowModel(table);\n }\n if (table.options.manualFiltering || !table._getFilteredRowModel) {\n return table.getPreFilteredRowModel();\n }\n return table._getFilteredRowModel();\n };\n }\n};\nfunction shouldAutoRemoveFilter(filterFn, value, column) {\n return (filterFn && filterFn.autoRemove ? filterFn.autoRemove(value, column) : false) || typeof value === 'undefined' || typeof value === 'string' && !value;\n}\n\nconst sum = (columnId, _leafRows, childRows) => {\n // It's faster to just add the aggregations together instead of\n // process leaf nodes individually\n return childRows.reduce((sum, next) => {\n const nextValue = next.getValue(columnId);\n return sum + (typeof nextValue === 'number' ? nextValue : 0);\n }, 0);\n};\nconst min = (columnId, _leafRows, childRows) => {\n let min;\n childRows.forEach(row => {\n const value = row.getValue(columnId);\n if (value != null && (min > value || min === undefined && value >= value)) {\n min = value;\n }\n });\n return min;\n};\nconst max = (columnId, _leafRows, childRows) => {\n let max;\n childRows.forEach(row => {\n const value = row.getValue(columnId);\n if (value != null && (max < value || max === undefined && value >= value)) {\n max = value;\n }\n });\n return max;\n};\nconst extent = (columnId, _leafRows, childRows) => {\n let min;\n let max;\n childRows.forEach(row => {\n const value = row.getValue(columnId);\n if (value != null) {\n if (min === undefined) {\n if (value >= value) min = max = value;\n } else {\n if (min > value) min = value;\n if (max < value) max = value;\n }\n }\n });\n return [min, max];\n};\nconst mean = (columnId, leafRows) => {\n let count = 0;\n let sum = 0;\n leafRows.forEach(row => {\n let value = row.getValue(columnId);\n if (value != null && (value = +value) >= value) {\n ++count, sum += value;\n }\n });\n if (count) return sum / count;\n return;\n};\nconst median = (columnId, leafRows) => {\n if (!leafRows.length) {\n return;\n }\n const values = leafRows.map(row => row.getValue(columnId));\n if (!isNumberArray(values)) {\n return;\n }\n if (values.length === 1) {\n return values[0];\n }\n const mid = Math.floor(values.length / 2);\n const nums = values.sort((a, b) => a - b);\n return values.length % 2 !== 0 ? nums[mid] : (nums[mid - 1] + nums[mid]) / 2;\n};\nconst unique = (columnId, leafRows) => {\n return Array.from(new Set(leafRows.map(d => d.getValue(columnId))).values());\n};\nconst uniqueCount = (columnId, leafRows) => {\n return new Set(leafRows.map(d => d.getValue(columnId))).size;\n};\nconst count = (_columnId, leafRows) => {\n return leafRows.length;\n};\nconst aggregationFns = {\n sum,\n min,\n max,\n extent,\n mean,\n median,\n unique,\n uniqueCount,\n count\n};\n\n//\n\nconst ColumnGrouping = {\n getDefaultColumnDef: () => {\n return {\n aggregatedCell: props => {\n var _toString, _props$getValue;\n return (_toString = (_props$getValue = props.getValue()) == null || _props$getValue.toString == null ? void 0 : _props$getValue.toString()) != null ? _toString : null;\n },\n aggregationFn: 'auto'\n };\n },\n getInitialState: state => {\n return {\n grouping: [],\n ...state\n };\n },\n getDefaultOptions: table => {\n return {\n onGroupingChange: makeStateUpdater('grouping', table),\n groupedColumnMode: 'reorder'\n };\n },\n createColumn: (column, table) => {\n column.toggleGrouping = () => {\n table.setGrouping(old => {\n // Find any existing grouping for this column\n if (old != null && old.includes(column.id)) {\n return old.filter(d => d !== column.id);\n }\n return [...(old != null ? old : []), column.id];\n });\n };\n column.getCanGroup = () => {\n var _column$columnDef$ena, _table$options$enable;\n return ((_column$columnDef$ena = column.columnDef.enableGrouping) != null ? _column$columnDef$ena : true) && ((_table$options$enable = table.options.enableGrouping) != null ? _table$options$enable : true) && (!!column.accessorFn || !!column.columnDef.getGroupingValue);\n };\n column.getIsGrouped = () => {\n var _table$getState$group;\n return (_table$getState$group = table.getState().grouping) == null ? void 0 : _table$getState$group.includes(column.id);\n };\n column.getGroupedIndex = () => {\n var _table$getState$group2;\n return (_table$getState$group2 = table.getState().grouping) == null ? void 0 : _table$getState$group2.indexOf(column.id);\n };\n column.getToggleGroupingHandler = () => {\n const canGroup = column.getCanGroup();\n return () => {\n if (!canGroup) return;\n column.toggleGrouping();\n };\n };\n column.getAutoAggregationFn = () => {\n const firstRow = table.getCoreRowModel().flatRows[0];\n const value = firstRow == null ? void 0 : firstRow.getValue(column.id);\n if (typeof value === 'number') {\n return aggregationFns.sum;\n }\n if (Object.prototype.toString.call(value) === '[object Date]') {\n return aggregationFns.extent;\n }\n };\n column.getAggregationFn = () => {\n var _table$options$aggreg, _table$options$aggreg2;\n if (!column) {\n throw new Error();\n }\n return isFunction(column.columnDef.aggregationFn) ? column.columnDef.aggregationFn : column.columnDef.aggregationFn === 'auto' ? column.getAutoAggregationFn() : (_table$options$aggreg = (_table$options$aggreg2 = table.options.aggregationFns) == null ? void 0 : _table$options$aggreg2[column.columnDef.aggregationFn]) != null ? _table$options$aggreg : aggregationFns[column.columnDef.aggregationFn];\n };\n },\n createTable: table => {\n table.setGrouping = updater => table.options.onGroupingChange == null ? void 0 : table.options.onGroupingChange(updater);\n table.resetGrouping = defaultState => {\n var _table$initialState$g, _table$initialState;\n table.setGrouping(defaultState ? [] : (_table$initialState$g = (_table$initialState = table.initialState) == null ? void 0 : _table$initialState.grouping) != null ? _table$initialState$g : []);\n };\n table.getPreGroupedRowModel = () => table.getFilteredRowModel();\n table.getGroupedRowModel = () => {\n if (!table._getGroupedRowModel && table.options.getGroupedRowModel) {\n table._getGroupedRowModel = table.options.getGroupedRowModel(table);\n }\n if (table.options.manualGrouping || !table._getGroupedRowModel) {\n return table.getPreGroupedRowModel();\n }\n return table._getGroupedRowModel();\n };\n },\n createRow: (row, table) => {\n row.getIsGrouped = () => !!row.groupingColumnId;\n row.getGroupingValue = columnId => {\n if (row._groupingValuesCache.hasOwnProperty(columnId)) {\n return row._groupingValuesCache[columnId];\n }\n const column = table.getColumn(columnId);\n if (!(column != null && column.columnDef.getGroupingValue)) {\n return row.getValue(columnId);\n }\n row._groupingValuesCache[columnId] = column.columnDef.getGroupingValue(row.original);\n return row._groupingValuesCache[columnId];\n };\n row._groupingValuesCache = {};\n },\n createCell: (cell, column, row, table) => {\n cell.getIsGrouped = () => column.getIsGrouped() && column.id === row.groupingColumnId;\n cell.getIsPlaceholder = () => !cell.getIsGrouped() && column.getIsGrouped();\n cell.getIsAggregated = () => {\n var _row$subRows;\n return !cell.getIsGrouped() && !cell.getIsPlaceholder() && !!((_row$subRows = row.subRows) != null && _row$subRows.length);\n };\n }\n};\nfunction orderColumns(leafColumns, grouping, groupedColumnMode) {\n if (!(grouping != null && grouping.length) || !groupedColumnMode) {\n return leafColumns;\n }\n const nonGroupingColumns = leafColumns.filter(col => !grouping.includes(col.id));\n if (groupedColumnMode === 'remove') {\n return nonGroupingColumns;\n }\n const groupingColumns = grouping.map(g => leafColumns.find(col => col.id === g)).filter(Boolean);\n return [...groupingColumns, ...nonGroupingColumns];\n}\n\n//\n\nconst ColumnOrdering = {\n getInitialState: state => {\n return {\n columnOrder: [],\n ...state\n };\n },\n getDefaultOptions: table => {\n return {\n onColumnOrderChange: makeStateUpdater('columnOrder', table)\n };\n },\n createColumn: (column, table) => {\n column.getIndex = memo(position => [_getVisibleLeafColumns(table, position)], columns => columns.findIndex(d => d.id === column.id), getMemoOptions(table.options, 'debugColumns', 'getIndex'));\n column.getIsFirstColumn = position => {\n var _columns$;\n const columns = _getVisibleLeafColumns(table, position);\n return ((_columns$ = columns[0]) == null ? void 0 : _columns$.id) === column.id;\n };\n column.getIsLastColumn = position => {\n var _columns;\n const columns = _getVisibleLeafColumns(table, position);\n return ((_columns = columns[columns.length - 1]) == null ? void 0 : _columns.id) === column.id;\n };\n },\n createTable: table => {\n table.setColumnOrder = updater => table.options.onColumnOrderChange == null ? void 0 : table.options.onColumnOrderChange(updater);\n table.resetColumnOrder = defaultState => {\n var _table$initialState$c;\n table.setColumnOrder(defaultState ? [] : (_table$initialState$c = table.initialState.columnOrder) != null ? _table$initialState$c : []);\n };\n table._getOrderColumnsFn = memo(() => [table.getState().columnOrder, table.getState().grouping, table.options.groupedColumnMode], (columnOrder, grouping, groupedColumnMode) => columns => {\n // Sort grouped columns to the start of the column list\n // before the headers are built\n let orderedColumns = [];\n\n // If there is no order, return the normal columns\n if (!(columnOrder != null && columnOrder.length)) {\n orderedColumns = columns;\n } else {\n const columnOrderCopy = [...columnOrder];\n\n // If there is an order, make a copy of the columns\n const columnsCopy = [...columns];\n\n // And make a new ordered array of the columns\n\n // Loop over the columns and place them in order into the new array\n while (columnsCopy.length && columnOrderCopy.length) {\n const targetColumnId = columnOrderCopy.shift();\n const foundIndex = columnsCopy.findIndex(d => d.id === targetColumnId);\n if (foundIndex > -1) {\n orderedColumns.push(columnsCopy.splice(foundIndex, 1)[0]);\n }\n }\n\n // If there are any columns left, add them to the end\n orderedColumns = [...orderedColumns, ...columnsCopy];\n }\n return orderColumns(orderedColumns, grouping, groupedColumnMode);\n }, getMemoOptions(table.options, 'debugTable', '_getOrderColumnsFn'));\n }\n};\n\n//\n\nconst getDefaultColumnPinningState = () => ({\n left: [],\n right: []\n});\nconst ColumnPinning = {\n getInitialState: state => {\n return {\n columnPinning: getDefaultColumnPinningState(),\n ...state\n };\n },\n getDefaultOptions: table => {\n return {\n onColumnPinningChange: makeStateUpdater('columnPinning', table)\n };\n },\n createColumn: (column, table) => {\n column.pin = position => {\n const columnIds = column.getLeafColumns().map(d => d.id).filter(Boolean);\n table.setColumnPinning(old => {\n var _old$left3, _old$right3;\n if (position === 'right') {\n var _old$left, _old$right;\n return {\n left: ((_old$left = old == null ? void 0 : old.left) != null ? _old$left : []).filter(d => !(columnIds != null && columnIds.includes(d))),\n right: [...((_old$right = old == null ? void 0 : old.right) != null ? _old$right : []).filter(d => !(columnIds != null && columnIds.includes(d))), ...columnIds]\n };\n }\n if (position === 'left') {\n var _old$left2, _old$right2;\n return {\n left: [...((_old$left2 = old == null ? void 0 : old.left) != null ? _old$left2 : []).filter(d => !(columnIds != null && columnIds.includes(d))), ...columnIds],\n right: ((_old$right2 = old == null ? void 0 : old.right) != null ? _old$right2 : []).filter(d => !(columnIds != null && columnIds.includes(d)))\n };\n }\n return {\n left: ((_old$left3 = old == null ? void 0 : old.left) != null ? _old$left3 : []).filter(d => !(columnIds != null && columnIds.includes(d))),\n right: ((_old$right3 = old == null ? void 0 : old.right) != null ? _old$right3 : []).filter(d => !(columnIds != null && columnIds.includes(d)))\n };\n });\n };\n column.getCanPin = () => {\n const leafColumns = column.getLeafColumns();\n return leafColumns.some(d => {\n var _d$columnDef$enablePi, _ref, _table$options$enable;\n return ((_d$columnDef$enablePi = d.columnDef.enablePinning) != null ? _d$columnDef$enablePi : true) && ((_ref = (_table$options$enable = table.options.enableColumnPinning) != null ? _table$options$enable : table.options.enablePinning) != null ? _ref : true);\n });\n };\n column.getIsPinned = () => {\n const leafColumnIds = column.getLeafColumns().map(d => d.id);\n const {\n left,\n right\n } = table.getState().columnPinning;\n const isLeft = leafColumnIds.some(d => left == null ? void 0 : left.includes(d));\n const isRight = leafColumnIds.some(d => right == null ? void 0 : right.includes(d));\n return isLeft ? 'left' : isRight ? 'right' : false;\n };\n column.getPinnedIndex = () => {\n var _table$getState$colum, _table$getState$colum2;\n const position = column.getIsPinned();\n return position ? (_table$getState$colum = (_table$getState$colum2 = table.getState().columnPinning) == null || (_table$getState$colum2 = _table$getState$colum2[position]) == null ? void 0 : _table$getState$colum2.indexOf(column.id)) != null ? _table$getState$colum : -1 : 0;\n };\n },\n createRow: (row, table) => {\n row.getCenterVisibleCells = memo(() => [row._getAllVisibleCells(), table.getState().columnPinning.left, table.getState().columnPinning.right], (allCells, left, right) => {\n const leftAndRight = [...(left != null ? left : []), ...(right != null ? right : [])];\n return allCells.filter(d => !leftAndRight.includes(d.column.id));\n }, getMemoOptions(table.options, 'debugRows', 'getCenterVisibleCells'));\n row.getLeftVisibleCells = memo(() => [row._getAllVisibleCells(), table.getState().columnPinning.left], (allCells, left) => {\n const cells = (left != null ? left : []).map(columnId => allCells.find(cell => cell.column.id === columnId)).filter(Boolean).map(d => ({\n ...d,\n position: 'left'\n }));\n return cells;\n }, getMemoOptions(table.options, 'debugRows', 'getLeftVisibleCells'));\n row.getRightVisibleCells = memo(() => [row._getAllVisibleCells(), table.getState().columnPinning.right], (allCells, right) => {\n const cells = (right != null ? right : []).map(columnId => allCells.find(cell => cell.column.id === columnId)).filter(Boolean).map(d => ({\n ...d,\n position: 'right'\n }));\n return cells;\n }, getMemoOptions(table.options, 'debugRows', 'getRightVisibleCells'));\n },\n createTable: table => {\n table.setColumnPinning = updater => table.options.onColumnPinningChange == null ? void 0 : table.options.onColumnPinningChange(updater);\n table.resetColumnPinning = defaultState => {\n var _table$initialState$c, _table$initialState;\n return table.setColumnPinning(defaultState ? getDefaultColumnPinningState() : (_table$initialState$c = (_table$initialState = table.initialState) == null ? void 0 : _table$initialState.columnPinning) != null ? _table$initialState$c : getDefaultColumnPinningState());\n };\n table.getIsSomeColumnsPinned = position => {\n var _pinningState$positio;\n const pinningState = table.getState().columnPinning;\n if (!position) {\n var _pinningState$left, _pinningState$right;\n return Boolean(((_pinningState$left = pinningState.left) == null ? void 0 : _pinningState$left.length) || ((_pinningState$right = pinningState.right) == null ? void 0 : _pinningState$right.length));\n }\n return Boolean((_pinningState$positio = pinningState[position]) == null ? void 0 : _pinningState$positio.length);\n };\n table.getLeftLeafColumns = memo(() => [table.getAllLeafColumns(), table.getState().columnPinning.left], (allColumns, left) => {\n return (left != null ? left : []).map(columnId => allColumns.find(column => column.id === columnId)).filter(Boolean);\n }, getMemoOptions(table.options, 'debugColumns', 'getLeftLeafColumns'));\n table.getRightLeafColumns = memo(() => [table.getAllLeafColumns(), table.getState().columnPinning.right], (allColumns, right) => {\n return (right != null ? right : []).map(columnId => allColumns.find(column => column.id === columnId)).filter(Boolean);\n }, getMemoOptions(table.options, 'debugColumns', 'getRightLeafColumns'));\n table.getCenterLeafColumns = memo(() => [table.getAllLeafColumns(), table.getState().columnPinning.left, table.getState().columnPinning.right], (allColumns, left, right) => {\n const leftAndRight = [...(left != null ? left : []), ...(right != null ? right : [])];\n return allColumns.filter(d => !leftAndRight.includes(d.id));\n }, getMemoOptions(table.options, 'debugColumns', 'getCenterLeafColumns'));\n }\n};\n\nfunction safelyAccessDocument(_document) {\n return _document || (typeof document !== 'undefined' ? document : null);\n}\n\n//\n\n//\n\nconst defaultColumnSizing = {\n size: 150,\n minSize: 20,\n maxSize: Number.MAX_SAFE_INTEGER\n};\nconst getDefaultColumnSizingInfoState = () => ({\n startOffset: null,\n startSize: null,\n deltaOffset: null,\n deltaPercentage: null,\n isResizingColumn: false,\n columnSizingStart: []\n});\nconst ColumnSizing = {\n getDefaultColumnDef: () => {\n return defaultColumnSizing;\n },\n getInitialState: state => {\n return {\n columnSizing: {},\n columnSizingInfo: getDefaultColumnSizingInfoState(),\n ...state\n };\n },\n getDefaultOptions: table => {\n return {\n columnResizeMode: 'onEnd',\n columnResizeDirection: 'ltr',\n onColumnSizingChange: makeStateUpdater('columnSizing', table),\n onColumnSizingInfoChange: makeStateUpdater('columnSizingInfo', table)\n };\n },\n createColumn: (column, table) => {\n column.getSize = () => {\n var _column$columnDef$min, _ref, _column$columnDef$max;\n const columnSize = table.getState().columnSizing[column.id];\n return Math.min(Math.max((_column$columnDef$min = column.columnDef.minSize) != null ? _column$columnDef$min : defaultColumnSizing.minSize, (_ref = columnSize != null ? columnSize : column.columnDef.size) != null ? _ref : defaultColumnSizing.size), (_column$columnDef$max = column.columnDef.maxSize) != null ? _column$columnDef$max : defaultColumnSizing.maxSize);\n };\n column.getStart = memo(position => [position, _getVisibleLeafColumns(table, position), table.getState().columnSizing], (position, columns) => columns.slice(0, column.getIndex(position)).reduce((sum, column) => sum + column.getSize(), 0), getMemoOptions(table.options, 'debugColumns', 'getStart'));\n column.getAfter = memo(position => [position, _getVisibleLeafColumns(table, position), table.getState().columnSizing], (position, columns) => columns.slice(column.getIndex(position) + 1).reduce((sum, column) => sum + column.getSize(), 0), getMemoOptions(table.options, 'debugColumns', 'getAfter'));\n column.resetSize = () => {\n table.setColumnSizing(_ref2 => {\n let {\n [column.id]: _,\n ...rest\n } = _ref2;\n return rest;\n });\n };\n column.getCanResize = () => {\n var _column$columnDef$ena, _table$options$enable;\n return ((_column$columnDef$ena = column.columnDef.enableResizing) != null ? _column$columnDef$ena : true) && ((_table$options$enable = table.options.enableColumnResizing) != null ? _table$options$enable : true);\n };\n column.getIsResizing = () => {\n return table.getState().columnSizingInfo.isResizingColumn === column.id;\n };\n },\n createHeader: (header, table) => {\n header.getSize = () => {\n let sum = 0;\n const recurse = header => {\n if (header.subHeaders.length) {\n header.subHeaders.forEach(recurse);\n } else {\n var _header$column$getSiz;\n sum += (_header$column$getSiz = header.column.getSize()) != null ? _header$column$getSiz : 0;\n }\n };\n recurse(header);\n return sum;\n };\n header.getStart = () => {\n if (header.index > 0) {\n const prevSiblingHeader = header.headerGroup.headers[header.index - 1];\n return prevSiblingHeader.getStart() + prevSiblingHeader.getSize();\n }\n return 0;\n };\n header.getResizeHandler = _contextDocument => {\n const column = table.getColumn(header.column.id);\n const canResize = column == null ? void 0 : column.getCanResize();\n return e => {\n if (!column || !canResize) {\n return;\n }\n e.persist == null || e.persist();\n if (isTouchStartEvent(e)) {\n // lets not respond to multiple touches (e.g. 2 or 3 fingers)\n if (e.touches && e.touches.length > 1) {\n return;\n }\n }\n const startSize = header.getSize();\n const columnSizingStart = header ? header.getLeafHeaders().map(d => [d.column.id, d.column.getSize()]) : [[column.id, column.getSize()]];\n const clientX = isTouchStartEvent(e) ? Math.round(e.touches[0].clientX) : e.clientX;\n const newColumnSizing = {};\n const updateOffset = (eventType, clientXPos) => {\n if (typeof clientXPos !== 'number') {\n return;\n }\n table.setColumnSizingInfo(old => {\n var _old$startOffset, _old$startSize;\n const deltaDirection = table.options.columnResizeDirection === 'rtl' ? -1 : 1;\n const deltaOffset = (clientXPos - ((_old$startOffset = old == null ? void 0 : old.startOffset) != null ? _old$startOffset : 0)) * deltaDirection;\n const deltaPercentage = Math.max(deltaOffset / ((_old$startSize = old == null ? void 0 : old.startSize) != null ? _old$startSize : 0), -0.999999);\n old.columnSizingStart.forEach(_ref3 => {\n let [columnId, headerSize] = _ref3;\n newColumnSizing[columnId] = Math.round(Math.max(headerSize + headerSize * deltaPercentage, 0) * 100) / 100;\n });\n return {\n ...old,\n deltaOffset,\n deltaPercentage\n };\n });\n if (table.options.columnResizeMode === 'onChange' || eventType === 'end') {\n table.setColumnSizing(old => ({\n ...old,\n ...newColumnSizing\n }));\n }\n };\n const onMove = clientXPos => updateOffset('move', clientXPos);\n const onEnd = clientXPos => {\n updateOffset('end', clientXPos);\n table.setColumnSizingInfo(old => ({\n ...old,\n isResizingColumn: false,\n startOffset: null,\n startSize: null,\n deltaOffset: null,\n deltaPercentage: null,\n columnSizingStart: []\n }));\n };\n const contextDocument = safelyAccessDocument(_contextDocument);\n const mouseEvents = {\n moveHandler: e => onMove(e.clientX),\n upHandler: e => {\n contextDocument == null || contextDocument.removeEventListener('mousemove', mouseEvents.moveHandler);\n contextDocument == null || contextDocument.removeEventListener('mouseup', mouseEvents.upHandler);\n onEnd(e.clientX);\n }\n };\n const touchEvents = {\n moveHandler: e => {\n if (e.cancelable) {\n e.preventDefault();\n e.stopPropagation();\n }\n onMove(e.touches[0].clientX);\n return false;\n },\n upHandler: e => {\n var _e$touches$;\n contextDocument == null || contextDocument.removeEventListener('touchmove', touchEvents.moveHandler);\n contextDocument == null || contextDocument.removeEventListener('touchend', touchEvents.upHandler);\n if (e.cancelable) {\n e.preventDefault();\n e.stopPropagation();\n }\n onEnd((_e$touches$ = e.touches[0]) == null ? void 0 : _e$touches$.clientX);\n }\n };\n const passiveIfSupported = passiveEventSupported() ? {\n passive: false\n } : false;\n if (isTouchStartEvent(e)) {\n contextDocument == null || contextDocument.addEventListener('touchmove', touchEvents.moveHandler, passiveIfSupported);\n contextDocument == null || contextDocument.addEventListener('touchend', touchEvents.upHandler, passiveIfSupported);\n } else {\n contextDocument == null || contextDocument.addEventListener('mousemove', mouseEvents.moveHandler, passiveIfSupported);\n contextDocument == null || contextDocument.addEventListener('mouseup', mouseEvents.upHandler, passiveIfSupported);\n }\n table.setColumnSizingInfo(old => ({\n ...old,\n startOffset: clientX,\n startSize,\n deltaOffset: 0,\n deltaPercentage: 0,\n columnSizingStart,\n isResizingColumn: column.id\n }));\n };\n };\n },\n createTable: table => {\n table.setColumnSizing = updater => table.options.onColumnSizingChange == null ? void 0 : table.options.onColumnSizingChange(updater);\n table.setColumnSizingInfo = updater => table.options.onColumnSizingInfoChange == null ? void 0 : table.options.onColumnSizingInfoChange(updater);\n table.resetColumnSizing = defaultState => {\n var _table$initialState$c;\n table.setColumnSizing(defaultState ? {} : (_table$initialState$c = table.initialState.columnSizing) != null ? _table$initialState$c : {});\n };\n table.resetHeaderSizeInfo = defaultState => {\n var _table$initialState$c2;\n table.setColumnSizingInfo(defaultState ? getDefaultColumnSizingInfoState() : (_table$initialState$c2 = table.initialState.columnSizingInfo) != null ? _table$initialState$c2 : getDefaultColumnSizingInfoState());\n };\n table.getTotalSize = () => {\n var _table$getHeaderGroup, _table$getHeaderGroup2;\n return (_table$getHeaderGroup = (_table$getHeaderGroup2 = table.getHeaderGroups()[0]) == null ? void 0 : _table$getHeaderGroup2.headers.reduce((sum, header) => {\n return sum + header.getSize();\n }, 0)) != null ? _table$getHeaderGroup : 0;\n };\n table.getLeftTotalSize = () => {\n var _table$getLeftHeaderG, _table$getLeftHeaderG2;\n return (_table$getLeftHeaderG = (_table$getLeftHeaderG2 = table.getLeftHeaderGroups()[0]) == null ? void 0 : _table$getLeftHeaderG2.headers.reduce((sum, header) => {\n return sum + header.getSize();\n }, 0)) != null ? _table$getLeftHeaderG : 0;\n };\n table.getCenterTotalSize = () => {\n var _table$getCenterHeade, _table$getCenterHeade2;\n return (_table$getCenterHeade = (_table$getCenterHeade2 = table.getCenterHeaderGroups()[0]) == null ? void 0 : _table$getCenterHeade2.headers.reduce((sum, header) => {\n return sum + header.getSize();\n }, 0)) != null ? _table$getCenterHeade : 0;\n };\n table.getRightTotalSize = () => {\n var _table$getRightHeader, _table$getRightHeader2;\n return (_table$getRightHeader = (_table$getRightHeader2 = table.getRightHeaderGroups()[0]) == null ? void 0 : _table$getRightHeader2.headers.reduce((sum, header) => {\n return sum + header.getSize();\n }, 0)) != null ? _table$getRightHeader : 0;\n };\n }\n};\nlet passiveSupported = null;\nfunction passiveEventSupported() {\n if (typeof passiveSupported === 'boolean') return passiveSupported;\n let supported = false;\n try {\n const options = {\n get passive() {\n supported = true;\n return false;\n }\n };\n const noop = () => {};\n window.addEventListener('test', noop, options);\n window.removeEventListener('test', noop);\n } catch (err) {\n supported = false;\n }\n passiveSupported = supported;\n return passiveSupported;\n}\nfunction isTouchStartEvent(e) {\n return e.type === 'touchstart';\n}\n\n//\n\nconst ColumnVisibility = {\n getInitialState: state => {\n return {\n columnVisibility: {},\n ...state\n };\n },\n getDefaultOptions: table => {\n return {\n onColumnVisibilityChange: makeStateUpdater('columnVisibility', table)\n };\n },\n createColumn: (column, table) => {\n column.toggleVisibility = value => {\n if (column.getCanHide()) {\n table.setColumnVisibility(old => ({\n ...old,\n [column.id]: value != null ? value : !column.getIsVisible()\n }));\n }\n };\n column.getIsVisible = () => {\n var _ref, _table$getState$colum;\n const childColumns = column.columns;\n return (_ref = childColumns.length ? childColumns.some(c => c.getIsVisible()) : (_table$getState$colum = table.getState().columnVisibility) == null ? void 0 : _table$getState$colum[column.id]) != null ? _ref : true;\n };\n column.getCanHide = () => {\n var _column$columnDef$ena, _table$options$enable;\n return ((_column$columnDef$ena = column.columnDef.enableHiding) != null ? _column$columnDef$ena : true) && ((_table$options$enable = table.options.enableHiding) != null ? _table$options$enable : true);\n };\n column.getToggleVisibilityHandler = () => {\n return e => {\n column.toggleVisibility == null || column.toggleVisibility(e.target.checked);\n };\n };\n },\n createRow: (row, table) => {\n row._getAllVisibleCells = memo(() => [row.getAllCells(), table.getState().columnVisibility], cells => {\n return cells.filter(cell => cell.column.getIsVisible());\n }, getMemoOptions(table.options, 'debugRows', '_getAllVisibleCells'));\n row.getVisibleCells = memo(() => [row.getLeftVisibleCells(), row.getCenterVisibleCells(), row.getRightVisibleCells()], (left, center, right) => [...left, ...center, ...right], getMemoOptions(table.options, 'debugRows', 'getVisibleCells'));\n },\n createTable: table => {\n const makeVisibleColumnsMethod = (key, getColumns) => {\n return memo(() => [getColumns(), getColumns().filter(d => d.getIsVisible()).map(d => d.id).join('_')], columns => {\n return columns.filter(d => d.getIsVisible == null ? void 0 : d.getIsVisible());\n }, getMemoOptions(table.options, 'debugColumns', key));\n };\n table.getVisibleFlatColumns = makeVisibleColumnsMethod('getVisibleFlatColumns', () => table.getAllFlatColumns());\n table.getVisibleLeafColumns = makeVisibleColumnsMethod('getVisibleLeafColumns', () => table.getAllLeafColumns());\n table.getLeftVisibleLeafColumns = makeVisibleColumnsMethod('getLeftVisibleLeafColumns', () => table.getLeftLeafColumns());\n table.getRightVisibleLeafColumns = makeVisibleColumnsMethod('getRightVisibleLeafColumns', () => table.getRightLeafColumns());\n table.getCenterVisibleLeafColumns = makeVisibleColumnsMethod('getCenterVisibleLeafColumns', () => table.getCenterLeafColumns());\n table.setColumnVisibility = updater => table.options.onColumnVisibilityChange == null ? void 0 : table.options.onColumnVisibilityChange(updater);\n table.resetColumnVisibility = defaultState => {\n var _table$initialState$c;\n table.setColumnVisibility(defaultState ? {} : (_table$initialState$c = table.initialState.columnVisibility) != null ? _table$initialState$c : {});\n };\n table.toggleAllColumnsVisible = value => {\n var _value;\n value = (_value = value) != null ? _value : !table.getIsAllColumnsVisible();\n table.setColumnVisibility(table.getAllLeafColumns().reduce((obj, column) => ({\n ...obj,\n [column.id]: !value ? !(column.getCanHide != null && column.getCanHide()) : value\n }), {}));\n };\n table.getIsAllColumnsVisible = () => !table.getAllLeafColumns().some(column => !(column.getIsVisible != null && column.getIsVisible()));\n table.getIsSomeColumnsVisible = () => table.getAllLeafColumns().some(column => column.getIsVisible == null ? void 0 : column.getIsVisible());\n table.getToggleAllColumnsVisibilityHandler = () => {\n return e => {\n var _target;\n table.toggleAllColumnsVisible((_target = e.target) == null ? void 0 : _target.checked);\n };\n };\n }\n};\nfunction _getVisibleLeafColumns(table, position) {\n return !position ? table.getVisibleLeafColumns() : position === 'center' ? table.getCenterVisibleLeafColumns() : position === 'left' ? table.getLeftVisibleLeafColumns() : table.getRightVisibleLeafColumns();\n}\n\n//\n\nconst GlobalFaceting = {\n createTable: table => {\n table._getGlobalFacetedRowModel = table.options.getFacetedRowModel && table.options.getFacetedRowModel(table, '__global__');\n table.getGlobalFacetedRowModel = () => {\n if (table.options.manualFiltering || !table._getGlobalFacetedRowModel) {\n return table.getPreFilteredRowModel();\n }\n return table._getGlobalFacetedRowModel();\n };\n table._getGlobalFacetedUniqueValues = table.options.getFacetedUniqueValues && table.options.getFacetedUniqueValues(table, '__global__');\n table.getGlobalFacetedUniqueValues = () => {\n if (!table._getGlobalFacetedUniqueValues) {\n return new Map();\n }\n return table._getGlobalFacetedUniqueValues();\n };\n table._getGlobalFacetedMinMaxValues = table.options.getFacetedMinMaxValues && table.options.getFacetedMinMaxValues(table, '__global__');\n table.getGlobalFacetedMinMaxValues = () => {\n if (!table._getGlobalFacetedMinMaxValues) {\n return;\n }\n return table._getGlobalFacetedMinMaxValues();\n };\n }\n};\n\n//\n\nconst GlobalFiltering = {\n getInitialState: state => {\n return {\n globalFilter: undefined,\n ...state\n };\n },\n getDefaultOptions: table => {\n return {\n onGlobalFilterChange: makeStateUpdater('globalFilter', table),\n globalFilterFn: 'auto',\n getColumnCanGlobalFilter: column => {\n var _table$getCoreRowMode;\n const value = (_table$getCoreRowMode = table.getCoreRowModel().flatRows[0]) == null || (_table$getCoreRowMode = _table$getCoreRowMode._getAllCellsByColumnId()[column.id]) == null ? void 0 : _table$getCoreRowMode.getValue();\n return typeof value === 'string' || typeof value === 'number';\n }\n };\n },\n createColumn: (column, table) => {\n column.getCanGlobalFilter = () => {\n var _column$columnDef$ena, _table$options$enable, _table$options$enable2, _table$options$getCol;\n return ((_column$columnDef$ena = column.columnDef.enableGlobalFilter) != null ? _column$columnDef$ena : true) && ((_table$options$enable = table.options.enableGlobalFilter) != null ? _table$options$enable : true) && ((_table$options$enable2 = table.options.enableFilters) != null ? _table$options$enable2 : true) && ((_table$options$getCol = table.options.getColumnCanGlobalFilter == null ? void 0 : table.options.getColumnCanGlobalFilter(column)) != null ? _table$options$getCol : true) && !!column.accessorFn;\n };\n },\n createTable: table => {\n table.getGlobalAutoFilterFn = () => {\n return filterFns.includesString;\n };\n table.getGlobalFilterFn = () => {\n var _table$options$filter, _table$options$filter2;\n const {\n globalFilterFn: globalFilterFn\n } = table.options;\n return isFunction(globalFilterFn) ? globalFilterFn : globalFilterFn === 'auto' ? table.getGlobalAutoFilterFn() : (_table$options$filter = (_table$options$filter2 = table.options.filterFns) == null ? void 0 : _table$options$filter2[globalFilterFn]) != null ? _table$options$filter : filterFns[globalFilterFn];\n };\n table.setGlobalFilter = updater => {\n table.options.onGlobalFilterChange == null || table.options.onGlobalFilterChange(updater);\n };\n table.resetGlobalFilter = defaultState => {\n table.setGlobalFilter(defaultState ? undefined : table.initialState.globalFilter);\n };\n }\n};\n\n//\n\nconst RowExpanding = {\n getInitialState: state => {\n return {\n expanded: {},\n ...state\n };\n },\n getDefaultOptions: table => {\n return {\n onExpandedChange: makeStateUpdater('expanded', table),\n paginateExpandedRows: true\n };\n },\n createTable: table => {\n let registered = false;\n let queued = false;\n table._autoResetExpanded = () => {\n var _ref, _table$options$autoRe;\n if (!registered) {\n table._queue(() => {\n registered = true;\n });\n return;\n }\n if ((_ref = (_table$options$autoRe = table.options.autoResetAll) != null ? _table$options$autoRe : table.options.autoResetExpanded) != null ? _ref : !table.options.manualExpanding) {\n if (queued) return;\n queued = true;\n table._queue(() => {\n table.resetExpanded();\n queued = false;\n });\n }\n };\n table.setExpanded = updater => table.options.onExpandedChange == null ? void 0 : table.options.onExpandedChange(updater);\n table.toggleAllRowsExpanded = expanded => {\n if (expanded != null ? expanded : !table.getIsAllRowsExpanded()) {\n table.setExpanded(true);\n } else {\n table.setExpanded({});\n }\n };\n table.resetExpanded = defaultState => {\n var _table$initialState$e, _table$initialState;\n table.setExpanded(defaultState ? {} : (_table$initialState$e = (_table$initialState = table.initialState) == null ? void 0 : _table$initialState.expanded) != null ? _table$initialState$e : {});\n };\n table.getCanSomeRowsExpand = () => {\n return table.getPrePaginationRowModel().flatRows.some(row => row.getCanExpand());\n };\n table.getToggleAllRowsExpandedHandler = () => {\n return e => {\n e.persist == null || e.persist();\n table.toggleAllRowsExpanded();\n };\n };\n table.getIsSomeRowsExpanded = () => {\n const expanded = table.getState().expanded;\n return expanded === true || Object.values(expanded).some(Boolean);\n };\n table.getIsAllRowsExpanded = () => {\n const expanded = table.getState().expanded;\n\n // If expanded is true, save some cycles and return true\n if (typeof expanded === 'boolean') {\n return expanded === true;\n }\n if (!Object.keys(expanded).length) {\n return false;\n }\n\n // If any row is not expanded, return false\n if (table.getRowModel().flatRows.some(row => !row.getIsExpanded())) {\n return false;\n }\n\n // They must all be expanded :shrug:\n return true;\n };\n table.getExpandedDepth = () => {\n let maxDepth = 0;\n const rowIds = table.getState().expanded === true ? Object.keys(table.getRowModel().rowsById) : Object.keys(table.getState().expanded);\n rowIds.forEach(id => {\n const splitId = id.split('.');\n maxDepth = Math.max(maxDepth, splitId.length);\n });\n return maxDepth;\n };\n table.getPreExpandedRowModel = () => table.getSortedRowModel();\n table.getExpandedRowModel = () => {\n if (!table._getExpandedRowModel && table.options.getExpandedRowModel) {\n table._getExpandedRowModel = table.options.getExpandedRowModel(table);\n }\n if (table.options.manualExpanding || !table._getExpandedRowModel) {\n return table.getPreExpandedRowModel();\n }\n return table._getExpandedRowModel();\n };\n },\n createRow: (row, table) => {\n row.toggleExpanded = expanded => {\n table.setExpanded(old => {\n var _expanded;\n const exists = old === true ? true : !!(old != null && old[row.id]);\n let oldExpanded = {};\n if (old === true) {\n Object.keys(table.getRowModel().rowsById).forEach(rowId => {\n oldExpanded[rowId] = true;\n });\n } else {\n oldExpanded = old;\n }\n expanded = (_expanded = expanded) != null ? _expanded : !exists;\n if (!exists && expanded) {\n return {\n ...oldExpanded,\n [row.id]: true\n };\n }\n if (exists && !expanded) {\n const {\n [row.id]: _,\n ...rest\n } = oldExpanded;\n return rest;\n }\n return old;\n });\n };\n row.getIsExpanded = () => {\n var _table$options$getIsR;\n const expanded = table.getState().expanded;\n return !!((_table$options$getIsR = table.options.getIsRowExpanded == null ? void 0 : table.options.getIsRowExpanded(row)) != null ? _table$options$getIsR : expanded === true || (expanded == null ? void 0 : expanded[row.id]));\n };\n row.getCanExpand = () => {\n var _table$options$getRow, _table$options$enable, _row$subRows;\n return (_table$options$getRow = table.options.getRowCanExpand == null ? void 0 : table.options.getRowCanExpand(row)) != null ? _table$options$getRow : ((_table$options$enable = table.options.enableExpanding) != null ? _table$options$enable : true) && !!((_row$subRows = row.subRows) != null && _row$subRows.length);\n };\n row.getIsAllParentsExpanded = () => {\n let isFullyExpanded = true;\n let currentRow = row;\n while (isFullyExpanded && currentRow.parentId) {\n currentRow = table.getRow(currentRow.parentId, true);\n isFullyExpanded = currentRow.getIsExpanded();\n }\n return isFullyExpanded;\n };\n row.getToggleExpandedHandler = () => {\n const canExpand = row.getCanExpand();\n return () => {\n if (!canExpand) return;\n row.toggleExpanded();\n };\n };\n }\n};\n\n//\n\nconst defaultPageIndex = 0;\nconst defaultPageSize = 10;\nconst getDefaultPaginationState = () => ({\n pageIndex: defaultPageIndex,\n pageSize: defaultPageSize\n});\nconst RowPagination = {\n getInitialState: state => {\n return {\n ...state,\n pagination: {\n ...getDefaultPaginationState(),\n ...(state == null ? void 0 : state.pagination)\n }\n };\n },\n getDefaultOptions: table => {\n return {\n onPaginationChange: makeStateUpdater('pagination', table)\n };\n },\n createTable: table => {\n let registered = false;\n let queued = false;\n table._autoResetPageIndex = () => {\n var _ref, _table$options$autoRe;\n if (!registered) {\n table._queue(() => {\n registered = true;\n });\n return;\n }\n if ((_ref = (_table$options$autoRe = table.options.autoResetAll) != null ? _table$options$autoRe : table.options.autoResetPageIndex) != null ? _ref : !table.options.manualPagination) {\n if (queued) return;\n queued = true;\n table._queue(() => {\n table.resetPageIndex();\n queued = false;\n });\n }\n };\n table.setPagination = updater => {\n const safeUpdater = old => {\n let newState = functionalUpdate(updater, old);\n return newState;\n };\n return table.options.onPaginationChange == null ? void 0 : table.options.onPaginationChange(safeUpdater);\n };\n table.resetPagination = defaultState => {\n var _table$initialState$p;\n table.setPagination(defaultState ? getDefaultPaginationState() : (_table$initialState$p = table.initialState.pagination) != null ? _table$initialState$p : getDefaultPaginationState());\n };\n table.setPageIndex = updater => {\n table.setPagination(old => {\n let pageIndex = functionalUpdate(updater, old.pageIndex);\n const maxPageIndex = typeof table.options.pageCount === 'undefined' || table.options.pageCount === -1 ? Number.MAX_SAFE_INTEGER : table.options.pageCount - 1;\n pageIndex = Math.max(0, Math.min(pageIndex, maxPageIndex));\n return {\n ...old,\n pageIndex\n };\n });\n };\n table.resetPageIndex = defaultState => {\n var _table$initialState$p2, _table$initialState;\n table.setPageIndex(defaultState ? defaultPageIndex : (_table$initialState$p2 = (_table$initialState = table.initialState) == null || (_table$initialState = _table$initialState.pagination) == null ? void 0 : _table$initialState.pageIndex) != null ? _table$initialState$p2 : defaultPageIndex);\n };\n table.resetPageSize = defaultState => {\n var _table$initialState$p3, _table$initialState2;\n table.setPageSize(defaultState ? defaultPageSize : (_table$initialState$p3 = (_table$initialState2 = table.initialState) == null || (_table$initialState2 = _table$initialState2.pagination) == null ? void 0 : _table$initialState2.pageSize) != null ? _table$initialState$p3 : defaultPageSize);\n };\n table.setPageSize = updater => {\n table.setPagination(old => {\n const pageSize = Math.max(1, functionalUpdate(updater, old.pageSize));\n const topRowIndex = old.pageSize * old.pageIndex;\n const pageIndex = Math.floor(topRowIndex / pageSize);\n return {\n ...old,\n pageIndex,\n pageSize\n };\n });\n };\n //deprecated\n table.setPageCount = updater => table.setPagination(old => {\n var _table$options$pageCo;\n let newPageCount = functionalUpdate(updater, (_table$options$pageCo = table.options.pageCount) != null ? _table$options$pageCo : -1);\n if (typeof newPageCount === 'number') {\n newPageCount = Math.max(-1, newPageCount);\n }\n return {\n ...old,\n pageCount: newPageCount\n };\n });\n table.getPageOptions = memo(() => [table.getPageCount()], pageCount => {\n let pageOptions = [];\n if (pageCount && pageCount > 0) {\n pageOptions = [...new Array(pageCount)].fill(null).map((_, i) => i);\n }\n return pageOptions;\n }, getMemoOptions(table.options, 'debugTable', 'getPageOptions'));\n table.getCanPreviousPage = () => table.getState().pagination.pageIndex > 0;\n table.getCanNextPage = () => {\n const {\n pageIndex\n } = table.getState().pagination;\n const pageCount = table.getPageCount();\n if (pageCount === -1) {\n return true;\n }\n if (pageCount === 0) {\n return false;\n }\n return pageIndex < pageCount - 1;\n };\n table.previousPage = () => {\n return table.setPageIndex(old => old - 1);\n };\n table.nextPage = () => {\n return table.setPageIndex(old => {\n return old + 1;\n });\n };\n table.firstPage = () => {\n return table.setPageIndex(0);\n };\n table.lastPage = () => {\n return table.setPageIndex(table.getPageCount() - 1);\n };\n table.getPrePaginationRowModel = () => table.getExpandedRowModel();\n table.getPaginationRowModel = () => {\n if (!table._getPaginationRowModel && table.options.getPaginationRowModel) {\n table._getPaginationRowModel = table.options.getPaginationRowModel(table);\n }\n if (table.options.manualPagination || !table._getPaginationRowModel) {\n return table.getPrePaginationRowModel();\n }\n return table._getPaginationRowModel();\n };\n table.getPageCount = () => {\n var _table$options$pageCo2;\n return (_table$options$pageCo2 = table.options.pageCount) != null ? _table$options$pageCo2 : Math.ceil(table.getRowCount() / table.getState().pagination.pageSize);\n };\n table.getRowCount = () => {\n var _table$options$rowCou;\n return (_table$options$rowCou = table.options.rowCount) != null ? _table$options$rowCou : table.getPrePaginationRowModel().rows.length;\n };\n }\n};\n\n//\n\nconst getDefaultRowPinningState = () => ({\n top: [],\n bottom: []\n});\nconst RowPinning = {\n getInitialState: state => {\n return {\n rowPinning: getDefaultRowPinningState(),\n ...state\n };\n },\n getDefaultOptions: table => {\n return {\n onRowPinningChange: makeStateUpdater('rowPinning', table)\n };\n },\n createRow: (row, table) => {\n row.pin = (position, includeLeafRows, includeParentRows) => {\n const leafRowIds = includeLeafRows ? row.getLeafRows().map(_ref => {\n let {\n id\n } = _ref;\n return id;\n }) : [];\n const parentRowIds = includeParentRows ? row.getParentRows().map(_ref2 => {\n let {\n id\n } = _ref2;\n return id;\n }) : [];\n const rowIds = new Set([...parentRowIds, row.id, ...leafRowIds]);\n table.setRowPinning(old => {\n var _old$top3, _old$bottom3;\n if (position === 'bottom') {\n var _old$top, _old$bottom;\n return {\n top: ((_old$top = old == null ? void 0 : old.top) != null ? _old$top : []).filter(d => !(rowIds != null && rowIds.has(d))),\n bottom: [...((_old$bottom = old == null ? void 0 : old.bottom) != null ? _old$bottom : []).filter(d => !(rowIds != null && rowIds.has(d))), ...Array.from(rowIds)]\n };\n }\n if (position === 'top') {\n var _old$top2, _old$bottom2;\n return {\n top: [...((_old$top2 = old == null ? void 0 : old.top) != null ? _old$top2 : []).filter(d => !(rowIds != null && rowIds.has(d))), ...Array.from(rowIds)],\n bottom: ((_old$bottom2 = old == null ? void 0 : old.bottom) != null ? _old$bottom2 : []).filter(d => !(rowIds != null && rowIds.has(d)))\n };\n }\n return {\n top: ((_old$top3 = old == null ? void 0 : old.top) != null ? _old$top3 : []).filter(d => !(rowIds != null && rowIds.has(d))),\n bottom: ((_old$bottom3 = old == null ? void 0 : old.bottom) != null ? _old$bottom3 : []).filter(d => !(rowIds != null && rowIds.has(d)))\n };\n });\n };\n row.getCanPin = () => {\n var _ref3;\n const {\n enableRowPinning,\n enablePinning\n } = table.options;\n if (typeof enableRowPinning === 'function') {\n return enableRowPinning(row);\n }\n return (_ref3 = enableRowPinning != null ? enableRowPinning : enablePinning) != null ? _ref3 : true;\n };\n row.getIsPinned = () => {\n const rowIds = [row.id];\n const {\n top,\n bottom\n } = table.getState().rowPinning;\n const isTop = rowIds.some(d => top == null ? void 0 : top.includes(d));\n const isBottom = rowIds.some(d => bottom == null ? void 0 : bottom.includes(d));\n return isTop ? 'top' : isBottom ? 'bottom' : false;\n };\n row.getPinnedIndex = () => {\n var _ref4, _visiblePinnedRowIds$;\n const position = row.getIsPinned();\n if (!position) return -1;\n const visiblePinnedRowIds = (_ref4 = position === 'top' ? table.getTopRows() : table.getBottomRows()) == null ? void 0 : _ref4.map(_ref5 => {\n let {\n id\n } = _ref5;\n return id;\n });\n return (_visiblePinnedRowIds$ = visiblePinnedRowIds == null ? void 0 : visiblePinnedRowIds.indexOf(row.id)) != null ? _visiblePinnedRowIds$ : -1;\n };\n },\n createTable: table => {\n table.setRowPinning = updater => table.options.onRowPinningChange == null ? void 0 : table.options.onRowPinningChange(updater);\n table.resetRowPinning = defaultState => {\n var _table$initialState$r, _table$initialState;\n return table.setRowPinning(defaultState ? getDefaultRowPinningState() : (_table$initialState$r = (_table$initialState = table.initialState) == null ? void 0 : _table$initialState.rowPinning) != null ? _table$initialState$r : getDefaultRowPinningState());\n };\n table.getIsSomeRowsPinned = position => {\n var _pinningState$positio;\n const pinningState = table.getState().rowPinning;\n if (!position) {\n var _pinningState$top, _pinningState$bottom;\n return Boolean(((_pinningState$top = pinningState.top) == null ? void 0 : _pinningState$top.length) || ((_pinningState$bottom = pinningState.bottom) == null ? void 0 : _pinningState$bottom.length));\n }\n return Boolean((_pinningState$positio = pinningState[position]) == null ? void 0 : _pinningState$positio.length);\n };\n table._getPinnedRows = (visibleRows, pinnedRowIds, position) => {\n var _table$options$keepPi;\n const rows = ((_table$options$keepPi = table.options.keepPinnedRows) != null ? _table$options$keepPi : true) ?\n //get all rows that are pinned even if they would not be otherwise visible\n //account for expanded parent rows, but not pagination or filtering\n (pinnedRowIds != null ? pinnedRowIds : []).map(rowId => {\n const row = table.getRow(rowId, true);\n return row.getIsAllParentsExpanded() ? row : null;\n }) :\n //else get only visible rows that are pinned\n (pinnedRowIds != null ? pinnedRowIds : []).map(rowId => visibleRows.find(row => row.id === rowId));\n return rows.filter(Boolean).map(d => ({\n ...d,\n position\n }));\n };\n table.getTopRows = memo(() => [table.getRowModel().rows, table.getState().rowPinning.top], (allRows, topPinnedRowIds) => table._getPinnedRows(allRows, topPinnedRowIds, 'top'), getMemoOptions(table.options, 'debugRows', 'getTopRows'));\n table.getBottomRows = memo(() => [table.getRowModel().rows, table.getState().rowPinning.bottom], (allRows, bottomPinnedRowIds) => table._getPinnedRows(allRows, bottomPinnedRowIds, 'bottom'), getMemoOptions(table.options, 'debugRows', 'getBottomRows'));\n table.getCenterRows = memo(() => [table.getRowModel().rows, table.getState().rowPinning.top, table.getState().rowPinning.bottom], (allRows, top, bottom) => {\n const topAndBottom = new Set([...(top != null ? top : []), ...(bottom != null ? bottom : [])]);\n return allRows.filter(d => !topAndBottom.has(d.id));\n }, getMemoOptions(table.options, 'debugRows', 'getCenterRows'));\n }\n};\n\n//\n\nconst RowSelection = {\n getInitialState: state => {\n return {\n rowSelection: {},\n ...state\n };\n },\n getDefaultOptions: table => {\n return {\n onRowSelectionChange: makeStateUpdater('rowSelection', table),\n enableRowSelection: true,\n enableMultiRowSelection: true,\n enableSubRowSelection: true\n // enableGroupingRowSelection: false,\n // isAdditiveSelectEvent: (e: unknown) => !!e.metaKey,\n // isInclusiveSelectEvent: (e: unknown) => !!e.shiftKey,\n };\n },\n createTable: table => {\n table.setRowSelection = updater => table.options.onRowSelectionChange == null ? void 0 : table.options.onRowSelectionChange(updater);\n table.resetRowSelection = defaultState => {\n var _table$initialState$r;\n return table.setRowSelection(defaultState ? {} : (_table$initialState$r = table.initialState.rowSelection) != null ? _table$initialState$r : {});\n };\n table.toggleAllRowsSelected = value => {\n table.setRowSelection(old => {\n value = typeof value !== 'undefined' ? value : !table.getIsAllRowsSelected();\n const rowSelection = {\n ...old\n };\n const preGroupedFlatRows = table.getPreGroupedRowModel().flatRows;\n\n // We don't use `mutateRowIsSelected` here for performance reasons.\n // All of the rows are flat already, so it wouldn't be worth it\n if (value) {\n preGroupedFlatRows.forEach(row => {\n if (!row.getCanSelect()) {\n return;\n }\n rowSelection[row.id] = true;\n });\n } else {\n preGroupedFlatRows.forEach(row => {\n delete rowSelection[row.id];\n });\n }\n return rowSelection;\n });\n };\n table.toggleAllPageRowsSelected = value => table.setRowSelection(old => {\n const resolvedValue = typeof value !== 'undefined' ? value : !table.getIsAllPageRowsSelected();\n const rowSelection = {\n ...old\n };\n table.getRowModel().rows.forEach(row => {\n mutateRowIsSelected(rowSelection, row.id, resolvedValue, true, table);\n });\n return rowSelection;\n });\n\n // addRowSelectionRange: rowId => {\n // const {\n // rows,\n // rowsById,\n // options: { selectGroupingRows, selectSubRows },\n // } = table\n\n // const findSelectedRow = (rows: Row[]) => {\n // let found\n // rows.find(d => {\n // if (d.getIsSelected()) {\n // found = d\n // return true\n // }\n // const subFound = findSelectedRow(d.subRows || [])\n // if (subFound) {\n // found = subFound\n // return true\n // }\n // return false\n // })\n // return found\n // }\n\n // const firstRow = findSelectedRow(rows) || rows[0]\n // const lastRow = rowsById[rowId]\n\n // let include = false\n // const selectedRowIds = {}\n\n // const addRow = (row: Row) => {\n // mutateRowIsSelected(selectedRowIds, row.id, true, {\n // rowsById,\n // selectGroupingRows: selectGroupingRows!,\n // selectSubRows: selectSubRows!,\n // })\n // }\n\n // table.rows.forEach(row => {\n // const isFirstRow = row.id === firstRow.id\n // const isLastRow = row.id === lastRow.id\n\n // if (isFirstRow || isLastRow) {\n // if (!include) {\n // include = true\n // } else if (include) {\n // addRow(row)\n // include = false\n // }\n // }\n\n // if (include) {\n // addRow(row)\n // }\n // })\n\n // table.setRowSelection(selectedRowIds)\n // },\n table.getPreSelectedRowModel = () => table.getCoreRowModel();\n table.getSelectedRowModel = memo(() => [table.getState().rowSelection, table.getCoreRowModel()], (rowSelection, rowModel) => {\n if (!Object.keys(rowSelection).length) {\n return {\n rows: [],\n flatRows: [],\n rowsById: {}\n };\n }\n return selectRowsFn(table, rowModel);\n }, getMemoOptions(table.options, 'debugTable', 'getSelectedRowModel'));\n table.getFilteredSelectedRowModel = memo(() => [table.getState().rowSelection, table.getFilteredRowModel()], (rowSelection, rowModel) => {\n if (!Object.keys(rowSelection).length) {\n return {\n rows: [],\n flatRows: [],\n rowsById: {}\n };\n }\n return selectRowsFn(table, rowModel);\n }, getMemoOptions(table.options, 'debugTable', 'getFilteredSelectedRowModel'));\n table.getGroupedSelectedRowModel = memo(() => [table.getState().rowSelection, table.getSortedRowModel()], (rowSelection, rowModel) => {\n if (!Object.keys(rowSelection).length) {\n return {\n rows: [],\n flatRows: [],\n rowsById: {}\n };\n }\n return selectRowsFn(table, rowModel);\n }, getMemoOptions(table.options, 'debugTable', 'getGroupedSelectedRowModel'));\n\n ///\n\n // getGroupingRowCanSelect: rowId => {\n // const row = table.getRow(rowId)\n\n // if (!row) {\n // throw new Error()\n // }\n\n // if (typeof table.options.enableGroupingRowSelection === 'function') {\n // return table.options.enableGroupingRowSelection(row)\n // }\n\n // return table.options.enableGroupingRowSelection ?? false\n // },\n\n table.getIsAllRowsSelected = () => {\n const preGroupedFlatRows = table.getFilteredRowModel().flatRows;\n const {\n rowSelection\n } = table.getState();\n let isAllRowsSelected = Boolean(preGroupedFlatRows.length && Object.keys(rowSelection).length);\n if (isAllRowsSelected) {\n if (preGroupedFlatRows.some(row => row.getCanSelect() && !rowSelection[row.id])) {\n isAllRowsSelected = false;\n }\n }\n return isAllRowsSelected;\n };\n table.getIsAllPageRowsSelected = () => {\n const paginationFlatRows = table.getPaginationRowModel().flatRows.filter(row => row.getCanSelect());\n const {\n rowSelection\n } = table.getState();\n let isAllPageRowsSelected = !!paginationFlatRows.length;\n if (isAllPageRowsSelected && paginationFlatRows.some(row => !rowSelection[row.id])) {\n isAllPageRowsSelected = false;\n }\n return isAllPageRowsSelected;\n };\n table.getIsSomeRowsSelected = () => {\n var _table$getState$rowSe;\n const totalSelected = Object.keys((_table$getState$rowSe = table.getState().rowSelection) != null ? _table$getState$rowSe : {}).length;\n return totalSelected > 0 && totalSelected < table.getFilteredRowModel().flatRows.length;\n };\n table.getIsSomePageRowsSelected = () => {\n const paginationFlatRows = table.getPaginationRowModel().flatRows;\n return table.getIsAllPageRowsSelected() ? false : paginationFlatRows.filter(row => row.getCanSelect()).some(d => d.getIsSelected() || d.getIsSomeSelected());\n };\n table.getToggleAllRowsSelectedHandler = () => {\n return e => {\n table.toggleAllRowsSelected(e.target.checked);\n };\n };\n table.getToggleAllPageRowsSelectedHandler = () => {\n return e => {\n table.toggleAllPageRowsSelected(e.target.checked);\n };\n };\n },\n createRow: (row, table) => {\n row.toggleSelected = (value, opts) => {\n const isSelected = row.getIsSelected();\n table.setRowSelection(old => {\n var _opts$selectChildren;\n value = typeof value !== 'undefined' ? value : !isSelected;\n if (row.getCanSelect() && isSelected === value) {\n return old;\n }\n const selectedRowIds = {\n ...old\n };\n mutateRowIsSelected(selectedRowIds, row.id, value, (_opts$selectChildren = opts == null ? void 0 : opts.selectChildren) != null ? _opts$selectChildren : true, table);\n return selectedRowIds;\n });\n };\n row.getIsSelected = () => {\n const {\n rowSelection\n } = table.getState();\n return isRowSelected(row, rowSelection);\n };\n row.getIsSomeSelected = () => {\n const {\n rowSelection\n } = table.getState();\n return isSubRowSelected(row, rowSelection) === 'some';\n };\n row.getIsAllSubRowsSelected = () => {\n const {\n rowSelection\n } = table.getState();\n return isSubRowSelected(row, rowSelection) === 'all';\n };\n row.getCanSelect = () => {\n var _table$options$enable;\n if (typeof table.options.enableRowSelection === 'function') {\n return table.options.enableRowSelection(row);\n }\n return (_table$options$enable = table.options.enableRowSelection) != null ? _table$options$enable : true;\n };\n row.getCanSelectSubRows = () => {\n var _table$options$enable2;\n if (typeof table.options.enableSubRowSelection === 'function') {\n return table.options.enableSubRowSelection(row);\n }\n return (_table$options$enable2 = table.options.enableSubRowSelection) != null ? _table$options$enable2 : true;\n };\n row.getCanMultiSelect = () => {\n var _table$options$enable3;\n if (typeof table.options.enableMultiRowSelection === 'function') {\n return table.options.enableMultiRowSelection(row);\n }\n return (_table$options$enable3 = table.options.enableMultiRowSelection) != null ? _table$options$enable3 : true;\n };\n row.getToggleSelectedHandler = () => {\n const canSelect = row.getCanSelect();\n return e => {\n var _target;\n if (!canSelect) return;\n row.toggleSelected((_target = e.target) == null ? void 0 : _target.checked);\n };\n };\n }\n};\nconst mutateRowIsSelected = (selectedRowIds, id, value, includeChildren, table) => {\n var _row$subRows;\n const row = table.getRow(id, true);\n\n // const isGrouped = row.getIsGrouped()\n\n // if ( // TODO: enforce grouping row selection rules\n // !isGrouped ||\n // (isGrouped && table.options.enableGroupingRowSelection)\n // ) {\n if (value) {\n if (!row.getCanMultiSelect()) {\n Object.keys(selectedRowIds).forEach(key => delete selectedRowIds[key]);\n }\n if (row.getCanSelect()) {\n selectedRowIds[id] = true;\n }\n } else {\n delete selectedRowIds[id];\n }\n // }\n\n if (includeChildren && (_row$subRows = row.subRows) != null && _row$subRows.length && row.getCanSelectSubRows()) {\n row.subRows.forEach(row => mutateRowIsSelected(selectedRowIds, row.id, value, includeChildren, table));\n }\n};\nfunction selectRowsFn(table, rowModel) {\n const rowSelection = table.getState().rowSelection;\n const newSelectedFlatRows = [];\n const newSelectedRowsById = {};\n\n // Filters top level and nested rows\n const recurseRows = function (rows, depth) {\n return rows.map(row => {\n var _row$subRows2;\n const isSelected = isRowSelected(row, rowSelection);\n if (isSelected) {\n newSelectedFlatRows.push(row);\n newSelectedRowsById[row.id] = row;\n }\n if ((_row$subRows2 = row.subRows) != null && _row$subRows2.length) {\n row = {\n ...row,\n subRows: recurseRows(row.subRows)\n };\n }\n if (isSelected) {\n return row;\n }\n }).filter(Boolean);\n };\n return {\n rows: recurseRows(rowModel.rows),\n flatRows: newSelectedFlatRows,\n rowsById: newSelectedRowsById\n };\n}\nfunction isRowSelected(row, selection) {\n var _selection$row$id;\n return (_selection$row$id = selection[row.id]) != null ? _selection$row$id : false;\n}\nfunction isSubRowSelected(row, selection, table) {\n var _row$subRows3;\n if (!((_row$subRows3 = row.subRows) != null && _row$subRows3.length)) return false;\n let allChildrenSelected = true;\n let someSelected = false;\n row.subRows.forEach(subRow => {\n // Bail out early if we know both of these\n if (someSelected && !allChildrenSelected) {\n return;\n }\n if (subRow.getCanSelect()) {\n if (isRowSelected(subRow, selection)) {\n someSelected = true;\n } else {\n allChildrenSelected = false;\n }\n }\n\n // Check row selection of nested subrows\n if (subRow.subRows && subRow.subRows.length) {\n const subRowChildrenSelected = isSubRowSelected(subRow, selection);\n if (subRowChildrenSelected === 'all') {\n someSelected = true;\n } else if (subRowChildrenSelected === 'some') {\n someSelected = true;\n allChildrenSelected = false;\n } else {\n allChildrenSelected = false;\n }\n }\n });\n return allChildrenSelected ? 'all' : someSelected ? 'some' : false;\n}\n\nconst reSplitAlphaNumeric = /([0-9]+)/gm;\nconst alphanumeric = (rowA, rowB, columnId) => {\n return compareAlphanumeric(toString(rowA.getValue(columnId)).toLowerCase(), toString(rowB.getValue(columnId)).toLowerCase());\n};\nconst alphanumericCaseSensitive = (rowA, rowB, columnId) => {\n return compareAlphanumeric(toString(rowA.getValue(columnId)), toString(rowB.getValue(columnId)));\n};\n\n// The text filter is more basic (less numeric support)\n// but is much faster\nconst text = (rowA, rowB, columnId) => {\n return compareBasic(toString(rowA.getValue(columnId)).toLowerCase(), toString(rowB.getValue(columnId)).toLowerCase());\n};\n\n// The text filter is more basic (less numeric support)\n// but is much faster\nconst textCaseSensitive = (rowA, rowB, columnId) => {\n return compareBasic(toString(rowA.getValue(columnId)), toString(rowB.getValue(columnId)));\n};\nconst datetime = (rowA, rowB, columnId) => {\n const a = rowA.getValue(columnId);\n const b = rowB.getValue(columnId);\n\n // Can handle nullish values\n // Use > and < because == (and ===) doesn't work with\n // Date objects (would require calling getTime()).\n return a > b ? 1 : a < b ? -1 : 0;\n};\nconst basic = (rowA, rowB, columnId) => {\n return compareBasic(rowA.getValue(columnId), rowB.getValue(columnId));\n};\n\n// Utils\n\nfunction compareBasic(a, b) {\n return a === b ? 0 : a > b ? 1 : -1;\n}\nfunction toString(a) {\n if (typeof a === 'number') {\n if (isNaN(a) || a === Infinity || a === -Infinity) {\n return '';\n }\n return String(a);\n }\n if (typeof a === 'string') {\n return a;\n }\n return '';\n}\n\n// Mixed sorting is slow, but very inclusive of many edge cases.\n// It handles numbers, mixed alphanumeric combinations, and even\n// null, undefined, and Infinity\nfunction compareAlphanumeric(aStr, bStr) {\n // Split on number groups, but keep the delimiter\n // Then remove falsey split values\n const a = aStr.split(reSplitAlphaNumeric).filter(Boolean);\n const b = bStr.split(reSplitAlphaNumeric).filter(Boolean);\n\n // While\n while (a.length && b.length) {\n const aa = a.shift();\n const bb = b.shift();\n const an = parseInt(aa, 10);\n const bn = parseInt(bb, 10);\n const combo = [an, bn].sort();\n\n // Both are string\n if (isNaN(combo[0])) {\n if (aa > bb) {\n return 1;\n }\n if (bb > aa) {\n return -1;\n }\n continue;\n }\n\n // One is a string, one is a number\n if (isNaN(combo[1])) {\n return isNaN(an) ? -1 : 1;\n }\n\n // Both are numbers\n if (an > bn) {\n return 1;\n }\n if (bn > an) {\n return -1;\n }\n }\n return a.length - b.length;\n}\n\n// Exports\n\nconst sortingFns = {\n alphanumeric,\n alphanumericCaseSensitive,\n text,\n textCaseSensitive,\n datetime,\n basic\n};\n\n//\n\nconst RowSorting = {\n getInitialState: state => {\n return {\n sorting: [],\n ...state\n };\n },\n getDefaultColumnDef: () => {\n return {\n sortingFn: 'auto',\n sortUndefined: 1\n };\n },\n getDefaultOptions: table => {\n return {\n onSortingChange: makeStateUpdater('sorting', table),\n isMultiSortEvent: e => {\n return e.shiftKey;\n }\n };\n },\n createColumn: (column, table) => {\n column.getAutoSortingFn = () => {\n const firstRows = table.getFilteredRowModel().flatRows.slice(10);\n let isString = false;\n for (const row of firstRows) {\n const value = row == null ? void 0 : row.getValue(column.id);\n if (Object.prototype.toString.call(value) === '[object Date]') {\n return sortingFns.datetime;\n }\n if (typeof value === 'string') {\n isString = true;\n if (value.split(reSplitAlphaNumeric).length > 1) {\n return sortingFns.alphanumeric;\n }\n }\n }\n if (isString) {\n return sortingFns.text;\n }\n return sortingFns.basic;\n };\n column.getAutoSortDir = () => {\n const firstRow = table.getFilteredRowModel().flatRows[0];\n const value = firstRow == null ? void 0 : firstRow.getValue(column.id);\n if (typeof value === 'string') {\n return 'asc';\n }\n return 'desc';\n };\n column.getSortingFn = () => {\n var _table$options$sortin, _table$options$sortin2;\n if (!column) {\n throw new Error();\n }\n return isFunction(column.columnDef.sortingFn) ? column.columnDef.sortingFn : column.columnDef.sortingFn === 'auto' ? column.getAutoSortingFn() : (_table$options$sortin = (_table$options$sortin2 = table.options.sortingFns) == null ? void 0 : _table$options$sortin2[column.columnDef.sortingFn]) != null ? _table$options$sortin : sortingFns[column.columnDef.sortingFn];\n };\n column.toggleSorting = (desc, multi) => {\n // if (column.columns.length) {\n // column.columns.forEach((c, i) => {\n // if (c.id) {\n // table.toggleColumnSorting(c.id, undefined, multi || !!i)\n // }\n // })\n // return\n // }\n\n // this needs to be outside of table.setSorting to be in sync with rerender\n const nextSortingOrder = column.getNextSortingOrder();\n const hasManualValue = typeof desc !== 'undefined' && desc !== null;\n table.setSorting(old => {\n // Find any existing sorting for this column\n const existingSorting = old == null ? void 0 : old.find(d => d.id === column.id);\n const existingIndex = old == null ? void 0 : old.findIndex(d => d.id === column.id);\n let newSorting = [];\n\n // What should we do with this sort action?\n let sortAction;\n let nextDesc = hasManualValue ? desc : nextSortingOrder === 'desc';\n\n // Multi-mode\n if (old != null && old.length && column.getCanMultiSort() && multi) {\n if (existingSorting) {\n sortAction = 'toggle';\n } else {\n sortAction = 'add';\n }\n } else {\n // Normal mode\n if (old != null && old.length && existingIndex !== old.length - 1) {\n sortAction = 'replace';\n } else if (existingSorting) {\n sortAction = 'toggle';\n } else {\n sortAction = 'replace';\n }\n }\n\n // Handle toggle states that will remove the sorting\n if (sortAction === 'toggle') {\n // If we are \"actually\" toggling (not a manual set value), should we remove the sorting?\n if (!hasManualValue) {\n // Is our intention to remove?\n if (!nextSortingOrder) {\n sortAction = 'remove';\n }\n }\n }\n if (sortAction === 'add') {\n var _table$options$maxMul;\n newSorting = [...old, {\n id: column.id,\n desc: nextDesc\n }];\n // Take latest n columns\n newSorting.splice(0, newSorting.length - ((_table$options$maxMul = table.options.maxMultiSortColCount) != null ? _table$options$maxMul : Number.MAX_SAFE_INTEGER));\n } else if (sortAction === 'toggle') {\n // This flips (or sets) the\n newSorting = old.map(d => {\n if (d.id === column.id) {\n return {\n ...d,\n desc: nextDesc\n };\n }\n return d;\n });\n } else if (sortAction === 'remove') {\n newSorting = old.filter(d => d.id !== column.id);\n } else {\n newSorting = [{\n id: column.id,\n desc: nextDesc\n }];\n }\n return newSorting;\n });\n };\n column.getFirstSortDir = () => {\n var _ref, _column$columnDef$sor;\n const sortDescFirst = (_ref = (_column$columnDef$sor = column.columnDef.sortDescFirst) != null ? _column$columnDef$sor : table.options.sortDescFirst) != null ? _ref : column.getAutoSortDir() === 'desc';\n return sortDescFirst ? 'desc' : 'asc';\n };\n column.getNextSortingOrder = multi => {\n var _table$options$enable, _table$options$enable2;\n const firstSortDirection = column.getFirstSortDir();\n const isSorted = column.getIsSorted();\n if (!isSorted) {\n return firstSortDirection;\n }\n if (isSorted !== firstSortDirection && ((_table$options$enable = table.options.enableSortingRemoval) != null ? _table$options$enable : true) && (\n // If enableSortRemove, enable in general\n multi ? (_table$options$enable2 = table.options.enableMultiRemove) != null ? _table$options$enable2 : true : true) // If multi, don't allow if enableMultiRemove))\n ) {\n return false;\n }\n return isSorted === 'desc' ? 'asc' : 'desc';\n };\n column.getCanSort = () => {\n var _column$columnDef$ena, _table$options$enable3;\n return ((_column$columnDef$ena = column.columnDef.enableSorting) != null ? _column$columnDef$ena : true) && ((_table$options$enable3 = table.options.enableSorting) != null ? _table$options$enable3 : true) && !!column.accessorFn;\n };\n column.getCanMultiSort = () => {\n var _ref2, _column$columnDef$ena2;\n return (_ref2 = (_column$columnDef$ena2 = column.columnDef.enableMultiSort) != null ? _column$columnDef$ena2 : table.options.enableMultiSort) != null ? _ref2 : !!column.accessorFn;\n };\n column.getIsSorted = () => {\n var _table$getState$sorti;\n const columnSort = (_table$getState$sorti = table.getState().sorting) == null ? void 0 : _table$getState$sorti.find(d => d.id === column.id);\n return !columnSort ? false : columnSort.desc ? 'desc' : 'asc';\n };\n column.getSortIndex = () => {\n var _table$getState$sorti2, _table$getState$sorti3;\n return (_table$getState$sorti2 = (_table$getState$sorti3 = table.getState().sorting) == null ? void 0 : _table$getState$sorti3.findIndex(d => d.id === column.id)) != null ? _table$getState$sorti2 : -1;\n };\n column.clearSorting = () => {\n //clear sorting for just 1 column\n table.setSorting(old => old != null && old.length ? old.filter(d => d.id !== column.id) : []);\n };\n column.getToggleSortingHandler = () => {\n const canSort = column.getCanSort();\n return e => {\n if (!canSort) return;\n e.persist == null || e.persist();\n column.toggleSorting == null || column.toggleSorting(undefined, column.getCanMultiSort() ? table.options.isMultiSortEvent == null ? void 0 : table.options.isMultiSortEvent(e) : false);\n };\n };\n },\n createTable: table => {\n table.setSorting = updater => table.options.onSortingChange == null ? void 0 : table.options.onSortingChange(updater);\n table.resetSorting = defaultState => {\n var _table$initialState$s, _table$initialState;\n table.setSorting(defaultState ? [] : (_table$initialState$s = (_table$initialState = table.initialState) == null ? void 0 : _table$initialState.sorting) != null ? _table$initialState$s : []);\n };\n table.getPreSortedRowModel = () => table.getGroupedRowModel();\n table.getSortedRowModel = () => {\n if (!table._getSortedRowModel && table.options.getSortedRowModel) {\n table._getSortedRowModel = table.options.getSortedRowModel(table);\n }\n if (table.options.manualSorting || !table._getSortedRowModel) {\n return table.getPreSortedRowModel();\n }\n return table._getSortedRowModel();\n };\n }\n};\n\nconst builtInFeatures = [Headers, ColumnVisibility, ColumnOrdering, ColumnPinning, ColumnFaceting, ColumnFiltering, GlobalFaceting,\n//depends on ColumnFaceting\nGlobalFiltering,\n//depends on ColumnFiltering\nRowSorting, ColumnGrouping,\n//depends on RowSorting\nRowExpanding, RowPagination, RowPinning, RowSelection, ColumnSizing];\n\n//\n\nfunction createTable(options) {\n var _options$_features, _options$initialState;\n if (process.env.NODE_ENV !== 'production' && (options.debugAll || options.debugTable)) {\n console.info('Creating Table Instance...');\n }\n const _features = [...builtInFeatures, ...((_options$_features = options._features) != null ? _options$_features : [])];\n let table = {\n _features\n };\n const defaultOptions = table._features.reduce((obj, feature) => {\n return Object.assign(obj, feature.getDefaultOptions == null ? void 0 : feature.getDefaultOptions(table));\n }, {});\n const mergeOptions = options => {\n if (table.options.mergeOptions) {\n return table.options.mergeOptions(defaultOptions, options);\n }\n return {\n ...defaultOptions,\n ...options\n };\n };\n const coreInitialState = {};\n let initialState = {\n ...coreInitialState,\n ...((_options$initialState = options.initialState) != null ? _options$initialState : {})\n };\n table._features.forEach(feature => {\n var _feature$getInitialSt;\n initialState = (_feature$getInitialSt = feature.getInitialState == null ? void 0 : feature.getInitialState(initialState)) != null ? _feature$getInitialSt : initialState;\n });\n const queued = [];\n let queuedTimeout = false;\n const coreInstance = {\n _features,\n options: {\n ...defaultOptions,\n ...options\n },\n initialState,\n _queue: cb => {\n queued.push(cb);\n if (!queuedTimeout) {\n queuedTimeout = true;\n\n // Schedule a microtask to run the queued callbacks after\n // the current call stack (render, etc) has finished.\n Promise.resolve().then(() => {\n while (queued.length) {\n queued.shift()();\n }\n queuedTimeout = false;\n }).catch(error => setTimeout(() => {\n throw error;\n }));\n }\n },\n reset: () => {\n table.setState(table.initialState);\n },\n setOptions: updater => {\n const newOptions = functionalUpdate(updater, table.options);\n table.options = mergeOptions(newOptions);\n },\n getState: () => {\n return table.options.state;\n },\n setState: updater => {\n table.options.onStateChange == null || table.options.onStateChange(updater);\n },\n _getRowId: (row, index, parent) => {\n var _table$options$getRow;\n return (_table$options$getRow = table.options.getRowId == null ? void 0 : table.options.getRowId(row, index, parent)) != null ? _table$options$getRow : `${parent ? [parent.id, index].join('.') : index}`;\n },\n getCoreRowModel: () => {\n if (!table._getCoreRowModel) {\n table._getCoreRowModel = table.options.getCoreRowModel(table);\n }\n return table._getCoreRowModel();\n },\n // The final calls start at the bottom of the model,\n // expanded rows, which then work their way up\n\n getRowModel: () => {\n return table.getPaginationRowModel();\n },\n //in next version, we should just pass in the row model as the optional 2nd arg\n getRow: (id, searchAll) => {\n let row = (searchAll ? table.getPrePaginationRowModel() : table.getRowModel()).rowsById[id];\n if (!row) {\n row = table.getCoreRowModel().rowsById[id];\n if (!row) {\n if (process.env.NODE_ENV !== 'production') {\n throw new Error(`getRow could not find row with ID: ${id}`);\n }\n throw new Error();\n }\n }\n return row;\n },\n _getDefaultColumnDef: memo(() => [table.options.defaultColumn], defaultColumn => {\n var _defaultColumn;\n defaultColumn = (_defaultColumn = defaultColumn) != null ? _defaultColumn : {};\n return {\n header: props => {\n const resolvedColumnDef = props.header.column.columnDef;\n if (resolvedColumnDef.accessorKey) {\n return resolvedColumnDef.accessorKey;\n }\n if (resolvedColumnDef.accessorFn) {\n return resolvedColumnDef.id;\n }\n return null;\n },\n // footer: props => props.header.column.id,\n cell: props => {\n var _props$renderValue$to, _props$renderValue;\n return (_props$renderValue$to = (_props$renderValue = props.renderValue()) == null || _props$renderValue.toString == null ? void 0 : _props$renderValue.toString()) != null ? _props$renderValue$to : null;\n },\n ...table._features.reduce((obj, feature) => {\n return Object.assign(obj, feature.getDefaultColumnDef == null ? void 0 : feature.getDefaultColumnDef());\n }, {}),\n ...defaultColumn\n };\n }, getMemoOptions(options, 'debugColumns', '_getDefaultColumnDef')),\n _getColumnDefs: () => table.options.columns,\n getAllColumns: memo(() => [table._getColumnDefs()], columnDefs => {\n const recurseColumns = function (columnDefs, parent, depth) {\n if (depth === void 0) {\n depth = 0;\n }\n return columnDefs.map(columnDef => {\n const column = createColumn(table, columnDef, depth, parent);\n const groupingColumnDef = columnDef;\n column.columns = groupingColumnDef.columns ? recurseColumns(groupingColumnDef.columns, column, depth + 1) : [];\n return column;\n });\n };\n return recurseColumns(columnDefs);\n }, getMemoOptions(options, 'debugColumns', 'getAllColumns')),\n getAllFlatColumns: memo(() => [table.getAllColumns()], allColumns => {\n return allColumns.flatMap(column => {\n return column.getFlatColumns();\n });\n }, getMemoOptions(options, 'debugColumns', 'getAllFlatColumns')),\n _getAllFlatColumnsById: memo(() => [table.getAllFlatColumns()], flatColumns => {\n return flatColumns.reduce((acc, column) => {\n acc[column.id] = column;\n return acc;\n }, {});\n }, getMemoOptions(options, 'debugColumns', 'getAllFlatColumnsById')),\n getAllLeafColumns: memo(() => [table.getAllColumns(), table._getOrderColumnsFn()], (allColumns, orderColumns) => {\n let leafColumns = allColumns.flatMap(column => column.getLeafColumns());\n return orderColumns(leafColumns);\n }, getMemoOptions(options, 'debugColumns', 'getAllLeafColumns')),\n getColumn: columnId => {\n const column = table._getAllFlatColumnsById()[columnId];\n if (process.env.NODE_ENV !== 'production' && !column) {\n console.error(`[Table] Column with id '${columnId}' does not exist.`);\n }\n return column;\n }\n };\n Object.assign(table, coreInstance);\n for (let index = 0; index < table._features.length; index++) {\n const feature = table._features[index];\n feature == null || feature.createTable == null || feature.createTable(table);\n }\n return table;\n}\n\nfunction getCoreRowModel() {\n return table => memo(() => [table.options.data], data => {\n const rowModel = {\n rows: [],\n flatRows: [],\n rowsById: {}\n };\n const accessRows = function (originalRows, depth, parentRow) {\n if (depth === void 0) {\n depth = 0;\n }\n const rows = [];\n for (let i = 0; i < originalRows.length; i++) {\n // This could be an expensive check at scale, so we should move it somewhere else, but where?\n // if (!id) {\n // if (process.env.NODE_ENV !== 'production') {\n // throw new Error(`getRowId expected an ID, but got ${id}`)\n // }\n // }\n\n // Make the row\n const row = createRow(table, table._getRowId(originalRows[i], i, parentRow), originalRows[i], i, depth, undefined, parentRow == null ? void 0 : parentRow.id);\n\n // Keep track of every row in a flat array\n rowModel.flatRows.push(row);\n // Also keep track of every row by its ID\n rowModel.rowsById[row.id] = row;\n // Push table row into parent\n rows.push(row);\n\n // Get the original subrows\n if (table.options.getSubRows) {\n var _row$originalSubRows;\n row.originalSubRows = table.options.getSubRows(originalRows[i], i);\n\n // Then recursively access them\n if ((_row$originalSubRows = row.originalSubRows) != null && _row$originalSubRows.length) {\n row.subRows = accessRows(row.originalSubRows, depth + 1, row);\n }\n }\n }\n return rows;\n };\n rowModel.rows = accessRows(data);\n return rowModel;\n }, getMemoOptions(table.options, 'debugTable', 'getRowModel', () => table._autoResetPageIndex()));\n}\n\nfunction getExpandedRowModel() {\n return table => memo(() => [table.getState().expanded, table.getPreExpandedRowModel(), table.options.paginateExpandedRows], (expanded, rowModel, paginateExpandedRows) => {\n if (!rowModel.rows.length || expanded !== true && !Object.keys(expanded != null ? expanded : {}).length) {\n return rowModel;\n }\n if (!paginateExpandedRows) {\n // Only expand rows at this point if they are being paginated\n return rowModel;\n }\n return expandRows(rowModel);\n }, getMemoOptions(table.options, 'debugTable', 'getExpandedRowModel'));\n}\nfunction expandRows(rowModel) {\n const expandedRows = [];\n const handleRow = row => {\n var _row$subRows;\n expandedRows.push(row);\n if ((_row$subRows = row.subRows) != null && _row$subRows.length && row.getIsExpanded()) {\n row.subRows.forEach(handleRow);\n }\n };\n rowModel.rows.forEach(handleRow);\n return {\n rows: expandedRows,\n flatRows: rowModel.flatRows,\n rowsById: rowModel.rowsById\n };\n}\n\nfunction getFacetedMinMaxValues() {\n return (table, columnId) => memo(() => {\n var _table$getColumn;\n return [(_table$getColumn = table.getColumn(columnId)) == null ? void 0 : _table$getColumn.getFacetedRowModel()];\n }, facetedRowModel => {\n if (!facetedRowModel) return undefined;\n const uniqueValues = facetedRowModel.flatRows.flatMap(flatRow => {\n var _flatRow$getUniqueVal;\n return (_flatRow$getUniqueVal = flatRow.getUniqueValues(columnId)) != null ? _flatRow$getUniqueVal : [];\n }).map(Number).filter(value => !Number.isNaN(value));\n if (!uniqueValues.length) return;\n let facetedMinValue = uniqueValues[0];\n let facetedMaxValue = uniqueValues[uniqueValues.length - 1];\n for (const value of uniqueValues) {\n if (value < facetedMinValue) facetedMinValue = value;else if (value > facetedMaxValue) facetedMaxValue = value;\n }\n return [facetedMinValue, facetedMaxValue];\n }, getMemoOptions(table.options, 'debugTable', 'getFacetedMinMaxValues'));\n}\n\nfunction filterRows(rows, filterRowImpl, table) {\n if (table.options.filterFromLeafRows) {\n return filterRowModelFromLeafs(rows, filterRowImpl, table);\n }\n return filterRowModelFromRoot(rows, filterRowImpl, table);\n}\nfunction filterRowModelFromLeafs(rowsToFilter, filterRow, table) {\n var _table$options$maxLea;\n const newFilteredFlatRows = [];\n const newFilteredRowsById = {};\n const maxDepth = (_table$options$maxLea = table.options.maxLeafRowFilterDepth) != null ? _table$options$maxLea : 100;\n const recurseFilterRows = function (rowsToFilter, depth) {\n if (depth === void 0) {\n depth = 0;\n }\n const rows = [];\n\n // Filter from children up first\n for (let i = 0; i < rowsToFilter.length; i++) {\n var _row$subRows;\n let row = rowsToFilter[i];\n const newRow = createRow(table, row.id, row.original, row.index, row.depth, undefined, row.parentId);\n newRow.columnFilters = row.columnFilters;\n if ((_row$subRows = row.subRows) != null && _row$subRows.length && depth < maxDepth) {\n newRow.subRows = recurseFilterRows(row.subRows, depth + 1);\n row = newRow;\n if (filterRow(row) && !newRow.subRows.length) {\n rows.push(row);\n newFilteredRowsById[row.id] = row;\n newFilteredFlatRows.push(row);\n continue;\n }\n if (filterRow(row) || newRow.subRows.length) {\n rows.push(row);\n newFilteredRowsById[row.id] = row;\n newFilteredFlatRows.push(row);\n continue;\n }\n } else {\n row = newRow;\n if (filterRow(row)) {\n rows.push(row);\n newFilteredRowsById[row.id] = row;\n newFilteredFlatRows.push(row);\n }\n }\n }\n return rows;\n };\n return {\n rows: recurseFilterRows(rowsToFilter),\n flatRows: newFilteredFlatRows,\n rowsById: newFilteredRowsById\n };\n}\nfunction filterRowModelFromRoot(rowsToFilter, filterRow, table) {\n var _table$options$maxLea2;\n const newFilteredFlatRows = [];\n const newFilteredRowsById = {};\n const maxDepth = (_table$options$maxLea2 = table.options.maxLeafRowFilterDepth) != null ? _table$options$maxLea2 : 100;\n\n // Filters top level and nested rows\n const recurseFilterRows = function (rowsToFilter, depth) {\n if (depth === void 0) {\n depth = 0;\n }\n // Filter from parents downward first\n\n const rows = [];\n\n // Apply the filter to any subRows\n for (let i = 0; i < rowsToFilter.length; i++) {\n let row = rowsToFilter[i];\n const pass = filterRow(row);\n if (pass) {\n var _row$subRows2;\n if ((_row$subRows2 = row.subRows) != null && _row$subRows2.length && depth < maxDepth) {\n const newRow = createRow(table, row.id, row.original, row.index, row.depth, undefined, row.parentId);\n newRow.subRows = recurseFilterRows(row.subRows, depth + 1);\n row = newRow;\n }\n rows.push(row);\n newFilteredFlatRows.push(row);\n newFilteredRowsById[row.id] = row;\n }\n }\n return rows;\n };\n return {\n rows: recurseFilterRows(rowsToFilter),\n flatRows: newFilteredFlatRows,\n rowsById: newFilteredRowsById\n };\n}\n\nfunction getFacetedRowModel() {\n return (table, columnId) => memo(() => [table.getPreFilteredRowModel(), table.getState().columnFilters, table.getState().globalFilter, table.getFilteredRowModel()], (preRowModel, columnFilters, globalFilter) => {\n if (!preRowModel.rows.length || !(columnFilters != null && columnFilters.length) && !globalFilter) {\n return preRowModel;\n }\n const filterableIds = [...columnFilters.map(d => d.id).filter(d => d !== columnId), globalFilter ? '__global__' : undefined].filter(Boolean);\n const filterRowsImpl = row => {\n // Horizontally filter rows through each column\n for (let i = 0; i < filterableIds.length; i++) {\n if (row.columnFilters[filterableIds[i]] === false) {\n return false;\n }\n }\n return true;\n };\n return filterRows(preRowModel.rows, filterRowsImpl, table);\n }, getMemoOptions(table.options, 'debugTable', 'getFacetedRowModel'));\n}\n\nfunction getFacetedUniqueValues() {\n return (table, columnId) => memo(() => {\n var _table$getColumn;\n return [(_table$getColumn = table.getColumn(columnId)) == null ? void 0 : _table$getColumn.getFacetedRowModel()];\n }, facetedRowModel => {\n if (!facetedRowModel) return new Map();\n let facetedUniqueValues = new Map();\n for (let i = 0; i < facetedRowModel.flatRows.length; i++) {\n const values = facetedRowModel.flatRows[i].getUniqueValues(columnId);\n for (let j = 0; j < values.length; j++) {\n const value = values[j];\n if (facetedUniqueValues.has(value)) {\n var _facetedUniqueValues$;\n facetedUniqueValues.set(value, ((_facetedUniqueValues$ = facetedUniqueValues.get(value)) != null ? _facetedUniqueValues$ : 0) + 1);\n } else {\n facetedUniqueValues.set(value, 1);\n }\n }\n }\n return facetedUniqueValues;\n }, getMemoOptions(table.options, 'debugTable', `getFacetedUniqueValues_${columnId}`));\n}\n\nfunction getFilteredRowModel() {\n return table => memo(() => [table.getPreFilteredRowModel(), table.getState().columnFilters, table.getState().globalFilter], (rowModel, columnFilters, globalFilter) => {\n if (!rowModel.rows.length || !(columnFilters != null && columnFilters.length) && !globalFilter) {\n for (let i = 0; i < rowModel.flatRows.length; i++) {\n rowModel.flatRows[i].columnFilters = {};\n rowModel.flatRows[i].columnFiltersMeta = {};\n }\n return rowModel;\n }\n const resolvedColumnFilters = [];\n const resolvedGlobalFilters = [];\n (columnFilters != null ? columnFilters : []).forEach(d => {\n var _filterFn$resolveFilt;\n const column = table.getColumn(d.id);\n if (!column) {\n return;\n }\n const filterFn = column.getFilterFn();\n if (!filterFn) {\n if (process.env.NODE_ENV !== 'production') {\n console.warn(`Could not find a valid 'column.filterFn' for column with the ID: ${column.id}.`);\n }\n return;\n }\n resolvedColumnFilters.push({\n id: d.id,\n filterFn,\n resolvedValue: (_filterFn$resolveFilt = filterFn.resolveFilterValue == null ? void 0 : filterFn.resolveFilterValue(d.value)) != null ? _filterFn$resolveFilt : d.value\n });\n });\n const filterableIds = (columnFilters != null ? columnFilters : []).map(d => d.id);\n const globalFilterFn = table.getGlobalFilterFn();\n const globallyFilterableColumns = table.getAllLeafColumns().filter(column => column.getCanGlobalFilter());\n if (globalFilter && globalFilterFn && globallyFilterableColumns.length) {\n filterableIds.push('__global__');\n globallyFilterableColumns.forEach(column => {\n var _globalFilterFn$resol;\n resolvedGlobalFilters.push({\n id: column.id,\n filterFn: globalFilterFn,\n resolvedValue: (_globalFilterFn$resol = globalFilterFn.resolveFilterValue == null ? void 0 : globalFilterFn.resolveFilterValue(globalFilter)) != null ? _globalFilterFn$resol : globalFilter\n });\n });\n }\n let currentColumnFilter;\n let currentGlobalFilter;\n\n // Flag the prefiltered row model with each filter state\n for (let j = 0; j < rowModel.flatRows.length; j++) {\n const row = rowModel.flatRows[j];\n row.columnFilters = {};\n if (resolvedColumnFilters.length) {\n for (let i = 0; i < resolvedColumnFilters.length; i++) {\n currentColumnFilter = resolvedColumnFilters[i];\n const id = currentColumnFilter.id;\n\n // Tag the row with the column filter state\n row.columnFilters[id] = currentColumnFilter.filterFn(row, id, currentColumnFilter.resolvedValue, filterMeta => {\n row.columnFiltersMeta[id] = filterMeta;\n });\n }\n }\n if (resolvedGlobalFilters.length) {\n for (let i = 0; i < resolvedGlobalFilters.length; i++) {\n currentGlobalFilter = resolvedGlobalFilters[i];\n const id = currentGlobalFilter.id;\n // Tag the row with the first truthy global filter state\n if (currentGlobalFilter.filterFn(row, id, currentGlobalFilter.resolvedValue, filterMeta => {\n row.columnFiltersMeta[id] = filterMeta;\n })) {\n row.columnFilters.__global__ = true;\n break;\n }\n }\n if (row.columnFilters.__global__ !== true) {\n row.columnFilters.__global__ = false;\n }\n }\n }\n const filterRowsImpl = row => {\n // Horizontally filter rows through each column\n for (let i = 0; i < filterableIds.length; i++) {\n if (row.columnFilters[filterableIds[i]] === false) {\n return false;\n }\n }\n return true;\n };\n\n // Filter final rows using all of the active filters\n return filterRows(rowModel.rows, filterRowsImpl, table);\n }, getMemoOptions(table.options, 'debugTable', 'getFilteredRowModel', () => table._autoResetPageIndex()));\n}\n\nfunction getGroupedRowModel() {\n return table => memo(() => [table.getState().grouping, table.getPreGroupedRowModel()], (grouping, rowModel) => {\n if (!rowModel.rows.length || !grouping.length) {\n rowModel.rows.forEach(row => {\n row.depth = 0;\n row.parentId = undefined;\n });\n return rowModel;\n }\n\n // Filter the grouping list down to columns that exist\n const existingGrouping = grouping.filter(columnId => table.getColumn(columnId));\n const groupedFlatRows = [];\n const groupedRowsById = {};\n // const onlyGroupedFlatRows: Row[] = [];\n // const onlyGroupedRowsById: Record<RowId, Row> = {};\n // const nonGroupedFlatRows: Row[] = [];\n // const nonGroupedRowsById: Record<RowId, Row> = {};\n\n // Recursively group the data\n const groupUpRecursively = function (rows, depth, parentId) {\n if (depth === void 0) {\n depth = 0;\n }\n // Grouping depth has been been met\n // Stop grouping and simply rewrite thd depth and row relationships\n if (depth >= existingGrouping.length) {\n return rows.map(row => {\n row.depth = depth;\n groupedFlatRows.push(row);\n groupedRowsById[row.id] = row;\n if (row.subRows) {\n row.subRows = groupUpRecursively(row.subRows, depth + 1, row.id);\n }\n return row;\n });\n }\n const columnId = existingGrouping[depth];\n\n // Group the rows together for this level\n const rowGroupsMap = groupBy(rows, columnId);\n\n // Perform aggregations for each group\n const aggregatedGroupedRows = Array.from(rowGroupsMap.entries()).map((_ref, index) => {\n let [groupingValue, groupedRows] = _ref;\n let id = `${columnId}:${groupingValue}`;\n id = parentId ? `${parentId}>${id}` : id;\n\n // First, Recurse to group sub rows before aggregation\n const subRows = groupUpRecursively(groupedRows, depth + 1, id);\n subRows.forEach(subRow => {\n subRow.parentId = id;\n });\n\n // Flatten the leaf rows of the rows in this group\n const leafRows = depth ? flattenBy(groupedRows, row => row.subRows) : groupedRows;\n const row = createRow(table, id, leafRows[0].original, index, depth, undefined, parentId);\n Object.assign(row, {\n groupingColumnId: columnId,\n groupingValue,\n subRows,\n leafRows,\n getValue: columnId => {\n // Don't aggregate columns that are in the grouping\n if (existingGrouping.includes(columnId)) {\n if (row._valuesCache.hasOwnProperty(columnId)) {\n return row._valuesCache[columnId];\n }\n if (groupedRows[0]) {\n var _groupedRows$0$getVal;\n row._valuesCache[columnId] = (_groupedRows$0$getVal = groupedRows[0].getValue(columnId)) != null ? _groupedRows$0$getVal : undefined;\n }\n return row._valuesCache[columnId];\n }\n if (row._groupingValuesCache.hasOwnProperty(columnId)) {\n return row._groupingValuesCache[columnId];\n }\n\n // Aggregate the values\n const column = table.getColumn(columnId);\n const aggregateFn = column == null ? void 0 : column.getAggregationFn();\n if (aggregateFn) {\n row._groupingValuesCache[columnId] = aggregateFn(columnId, leafRows, groupedRows);\n return row._groupingValuesCache[columnId];\n }\n }\n });\n subRows.forEach(subRow => {\n groupedFlatRows.push(subRow);\n groupedRowsById[subRow.id] = subRow;\n // if (subRow.getIsGrouped?.()) {\n // onlyGroupedFlatRows.push(subRow);\n // onlyGroupedRowsById[subRow.id] = subRow;\n // } else {\n // nonGroupedFlatRows.push(subRow);\n // nonGroupedRowsById[subRow.id] = subRow;\n // }\n });\n return row;\n });\n return aggregatedGroupedRows;\n };\n const groupedRows = groupUpRecursively(rowModel.rows, 0);\n groupedRows.forEach(subRow => {\n groupedFlatRows.push(subRow);\n groupedRowsById[subRow.id] = subRow;\n // if (subRow.getIsGrouped?.()) {\n // onlyGroupedFlatRows.push(subRow);\n // onlyGroupedRowsById[subRow.id] = subRow;\n // } else {\n // nonGroupedFlatRows.push(subRow);\n // nonGroupedRowsById[subRow.id] = subRow;\n // }\n });\n return {\n rows: groupedRows,\n flatRows: groupedFlatRows,\n rowsById: groupedRowsById\n };\n }, getMemoOptions(table.options, 'debugTable', 'getGroupedRowModel', () => {\n table._queue(() => {\n table._autoResetExpanded();\n table._autoResetPageIndex();\n });\n }));\n}\nfunction groupBy(rows, columnId) {\n const groupMap = new Map();\n return rows.reduce((map, row) => {\n const resKey = `${row.getGroupingValue(columnId)}`;\n const previous = map.get(resKey);\n if (!previous) {\n map.set(resKey, [row]);\n } else {\n previous.push(row);\n }\n return map;\n }, groupMap);\n}\n\nfunction getPaginationRowModel(opts) {\n return table => memo(() => [table.getState().pagination, table.getPrePaginationRowModel(), table.options.paginateExpandedRows ? undefined : table.getState().expanded], (pagination, rowModel) => {\n if (!rowModel.rows.length) {\n return rowModel;\n }\n const {\n pageSize,\n pageIndex\n } = pagination;\n let {\n rows,\n flatRows,\n rowsById\n } = rowModel;\n const pageStart = pageSize * pageIndex;\n const pageEnd = pageStart + pageSize;\n rows = rows.slice(pageStart, pageEnd);\n let paginatedRowModel;\n if (!table.options.paginateExpandedRows) {\n paginatedRowModel = expandRows({\n rows,\n flatRows,\n rowsById\n });\n } else {\n paginatedRowModel = {\n rows,\n flatRows,\n rowsById\n };\n }\n paginatedRowModel.flatRows = [];\n const handleRow = row => {\n paginatedRowModel.flatRows.push(row);\n if (row.subRows.length) {\n row.subRows.forEach(handleRow);\n }\n };\n paginatedRowModel.rows.forEach(handleRow);\n return paginatedRowModel;\n }, getMemoOptions(table.options, 'debugTable', 'getPaginationRowModel'));\n}\n\nfunction getSortedRowModel() {\n return table => memo(() => [table.getState().sorting, table.getPreSortedRowModel()], (sorting, rowModel) => {\n if (!rowModel.rows.length || !(sorting != null && sorting.length)) {\n return rowModel;\n }\n const sortingState = table.getState().sorting;\n const sortedFlatRows = [];\n\n // Filter out sortings that correspond to non existing columns\n const availableSorting = sortingState.filter(sort => {\n var _table$getColumn;\n return (_table$getColumn = table.getColumn(sort.id)) == null ? void 0 : _table$getColumn.getCanSort();\n });\n const columnInfoById = {};\n availableSorting.forEach(sortEntry => {\n const column = table.getColumn(sortEntry.id);\n if (!column) return;\n columnInfoById[sortEntry.id] = {\n sortUndefined: column.columnDef.sortUndefined,\n invertSorting: column.columnDef.invertSorting,\n sortingFn: column.getSortingFn()\n };\n });\n const sortData = rows => {\n // This will also perform a stable sorting using the row index\n // if needed.\n const sortedData = rows.map(row => ({\n ...row\n }));\n sortedData.sort((rowA, rowB) => {\n for (let i = 0; i < availableSorting.length; i += 1) {\n var _sortEntry$desc;\n const sortEntry = availableSorting[i];\n const columnInfo = columnInfoById[sortEntry.id];\n const sortUndefined = columnInfo.sortUndefined;\n const isDesc = (_sortEntry$desc = sortEntry == null ? void 0 : sortEntry.desc) != null ? _sortEntry$desc : false;\n let sortInt = 0;\n\n // All sorting ints should always return in ascending order\n if (sortUndefined) {\n const aValue = rowA.getValue(sortEntry.id);\n const bValue = rowB.getValue(sortEntry.id);\n const aUndefined = aValue === undefined;\n const bUndefined = bValue === undefined;\n if (aUndefined || bUndefined) {\n if (sortUndefined === 'first') return aUndefined ? -1 : 1;\n if (sortUndefined === 'last') return aUndefined ? 1 : -1;\n sortInt = aUndefined && bUndefined ? 0 : aUndefined ? sortUndefined : -sortUndefined;\n }\n }\n if (sortInt === 0) {\n sortInt = columnInfo.sortingFn(rowA, rowB, sortEntry.id);\n }\n\n // If sorting is non-zero, take care of desc and inversion\n if (sortInt !== 0) {\n if (isDesc) {\n sortInt *= -1;\n }\n if (columnInfo.invertSorting) {\n sortInt *= -1;\n }\n return sortInt;\n }\n }\n return rowA.index - rowB.index;\n });\n\n // If there are sub-rows, sort them\n sortedData.forEach(row => {\n var _row$subRows;\n sortedFlatRows.push(row);\n if ((_row$subRows = row.subRows) != null && _row$subRows.length) {\n row.subRows = sortData(row.subRows);\n }\n });\n return sortedData;\n };\n return {\n rows: sortData(rowModel.rows),\n flatRows: sortedFlatRows,\n rowsById: rowModel.rowsById\n };\n }, getMemoOptions(table.options, 'debugTable', 'getSortedRowModel', () => table._autoResetPageIndex()));\n}\n\nexport { ColumnFaceting, ColumnFiltering, ColumnGrouping, ColumnOrdering, ColumnPinning, ColumnSizing, ColumnVisibility, GlobalFaceting, GlobalFiltering, Headers, RowExpanding, RowPagination, RowPinning, RowSelection, RowSorting, _getVisibleLeafColumns, aggregationFns, buildHeaderGroups, createCell, createColumn, createColumnHelper, createRow, createTable, defaultColumnSizing, expandRows, filterFns, flattenBy, functionalUpdate, getCoreRowModel, getExpandedRowModel, getFacetedMinMaxValues, getFacetedRowModel, getFacetedUniqueValues, getFilteredRowModel, getGroupedRowModel, getMemoOptions, getPaginationRowModel, getSortedRowModel, isFunction, isNumberArray, isRowSelected, isSubRowSelected, makeStateUpdater, memo, noop, orderColumns, passiveEventSupported, reSplitAlphaNumeric, selectRowsFn, shouldAutoRemoveFilter, sortingFns };\n//# sourceMappingURL=index.mjs.map\n","/**\n * react-table\n *\n * Copyright (c) TanStack\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE.md file in the root directory of this source tree.\n *\n * @license MIT\n */\nimport * as React from 'react';\nimport { createTable } from '@tanstack/table-core';\nexport * from '@tanstack/table-core';\n\n//\n\n/**\n * If rendering headers, cells, or footers with custom markup, use flexRender instead of `cell.getValue()` or `cell.renderValue()`.\n */\nfunction flexRender(Comp, props) {\n return !Comp ? null : isReactComponent(Comp) ? /*#__PURE__*/React.createElement(Comp, props) : Comp;\n}\nfunction isReactComponent(component) {\n return isClassComponent(component) || typeof component === 'function' || isExoticComponent(component);\n}\nfunction isClassComponent(component) {\n return typeof component === 'function' && (() => {\n const proto = Object.getPrototypeOf(component);\n return proto.prototype && proto.prototype.isReactComponent;\n })();\n}\nfunction isExoticComponent(component) {\n return typeof component === 'object' && typeof component.$$typeof === 'symbol' && ['react.memo', 'react.forward_ref'].includes(component.$$typeof.description);\n}\nfunction useReactTable(options) {\n // Compose in the generic options to the user options\n const resolvedOptions = {\n state: {},\n // Dummy state\n onStateChange: () => {},\n // noop\n renderFallbackValue: null,\n ...options\n };\n\n // Create a new table and store it in state\n const [tableRef] = React.useState(() => ({\n current: createTable(resolvedOptions)\n }));\n\n // By default, manage table state here using the table's initial state\n const [state, setState] = React.useState(() => tableRef.current.initialState);\n\n // Compose the default state above with any user state. This will allow the user\n // to only control a subset of the state if desired.\n tableRef.current.setOptions(prev => ({\n ...prev,\n ...options,\n state: {\n ...state,\n ...options.state\n },\n // Similarly, we'll maintain both our internal state and any user-provided\n // state.\n onStateChange: updater => {\n setState(updater);\n options.onStateChange == null || options.onStateChange(updater);\n }\n }));\n return tableRef.current;\n}\n\nexport { flexRender, useReactTable };\n//# sourceMappingURL=index.mjs.map\n","import * as React from 'react'\nimport {\n ColumnDef,\n ColumnFiltersState,\n ColumnResizeMode,\n SortingState,\n VisibilityState,\n flexRender,\n getCoreRowModel,\n getFilteredRowModel,\n getPaginationRowModel,\n getSortedRowModel,\n useReactTable,\n} from '@tanstack/react-table'\nimport { ArrowUpDown, ChevronDown, MoreHorizontal, Search } from 'lucide-react'\nimport { cn } from '@/utils/cn'\nimport { useLocale } from '@/providers/locale-provider'\nimport { Button } from '@/components/ui/button'\nimport { Checkbox } from '@/components/ui/checkbox'\nimport {\n DropdownMenu,\n DropdownMenuCheckboxItem,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuLabel,\n DropdownMenuSeparator,\n DropdownMenuTrigger,\n} from '@/components/ui/dropdown-menu'\nimport { Input } from '@/components/ui/input'\nimport {\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from '@/components/ui/select'\n\nconst Table = React.forwardRef<HTMLTableElement, React.HTMLAttributes<HTMLTableElement>>(\n ({ className, ...props }, ref) => (\n <div className=\"relative w-full overflow-auto\">\n <table ref={ref} className={cn('w-full caption-bottom text-sm', className)} {...props} />\n </div>\n )\n)\nTable.displayName = 'Table'\n\nconst TableHeader = React.forwardRef<\n HTMLTableSectionElement,\n React.HTMLAttributes<HTMLTableSectionElement>\n>(({ className, ...props }, ref) => (\n <thead ref={ref} className={cn('[&_tr]:border-b', className)} {...props} />\n))\nTableHeader.displayName = 'TableHeader'\n\nconst TableBody = React.forwardRef<\n HTMLTableSectionElement,\n React.HTMLAttributes<HTMLTableSectionElement>\n>(({ className, ...props }, ref) => (\n <tbody ref={ref} className={cn('[&_tr:last-child]:border-0', className)} {...props} />\n))\nTableBody.displayName = 'TableBody'\n\nconst TableFooter = React.forwardRef<\n HTMLTableSectionElement,\n React.HTMLAttributes<HTMLTableSectionElement>\n>(({ className, ...props }, ref) => (\n <tfoot\n ref={ref}\n className={cn('border-t bg-muted/50 font-medium [&>tr]:last:border-b-0', className)}\n {...props}\n />\n))\nTableFooter.displayName = 'TableFooter'\n\nconst TableRow = React.forwardRef<HTMLTableRowElement, React.HTMLAttributes<HTMLTableRowElement>>(\n ({ className, ...props }, ref) => (\n <tr\n ref={ref}\n className={cn(\n 'border-b border-l-2 border-l-transparent transition-all duration-150 hover:bg-muted/60 hover:border-l-primary/40 data-[state=selected]:bg-muted',\n className\n )}\n {...props}\n />\n )\n)\nTableRow.displayName = 'TableRow'\n\nconst TableHead = React.forwardRef<\n HTMLTableCellElement,\n React.ThHTMLAttributes<HTMLTableCellElement>\n>(({ className, ...props }, ref) => (\n <th\n ref={ref}\n className={cn(\n 'h-12 px-4 text-left align-middle font-medium text-muted-foreground [&:has([role=checkbox])]:pr-0',\n className\n )}\n {...props}\n />\n))\nTableHead.displayName = 'TableHead'\n\nconst TableCell = React.forwardRef<\n HTMLTableCellElement,\n React.TdHTMLAttributes<HTMLTableCellElement>\n>(({ className, ...props }, ref) => (\n <td\n ref={ref}\n className={cn('p-4 align-middle [&:has([role=checkbox])]:pr-0', className)}\n {...props}\n />\n))\nTableCell.displayName = 'TableCell'\n\nconst TableCaption = React.forwardRef<\n HTMLTableCaptionElement,\n React.HTMLAttributes<HTMLTableCaptionElement>\n>(({ className, ...props }, ref) => (\n <caption ref={ref} className={cn('mt-4 text-sm text-muted-foreground', className)} {...props} />\n))\nTableCaption.displayName = 'TableCaption'\n\nexport interface DataTableProps<TData, TValue> {\n columns: ColumnDef<TData, TValue>[]\n data: TData[]\n searchKey?: string\n searchPlaceholder?: string\n showColumnToggle?: boolean\n showPagination?: boolean\n showRowSelection?: boolean\n pageSize?: number\n pageSizeOptions?: number[]\n onRowClick?: (row: TData) => void\n className?: string\n /** Enable Pipedrive-style inline cell editing. Use with createEditableCell() for column definitions. */\n editable?: boolean\n /** Callback when a cell value is edited */\n onCellEdit?: (rowIndex: number, columnId: string, value: unknown, row: TData) => void | Promise<void>\n /** Validation callback. Return error string or null. */\n onCellValidate?: (rowIndex: number, columnId: string, value: unknown, row: TData) => string | null\n /** Enable column resizing with drag handles */\n enableColumnResizing?: boolean\n /** Column resize mode: 'onChange' updates live, 'onEnd' updates on mouse release */\n columnResizeMode?: ColumnResizeMode\n /** Enable sticky table header */\n stickyHeader?: boolean\n /** Custom empty state content */\n emptyState?: React.ReactNode\n}\n\nconst DEFAULT_PAGE_SIZE_OPTIONS = [10, 20, 30, 40, 50]\n\nfunction DataTable<TData, TValue>({\n columns,\n data,\n searchKey,\n searchPlaceholder,\n showColumnToggle = true,\n showPagination = true,\n showRowSelection = false,\n pageSize = 10,\n pageSizeOptions = DEFAULT_PAGE_SIZE_OPTIONS,\n onRowClick,\n className,\n editable = false,\n onCellEdit,\n onCellValidate,\n enableColumnResizing = false,\n columnResizeMode = 'onChange',\n stickyHeader = false,\n emptyState,\n}: DataTableProps<TData, TValue>) {\n const { t } = useLocale()\n const [sorting, setSorting] = React.useState<SortingState>([])\n const [columnFilters, setColumnFilters] = React.useState<ColumnFiltersState>([])\n const [columnVisibility, setColumnVisibility] = React.useState<VisibilityState>({})\n const [rowSelection, setRowSelection] = React.useState({})\n\n const tableColumns = React.useMemo(() => {\n if (showRowSelection) {\n return [\n {\n id: 'select',\n header: ({ table }: { table: ReturnType<typeof useReactTable<TData>> }) => (\n <Checkbox\n checked={\n table.getIsAllPageRowsSelected() ||\n (table.getIsSomePageRowsSelected() && 'indeterminate')\n }\n onCheckedChange={(value) => table.toggleAllPageRowsSelected(!!value)}\n aria-label={t('table.selectAllRows')}\n />\n ),\n cell: ({ row }: { row: { getIsSelected: () => boolean; toggleSelected: (value: boolean) => void } }) => (\n <Checkbox\n checked={row.getIsSelected()}\n onCheckedChange={(value) => row.toggleSelected(!!value)}\n aria-label={t('table.selectRow')}\n />\n ),\n enableSorting: false,\n enableHiding: false,\n enableResizing: false,\n } as ColumnDef<TData, TValue>,\n ...columns,\n ]\n }\n return columns\n }, [columns, showRowSelection, t])\n\n const table = useReactTable({\n data,\n columns: tableColumns,\n onSortingChange: setSorting,\n onColumnFiltersChange: setColumnFilters,\n getCoreRowModel: getCoreRowModel(),\n getPaginationRowModel: getPaginationRowModel(),\n getSortedRowModel: getSortedRowModel(),\n getFilteredRowModel: getFilteredRowModel(),\n onColumnVisibilityChange: setColumnVisibility,\n onRowSelectionChange: setRowSelection,\n enableColumnResizing,\n columnResizeMode,\n initialState: {\n pagination: {\n pageSize,\n },\n },\n state: {\n sorting,\n columnFilters,\n columnVisibility,\n rowSelection,\n },\n meta: editable\n ? {\n onCellEdit,\n onCellValidate,\n }\n : undefined,\n })\n\n return (\n <div className={cn('w-full', className)}>\n <div className=\"flex items-center gap-4 py-4\">\n {searchKey && (\n <Input\n placeholder={searchPlaceholder ?? t('table.searchPlaceholder')}\n value={(table.getColumn(searchKey)?.getFilterValue() as string) ?? ''}\n onChange={(event) => table.getColumn(searchKey)?.setFilterValue(event.target.value)}\n className=\"max-w-sm\"\n />\n )}\n {showColumnToggle && (\n <DropdownMenu>\n <DropdownMenuTrigger asChild>\n <Button variant=\"outline\" className=\"ml-auto\">\n {t('table.columns')} <ChevronDown className=\"ml-2 h-4 w-4\" />\n </Button>\n </DropdownMenuTrigger>\n <DropdownMenuContent align=\"end\">\n {table\n .getAllColumns()\n .filter((column) => column.getCanHide())\n .map((column) => {\n return (\n <DropdownMenuCheckboxItem\n key={column.id}\n className=\"capitalize\"\n checked={column.getIsVisible()}\n onCheckedChange={(value) => column.toggleVisibility(!!value)}\n >\n {column.id}\n </DropdownMenuCheckboxItem>\n )\n })}\n </DropdownMenuContent>\n </DropdownMenu>\n )}\n </div>\n <div className=\"rounded-md border\">\n <Table style={enableColumnResizing ? { width: table.getCenterTotalSize() } : undefined}>\n <TableHeader className={stickyHeader ? 'sticky top-0 z-20 bg-background' : undefined}>\n {table.getHeaderGroups().map((headerGroup) => (\n <TableRow key={headerGroup.id}>\n {headerGroup.headers.map((header) => {\n return (\n <TableHead\n key={header.id}\n style={enableColumnResizing ? { width: header.getSize() } : undefined}\n className={enableColumnResizing ? 'relative' : undefined}\n >\n {header.isPlaceholder\n ? null\n : flexRender(header.column.columnDef.header, header.getContext())}\n {enableColumnResizing && header.column.getCanResize() && (\n <div\n onMouseDown={header.getResizeHandler()}\n onTouchStart={header.getResizeHandler()}\n className={cn(\n 'absolute right-0 top-0 h-full w-1 cursor-col-resize select-none touch-none bg-transparent hover:bg-primary/50 transition-colors',\n header.column.getIsResizing() && 'bg-primary'\n )}\n />\n )}\n </TableHead>\n )\n })}\n </TableRow>\n ))}\n </TableHeader>\n <TableBody>\n {table.getRowModel().rows?.length ? (\n table.getRowModel().rows.map((row) => (\n <TableRow\n key={row.id}\n data-state={row.getIsSelected() && 'selected'}\n onClick={() => onRowClick?.(row.original)}\n className={onRowClick ? 'cursor-pointer' : ''}\n >\n {row.getVisibleCells().map((cell) => (\n <TableCell\n key={cell.id}\n style={enableColumnResizing ? { width: cell.column.getSize() } : undefined}\n >\n {flexRender(cell.column.columnDef.cell, cell.getContext())}\n </TableCell>\n ))}\n </TableRow>\n ))\n ) : (\n <TableRow>\n <TableCell colSpan={tableColumns.length} className=\"h-24 text-center\">\n {emptyState ?? (\n <div className=\"flex flex-col items-center justify-center py-4 text-muted-foreground\">\n <Search className=\"mb-2 h-8 w-8 opacity-40\" />\n <p className=\"text-sm font-medium\">{t('table.noResults')}</p>\n <p className=\"text-xs\">{t('table.adjustSearchOrFilter')}</p>\n </div>\n )}\n </TableCell>\n </TableRow>\n )}\n </TableBody>\n </Table>\n </div>\n {showPagination && (\n <div className=\"flex items-center justify-between space-x-2 py-4\">\n <div className=\"flex-1 text-sm text-muted-foreground\">\n {showRowSelection && (\n <>\n {t('table.rowsSelected', {\n selected: table.getFilteredSelectedRowModel().rows.length,\n total: table.getFilteredRowModel().rows.length,\n })}\n </>\n )}\n </div>\n <div className=\"flex items-center space-x-6 lg:space-x-8\">\n <div className=\"flex items-center space-x-2\">\n <p className=\"text-sm font-medium\">{t('table.rowsPerPage')}</p>\n <Select\n value={`${table.getState().pagination.pageSize}`}\n onValueChange={(value) => {\n table.setPageSize(Number(value))\n }}\n >\n <SelectTrigger size=\"sm\" width=\"sm\">\n <SelectValue placeholder={table.getState().pagination.pageSize} />\n </SelectTrigger>\n <SelectContent side=\"top\">\n {pageSizeOptions.map((size) => (\n <SelectItem key={size} value={`${size}`}>\n {size}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n </div>\n <div className=\"flex w-[100px] items-center justify-center text-sm font-medium\">\n {t('table.page')} {table.getState().pagination.pageIndex + 1} {t('table.of')} {table.getPageCount()}\n </div>\n <div className=\"flex items-center space-x-2\">\n <Button\n variant=\"outline\"\n size=\"sm\"\n onClick={() => table.previousPage()}\n disabled={!table.getCanPreviousPage()}\n >\n {t('table.previous')}\n </Button>\n <Button\n variant=\"outline\"\n size=\"sm\"\n onClick={() => table.nextPage()}\n disabled={!table.getCanNextPage()}\n >\n {t('table.next')}\n </Button>\n </div>\n </div>\n </div>\n )}\n </div>\n )\n}\n\nexport {\n Table,\n TableHeader,\n TableBody,\n TableFooter,\n TableHead,\n TableRow,\n TableCell,\n TableCaption,\n DataTable,\n}\n\nexport function createSortableHeader(label: string) {\n const SortableHeader = ({ column }: { column: { toggleSorting: (desc?: boolean) => void; getIsSorted: () => false | 'asc' | 'desc' } }) => {\n return (\n <Button\n variant=\"ghost\"\n onClick={() => column.toggleSorting(column.getIsSorted() === 'asc')}\n >\n {label}\n <ArrowUpDown className=\"ml-2 h-4 w-4\" />\n </Button>\n )\n }\n SortableHeader.displayName = `SortableHeader(${label})`\n return SortableHeader\n}\n\nexport function createActionsCell<T>(\n actions: { label: string; onClick: (row: T) => void; icon?: React.ReactNode }[]\n) {\n const ActionsCell = ({ row }: { row: { original: T } }) => {\n const { t } = useLocale()\n return (\n <DropdownMenu>\n <DropdownMenuTrigger asChild>\n <Button variant=\"ghost\" className=\"h-8 w-8 p-0\">\n <span className=\"sr-only\">{t('table.openMenu')}</span>\n <MoreHorizontal className=\"h-4 w-4\" />\n </Button>\n </DropdownMenuTrigger>\n <DropdownMenuContent align=\"end\">\n <DropdownMenuLabel>{t('table.actions')}</DropdownMenuLabel>\n <DropdownMenuSeparator />\n {actions.map((action, index) => (\n <DropdownMenuItem key={index} onClick={() => action.onClick(row.original)}>\n {action.icon && <span className=\"mr-2\">{action.icon}</span>}\n {action.label}\n </DropdownMenuItem>\n ))}\n </DropdownMenuContent>\n </DropdownMenu>\n )\n }\n ActionsCell.displayName = 'ActionsCell'\n return ActionsCell\n}\n","import * as React from 'react'\nimport { Input } from '@/components/ui/input'\n\nexport interface TextEditorProps {\n value: string\n onChange: (value: string) => void\n onCommit: () => void\n onCancel: () => void\n placeholder?: string\n hasError?: boolean\n}\n\nexport function TextEditor({\n value,\n onChange,\n onCommit,\n onCancel,\n placeholder,\n hasError,\n}: TextEditorProps) {\n const inputRef = React.useRef<HTMLInputElement>(null)\n\n React.useEffect(() => {\n inputRef.current?.focus()\n inputRef.current?.select()\n }, [])\n\n const handleKeyDown = (e: React.KeyboardEvent) => {\n if (e.key === 'Enter') {\n e.preventDefault()\n onCommit()\n } else if (e.key === 'Escape') {\n e.preventDefault()\n onCancel()\n }\n }\n\n return (\n <Input\n ref={inputRef}\n value={value}\n onChange={(e) => onChange(e.target.value)}\n onBlur={() => requestAnimationFrame(() => {\n if (document.activeElement !== inputRef.current) onCommit()\n })}\n onKeyDown={handleKeyDown}\n placeholder={placeholder}\n className={\n hasError\n ? 'h-8 ring-1 ring-destructive focus-visible:ring-destructive'\n : 'h-8'\n }\n />\n )\n}\n","import * as React from 'react'\nimport { Input } from '@/components/ui/input'\n\nexport interface NumberEditorProps {\n value: number | undefined\n onChange: (value: number | undefined) => void\n onCommit: () => void\n onCancel: () => void\n min?: number\n max?: number\n step?: number\n precision?: number\n prefix?: string\n suffix?: string\n placeholder?: string\n hasError?: boolean\n}\n\nexport function NumberEditor({\n value,\n onChange,\n onCommit,\n onCancel,\n min,\n max,\n placeholder,\n hasError,\n}: NumberEditorProps) {\n const inputRef = React.useRef<HTMLInputElement>(null)\n const [inputValue, setInputValue] = React.useState(value?.toString() ?? '')\n\n React.useEffect(() => {\n inputRef.current?.focus()\n inputRef.current?.select()\n }, [])\n\n const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const val = e.target.value\n setInputValue(val)\n\n if (val === '' || val === '-') {\n onChange(undefined)\n return\n }\n\n const numVal = parseFloat(val)\n if (!isNaN(numVal)) {\n onChange(numVal)\n }\n }\n\n const handleCommit = () => {\n // Apply min/max clamping only on commit\n if (inputValue !== '' && inputValue !== '-') {\n const numVal = parseFloat(inputValue)\n if (!isNaN(numVal)) {\n let clamped = numVal\n if (min !== undefined) clamped = Math.max(min, clamped)\n if (max !== undefined) clamped = Math.min(max, clamped)\n if (clamped !== numVal) {\n onChange(clamped)\n setInputValue(clamped.toString())\n }\n }\n }\n onCommit()\n }\n\n const handleKeyDown = (e: React.KeyboardEvent) => {\n if (e.key === 'Enter') {\n e.preventDefault()\n handleCommit()\n } else if (e.key === 'Escape') {\n e.preventDefault()\n onCancel()\n }\n }\n\n return (\n <Input\n ref={inputRef}\n type=\"text\"\n inputMode=\"decimal\"\n value={inputValue}\n onChange={handleChange}\n onBlur={() => requestAnimationFrame(() => {\n if (document.activeElement !== inputRef.current) handleCommit()\n })}\n onKeyDown={handleKeyDown}\n placeholder={placeholder}\n className={\n hasError\n ? 'h-8 ring-1 ring-destructive focus-visible:ring-destructive'\n : 'h-8'\n }\n />\n )\n}\n","import * as React from 'react'\nimport { useLocale } from '@/providers/locale-provider'\nimport {\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from '@/components/ui/select'\nimport type { SelectOption } from '../data-table-types'\n\nexport interface SelectEditorProps {\n value: string\n onChange: (value: string) => void\n onCommit: () => void\n onCancel: () => void\n options: SelectOption[]\n placeholder?: string\n hasError?: boolean\n}\n\nexport function SelectEditor({\n value,\n onChange,\n onCommit,\n onCancel,\n options,\n placeholder,\n}: SelectEditorProps) {\n const { t } = useLocale()\n const handleValueChange = (newValue: string) => {\n onChange(newValue)\n // Auto-commit on selection\n queueMicrotask(onCommit)\n }\n\n const handleKeyDown = (e: React.KeyboardEvent) => {\n if (e.key === 'Escape') {\n e.preventDefault()\n onCancel()\n }\n }\n\n return (\n <Select value={value} onValueChange={handleValueChange}>\n <SelectTrigger\n className=\"h-8\"\n onKeyDown={handleKeyDown}\n autoFocus\n >\n <SelectValue placeholder={placeholder ?? t('filter.select')} />\n </SelectTrigger>\n <SelectContent>\n {options.map((option) => (\n <SelectItem key={option.value} value={option.value}>\n {option.label}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n )\n}\n","import * as React from 'react'\nimport { Calendar as CalendarIcon } from 'lucide-react'\nimport { cn } from '@/utils/cn'\nimport { Button } from '@/components/ui/button'\nimport { Calendar } from '@/components/ui/calendar'\nimport { Popover, PopoverContent, PopoverTrigger } from '@/components/ui/popover'\nimport { useFormatters } from '@/hooks/use-formatters'\n\nexport interface DateEditorProps {\n value: Date | undefined\n onChange: (value: Date | undefined) => void\n onCommit: () => void\n onCancel: () => void\n dateFormat?: string\n placeholder?: string\n hasError?: boolean\n}\n\nexport function DateEditor({\n value,\n onChange,\n onCommit,\n onCancel,\n dateFormat = 'PPP',\n placeholder,\n}: DateEditorProps) {\n const [open, setOpen] = React.useState(true)\n const { t, formatDate } = useFormatters()\n const displayPlaceholder = placeholder || t('date.selectDate')\n\n const handleSelect = (date: Date | undefined) => {\n onChange(date)\n setOpen(false)\n // Auto-commit on selection\n setTimeout(onCommit, 0)\n }\n\n const handleOpenChange = (isOpen: boolean) => {\n setOpen(isOpen)\n if (!isOpen) {\n onCommit()\n }\n }\n\n const handleKeyDown = (e: React.KeyboardEvent) => {\n if (e.key === 'Escape') {\n e.preventDefault()\n onCancel()\n }\n }\n\n return (\n <Popover open={open} onOpenChange={handleOpenChange}>\n <PopoverTrigger asChild>\n <Button\n variant=\"outline\"\n className={cn(\n 'h-8 w-full justify-start text-left font-normal',\n !value && 'text-muted-foreground'\n )}\n onKeyDown={handleKeyDown}\n >\n <CalendarIcon className=\"mr-2 h-3 w-3\" />\n {value ? formatDate(value, dateFormat) : <span>{displayPlaceholder}</span>}\n </Button>\n </PopoverTrigger>\n <PopoverContent className=\"w-auto p-0\" align=\"start\">\n <Calendar mode=\"single\" selected={value} onSelect={handleSelect} initialFocus />\n </PopoverContent>\n </Popover>\n )\n}\n","import { Checkbox } from '@/components/ui/checkbox'\n\nexport interface CheckboxEditorProps {\n value: boolean\n onChange: (value: boolean) => void\n onCommit: () => void\n}\n\nexport function CheckboxEditor({\n value,\n onChange,\n onCommit,\n}: CheckboxEditorProps) {\n const handleCheckedChange = (checked: boolean | 'indeterminate') => {\n const newValue = checked === true\n onChange(newValue)\n // Auto-commit on toggle\n setTimeout(onCommit, 0)\n }\n\n return (\n <Checkbox\n checked={value}\n onCheckedChange={handleCheckedChange}\n autoFocus\n />\n )\n}\n","import * as React from 'react'\nimport { useLocale } from '@/providers/locale-provider'\nimport { MultiSelect } from '@/components/forms/multi-select'\nimport type { SelectOption } from '../data-table-types'\n\nexport interface MultiSelectEditorProps {\n value: string[]\n onChange: (value: string[]) => void\n onCommit: () => void\n onCancel: () => void\n options: SelectOption[]\n placeholder?: string\n hasError?: boolean\n}\n\nexport function MultiSelectEditor({\n value,\n onChange,\n onCommit,\n onCancel,\n options,\n placeholder,\n}: MultiSelectEditorProps) {\n const { t } = useLocale()\n const containerRef = React.useRef<HTMLDivElement>(null)\n\n const handleKeyDown = (e: React.KeyboardEvent) => {\n if (e.key === 'Escape') {\n e.preventDefault()\n onCancel()\n }\n }\n\n return (\n <div ref={containerRef} onKeyDown={handleKeyDown} onBlur={() => setTimeout(() => {\n if (!containerRef.current?.contains(document.activeElement)) onCommit()\n }, 150)}>\n <MultiSelect\n options={options.map((opt) => ({ value: opt.value, label: opt.label }))}\n value={value}\n onChange={onChange}\n placeholder={placeholder ?? t('filter.select')}\n className=\"h-8\"\n />\n </div>\n )\n}\n","import * as React from 'react'\nimport { Check, Pencil, X } from 'lucide-react'\nimport { cn } from '@/utils/cn'\nimport { useLocale } from '@/providers/locale-provider'\nimport {\n Tooltip,\n TooltipContent,\n TooltipProvider,\n TooltipTrigger,\n} from '@/components/ui/tooltip'\nimport { TextEditor } from './data-table-cell-editors/text-editor'\nimport { NumberEditor } from './data-table-cell-editors/number-editor'\nimport { SelectEditor } from './data-table-cell-editors/select-editor'\nimport { DateEditor } from './data-table-cell-editors/date-editor'\nimport { CheckboxEditor } from './data-table-cell-editors/checkbox-editor'\nimport { MultiSelectEditor } from './data-table-cell-editors/multi-select-editor'\nimport type { CellEditorConfig, EditableCellProps } from './data-table-types'\n\nfunction EditableCell<TData>({\n value: initialValue,\n row,\n rowIndex,\n columnId,\n config,\n onCellEdit,\n onCellValidate,\n}: EditableCellProps<TData>) {\n const { t } = useLocale()\n const [isEditing, setIsEditing] = React.useState(false)\n const [editValue, setEditValue] = React.useState<unknown>(initialValue)\n const [error, setError] = React.useState<string | null>(null)\n\n // Sync with external value changes\n React.useEffect(() => {\n if (!isEditing) {\n setEditValue(initialValue)\n }\n }, [initialValue, isEditing])\n\n const isEditable = typeof config.editable === 'function'\n ? config.editable(row)\n : config.editable !== false\n\n const startEditing = () => {\n if (!isEditable) return\n setEditValue(initialValue)\n setError(null)\n setIsEditing(true)\n }\n\n const commitEdit = async () => {\n if (!isEditing) return\n\n // Validate\n if (onCellValidate) {\n const validationError = onCellValidate(rowIndex, columnId, editValue, row)\n if (validationError) {\n setError(validationError)\n return\n }\n }\n\n setError(null)\n setIsEditing(false)\n\n // Only call onCellEdit if value actually changed\n if (editValue !== initialValue) {\n await onCellEdit?.(rowIndex, columnId, editValue, row)\n }\n }\n\n const cancelEdit = () => {\n setEditValue(initialValue)\n setError(null)\n setIsEditing(false)\n }\n\n const handleDoubleClick = () => {\n if (config.type !== 'checkbox') {\n startEditing()\n }\n }\n\n // Format the display value\n const displayValue = React.useMemo(() => {\n if (config.format) {\n return config.format(initialValue, row)\n }\n if (config.type === 'checkbox') {\n return null // Checkbox renders directly\n }\n if (config.type === 'select' && config.options) {\n const option = config.options.find((o) => o.value === String(initialValue))\n return option?.label ?? String(initialValue ?? '')\n }\n if (config.type === 'multi-select' && config.options && Array.isArray(initialValue)) {\n return (initialValue as string[])\n .map((v) => config.options?.find((o) => o.value === v)?.label ?? v)\n .join(', ')\n }\n if (config.type === 'date' && initialValue instanceof Date) {\n return initialValue.toLocaleDateString()\n }\n return String(initialValue ?? '')\n }, [initialValue, row, config])\n\n const handleTabNavigation = (e: React.KeyboardEvent) => {\n if (e.key === 'Tab') {\n e.preventDefault()\n commitEdit()\n const direction = e.shiftKey ? 'prev' : 'next'\n window.dispatchEvent(\n new CustomEvent('datatable-cell-navigate', {\n detail: { rowIndex, columnId, direction },\n })\n )\n }\n }\n\n const preventBlur = (e: React.MouseEvent) => e.preventDefault()\n\n if (isEditing) {\n const editorContent = (\n <div className=\"flex min-w-[120px] items-center gap-1\" onClick={(e) => e.stopPropagation()} onKeyDown={handleTabNavigation}>\n <div className=\"flex-1\">\n {config.type === 'text' && (\n <TextEditor\n value={String(editValue ?? '')}\n onChange={(v) => setEditValue(v)}\n onCommit={commitEdit}\n onCancel={cancelEdit}\n placeholder={config.placeholder}\n hasError={!!error}\n />\n )}\n {config.type === 'number' && (\n <NumberEditor\n value={editValue as number | undefined}\n onChange={(v) => setEditValue(v)}\n onCommit={commitEdit}\n onCancel={cancelEdit}\n min={config.min}\n max={config.max}\n step={config.step}\n precision={config.precision}\n prefix={config.prefix}\n suffix={config.suffix}\n placeholder={config.placeholder}\n hasError={!!error}\n />\n )}\n {config.type === 'select' && config.options && (\n <SelectEditor\n value={String(editValue ?? '')}\n onChange={(v) => setEditValue(v)}\n onCommit={commitEdit}\n onCancel={cancelEdit}\n options={config.options}\n placeholder={config.placeholder}\n hasError={!!error}\n />\n )}\n {config.type === 'date' && (\n <DateEditor\n value={editValue instanceof Date ? editValue : editValue ? new Date(editValue as string) : undefined}\n onChange={(v) => setEditValue(v)}\n onCommit={commitEdit}\n onCancel={cancelEdit}\n dateFormat={config.dateFormat}\n placeholder={config.placeholder}\n hasError={!!error}\n />\n )}\n {config.type === 'checkbox' && (\n <CheckboxEditor\n value={!!editValue}\n onChange={(v) => setEditValue(v)}\n onCommit={commitEdit}\n />\n )}\n {config.type === 'multi-select' && config.options && (\n <MultiSelectEditor\n value={(editValue as string[]) ?? []}\n onChange={(v) => setEditValue(v)}\n onCommit={commitEdit}\n onCancel={cancelEdit}\n options={config.options}\n placeholder={config.placeholder}\n hasError={!!error}\n />\n )}\n </div>\n <button\n onMouseDown={preventBlur}\n onClick={commitEdit}\n className=\"flex h-6 w-6 shrink-0 items-center justify-center rounded text-primary hover:text-primary/80 hover:bg-muted transition-colors\"\n aria-label={t('editable.save')}\n >\n <Check className=\"h-3.5 w-3.5\" />\n </button>\n <button\n onMouseDown={preventBlur}\n onClick={cancelEdit}\n className=\"flex h-6 w-6 shrink-0 items-center justify-center rounded text-muted-foreground hover:text-foreground hover:bg-muted transition-colors\"\n aria-label={t('editable.cancel')}\n >\n <X className=\"h-3.5 w-3.5\" />\n </button>\n </div>\n )\n\n if (error) {\n return (\n <TooltipProvider>\n <Tooltip open={!!error}>\n <TooltipTrigger asChild>{editorContent}</TooltipTrigger>\n <TooltipContent side=\"bottom\" className=\"bg-destructive text-destructive-foreground\">\n {error}\n </TooltipContent>\n </Tooltip>\n </TooltipProvider>\n )\n }\n\n return editorContent\n }\n\n // Checkbox type always shows the checkbox, editable or not\n if (config.type === 'checkbox') {\n return (\n <CheckboxEditor\n value={!!initialValue}\n onChange={(v) => {\n if (!isEditable) return\n if (onCellValidate) {\n const validationError = onCellValidate(rowIndex, columnId, v, row)\n if (validationError) {\n setError(validationError)\n return\n }\n }\n setError(null)\n setEditValue(v)\n onCellEdit?.(rowIndex, columnId, v, row)\n }}\n onCommit={() => {}}\n />\n )\n }\n\n return (\n <div\n className={cn(\n 'group/cell relative flex items-center gap-2 rounded px-1 py-0.5 -mx-1 min-h-[28px] transition-colors duration-150',\n isEditable && 'cursor-pointer hover:bg-muted/30'\n )}\n onDoubleClick={handleDoubleClick}\n >\n <span className=\"flex-1 truncate\">{displayValue}</span>\n {isEditable && (\n <button\n onClick={(e) => {\n e.stopPropagation()\n startEditing()\n }}\n className=\"flex h-5 w-5 shrink-0 items-center justify-center rounded text-muted-foreground hover:text-foreground hover:bg-muted opacity-0 transition-opacity group-hover/cell:opacity-100\"\n aria-label={t('editable.edit')}\n >\n <Pencil className=\"h-3 w-3\" />\n </button>\n )}\n </div>\n )\n}\n\nEditableCell.displayName = 'EditableCell'\n\n/**\n * Creates an editable cell renderer following the same pattern as createSortableHeader.\n * Use this to define editable columns in your DataTable column definitions.\n *\n * @example\n * ```tsx\n * const columns = [\n * {\n * accessorKey: 'name',\n * header: createSortableHeader('Name'),\n * cell: createEditableCell({\n * type: 'text',\n * columnId: 'name',\n * accessor: (row) => row.name,\n * }),\n * },\n * ]\n * ```\n */\nfunction createEditableCell<TData>(config: CellEditorConfig<TData>) {\n const EditableCellWrapper = ({\n row,\n getValue,\n table,\n }: {\n row: { original: TData; index: number }\n getValue: () => unknown\n table: { options: { meta?: Record<string, unknown> } }\n }) => {\n const meta = table.options.meta as {\n onCellEdit?: (rowIndex: number, columnId: string, value: unknown, row: TData) => void | Promise<void>\n onCellValidate?: (rowIndex: number, columnId: string, value: unknown, row: TData) => string | null\n } | undefined\n\n return (\n <EditableCell\n value={getValue()}\n row={row.original}\n rowIndex={row.index}\n columnId={config.columnId}\n config={config}\n onCellEdit={meta?.onCellEdit}\n onCellValidate={meta?.onCellValidate}\n />\n )\n }\n EditableCellWrapper.displayName = `EditableCell(${config.columnId})`\n return EditableCellWrapper\n}\n\nexport { EditableCell, createEditableCell }\nexport type { CellEditorConfig, EditableCellProps }\n","export interface CsvExportOptions<TData> {\n /** Data array to export */\n data: TData[]\n /** Column definitions for export */\n columns: {\n /** Column header label */\n header: string\n /** Accessor key or function */\n accessor: keyof TData | ((row: TData) => unknown)\n }[]\n /** Output filename (without extension) */\n filename?: string\n /** CSV delimiter character */\n delimiter?: string\n /** Whether to include BOM for Excel compatibility */\n includeBOM?: boolean\n}\n\n/**\n * Exports data as a CSV file download.\n * Pure utility function - no UI component.\n *\n * @example\n * ```tsx\n * exportToCsv({\n * data: tableData,\n * columns: [\n * { header: 'Name', accessor: 'name' },\n * { header: 'Email', accessor: 'email' },\n * { header: 'Total', accessor: (row) => `$${row.amount}` },\n * ],\n * filename: 'contacts-export',\n * })\n * ```\n */\nexport function exportToCsv<TData>({\n data,\n columns,\n filename = 'export',\n delimiter = ',',\n includeBOM = true,\n}: CsvExportOptions<TData>): void {\n const escapeField = (value: unknown): string => {\n const str = value === null || value === undefined ? '' : String(value)\n if (str.includes(delimiter) || str.includes('\"') || str.includes('\\n') || str.includes('\\r')) {\n return `\"${str.replace(/\"/g, '\"\"')}\"`\n }\n return str\n }\n\n const headerRow = columns.map((col) => escapeField(col.header)).join(delimiter)\n\n const dataRows = data.map((row) =>\n columns\n .map((col) => {\n const value =\n typeof col.accessor === 'function'\n ? col.accessor(row)\n : row[col.accessor]\n return escapeField(value)\n })\n .join(delimiter)\n )\n\n const csvContent = [headerRow, ...dataRows].join('\\n')\n const bom = includeBOM ? '\\uFEFF' : ''\n const blob = new Blob([bom + csvContent], { type: 'text/csv;charset=utf-8;' })\n\n const url = URL.createObjectURL(blob)\n const link = document.createElement('a')\n link.setAttribute('href', url)\n link.setAttribute('download', `${filename}.csv`)\n link.style.visibility = 'hidden'\n document.body.appendChild(link)\n link.click()\n document.body.removeChild(link)\n URL.revokeObjectURL(url)\n}\n","function memo(getDeps, fn, opts) {\n let deps = opts.initialDeps ?? [];\n let result;\n let isInitial = true;\n function memoizedFunction() {\n var _a, _b, _c;\n let depTime;\n if (opts.key && ((_a = opts.debug) == null ? void 0 : _a.call(opts))) depTime = Date.now();\n const newDeps = getDeps();\n const depsChanged = newDeps.length !== deps.length || newDeps.some((dep, index) => deps[index] !== dep);\n if (!depsChanged) {\n return result;\n }\n deps = newDeps;\n let resultTime;\n if (opts.key && ((_b = opts.debug) == null ? void 0 : _b.call(opts))) resultTime = Date.now();\n result = fn(...newDeps);\n if (opts.key && ((_c = opts.debug) == null ? void 0 : _c.call(opts))) {\n const depEndTime = Math.round((Date.now() - depTime) * 100) / 100;\n const resultEndTime = Math.round((Date.now() - resultTime) * 100) / 100;\n const resultFpsPercentage = resultEndTime / 16;\n const pad = (str, num) => {\n str = String(str);\n while (str.length < num) {\n str = \" \" + str;\n }\n return str;\n };\n console.info(\n `%c⏱ ${pad(resultEndTime, 5)} /${pad(depEndTime, 5)} ms`,\n `\n font-size: .6rem;\n font-weight: bold;\n color: hsl(${Math.max(\n 0,\n Math.min(120 - 120 * resultFpsPercentage, 120)\n )}deg 100% 31%);`,\n opts == null ? void 0 : opts.key\n );\n }\n if ((opts == null ? void 0 : opts.onChange) && !(isInitial && opts.skipInitialOnChange)) {\n opts.onChange(result);\n }\n isInitial = false;\n return result;\n }\n memoizedFunction.updateDeps = (newDeps) => {\n deps = newDeps;\n };\n return memoizedFunction;\n}\nfunction notUndefined(value, msg) {\n if (value === void 0) {\n throw new Error(`Unexpected undefined${msg ? `: ${msg}` : \"\"}`);\n } else {\n return value;\n }\n}\nconst approxEqual = (a, b) => Math.abs(a - b) < 1.01;\nconst debounce = (targetWindow, fn, ms) => {\n let timeoutId;\n return function(...args) {\n targetWindow.clearTimeout(timeoutId);\n timeoutId = targetWindow.setTimeout(() => fn.apply(this, args), ms);\n };\n};\nexport {\n approxEqual,\n debounce,\n memo,\n notUndefined\n};\n//# sourceMappingURL=utils.js.map\n","import { debounce, memo, notUndefined, approxEqual } from \"./utils.js\";\nconst getRect = (element) => {\n const { offsetWidth, offsetHeight } = element;\n return { width: offsetWidth, height: offsetHeight };\n};\nconst defaultKeyExtractor = (index) => index;\nconst defaultRangeExtractor = (range) => {\n const start = Math.max(range.startIndex - range.overscan, 0);\n const end = Math.min(range.endIndex + range.overscan, range.count - 1);\n const arr = [];\n for (let i = start; i <= end; i++) {\n arr.push(i);\n }\n return arr;\n};\nconst observeElementRect = (instance, cb) => {\n const element = instance.scrollElement;\n if (!element) {\n return;\n }\n const targetWindow = instance.targetWindow;\n if (!targetWindow) {\n return;\n }\n const handler = (rect) => {\n const { width, height } = rect;\n cb({ width: Math.round(width), height: Math.round(height) });\n };\n handler(getRect(element));\n if (!targetWindow.ResizeObserver) {\n return () => {\n };\n }\n const observer = new targetWindow.ResizeObserver((entries) => {\n const run = () => {\n const entry = entries[0];\n if (entry == null ? void 0 : entry.borderBoxSize) {\n const box = entry.borderBoxSize[0];\n if (box) {\n handler({ width: box.inlineSize, height: box.blockSize });\n return;\n }\n }\n handler(getRect(element));\n };\n instance.options.useAnimationFrameWithResizeObserver ? requestAnimationFrame(run) : run();\n });\n observer.observe(element, { box: \"border-box\" });\n return () => {\n observer.unobserve(element);\n };\n};\nconst addEventListenerOptions = {\n passive: true\n};\nconst observeWindowRect = (instance, cb) => {\n const element = instance.scrollElement;\n if (!element) {\n return;\n }\n const handler = () => {\n cb({ width: element.innerWidth, height: element.innerHeight });\n };\n handler();\n element.addEventListener(\"resize\", handler, addEventListenerOptions);\n return () => {\n element.removeEventListener(\"resize\", handler);\n };\n};\nconst supportsScrollend = typeof window == \"undefined\" ? true : \"onscrollend\" in window;\nconst observeElementOffset = (instance, cb) => {\n const element = instance.scrollElement;\n if (!element) {\n return;\n }\n const targetWindow = instance.targetWindow;\n if (!targetWindow) {\n return;\n }\n let offset = 0;\n const fallback = instance.options.useScrollendEvent && supportsScrollend ? () => void 0 : debounce(\n targetWindow,\n () => {\n cb(offset, false);\n },\n instance.options.isScrollingResetDelay\n );\n const createHandler = (isScrolling) => () => {\n const { horizontal, isRtl } = instance.options;\n offset = horizontal ? element[\"scrollLeft\"] * (isRtl && -1 || 1) : element[\"scrollTop\"];\n fallback();\n cb(offset, isScrolling);\n };\n const handler = createHandler(true);\n const endHandler = createHandler(false);\n element.addEventListener(\"scroll\", handler, addEventListenerOptions);\n const registerScrollendEvent = instance.options.useScrollendEvent && supportsScrollend;\n if (registerScrollendEvent) {\n element.addEventListener(\"scrollend\", endHandler, addEventListenerOptions);\n }\n return () => {\n element.removeEventListener(\"scroll\", handler);\n if (registerScrollendEvent) {\n element.removeEventListener(\"scrollend\", endHandler);\n }\n };\n};\nconst observeWindowOffset = (instance, cb) => {\n const element = instance.scrollElement;\n if (!element) {\n return;\n }\n const targetWindow = instance.targetWindow;\n if (!targetWindow) {\n return;\n }\n let offset = 0;\n const fallback = instance.options.useScrollendEvent && supportsScrollend ? () => void 0 : debounce(\n targetWindow,\n () => {\n cb(offset, false);\n },\n instance.options.isScrollingResetDelay\n );\n const createHandler = (isScrolling) => () => {\n offset = element[instance.options.horizontal ? \"scrollX\" : \"scrollY\"];\n fallback();\n cb(offset, isScrolling);\n };\n const handler = createHandler(true);\n const endHandler = createHandler(false);\n element.addEventListener(\"scroll\", handler, addEventListenerOptions);\n const registerScrollendEvent = instance.options.useScrollendEvent && supportsScrollend;\n if (registerScrollendEvent) {\n element.addEventListener(\"scrollend\", endHandler, addEventListenerOptions);\n }\n return () => {\n element.removeEventListener(\"scroll\", handler);\n if (registerScrollendEvent) {\n element.removeEventListener(\"scrollend\", endHandler);\n }\n };\n};\nconst measureElement = (element, entry, instance) => {\n if (entry == null ? void 0 : entry.borderBoxSize) {\n const box = entry.borderBoxSize[0];\n if (box) {\n const size = Math.round(\n box[instance.options.horizontal ? \"inlineSize\" : \"blockSize\"]\n );\n return size;\n }\n }\n return element[instance.options.horizontal ? \"offsetWidth\" : \"offsetHeight\"];\n};\nconst windowScroll = (offset, {\n adjustments = 0,\n behavior\n}, instance) => {\n var _a, _b;\n const toOffset = offset + adjustments;\n (_b = (_a = instance.scrollElement) == null ? void 0 : _a.scrollTo) == null ? void 0 : _b.call(_a, {\n [instance.options.horizontal ? \"left\" : \"top\"]: toOffset,\n behavior\n });\n};\nconst elementScroll = (offset, {\n adjustments = 0,\n behavior\n}, instance) => {\n var _a, _b;\n const toOffset = offset + adjustments;\n (_b = (_a = instance.scrollElement) == null ? void 0 : _a.scrollTo) == null ? void 0 : _b.call(_a, {\n [instance.options.horizontal ? \"left\" : \"top\"]: toOffset,\n behavior\n });\n};\nclass Virtualizer {\n constructor(opts) {\n this.unsubs = [];\n this.scrollElement = null;\n this.targetWindow = null;\n this.isScrolling = false;\n this.currentScrollToIndex = null;\n this.measurementsCache = [];\n this.itemSizeCache = /* @__PURE__ */ new Map();\n this.laneAssignments = /* @__PURE__ */ new Map();\n this.pendingMeasuredCacheIndexes = [];\n this.prevLanes = void 0;\n this.lanesChangedFlag = false;\n this.lanesSettling = false;\n this.scrollRect = null;\n this.scrollOffset = null;\n this.scrollDirection = null;\n this.scrollAdjustments = 0;\n this.elementsCache = /* @__PURE__ */ new Map();\n this.observer = /* @__PURE__ */ (() => {\n let _ro = null;\n const get = () => {\n if (_ro) {\n return _ro;\n }\n if (!this.targetWindow || !this.targetWindow.ResizeObserver) {\n return null;\n }\n return _ro = new this.targetWindow.ResizeObserver((entries) => {\n entries.forEach((entry) => {\n const run = () => {\n this._measureElement(entry.target, entry);\n };\n this.options.useAnimationFrameWithResizeObserver ? requestAnimationFrame(run) : run();\n });\n });\n };\n return {\n disconnect: () => {\n var _a;\n (_a = get()) == null ? void 0 : _a.disconnect();\n _ro = null;\n },\n observe: (target) => {\n var _a;\n return (_a = get()) == null ? void 0 : _a.observe(target, { box: \"border-box\" });\n },\n unobserve: (target) => {\n var _a;\n return (_a = get()) == null ? void 0 : _a.unobserve(target);\n }\n };\n })();\n this.range = null;\n this.setOptions = (opts2) => {\n Object.entries(opts2).forEach(([key, value]) => {\n if (typeof value === \"undefined\") delete opts2[key];\n });\n this.options = {\n debug: false,\n initialOffset: 0,\n overscan: 1,\n paddingStart: 0,\n paddingEnd: 0,\n scrollPaddingStart: 0,\n scrollPaddingEnd: 0,\n horizontal: false,\n getItemKey: defaultKeyExtractor,\n rangeExtractor: defaultRangeExtractor,\n onChange: () => {\n },\n measureElement,\n initialRect: { width: 0, height: 0 },\n scrollMargin: 0,\n gap: 0,\n indexAttribute: \"data-index\",\n initialMeasurementsCache: [],\n lanes: 1,\n isScrollingResetDelay: 150,\n enabled: true,\n isRtl: false,\n useScrollendEvent: false,\n useAnimationFrameWithResizeObserver: false,\n ...opts2\n };\n };\n this.notify = (sync) => {\n var _a, _b;\n (_b = (_a = this.options).onChange) == null ? void 0 : _b.call(_a, this, sync);\n };\n this.maybeNotify = memo(\n () => {\n this.calculateRange();\n return [\n this.isScrolling,\n this.range ? this.range.startIndex : null,\n this.range ? this.range.endIndex : null\n ];\n },\n (isScrolling) => {\n this.notify(isScrolling);\n },\n {\n key: process.env.NODE_ENV !== \"production\" && \"maybeNotify\",\n debug: () => this.options.debug,\n initialDeps: [\n this.isScrolling,\n this.range ? this.range.startIndex : null,\n this.range ? this.range.endIndex : null\n ]\n }\n );\n this.cleanup = () => {\n this.unsubs.filter(Boolean).forEach((d) => d());\n this.unsubs = [];\n this.observer.disconnect();\n this.scrollElement = null;\n this.targetWindow = null;\n };\n this._didMount = () => {\n return () => {\n this.cleanup();\n };\n };\n this._willUpdate = () => {\n var _a;\n const scrollElement = this.options.enabled ? this.options.getScrollElement() : null;\n if (this.scrollElement !== scrollElement) {\n this.cleanup();\n if (!scrollElement) {\n this.maybeNotify();\n return;\n }\n this.scrollElement = scrollElement;\n if (this.scrollElement && \"ownerDocument\" in this.scrollElement) {\n this.targetWindow = this.scrollElement.ownerDocument.defaultView;\n } else {\n this.targetWindow = ((_a = this.scrollElement) == null ? void 0 : _a.window) ?? null;\n }\n this.elementsCache.forEach((cached) => {\n this.observer.observe(cached);\n });\n this.unsubs.push(\n this.options.observeElementRect(this, (rect) => {\n this.scrollRect = rect;\n this.maybeNotify();\n })\n );\n this.unsubs.push(\n this.options.observeElementOffset(this, (offset, isScrolling) => {\n this.scrollAdjustments = 0;\n this.scrollDirection = isScrolling ? this.getScrollOffset() < offset ? \"forward\" : \"backward\" : null;\n this.scrollOffset = offset;\n this.isScrolling = isScrolling;\n this.maybeNotify();\n })\n );\n this._scrollToOffset(this.getScrollOffset(), {\n adjustments: void 0,\n behavior: void 0\n });\n }\n };\n this.getSize = () => {\n if (!this.options.enabled) {\n this.scrollRect = null;\n return 0;\n }\n this.scrollRect = this.scrollRect ?? this.options.initialRect;\n return this.scrollRect[this.options.horizontal ? \"width\" : \"height\"];\n };\n this.getScrollOffset = () => {\n if (!this.options.enabled) {\n this.scrollOffset = null;\n return 0;\n }\n this.scrollOffset = this.scrollOffset ?? (typeof this.options.initialOffset === \"function\" ? this.options.initialOffset() : this.options.initialOffset);\n return this.scrollOffset;\n };\n this.getFurthestMeasurement = (measurements, index) => {\n const furthestMeasurementsFound = /* @__PURE__ */ new Map();\n const furthestMeasurements = /* @__PURE__ */ new Map();\n for (let m = index - 1; m >= 0; m--) {\n const measurement = measurements[m];\n if (furthestMeasurementsFound.has(measurement.lane)) {\n continue;\n }\n const previousFurthestMeasurement = furthestMeasurements.get(\n measurement.lane\n );\n if (previousFurthestMeasurement == null || measurement.end > previousFurthestMeasurement.end) {\n furthestMeasurements.set(measurement.lane, measurement);\n } else if (measurement.end < previousFurthestMeasurement.end) {\n furthestMeasurementsFound.set(measurement.lane, true);\n }\n if (furthestMeasurementsFound.size === this.options.lanes) {\n break;\n }\n }\n return furthestMeasurements.size === this.options.lanes ? Array.from(furthestMeasurements.values()).sort((a, b) => {\n if (a.end === b.end) {\n return a.index - b.index;\n }\n return a.end - b.end;\n })[0] : void 0;\n };\n this.getMeasurementOptions = memo(\n () => [\n this.options.count,\n this.options.paddingStart,\n this.options.scrollMargin,\n this.options.getItemKey,\n this.options.enabled,\n this.options.lanes\n ],\n (count, paddingStart, scrollMargin, getItemKey, enabled, lanes) => {\n const lanesChanged = this.prevLanes !== void 0 && this.prevLanes !== lanes;\n if (lanesChanged) {\n this.lanesChangedFlag = true;\n }\n this.prevLanes = lanes;\n this.pendingMeasuredCacheIndexes = [];\n return {\n count,\n paddingStart,\n scrollMargin,\n getItemKey,\n enabled,\n lanes\n };\n },\n {\n key: false\n }\n );\n this.getMeasurements = memo(\n () => [this.getMeasurementOptions(), this.itemSizeCache],\n ({ count, paddingStart, scrollMargin, getItemKey, enabled, lanes }, itemSizeCache) => {\n if (!enabled) {\n this.measurementsCache = [];\n this.itemSizeCache.clear();\n this.laneAssignments.clear();\n return [];\n }\n if (this.laneAssignments.size > count) {\n for (const index of this.laneAssignments.keys()) {\n if (index >= count) {\n this.laneAssignments.delete(index);\n }\n }\n }\n if (this.lanesChangedFlag) {\n this.lanesChangedFlag = false;\n this.lanesSettling = true;\n this.measurementsCache = [];\n this.itemSizeCache.clear();\n this.laneAssignments.clear();\n this.pendingMeasuredCacheIndexes = [];\n }\n if (this.measurementsCache.length === 0 && !this.lanesSettling) {\n this.measurementsCache = this.options.initialMeasurementsCache;\n this.measurementsCache.forEach((item) => {\n this.itemSizeCache.set(item.key, item.size);\n });\n }\n const min = this.lanesSettling ? 0 : this.pendingMeasuredCacheIndexes.length > 0 ? Math.min(...this.pendingMeasuredCacheIndexes) : 0;\n this.pendingMeasuredCacheIndexes = [];\n if (this.lanesSettling && this.measurementsCache.length === count) {\n this.lanesSettling = false;\n }\n const measurements = this.measurementsCache.slice(0, min);\n const laneLastIndex = new Array(lanes).fill(\n void 0\n );\n for (let m = 0; m < min; m++) {\n const item = measurements[m];\n if (item) {\n laneLastIndex[item.lane] = m;\n }\n }\n for (let i = min; i < count; i++) {\n const key = getItemKey(i);\n const cachedLane = this.laneAssignments.get(i);\n let lane;\n let start;\n if (cachedLane !== void 0 && this.options.lanes > 1) {\n lane = cachedLane;\n const prevIndex = laneLastIndex[lane];\n const prevInLane = prevIndex !== void 0 ? measurements[prevIndex] : void 0;\n start = prevInLane ? prevInLane.end + this.options.gap : paddingStart + scrollMargin;\n } else {\n const furthestMeasurement = this.options.lanes === 1 ? measurements[i - 1] : this.getFurthestMeasurement(measurements, i);\n start = furthestMeasurement ? furthestMeasurement.end + this.options.gap : paddingStart + scrollMargin;\n lane = furthestMeasurement ? furthestMeasurement.lane : i % this.options.lanes;\n if (this.options.lanes > 1) {\n this.laneAssignments.set(i, lane);\n }\n }\n const measuredSize = itemSizeCache.get(key);\n const size = typeof measuredSize === \"number\" ? measuredSize : this.options.estimateSize(i);\n const end = start + size;\n measurements[i] = {\n index: i,\n start,\n size,\n end,\n key,\n lane\n };\n laneLastIndex[lane] = i;\n }\n this.measurementsCache = measurements;\n return measurements;\n },\n {\n key: process.env.NODE_ENV !== \"production\" && \"getMeasurements\",\n debug: () => this.options.debug\n }\n );\n this.calculateRange = memo(\n () => [\n this.getMeasurements(),\n this.getSize(),\n this.getScrollOffset(),\n this.options.lanes\n ],\n (measurements, outerSize, scrollOffset, lanes) => {\n return this.range = measurements.length > 0 && outerSize > 0 ? calculateRange({\n measurements,\n outerSize,\n scrollOffset,\n lanes\n }) : null;\n },\n {\n key: process.env.NODE_ENV !== \"production\" && \"calculateRange\",\n debug: () => this.options.debug\n }\n );\n this.getVirtualIndexes = memo(\n () => {\n let startIndex = null;\n let endIndex = null;\n const range = this.calculateRange();\n if (range) {\n startIndex = range.startIndex;\n endIndex = range.endIndex;\n }\n this.maybeNotify.updateDeps([this.isScrolling, startIndex, endIndex]);\n return [\n this.options.rangeExtractor,\n this.options.overscan,\n this.options.count,\n startIndex,\n endIndex\n ];\n },\n (rangeExtractor, overscan, count, startIndex, endIndex) => {\n return startIndex === null || endIndex === null ? [] : rangeExtractor({\n startIndex,\n endIndex,\n overscan,\n count\n });\n },\n {\n key: process.env.NODE_ENV !== \"production\" && \"getVirtualIndexes\",\n debug: () => this.options.debug\n }\n );\n this.indexFromElement = (node) => {\n const attributeName = this.options.indexAttribute;\n const indexStr = node.getAttribute(attributeName);\n if (!indexStr) {\n console.warn(\n `Missing attribute name '${attributeName}={index}' on measured element.`\n );\n return -1;\n }\n return parseInt(indexStr, 10);\n };\n this._measureElement = (node, entry) => {\n const index = this.indexFromElement(node);\n const item = this.measurementsCache[index];\n if (!item) {\n return;\n }\n const key = item.key;\n const prevNode = this.elementsCache.get(key);\n if (prevNode !== node) {\n if (prevNode) {\n this.observer.unobserve(prevNode);\n }\n this.observer.observe(node);\n this.elementsCache.set(key, node);\n }\n if (node.isConnected) {\n this.resizeItem(index, this.options.measureElement(node, entry, this));\n }\n };\n this.resizeItem = (index, size) => {\n const item = this.measurementsCache[index];\n if (!item) {\n return;\n }\n const itemSize = this.itemSizeCache.get(item.key) ?? item.size;\n const delta = size - itemSize;\n if (delta !== 0) {\n if (this.shouldAdjustScrollPositionOnItemSizeChange !== void 0 ? this.shouldAdjustScrollPositionOnItemSizeChange(item, delta, this) : item.start < this.getScrollOffset() + this.scrollAdjustments) {\n if (process.env.NODE_ENV !== \"production\" && this.options.debug) {\n console.info(\"correction\", delta);\n }\n this._scrollToOffset(this.getScrollOffset(), {\n adjustments: this.scrollAdjustments += delta,\n behavior: void 0\n });\n }\n this.pendingMeasuredCacheIndexes.push(item.index);\n this.itemSizeCache = new Map(this.itemSizeCache.set(item.key, size));\n this.notify(false);\n }\n };\n this.measureElement = (node) => {\n if (!node) {\n this.elementsCache.forEach((cached, key) => {\n if (!cached.isConnected) {\n this.observer.unobserve(cached);\n this.elementsCache.delete(key);\n }\n });\n return;\n }\n this._measureElement(node, void 0);\n };\n this.getVirtualItems = memo(\n () => [this.getVirtualIndexes(), this.getMeasurements()],\n (indexes, measurements) => {\n const virtualItems = [];\n for (let k = 0, len = indexes.length; k < len; k++) {\n const i = indexes[k];\n const measurement = measurements[i];\n virtualItems.push(measurement);\n }\n return virtualItems;\n },\n {\n key: process.env.NODE_ENV !== \"production\" && \"getVirtualItems\",\n debug: () => this.options.debug\n }\n );\n this.getVirtualItemForOffset = (offset) => {\n const measurements = this.getMeasurements();\n if (measurements.length === 0) {\n return void 0;\n }\n return notUndefined(\n measurements[findNearestBinarySearch(\n 0,\n measurements.length - 1,\n (index) => notUndefined(measurements[index]).start,\n offset\n )]\n );\n };\n this.getMaxScrollOffset = () => {\n if (!this.scrollElement) return 0;\n if (\"scrollHeight\" in this.scrollElement) {\n return this.options.horizontal ? this.scrollElement.scrollWidth - this.scrollElement.clientWidth : this.scrollElement.scrollHeight - this.scrollElement.clientHeight;\n } else {\n const doc = this.scrollElement.document.documentElement;\n return this.options.horizontal ? doc.scrollWidth - this.scrollElement.innerWidth : doc.scrollHeight - this.scrollElement.innerHeight;\n }\n };\n this.getOffsetForAlignment = (toOffset, align, itemSize = 0) => {\n if (!this.scrollElement) return 0;\n const size = this.getSize();\n const scrollOffset = this.getScrollOffset();\n if (align === \"auto\") {\n align = toOffset >= scrollOffset + size ? \"end\" : \"start\";\n }\n if (align === \"center\") {\n toOffset += (itemSize - size) / 2;\n } else if (align === \"end\") {\n toOffset -= size;\n }\n const maxOffset = this.getMaxScrollOffset();\n return Math.max(Math.min(maxOffset, toOffset), 0);\n };\n this.getOffsetForIndex = (index, align = \"auto\") => {\n index = Math.max(0, Math.min(index, this.options.count - 1));\n const item = this.measurementsCache[index];\n if (!item) {\n return void 0;\n }\n const size = this.getSize();\n const scrollOffset = this.getScrollOffset();\n if (align === \"auto\") {\n if (item.end >= scrollOffset + size - this.options.scrollPaddingEnd) {\n align = \"end\";\n } else if (item.start <= scrollOffset + this.options.scrollPaddingStart) {\n align = \"start\";\n } else {\n return [scrollOffset, align];\n }\n }\n if (align === \"end\" && index === this.options.count - 1) {\n return [this.getMaxScrollOffset(), align];\n }\n const toOffset = align === \"end\" ? item.end + this.options.scrollPaddingEnd : item.start - this.options.scrollPaddingStart;\n return [\n this.getOffsetForAlignment(toOffset, align, item.size),\n align\n ];\n };\n this.isDynamicMode = () => this.elementsCache.size > 0;\n this.scrollToOffset = (toOffset, { align = \"start\", behavior } = {}) => {\n if (behavior === \"smooth\" && this.isDynamicMode()) {\n console.warn(\n \"The `smooth` scroll behavior is not fully supported with dynamic size.\"\n );\n }\n this._scrollToOffset(this.getOffsetForAlignment(toOffset, align), {\n adjustments: void 0,\n behavior\n });\n };\n this.scrollToIndex = (index, { align: initialAlign = \"auto\", behavior } = {}) => {\n if (behavior === \"smooth\" && this.isDynamicMode()) {\n console.warn(\n \"The `smooth` scroll behavior is not fully supported with dynamic size.\"\n );\n }\n index = Math.max(0, Math.min(index, this.options.count - 1));\n this.currentScrollToIndex = index;\n let attempts = 0;\n const maxAttempts = 10;\n const tryScroll = (currentAlign) => {\n if (!this.targetWindow) return;\n const offsetInfo = this.getOffsetForIndex(index, currentAlign);\n if (!offsetInfo) {\n console.warn(\"Failed to get offset for index:\", index);\n return;\n }\n const [offset, align] = offsetInfo;\n this._scrollToOffset(offset, { adjustments: void 0, behavior });\n this.targetWindow.requestAnimationFrame(() => {\n const verify = () => {\n if (this.currentScrollToIndex !== index) return;\n const currentOffset = this.getScrollOffset();\n const afterInfo = this.getOffsetForIndex(index, align);\n if (!afterInfo) {\n console.warn(\"Failed to get offset for index:\", index);\n return;\n }\n if (!approxEqual(afterInfo[0], currentOffset)) {\n scheduleRetry(align);\n }\n };\n if (this.isDynamicMode()) {\n this.targetWindow.requestAnimationFrame(verify);\n } else {\n verify();\n }\n });\n };\n const scheduleRetry = (align) => {\n if (!this.targetWindow) return;\n if (this.currentScrollToIndex !== index) return;\n attempts++;\n if (attempts < maxAttempts) {\n if (process.env.NODE_ENV !== \"production\" && this.options.debug) {\n console.info(\"Schedule retry\", attempts, maxAttempts);\n }\n this.targetWindow.requestAnimationFrame(() => tryScroll(align));\n } else {\n console.warn(\n `Failed to scroll to index ${index} after ${maxAttempts} attempts.`\n );\n }\n };\n tryScroll(initialAlign);\n };\n this.scrollBy = (delta, { behavior } = {}) => {\n if (behavior === \"smooth\" && this.isDynamicMode()) {\n console.warn(\n \"The `smooth` scroll behavior is not fully supported with dynamic size.\"\n );\n }\n this._scrollToOffset(this.getScrollOffset() + delta, {\n adjustments: void 0,\n behavior\n });\n };\n this.getTotalSize = () => {\n var _a;\n const measurements = this.getMeasurements();\n let end;\n if (measurements.length === 0) {\n end = this.options.paddingStart;\n } else if (this.options.lanes === 1) {\n end = ((_a = measurements[measurements.length - 1]) == null ? void 0 : _a.end) ?? 0;\n } else {\n const endByLane = Array(this.options.lanes).fill(null);\n let endIndex = measurements.length - 1;\n while (endIndex >= 0 && endByLane.some((val) => val === null)) {\n const item = measurements[endIndex];\n if (endByLane[item.lane] === null) {\n endByLane[item.lane] = item.end;\n }\n endIndex--;\n }\n end = Math.max(...endByLane.filter((val) => val !== null));\n }\n return Math.max(\n end - this.options.scrollMargin + this.options.paddingEnd,\n 0\n );\n };\n this._scrollToOffset = (offset, {\n adjustments,\n behavior\n }) => {\n this.options.scrollToFn(offset, { behavior, adjustments }, this);\n };\n this.measure = () => {\n this.itemSizeCache = /* @__PURE__ */ new Map();\n this.laneAssignments = /* @__PURE__ */ new Map();\n this.notify(false);\n };\n this.setOptions(opts);\n }\n}\nconst findNearestBinarySearch = (low, high, getCurrentValue, value) => {\n while (low <= high) {\n const middle = (low + high) / 2 | 0;\n const currentValue = getCurrentValue(middle);\n if (currentValue < value) {\n low = middle + 1;\n } else if (currentValue > value) {\n high = middle - 1;\n } else {\n return middle;\n }\n }\n if (low > 0) {\n return low - 1;\n } else {\n return 0;\n }\n};\nfunction calculateRange({\n measurements,\n outerSize,\n scrollOffset,\n lanes\n}) {\n const lastIndex = measurements.length - 1;\n const getOffset = (index) => measurements[index].start;\n if (measurements.length <= lanes) {\n return {\n startIndex: 0,\n endIndex: lastIndex\n };\n }\n let startIndex = findNearestBinarySearch(\n 0,\n lastIndex,\n getOffset,\n scrollOffset\n );\n let endIndex = startIndex;\n if (lanes === 1) {\n while (endIndex < lastIndex && measurements[endIndex].end < scrollOffset + outerSize) {\n endIndex++;\n }\n } else if (lanes > 1) {\n const endPerLane = Array(lanes).fill(0);\n while (endIndex < lastIndex && endPerLane.some((pos) => pos < scrollOffset + outerSize)) {\n const item = measurements[endIndex];\n endPerLane[item.lane] = item.end;\n endIndex++;\n }\n const startPerLane = Array(lanes).fill(scrollOffset + outerSize);\n while (startIndex >= 0 && startPerLane.some((pos) => pos >= scrollOffset)) {\n const item = measurements[startIndex];\n startPerLane[item.lane] = item.start;\n startIndex--;\n }\n startIndex = Math.max(0, startIndex - startIndex % lanes);\n endIndex = Math.min(lastIndex, endIndex + (lanes - 1 - endIndex % lanes));\n }\n return { startIndex, endIndex };\n}\nexport {\n Virtualizer,\n approxEqual,\n debounce,\n defaultKeyExtractor,\n defaultRangeExtractor,\n elementScroll,\n measureElement,\n memo,\n notUndefined,\n observeElementOffset,\n observeElementRect,\n observeWindowOffset,\n observeWindowRect,\n windowScroll\n};\n//# sourceMappingURL=index.js.map\n","import * as React from \"react\";\nimport { flushSync } from \"react-dom\";\nimport { Virtualizer, elementScroll, observeElementOffset, observeElementRect, windowScroll, observeWindowOffset, observeWindowRect } from \"@tanstack/virtual-core\";\nexport * from \"@tanstack/virtual-core\";\nconst useIsomorphicLayoutEffect = typeof document !== \"undefined\" ? React.useLayoutEffect : React.useEffect;\nfunction useVirtualizerBase({\n useFlushSync = true,\n ...options\n}) {\n const rerender = React.useReducer(() => ({}), {})[1];\n const resolvedOptions = {\n ...options,\n onChange: (instance2, sync) => {\n var _a;\n if (useFlushSync && sync) {\n flushSync(rerender);\n } else {\n rerender();\n }\n (_a = options.onChange) == null ? void 0 : _a.call(options, instance2, sync);\n }\n };\n const [instance] = React.useState(\n () => new Virtualizer(resolvedOptions)\n );\n instance.setOptions(resolvedOptions);\n useIsomorphicLayoutEffect(() => {\n return instance._didMount();\n }, []);\n useIsomorphicLayoutEffect(() => {\n return instance._willUpdate();\n });\n return instance;\n}\nfunction useVirtualizer(options) {\n return useVirtualizerBase({\n observeElementRect,\n observeElementOffset,\n scrollToFn: elementScroll,\n ...options\n });\n}\nfunction useWindowVirtualizer(options) {\n return useVirtualizerBase({\n getScrollElement: () => typeof document !== \"undefined\" ? window : null,\n observeElementRect: observeWindowRect,\n observeElementOffset: observeWindowOffset,\n scrollToFn: windowScroll,\n initialOffset: () => typeof document !== \"undefined\" ? window.scrollY : 0,\n ...options\n });\n}\nexport {\n useVirtualizer,\n useWindowVirtualizer\n};\n//# sourceMappingURL=index.js.map\n","import * as React from 'react'\nimport {\n ColumnDef,\n ColumnFiltersState,\n ColumnResizeMode,\n SortingState,\n VisibilityState,\n flexRender,\n getCoreRowModel,\n getFilteredRowModel,\n getSortedRowModel,\n useReactTable,\n} from '@tanstack/react-table'\nimport { useVirtualizer } from '@tanstack/react-virtual'\nimport { ChevronDown, Search } from 'lucide-react'\nimport { cn } from '@/utils/cn'\nimport { useLocale } from '@/providers/locale-provider'\nimport { Button } from '@/components/ui/button'\nimport { Checkbox } from '@/components/ui/checkbox'\nimport {\n DropdownMenu,\n DropdownMenuCheckboxItem,\n DropdownMenuContent,\n DropdownMenuTrigger,\n} from '@/components/ui/dropdown-menu'\nimport { Input } from '@/components/ui/input'\nimport {\n Table,\n TableBody,\n TableCell,\n TableHead,\n TableHeader,\n TableRow,\n} from './data-table'\n\nexport interface VirtualDataTableProps<TData, TValue> {\n columns: ColumnDef<TData, TValue>[]\n data: TData[]\n searchKey?: string\n searchPlaceholder?: string\n showColumnToggle?: boolean\n showRowSelection?: boolean\n onRowClick?: (row: TData) => void\n className?: string\n /** Enable inline cell editing (pass table meta) */\n editable?: boolean\n onCellEdit?: (rowIndex: number, columnId: string, value: unknown, row: TData) => void | Promise<void>\n onCellValidate?: (rowIndex: number, columnId: string, value: unknown, row: TData) => string | null\n /** Enable column resizing */\n enableColumnResizing?: boolean\n columnResizeMode?: ColumnResizeMode\n /** Sticky table header */\n stickyHeader?: boolean\n /** Custom empty state */\n emptyState?: React.ReactNode\n /** Height of the scrollable container (default: 500) */\n height?: number\n /** Estimated row height (default: 48) */\n estimateRowHeight?: number\n /** Overscan count for virtualization (default: 10) */\n overscan?: number\n}\n\nfunction VirtualDataTable<TData, TValue>({\n columns,\n data,\n searchKey,\n searchPlaceholder,\n showColumnToggle = true,\n showRowSelection = false,\n onRowClick,\n className,\n editable = false,\n onCellEdit,\n onCellValidate,\n enableColumnResizing = false,\n columnResizeMode = 'onChange',\n stickyHeader = true,\n emptyState,\n height = 500,\n estimateRowHeight = 48,\n overscan = 10,\n}: VirtualDataTableProps<TData, TValue>) {\n const { t } = useLocale()\n const [sorting, setSorting] = React.useState<SortingState>([])\n const [columnFilters, setColumnFilters] = React.useState<ColumnFiltersState>([])\n const [columnVisibility, setColumnVisibility] = React.useState<VisibilityState>({})\n const [rowSelection, setRowSelection] = React.useState({})\n\n const tableColumns = React.useMemo(() => {\n if (showRowSelection) {\n return [\n {\n id: 'select',\n header: ({ table }: { table: ReturnType<typeof useReactTable<TData>> }) => (\n <Checkbox\n checked={\n table.getIsAllPageRowsSelected() ||\n (table.getIsSomePageRowsSelected() && 'indeterminate')\n }\n onCheckedChange={(value) => table.toggleAllPageRowsSelected(!!value)}\n aria-label={t('table.selectAllRows')}\n />\n ),\n cell: ({ row }: { row: { getIsSelected: () => boolean; toggleSelected: (value: boolean) => void } }) => (\n <Checkbox\n checked={row.getIsSelected()}\n onCheckedChange={(value) => row.toggleSelected(!!value)}\n aria-label={t('table.selectRow')}\n />\n ),\n enableSorting: false,\n enableHiding: false,\n enableResizing: false,\n } as ColumnDef<TData, TValue>,\n ...columns,\n ]\n }\n return columns\n }, [columns, showRowSelection, t])\n\n const table = useReactTable({\n data,\n columns: tableColumns,\n onSortingChange: setSorting,\n onColumnFiltersChange: setColumnFilters,\n getCoreRowModel: getCoreRowModel(),\n getSortedRowModel: getSortedRowModel(),\n getFilteredRowModel: getFilteredRowModel(),\n onColumnVisibilityChange: setColumnVisibility,\n onRowSelectionChange: setRowSelection,\n enableColumnResizing,\n columnResizeMode,\n state: {\n sorting,\n columnFilters,\n columnVisibility,\n rowSelection,\n },\n meta: editable\n ? { onCellEdit, onCellValidate }\n : undefined,\n })\n\n const { rows } = table.getRowModel()\n\n const parentRef = React.useRef<HTMLDivElement>(null)\n\n const virtualizer = useVirtualizer({\n count: rows.length,\n getScrollElement: () => parentRef.current,\n estimateSize: () => estimateRowHeight,\n overscan,\n })\n\n return (\n <div className={cn('w-full', className)}>\n <div className=\"flex items-center gap-4 py-4\">\n {searchKey && (\n <Input\n placeholder={searchPlaceholder ?? t('table.searchPlaceholder')}\n value={(table.getColumn(searchKey)?.getFilterValue() as string) ?? ''}\n onChange={(event) => table.getColumn(searchKey)?.setFilterValue(event.target.value)}\n className=\"max-w-sm\"\n />\n )}\n {showColumnToggle && (\n <DropdownMenu>\n <DropdownMenuTrigger asChild>\n <Button variant=\"outline\" className=\"ml-auto\">\n {t('table.columns')} <ChevronDown className=\"ml-2 h-4 w-4\" />\n </Button>\n </DropdownMenuTrigger>\n <DropdownMenuContent align=\"end\">\n {table\n .getAllColumns()\n .filter((column) => column.getCanHide())\n .map((column) => (\n <DropdownMenuCheckboxItem\n key={column.id}\n className=\"capitalize\"\n checked={column.getIsVisible()}\n onCheckedChange={(value) => column.toggleVisibility(!!value)}\n >\n {column.id}\n </DropdownMenuCheckboxItem>\n ))}\n </DropdownMenuContent>\n </DropdownMenu>\n )}\n </div>\n <div className=\"rounded-md border\">\n <div\n ref={parentRef}\n className=\"overflow-auto\"\n style={{ height }}\n >\n <Table style={enableColumnResizing ? { width: table.getCenterTotalSize() } : undefined}>\n <TableHeader className={stickyHeader ? 'sticky top-0 z-20 bg-background' : undefined}>\n {table.getHeaderGroups().map((headerGroup) => (\n <TableRow key={headerGroup.id}>\n {headerGroup.headers.map((header) => (\n <TableHead\n key={header.id}\n style={enableColumnResizing ? { width: header.getSize() } : undefined}\n className={enableColumnResizing ? 'relative' : undefined}\n >\n {header.isPlaceholder\n ? null\n : flexRender(header.column.columnDef.header, header.getContext())}\n {enableColumnResizing && header.column.getCanResize() && (\n <div\n onMouseDown={header.getResizeHandler()}\n onTouchStart={header.getResizeHandler()}\n className={cn(\n 'absolute right-0 top-0 h-full w-1 cursor-col-resize select-none touch-none bg-transparent hover:bg-primary/50 transition-colors',\n header.column.getIsResizing() && 'bg-primary'\n )}\n />\n )}\n </TableHead>\n ))}\n </TableRow>\n ))}\n </TableHeader>\n <TableBody>\n {rows.length ? (\n <>\n {/* Top padding row */}\n {virtualizer.getVirtualItems().length > 0 && (\n <tr style={{ height: virtualizer.getVirtualItems()[0]?.start ?? 0 }} />\n )}\n {virtualizer.getVirtualItems().map((virtualRow) => {\n const row = rows[virtualRow.index]\n return (\n <TableRow\n key={row.id}\n data-index={virtualRow.index}\n ref={(node) => virtualizer.measureElement(node)}\n data-state={row.getIsSelected() && 'selected'}\n onClick={() => onRowClick?.(row.original)}\n className={onRowClick ? 'cursor-pointer' : ''}\n >\n {row.getVisibleCells().map((cell) => (\n <TableCell\n key={cell.id}\n style={enableColumnResizing ? { width: cell.column.getSize() } : undefined}\n >\n {flexRender(cell.column.columnDef.cell, cell.getContext())}\n </TableCell>\n ))}\n </TableRow>\n )\n })}\n {/* Bottom padding row */}\n {virtualizer.getVirtualItems().length > 0 && (\n <tr\n style={{\n height:\n virtualizer.getTotalSize() -\n (virtualizer.getVirtualItems().at(-1)?.end ?? 0),\n }}\n />\n )}\n </>\n ) : (\n <TableRow>\n <TableCell colSpan={tableColumns.length} className=\"h-24 text-center\">\n {emptyState ?? (\n <div className=\"flex flex-col items-center justify-center py-4 text-muted-foreground\">\n <Search className=\"mb-2 h-8 w-8 opacity-40\" />\n <p className=\"text-sm font-medium\">{t('table.noResults')}</p>\n <p className=\"text-xs\">{t('table.adjustSearchOrFilter')}</p>\n </div>\n )}\n </TableCell>\n </TableRow>\n )}\n </TableBody>\n </Table>\n </div>\n </div>\n <div className=\"flex items-center justify-between py-2\">\n <p className=\"text-sm text-muted-foreground\">\n {t('table.rowsTotal', { count: rows.length })}\n </p>\n {showRowSelection && (\n <p className=\"text-sm text-muted-foreground\">\n {t('table.rowsSelected', {\n selected: table.getFilteredSelectedRowModel().rows.length,\n total: rows.length,\n })}\n </p>\n )}\n </div>\n </div>\n )\n}\n\nVirtualDataTable.displayName = 'VirtualDataTable'\n\nexport { VirtualDataTable }\n","import * as React from 'react'\nimport { TrendingUp, TrendingDown, Minus } from 'lucide-react'\nimport { cn } from '@/utils/cn'\nimport { Card, CardContent, CardHeader, CardTitle } from '@/components/ui/card'\n\nexport interface KPICardProps extends React.HTMLAttributes<HTMLDivElement> {\n title: string\n value: string | number\n description?: string\n trend?: {\n value: number\n label?: string\n direction?: 'up' | 'down' | 'neutral'\n }\n icon?: React.ReactNode\n loading?: boolean\n}\n\nconst KPICard = React.forwardRef<HTMLDivElement, KPICardProps>(\n ({ className, title, value, description, trend, icon, loading = false, ...props }, ref) => {\n const trendDirection = trend?.direction || (trend?.value && trend.value > 0 ? 'up' : trend?.value && trend.value < 0 ? 'down' : 'neutral')\n\n const TrendIcon =\n trendDirection === 'up' ? TrendingUp : trendDirection === 'down' ? TrendingDown : Minus\n\n const trendColor =\n trendDirection === 'up'\n ? 'text-success'\n : trendDirection === 'down'\n ? 'text-destructive'\n : 'text-muted-foreground'\n\n return (\n <Card ref={ref} className={cn('', className)} {...props}>\n <CardHeader className=\"flex flex-row items-center justify-between space-y-0 pb-2\">\n <CardTitle className=\"text-sm font-medium\">{title}</CardTitle>\n {icon && <div className=\"text-muted-foreground\">{icon}</div>}\n </CardHeader>\n <CardContent>\n {loading ? (\n <div className=\"space-y-2\">\n <div className=\"h-8 w-24 animate-pulse rounded bg-muted\" />\n <div className=\"h-4 w-32 animate-pulse rounded bg-muted\" />\n </div>\n ) : (\n <>\n <div className=\"text-2xl font-bold\">{value}</div>\n {(description || trend) && (\n <div className=\"flex items-center gap-2 text-xs text-muted-foreground\">\n {trend && (\n <span className={cn('flex items-center gap-1', trendColor)}>\n <TrendIcon className=\"h-3 w-3\" />\n {Math.abs(trend.value)}%\n {trend.label && <span>{trend.label}</span>}\n </span>\n )}\n {description && <span>{description}</span>}\n </div>\n )}\n </>\n )}\n </CardContent>\n </Card>\n )\n }\n)\nKPICard.displayName = 'KPICard'\n\nexport { KPICard }\n","import * as React from 'react'\nimport { cn } from '@/utils/cn'\nimport { Card, CardContent } from '@/components/ui/card'\n\nexport interface StatCardProps extends React.HTMLAttributes<HTMLDivElement> {\n title: string\n value: string | number\n subtitle?: string\n icon?: React.ReactNode\n iconBackground?: string\n loading?: boolean\n}\n\nconst StatCard = React.forwardRef<HTMLDivElement, StatCardProps>(\n ({ className, title, value, subtitle, icon, iconBackground = 'bg-primary/10', loading = false, ...props }, ref) => {\n return (\n <Card ref={ref} className={cn('', className)} {...props}>\n <CardContent className=\"flex items-center gap-4 p-6\">\n {icon && (\n <div className={cn('flex h-12 w-12 items-center justify-center rounded-full', iconBackground)}>\n {icon}\n </div>\n )}\n <div className=\"flex-1\">\n {loading ? (\n <div className=\"space-y-2\">\n <div className=\"h-4 w-20 animate-pulse rounded bg-muted\" />\n <div className=\"h-6 w-16 animate-pulse rounded bg-muted\" />\n </div>\n ) : (\n <>\n <p className=\"text-sm font-medium text-muted-foreground\">{title}</p>\n <p className=\"text-2xl font-bold\">{value}</p>\n {subtitle && <p className=\"text-xs text-muted-foreground\">{subtitle}</p>}\n </>\n )}\n </div>\n </CardContent>\n </Card>\n )\n }\n)\nStatCard.displayName = 'StatCard'\n\nexport { StatCard }\n","import * as React from 'react'\nimport { cn } from '@/utils/cn'\n\nexport interface EmptyStateProps extends React.HTMLAttributes<HTMLDivElement> {\n icon?: React.ReactNode\n title: string\n description?: string\n action?: React.ReactNode\n}\n\nconst EmptyState = React.forwardRef<HTMLDivElement, EmptyStateProps>(\n ({ className, icon, title, description, action, ...props }, ref) => {\n return (\n <div\n ref={ref}\n className={cn(\n 'flex min-h-[400px] flex-col items-center justify-center rounded-lg border border-dashed p-8 text-center',\n className\n )}\n {...props}\n >\n {icon && (\n <div className=\"mb-4 flex h-20 w-20 items-center justify-center rounded-full bg-muted\">\n {icon}\n </div>\n )}\n <h3 className=\"mb-2 text-lg font-semibold\">{title}</h3>\n {description && (\n <p className=\"mb-6 max-w-sm text-sm text-muted-foreground\">{description}</p>\n )}\n {action && <div>{action}</div>}\n </div>\n )\n }\n)\nEmptyState.displayName = 'EmptyState'\n\nexport { EmptyState }\n","import * as React from 'react'\nimport { cn } from '@/utils/cn'\n\nexport interface TimelineItem {\n id: string | number\n title: string\n description?: string\n date?: string\n icon?: React.ReactNode\n status?: 'completed' | 'current' | 'upcoming'\n}\n\nexport interface TimelineProps extends React.HTMLAttributes<HTMLDivElement> {\n items: TimelineItem[]\n}\n\nconst Timeline = React.forwardRef<HTMLDivElement, TimelineProps>(\n ({ className, items, ...props }, ref) => {\n return (\n <div ref={ref} className={cn('relative space-y-0', className)} {...props}>\n {items.map((item, index) => (\n <div key={item.id} className=\"relative pb-8 last:pb-0\">\n {index !== items.length - 1 && (\n <span\n className=\"absolute left-4 top-4 -ml-px h-full w-0.5 bg-border\"\n aria-hidden=\"true\"\n />\n )}\n <div className=\"relative flex items-start space-x-4\">\n <div\n className={cn(\n 'relative flex h-8 w-8 items-center justify-center rounded-full border-2',\n item.status === 'completed' && 'border-primary bg-primary text-primary-foreground',\n item.status === 'current' && 'border-primary bg-background',\n item.status === 'upcoming' && 'border-muted bg-background',\n !item.status && 'border-muted bg-background'\n )}\n >\n {item.icon || (\n <div\n className={cn(\n 'h-2.5 w-2.5 rounded-full',\n item.status === 'completed' && 'bg-primary-foreground',\n item.status === 'current' && 'bg-primary',\n item.status === 'upcoming' && 'bg-muted-foreground',\n !item.status && 'bg-muted-foreground'\n )}\n />\n )}\n </div>\n <div className=\"min-w-0 flex-1 pt-1\">\n <div className=\"flex items-center justify-between\">\n <p\n className={cn(\n 'text-sm font-medium',\n item.status === 'upcoming' && 'text-muted-foreground'\n )}\n >\n {item.title}\n </p>\n {item.date && (\n <time className=\"text-xs text-muted-foreground\">{item.date}</time>\n )}\n </div>\n {item.description && (\n <p className=\"mt-1 text-sm text-muted-foreground\">{item.description}</p>\n )}\n </div>\n </div>\n </div>\n ))}\n </div>\n )\n }\n)\nTimeline.displayName = 'Timeline'\n\nexport { Timeline }\n","import * as React from 'react'\nimport { cn } from '@/utils/cn'\nimport { Avatar, AvatarFallback, AvatarImage } from '@/components/ui/avatar'\n\nexport interface ActivityItem {\n id: string | number\n user: {\n name: string\n avatar?: string\n initials?: string\n }\n action: string\n target?: string\n timestamp: string\n icon?: React.ReactNode\n}\n\nexport interface ActivityFeedProps extends React.HTMLAttributes<HTMLDivElement> {\n items: ActivityItem[]\n showAvatar?: boolean\n}\n\nconst ActivityFeed = React.forwardRef<HTMLDivElement, ActivityFeedProps>(\n ({ className, items, showAvatar = true, ...props }, ref) => {\n return (\n <div ref={ref} className={cn('space-y-4', className)} {...props}>\n {items.map((item) => (\n <div key={item.id} className=\"flex gap-4\">\n {showAvatar && (\n <Avatar className=\"h-8 w-8\">\n {item.user.avatar && <AvatarImage src={item.user.avatar} alt={item.user.name} />}\n <AvatarFallback>\n {item.user.initials || item.user.name.charAt(0).toUpperCase()}\n </AvatarFallback>\n </Avatar>\n )}\n <div className=\"flex-1 space-y-1\">\n <p className=\"text-sm\">\n <span className=\"font-medium\">{item.user.name}</span>{' '}\n <span className=\"text-muted-foreground\">{item.action}</span>\n {item.target && <span className=\"font-medium\"> {item.target}</span>}\n </p>\n <p className=\"text-xs text-muted-foreground\">{item.timestamp}</p>\n </div>\n {item.icon && <div className=\"text-muted-foreground\">{item.icon}</div>}\n </div>\n ))}\n </div>\n )\n }\n)\nActivityFeed.displayName = 'ActivityFeed'\n\nexport { ActivityFeed }\n","import * as React from 'react'\nimport { Settings2, Eye, EyeOff } from 'lucide-react'\nimport { cn } from '@/utils/cn'\nimport { useLocale } from '@/providers/locale-provider'\nimport { Button } from '@/components/ui/button'\nimport { Checkbox } from '@/components/ui/checkbox'\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuLabel,\n DropdownMenuSeparator,\n DropdownMenuTrigger,\n} from '@/components/ui/dropdown-menu'\nimport { ScrollArea } from '@/components/ui/scroll-area'\n\nexport interface ColumnConfig {\n id: string\n label: string\n visible: boolean\n locked?: boolean\n}\n\nexport interface ColumnVisibilityProps {\n columns: ColumnConfig[]\n onChange: (columns: ColumnConfig[]) => void\n showSelectAll?: boolean\n maxHeight?: number\n className?: string\n}\n\nconst ColumnVisibility = React.forwardRef<HTMLButtonElement, ColumnVisibilityProps>(\n ({ columns, onChange, showSelectAll = true, maxHeight = 300, className }, ref) => {\n const { t } = useLocale()\n const visibleCount = columns.filter((c) => c.visible).length\n const totalCount = columns.length\n\n const handleToggle = (columnId: string) => {\n const newColumns = columns.map((col) =>\n col.id === columnId && !col.locked ? { ...col, visible: !col.visible } : col\n )\n onChange(newColumns)\n }\n\n const handleSelectAll = () => {\n const allVisible = columns.every((c) => c.visible || c.locked)\n const newColumns = columns.map((col) =>\n col.locked ? col : { ...col, visible: !allVisible }\n )\n onChange(newColumns)\n }\n\n const handleReset = () => {\n const newColumns = columns.map((col) => ({ ...col, visible: true }))\n onChange(newColumns)\n }\n\n return (\n <DropdownMenu>\n <DropdownMenuTrigger asChild>\n <Button ref={ref} variant=\"outline\" size=\"sm\" className={cn('gap-2', className)}>\n <Settings2 className=\"h-4 w-4\" />\n <span>{t('column.columns')}</span>\n <span className=\"text-xs text-muted-foreground\">\n ({visibleCount}/{totalCount})\n </span>\n </Button>\n </DropdownMenuTrigger>\n <DropdownMenuContent align=\"end\" className=\"w-56\">\n <DropdownMenuLabel className=\"flex items-center justify-between\">\n <span>{t('column.toggleColumns')}</span>\n <Button variant=\"ghost\" size=\"sm\" className=\"h-auto p-1 text-xs\" onClick={handleReset}>\n {t('column.reset')}\n </Button>\n </DropdownMenuLabel>\n <DropdownMenuSeparator />\n\n {showSelectAll && (\n <>\n <div className=\"flex items-center gap-2 px-2 py-1.5\">\n <Checkbox\n id=\"select-all\"\n checked={columns.every((c) => c.visible || c.locked)}\n onCheckedChange={handleSelectAll}\n />\n <label\n htmlFor=\"select-all\"\n className=\"flex-1 cursor-pointer text-sm font-medium\"\n >\n {t('column.selectAll')}\n </label>\n </div>\n <DropdownMenuSeparator />\n </>\n )}\n\n <ScrollArea style={{ maxHeight }}>\n <div className=\"space-y-1 p-1\">\n {columns.map((column) => (\n <div\n key={column.id}\n className={cn(\n 'flex items-center gap-2 rounded-md px-2 py-1.5 transition-colors hover:bg-muted',\n column.locked && 'opacity-50'\n )}\n >\n <Checkbox\n id={column.id}\n checked={column.visible}\n onCheckedChange={() => handleToggle(column.id)}\n disabled={column.locked}\n />\n <label\n htmlFor={column.id}\n className={cn(\n 'flex flex-1 cursor-pointer items-center gap-2 text-sm',\n column.locked && 'cursor-not-allowed'\n )}\n >\n {column.visible ? (\n <Eye className=\"h-3.5 w-3.5 text-muted-foreground\" />\n ) : (\n <EyeOff className=\"h-3.5 w-3.5 text-muted-foreground\" />\n )}\n {column.label}\n </label>\n </div>\n ))}\n </div>\n </ScrollArea>\n </DropdownMenuContent>\n </DropdownMenu>\n )\n }\n)\nColumnVisibility.displayName = 'ColumnVisibility'\n\nexport { ColumnVisibility }\n","import * as React from 'react'\nimport { X, MoreHorizontal } from 'lucide-react'\nimport { cn } from '@/utils/cn'\nimport { Button } from '@/components/ui/button'\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuTrigger,\n} from '@/components/ui/dropdown-menu'\n\nexport interface BulkAction {\n id: string\n label: string\n icon?: React.ReactNode\n onClick: (selectedIds: string[]) => void\n variant?: 'default' | 'destructive'\n disabled?: boolean\n}\n\nexport interface BulkActionsToolbarProps {\n selectedCount: number\n selectedIds: string[]\n onClearSelection: () => void\n actions: BulkAction[]\n maxVisibleActions?: number\n className?: string\n}\n\nconst BulkActionsToolbar = React.forwardRef<HTMLDivElement, BulkActionsToolbarProps>(\n (\n {\n selectedCount,\n selectedIds,\n onClearSelection,\n actions,\n maxVisibleActions = 3,\n className,\n },\n ref\n ) => {\n if (selectedCount === 0) return null\n\n const visibleActions = actions.slice(0, maxVisibleActions)\n const overflowActions = actions.slice(maxVisibleActions)\n\n return (\n <div\n ref={ref}\n className={cn(\n 'flex items-center gap-2 rounded-lg border bg-muted/50 px-3 py-2',\n className\n )}\n >\n <div className=\"flex items-center gap-2\">\n <Button\n variant=\"ghost\"\n size=\"icon\"\n className=\"h-8 w-8\"\n onClick={onClearSelection}\n >\n <X className=\"h-4 w-4\" />\n </Button>\n <span className=\"text-sm font-medium\">\n {selectedCount} selected\n </span>\n </div>\n\n <div className=\"mx-2 h-6 w-px bg-border\" />\n\n <div className=\"flex items-center gap-1\">\n {visibleActions.map((action) => (\n <Button\n key={action.id}\n variant={action.variant === 'destructive' ? 'destructive' : 'ghost'}\n size=\"sm\"\n className=\"gap-2\"\n onClick={() => action.onClick(selectedIds)}\n disabled={action.disabled}\n >\n {action.icon}\n <span>{action.label}</span>\n </Button>\n ))}\n\n {overflowActions.length > 0 && (\n <DropdownMenu>\n <DropdownMenuTrigger asChild>\n <Button variant=\"ghost\" size=\"icon\" className=\"h-8 w-8\">\n <MoreHorizontal className=\"h-4 w-4\" />\n </Button>\n </DropdownMenuTrigger>\n <DropdownMenuContent align=\"end\">\n {overflowActions.map((action) => (\n <DropdownMenuItem\n key={action.id}\n onClick={() => action.onClick(selectedIds)}\n disabled={action.disabled}\n className={cn(\n 'flex items-center gap-2',\n action.variant === 'destructive' && 'text-destructive'\n )}\n >\n {action.icon}\n <span>{action.label}</span>\n </DropdownMenuItem>\n ))}\n </DropdownMenuContent>\n </DropdownMenu>\n )}\n </div>\n </div>\n )\n }\n)\nBulkActionsToolbar.displayName = 'BulkActionsToolbar'\n\nexport { BulkActionsToolbar }\n","import * as React from 'react'\nimport { cn } from '@/utils/cn'\nimport { useLocale } from '@/providers/locale-provider'\nimport {\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from '@/components/ui/select'\n\nexport interface PerPageSelectorProps {\n value: number\n onChange: (value: number) => void\n options?: number[]\n label?: string\n className?: string\n}\n\nconst PerPageSelector = React.forwardRef<HTMLButtonElement, PerPageSelectorProps>(\n (\n {\n value,\n onChange,\n options = [10, 20, 50, 100],\n label,\n className,\n },\n ref\n ) => {\n const { t } = useLocale()\n const resolvedLabel = label ?? t('table.rowsPerPage')\n return (\n <div className={cn('flex items-center gap-2', className)}>\n <span className=\"text-sm text-muted-foreground\">{resolvedLabel}</span>\n <Select\n value={value.toString()}\n onValueChange={(val) => onChange(parseInt(val, 10))}\n >\n <SelectTrigger ref={ref} size=\"sm\" width=\"sm\">\n <SelectValue />\n </SelectTrigger>\n <SelectContent align=\"end\">\n {options.map((option) => (\n <SelectItem key={option} value={option.toString()}>\n {option}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n </div>\n )\n }\n)\nPerPageSelector.displayName = 'PerPageSelector'\n\nexport { PerPageSelector }\n","import * as React from 'react'\nimport { X, ChevronDown } from 'lucide-react'\nimport { cn } from '@/utils/cn'\nimport { Button } from '@/components/ui/button'\nimport { Badge } from '@/components/ui/badge'\nimport {\n DropdownMenu,\n DropdownMenuCheckboxItem,\n DropdownMenuContent,\n DropdownMenuLabel,\n DropdownMenuSeparator,\n DropdownMenuTrigger,\n} from '@/components/ui/dropdown-menu'\n\nexport interface FilterOption {\n value: string\n label: string\n count?: number\n}\n\nexport interface QuickFilter {\n id: string\n label: string\n options: FilterOption[]\n value: string[]\n onChange: (values: string[]) => void\n multiple?: boolean\n}\n\nexport interface QuickFiltersProps extends React.HTMLAttributes<HTMLDivElement> {\n filters: QuickFilter[]\n onClearAll?: () => void\n}\n\nconst QuickFilters = React.forwardRef<HTMLDivElement, QuickFiltersProps>(\n ({ className, filters, onClearAll, ...props }, ref) => {\n const activeFilterCount = filters.reduce((acc, filter) => acc + filter.value.length, 0)\n\n return (\n <div ref={ref} className={cn('flex flex-wrap items-center gap-2', className)} {...props}>\n {filters.map((filter) => (\n <DropdownMenu key={filter.id}>\n <DropdownMenuTrigger asChild>\n <Button\n variant={filter.value.length > 0 ? 'secondary' : 'outline'}\n size=\"sm\"\n className=\"gap-1\"\n >\n {filter.label}\n {filter.value.length > 0 && (\n <Badge variant=\"default\" className=\"ml-1 h-5 px-1.5\">\n {filter.value.length}\n </Badge>\n )}\n <ChevronDown className=\"h-3.5 w-3.5 opacity-50\" />\n </Button>\n </DropdownMenuTrigger>\n <DropdownMenuContent align=\"start\" className=\"w-48\">\n <DropdownMenuLabel>{filter.label}</DropdownMenuLabel>\n <DropdownMenuSeparator />\n {filter.options.map((option) => (\n <DropdownMenuCheckboxItem\n key={option.value}\n checked={filter.value.includes(option.value)}\n onCheckedChange={(checked) => {\n if (filter.multiple !== false) {\n const newValue = checked\n ? [...filter.value, option.value]\n : filter.value.filter((v) => v !== option.value)\n filter.onChange(newValue)\n } else {\n filter.onChange(checked ? [option.value] : [])\n }\n }}\n >\n <span className=\"flex-1\">{option.label}</span>\n {option.count !== undefined && (\n <span className=\"text-xs text-muted-foreground\">{option.count}</span>\n )}\n </DropdownMenuCheckboxItem>\n ))}\n </DropdownMenuContent>\n </DropdownMenu>\n ))}\n\n {activeFilterCount > 0 && onClearAll && (\n <Button\n variant=\"ghost\"\n size=\"sm\"\n className=\"gap-1 text-muted-foreground\"\n onClick={onClearAll}\n >\n <X className=\"h-3.5 w-3.5\" />\n Clear all\n </Button>\n )}\n </div>\n )\n }\n)\nQuickFilters.displayName = 'QuickFilters'\n\nexport { QuickFilters }\n","import * as React from 'react'\nimport { X } from 'lucide-react'\nimport { cn } from '@/utils/cn'\nimport { useLocale } from '@/providers/locale-provider'\nimport { useControllableState } from '@/hooks/use-controllable-state'\nimport { Badge } from '@/components/ui/badge'\nimport { Button } from '@/components/ui/button'\n\nexport interface FilterTag {\n id: string\n label: string\n value: string\n category?: string\n}\n\nexport interface FilterTagsProps extends React.HTMLAttributes<HTMLDivElement> {\n tags: FilterTag[]\n onRemove: (tagId: string) => void\n onClearAll?: () => void\n maxVisible?: number\n showAll?: boolean\n defaultShowAll?: boolean\n onShowAllChange?: (showAll: boolean) => void\n}\n\nconst FilterTags = React.forwardRef<HTMLDivElement, FilterTagsProps>(\n (\n {\n className,\n tags,\n onRemove,\n onClearAll,\n maxVisible = 5,\n showAll: controlledShowAll,\n defaultShowAll = false,\n onShowAllChange,\n ...props\n },\n ref\n ) => {\n const { t } = useLocale()\n const [showAll, setShowAll] = useControllableState({\n value: controlledShowAll,\n defaultValue: defaultShowAll,\n onChange: onShowAllChange,\n })\n\n if (tags.length === 0) return null\n\n const visibleTags = showAll ? tags : tags.slice(0, maxVisible)\n const hiddenCount = tags.length - maxVisible\n\n return (\n <div ref={ref} className={cn('flex flex-wrap items-center gap-2', className)} {...props}>\n <span className=\"text-sm text-muted-foreground\">{t('filter.activeFilters')}</span>\n {visibleTags.map((tag) => (\n <Badge key={tag.id} variant=\"secondary\" className=\"gap-1 pr-1\">\n {tag.category && (\n <span className=\"text-muted-foreground\">{tag.category}:</span>\n )}\n <span>{tag.label}</span>\n <button\n onClick={() => onRemove(tag.id)}\n className=\"ml-1 rounded-full p-0.5 hover:bg-muted-foreground/20\"\n >\n <X className=\"h-3 w-3\" />\n </button>\n </Badge>\n ))}\n {!showAll && hiddenCount > 0 && (\n <Button\n variant=\"ghost\"\n size=\"sm\"\n className=\"h-6 px-2 text-xs\"\n onClick={() => setShowAll(true)}\n >\n {t('filter.more', { count: hiddenCount })}\n </Button>\n )}\n {showAll && hiddenCount > 0 && (\n <Button\n variant=\"ghost\"\n size=\"sm\"\n className=\"h-6 px-2 text-xs\"\n onClick={() => setShowAll(false)}\n >\n {t('filter.showLess')}\n </Button>\n )}\n {onClearAll && tags.length > 1 && (\n <Button\n variant=\"ghost\"\n size=\"sm\"\n className=\"h-6 gap-1 px-2 text-xs text-muted-foreground\"\n onClick={onClearAll}\n >\n <X className=\"h-3 w-3\" />\n {t('common.clearAll')}\n </Button>\n )}\n </div>\n )\n }\n)\nFilterTags.displayName = 'FilterTags'\n\nexport { FilterTags }\n","import * as React from 'react'\nimport { Check, ChevronsUpDown } from 'lucide-react'\nimport { cn } from '@/utils/cn'\nimport { useLocale } from '@/providers/locale-provider'\nimport { Button } from '@/components/ui/button'\nimport {\n Command,\n CommandEmpty,\n CommandGroup,\n CommandInput,\n CommandItem,\n CommandList,\n} from '@/components/ui/command'\nimport { Popover, PopoverContent, PopoverTrigger } from '@/components/ui/popover'\nimport type { FilterFieldDefinition } from './filter-types'\n\nexport interface FilterFieldSelectorProps {\n fields: FilterFieldDefinition[]\n value: string\n onChange: (fieldId: string) => void\n className?: string\n}\n\nexport function FilterFieldSelector({\n fields,\n value,\n onChange,\n className,\n}: FilterFieldSelectorProps) {\n const { t } = useLocale()\n const [open, setOpen] = React.useState(false)\n const selectedField = fields.find((f) => f.id === value)\n\n return (\n <Popover open={open} onOpenChange={setOpen}>\n <PopoverTrigger asChild>\n <Button\n variant=\"outline\"\n role=\"combobox\"\n aria-expanded={open}\n className={cn('w-[180px] justify-between font-normal', className)}\n size=\"sm\"\n >\n <span className=\"flex items-center gap-1.5 truncate\">\n {selectedField?.icon}\n {selectedField?.label ?? t('filter.selectField')}\n </span>\n <ChevronsUpDown className=\"ml-1 h-3 w-3 shrink-0 opacity-50\" />\n </Button>\n </PopoverTrigger>\n <PopoverContent className=\"w-[220px] p-0\" align=\"start\">\n <Command>\n <CommandInput placeholder={t('filter.searchFields')} />\n <CommandList>\n <CommandEmpty>{t('filter.noFieldFound')}</CommandEmpty>\n <CommandGroup>\n {fields.map((field) => (\n <CommandItem\n key={field.id}\n value={field.id}\n onSelect={() => {\n onChange(field.id)\n setOpen(false)\n }}\n >\n <Check\n className={cn(\n 'mr-2 h-4 w-4',\n value === field.id ? 'opacity-100' : 'opacity-0'\n )}\n />\n <span className=\"flex items-center gap-1.5\">\n {field.icon}\n {field.label}\n </span>\n </CommandItem>\n ))}\n </CommandGroup>\n </CommandList>\n </Command>\n </PopoverContent>\n </Popover>\n )\n}\n","export type FilterFieldType = 'text' | 'number' | 'date' | 'boolean' | 'select' | 'multi-select'\n\nexport type FilterOperator =\n // Text operators\n | 'contains'\n | 'not_contains'\n | 'equals'\n | 'not_equals'\n | 'starts_with'\n | 'ends_with'\n | 'is_empty'\n | 'is_not_empty'\n // Number operators\n | 'gt'\n | 'gte'\n | 'lt'\n | 'lte'\n | 'between'\n // Date operators\n | 'before'\n | 'after'\n | 'date_between'\n | 'date_equals'\n // Boolean operators\n | 'is_true'\n | 'is_false'\n // Select / multi-select operators\n | 'in'\n | 'not_in'\n\nexport interface FilterFieldOption {\n value: string\n label: string\n}\n\nexport interface FilterFieldDefinition {\n id: string\n label: string\n type: FilterFieldType\n /** Options for select / multi-select fields */\n options?: FilterFieldOption[]\n /** Icon to display in field selector */\n icon?: React.ReactNode\n}\n\nexport interface FilterRule {\n id: string\n fieldId: string\n operator: FilterOperator\n value: unknown\n /** Second value for 'between' and 'date_between' operators */\n valueTo?: unknown\n}\n\nexport type FilterGroupLogic = 'and' | 'or'\n\nexport interface FilterGroup {\n id: string\n logic: FilterGroupLogic\n rules: FilterRule[]\n groups: FilterGroup[]\n}\n\nexport interface FilterPreset {\n id: string\n name: string\n filter: FilterGroup\n}\n\nexport interface FilterOperatorOption {\n operator: FilterOperator\n label: string\n labelKey: string\n}\n\nexport const OPERATORS_BY_FIELD_TYPE: Record<FilterFieldType, FilterOperatorOption[]> = {\n text: [\n { operator: 'contains', label: 'Contains', labelKey: 'filter.operator.contains' },\n { operator: 'not_contains', label: 'Does not contain', labelKey: 'filter.operator.notContains' },\n { operator: 'equals', label: 'Equals', labelKey: 'filter.operator.equals' },\n { operator: 'not_equals', label: 'Does not equal', labelKey: 'filter.operator.notEquals' },\n { operator: 'starts_with', label: 'Starts with', labelKey: 'filter.operator.startsWith' },\n { operator: 'ends_with', label: 'Ends with', labelKey: 'filter.operator.endsWith' },\n { operator: 'is_empty', label: 'Is empty', labelKey: 'filter.operator.isEmpty' },\n { operator: 'is_not_empty', label: 'Is not empty', labelKey: 'filter.operator.isNotEmpty' },\n ],\n number: [\n { operator: 'equals', label: 'Equals', labelKey: 'filter.operator.equals' },\n { operator: 'not_equals', label: 'Does not equal', labelKey: 'filter.operator.notEquals' },\n { operator: 'gt', label: 'Greater than', labelKey: 'filter.operator.greaterThan' },\n { operator: 'gte', label: 'Greater than or equal', labelKey: 'filter.operator.greaterThanOrEqual' },\n { operator: 'lt', label: 'Less than', labelKey: 'filter.operator.lessThan' },\n { operator: 'lte', label: 'Less than or equal', labelKey: 'filter.operator.lessThanOrEqual' },\n { operator: 'between', label: 'Between', labelKey: 'filter.operator.between' },\n { operator: 'is_empty', label: 'Is empty', labelKey: 'filter.operator.isEmpty' },\n { operator: 'is_not_empty', label: 'Is not empty', labelKey: 'filter.operator.isNotEmpty' },\n ],\n date: [\n { operator: 'date_equals', label: 'Is', labelKey: 'filter.operator.is' },\n { operator: 'before', label: 'Before', labelKey: 'filter.operator.before' },\n { operator: 'after', label: 'After', labelKey: 'filter.operator.after' },\n { operator: 'date_between', label: 'Between', labelKey: 'filter.operator.between' },\n { operator: 'is_empty', label: 'Is empty', labelKey: 'filter.operator.isEmpty' },\n { operator: 'is_not_empty', label: 'Is not empty', labelKey: 'filter.operator.isNotEmpty' },\n ],\n boolean: [\n { operator: 'is_true', label: 'Is true', labelKey: 'filter.operator.isTrue' },\n { operator: 'is_false', label: 'Is false', labelKey: 'filter.operator.isFalse' },\n ],\n select: [\n { operator: 'equals', label: 'Is', labelKey: 'filter.operator.is' },\n { operator: 'not_equals', label: 'Is not', labelKey: 'filter.operator.isNot' },\n { operator: 'is_empty', label: 'Is empty', labelKey: 'filter.operator.isEmpty' },\n { operator: 'is_not_empty', label: 'Is not empty', labelKey: 'filter.operator.isNotEmpty' },\n ],\n 'multi-select': [\n { operator: 'in', label: 'Includes any of', labelKey: 'filter.operator.includesAny' },\n { operator: 'not_in', label: 'Does not include', labelKey: 'filter.operator.doesNotInclude' },\n { operator: 'is_empty', label: 'Is empty', labelKey: 'filter.operator.isEmpty' },\n { operator: 'is_not_empty', label: 'Is not empty', labelKey: 'filter.operator.isNotEmpty' },\n ],\n}\n\nexport const NO_VALUE_OPERATORS: FilterOperator[] = ['is_empty', 'is_not_empty', 'is_true', 'is_false']\n","import * as React from 'react'\nimport { cn } from '@/utils/cn'\nimport { useLocale } from '@/providers/locale-provider'\nimport {\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from '@/components/ui/select'\nimport type { FilterFieldType, FilterOperator, FilterOperatorOption } from './filter-types'\nimport { OPERATORS_BY_FIELD_TYPE } from './filter-types'\n\nexport interface FilterOperatorSelectorProps {\n fieldType: FilterFieldType\n value: FilterOperator\n onChange: (operator: FilterOperator) => void\n renderOperatorLabel?: (option: FilterOperatorOption) => React.ReactNode\n className?: string\n}\n\nexport function FilterOperatorSelector({\n fieldType,\n value,\n onChange,\n renderOperatorLabel,\n className,\n}: FilterOperatorSelectorProps) {\n const { t } = useLocale()\n const operators = OPERATORS_BY_FIELD_TYPE[fieldType] ?? OPERATORS_BY_FIELD_TYPE.text\n\n // Reset to first valid operator if current operator is not valid for this field type\n React.useEffect(() => {\n if (!operators.some((op) => op.operator === value)) {\n onChange(operators[0].operator)\n }\n }, [fieldType, operators, value, onChange])\n\n return (\n <Select value={value} onValueChange={(v) => onChange(v as FilterOperator)}>\n <SelectTrigger size=\"sm\" className={cn('w-[160px]', className)}>\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n {operators.map((op) => (\n <SelectItem key={op.operator} value={op.operator}>\n {renderOperatorLabel\n ? renderOperatorLabel(op)\n : (t(op.labelKey) === op.labelKey ? op.label : t(op.labelKey))}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n )\n}\n","import { useLocale } from '@/providers/locale-provider'\nimport { Input } from '@/components/ui/input'\nimport { DatePicker } from '@/components/forms/date-picker'\nimport { MultiSelect } from '@/components/forms/multi-select'\nimport {\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from '@/components/ui/select'\nimport type { FilterFieldDefinition, FilterOperator } from './filter-types'\nimport { NO_VALUE_OPERATORS } from './filter-types'\n\nexport interface FilterValueInputProps {\n field: FilterFieldDefinition\n operator: FilterOperator\n value: unknown\n valueTo?: unknown\n onChange: (value: unknown, valueTo?: unknown) => void\n}\n\nexport function FilterValueInput({\n field,\n operator,\n value,\n valueTo,\n onChange,\n}: FilterValueInputProps) {\n const { t } = useLocale()\n // No value needed for these operators\n if (NO_VALUE_OPERATORS.includes(operator)) {\n return null\n }\n\n const isBetween = operator === 'between' || operator === 'date_between'\n\n switch (field.type) {\n case 'text':\n return (\n <Input\n value={String(value ?? '')}\n onChange={(e) => onChange(e.target.value)}\n placeholder={t('filter.value')}\n className=\"h-8 w-[160px]\"\n />\n )\n\n case 'number':\n if (isBetween) {\n return (\n <div className=\"flex items-center gap-1\">\n <Input\n type=\"number\"\n value={value !== undefined && value !== null ? String(value) : ''}\n onChange={(e) => onChange(e.target.value ? Number(e.target.value) : undefined, valueTo)}\n placeholder={t('filter.from')}\n className=\"h-8 w-[100px]\"\n />\n <span className=\"text-xs text-muted-foreground\">{t('filter.to').toLowerCase()}</span>\n <Input\n type=\"number\"\n value={valueTo !== undefined && valueTo !== null ? String(valueTo) : ''}\n onChange={(e) => onChange(value, e.target.value ? Number(e.target.value) : undefined)}\n placeholder={t('filter.to')}\n className=\"h-8 w-[100px]\"\n />\n </div>\n )\n }\n return (\n <Input\n type=\"number\"\n value={value !== undefined && value !== null ? String(value) : ''}\n onChange={(e) => onChange(e.target.value ? Number(e.target.value) : undefined)}\n placeholder={t('filter.value')}\n className=\"h-8 w-[160px]\"\n />\n )\n\n case 'date':\n if (isBetween) {\n return (\n <div className=\"flex items-center gap-1\">\n <DatePicker\n value={value instanceof Date ? value : value ? new Date(value as string) : undefined}\n onChange={(d) => onChange(d, valueTo)}\n className=\"h-8 w-[140px] text-xs\"\n />\n <span className=\"text-xs text-muted-foreground\">{t('filter.to').toLowerCase()}</span>\n <DatePicker\n value={valueTo instanceof Date ? valueTo : valueTo ? new Date(valueTo as string) : undefined}\n onChange={(d) => onChange(value, d)}\n className=\"h-8 w-[140px] text-xs\"\n />\n </div>\n )\n }\n return (\n <DatePicker\n value={value instanceof Date ? value : value ? new Date(value as string) : undefined}\n onChange={(d) => onChange(d)}\n className=\"h-8 w-[160px] text-xs\"\n />\n )\n\n case 'select':\n return (\n <Select\n value={String(value ?? '')}\n onValueChange={(v) => onChange(v)}\n >\n <SelectTrigger size=\"sm\" className=\"w-[160px]\">\n <SelectValue placeholder={t('filter.select')} />\n </SelectTrigger>\n <SelectContent>\n {field.options?.map((opt) => (\n <SelectItem key={opt.value} value={opt.value}>\n {opt.label}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n )\n\n case 'multi-select':\n return (\n <MultiSelect\n options={field.options?.map((o) => ({ value: o.value, label: o.label })) ?? []}\n value={Array.isArray(value) ? (value as string[]) : []}\n onChange={(v) => onChange(v)}\n placeholder={t('filter.select')}\n className=\"h-8 w-[200px]\"\n />\n )\n\n case 'boolean':\n return null // Boolean operators don't need value input\n\n default:\n return (\n <Input\n value={String(value ?? '')}\n onChange={(e) => onChange(e.target.value)}\n placeholder={t('filter.value')}\n className=\"h-8 w-[160px]\"\n />\n )\n }\n}\n","import { X } from 'lucide-react'\nimport { cn } from '@/utils/cn'\nimport { Button } from '@/components/ui/button'\nimport type { FilterFieldDefinition, FilterRule as FilterRuleType, FilterOperator } from './filter-types'\nimport { FilterFieldSelector } from './filter-field-selector'\nimport { FilterOperatorSelector } from './filter-operator-selector'\nimport { FilterValueInput } from './filter-value-input'\n\nexport interface FilterRuleProps {\n rule: FilterRuleType\n fields: FilterFieldDefinition[]\n onUpdate: (updates: Partial<FilterRuleType>) => void\n onRemove: () => void\n showRemove?: boolean\n className?: string\n}\n\nexport function FilterRule({\n rule,\n fields,\n onUpdate,\n onRemove,\n showRemove = true,\n className,\n}: FilterRuleProps) {\n const selectedField = fields.find((f) => f.id === rule.fieldId)\n\n const handleFieldChange = (fieldId: string) => {\n const field = fields.find((f) => f.id === fieldId)\n if (field) {\n // Reset operator and value when field changes\n onUpdate({\n fieldId,\n operator: 'contains' as FilterOperator,\n value: '',\n valueTo: undefined,\n })\n }\n }\n\n return (\n <div className={cn('flex items-center gap-2 flex-wrap', className)}>\n <FilterFieldSelector\n fields={fields}\n value={rule.fieldId}\n onChange={handleFieldChange}\n />\n {selectedField && (\n <>\n <FilterOperatorSelector\n fieldType={selectedField.type}\n value={rule.operator}\n onChange={(operator) => onUpdate({ operator })}\n />\n <FilterValueInput\n field={selectedField}\n operator={rule.operator}\n value={rule.value}\n valueTo={rule.valueTo}\n onChange={(value, valueTo) => onUpdate({ value, valueTo })}\n />\n </>\n )}\n {showRemove && (\n <Button\n variant=\"ghost\"\n size=\"icon\"\n className=\"h-7 w-7 shrink-0 text-muted-foreground hover:text-destructive\"\n onClick={onRemove}\n >\n <X className=\"h-3.5 w-3.5\" />\n </Button>\n )}\n </div>\n )\n}\n","import { Plus, Trash2 } from 'lucide-react'\nimport { cn } from '@/utils/cn'\nimport { useLocale } from '@/providers/locale-provider'\nimport { Button } from '@/components/ui/button'\nimport { Badge } from '@/components/ui/badge'\nimport type {\n FilterFieldDefinition,\n FilterGroup as FilterGroupType,\n FilterRule as FilterRuleType,\n FilterGroupLogic,\n} from './filter-types'\nimport { FilterRule } from './filter-rule'\n\nexport interface FilterGroupProps {\n group: FilterGroupType\n fields: FilterFieldDefinition[]\n depth: number\n maxDepth: number\n onAddRule: (groupId: string) => void\n onUpdateRule: (groupId: string, ruleId: string, updates: Partial<FilterRuleType>) => void\n onRemoveRule: (groupId: string, ruleId: string) => void\n onAddGroup: (parentGroupId: string, depth: number) => void\n onRemoveGroup: (parentGroupId: string, groupId: string) => void\n onSetGroupLogic: (groupId: string, logic: FilterGroupLogic) => void\n /** Only root group cannot be removed */\n showRemove?: boolean\n onRemove?: () => void\n className?: string\n}\n\nexport function FilterGroup({\n group,\n fields,\n depth,\n maxDepth,\n onAddRule,\n onUpdateRule,\n onRemoveRule,\n onAddGroup,\n onRemoveGroup,\n onSetGroupLogic,\n showRemove = false,\n onRemove,\n className,\n}: FilterGroupProps) {\n const { t } = useLocale()\n const borderColors = [\n 'border-l-primary',\n 'border-l-blue-500',\n 'border-l-orange-500',\n ]\n const borderColor = borderColors[depth % borderColors.length]\n\n return (\n <div\n className={cn(\n 'rounded-lg border border-l-2 bg-background p-3 space-y-2',\n borderColor,\n className\n )}\n >\n {/* Group header */}\n <div className=\"flex items-center justify-between gap-2\">\n <div className=\"flex items-center gap-1.5\">\n <span className=\"text-xs font-medium text-muted-foreground\">{t('filter.match')}</span>\n <button\n type=\"button\"\n onClick={() => onSetGroupLogic(group.id, group.logic === 'and' ? 'or' : 'and')}\n className=\"focus:outline-none\"\n >\n <Badge\n variant={group.logic === 'and' ? 'default' : 'secondary'}\n className=\"cursor-pointer select-none uppercase text-[10px] px-2 py-0\"\n >\n {group.logic === 'and' ? t('filter.and') : t('filter.or')}\n </Badge>\n </button>\n <span className=\"text-xs text-muted-foreground\">{t('filter.ofFollowing')}</span>\n </div>\n {showRemove && onRemove && (\n <Button\n variant=\"ghost\"\n size=\"icon\"\n className=\"h-6 w-6 text-muted-foreground hover:text-destructive\"\n onClick={onRemove}\n >\n <Trash2 className=\"h-3 w-3\" />\n </Button>\n )}\n </div>\n\n {/* Rules */}\n <div className=\"space-y-2\">\n {group.rules.map((rule) => (\n <FilterRule\n key={rule.id}\n rule={rule}\n fields={fields}\n onUpdate={(updates) => onUpdateRule(group.id, rule.id, updates)}\n onRemove={() => onRemoveRule(group.id, rule.id)}\n showRemove={group.rules.length > 1 || group.groups.length > 0}\n />\n ))}\n </div>\n\n {/* Nested groups */}\n {group.groups.length > 0 && (\n <div className=\"space-y-2 pl-2\">\n {group.groups.map((childGroup) => (\n <FilterGroup\n key={childGroup.id}\n group={childGroup}\n fields={fields}\n depth={depth + 1}\n maxDepth={maxDepth}\n onAddRule={onAddRule}\n onUpdateRule={onUpdateRule}\n onRemoveRule={onRemoveRule}\n onAddGroup={onAddGroup}\n onRemoveGroup={onRemoveGroup}\n onSetGroupLogic={onSetGroupLogic}\n showRemove\n onRemove={() => onRemoveGroup(group.id, childGroup.id)}\n />\n ))}\n </div>\n )}\n\n {/* Action buttons */}\n <div className=\"flex items-center gap-2 pt-1\">\n <Button\n variant=\"ghost\"\n size=\"sm\"\n className=\"h-7 text-xs\"\n onClick={() => onAddRule(group.id)}\n >\n <Plus className=\"mr-1 h-3 w-3\" />\n {t('filter.addRule')}\n </Button>\n {depth < maxDepth && (\n <Button\n variant=\"ghost\"\n size=\"sm\"\n className=\"h-7 text-xs\"\n onClick={() => onAddGroup(group.id, depth)}\n >\n <Plus className=\"mr-1 h-3 w-3\" />\n {t('filter.addGroup')}\n </Button>\n )}\n </div>\n </div>\n )\n}\n","import * as React from 'react'\nimport { Bookmark, Save, Trash2 } from 'lucide-react'\nimport { cn } from '@/utils/cn'\nimport { useLocale } from '@/providers/locale-provider'\nimport { Button } from '@/components/ui/button'\nimport { Input } from '@/components/ui/input'\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuLabel,\n DropdownMenuSeparator,\n DropdownMenuTrigger,\n} from '@/components/ui/dropdown-menu'\nimport { Popover, PopoverContent, PopoverTrigger } from '@/components/ui/popover'\nimport type { FilterPreset } from './filter-types'\n\nexport interface FilterPresetsProps {\n presets: FilterPreset[]\n onLoad: (presetId: string) => void\n onSave: (name: string) => void\n onDelete: (presetId: string) => void\n className?: string\n}\n\nexport function FilterPresets({\n presets,\n onLoad,\n onSave,\n onDelete,\n className,\n}: FilterPresetsProps) {\n const { t } = useLocale()\n const [saveOpen, setSaveOpen] = React.useState(false)\n const [presetName, setPresetName] = React.useState('')\n\n const handleSave = () => {\n if (presetName.trim()) {\n onSave(presetName.trim())\n setPresetName('')\n setSaveOpen(false)\n }\n }\n\n return (\n <div className={cn('flex items-center gap-1', className)}>\n {/* Load preset */}\n {presets.length > 0 && (\n <DropdownMenu>\n <DropdownMenuTrigger asChild>\n <Button variant=\"ghost\" size=\"sm\" className=\"h-7 text-xs gap-1\">\n <Bookmark className=\"h-3 w-3\" />\n {t('filter.presets')}\n </Button>\n </DropdownMenuTrigger>\n <DropdownMenuContent align=\"start\">\n <DropdownMenuLabel className=\"text-xs\">{t('filter.savedFilters')}</DropdownMenuLabel>\n <DropdownMenuSeparator />\n {presets.map((preset) => (\n <DropdownMenuItem\n key={preset.id}\n className=\"flex items-center justify-between gap-4\"\n >\n <span\n className=\"flex-1 cursor-pointer\"\n onClick={() => onLoad(preset.id)}\n >\n {preset.name}\n </span>\n <button\n className=\"text-muted-foreground hover:text-destructive\"\n onClick={(e) => {\n e.stopPropagation()\n onDelete(preset.id)\n }}\n >\n <Trash2 className=\"h-3 w-3\" />\n </button>\n </DropdownMenuItem>\n ))}\n </DropdownMenuContent>\n </DropdownMenu>\n )}\n\n {/* Save preset */}\n <Popover open={saveOpen} onOpenChange={setSaveOpen}>\n <PopoverTrigger asChild>\n <Button variant=\"ghost\" size=\"sm\" className=\"h-7 text-xs gap-1\">\n <Save className=\"h-3 w-3\" />\n {t('filter.save')}\n </Button>\n </PopoverTrigger>\n <PopoverContent className=\"w-[240px] p-3\" align=\"start\">\n <div className=\"space-y-2\">\n <p className=\"text-xs font-medium\">{t('filter.savePreset')}</p>\n <Input\n value={presetName}\n onChange={(e) => setPresetName(e.target.value)}\n placeholder={t('filter.presetName')}\n className=\"h-8\"\n onKeyDown={(e) => {\n if (e.key === 'Enter') handleSave()\n }}\n />\n <Button size=\"sm\" className=\"w-full h-7 text-xs\" onClick={handleSave} disabled={!presetName.trim()}>\n {t('filter.save')}\n </Button>\n </div>\n </PopoverContent>\n </Popover>\n </div>\n )\n}\n","import * as React from 'react'\nimport type { FilterGroup, FilterRule, FilterGroupLogic, FilterPreset } from './filter-types'\n\nlet _idCounter = 0\nfunction generateId(): string {\n return `filter_${Date.now()}_${++_idCounter}`\n}\n\nexport function createEmptyRule(fieldId?: string): FilterRule {\n return {\n id: generateId(),\n fieldId: fieldId ?? '',\n operator: 'contains',\n value: '',\n }\n}\n\nexport function createEmptyGroup(logic: FilterGroupLogic = 'and'): FilterGroup {\n return {\n id: generateId(),\n logic,\n rules: [createEmptyRule()],\n groups: [],\n }\n}\n\nexport interface UseFilterBuilderProps {\n /** Controlled value */\n value?: FilterGroup\n /** Default value for uncontrolled mode */\n defaultValue?: FilterGroup\n /** Called when filter changes */\n onChange?: (filter: FilterGroup) => void\n /** Maximum nesting depth for groups (default: 3) */\n maxDepth?: number\n /** Saved filter presets */\n presets?: FilterPreset[]\n /** Called when presets are updated */\n onPresetsChange?: (presets: FilterPreset[]) => void\n}\n\nexport function useFilterBuilder({\n value,\n defaultValue,\n onChange,\n maxDepth = 3,\n presets: controlledPresets,\n onPresetsChange,\n}: UseFilterBuilderProps) {\n const [internalFilter, setInternalFilter] = React.useState<FilterGroup>(\n defaultValue ?? createEmptyGroup()\n )\n const [internalPresets, setInternalPresets] = React.useState<FilterPreset[]>([])\n\n const filter = value ?? internalFilter\n const presets = controlledPresets ?? internalPresets\n\n const setFilter = React.useCallback(\n (updater: FilterGroup | ((prev: FilterGroup) => FilterGroup)) => {\n const newFilter = typeof updater === 'function' ? updater(filter) : updater\n if (!value) {\n setInternalFilter(newFilter)\n }\n onChange?.(newFilter)\n },\n [filter, value, onChange]\n )\n\n const updateGroup = React.useCallback(\n (groupId: string, updater: (group: FilterGroup) => FilterGroup) => {\n const walk = (group: FilterGroup): FilterGroup => {\n if (group.id === groupId) return updater(group)\n return {\n ...group,\n groups: group.groups.map(walk),\n }\n }\n setFilter((prev) => walk(prev))\n },\n [setFilter]\n )\n\n const addRule = React.useCallback(\n (groupId: string) => {\n updateGroup(groupId, (group) => ({\n ...group,\n rules: [...group.rules, createEmptyRule()],\n }))\n },\n [updateGroup]\n )\n\n const updateRule = React.useCallback(\n (groupId: string, ruleId: string, updates: Partial<FilterRule>) => {\n updateGroup(groupId, (group) => ({\n ...group,\n rules: group.rules.map((rule) =>\n rule.id === ruleId ? { ...rule, ...updates } : rule\n ),\n }))\n },\n [updateGroup]\n )\n\n const removeRule = React.useCallback(\n (groupId: string, ruleId: string) => {\n updateGroup(groupId, (group) => ({\n ...group,\n rules: group.rules.filter((rule) => rule.id !== ruleId),\n }))\n },\n [updateGroup]\n )\n\n const addGroup = React.useCallback(\n (parentGroupId: string, depth: number) => {\n if (depth >= maxDepth) return\n updateGroup(parentGroupId, (group) => ({\n ...group,\n groups: [...group.groups, createEmptyGroup(group.logic === 'and' ? 'or' : 'and')],\n }))\n },\n [updateGroup, maxDepth]\n )\n\n const removeGroup = React.useCallback(\n (parentGroupId: string, groupId: string) => {\n updateGroup(parentGroupId, (group) => ({\n ...group,\n groups: group.groups.filter((g) => g.id !== groupId),\n }))\n },\n [updateGroup]\n )\n\n const setGroupLogic = React.useCallback(\n (groupId: string, logic: FilterGroupLogic) => {\n updateGroup(groupId, (group) => ({ ...group, logic }))\n },\n [updateGroup]\n )\n\n const clearAll = React.useCallback(() => {\n setFilter(createEmptyGroup())\n }, [setFilter])\n\n const savePreset = React.useCallback(\n (name: string) => {\n const preset: FilterPreset = {\n id: generateId(),\n name,\n filter: JSON.parse(JSON.stringify(filter)),\n }\n const updated = [...presets, preset]\n if (!controlledPresets) {\n setInternalPresets(updated)\n }\n onPresetsChange?.(updated)\n return preset\n },\n [filter, presets, controlledPresets, onPresetsChange]\n )\n\n const loadPreset = React.useCallback(\n (presetId: string) => {\n const preset = presets.find((p) => p.id === presetId)\n if (preset) {\n setFilter(JSON.parse(JSON.stringify(preset.filter)))\n }\n },\n [presets, setFilter]\n )\n\n const deletePreset = React.useCallback(\n (presetId: string) => {\n const updated = presets.filter((p) => p.id !== presetId)\n if (!controlledPresets) {\n setInternalPresets(updated)\n }\n onPresetsChange?.(updated)\n },\n [presets, controlledPresets, onPresetsChange]\n )\n\n const ruleCount = React.useMemo(() => {\n const countRules = (group: FilterGroup): number =>\n group.rules.filter((r) => r.fieldId).length +\n group.groups.reduce((sum, g) => sum + countRules(g), 0)\n return countRules(filter)\n }, [filter])\n\n return {\n filter,\n setFilter,\n addRule,\n updateRule,\n removeRule,\n addGroup,\n removeGroup,\n setGroupLogic,\n clearAll,\n presets,\n savePreset,\n loadPreset,\n deletePreset,\n ruleCount,\n maxDepth,\n }\n}\n","import { Filter, RotateCcw, ChevronDown, ChevronUp } from 'lucide-react'\nimport { cn } from '@/utils/cn'\nimport { useLocale } from '@/providers/locale-provider'\nimport { useControllableState } from '@/hooks/use-controllable-state'\nimport { Button } from '@/components/ui/button'\nimport { Badge } from '@/components/ui/badge'\nimport type {\n FilterFieldDefinition,\n FilterGroup as FilterGroupType,\n FilterPreset,\n} from './filter-types'\nimport { FilterGroup } from './filter-group'\nimport { FilterPresets } from './filter-presets'\nimport { useFilterBuilder, type UseFilterBuilderProps } from './use-filter-builder'\n\nexport interface QueryFilterBuilderProps extends UseFilterBuilderProps {\n /** Available fields for filtering */\n fields: FilterFieldDefinition[]\n /** Show in compact mode (collapsible toolbar) */\n compact?: boolean\n expanded?: boolean\n defaultExpanded?: boolean\n onExpandedChange?: (expanded: boolean) => void\n /** Label for the filter button in compact mode */\n label?: string\n className?: string\n}\n\nfunction QueryFilterBuilder({\n fields,\n compact = false,\n expanded: controlledExpanded,\n defaultExpanded,\n onExpandedChange,\n label,\n className,\n ...hookProps\n}: QueryFilterBuilderProps) {\n const { t } = useLocale()\n const resolvedLabel = label ?? t('filter.filters')\n const {\n filter,\n addRule,\n updateRule,\n removeRule,\n addGroup,\n removeGroup,\n setGroupLogic,\n clearAll,\n presets,\n savePreset,\n loadPreset,\n deletePreset,\n ruleCount,\n maxDepth,\n } = useFilterBuilder(hookProps)\n\n const [expanded, setExpanded] = useControllableState({\n value: controlledExpanded,\n defaultValue: defaultExpanded ?? !compact,\n onChange: onExpandedChange,\n })\n\n const filterContent = (\n <div className=\"space-y-3\">\n <div className=\"flex items-center justify-between gap-2\">\n <div className=\"flex items-center gap-2\">\n <Filter className=\"h-4 w-4 text-muted-foreground\" />\n <span className=\"text-sm font-medium\">{t('filter.filterRules')}</span>\n {ruleCount > 0 && (\n <Badge variant=\"secondary\" className=\"text-[10px] px-1.5 py-0\">\n {ruleCount}\n </Badge>\n )}\n </div>\n <div className=\"flex items-center gap-1\">\n <FilterPresets\n presets={presets}\n onLoad={loadPreset}\n onSave={savePreset}\n onDelete={deletePreset}\n />\n {ruleCount > 0 && (\n <Button\n variant=\"ghost\"\n size=\"sm\"\n className=\"h-7 text-xs text-muted-foreground\"\n onClick={clearAll}\n >\n <RotateCcw className=\"mr-1 h-3 w-3\" />\n {t('filter.clear')}\n </Button>\n )}\n </div>\n </div>\n <FilterGroup\n group={filter}\n fields={fields}\n depth={0}\n maxDepth={maxDepth}\n onAddRule={addRule}\n onUpdateRule={updateRule}\n onRemoveRule={removeRule}\n onAddGroup={addGroup}\n onRemoveGroup={removeGroup}\n onSetGroupLogic={setGroupLogic}\n />\n </div>\n )\n\n if (compact) {\n return (\n <div className={cn('rounded-lg border bg-background', className)}>\n <button\n type=\"button\"\n className=\"flex w-full items-center justify-between px-3 py-2 text-sm hover:bg-muted/50 transition-colors\"\n onClick={() => setExpanded(!expanded)}\n >\n <div className=\"flex items-center gap-2\">\n <Filter className=\"h-4 w-4 text-muted-foreground\" />\n <span className=\"font-medium\">{resolvedLabel}</span>\n {ruleCount > 0 && (\n <Badge variant=\"secondary\" className=\"text-[10px] px-1.5 py-0\">\n {ruleCount} {t('filter.active')}\n </Badge>\n )}\n </div>\n {expanded ? (\n <ChevronUp className=\"h-4 w-4 text-muted-foreground\" />\n ) : (\n <ChevronDown className=\"h-4 w-4 text-muted-foreground\" />\n )}\n </button>\n {expanded && <div className=\"border-t px-3 py-3\">{filterContent}</div>}\n </div>\n )\n }\n\n return <div className={cn('space-y-3', className)}>{filterContent}</div>\n}\n\nQueryFilterBuilder.displayName = 'QueryFilterBuilder'\n\nexport { QueryFilterBuilder }\nexport type { FilterFieldDefinition, FilterGroupType as FilterGroup, FilterPreset }\n","export type ForecastCategory = 'closed' | 'commit' | 'bestCase' | 'pipeline'\n\nexport interface ForecastBucketData {\n category: ForecastCategory\n label: string\n value: number\n dealCount: number\n target?: number\n trend?: number[]\n previousValue?: number\n}\n\nexport interface ForecastOwner {\n id: string\n name: string\n avatar?: string\n}\n\nexport interface ForecastBoardProps {\n /** Forecast buckets to display */\n buckets: ForecastBucketData[]\n /** Total pipeline target */\n target?: number\n /** Currency formatting */\n currency?: string\n locale?: string\n /** Period label (e.g. \"Q1 2025\", \"January 2025\") */\n periodLabel?: string\n /** Owner data for filter */\n owners?: ForecastOwner[]\n /** Currently selected owner ID */\n selectedOwnerId?: string\n /** Called when owner filter changes */\n onOwnerChange?: (ownerId: string | undefined) => void\n /** Called when bucket is clicked */\n onBucketClick?: (category: ForecastCategory) => void\n /** Loading state */\n loading?: boolean\n className?: string\n}\n\nexport const FORECAST_CATEGORY_CONFIG: Record<\n ForecastCategory,\n { label: string; color: string; bgColor: string; borderColor: string }\n> = {\n closed: {\n label: 'Closed Won',\n color: 'text-emerald-700',\n bgColor: 'bg-emerald-50',\n borderColor: 'border-emerald-200',\n },\n commit: {\n label: 'Commit',\n color: 'text-blue-700',\n bgColor: 'bg-blue-50',\n borderColor: 'border-blue-200',\n },\n bestCase: {\n label: 'Best Case',\n color: 'text-amber-700',\n bgColor: 'bg-amber-50',\n borderColor: 'border-amber-200',\n },\n pipeline: {\n label: 'Pipeline',\n color: 'text-muted-foreground',\n bgColor: 'bg-muted',\n borderColor: 'border-border',\n },\n}\n","import { TrendingUp, TrendingDown } from 'lucide-react'\nimport { cn } from '@/utils/cn'\nimport { useLocale } from '@/providers/locale-provider'\nimport { SparklineChart } from '@/components/charts/sparkline-chart'\nimport type { ForecastBucketData } from './forecast-types'\nimport { FORECAST_CATEGORY_CONFIG } from './forecast-types'\n\nexport interface ForecastBucketProps {\n bucket: ForecastBucketData\n currency?: string\n locale?: string\n onClick?: () => void\n className?: string\n}\n\nfunction formatCurrency(value: number, currency = 'USD', locale = 'en-US'): string {\n return new Intl.NumberFormat(locale, {\n style: 'currency',\n currency,\n notation: value >= 1_000_000 ? 'compact' : 'standard',\n maximumFractionDigits: value >= 1_000_000 ? 1 : 0,\n }).format(value)\n}\n\nfunction getDelta(current: number, previous: number): { value: number; direction: 'up' | 'down' | 'neutral' } {\n if (previous === 0) return { value: 0, direction: 'neutral' }\n const pct = ((current - previous) / previous) * 100\n return {\n value: Math.abs(Math.round(pct)),\n direction: pct > 0 ? 'up' : pct < 0 ? 'down' : 'neutral',\n }\n}\n\nexport function ForecastBucket({ bucket, currency, locale, onClick, className }: ForecastBucketProps) {\n const config = FORECAST_CATEGORY_CONFIG[bucket.category]\n const { t } = useLocale()\n const delta = bucket.previousValue != null ? getDelta(bucket.value, bucket.previousValue) : undefined\n const targetPct = bucket.target && bucket.target > 0 ? Math.round((bucket.value / bucket.target) * 100) : undefined\n\n return (\n <button\n type=\"button\"\n onClick={onClick}\n disabled={!onClick}\n className={cn(\n 'flex flex-col rounded-lg border p-4 text-left transition-all duration-200',\n config.bgColor,\n config.borderColor,\n onClick && 'cursor-pointer hover:shadow-md active:scale-[0.99]',\n !onClick && 'cursor-default',\n className\n )}\n >\n {/* Header */}\n <div className=\"flex items-center justify-between gap-2\">\n <span className={cn('text-xs font-semibold uppercase tracking-wider', config.color)}>\n {bucket.label || config.label}\n </span>\n <span className=\"text-[10px] text-muted-foreground\">\n {t('forecast.deals', { count: bucket.dealCount })}\n </span>\n </div>\n\n {/* Value */}\n <div className=\"mt-2 text-2xl font-bold tracking-tight\">\n {formatCurrency(bucket.value, currency, locale)}\n </div>\n\n {/* Delta + Target */}\n <div className=\"mt-1.5 flex items-center gap-3\">\n {delta && delta.direction !== 'neutral' && (\n <span\n className={cn(\n 'flex items-center gap-0.5 text-xs font-medium',\n delta.direction === 'up' ? 'text-emerald-600' : 'text-red-600'\n )}\n >\n {delta.direction === 'up' ? (\n <TrendingUp className=\"h-3 w-3\" />\n ) : (\n <TrendingDown className=\"h-3 w-3\" />\n )}\n {delta.value}%\n </span>\n )}\n {targetPct != null && (\n <span className=\"text-[10px] text-muted-foreground\">\n {targetPct}{t('forecast.ofTarget')}\n </span>\n )}\n </div>\n\n {/* Sparkline */}\n {bucket.trend && bucket.trend.length > 1 && (\n <div className=\"mt-3\">\n <SparklineChart\n data={bucket.trend}\n height={32}\n width=\"100%\"\n color={\n bucket.category === 'closed'\n ? 'hsl(var(--chart-2))'\n : bucket.category === 'commit'\n ? 'hsl(var(--chart-1))'\n : bucket.category === 'bestCase'\n ? 'hsl(var(--chart-3))'\n : 'hsl(var(--chart-4))'\n }\n />\n </div>\n )}\n </button>\n )\n}\n","import { Target } from 'lucide-react'\nimport { cn } from '@/utils/cn'\nimport { useLocale } from '@/providers/locale-provider'\nimport { Progress } from '@/components/ui/progress'\nimport type { ForecastBucketData } from './forecast-types'\n\nexport interface ForecastSummaryProps {\n buckets: ForecastBucketData[]\n target?: number\n currency?: string\n locale?: string\n periodLabel?: string\n className?: string\n}\n\nfunction formatCurrency(value: number, currency = 'USD', locale = 'en-US'): string {\n return new Intl.NumberFormat(locale, {\n style: 'currency',\n currency,\n notation: value >= 1_000_000 ? 'compact' : 'standard',\n maximumFractionDigits: value >= 1_000_000 ? 1 : 0,\n }).format(value)\n}\n\nexport function ForecastSummary({ buckets, target, currency, locale, periodLabel, className }: ForecastSummaryProps) {\n const { t } = useLocale()\n const totalValue = buckets.reduce((sum, b) => sum + b.value, 0)\n const totalDeals = buckets.reduce((sum, b) => sum + b.dealCount, 0)\n const closedValue = buckets.find((b) => b.category === 'closed')?.value ?? 0\n const pipelineValue = totalValue - closedValue\n const targetPct = target && target > 0 ? Math.min(Math.round((totalValue / target) * 100), 100) : undefined\n const closedPct = target && target > 0 ? Math.min(Math.round((closedValue / target) * 100), 100) : undefined\n\n return (\n <div className={cn('rounded-lg border bg-card p-4', className)}>\n <div className=\"flex items-center justify-between gap-4\">\n <div className=\"min-w-0 flex-1\">\n <div className=\"flex items-center gap-2\">\n {periodLabel && (\n <span className=\"text-sm font-semibold\">{periodLabel}</span>\n )}\n <span className=\"text-xs text-muted-foreground\">\n {t('forecast.totalDeals', { count: totalDeals })}\n </span>\n </div>\n\n {target != null && (\n <div className=\"mt-2 space-y-1\">\n <div className=\"flex items-center justify-between text-xs\">\n <span className=\"text-muted-foreground\">\n {t('forecast.total')} {formatCurrency(totalValue, currency, locale)}\n </span>\n <span className=\"flex items-center gap-1 font-medium\">\n <Target className=\"h-3 w-3\" />\n {formatCurrency(target, currency, locale)}\n </span>\n </div>\n <Progress value={targetPct ?? 0} className=\"h-2\" />\n <div className=\"flex items-center justify-between text-[10px] text-muted-foreground\">\n <span>{t('forecast.closed')} {formatCurrency(closedValue, currency, locale)} ({closedPct ?? 0}%)</span>\n <span>{t('forecast.openPipeline')} {formatCurrency(pipelineValue, currency, locale)}</span>\n </div>\n </div>\n )}\n\n {target == null && (\n <div className=\"mt-1 text-lg font-bold\">\n {formatCurrency(totalValue, currency, locale)}\n </div>\n )}\n </div>\n </div>\n </div>\n )\n}\n","import { cn } from '@/utils/cn'\nimport { useLocale } from '@/providers/locale-provider'\nimport { Avatar, AvatarFallback, AvatarImage } from '@/components/ui/avatar'\nimport {\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from '@/components/ui/select'\nimport { Skeleton } from '@/components/ui/skeleton'\nimport { ForecastBucket } from './forecast-bucket'\nimport { ForecastSummary } from './forecast-summary'\nimport type { ForecastBoardProps } from './forecast-types'\n\nfunction ForecastSkeleton() {\n return (\n <div className=\"space-y-4\">\n <div className=\"flex items-center justify-between\">\n <Skeleton className=\"h-5 w-32\" />\n <Skeleton className=\"h-8 w-40\" />\n </div>\n <div className=\"grid grid-cols-2 gap-3 lg:grid-cols-4\">\n {Array.from({ length: 4 }).map((_, i) => (\n <div key={i} className=\"space-y-3 rounded-lg border p-4\">\n <Skeleton className=\"h-3 w-20\" />\n <Skeleton className=\"h-7 w-28\" />\n <Skeleton className=\"h-3 w-16\" />\n <Skeleton className=\"h-8 w-full\" />\n </div>\n ))}\n </div>\n <Skeleton className=\"h-20 w-full rounded-lg\" />\n </div>\n )\n}\n\nfunction getInitials(name: string): string {\n return name\n .split(' ')\n .map((n) => n[0])\n .join('')\n .toUpperCase()\n .slice(0, 2)\n}\n\n/**\n * ForecastBoard - Pipeline forecast visualization with bucket cards and trend indicators.\n *\n * Displays forecast categories (Closed Won, Commit, Best Case, Pipeline) with\n * sparkline trends, delta indicators, and target progress.\n *\n * @example\n * ```tsx\n * <ForecastBoard\n * buckets={[\n * { category: 'closed', label: 'Closed Won', value: 120000, dealCount: 8, trend: [80, 95, 110, 120] },\n * { category: 'commit', label: 'Commit', value: 85000, dealCount: 12, trend: [40, 60, 75, 85] },\n * { category: 'bestCase', label: 'Best Case', value: 45000, dealCount: 6 },\n * { category: 'pipeline', label: 'Pipeline', value: 200000, dealCount: 30 },\n * ]}\n * target={500000}\n * currency=\"USD\"\n * periodLabel=\"Q1 2025\"\n * />\n * ```\n */\nfunction ForecastBoard({\n buckets,\n target,\n currency,\n locale,\n periodLabel,\n owners,\n selectedOwnerId,\n onOwnerChange,\n onBucketClick,\n loading,\n className,\n}: ForecastBoardProps) {\n const { t } = useLocale()\n\n if (loading) {\n return <ForecastSkeleton />\n }\n\n return (\n <div className={cn('space-y-4', className)}>\n {/* Header */}\n {(periodLabel || (owners && owners.length > 0)) && (\n <div className=\"flex items-center justify-between gap-3\">\n {periodLabel && <h3 className=\"text-sm font-semibold\">{periodLabel} {t('forecast.forecast')}</h3>}\n {owners && owners.length > 0 && onOwnerChange && (\n <Select\n value={selectedOwnerId ?? 'all'}\n onValueChange={(v) => onOwnerChange(v === 'all' ? undefined : v)}\n >\n <SelectTrigger className=\"h-8 w-[200px] text-xs\">\n <SelectValue placeholder={t('forecast.allOwners')} />\n </SelectTrigger>\n <SelectContent>\n <SelectItem value=\"all\">{t('forecast.allOwners')}</SelectItem>\n {owners.map((owner) => (\n <SelectItem key={owner.id} value={owner.id}>\n <div className=\"flex items-center gap-2\">\n <Avatar className=\"h-4 w-4\">\n <AvatarImage src={owner.avatar} alt={owner.name} />\n <AvatarFallback className=\"text-[7px]\">{getInitials(owner.name)}</AvatarFallback>\n </Avatar>\n {owner.name}\n </div>\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n )}\n </div>\n )}\n\n {/* Bucket grid */}\n <div className=\"grid grid-cols-2 gap-3 lg:grid-cols-4\">\n {buckets.map((bucket) => (\n <ForecastBucket\n key={bucket.category}\n bucket={bucket}\n currency={currency}\n locale={locale}\n onClick={onBucketClick ? () => onBucketClick(bucket.category) : undefined}\n />\n ))}\n </div>\n\n {/* Summary */}\n <ForecastSummary\n buckets={buckets}\n target={target}\n currency={currency}\n locale={locale}\n periodLabel={periodLabel}\n />\n </div>\n )\n}\n\nForecastBoard.displayName = 'ForecastBoard'\n\nexport { ForecastBoard }\n","import { ArrowRight, X } from 'lucide-react'\nimport { cn } from '@/utils/cn'\nimport { useLocale } from '@/providers/locale-provider'\nimport {\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from '@/components/ui/select'\nimport { Badge } from '@/components/ui/badge'\nimport { Button } from '@/components/ui/button'\nimport type { ImportMapperProps } from './bulk-data-types'\n\nexport function ImportMapper({\n sourceColumns,\n targetFields,\n mappings,\n onMappingsChange,\n previewData,\n className,\n}: ImportMapperProps) {\n const handleMappingChange = (sourceColumn: string, targetField: string | null) => {\n const updated = mappings.map((m) =>\n m.sourceColumn === sourceColumn ? { ...m, targetField } : m\n )\n // If this source column isn't in mappings yet, add it\n if (!mappings.find((m) => m.sourceColumn === sourceColumn)) {\n updated.push({\n sourceColumn,\n targetField,\n preview: previewData?.slice(0, 3).map((row) => String(row[sourceColumn] ?? '')),\n })\n }\n onMappingsChange(updated)\n }\n\n const getMappedTarget = (sourceColumn: string): string | null => {\n return mappings.find((m) => m.sourceColumn === sourceColumn)?.targetField ?? null\n }\n\n const usedTargets = new Set(mappings.map((m) => m.targetField).filter(Boolean))\n const { t } = useLocale()\n\n const mappedCount = mappings.filter((m) => m.targetField).length\n const requiredFields = targetFields.filter((f) => f.required)\n const unmappedRequired = requiredFields.filter(\n (f) => !mappings.some((m) => m.targetField === f.id)\n )\n\n return (\n <div className={cn('space-y-4', className)}>\n {/* Summary */}\n <div className=\"flex items-center gap-3 text-sm\">\n <Badge variant=\"secondary\">\n {t('bulkOps.mapped', { mapped: mappedCount, total: sourceColumns.length })}\n </Badge>\n {unmappedRequired.length > 0 && (\n <Badge variant=\"destructive\">\n {t('bulkOps.requiredUnmapped', { count: unmappedRequired.length })}\n </Badge>\n )}\n </div>\n\n {/* Mapping rows */}\n <div className=\"space-y-2\">\n <div className=\"grid grid-cols-[1fr_32px_1fr] gap-2 text-[10px] font-semibold uppercase tracking-wider text-muted-foreground px-1\">\n <span>{t('bulkOps.sourceColumn')}</span>\n <span />\n <span>{t('bulkOps.targetField')}</span>\n </div>\n\n {sourceColumns.map((col) => {\n const targetField = getMappedTarget(col)\n const preview = previewData?.slice(0, 2).map((row) => String(row[col] ?? ''))\n\n return (\n <div\n key={col}\n className=\"grid grid-cols-[1fr_32px_1fr] items-center gap-2 rounded-lg border bg-card p-2.5\"\n >\n {/* Source */}\n <div>\n <p className=\"text-sm font-medium\">{col}</p>\n {preview && preview.length > 0 && (\n <p className=\"mt-0.5 truncate text-[10px] text-muted-foreground\">\n {preview.join(', ')}\n </p>\n )}\n </div>\n\n {/* Arrow */}\n <div className=\"flex justify-center\">\n <ArrowRight className=\"h-4 w-4 text-muted-foreground/50\" />\n </div>\n\n {/* Target */}\n <div className=\"flex items-center gap-1.5\">\n <Select\n value={targetField ?? '__none__'}\n onValueChange={(v) => handleMappingChange(col, v === '__none__' ? null : v)}\n >\n <SelectTrigger className=\"h-8 text-xs\">\n <SelectValue placeholder={t('bulkOps.skipColumn')} />\n </SelectTrigger>\n <SelectContent>\n <SelectItem value=\"__none__\">\n <span className=\"text-muted-foreground\">{t('bulkOps.skip')}</span>\n </SelectItem>\n {targetFields.map((field) => (\n <SelectItem\n key={field.id}\n value={field.id}\n disabled={usedTargets.has(field.id) && targetField !== field.id}\n >\n {field.label}\n {field.required && <span className=\"ml-1 text-destructive\">*</span>}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n {targetField && (\n <Button\n variant=\"ghost\"\n size=\"icon\"\n className=\"h-6 w-6 shrink-0\"\n onClick={() => handleMappingChange(col, null)}\n >\n <X className=\"h-3 w-3\" />\n </Button>\n )}\n </div>\n </div>\n )\n })}\n </div>\n </div>\n )\n}\n","import { AlertCircle, AlertTriangle, Info, SkipForward } from 'lucide-react'\nimport { cn } from '@/utils/cn'\nimport { useLocale } from '@/providers/locale-provider'\nimport { Badge } from '@/components/ui/badge'\nimport { Button } from '@/components/ui/button'\nimport { Switch } from '@/components/ui/switch'\nimport { Label } from '@/components/ui/label'\nimport { ScrollArea } from '@/components/ui/scroll-area'\nimport {\n Tooltip,\n TooltipContent,\n TooltipProvider,\n TooltipTrigger,\n} from '@/components/ui/tooltip'\nimport type { ValidationTableProps, ValidationSeverity } from './bulk-data-types'\n\nconst SEVERITY_CONFIG: Record<ValidationSeverity, { icon: React.ReactNode; color: string }> = {\n error: { icon: <AlertCircle className=\"h-3 w-3\" />, color: 'text-destructive' },\n warning: { icon: <AlertTriangle className=\"h-3 w-3\" />, color: 'text-amber-600' },\n info: { icon: <Info className=\"h-3 w-3\" />, color: 'text-blue-600' },\n}\n\nexport function ValidationTable({\n rows,\n fields,\n mappings,\n onFixValue,\n onToggleSkip,\n showOnlyIssues,\n onShowOnlyIssuesChange,\n className,\n}: ValidationTableProps) {\n const mappedFields = mappings\n .filter((m) => m.targetField)\n .map((m) => {\n const field = fields.find((f) => f.id === m.targetField)\n return { sourceColumn: m.sourceColumn, field: field! }\n })\n .filter((m) => m.field)\n const { t } = useLocale()\n\n const displayRows = showOnlyIssues ? rows.filter((r) => r._issues.length > 0) : rows\n\n return (\n <div className={cn('space-y-3', className)}>\n {/* Filter */}\n <div className=\"flex items-center justify-between\">\n <div className=\"flex items-center gap-3 text-sm\">\n <Badge variant=\"secondary\">{t('bulkOps.rows', { count: rows.length })}</Badge>\n <Badge variant=\"outline\" className=\"text-destructive border-destructive/30\">\n {t('bulkOps.errors', { count: rows.filter((r) => r._status === 'error').length })}\n </Badge>\n <Badge variant=\"outline\" className=\"text-amber-600 border-amber-300\">\n {t('bulkOps.warnings', { count: rows.filter((r) => r._status === 'warning').length })}\n </Badge>\n </div>\n {onShowOnlyIssuesChange && (\n <div className=\"flex items-center gap-2\">\n <Switch\n checked={showOnlyIssues}\n onCheckedChange={onShowOnlyIssuesChange}\n id=\"show-issues\"\n />\n <Label htmlFor=\"show-issues\" className=\"text-xs\">\n {t('bulkOps.showOnlyIssues')}\n </Label>\n </div>\n )}\n </div>\n\n {/* Table */}\n <ScrollArea className=\"rounded-lg border\">\n <TooltipProvider>\n <table className=\"w-full text-sm\">\n <thead className=\"sticky top-0 z-10 bg-muted/50\">\n <tr>\n <th className=\"px-3 py-2 text-left text-[10px] font-semibold uppercase tracking-wider text-muted-foreground w-12\">\n #\n </th>\n <th className=\"px-3 py-2 text-left text-[10px] font-semibold uppercase tracking-wider text-muted-foreground w-16\">\n {t('bulkOps.status')}\n </th>\n {mappedFields.map(({ field }) => (\n <th\n key={field.id}\n className=\"px-3 py-2 text-left text-[10px] font-semibold uppercase tracking-wider text-muted-foreground\"\n >\n {field.label}\n {field.required && <span className=\"ml-0.5 text-destructive\">*</span>}\n </th>\n ))}\n {onToggleSkip && (\n <th className=\"px-3 py-2 text-center text-[10px] font-semibold uppercase tracking-wider text-muted-foreground w-16\">\n {t('bulkOps.skip')}\n </th>\n )}\n </tr>\n </thead>\n <tbody>\n {displayRows.map((row) => {\n const issueMap = new Map(row._issues.map((issue) => [issue.column, issue]))\n return (\n <tr\n key={row._rowIndex}\n className={cn(\n 'border-t transition-colors',\n row._status === 'skipped' && 'opacity-40',\n row._status === 'error' && 'bg-destructive/5',\n row._status === 'warning' && 'bg-amber-50/50'\n )}\n >\n <td className=\"px-3 py-1.5 text-xs text-muted-foreground\">{row._rowIndex + 1}</td>\n <td className=\"px-3 py-1.5\">\n {row._status === 'valid' && (\n <Badge variant=\"secondary\" className=\"text-[9px] px-1.5 py-0\">{t('bulkOps.ok')}</Badge>\n )}\n {row._status === 'error' && (\n <Badge variant=\"destructive\" className=\"text-[9px] px-1.5 py-0\">{t('bulkOps.error')}</Badge>\n )}\n {row._status === 'warning' && (\n <Badge variant=\"outline\" className=\"text-[9px] px-1.5 py-0 text-amber-600 border-amber-300\">{t('bulkOps.warn')}</Badge>\n )}\n {row._status === 'skipped' && (\n <Badge variant=\"outline\" className=\"text-[9px] px-1.5 py-0\">{t('bulkOps.skip')}</Badge>\n )}\n </td>\n {mappedFields.map(({ field }) => {\n const issue = issueMap.get(field.id)\n const value = row[field.id]\n return (\n <td key={field.id} className=\"px-3 py-1.5\">\n <div className=\"flex items-center gap-1\">\n <span\n className={cn(\n 'truncate text-xs',\n issue?.severity === 'error' && 'text-destructive font-medium',\n issue?.severity === 'warning' && 'text-amber-600'\n )}\n >\n {value != null ? String(value) : <span className=\"text-muted-foreground\">—</span>}\n </span>\n {issue && (\n <Tooltip>\n <TooltipTrigger asChild>\n <span className={cn('shrink-0', SEVERITY_CONFIG[issue.severity].color)}>\n {SEVERITY_CONFIG[issue.severity].icon}\n </span>\n </TooltipTrigger>\n <TooltipContent side=\"top\" className=\"max-w-[200px]\">\n <p className=\"text-xs\">{issue.message}</p>\n {issue.suggestedValue != null && onFixValue && (\n <Button\n size=\"sm\"\n variant=\"outline\"\n className=\"mt-1 h-5 text-[10px]\"\n onClick={() => onFixValue(row._rowIndex, field.id, issue.suggestedValue)}\n >\n {t('bulkOps.fix', { value: String(issue.suggestedValue) })}\n </Button>\n )}\n </TooltipContent>\n </Tooltip>\n )}\n </div>\n </td>\n )\n })}\n {onToggleSkip && (\n <td className=\"px-3 py-1.5 text-center\">\n <Button\n variant=\"ghost\"\n size=\"icon\"\n className={cn('h-6 w-6', row._status === 'skipped' && 'text-muted-foreground')}\n onClick={() => onToggleSkip(row._rowIndex)}\n >\n <SkipForward className=\"h-3 w-3\" />\n </Button>\n </td>\n )}\n </tr>\n )\n })}\n </tbody>\n </table>\n </TooltipProvider>\n </ScrollArea>\n </div>\n )\n}\n","import { useRef } from 'react'\nimport { Upload, FileSpreadsheet, ArrowLeft, ArrowRight, Check, AlertCircle } from 'lucide-react'\nimport { cn } from '@/utils/cn'\nimport { useLocale } from '@/providers/locale-provider'\nimport { useControllableState } from '@/hooks/use-controllable-state'\nimport { Button } from '@/components/ui/button'\nimport { Progress } from '@/components/ui/progress'\nimport { ImportMapper } from './import-mapper'\nimport { ValidationTable } from './validation-table'\nimport type { BulkDataOpsProps, BulkDataOpsStep } from './bulk-data-types'\n\nconst STEPS: BulkDataOpsStep[] = ['upload', 'map', 'validate', 'confirm']\n\n/**\n * BulkDataOps - Multi-step import wizard with field mapping, validation, and conflict resolution.\n *\n * @example\n * ```tsx\n * <BulkDataOps\n * step=\"map\"\n * sourceColumns={['Name', 'Email', 'Phone']}\n * targetFields={[\n * { id: 'name', label: 'Full Name', type: 'text', required: true },\n * { id: 'email', label: 'Email', type: 'email', required: true },\n * { id: 'phone', label: 'Phone', type: 'phone' },\n * ]}\n * mappings={mappings}\n * onMappingsChange={setMappings}\n * onNext={handleNext}\n * onBack={handleBack}\n * />\n * ```\n */\nfunction BulkDataOps({\n step,\n sourceColumns = [],\n targetFields,\n mappings = [],\n onMappingsChange,\n previewData,\n validatedRows = [],\n onFixValue,\n onToggleSkip,\n onNext,\n onBack,\n onFileUpload,\n onConfirm,\n progress,\n summary,\n stepLabels,\n summaryLabels,\n renderConfirmSummary,\n showOnlyIssues: controlledShowOnlyIssues,\n defaultShowOnlyIssues = false,\n onShowOnlyIssuesChange,\n className,\n}: BulkDataOpsProps) {\n const fileInputRef = useRef<HTMLInputElement>(null)\n const [showOnlyIssues, setShowOnlyIssues] = useControllableState({\n value: controlledShowOnlyIssues,\n defaultValue: defaultShowOnlyIssues,\n onChange: onShowOnlyIssuesChange,\n })\n const { t } = useLocale()\n\n const resolvedStepLabels: Record<BulkDataOpsStep, string> = {\n upload: stepLabels?.upload ?? t('bulkOps.upload'),\n map: stepLabels?.map ?? t('bulkOps.mapFields'),\n validate: stepLabels?.validate ?? t('bulkOps.validate'),\n confirm: stepLabels?.confirm ?? t('bulkOps.import'),\n }\n const resolvedSummaryLabels = {\n valid: summaryLabels?.valid ?? 'valid',\n warnings: summaryLabels?.warnings ?? 'warnings',\n skipped: summaryLabels?.skipped ?? 'skipped',\n }\n\n const stepIndex = STEPS.findIndex((s) => s === step)\n\n const handleFileDrop = (e: React.DragEvent) => {\n e.preventDefault()\n const file = e.dataTransfer.files[0]\n if (file) onFileUpload?.(file)\n }\n\n const handleFileSelect = (e: React.ChangeEvent<HTMLInputElement>) => {\n const file = e.target.files?.[0]\n if (file) onFileUpload?.(file)\n }\n\n return (\n <div className={cn('space-y-6', className)}>\n {/* Step indicator */}\n <div className=\"flex items-center gap-2\">\n {STEPS.map((stepId, i) => (\n <div key={stepId} className=\"flex items-center gap-2\">\n {i > 0 && <div className=\"h-px w-8 bg-border\" />}\n <div\n className={cn(\n 'flex items-center gap-1.5 rounded-full px-3 py-1 text-xs font-medium transition-colors',\n i === stepIndex && 'bg-primary text-primary-foreground',\n i < stepIndex && 'bg-primary/10 text-primary',\n i > stepIndex && 'bg-muted text-muted-foreground'\n )}\n >\n <span className=\"flex h-4 w-4 items-center justify-center rounded-full text-[10px]\">\n {i < stepIndex ? <Check className=\"h-3 w-3\" /> : i + 1}\n </span>\n {resolvedStepLabels[stepId]}\n </div>\n </div>\n ))}\n </div>\n\n {/* Step content */}\n <div className=\"min-h-[300px]\">\n {/* Upload */}\n {step === 'upload' && (\n <div\n onDragOver={(e) => e.preventDefault()}\n onDrop={handleFileDrop}\n className=\"flex min-h-[300px] flex-col items-center justify-center rounded-lg border-2 border-dashed bg-muted/30 p-8 text-center transition-colors hover:border-primary/30 hover:bg-muted/50\"\n >\n <Upload className=\"mb-3 h-10 w-10 text-muted-foreground/50\" />\n <p className=\"text-sm font-medium\">{t('bulkOps.dropFile')}</p>\n <p className=\"mt-1 text-xs text-muted-foreground\">{t('bulkOps.supportedFormats')}</p>\n <input\n ref={fileInputRef}\n type=\"file\"\n accept=\".csv,.xlsx,.xls,.json\"\n className=\"hidden\"\n onChange={handleFileSelect}\n />\n <Button\n variant=\"outline\"\n size=\"sm\"\n className=\"mt-4\"\n onClick={() => fileInputRef.current?.click()}\n >\n <FileSpreadsheet className=\"mr-1.5 h-3.5 w-3.5\" />\n {t('bulkOps.browseFiles')}\n </Button>\n </div>\n )}\n\n {/* Map */}\n {step === 'map' && onMappingsChange && (\n <ImportMapper\n sourceColumns={sourceColumns}\n targetFields={targetFields}\n mappings={mappings}\n onMappingsChange={onMappingsChange}\n previewData={previewData}\n />\n )}\n\n {/* Validate */}\n {step === 'validate' && (\n <ValidationTable\n rows={validatedRows}\n fields={targetFields}\n mappings={mappings}\n onFixValue={onFixValue}\n onToggleSkip={onToggleSkip}\n showOnlyIssues={showOnlyIssues}\n onShowOnlyIssuesChange={setShowOnlyIssues}\n />\n )}\n\n {/* Confirm */}\n {step === 'confirm' && (\n <div className=\"flex flex-col items-center justify-center py-12 text-center\">\n {progress != null && progress < 100 ? (\n <>\n <p className=\"text-sm font-medium\">{t('bulkOps.importing')}</p>\n <Progress value={progress} className=\"mt-4 h-2 w-[300px]\" />\n <p className=\"mt-2 text-xs text-muted-foreground\">{progress}{t('bulkOps.complete')}</p>\n </>\n ) : progress === 100 ? (\n <>\n <Check className=\"mb-3 h-10 w-10 text-emerald-600\" />\n <p className=\"text-sm font-medium\">{t('bulkOps.importComplete')}</p>\n </>\n ) : summary ? (\n renderConfirmSummary ? (\n renderConfirmSummary(summary)\n ) : (\n <>\n <FileSpreadsheet className=\"mb-3 h-10 w-10 text-muted-foreground/50\" />\n <p className=\"text-sm font-medium\">{t('bulkOps.readyToImport')}</p>\n <div className=\"mt-4 flex items-center gap-4 text-sm\">\n <span className=\"text-emerald-600 font-medium\">\n {summary.valid} {resolvedSummaryLabels.valid}\n </span>\n {summary.warnings > 0 && (\n <span className=\"text-amber-600\">\n {summary.warnings} {resolvedSummaryLabels.warnings}\n </span>\n )}\n {summary.errors > 0 && (\n <span className=\"flex items-center gap-1 text-destructive\">\n <AlertCircle className=\"h-3 w-3\" />\n {summary.errors} {t('bulkOps.errorsSkipped')}\n </span>\n )}\n {summary.skipped > 0 && (\n <span className=\"text-muted-foreground\">\n {summary.skipped} {resolvedSummaryLabels.skipped}\n </span>\n )}\n </div>\n </>\n )\n ) : null}\n </div>\n )}\n </div>\n\n {/* Navigation */}\n <div className=\"flex items-center justify-between border-t pt-4\">\n <Button\n variant=\"outline\"\n size=\"sm\"\n onClick={onBack}\n disabled={stepIndex === 0}\n >\n <ArrowLeft className=\"mr-1.5 h-3.5 w-3.5\" />\n {t('bulkOps.back')}\n </Button>\n {step === 'confirm' ? (\n <Button\n size=\"sm\"\n onClick={onConfirm}\n disabled={progress != null && progress < 100}\n >\n {progress === 100 ? t('bulkOps.done') : t('bulkOps.startImport')}\n </Button>\n ) : (\n <Button size=\"sm\" onClick={onNext}>\n {t('bulkOps.next')}\n <ArrowRight className=\"ml-1.5 h-3.5 w-3.5\" />\n </Button>\n )}\n </div>\n </div>\n )\n}\n\nBulkDataOps.displayName = 'BulkDataOps'\n\nexport { BulkDataOps }\n","import { Check } from 'lucide-react'\nimport { cn } from '@/utils/cn'\nimport { useLocale } from '@/providers/locale-provider'\nimport { Badge } from '@/components/ui/badge'\nimport { Button } from '@/components/ui/button'\nimport { ScrollArea } from '@/components/ui/scroll-area'\nimport type { MergePreviewProps } from './bulk-data-types'\n\nexport function MergePreview({\n records,\n conflicts,\n onResolveConflict,\n primaryRecordId,\n onPrimaryRecordChange,\n className,\n}: MergePreviewProps) {\n const resolvedCount = conflicts.filter((c) => c.resolvedValue !== undefined).length\n const { t } = useLocale()\n\n return (\n <div className={cn('space-y-4', className)}>\n {/* Summary */}\n <div className=\"flex items-center gap-3\">\n <Badge variant=\"secondary\">\n {t('bulkOps.recordsToMerge', { count: records.length })}\n </Badge>\n <Badge variant={resolvedCount === conflicts.length ? 'default' : 'outline'}>\n {t('bulkOps.conflictsResolved', { resolved: resolvedCount, total: conflicts.length })}\n </Badge>\n </div>\n\n {/* Primary record selector */}\n {onPrimaryRecordChange && (\n <div className=\"space-y-1.5\">\n <p className=\"text-xs font-semibold text-muted-foreground\">{t('bulkOps.primaryRecord')}</p>\n <div className=\"flex items-center gap-2\">\n {records.map((record) => (\n <Button\n key={record.id}\n variant={primaryRecordId === record.id ? 'default' : 'outline'}\n size=\"sm\"\n className=\"text-xs\"\n onClick={() => onPrimaryRecordChange(record.id)}\n >\n {record.label}\n </Button>\n ))}\n </div>\n </div>\n )}\n\n {/* Conflicts */}\n <ScrollArea className=\"max-h-[400px]\">\n <div className=\"space-y-3\">\n {conflicts.map((conflict) => (\n <div key={conflict.fieldId} className=\"rounded-lg border p-3\">\n <div className=\"mb-2 flex items-center justify-between\">\n <span className=\"text-sm font-medium\">{conflict.fieldLabel}</span>\n {conflict.resolvedValue !== undefined && (\n <Check className=\"h-4 w-4 text-emerald-600\" />\n )}\n </div>\n <div className=\"space-y-1.5\">\n {conflict.values.map(({ recordId, value }) => {\n const record = records.find((r) => r.id === recordId)\n const isSelected = conflict.resolvedValue !== undefined &&\n JSON.stringify(conflict.resolvedValue) === JSON.stringify(value)\n\n return (\n <button\n key={recordId}\n type=\"button\"\n onClick={() => onResolveConflict(conflict.fieldId, value)}\n className={cn(\n 'flex w-full items-center gap-2 rounded-md px-3 py-2 text-left text-sm transition-colors',\n isSelected\n ? 'bg-primary/10 border border-primary/30 text-primary'\n : 'border bg-card hover:bg-muted'\n )}\n >\n <div className=\"min-w-0 flex-1\">\n <p className=\"truncate font-medium\">{value != null ? String(value) : t('bulkOps.empty')}</p>\n <p className=\"text-[10px] text-muted-foreground\">{t('bulkOps.fromRecord', { label: record?.label ?? recordId })}</p>\n </div>\n {isSelected && <Check className=\"h-3.5 w-3.5 shrink-0\" />}\n </button>\n )\n })}\n </div>\n </div>\n ))}\n </div>\n </ScrollArea>\n </div>\n )\n}\n","import { ChevronRight, ChevronDown, Diamond } from 'lucide-react'\nimport { cn } from '@/utils/cn'\nimport { useLocale } from '@/providers/locale-provider'\nimport { Avatar, AvatarFallback, AvatarImage } from '@/components/ui/avatar'\nimport type { GanttTask } from './gantt-types'\n\nfunction getInitials(name: string): string {\n return name.split(' ').map((n) => n[0]).join('').toUpperCase().slice(0, 2)\n}\n\nexport interface GanttSidebarProps {\n tasks: GanttTask[]\n rowHeight: number\n width: number\n onToggleCollapse?: (taskId: string) => void\n onTaskClick?: (task: GanttTask) => void\n className?: string\n}\n\nfunction TaskRow({\n task,\n depth,\n rowHeight,\n onToggleCollapse,\n onTaskClick,\n}: {\n task: GanttTask\n depth: number\n rowHeight: number\n onToggleCollapse?: (taskId: string) => void\n onTaskClick?: (task: GanttTask) => void\n}) {\n const hasChildren = task.children && task.children.length > 0\n\n return (\n <>\n <div\n className=\"flex items-center border-b px-2 hover:bg-muted/50 transition-colors cursor-pointer\"\n style={{ height: rowHeight, paddingLeft: 8 + depth * 16 }}\n onClick={() => onTaskClick?.(task)}\n >\n {/* Expand/collapse */}\n {hasChildren ? (\n <button\n type=\"button\"\n className=\"mr-1 flex h-4 w-4 shrink-0 items-center justify-center rounded hover:bg-muted\"\n onClick={(e) => {\n e.stopPropagation()\n onToggleCollapse?.(task.id)\n }}\n >\n {task.collapsed ? (\n <ChevronRight className=\"h-3 w-3\" />\n ) : (\n <ChevronDown className=\"h-3 w-3\" />\n )}\n </button>\n ) : (\n <span className=\"mr-1 w-4 shrink-0\" />\n )}\n\n {/* Milestone icon */}\n {task.milestone && (\n <Diamond className=\"mr-1.5 h-3 w-3 shrink-0 text-amber-500\" />\n )}\n\n {/* Name */}\n <span className=\"min-w-0 flex-1 truncate text-xs font-medium\">{task.name}</span>\n\n {/* Assignee */}\n {task.assignee && (\n <Avatar className=\"ml-1.5 h-5 w-5 shrink-0\">\n <AvatarImage src={task.assignee.avatar} alt={task.assignee.name} />\n <AvatarFallback className=\"text-[7px]\">{getInitials(task.assignee.name)}</AvatarFallback>\n </Avatar>\n )}\n </div>\n\n {/* Children */}\n {hasChildren && !task.collapsed && task.children!.map((child) => (\n <TaskRow\n key={child.id}\n task={child}\n depth={depth + 1}\n rowHeight={rowHeight}\n onToggleCollapse={onToggleCollapse}\n onTaskClick={onTaskClick}\n />\n ))}\n </>\n )\n}\n\nexport function GanttSidebar({\n tasks,\n rowHeight,\n width,\n onToggleCollapse,\n onTaskClick,\n className,\n}: GanttSidebarProps) {\n const { t } = useLocale()\n return (\n <div className={cn('shrink-0 overflow-hidden border-r bg-background', className)} style={{ width }}>\n {/* Header */}\n <div\n className=\"flex items-center border-b bg-muted/30 px-3 text-[10px] font-semibold uppercase tracking-wider text-muted-foreground\"\n style={{ height: 48 }}\n >\n {t('gantt.taskName')}\n </div>\n\n {/* Rows */}\n <div className=\"overflow-y-auto\">\n {tasks.map((task) => (\n <TaskRow\n key={task.id}\n task={task}\n depth={0}\n rowHeight={rowHeight}\n onToggleCollapse={onToggleCollapse}\n onTaskClick={onTaskClick}\n />\n ))}\n </div>\n </div>\n )\n}\n","import { useRef } from 'react'\nimport { cn } from '@/utils/cn'\nimport type { GanttBarPosition, GanttDateColumn, GanttTask } from './gantt-types'\n\nexport interface GanttChartProps {\n columns: GanttDateColumn[]\n barPositions: GanttBarPosition[]\n totalWidth: number\n totalHeight: number\n todayX: number\n rowHeight: number\n showTodayMarker: boolean\n onTaskClick?: (task: GanttTask) => void\n readOnly?: boolean\n className?: string\n}\n\nfunction GanttBar({\n bar,\n rowHeight,\n onClick,\n}: {\n bar: GanttBarPosition\n rowHeight: number\n onClick?: () => void\n}) {\n const { task, x, width, y } = bar\n const barHeight = task.milestone ? 12 : rowHeight * 0.5\n const barY = y + (rowHeight - barHeight) / 2\n\n if (task.milestone) {\n // Diamond shape for milestones\n const cx = x + 6\n const cy = barY + 6\n return (\n <g\n className=\"cursor-pointer\"\n onClick={onClick}\n >\n <polygon\n points={`${cx},${cy - 6} ${cx + 6},${cy} ${cx},${cy + 6} ${cx - 6},${cy}`}\n fill={task.color ?? 'hsl(var(--warning))'}\n stroke={task.color ?? 'hsl(var(--warning))'}\n strokeWidth={1}\n opacity={0.9}\n />\n <title>{task.name}</title>\n </g>\n )\n }\n\n const progress = task.progress ?? 0\n const progressWidth = (width * progress) / 100\n const rx = 4\n\n return (\n <g\n className=\"cursor-pointer transition-opacity hover:opacity-80\"\n onClick={onClick}\n >\n {/* Background */}\n <rect\n x={x}\n y={barY}\n width={width}\n height={barHeight}\n rx={rx}\n fill={task.color ?? 'hsl(var(--primary))'}\n opacity={0.2}\n />\n {/* Progress */}\n {progress > 0 && (\n <rect\n x={x}\n y={barY}\n width={Math.min(progressWidth, width)}\n height={barHeight}\n rx={rx}\n fill={task.color ?? 'hsl(var(--primary))'}\n opacity={0.7}\n />\n )}\n {/* Border */}\n <rect\n x={x}\n y={barY}\n width={width}\n height={barHeight}\n rx={rx}\n fill=\"none\"\n stroke={task.color ?? 'hsl(var(--primary))'}\n strokeWidth={1}\n opacity={0.5}\n />\n {/* Label */}\n {width > 50 && (\n <text\n x={x + 6}\n y={barY + barHeight / 2}\n dominantBaseline=\"central\"\n fill=\"currentColor\"\n fontSize={10}\n fontWeight={500}\n className=\"pointer-events-none\"\n >\n {task.name}\n </text>\n )}\n <title>{task.name} ({progress}%)</title>\n </g>\n )\n}\n\nexport function GanttChart({\n columns,\n barPositions,\n totalWidth,\n totalHeight,\n todayX,\n rowHeight,\n showTodayMarker,\n onTaskClick,\n className,\n}: GanttChartProps) {\n const containerRef = useRef<HTMLDivElement>(null)\n\n return (\n <div ref={containerRef} className={cn('flex-1 overflow-auto', className)}>\n {/* Header */}\n <div className=\"sticky top-0 z-10 flex border-b bg-muted/30\" style={{ width: totalWidth, height: 48 }}>\n {columns.map((col, i) => (\n <div\n key={i}\n className={cn(\n 'flex shrink-0 flex-col items-center justify-center border-r text-center',\n col.isWeekend && 'bg-muted/40',\n col.isToday && 'bg-primary/5'\n )}\n style={{ width: col.width }}\n >\n <span className=\"text-[10px] font-semibold\">{col.label}</span>\n {col.subLabel && (\n <span className=\"text-[9px] text-muted-foreground\">{col.subLabel}</span>\n )}\n </div>\n ))}\n </div>\n\n {/* Chart area */}\n <div style={{ width: totalWidth, position: 'relative' }}>\n {/* Grid lines */}\n <svg width={totalWidth} height={totalHeight} className=\"absolute inset-0\">\n {/* Vertical grid lines */}\n {columns.map((col, i) => {\n const colX = columns.slice(0, i).reduce((sum, c) => sum + c.width, 0)\n return (\n <g key={i}>\n <line\n x1={colX}\n y1={0}\n x2={colX}\n y2={totalHeight}\n stroke=\"hsl(var(--border))\"\n strokeWidth={0.5}\n />\n {col.isWeekend && (\n <rect\n x={colX}\n y={0}\n width={col.width}\n height={totalHeight}\n fill=\"hsl(var(--muted))\"\n opacity={0.3}\n />\n )}\n </g>\n )\n })}\n\n {/* Horizontal grid lines */}\n {barPositions.map((_, i) => (\n <line\n key={`h-${i}`}\n x1={0}\n y1={(i + 1) * rowHeight}\n x2={totalWidth}\n y2={(i + 1) * rowHeight}\n stroke=\"hsl(var(--border))\"\n strokeWidth={0.5}\n />\n ))}\n\n {/* Today marker */}\n {showTodayMarker && (\n <line\n x1={todayX}\n y1={0}\n x2={todayX}\n y2={totalHeight}\n stroke=\"hsl(var(--destructive))\"\n strokeWidth={1.5}\n strokeDasharray=\"4 2\"\n />\n )}\n\n {/* Task bars */}\n {barPositions.map((bar) => (\n <GanttBar\n key={bar.task.id}\n bar={bar}\n rowHeight={rowHeight}\n onClick={() => onTaskClick?.(bar.task)}\n />\n ))}\n </svg>\n\n {/* Spacer for scroll height */}\n <div style={{ height: totalHeight }} />\n </div>\n </div>\n )\n}\n","import { useMemo } from 'react'\nimport type { GanttTask, GanttViewMode, GanttDateColumn, GanttBarPosition } from './gantt-types'\n\nfunction toDate(d: Date | string): Date {\n return d instanceof Date ? d : new Date(d)\n}\n\nfunction startOfDay(d: Date): Date {\n const r = new Date(d)\n r.setHours(0, 0, 0, 0)\n return r\n}\n\nfunction addDays(d: Date, n: number): Date {\n const r = new Date(d)\n r.setDate(r.getDate() + n)\n return r\n}\n\nfunction diffDays(a: Date, b: Date): number {\n return Math.round((a.getTime() - b.getTime()) / (86400000))\n}\n\nfunction isWeekend(d: Date): boolean {\n const day = d.getDay()\n return day === 0 || day === 6\n}\n\nfunction isSameDay(a: Date, b: Date): boolean {\n return a.getFullYear() === b.getFullYear() && a.getMonth() === b.getMonth() && a.getDate() === b.getDate()\n}\n\nfunction flattenTasks(tasks: GanttTask[]): GanttTask[] {\n const result: GanttTask[] = []\n for (const task of tasks) {\n result.push(task)\n if (task.children && !task.collapsed) {\n result.push(...flattenTasks(task.children))\n }\n }\n return result\n}\n\nfunction getColumnWidth(viewMode: GanttViewMode): number {\n switch (viewMode) {\n case 'day': return 40\n case 'week': return 80\n case 'month': return 120\n }\n}\n\nfunction formatDateLabel(d: Date, viewMode: GanttViewMode): { label: string; subLabel?: string } {\n switch (viewMode) {\n case 'day':\n return {\n label: d.toLocaleDateString('en-US', { day: 'numeric' }),\n subLabel: d.toLocaleDateString('en-US', { weekday: 'short' }),\n }\n case 'week':\n return {\n label: `W${getWeekNumber(d)}`,\n subLabel: d.toLocaleDateString('en-US', { month: 'short', day: 'numeric' }),\n }\n case 'month':\n return {\n label: d.toLocaleDateString('en-US', { month: 'short' }),\n subLabel: d.getFullYear().toString(),\n }\n }\n}\n\nfunction getWeekNumber(d: Date): number {\n const firstDay = new Date(d.getFullYear(), 0, 1)\n const dayOfYear = Math.ceil((d.getTime() - firstDay.getTime()) / 86400000)\n return Math.ceil((dayOfYear + firstDay.getDay()) / 7)\n}\n\nfunction getStepDays(viewMode: GanttViewMode): number {\n switch (viewMode) {\n case 'day': return 1\n case 'week': return 7\n case 'month': return 30\n }\n}\n\nexport function useGanttPlanner(tasks: GanttTask[], viewMode: GanttViewMode, rowHeight: number) {\n const flatTasks = useMemo(() => flattenTasks(tasks), [tasks])\n\n const dateRange = useMemo(() => {\n if (flatTasks.length === 0) {\n const today = startOfDay(new Date())\n return { start: addDays(today, -7), end: addDays(today, 30) }\n }\n\n let earliest = Infinity\n let latest = -Infinity\n for (const task of flatTasks) {\n const s = toDate(task.start).getTime()\n const e = toDate(task.end).getTime()\n if (s < earliest) earliest = s\n if (e > latest) latest = e\n }\n\n const padding = getStepDays(viewMode) * 2\n return {\n start: addDays(startOfDay(new Date(earliest)), -padding),\n end: addDays(startOfDay(new Date(latest)), padding),\n }\n }, [flatTasks, viewMode])\n\n const columns = useMemo((): GanttDateColumn[] => {\n const cols: GanttDateColumn[] = []\n const colWidth = getColumnWidth(viewMode)\n const step = getStepDays(viewMode)\n const today = startOfDay(new Date())\n let current = new Date(dateRange.start)\n\n while (current <= dateRange.end) {\n const { label, subLabel } = formatDateLabel(current, viewMode)\n cols.push({\n date: new Date(current),\n label,\n subLabel,\n width: colWidth,\n isToday: isSameDay(current, today),\n isWeekend: isWeekend(current),\n })\n current = addDays(current, step)\n }\n return cols\n }, [dateRange, viewMode])\n\n const totalWidth = useMemo(() => {\n return columns.reduce((sum, col) => sum + col.width, 0)\n }, [columns])\n\n const barPositions = useMemo((): GanttBarPosition[] => {\n const colWidth = getColumnWidth(viewMode)\n const step = getStepDays(viewMode)\n const rangeStart = dateRange.start\n\n return flatTasks.map((task, i) => {\n const taskStart = startOfDay(toDate(task.start))\n const taskEnd = startOfDay(toDate(task.end))\n const startOffset = diffDays(taskStart, rangeStart) / step\n const duration = Math.max(diffDays(taskEnd, taskStart) / step, 0.5)\n\n return {\n task,\n x: startOffset * colWidth,\n width: Math.max(duration * colWidth, task.milestone ? 16 : 20),\n y: i * rowHeight,\n }\n })\n }, [flatTasks, dateRange, viewMode, rowHeight])\n\n const todayX = useMemo(() => {\n const today = startOfDay(new Date())\n const colWidth = getColumnWidth(viewMode)\n const step = getStepDays(viewMode)\n return (diffDays(today, dateRange.start) / step) * colWidth\n }, [dateRange, viewMode])\n\n return {\n flatTasks,\n columns,\n totalWidth,\n barPositions,\n todayX,\n dateRange,\n }\n}\n","import { Calendar, CalendarDays, CalendarRange } from 'lucide-react'\nimport { cn } from '@/utils/cn'\nimport { useLocale } from '@/providers/locale-provider'\nimport { useControllableState } from '@/hooks/use-controllable-state'\nimport { Button } from '@/components/ui/button'\nimport {\n Tooltip,\n TooltipContent,\n TooltipProvider,\n TooltipTrigger,\n} from '@/components/ui/tooltip'\nimport { GanttSidebar } from './gantt-sidebar'\nimport { GanttChart } from './gantt-chart'\nimport { useGanttPlanner } from './use-gantt-planner'\nimport type { GanttPlannerProps, GanttViewMode, GanttTask } from './gantt-types'\n\nconst VIEW_MODE_OPTIONS: { mode: GanttViewMode; icon: React.ReactNode }[] = [\n { mode: 'day', icon: <Calendar className=\"h-3.5 w-3.5\" /> },\n { mode: 'week', icon: <CalendarDays className=\"h-3.5 w-3.5\" /> },\n { mode: 'month', icon: <CalendarRange className=\"h-3.5 w-3.5\" /> },\n]\n\n/**\n * GanttPlanner - Timeline chart with task bars, dependencies, milestones, and drag-to-resize.\n *\n * Custom SVG renderer with horizontal scrolling, today marker, and collapsible task hierarchy.\n *\n * @example\n * ```tsx\n * <GanttPlanner\n * tasks={[\n * { id: '1', name: 'Design Phase', start: '2025-01-01', end: '2025-01-15', progress: 80 },\n * { id: '2', name: 'Development', start: '2025-01-10', end: '2025-02-15', progress: 30, dependencies: ['1'] },\n * { id: '3', name: 'Launch', start: '2025-02-15', end: '2025-02-15', milestone: true },\n * ]}\n * viewMode=\"week\"\n * onTaskClick={(task) => console.log(task)}\n * height={500}\n * />\n * ```\n */\nfunction GanttPlanner({\n tasks: controlledTasks,\n defaultTasks,\n onTasksChange,\n viewMode: controlledViewMode,\n defaultViewMode = 'week',\n onViewModeChange,\n viewModeLabels,\n hideToolbar = false,\n renderToolbar,\n onTaskChange,\n onTaskClick,\n showTodayMarker = true,\n rowHeight = 40,\n readOnly = false,\n sidebarWidth = 240,\n height = 500,\n className,\n}: GanttPlannerProps) {\n const { t } = useLocale()\n const [viewMode, setViewMode] = useControllableState<GanttViewMode>({\n value: controlledViewMode,\n defaultValue: defaultViewMode,\n onChange: onViewModeChange,\n })\n const [tasks, setTasks] = useControllableState<GanttTask[]>({\n value: controlledTasks,\n defaultValue: defaultTasks ?? controlledTasks ?? [],\n onChange: onTasksChange,\n })\n\n const handleViewModeChange = (mode: GanttViewMode) => {\n setViewMode(mode)\n }\n\n const getViewModeLabel = (mode: GanttViewMode) => {\n return viewModeLabels?.[mode] ?? t(`gantt.${mode}`)\n }\n\n const handleToggleCollapse = (taskId: string) => {\n const toggle = (list: GanttTask[]): GanttTask[] =>\n list.map((t) => {\n if (t.id === taskId) return { ...t, collapsed: !t.collapsed }\n if (t.children) return { ...t, children: toggle(t.children) }\n return t\n })\n const updated = toggle(tasks)\n setTasks(updated)\n // Find changed task and notify\n const findTask = (list: GanttTask[]): GanttTask | undefined => {\n for (const t of list) {\n if (t.id === taskId) return t\n if (t.children) {\n const found = findTask(t.children)\n if (found) return found\n }\n }\n return undefined\n }\n const changedTask = findTask(updated)\n if (changedTask && !readOnly) onTaskChange?.(changedTask)\n }\n\n const { flatTasks, columns, totalWidth, barPositions, todayX } = useGanttPlanner(tasks, viewMode, rowHeight)\n\n const totalHeight = flatTasks.length * rowHeight\n\n return (\n <div className={cn('flex flex-col overflow-hidden rounded-lg border bg-background', className)} style={{ height }}>\n {/* Toolbar */}\n {!hideToolbar && (\n renderToolbar ? (\n <div className=\"border-b px-3 py-2\">\n {renderToolbar({\n viewMode,\n setViewMode: handleViewModeChange,\n taskCount: flatTasks.length,\n })}\n </div>\n ) : (\n <div className=\"flex items-center justify-between border-b px-3 py-2\">\n <span className=\"text-sm font-semibold\">{t('gantt.tasks', { count: flatTasks.length })}</span>\n <TooltipProvider>\n <div className=\"flex items-center gap-1 rounded-lg border bg-muted/30 p-0.5\">\n {VIEW_MODE_OPTIONS.map(({ mode, icon }) => (\n <Tooltip key={mode}>\n <TooltipTrigger asChild>\n <Button\n variant={viewMode === mode ? 'default' : 'ghost'}\n size=\"sm\"\n className={cn('h-7 px-2.5 text-xs', viewMode !== mode && 'hover:bg-background')}\n onClick={() => handleViewModeChange(mode)}\n >\n {icon}\n <span className=\"ml-1\">{getViewModeLabel(mode)}</span>\n </Button>\n </TooltipTrigger>\n <TooltipContent>{t('gantt.viewMode', { mode: getViewModeLabel(mode) })}</TooltipContent>\n </Tooltip>\n ))}\n </div>\n </TooltipProvider>\n </div>\n )\n )}\n\n {/* Content */}\n <div className=\"flex flex-1 overflow-hidden\">\n {/* Sidebar */}\n <GanttSidebar\n tasks={tasks}\n rowHeight={rowHeight}\n width={sidebarWidth}\n onToggleCollapse={handleToggleCollapse}\n onTaskClick={onTaskClick}\n />\n\n {/* Chart */}\n <GanttChart\n columns={columns}\n barPositions={barPositions}\n totalWidth={totalWidth}\n totalHeight={totalHeight}\n todayX={todayX}\n rowHeight={rowHeight}\n showTodayMarker={showTodayMarker}\n onTaskClick={onTaskClick}\n readOnly={readOnly}\n />\n </div>\n </div>\n )\n}\n\nGanttPlanner.displayName = 'GanttPlanner'\n\nexport { GanttPlanner }\n","import * as React from 'react'\nimport { cn } from '@/utils/cn'\nimport { useLocale } from '@/providers/locale-provider'\nimport { Checkbox } from '@/components/ui/checkbox'\nimport { ScrollArea, ScrollBar } from '@/components/ui/scroll-area'\n\nexport interface PermissionMatrixProps {\n roles: { id: string; name: string }[]\n permissions: { id: string; name: string; group?: string }[]\n values: Record<string, string[]> // roleId -> permissionIds[]\n onChange?: (roleId: string, permissionId: string, granted: boolean) => void\n onBulkToggleRole?: (roleId: string, granted: boolean) => void\n onBulkTogglePermission?: (permissionId: string, granted: boolean) => void\n readOnly?: boolean\n className?: string\n}\n\n/** Group permissions by their `group` field, preserving order. */\nfunction groupPermissions(permissions: PermissionMatrixProps['permissions']) {\n const groups: { label: string; items: typeof permissions }[] = []\n const seen = new Map<string, number>()\n for (const p of permissions) {\n const key = p.group ?? ''\n const idx = seen.get(key)\n if (idx !== undefined) {\n groups[idx].items.push(p)\n } else {\n seen.set(key, groups.length)\n groups.push({ label: key, items: [p] })\n }\n }\n return groups\n}\n\n/**\n * PermissionMatrix -- Role x Permission checkbox grid.\n *\n * Displays roles as columns and permissions as rows with grouped sections.\n * Supports bulk toggle per role (column) and per permission (row).\n *\n * @example\n * ```tsx\n * <PermissionMatrix\n * roles={[{ id: 'admin', name: 'Admin' }, { id: 'editor', name: 'Editor' }]}\n * permissions={[\n * { id: 'read', name: 'Read', group: 'Content' },\n * { id: 'write', name: 'Write', group: 'Content' },\n * ]}\n * values={{ admin: ['read', 'write'], editor: ['read'] }}\n * onChange={(roleId, permId, granted) => console.log(roleId, permId, granted)}\n * />\n * ```\n */\nfunction PermissionMatrix({\n roles,\n permissions,\n values,\n onChange,\n onBulkToggleRole,\n onBulkTogglePermission,\n readOnly = false,\n className,\n}: PermissionMatrixProps) {\n const groups = React.useMemo(() => groupPermissions(permissions), [permissions])\n const { t } = useLocale()\n const permissionIds = React.useMemo(() => permissions.map((p) => p.id), [permissions])\n\n const isChecked = (roleId: string, permId: string) =>\n values[roleId]?.includes(permId) ?? false\n\n /** Whether every permission is granted for a role (column). */\n const isRoleAllChecked = (roleId: string) =>\n permissionIds.length > 0 && permissionIds.every((pid) => isChecked(roleId, pid))\n\n /** Whether every role has a specific permission (row). */\n const isPermAllChecked = (permId: string) =>\n roles.length > 0 && roles.every((r) => isChecked(r.id, permId))\n\n const cellClass =\n 'flex items-center justify-center h-10 min-w-[80px] border-b border-r px-2'\n const headerCellClass =\n 'flex flex-col items-center justify-center gap-1 h-14 min-w-[80px] border-b border-r px-2 bg-muted/40'\n\n return (\n <ScrollArea className={cn('rounded-lg border bg-background', className)}>\n <table className=\"w-max border-collapse\">\n {/* Header row -- sticky */}\n <thead>\n <tr className=\"sticky top-0 z-10 bg-background\">\n {/* Top-left corner */}\n <th className=\"sticky left-0 z-20 border-b border-r bg-muted/40 min-w-[180px] h-14\" />\n {/* Select-all per permission row header */}\n <th className={cn(headerCellClass, 'sticky left-[180px] z-20 bg-muted/40')}>\n <span className=\"text-[10px] font-medium text-muted-foreground\">{t('permission.all')}</span>\n </th>\n {roles.map((role) => (\n <th key={role.id} className={cn(headerCellClass)}>\n <span className=\"text-xs font-semibold truncate max-w-[72px]\">{role.name}</span>\n {!readOnly && (\n <Checkbox\n size=\"sm\"\n checked={isRoleAllChecked(role.id)}\n onCheckedChange={(checked) =>\n onBulkToggleRole?.(role.id, checked === true)\n }\n aria-label={t('permission.toggleAllForRole', { role: role.name })}\n />\n )}\n </th>\n ))}\n </tr>\n </thead>\n\n <tbody>\n {groups.map((group) => (\n <React.Fragment key={group.label}>\n {/* Group header */}\n {group.label && (\n <tr>\n <td\n colSpan={roles.length + 2}\n className=\"sticky left-0 bg-muted/20 border-b px-3 py-1.5 text-xs font-semibold text-muted-foreground tracking-wide uppercase\"\n >\n {group.label}\n </td>\n </tr>\n )}\n\n {group.items.map((perm) => (\n <tr key={perm.id} className=\"hover:bg-accent/30 transition-colors\">\n {/* Permission name */}\n <td className=\"sticky left-0 z-10 bg-background border-b border-r px-3 min-w-[180px] text-sm font-medium truncate\">\n {perm.name}\n </td>\n\n {/* Select-all for this permission row */}\n <td className={cn(cellClass, 'sticky left-[180px] z-10 bg-background')}>\n {!readOnly && (\n <Checkbox\n size=\"sm\"\n checked={isPermAllChecked(perm.id)}\n onCheckedChange={(checked) =>\n onBulkTogglePermission?.(perm.id, checked === true)\n }\n aria-label={t('permission.toggleForAllRoles', { permission: perm.name })}\n />\n )}\n </td>\n\n {/* Cells */}\n {roles.map((role) => (\n <td key={role.id} className={cn(cellClass)}>\n <Checkbox\n size=\"sm\"\n checked={isChecked(role.id, perm.id)}\n onCheckedChange={(checked) =>\n onChange?.(role.id, perm.id, checked === true)\n }\n disabled={readOnly}\n aria-label={t('permission.toggleSingle', { permission: perm.name, role: role.name })}\n />\n </td>\n ))}\n </tr>\n ))}\n </React.Fragment>\n ))}\n </tbody>\n </table>\n <ScrollBar orientation=\"horizontal\" />\n </ScrollArea>\n )\n}\n\nPermissionMatrix.displayName = 'PermissionMatrix'\n\nexport { PermissionMatrix }\n"],"names":["ArrowLeft","createLucideIcon","ArrowUpDown","Bookmark","CalendarDays","CalendarRange","Diamond","EyeOff","RotateCcw","Save","Settings2","SkipForward","Target","TrendingDown","functionalUpdate","updater","input","makeStateUpdater","key","instance","old","isFunction","d","isNumberArray","val","flattenBy","arr","getChildren","flat","recurse","subArr","item","children","memo","getDeps","fn","opts","deps","result","depArgs","depTime","newDeps","dep","index","resultTime","depEndTime","resultEndTime","resultFpsPercentage","pad","str","num","getMemoOptions","tableOptions","debugLevel","onChange","_tableOptions$debugAl","createCell","table","row","column","columnId","getRenderValue","_cell$getValue","cell","feature","createColumn","columnDef","depth","parent","_ref","_resolvedColumnDef$id","resolvedColumnDef","accessorKey","id","accessorFn","originalRow","_result","_column$columns","orderColumns","_column$columns2","leafColumns","debug","createHeader","options","_options$id","header","leafHeaders","recurseHeader","h","Headers","allColumns","left","right","_left$map$filter","_right$map$filter","leftColumns","rightColumns","centerColumns","buildHeaderGroups","_left$map$filter2","orderedLeafColumns","_right$map$filter2","headerGroups","headerGroup","flatHeaders","_header$subHeaders","_header$subHeaders2","_header$subHeaders3","center","_left$0$headers","_left$","_center$0$headers","_center$","_right$0$headers","_right$","columnsToGroup","headerFamily","_headerGroups$0$heade","_headerGroups$","maxDepth","findMaxDepth","columns","createHeaderGroup","headersToGroup","pendingParentHeaders","headerToGroup","latestPendingParentHeader","isLeafHeader","isPlaceholder","bottomHeaders","recurseHeadersForSpans","headers","colSpan","rowSpan","childRowSpans","childColSpan","childRowSpan","minChildRowSpan","createRow","original","rowIndex","subRows","parentId","_row$getValue","parentRows","currentRow","parentRow","allCells","acc","i","ColumnFaceting","includesString","filterValue","_filterValue$toString","search","testFalsey","includesStringSensitive","_row$getValue2","equalsString","_row$getValue3","arrIncludes","_row$getValue4","arrIncludesAll","_row$getValue5","arrIncludesSome","_row$getValue6","equals","weakEquals","inNumberRange","min","max","rowValue","unsafeMin","unsafeMax","parsedMin","parsedMax","temp","filterFns","ColumnFiltering","state","firstRow","value","_table$options$filter","_table$options$filter2","_column$columnDef$ena","_table$options$enable","_table$options$enable2","_table$getState$colum","_table$getState$colum2","_table$getState$colum3","filterFn","previousFilter","newFilter","shouldAutoRemoveFilter","_old$filter","newFilterObj","_old$map","_table","updateFn","_functionalUpdate","filter","defaultState","_table$initialState$c","_table$initialState","sum","_leafRows","childRows","next","nextValue","extent","mean","leafRows","count","median","values","mid","nums","a","b","unique","uniqueCount","_columnId","aggregationFns","ColumnGrouping","props","_toString","_props$getValue","_table$getState$group","_table$getState$group2","canGroup","_table$options$aggreg","_table$options$aggreg2","_table$initialState$g","_row$subRows","grouping","groupedColumnMode","nonGroupingColumns","col","g","ColumnOrdering","position","_getVisibleLeafColumns","_columns$","_columns","columnOrder","orderedColumns","columnOrderCopy","columnsCopy","targetColumnId","foundIndex","getDefaultColumnPinningState","ColumnPinning","columnIds","_old$left3","_old$right3","_old$left","_old$right","_old$left2","_old$right2","_d$columnDef$enablePi","leafColumnIds","isLeft","isRight","leftAndRight","_pinningState$positio","pinningState","_pinningState$left","_pinningState$right","safelyAccessDocument","_document","defaultColumnSizing","getDefaultColumnSizingInfoState","ColumnSizing","_column$columnDef$min","_column$columnDef$max","columnSize","_ref2","_","rest","_header$column$getSiz","prevSiblingHeader","_contextDocument","canResize","e","isTouchStartEvent","startSize","columnSizingStart","clientX","newColumnSizing","updateOffset","eventType","clientXPos","_old$startOffset","_old$startSize","deltaDirection","deltaOffset","deltaPercentage","_ref3","headerSize","onMove","onEnd","contextDocument","mouseEvents","touchEvents","_e$touches$","passiveIfSupported","passiveEventSupported","_table$initialState$c2","_table$getHeaderGroup","_table$getHeaderGroup2","_table$getLeftHeaderG","_table$getLeftHeaderG2","_table$getCenterHeade","_table$getCenterHeade2","_table$getRightHeader","_table$getRightHeader2","passiveSupported","supported","noop","ColumnVisibility","childColumns","c","cells","makeVisibleColumnsMethod","getColumns","_value","obj","_target","GlobalFaceting","GlobalFiltering","_table$getCoreRowMode","_table$options$getCol","globalFilterFn","RowExpanding","registered","queued","_table$options$autoRe","expanded","_table$initialState$e","splitId","_expanded","exists","oldExpanded","rowId","_table$options$getIsR","_table$options$getRow","isFullyExpanded","canExpand","defaultPageIndex","defaultPageSize","getDefaultPaginationState","RowPagination","safeUpdater","_table$initialState$p","pageIndex","maxPageIndex","_table$initialState$p2","_table$initialState$p3","_table$initialState2","pageSize","topRowIndex","_table$options$pageCo","newPageCount","pageCount","pageOptions","_table$options$pageCo2","_table$options$rowCou","getDefaultRowPinningState","RowPinning","includeLeafRows","includeParentRows","leafRowIds","parentRowIds","rowIds","_old$top3","_old$bottom3","_old$top","_old$bottom","_old$top2","_old$bottom2","enableRowPinning","enablePinning","top","bottom","isTop","isBottom","_ref4","_visiblePinnedRowIds$","visiblePinnedRowIds","_ref5","_table$initialState$r","_pinningState$top","_pinningState$bottom","visibleRows","pinnedRowIds","_table$options$keepPi","allRows","topPinnedRowIds","bottomPinnedRowIds","topAndBottom","RowSelection","rowSelection","preGroupedFlatRows","resolvedValue","mutateRowIsSelected","rowModel","selectRowsFn","isAllRowsSelected","paginationFlatRows","isAllPageRowsSelected","_table$getState$rowSe","totalSelected","isSelected","_opts$selectChildren","selectedRowIds","isRowSelected","isSubRowSelected","_table$options$enable3","canSelect","includeChildren","newSelectedFlatRows","newSelectedRowsById","recurseRows","rows","_row$subRows2","selection","_selection$row$id","_row$subRows3","allChildrenSelected","someSelected","subRow","subRowChildrenSelected","reSplitAlphaNumeric","alphanumeric","rowA","rowB","compareAlphanumeric","toString","alphanumericCaseSensitive","text","compareBasic","textCaseSensitive","datetime","basic","aStr","bStr","aa","bb","an","bn","combo","sortingFns","RowSorting","firstRows","isString","_table$options$sortin","_table$options$sortin2","desc","multi","nextSortingOrder","hasManualValue","existingSorting","existingIndex","newSorting","sortAction","nextDesc","_table$options$maxMul","_column$columnDef$sor","firstSortDirection","isSorted","_column$columnDef$ena2","_table$getState$sorti","columnSort","_table$getState$sorti2","_table$getState$sorti3","canSort","_table$initialState$s","builtInFeatures","createTable","_options$_features","_options$initialState","_features","defaultOptions","mergeOptions","initialState","_feature$getInitialSt","queuedTimeout","coreInstance","cb","error","newOptions","searchAll","defaultColumn","_defaultColumn","_props$renderValue$to","_props$renderValue","columnDefs","recurseColumns","groupingColumnDef","flatColumns","getCoreRowModel","data","accessRows","originalRows","_row$originalSubRows","expandRows","expandedRows","handleRow","filterRows","filterRowImpl","filterRowModelFromLeafs","filterRowModelFromRoot","rowsToFilter","filterRow","_table$options$maxLea","newFilteredFlatRows","newFilteredRowsById","recurseFilterRows","newRow","_table$options$maxLea2","getFilteredRowModel","columnFilters","globalFilter","resolvedColumnFilters","resolvedGlobalFilters","_filterFn$resolveFilt","filterableIds","globallyFilterableColumns","_globalFilterFn$resol","currentColumnFilter","currentGlobalFilter","j","filterMeta","filterRowsImpl","getPaginationRowModel","pagination","flatRows","rowsById","pageStart","pageEnd","paginatedRowModel","getSortedRowModel","sorting","sortingState","sortedFlatRows","availableSorting","sort","_table$getColumn","columnInfoById","sortEntry","sortData","sortedData","_sortEntry$desc","columnInfo","sortUndefined","isDesc","sortInt","aValue","bValue","aUndefined","bUndefined","flexRender","Comp","isReactComponent","React","component","isClassComponent","isExoticComponent","proto","useReactTable","resolvedOptions","tableRef","setState","prev","Table","className","ref","jsx","cn","TableHeader","TableBody","TableFooter","TableRow","TableHead","TableCell","TableCaption","DEFAULT_PAGE_SIZE_OPTIONS","DataTable","searchKey","searchPlaceholder","showColumnToggle","showPagination","showRowSelection","pageSizeOptions","onRowClick","editable","onCellEdit","onCellValidate","enableColumnResizing","columnResizeMode","stickyHeader","emptyState","t","useLocale","setSorting","setColumnFilters","columnVisibility","setColumnVisibility","setRowSelection","tableColumns","Checkbox","jsxs","Input","_a","event","DropdownMenu","DropdownMenuTrigger","Button","ChevronDown","DropdownMenuContent","DropdownMenuCheckboxItem","_b","Search","Fragment","Select","SelectTrigger","SelectValue","SelectContent","size","SelectItem","createSortableHeader","label","SortableHeader","createActionsCell","actions","ActionsCell","MoreHorizontal","DropdownMenuLabel","DropdownMenuSeparator","action","DropdownMenuItem","TextEditor","onCommit","onCancel","placeholder","hasError","inputRef","handleKeyDown","NumberEditor","inputValue","setInputValue","handleChange","numVal","handleCommit","clamped","SelectEditor","handleValueChange","newValue","option","DateEditor","dateFormat","open","setOpen","formatDate","useFormatters","displayPlaceholder","handleSelect","date","handleOpenChange","isOpen","Popover","PopoverTrigger","CalendarIcon","PopoverContent","Calendar","CheckboxEditor","handleCheckedChange","checked","MultiSelectEditor","containerRef","MultiSelect","opt","EditableCell","initialValue","config","isEditing","setIsEditing","editValue","setEditValue","setError","isEditable","startEditing","commitEdit","validationError","cancelEdit","handleDoubleClick","displayValue","o","v","handleTabNavigation","direction","preventBlur","editorContent","Check","X","TooltipProvider","Tooltip","TooltipTrigger","TooltipContent","Pencil","createEditableCell","EditableCellWrapper","getValue","meta","exportToCsv","filename","delimiter","includeBOM","escapeField","headerRow","dataRows","csvContent","bom","blob","url","link","isInitial","memoizedFunction","_c","notUndefined","msg","approxEqual","debounce","targetWindow","ms","timeoutId","args","getRect","element","offsetWidth","offsetHeight","defaultKeyExtractor","defaultRangeExtractor","range","start","end","observeElementRect","handler","rect","width","height","observer","entries","run","entry","box","addEventListenerOptions","supportsScrollend","observeElementOffset","offset","fallback","createHandler","isScrolling","horizontal","isRtl","endHandler","registerScrollendEvent","measureElement","elementScroll","adjustments","behavior","toOffset","Virtualizer","_ro","get","target","opts2","sync","scrollElement","cached","measurements","furthestMeasurementsFound","furthestMeasurements","m","measurement","previousFurthestMeasurement","paddingStart","scrollMargin","getItemKey","enabled","lanes","itemSizeCache","laneLastIndex","cachedLane","lane","prevIndex","prevInLane","furthestMeasurement","measuredSize","outerSize","scrollOffset","calculateRange","startIndex","endIndex","rangeExtractor","overscan","node","attributeName","indexStr","prevNode","itemSize","delta","indexes","virtualItems","k","len","findNearestBinarySearch","doc","align","maxOffset","initialAlign","attempts","maxAttempts","tryScroll","currentAlign","offsetInfo","verify","currentOffset","afterInfo","scheduleRetry","endByLane","low","high","getCurrentValue","middle","currentValue","lastIndex","getOffset","endPerLane","pos","startPerLane","useIsomorphicLayoutEffect","useVirtualizerBase","useFlushSync","rerender","instance2","flushSync","useVirtualizer","VirtualDataTable","estimateRowHeight","parentRef","virtualizer","virtualRow","KPICard","title","description","trend","icon","loading","trendDirection","TrendIcon","TrendingUp","Minus","trendColor","Card","CardHeader","CardTitle","CardContent","StatCard","subtitle","iconBackground","EmptyState","Timeline","items","ActivityFeed","showAvatar","Avatar","AvatarImage","AvatarFallback","showSelectAll","maxHeight","visibleCount","totalCount","handleToggle","newColumns","handleSelectAll","allVisible","handleReset","ScrollArea","Eye","BulkActionsToolbar","selectedCount","selectedIds","onClearSelection","maxVisibleActions","visibleActions","overflowActions","PerPageSelector","resolvedLabel","QuickFilters","filters","onClearAll","activeFilterCount","Badge","FilterTags","tags","onRemove","maxVisible","controlledShowAll","defaultShowAll","onShowAllChange","showAll","setShowAll","useControllableState","visibleTags","hiddenCount","tag","FilterFieldSelector","fields","selectedField","f","ChevronsUpDown","Command","CommandInput","CommandList","CommandEmpty","CommandGroup","field","CommandItem","OPERATORS_BY_FIELD_TYPE","NO_VALUE_OPERATORS","FilterOperatorSelector","fieldType","renderOperatorLabel","operators","op","FilterValueInput","operator","valueTo","isBetween","DatePicker","FilterRule","rule","onUpdate","showRemove","handleFieldChange","fieldId","FilterGroup","group","onAddRule","onUpdateRule","onRemoveRule","onAddGroup","onRemoveGroup","onSetGroupLogic","borderColors","borderColor","Trash2","updates","childGroup","Plus","FilterPresets","presets","onLoad","onSave","onDelete","saveOpen","setSaveOpen","presetName","setPresetName","handleSave","preset","_idCounter","generateId","createEmptyRule","createEmptyGroup","logic","useFilterBuilder","defaultValue","controlledPresets","onPresetsChange","internalFilter","setInternalFilter","internalPresets","setInternalPresets","setFilter","updateGroup","groupId","walk","addRule","updateRule","ruleId","removeRule","addGroup","parentGroupId","removeGroup","setGroupLogic","clearAll","savePreset","name","updated","loadPreset","presetId","p","deletePreset","ruleCount","countRules","r","QueryFilterBuilder","compact","controlledExpanded","defaultExpanded","onExpandedChange","hookProps","setExpanded","filterContent","Filter","ChevronUp","FORECAST_CATEGORY_CONFIG","formatCurrency","currency","locale","getDelta","current","previous","pct","ForecastBucket","bucket","onClick","targetPct","SparklineChart","ForecastSummary","buckets","periodLabel","totalValue","totalDeals","closedValue","pipelineValue","closedPct","Progress","ForecastSkeleton","Skeleton","getInitials","n","ForecastBoard","owners","selectedOwnerId","onOwnerChange","onBucketClick","owner","ImportMapper","sourceColumns","targetFields","mappings","onMappingsChange","previewData","handleMappingChange","sourceColumn","targetField","getMappedTarget","usedTargets","mappedCount","unmappedRequired","preview","ArrowRight","SEVERITY_CONFIG","AlertCircle","AlertTriangle","Info","ValidationTable","onFixValue","onToggleSkip","showOnlyIssues","onShowOnlyIssuesChange","mappedFields","displayRows","Switch","Label","issueMap","issue","STEPS","BulkDataOps","step","validatedRows","onNext","onBack","onFileUpload","onConfirm","progress","summary","stepLabels","summaryLabels","renderConfirmSummary","controlledShowOnlyIssues","defaultShowOnlyIssues","fileInputRef","useRef","setShowOnlyIssues","resolvedStepLabels","resolvedSummaryLabels","stepIndex","s","handleFileDrop","file","handleFileSelect","stepId","Upload","FileSpreadsheet","MergePreview","records","conflicts","onResolveConflict","primaryRecordId","onPrimaryRecordChange","resolvedCount","record","conflict","recordId","TaskRow","task","rowHeight","onToggleCollapse","onTaskClick","hasChildren","ChevronRight","child","GanttSidebar","tasks","GanttBar","bar","x","y","barHeight","barY","cx","cy","progressWidth","rx","GanttChart","barPositions","totalWidth","totalHeight","todayX","showTodayMarker","colX","toDate","startOfDay","addDays","diffDays","isWeekend","day","isSameDay","flattenTasks","getColumnWidth","viewMode","formatDateLabel","getWeekNumber","firstDay","dayOfYear","getStepDays","useGanttPlanner","flatTasks","useMemo","dateRange","today","earliest","latest","padding","cols","colWidth","subLabel","rangeStart","taskStart","taskEnd","startOffset","duration","VIEW_MODE_OPTIONS","GanttPlanner","controlledTasks","defaultTasks","onTasksChange","controlledViewMode","defaultViewMode","onViewModeChange","viewModeLabels","hideToolbar","renderToolbar","onTaskChange","readOnly","sidebarWidth","setViewMode","setTasks","handleViewModeChange","mode","getViewModeLabel","handleToggleCollapse","taskId","toggle","list","findTask","found","changedTask","groupPermissions","permissions","groups","seen","idx","PermissionMatrix","roles","onBulkToggleRole","onBulkTogglePermission","permissionIds","isChecked","roleId","permId","isRoleAllChecked","pid","isPermAllChecked","cellClass","headerCellClass","role","perm","ScrollBar"],"mappings":"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","x_google_ignoreList":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,24,25,26]}