@senitix/ui 0.4.0 → 0.4.2
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.
- package/dist/accordion-BcwB0wwz.cjs +2 -0
- package/dist/accordion-BcwB0wwz.cjs.map +1 -0
- package/dist/accordion-BwnJKrKm.js +360 -0
- package/dist/accordion-BwnJKrKm.js.map +1 -0
- package/dist/appointment-scheduler-BoQQO51F.cjs +2 -0
- package/dist/appointment-scheduler-BoQQO51F.cjs.map +1 -0
- package/dist/appointment-scheduler-DHAs-mF_.js +192 -0
- package/dist/appointment-scheduler-DHAs-mF_.js.map +1 -0
- package/dist/arrow-right-CM3nmiZe.js +15 -0
- package/dist/arrow-right-CM3nmiZe.js.map +1 -0
- package/dist/arrow-right-vDxRZOfm.cjs +7 -0
- package/dist/arrow-right-vDxRZOfm.cjs.map +1 -0
- package/dist/avatar-BlEcWE7T.js +191 -0
- package/dist/avatar-BlEcWE7T.js.map +1 -0
- package/dist/avatar-Cl38Ye4J.cjs +2 -0
- package/dist/avatar-Cl38Ye4J.cjs.map +1 -0
- package/dist/badge-BZcdBG5J.cjs +23 -0
- package/dist/badge-BZcdBG5J.cjs.map +1 -0
- package/dist/badge-D0C_rP2l.js +157 -0
- package/dist/badge-D0C_rP2l.js.map +1 -0
- package/dist/button-BP_ug5gP.js +126 -0
- package/dist/button-BP_ug5gP.js.map +1 -0
- package/dist/button-CPuCii0R.cjs +2 -0
- package/dist/button-CPuCii0R.cjs.map +1 -0
- package/dist/{calendar-BFWc4IB7.js → calendar-86qoSnO7.js} +411 -462
- package/dist/calendar-86qoSnO7.js.map +1 -0
- package/dist/calendar-BH-AuyiB.cjs +7 -0
- package/dist/{calendar-SwL5isYC.cjs.map → calendar-BH-AuyiB.cjs.map} +1 -1
- package/dist/calendar-CSJ060ym.cjs +2 -0
- package/dist/calendar-CSJ060ym.cjs.map +1 -0
- package/dist/calendar-JUSWONQ0.js +17 -0
- package/dist/{calendar-ChJkFXXr.js.map → calendar-JUSWONQ0.js.map} +1 -1
- package/dist/{card-tMkUxpmW.cjs → card-CToWUN1K.cjs} +2 -2
- package/dist/{card-tMkUxpmW.cjs.map → card-CToWUN1K.cjs.map} +1 -1
- package/dist/{card-K4fxyYwE.js → card-yxbWFvZ1.js} +2 -2
- package/dist/{card-K4fxyYwE.js.map → card-yxbWFvZ1.js.map} +1 -1
- package/dist/checkbox-BmugT50K.cjs +2 -0
- package/dist/checkbox-BmugT50K.cjs.map +1 -0
- package/dist/{checkbox-CpOq5hkT.js → checkbox-CTa9e4SG.js} +95 -97
- package/dist/checkbox-CTa9e4SG.js.map +1 -0
- package/dist/chevron-left-5h87iFo_.cjs +7 -0
- package/dist/chevron-left-5h87iFo_.cjs.map +1 -0
- package/dist/chevron-left-DD5mQuvf.js +14 -0
- package/dist/chevron-left-DD5mQuvf.js.map +1 -0
- package/dist/chevron-right-D-TdAZ7l.cjs +7 -0
- package/dist/{chevron-right-Dvyd11q0.cjs.map → chevron-right-D-TdAZ7l.cjs.map} +1 -1
- package/dist/chevron-right-Di90aqSn.js +14 -0
- package/dist/{chevron-right-B3bovvh0.js.map → chevron-right-Di90aqSn.js.map} +1 -1
- package/dist/chevron-up-Bq55Db6X.cjs +7 -0
- package/dist/{chevron-up-B9fuiZhc.cjs.map → chevron-up-Bq55Db6X.cjs.map} +1 -1
- package/dist/chevron-up-Dr7EIn9V.js +12 -0
- package/dist/{chevron-up-CGtXOr51.js.map → chevron-up-Dr7EIn9V.js.map} +1 -1
- package/dist/clock-BjJE8PGr.js +15 -0
- package/dist/clock-BjJE8PGr.js.map +1 -0
- package/dist/clock-CnxBAA_O.cjs +7 -0
- package/dist/clock-CnxBAA_O.cjs.map +1 -0
- package/dist/command-BPtg-XK3.cjs +2 -0
- package/dist/command-BPtg-XK3.cjs.map +1 -0
- package/dist/command-VraXPLVI.js +404 -0
- package/dist/command-VraXPLVI.js.map +1 -0
- package/dist/components/builders/index.cjs.js +2 -0
- package/dist/components/builders/index.cjs.js.map +1 -0
- package/dist/components/builders/index.es.js +42 -0
- package/dist/components/builders/index.es.js.map +1 -0
- package/dist/components/charts/index.cjs.js +1 -1
- package/dist/components/charts/index.es.js +7 -6
- package/dist/components/charts/index.es.js.map +1 -1
- package/dist/components/data-display/index.cjs.js +1 -1
- package/dist/components/data-display/index.es.js +43 -20
- package/dist/components/dnd/index.cjs.js +1 -1
- package/dist/components/dnd/index.es.js +1 -1
- package/dist/components/feedback/index.cjs.js +1 -1
- package/dist/components/feedback/index.es.js +1 -1
- package/dist/components/forms/index.cjs.js +1 -1
- package/dist/components/forms/index.es.js +24 -23
- package/dist/components/forms/index.es.js.map +1 -1
- package/dist/components/layouts/index.cjs.js +1 -1
- package/dist/components/layouts/index.es.js +45 -21
- package/dist/components/messaging/index.cjs.js +2 -0
- package/dist/components/messaging/index.cjs.js.map +1 -0
- package/dist/components/messaging/index.es.js +15 -0
- package/dist/components/messaging/index.es.js.map +1 -0
- package/dist/components/navigation/index.cjs.js +1 -1
- package/dist/components/navigation/index.es.js +1 -1
- package/dist/components/scheduling/index.cjs.js +2 -0
- package/dist/components/scheduling/index.cjs.js.map +1 -0
- package/dist/components/scheduling/index.es.js +6 -0
- package/dist/components/scheduling/index.es.js.map +1 -0
- package/dist/components/ui/index.cjs.js +1 -1
- package/dist/components/ui/index.es.js +168 -158
- package/dist/components/ui/index.es.js.map +1 -1
- package/dist/dialog-BFBDL8_i.js +382 -0
- package/dist/dialog-BFBDL8_i.js.map +1 -0
- package/dist/dialog-DO5i1PED.cjs +6 -0
- package/dist/dialog-DO5i1PED.cjs.map +1 -0
- package/dist/dropdown-menu-CkCCV_tw.js +969 -0
- package/dist/dropdown-menu-CkCCV_tw.js.map +1 -0
- package/dist/dropdown-menu-ejikFvg2.cjs +7 -0
- package/dist/dropdown-menu-ejikFvg2.cjs.map +1 -0
- package/dist/ellipsis-CKhpjj5H.js +16 -0
- package/dist/{ellipsis-CiKEaUNP.js.map → ellipsis-CKhpjj5H.js.map} +1 -1
- package/dist/ellipsis-Dk7Wfc4i.cjs +7 -0
- package/dist/{ellipsis-BW2gWki8.cjs.map → ellipsis-Dk7Wfc4i.cjs.map} +1 -1
- package/dist/external-link-CGBqsrbm.cjs +7 -0
- package/dist/external-link-CGBqsrbm.cjs.map +1 -0
- package/dist/external-link-UeWW0ty3.js +16 -0
- package/dist/external-link-UeWW0ty3.js.map +1 -0
- package/dist/eye-Cved4eAo.cjs +7 -0
- package/dist/eye-Cved4eAo.cjs.map +1 -0
- package/dist/eye-KdCUpmO8.js +21 -0
- package/dist/eye-KdCUpmO8.js.map +1 -0
- package/dist/file-CHbdXCWO.js +15 -0
- package/dist/{file-wzTXnWqz.js.map → file-CHbdXCWO.js.map} +1 -1
- package/dist/file-CqYRamm8.cjs +7 -0
- package/dist/{file-V_hhCUhr.cjs.map → file-CqYRamm8.cjs.map} +1 -1
- package/dist/file-spreadsheet-CpySxI0-.cjs +7 -0
- package/dist/file-spreadsheet-CpySxI0-.cjs.map +1 -0
- package/dist/file-spreadsheet-EqZMR-mM.js +19 -0
- package/dist/file-spreadsheet-EqZMR-mM.js.map +1 -0
- package/dist/form-preview-BGdea5K7.cjs +111 -0
- package/dist/form-preview-BGdea5K7.cjs.map +1 -0
- package/dist/form-preview-C6WfeXyD.js +12075 -0
- package/dist/form-preview-C6WfeXyD.js.map +1 -0
- package/dist/full-calendar-CZMK_rPy.cjs +18 -0
- package/dist/full-calendar-CZMK_rPy.cjs.map +1 -0
- package/dist/full-calendar-CjaDgutS.js +2631 -0
- package/dist/full-calendar-CjaDgutS.js.map +1 -0
- package/dist/funnel-chart-Dfj1pOyV.cjs +6 -0
- package/dist/funnel-chart-Dfj1pOyV.cjs.map +1 -0
- package/dist/funnel-chart-o9qcEMgg.js +2952 -0
- package/dist/funnel-chart-o9qcEMgg.js.map +1 -0
- package/dist/global-search-Dhv8goH8.js +1331 -0
- package/dist/global-search-Dhv8goH8.js.map +1 -0
- package/dist/global-search-msFICB8l.cjs +22 -0
- package/dist/global-search-msFICB8l.cjs.map +1 -0
- package/dist/hooks/index.cjs.js +1 -1
- package/dist/hooks/index.es.js +9 -7
- package/dist/hooks/index.es.js.map +1 -1
- package/dist/{index-CwJPJKOE.js → index-BGUveO6l.js} +1077 -573
- package/dist/index-BGUveO6l.js.map +1 -0
- package/dist/{index-lT9bLt9X.cjs → index-Bhee6XHk.cjs} +2 -2
- package/dist/{index-lT9bLt9X.cjs.map → index-Bhee6XHk.cjs.map} +1 -1
- package/dist/index-CrSlyWAA.js +1090 -0
- package/dist/index-CrSlyWAA.js.map +1 -0
- package/dist/{index-Co9o9StL.js → index-D8-pHJim.js} +2 -2
- package/dist/{index-Co9o9StL.js.map → index-D8-pHJim.js.map} +1 -1
- package/dist/index-Dy_9oyP3.cjs +2 -0
- package/dist/index-Dy_9oyP3.cjs.map +1 -0
- package/dist/index-hnbbvGmb.cjs +21 -0
- package/dist/index-hnbbvGmb.cjs.map +1 -0
- package/dist/index.cjs.js +1 -1
- package/dist/index.es.js +434 -319
- package/dist/index.es.js.map +1 -1
- package/dist/input-Pfq8fkiV.js +2718 -0
- package/dist/input-Pfq8fkiV.js.map +1 -0
- package/dist/input-UBp7V7li.cjs +52 -0
- package/dist/input-UBp7V7li.cjs.map +1 -0
- package/dist/label-CExiitfO.js +50 -0
- package/dist/label-CExiitfO.js.map +1 -0
- package/dist/label-F0zGAiI2.cjs +2 -0
- package/dist/label-F0zGAiI2.cjs.map +1 -0
- package/dist/loader-circle-CBVYGIRp.js +14 -0
- package/dist/loader-circle-CBVYGIRp.js.map +1 -0
- package/dist/loader-circle-IaJKvYsP.cjs +7 -0
- package/dist/loader-circle-IaJKvYsP.cjs.map +1 -0
- package/dist/locale-provider-BHGNO4j7.js +1786 -0
- package/dist/locale-provider-BHGNO4j7.js.map +1 -0
- package/dist/locale-provider-BScpm-eC.cjs +2 -0
- package/dist/locale-provider-BScpm-eC.cjs.map +1 -0
- package/dist/locale-selector-D0jV4-90.cjs +12 -0
- package/dist/locale-selector-D0jV4-90.cjs.map +1 -0
- package/dist/locale-selector-n75sM9qA.js +1740 -0
- package/dist/locale-selector-n75sM9qA.js.map +1 -0
- package/dist/map-pin-CHh0xl6i.js +46 -0
- package/dist/map-pin-CHh0xl6i.js.map +1 -0
- package/dist/map-pin-DGObSZ40.cjs +17 -0
- package/dist/map-pin-DGObSZ40.cjs.map +1 -0
- package/dist/message-square-B_xLey5D.js +14 -0
- package/dist/message-square-B_xLey5D.js.map +1 -0
- package/dist/message-square-_69ua8rH.cjs +7 -0
- package/dist/message-square-_69ua8rH.cjs.map +1 -0
- package/dist/minus-BUFkTM0k.cjs +7 -0
- package/dist/{minus-BXBFZSZs.cjs.map → minus-BUFkTM0k.cjs.map} +1 -1
- package/dist/minus-DJ0tmymW.js +12 -0
- package/dist/{minus-DvlYtl96.js.map → minus-DJ0tmymW.js.map} +1 -1
- package/dist/multi-container-CytCGxsc.cjs +7 -0
- package/dist/multi-container-CytCGxsc.cjs.map +1 -0
- package/dist/multi-container-DmkgnCJN.js +799 -0
- package/dist/multi-container-DmkgnCJN.js.map +1 -0
- package/dist/multi-select-D9akBt7B.js +224 -0
- package/dist/multi-select-D9akBt7B.js.map +1 -0
- package/dist/multi-select-DxN_LuXC.cjs +7 -0
- package/dist/multi-select-DxN_LuXC.cjs.map +1 -0
- package/dist/pencil-BJULwaDl.cjs +12 -0
- package/dist/pencil-BJULwaDl.cjs.map +1 -0
- package/dist/pencil-HL0trGIs.js +31 -0
- package/dist/pencil-HL0trGIs.js.map +1 -0
- package/dist/permission-matrix-CTQ1OiTO.js +6128 -0
- package/dist/permission-matrix-CTQ1OiTO.js.map +1 -0
- package/dist/permission-matrix-DRu-cV44.cjs +93 -0
- package/dist/permission-matrix-DRu-cV44.cjs.map +1 -0
- package/dist/phone-B0J1dGIE.js +31 -0
- package/dist/phone-B0J1dGIE.js.map +1 -0
- package/dist/phone-DPA6vucM.cjs +12 -0
- package/dist/phone-DPA6vucM.cjs.map +1 -0
- package/dist/plus-Bcuujcqd.cjs +7 -0
- package/dist/{plus-8wKRkVu-.cjs.map → plus-Bcuujcqd.cjs.map} +1 -1
- package/dist/plus-D7DMDKb8.js +15 -0
- package/dist/{plus-CJD68KQD.js.map → plus-D7DMDKb8.js.map} +1 -1
- package/dist/popover-Bba1ELMX.cjs +2 -0
- package/dist/popover-Bba1ELMX.cjs.map +1 -0
- package/dist/popover-CZWAuYUL.js +281 -0
- package/dist/popover-CZWAuYUL.js.map +1 -0
- package/dist/progress-BPpsmZ48.js +218 -0
- package/dist/progress-BPpsmZ48.js.map +1 -0
- package/dist/progress-BrzjVhWG.cjs +22 -0
- package/dist/progress-BrzjVhWG.cjs.map +1 -0
- package/dist/providers/index.cjs.js +1 -1
- package/dist/providers/index.es.js +1 -1
- package/dist/radio-group-B9RM_c7e.js +244 -0
- package/dist/radio-group-B9RM_c7e.js.map +1 -0
- package/dist/radio-group-_n8TTqNQ.cjs +2 -0
- package/dist/radio-group-_n8TTqNQ.cjs.map +1 -0
- package/dist/record-dialog-footer-CQPnqhfv.js +2577 -0
- package/dist/record-dialog-footer-CQPnqhfv.js.map +1 -0
- package/dist/record-dialog-footer-DLH96eAV.cjs +37 -0
- package/dist/record-dialog-footer-DLH96eAV.cjs.map +1 -0
- package/dist/scroll-area-CGNbDUBQ.js +889 -0
- package/dist/scroll-area-CGNbDUBQ.js.map +1 -0
- package/dist/scroll-area-HsTSI_58.cjs +22 -0
- package/dist/scroll-area-HsTSI_58.cjs.map +1 -0
- package/dist/select-CEsYpjPi.cjs +2 -0
- package/dist/select-CEsYpjPi.cjs.map +1 -0
- package/dist/select-Ce2C2acZ.js +994 -0
- package/dist/select-Ce2C2acZ.js.map +1 -0
- package/dist/send-DIkOd-pu.js +21 -0
- package/dist/send-DIkOd-pu.js.map +1 -0
- package/dist/send-H6HC-rS8.cjs +7 -0
- package/dist/send-H6HC-rS8.cjs.map +1 -0
- package/dist/shared-inbox-Bv0AgLew.js +702 -0
- package/dist/shared-inbox-Bv0AgLew.js.map +1 -0
- package/dist/shared-inbox-DWEKfDX3.cjs +22 -0
- package/dist/shared-inbox-DWEKfDX3.cjs.map +1 -0
- package/dist/sheet-C0-aBGln.cjs +2 -0
- package/dist/sheet-C0-aBGln.cjs.map +1 -0
- package/dist/sheet-Cyq_eDFW.js +147 -0
- package/dist/sheet-Cyq_eDFW.js.map +1 -0
- package/dist/{skeleton-BmGbfJw3.js → skeleton-C_dwS3_6.js} +2 -2
- package/dist/{skeleton-BmGbfJw3.js.map → skeleton-C_dwS3_6.js.map} +1 -1
- package/dist/{skeleton-BSwwYaQU.cjs → skeleton-D3YsjVWD.cjs} +2 -2
- package/dist/{skeleton-BSwwYaQU.cjs.map → skeleton-D3YsjVWD.cjs.map} +1 -1
- package/dist/sortable.esm-5DsiICDg.cjs +6 -0
- package/dist/{sortable.esm-DcQYlXi3.cjs.map → sortable.esm-5DsiICDg.cjs.map} +1 -1
- package/dist/{sortable.esm-Blhf_jh1.js → sortable.esm-Cb8oRBzU.js} +42 -42
- package/dist/{sortable.esm-Blhf_jh1.js.map → sortable.esm-Cb8oRBzU.js.map} +1 -1
- package/dist/sparkline-chart-BP4bk24J.js +15881 -0
- package/dist/sparkline-chart-BP4bk24J.js.map +1 -0
- package/dist/sparkline-chart-D6SLZVjp.cjs +79 -0
- package/dist/sparkline-chart-D6SLZVjp.cjs.map +1 -0
- package/dist/styles.css +1 -0
- package/dist/switch-AEZvZSRV.cjs +2 -0
- package/dist/switch-AEZvZSRV.cjs.map +1 -0
- package/dist/switch-BF4LLvaU.js +147 -0
- package/dist/switch-BF4LLvaU.js.map +1 -0
- package/dist/table-2-Bn-YjZ9s.cjs +17 -0
- package/dist/table-2-Bn-YjZ9s.cjs.map +1 -0
- package/dist/table-2-C7E_N72K.js +52 -0
- package/dist/table-2-C7E_N72K.js.map +1 -0
- package/dist/textarea-4qZDuQ-C.js +206 -0
- package/dist/textarea-4qZDuQ-C.js.map +1 -0
- package/dist/textarea-Bq_zyt0L.cjs +2 -0
- package/dist/textarea-Bq_zyt0L.cjs.map +1 -0
- package/dist/tooltip-Dd7le9EO.cjs +2 -0
- package/dist/tooltip-Dd7le9EO.cjs.map +1 -0
- package/dist/tooltip-Dee-pNPI.js +338 -0
- package/dist/tooltip-Dee-pNPI.js.map +1 -0
- package/dist/trash-2-B3EP3JfM.js +18 -0
- package/dist/trash-2-B3EP3JfM.js.map +1 -0
- package/dist/trash-2-DWEeKlWT.cjs +7 -0
- package/dist/trash-2-DWEeKlWT.cjs.map +1 -0
- package/dist/trending-up-ljWtN4pj.js +15 -0
- package/dist/{trending-up-DPwlYzQb.js.map → trending-up-ljWtN4pj.js.map} +1 -1
- package/dist/trending-up-mLgmkp--.cjs +7 -0
- package/dist/{trending-up-D3Nfrhi3.cjs.map → trending-up-mLgmkp--.cjs.map} +1 -1
- package/dist/upload-2tm-XihE.cjs +7 -0
- package/dist/upload-2tm-XihE.cjs.map +1 -0
- package/dist/upload-C_JDP8O0.js +16 -0
- package/dist/upload-C_JDP8O0.js.map +1 -0
- package/dist/use-controllable-state-3ATd6Fqd.cjs +2 -0
- package/dist/use-controllable-state-3ATd6Fqd.cjs.map +1 -0
- package/dist/use-controllable-state-CEa-Zlq6.js +23 -0
- package/dist/use-controllable-state-CEa-Zlq6.js.map +1 -0
- package/dist/use-formatters-Bb0fX1lW.cjs +2 -0
- package/dist/{use-formatters-d97RVcmg.cjs.map → use-formatters-Bb0fX1lW.cjs.map} +1 -1
- package/dist/{use-formatters-l1_2c8z0.js → use-formatters-xeMS4gdV.js} +1317 -1337
- package/dist/{use-formatters-l1_2c8z0.js.map → use-formatters-xeMS4gdV.js.map} +1 -1
- package/dist/utils/index.cjs.js +1 -1
- package/dist/utils/index.es.js +1 -1
- package/dist/welcome-card-Ccbl_miQ.js +1007 -0
- package/dist/welcome-card-Ccbl_miQ.js.map +1 -0
- package/dist/welcome-card-D-ShMkaS.cjs +37 -0
- package/dist/welcome-card-D-ShMkaS.cjs.map +1 -0
- package/dist/x-BBkgEhUv.js +15 -0
- package/dist/x-BBkgEhUv.js.map +1 -0
- package/dist/x-D-El5XAY.cjs +7 -0
- package/dist/x-D-El5XAY.cjs.map +1 -0
- package/package.json +33 -13
- package/dist/avatar-C0aVNCG9.cjs +0 -2
- package/dist/avatar-C0aVNCG9.cjs.map +0 -1
- package/dist/avatar-CN6wcrqY.js +0 -288
- package/dist/avatar-CN6wcrqY.js.map +0 -1
- package/dist/calendar-BFWc4IB7.js.map +0 -1
- package/dist/calendar-BUm7YrNf.cjs +0 -2
- package/dist/calendar-BUm7YrNf.cjs.map +0 -1
- package/dist/calendar-ChJkFXXr.js +0 -11
- package/dist/calendar-SwL5isYC.cjs +0 -2
- package/dist/checkbox-CpOq5hkT.js.map +0 -1
- package/dist/checkbox-D7-LQyCl.cjs +0 -2
- package/dist/checkbox-D7-LQyCl.cjs.map +0 -1
- package/dist/chevron-down-DHdXqOqK.cjs +0 -2
- package/dist/chevron-down-DHdXqOqK.cjs.map +0 -1
- package/dist/chevron-down-DJ1_YIFu.js +0 -8
- package/dist/chevron-down-DJ1_YIFu.js.map +0 -1
- package/dist/chevron-right-B3bovvh0.js +0 -8
- package/dist/chevron-right-Dvyd11q0.cjs +0 -2
- package/dist/chevron-up-B9fuiZhc.cjs +0 -2
- package/dist/chevron-up-CGtXOr51.js +0 -6
- package/dist/createLucideIcon-BbeNo6vq.js +0 -56
- package/dist/createLucideIcon-BbeNo6vq.js.map +0 -1
- package/dist/createLucideIcon-i5GEhNMV.cjs +0 -2
- package/dist/createLucideIcon-i5GEhNMV.cjs.map +0 -1
- package/dist/ellipsis-BW2gWki8.cjs +0 -2
- package/dist/ellipsis-CiKEaUNP.js +0 -10
- package/dist/file-V_hhCUhr.cjs +0 -2
- package/dist/file-wzTXnWqz.js +0 -9
- package/dist/filter-tags-DjUaNXHR.cjs +0 -5
- package/dist/filter-tags-DjUaNXHR.cjs.map +0 -1
- package/dist/filter-tags-i_I8qV1N.js +0 -2658
- package/dist/filter-tags-i_I8qV1N.js.map +0 -1
- package/dist/full-calendar-7ac2FFU6.js +0 -3518
- package/dist/full-calendar-7ac2FFU6.js.map +0 -1
- package/dist/full-calendar-Cpeh5xMP.cjs +0 -8
- package/dist/full-calendar-Cpeh5xMP.cjs.map +0 -1
- package/dist/global-search-UNXjoFlI.cjs +0 -2
- package/dist/global-search-UNXjoFlI.cjs.map +0 -1
- package/dist/global-search-h1rVbP2q.js +0 -1188
- package/dist/global-search-h1rVbP2q.js.map +0 -1
- package/dist/index-CwJPJKOE.js.map +0 -1
- package/dist/index-CzVK9Zyb.cjs +0 -6
- package/dist/index-CzVK9Zyb.cjs.map +0 -1
- package/dist/index-l828OqQN.js +0 -288
- package/dist/index-l828OqQN.js.map +0 -1
- package/dist/index-lGzB9daF.cjs +0 -2
- package/dist/index-lGzB9daF.cjs.map +0 -1
- package/dist/input-CZrckPLk.cjs +0 -42
- package/dist/input-CZrckPLk.cjs.map +0 -1
- package/dist/input-D4AoiWxo.js +0 -3629
- package/dist/input-D4AoiWxo.js.map +0 -1
- package/dist/locale-provider-DHMwuneF.cjs +0 -2
- package/dist/locale-provider-DHMwuneF.cjs.map +0 -1
- package/dist/locale-provider-DanG6RRG.js +0 -1012
- package/dist/locale-provider-DanG6RRG.js.map +0 -1
- package/dist/locale-selector-Ppe0KTi-.cjs +0 -2
- package/dist/locale-selector-Ppe0KTi-.cjs.map +0 -1
- package/dist/locale-selector-xn2GpdP9.js +0 -1745
- package/dist/locale-selector-xn2GpdP9.js.map +0 -1
- package/dist/minus-BXBFZSZs.cjs +0 -2
- package/dist/minus-DvlYtl96.js +0 -6
- package/dist/multi-container-C2UpSw5f.js +0 -731
- package/dist/multi-container-C2UpSw5f.js.map +0 -1
- package/dist/multi-container-DMKL8c9B.cjs +0 -2
- package/dist/multi-container-DMKL8c9B.cjs.map +0 -1
- package/dist/pipeline-By5_8AFg.cjs +0 -2
- package/dist/pipeline-By5_8AFg.cjs.map +0 -1
- package/dist/pipeline-D-QNSU0U.js +0 -1036
- package/dist/pipeline-D-QNSU0U.js.map +0 -1
- package/dist/plus-8wKRkVu-.cjs +0 -2
- package/dist/plus-CJD68KQD.js +0 -9
- package/dist/popover-4V4sGe1U.js +0 -765
- package/dist/popover-4V4sGe1U.js.map +0 -1
- package/dist/popover-ivh-plLc.cjs +0 -2
- package/dist/popover-ivh-plLc.cjs.map +0 -1
- package/dist/progress-CFnuLqnS.cjs +0 -7
- package/dist/progress-CFnuLqnS.cjs.map +0 -1
- package/dist/progress-D5AsrWa6.js +0 -222
- package/dist/progress-D5AsrWa6.js.map +0 -1
- package/dist/scroll-area-DQeqDp3Y.js +0 -952
- package/dist/scroll-area-DQeqDp3Y.js.map +0 -1
- package/dist/scroll-area-DYOiJMXh.cjs +0 -2
- package/dist/scroll-area-DYOiJMXh.cjs.map +0 -1
- package/dist/select-C1rNBi6c.js +0 -974
- package/dist/select-C1rNBi6c.js.map +0 -1
- package/dist/select-m-Mqwxu3.cjs +0 -2
- package/dist/select-m-Mqwxu3.cjs.map +0 -1
- package/dist/separator-DBUivkHq.cjs +0 -2
- package/dist/separator-DBUivkHq.cjs.map +0 -1
- package/dist/separator-DsfoJx-2.js +0 -395
- package/dist/separator-DsfoJx-2.js.map +0 -1
- package/dist/sheet-BVWCpq7E.js +0 -84
- package/dist/sheet-BVWCpq7E.js.map +0 -1
- package/dist/sheet-mKiFLVnK.cjs +0 -2
- package/dist/sheet-mKiFLVnK.cjs.map +0 -1
- package/dist/sortable.esm-DcQYlXi3.cjs +0 -6
- package/dist/sparkline-chart-Da-ehDGv.js +0 -21082
- package/dist/sparkline-chart-Da-ehDGv.js.map +0 -1
- package/dist/sparkline-chart-ca3uTzVK.cjs +0 -68
- package/dist/sparkline-chart-ca3uTzVK.cjs.map +0 -1
- package/dist/trending-up-D3Nfrhi3.cjs +0 -2
- package/dist/trending-up-DPwlYzQb.js +0 -9
- package/dist/ui.css +0 -1
- package/dist/use-formatters-d97RVcmg.cjs +0 -2
- package/dist/welcome-card-CPolYl1D.cjs +0 -2
- package/dist/welcome-card-CPolYl1D.cjs.map +0 -1
- package/dist/welcome-card-CxMJZ8bv.js +0 -963
- package/dist/welcome-card-CxMJZ8bv.js.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"permission-matrix-CTQ1OiTO.js","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","NumberEditor","inputValue","setInputValue","handleChange","numVal","handleCommit","clamped","SelectEditor","newValue","option","DateEditor","dateFormat","open","setOpen","formatDate","useFormatters","displayPlaceholder","handleSelect","date","handleOpenChange","isOpen","handleKeyDown","Popover","PopoverTrigger","CalendarIcon","PopoverContent","Calendar","CheckboxEditor","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]}
|