@jmruthers/pace-core 0.2.7 → 0.4.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (982) hide show
  1. package/CHANGELOG.md +1 -26
  2. package/README.md +229 -231
  3. package/dist/{DataTable-EEUDXPE5.js → DataTable-2LB6HI6V.js} +17 -10
  4. package/dist/{DataTable-C1AEm9Cx.d.ts → DataTable-BDBqkU-i.d.ts} +51 -23
  5. package/dist/{PublicLoadingSpinner-DztrzuJr.d.ts → Table-CIm9IWqk.d.ts} +122 -635
  6. package/dist/UnifiedAuthProvider-V7y63NjT.d.ts +88 -0
  7. package/dist/{api-ETQ6YJ3C.js → api-AIJ3IJX3.js} +4 -6
  8. package/dist/{appConfig-BVGyuvI7.d.ts → appConfig-fB1pP_v3.d.ts} +1 -1
  9. package/dist/{audit-BUW3LMJB.js → audit-PD5L5ZSC.js} +3 -3
  10. package/dist/{chunk-ETEJVKYK.js → chunk-4MCJAK7J.js} +4927 -504
  11. package/dist/chunk-4MCJAK7J.js.map +1 -0
  12. package/dist/{chunk-CDQ3PX7L.js → chunk-4ZTIEYU2.js} +1 -1
  13. package/dist/chunk-4ZTIEYU2.js.map +1 -0
  14. package/dist/{chunk-PLDDJCW6.js → chunk-DC5AMYBS.js} +5 -15
  15. package/dist/{chunk-HEMJ4SUJ.js → chunk-H4PZ4B3Y.js} +27 -124
  16. package/dist/chunk-H4PZ4B3Y.js.map +1 -0
  17. package/dist/{chunk-HNDFPXUU.js → chunk-IOX76PSM.js} +28 -270
  18. package/dist/chunk-IOX76PSM.js.map +1 -0
  19. package/dist/{chunk-TIVL4UQ7.js → chunk-JUUNUW3O.js} +5 -14
  20. package/dist/chunk-JUUNUW3O.js.map +1 -0
  21. package/dist/chunk-KK6WIDK6.js +63 -0
  22. package/dist/chunk-KK6WIDK6.js.map +1 -0
  23. package/dist/chunk-U7DY5T33.js +11 -0
  24. package/dist/chunk-U7DY5T33.js.map +1 -0
  25. package/dist/{chunk-SS3E6QLB.js → chunk-WHLSWC6W.js} +61 -16
  26. package/dist/chunk-WHLSWC6W.js.map +1 -0
  27. package/dist/chunk-XI7QFSSC.js +790 -0
  28. package/dist/chunk-XI7QFSSC.js.map +1 -0
  29. package/dist/chunk-XIJMMBDD.js +73 -0
  30. package/dist/chunk-XIJMMBDD.js.map +1 -0
  31. package/dist/{chunk-7BNPOCLL.js → chunk-YNU5QJ4S.js} +5 -22
  32. package/dist/chunk-YNU5QJ4S.js.map +1 -0
  33. package/dist/chunk-YWYCNGWH.js +2070 -0
  34. package/dist/chunk-YWYCNGWH.js.map +1 -0
  35. package/dist/chunk-ZJ3UKPIW.js +952 -0
  36. package/dist/chunk-ZJ3UKPIW.js.map +1 -0
  37. package/dist/components.d.ts +10 -906
  38. package/dist/components.js +77 -3255
  39. package/dist/components.js.map +1 -1
  40. package/dist/{database-C3Szpi5J.d.ts → database-CAMsquLm.d.ts} +11 -28
  41. package/dist/hooks.d.ts +6 -7
  42. package/dist/hooks.js +11 -35
  43. package/dist/hooks.js.map +1 -1
  44. package/dist/index.d.ts +111 -245
  45. package/dist/index.js +178 -187
  46. package/dist/index.js.map +1 -1
  47. package/dist/{organisation-CO3Sh3_D.d.ts → organisation-DLNNQhPB.d.ts} +1 -1
  48. package/dist/providers.d.ts +4 -4
  49. package/dist/providers.js +5 -19
  50. package/dist/rbac/index.d.ts +5 -61
  51. package/dist/rbac/index.js +93 -256
  52. package/dist/rbac/index.js.map +1 -1
  53. package/dist/{types-DiRQsGJs.d.ts → types-Bavn44NW.d.ts} +36 -71
  54. package/dist/types.d.ts +5 -5
  55. package/dist/types.js +2 -7
  56. package/dist/types.js.map +1 -1
  57. package/dist/{unified-CM7T0aTK.d.ts → unified-BtRpPbmp.d.ts} +2 -1
  58. package/dist/useAppConfig-CZNJJsT_.d.ts +148 -0
  59. package/dist/utils.d.ts +60 -83
  60. package/dist/utils.js +55633 -277
  61. package/dist/utils.js.map +1 -1
  62. package/dist/validation.d.ts +1 -1
  63. package/dist/validation.js +1 -1
  64. package/docs/README.md +32 -46
  65. package/docs/api/README.md +229 -231
  66. package/docs/api/classes/ErrorBoundary.md +1 -1
  67. package/docs/api/interfaces/AggregateConfig.md +4 -4
  68. package/docs/api/interfaces/ButtonProps.md +2 -2
  69. package/docs/api/interfaces/CardProps.md +2 -2
  70. package/docs/api/interfaces/ColorPalette.md +1 -1
  71. package/docs/api/interfaces/ColorShade.md +1 -1
  72. package/docs/api/interfaces/DataTableAction.md +7 -85
  73. package/docs/api/interfaces/DataTableColumn.md +12 -131
  74. package/docs/api/interfaces/DataTableProps.md +274 -64
  75. package/docs/api/interfaces/DataTableToolbarButton.md +7 -7
  76. package/docs/api/interfaces/EmptyStateConfig.md +5 -5
  77. package/docs/api/interfaces/EventContextType.md +7 -7
  78. package/docs/api/interfaces/EventProviderProps.md +2 -2
  79. package/docs/api/interfaces/FooterProps.md +1 -1
  80. package/docs/api/interfaces/InputProps.md +2 -2
  81. package/docs/api/interfaces/LabelProps.md +1 -1
  82. package/docs/api/interfaces/LoginFormProps.md +1 -1
  83. package/docs/api/interfaces/NavigationItem.md +1 -1
  84. package/docs/api/interfaces/NavigationMenuProps.md +1 -1
  85. package/docs/api/interfaces/Organisation.md +1 -1
  86. package/docs/api/interfaces/OrganisationContextType.md +1 -1
  87. package/docs/api/interfaces/OrganisationMembership.md +1 -1
  88. package/docs/api/interfaces/OrganisationProviderProps.md +1 -1
  89. package/docs/api/interfaces/OrganisationSecurityError.md +1 -1
  90. package/docs/api/interfaces/PaceAppLayoutProps.md +26 -26
  91. package/docs/api/interfaces/PaceLoginPageProps.md +1 -1
  92. package/docs/api/interfaces/PaletteData.md +1 -1
  93. package/docs/api/interfaces/StyleImport.md +2 -2
  94. package/docs/api/interfaces/ToastActionElement.md +1 -1
  95. package/docs/api/interfaces/ToastProps.md +1 -1
  96. package/docs/api/interfaces/UnifiedAuthContextType.md +46 -447
  97. package/docs/api/interfaces/UnifiedAuthProviderProps.md +9 -95
  98. package/docs/api/interfaces/UserEventAccess.md +14 -14
  99. package/docs/api/interfaces/UserMenuProps.md +6 -6
  100. package/docs/api/interfaces/UserProfile.md +1 -1
  101. package/docs/api/modules.md +773 -1631
  102. package/docs/api-reference/components.md +43 -761
  103. package/docs/api-reference/hooks.md +0 -126
  104. package/docs/api-reference/providers.md +65 -141
  105. package/docs/api-reference/types.md +36 -66
  106. package/docs/api-reference/utilities.md +1 -1
  107. package/docs/architecture/README.md +2 -1
  108. package/docs/consuming-app-example.md +96 -42
  109. package/docs/core-concepts/events.md +3 -3
  110. package/docs/core-concepts/organisations.md +1 -0
  111. package/docs/core-concepts/rbac-system.md +10 -23
  112. package/docs/documentation-style-checklist.md +2 -8
  113. package/docs/getting-started/examples/README.md +1 -15
  114. package/docs/getting-started/examples/basic-auth-app.md +119 -444
  115. package/docs/getting-started/examples/full-featured-app.md +6 -6
  116. package/docs/getting-started/installation.md +52 -231
  117. package/docs/getting-started/quick-start.md +24 -121
  118. package/docs/implementation-guides/app-layout.md +108 -133
  119. package/docs/implementation-guides/data-tables.md +29 -1011
  120. package/docs/implementation-guides/forms.md +3 -3
  121. package/docs/implementation-guides/large-datasets.md +2 -2
  122. package/docs/implementation-guides/navigation.md +1 -1
  123. package/docs/implementation-guides/permission-enforcement.md +4 -4
  124. package/docs/migration/README.md +8 -18
  125. package/docs/migration/rbac-migration.md +0 -50
  126. package/docs/migration-guide.md +104 -51
  127. package/docs/performance/README.md +4 -1
  128. package/docs/quick-reference.md +36 -53
  129. package/docs/rbac/README.md +69 -136
  130. package/docs/rbac/api-reference.md +8 -39
  131. package/docs/rbac/examples.md +66 -237
  132. package/docs/rbac/getting-started.md +16 -131
  133. package/docs/rbac/quick-start.md +323 -499
  134. package/docs/rbac/troubleshooting.md +262 -240
  135. package/docs/security/README.md +1 -50
  136. package/docs/styles/README.md +117 -143
  137. package/docs/testing/README.md +10 -6
  138. package/docs/troubleshooting/common-issues.md +14 -604
  139. package/docs/usage.md +90 -28
  140. package/docs/visual-testing.md +7 -0
  141. package/package.json +24 -43
  142. package/dist/UnifiedAuthProvider-w66zSCUf.d.ts +0 -160
  143. package/dist/appNameResolver-7GHF5ED2.js +0 -22
  144. package/dist/chunk-2V3Y6YBC.js +0 -114
  145. package/dist/chunk-2V3Y6YBC.js.map +0 -1
  146. package/dist/chunk-7BNPOCLL.js.map +0 -1
  147. package/dist/chunk-BEZRLNK3.js +0 -1744
  148. package/dist/chunk-BEZRLNK3.js.map +0 -1
  149. package/dist/chunk-C5G2A4PO.js +0 -1349
  150. package/dist/chunk-C5G2A4PO.js.map +0 -1
  151. package/dist/chunk-CDQ3PX7L.js.map +0 -1
  152. package/dist/chunk-ETEJVKYK.js.map +0 -1
  153. package/dist/chunk-EWKPTNPO.js +0 -5139
  154. package/dist/chunk-EWKPTNPO.js.map +0 -1
  155. package/dist/chunk-HEMJ4SUJ.js.map +0 -1
  156. package/dist/chunk-HNDFPXUU.js.map +0 -1
  157. package/dist/chunk-MZBUOP4P.js +0 -119
  158. package/dist/chunk-MZBUOP4P.js.map +0 -1
  159. package/dist/chunk-N2EUGZRW.js +0 -98
  160. package/dist/chunk-N2EUGZRW.js.map +0 -1
  161. package/dist/chunk-NQ4TOOO6.js +0 -20
  162. package/dist/chunk-NQ4TOOO6.js.map +0 -1
  163. package/dist/chunk-OHXGNT3K.js +0 -21
  164. package/dist/chunk-OHXGNT3K.js.map +0 -1
  165. package/dist/chunk-PLDDJCW6.js.map +0 -1
  166. package/dist/chunk-RRUYHORU.js +0 -3431
  167. package/dist/chunk-RRUYHORU.js.map +0 -1
  168. package/dist/chunk-SS3E6QLB.js.map +0 -1
  169. package/dist/chunk-TIVL4UQ7.js.map +0 -1
  170. package/dist/chunk-VYG4AXYW.js +0 -388
  171. package/dist/chunk-VYG4AXYW.js.map +0 -1
  172. package/dist/chunk-YDJW5XTN.js +0 -84
  173. package/dist/chunk-YDJW5XTN.js.map +0 -1
  174. package/dist/styles/core.css +0 -422
  175. package/dist/styles/fonts/georama-italic.woff2 +0 -0
  176. package/dist/styles/fonts/georama.woff2 +0 -0
  177. package/dist/styles/fonts/open-sans-italic.woff2 +0 -0
  178. package/dist/styles/fonts/open-sans.woff2 +0 -0
  179. package/dist/styles/fonts/reddit-mono.woff2 +0 -0
  180. package/dist/styles/index.d.ts +0 -36
  181. package/dist/styles/index.js +0 -24
  182. package/dist/styles/index.js.map +0 -1
  183. package/dist/theming/runtime.d.ts +0 -73
  184. package/dist/theming/runtime.js +0 -16
  185. package/dist/theming/runtime.js.map +0 -1
  186. package/dist/usePublicRouteParams-B6i0KtXW.d.ts +0 -477
  187. package/docs/INDEX.md +0 -192
  188. package/docs/api/classes/PublicErrorBoundary.md +0 -132
  189. package/docs/api/interfaces/EventLogoProps.md +0 -152
  190. package/docs/api/interfaces/FileSizeLimits.md +0 -7
  191. package/docs/api/interfaces/FileUploadProps.md +0 -154
  192. package/docs/api/interfaces/InactivityWarningModalProps.md +0 -115
  193. package/docs/api/interfaces/PublicErrorBoundaryProps.md +0 -94
  194. package/docs/api/interfaces/PublicErrorBoundaryState.md +0 -68
  195. package/docs/api/interfaces/PublicLoadingSpinnerProps.md +0 -86
  196. package/docs/api/interfaces/PublicPageFooterProps.md +0 -112
  197. package/docs/api/interfaces/PublicPageHeaderProps.md +0 -138
  198. package/docs/api/interfaces/PublicPageLayoutProps.md +0 -138
  199. package/docs/api/interfaces/StorageConfig.md +0 -41
  200. package/docs/api/interfaces/StorageFileInfo.md +0 -74
  201. package/docs/api/interfaces/StorageFileMetadata.md +0 -140
  202. package/docs/api/interfaces/StorageListOptions.md +0 -86
  203. package/docs/api/interfaces/StorageListResult.md +0 -41
  204. package/docs/api/interfaces/StorageUploadOptions.md +0 -88
  205. package/docs/api/interfaces/StorageUploadResult.md +0 -63
  206. package/docs/api/interfaces/StorageUrlOptions.md +0 -47
  207. package/docs/api/interfaces/UseInactivityTrackerOptions.md +0 -136
  208. package/docs/api/interfaces/UseInactivityTrackerReturn.md +0 -123
  209. package/docs/api/interfaces/UsePublicEventLogoOptions.md +0 -87
  210. package/docs/api/interfaces/UsePublicEventLogoReturn.md +0 -81
  211. package/docs/api/interfaces/UsePublicEventOptions.md +0 -34
  212. package/docs/api/interfaces/UsePublicEventReturn.md +0 -68
  213. package/docs/api/interfaces/UsePublicRouteParamsReturn.md +0 -94
  214. package/docs/best-practices/README.md +0 -400
  215. package/docs/consuming-app-vite-config.md +0 -233
  216. package/docs/examples/navigation-menu-auth-fix.md +0 -344
  217. package/docs/implementation-guides/hierarchical-datatable.md +0 -850
  218. package/docs/implementation-guides/public-pages.md +0 -752
  219. package/docs/migration/quick-migration-guide.md +0 -320
  220. package/docs/migration/v0.4.15-tailwind-scanning.md +0 -272
  221. package/docs/migration/v0.4.16-css-first-approach.md +0 -306
  222. package/docs/migration/v0.4.17-source-path-fix.md +0 -229
  223. package/docs/print-components/README.md +0 -258
  224. package/docs/print-components/api-reference.md +0 -636
  225. package/docs/print-components/examples/README.md +0 -204
  226. package/docs/print-components/examples/basic-report.tsx +0 -92
  227. package/docs/print-components/examples/card-catalog.tsx +0 -149
  228. package/docs/print-components/examples/cover-page-report.tsx +0 -163
  229. package/docs/print-components/quick-start.md +0 -363
  230. package/docs/troubleshooting/README.md +0 -497
  231. package/docs/troubleshooting/styling-issues.md +0 -219
  232. package/docs/troubleshooting/tailwind-content-scanning.md +0 -213
  233. package/src/__mocks__/lucide-react.ts +0 -181
  234. package/src/__tests__/README.md +0 -404
  235. package/src/__tests__/debug-provider.unit.test.tsx +0 -67
  236. package/src/__tests__/e2e/workflows.test.tsx +0 -373
  237. package/src/__tests__/hybridPermissions.unit.test.tsx +0 -474
  238. package/src/__tests__/index.integration.test.ts +0 -491
  239. package/src/__tests__/mocks/MockAuthProvider-standalone.tsx +0 -47
  240. package/src/__tests__/mocks/MockAuthProvider.tsx +0 -63
  241. package/src/__tests__/mocks/enhancedSupabaseMock.ts +0 -252
  242. package/src/__tests__/mocks/index.test.ts +0 -23
  243. package/src/__tests__/mocks/index.ts +0 -16
  244. package/src/__tests__/mocks/mockAuth.ts +0 -155
  245. package/src/__tests__/mocks/mockSupabase.ts +0 -83
  246. package/src/__tests__/mocks/mockSupabaseClient.ts +0 -63
  247. package/src/__tests__/mocks/providers.tsx +0 -22
  248. package/src/__tests__/patterns/__tests__/testPatterns.test.ts +0 -394
  249. package/src/__tests__/patterns/testPatterns.ts +0 -124
  250. package/src/__tests__/performance/componentPerformance.performance.test.ts +0 -27
  251. package/src/__tests__/performance/index.ts +0 -24
  252. package/src/__tests__/performance/performanceValidation.performance.test.ts +0 -15
  253. package/src/__tests__/security/security.unit.test.tsx +0 -7
  254. package/src/__tests__/security/securityValidation.security.test.tsx +0 -153
  255. package/src/__tests__/setup.ts +0 -259
  256. package/src/__tests__/setupTests.d.ts +0 -1
  257. package/src/__tests__/shared/componentTestUtils.tsx +0 -475
  258. package/src/__tests__/shared/errorHandlingTestUtils.ts +0 -107
  259. package/src/__tests__/shared/index.ts +0 -81
  260. package/src/__tests__/shared/integrationTestUtils.tsx +0 -375
  261. package/src/__tests__/shared/performanceTestUtils.tsx +0 -476
  262. package/src/__tests__/shared/testUtils.optimized.tsx +0 -685
  263. package/src/__tests__/simple.test.tsx +0 -20
  264. package/src/__tests__/templates/accessibility.test.template.tsx +0 -279
  265. package/src/__tests__/templates/component.test.template.tsx +0 -122
  266. package/src/__tests__/templates/integration.test.template.tsx +0 -199
  267. package/src/__tests__/test-utils/dataFactories.ts +0 -60
  268. package/src/__tests__/test-utils/index.ts +0 -6
  269. package/src/__tests__/typeSafety.unit.test.ts +0 -65
  270. package/src/__tests__/unifiedAuth.unit.test.tsx +0 -151
  271. package/src/__tests__/utils/accessibilityHelpers.ts +0 -254
  272. package/src/__tests__/utils/assertions.ts +0 -50
  273. package/src/__tests__/utils/deterministicHelpers.ts +0 -31
  274. package/src/__tests__/utils/edgeCaseConfig.test.ts +0 -75
  275. package/src/__tests__/utils/edgeCaseConfig.ts +0 -98
  276. package/src/__tests__/utils/mockHelpers.ts +0 -149
  277. package/src/__tests__/utils/mockLoader.ts +0 -101
  278. package/src/__tests__/utils/performanceHelpers.ts +0 -55
  279. package/src/__tests__/utils/performanceTestHelpers.ts +0 -68
  280. package/src/__tests__/utils/testDataFactories.ts +0 -28
  281. package/src/__tests__/utils/testIsolation.ts +0 -67
  282. package/src/__tests__/utils/visualTestHelpers.ts +0 -20
  283. package/src/__tests__/visual/__snapshots__/componentSnapshots.visual.test.tsx.snap +0 -68
  284. package/src/__tests__/visual/__snapshots__/componentVisuals.visual.test.tsx.snap +0 -14
  285. package/src/__tests__/visual/__snapshots__/visualRegression.test.tsx.snap +0 -217
  286. package/src/__tests__/visual/__snapshots__/visualRegression.visual.test.tsx.snap +0 -24
  287. package/src/__tests__/visual/componentSnapshots.visual.test.tsx +0 -33
  288. package/src/__tests__/visual/componentVisuals.visual.test.tsx +0 -12
  289. package/src/__tests__/visual/visualRegression.visual.test.tsx +0 -20
  290. package/src/components/Alert/Alert.tsx +0 -134
  291. package/src/components/Alert/__tests__/Alert.unit.test.tsx +0 -381
  292. package/src/components/Alert/index.ts +0 -2
  293. package/src/components/Avatar/Avatar.tsx +0 -84
  294. package/src/components/Avatar/__tests__/Avatar.unit.test.tsx +0 -232
  295. package/src/components/Avatar/index.ts +0 -2
  296. package/src/components/Button/Button.tsx +0 -270
  297. package/src/components/Button/__tests__/Button.accessibility.test.tsx +0 -131
  298. package/src/components/Button/__tests__/Button.comprehensive.test.tsx +0 -721
  299. package/src/components/Button/__tests__/Button.unit.test.tsx +0 -189
  300. package/src/components/Button/__tests__/EventSelector.integration.test.tsx +0 -285
  301. package/src/components/Button/index.ts +0 -2
  302. package/src/components/Card/Card.tsx +0 -271
  303. package/src/components/Card/__tests__/Card.accessibility.test.tsx +0 -394
  304. package/src/components/Card/__tests__/Card.comprehensive.test.tsx +0 -599
  305. package/src/components/Card/__tests__/Card.integration.test.tsx +0 -673
  306. package/src/components/Card/__tests__/Card.performance.test.tsx +0 -546
  307. package/src/components/Card/__tests__/Card.unit.test.tsx +0 -330
  308. package/src/components/Card/__tests__/Card.visual.test.tsx +0 -599
  309. package/src/components/Card/__tests__/README.md +0 -211
  310. package/src/components/Card/index.ts +0 -1
  311. package/src/components/Checkbox/Checkbox.tsx +0 -75
  312. package/src/components/Checkbox/__mocks__/Checkbox.tsx +0 -2
  313. package/src/components/Checkbox/__tests__/Checkbox.unit.test.tsx +0 -520
  314. package/src/components/Checkbox/index.ts +0 -2
  315. package/src/components/DataTable/DataTable.tsx +0 -438
  316. package/src/components/DataTable/__tests__/DataTable.errorHandling.test.tsx +0 -251
  317. package/src/components/DataTable/__tests__/DataTable.hierarchical.test.tsx +0 -680
  318. package/src/components/DataTable/__tests__/DataTable.infinite-loop.test.tsx +0 -323
  319. package/src/components/DataTable/__tests__/DataTable.integration.test.tsx +0 -716
  320. package/src/components/DataTable/__tests__/DataTable.performance.test.tsx +0 -589
  321. package/src/components/DataTable/__tests__/DataTable.permissions.test.tsx +0 -316
  322. package/src/components/DataTable/__tests__/DataTable.regressionFixes.test.tsx +0 -546
  323. package/src/components/DataTable/__tests__/DataTable.selection.controlled.test.tsx +0 -386
  324. package/src/components/DataTable/__tests__/DataTable.selection.test.tsx +0 -338
  325. package/src/components/DataTable/__tests__/DataTable.sorting.test.tsx +0 -321
  326. package/src/components/DataTable/__tests__/DataTable.userWorkflows.test.tsx +0 -320
  327. package/src/components/DataTable/__tests__/DataTable.workflowValidation.test.tsx +0 -583
  328. package/src/components/DataTable/__tests__/DataTable.workflows.test.tsx +0 -711
  329. package/src/components/DataTable/__tests__/README.md +0 -145
  330. package/src/components/DataTable/__tests__/mocks/MockRBACProvider.tsx +0 -66
  331. package/src/components/DataTable/__tests__/performance-regression.test.tsx +0 -777
  332. package/src/components/DataTable/__tests__/performance.test.tsx +0 -365
  333. package/src/components/DataTable/__tests__/test-utils/dataFactories.ts +0 -103
  334. package/src/components/DataTable/__tests__/test-utils/sharedTestUtils.tsx +0 -381
  335. package/src/components/DataTable/__tests__/test-utils.ts +0 -94
  336. package/src/components/DataTable/components/ActionButtons.tsx +0 -177
  337. package/src/components/DataTable/components/BulkOperationsDropdown.tsx +0 -160
  338. package/src/components/DataTable/components/ColumnFilter.tsx +0 -114
  339. package/src/components/DataTable/components/ColumnVisibilityDropdown.tsx +0 -100
  340. package/src/components/DataTable/components/DataTableBody.tsx +0 -461
  341. package/src/components/DataTable/components/DataTableCore.tsx +0 -941
  342. package/src/components/DataTable/components/DataTableErrorBoundary.tsx +0 -214
  343. package/src/components/DataTable/components/DataTableModals.tsx +0 -87
  344. package/src/components/DataTable/components/DataTableToolbar.tsx +0 -250
  345. package/src/components/DataTable/components/DraggableColumnHeader.tsx +0 -144
  346. package/src/components/DataTable/components/EditableRow.tsx +0 -159
  347. package/src/components/DataTable/components/EmptyState.tsx +0 -64
  348. package/src/components/DataTable/components/ExpandButton.tsx +0 -113
  349. package/src/components/DataTable/components/FilterRow.tsx +0 -100
  350. package/src/components/DataTable/components/GroupHeader.tsx +0 -42
  351. package/src/components/DataTable/components/GroupingDropdown.tsx +0 -96
  352. package/src/components/DataTable/components/ImportModal.tsx +0 -345
  353. package/src/components/DataTable/components/LoadingState.tsx +0 -12
  354. package/src/components/DataTable/components/PaginationControls.tsx +0 -332
  355. package/src/components/DataTable/components/UnifiedTableBody.tsx +0 -713
  356. package/src/components/DataTable/components/ViewRowModal.tsx +0 -68
  357. package/src/components/DataTable/components/VirtualizedDataTable.tsx +0 -513
  358. package/src/components/DataTable/components/__tests__/ActionButtons.unit.test.tsx +0 -150
  359. package/src/components/DataTable/components/__tests__/BulkOperationsDropdown.test.tsx +0 -224
  360. package/src/components/DataTable/components/__tests__/ColumnVisibilityDropdown.unit.test.tsx +0 -244
  361. package/src/components/DataTable/components/__tests__/DataTable.accessibility.test.tsx +0 -629
  362. package/src/components/DataTable/components/__tests__/DataTable.integration.test.tsx +0 -470
  363. package/src/components/DataTable/components/__tests__/DataTable.performance.test.tsx +0 -160
  364. package/src/components/DataTable/components/__tests__/DataTable.real.test.tsx +0 -251
  365. package/src/components/DataTable/components/__tests__/DataTable.security.test.tsx +0 -171
  366. package/src/components/DataTable/components/__tests__/DataTable.unit.test.tsx +0 -290
  367. package/src/components/DataTable/components/__tests__/DataTableBody.unit.test.tsx +0 -147
  368. package/src/components/DataTable/components/__tests__/DataTableErrorBoundary.unit.test.tsx +0 -182
  369. package/src/components/DataTable/components/__tests__/DataTableModals.unit.test.tsx +0 -123
  370. package/src/components/DataTable/components/__tests__/EditableRow.unit.test.tsx +0 -660
  371. package/src/components/DataTable/components/__tests__/EmptyState.unit.test.tsx +0 -256
  372. package/src/components/DataTable/components/__tests__/ExpandButton.test.tsx +0 -498
  373. package/src/components/DataTable/components/__tests__/FilterRow.unit.test.tsx +0 -112
  374. package/src/components/DataTable/components/__tests__/FilteringToggle.unit.test.tsx +0 -133
  375. package/src/components/DataTable/components/__tests__/GroupHeader.unit.test.tsx +0 -172
  376. package/src/components/DataTable/components/__tests__/GroupingDropdown.unit.test.tsx +0 -222
  377. package/src/components/DataTable/components/__tests__/ImportModal.unit.test.tsx +0 -780
  378. package/src/components/DataTable/components/__tests__/LoadingState.unit.test.tsx +0 -65
  379. package/src/components/DataTable/components/__tests__/PaginationControls.unit.test.tsx +0 -634
  380. package/src/components/DataTable/components/__tests__/StateComponents.unit.test.tsx +0 -48
  381. package/src/components/DataTable/components/__tests__/UnifiedTableBody.hierarchical.test.tsx +0 -541
  382. package/src/components/DataTable/components/__tests__/ViewRowModal.unit.test.tsx +0 -228
  383. package/src/components/DataTable/components/__tests__/VirtualizedDataTable.unit.test.tsx +0 -568
  384. package/src/components/DataTable/components/index.ts +0 -16
  385. package/src/components/DataTable/context/DataTableContext.tsx +0 -97
  386. package/src/components/DataTable/core/ActionManager.ts +0 -235
  387. package/src/components/DataTable/core/ColumnFactory.ts +0 -268
  388. package/src/components/DataTable/core/ColumnManager.ts +0 -205
  389. package/src/components/DataTable/core/DataManager.ts +0 -188
  390. package/src/components/DataTable/core/DataTableContext.tsx +0 -181
  391. package/src/components/DataTable/core/LocalDataAdapter.ts +0 -264
  392. package/src/components/DataTable/core/PluginRegistry.ts +0 -229
  393. package/src/components/DataTable/core/StateManager.ts +0 -311
  394. package/src/components/DataTable/core/__tests__/ActionManager.unit.test.ts +0 -405
  395. package/src/components/DataTable/core/__tests__/ArchitectureIntegration.unit.test.tsx +0 -445
  396. package/src/components/DataTable/core/__tests__/ColumnFactory.unit.test.ts +0 -288
  397. package/src/components/DataTable/core/__tests__/ColumnManager.unit.test.ts +0 -623
  398. package/src/components/DataTable/core/__tests__/DataManager.unit.test.ts +0 -431
  399. package/src/components/DataTable/core/__tests__/DataTableContext.unit.test.tsx +0 -433
  400. package/src/components/DataTable/core/__tests__/LocalDataAdapter.unit.test.ts +0 -422
  401. package/src/components/DataTable/core/__tests__/PluginRegistry.unit.test.tsx +0 -207
  402. package/src/components/DataTable/core/__tests__/StateManager.unit.test.ts +0 -278
  403. package/src/components/DataTable/core/index.ts +0 -8
  404. package/src/components/DataTable/core/interfaces.ts +0 -338
  405. package/src/components/DataTable/examples/HierarchicalActionsExample.tsx +0 -418
  406. package/src/components/DataTable/examples/HierarchicalExample.tsx +0 -472
  407. package/src/components/DataTable/examples/InitialPageSizeExample.tsx +0 -173
  408. package/src/components/DataTable/examples/PerformanceExample.tsx +0 -502
  409. package/src/components/DataTable/examples/__tests__/PerformanceExample.unit.test.tsx +0 -281
  410. package/src/components/DataTable/hooks/__tests__/useColumnOrderPersistence.unit.test.ts +0 -407
  411. package/src/components/DataTable/hooks/__tests__/useColumnReordering.unit.test.ts +0 -679
  412. package/src/components/DataTable/hooks/useColumnOrderPersistence.ts +0 -95
  413. package/src/components/DataTable/hooks/useColumnReordering.ts +0 -110
  414. package/src/components/DataTable/hooks/useDataTableState.ts +0 -325
  415. package/src/components/DataTable/hooks/useHierarchicalState.ts +0 -174
  416. package/src/components/DataTable/index.ts +0 -68
  417. package/src/components/DataTable/styles.ts +0 -171
  418. package/src/components/DataTable/types.ts +0 -473
  419. package/src/components/DataTable/utils/__tests__/debugTools.unit.test.ts +0 -267
  420. package/src/components/DataTable/utils/__tests__/errorHandling.unit.test.ts +0 -467
  421. package/src/components/DataTable/utils/__tests__/exportUtils.unit.test.ts +0 -380
  422. package/src/components/DataTable/utils/__tests__/flexibleImport.unit.test.ts +0 -233
  423. package/src/components/DataTable/utils/__tests__/performanceUtils.unit.test.ts +0 -414
  424. package/src/components/DataTable/utils/debugTools.ts +0 -583
  425. package/src/components/DataTable/utils/errorHandling.ts +0 -494
  426. package/src/components/DataTable/utils/exportUtils.ts +0 -126
  427. package/src/components/DataTable/utils/flexibleImport.ts +0 -510
  428. package/src/components/DataTable/utils/hierarchicalSorting.ts +0 -151
  429. package/src/components/DataTable/utils/hierarchicalUtils.ts +0 -218
  430. package/src/components/DataTable/utils/index.ts +0 -1
  431. package/src/components/DataTable/utils/performanceUtils.ts +0 -351
  432. package/src/components/Dialog/Dialog.tsx +0 -782
  433. package/src/components/Dialog/README.md +0 -804
  434. package/src/components/Dialog/__tests__/Dialog.accessibility.test.tsx +0 -521
  435. package/src/components/Dialog/__tests__/Dialog.auto-size.example.tsx +0 -157
  436. package/src/components/Dialog/__tests__/Dialog.enhanced.test.tsx +0 -538
  437. package/src/components/Dialog/__tests__/Dialog.unit.test.tsx +0 -1373
  438. package/src/components/Dialog/examples/BasicHtmlTest.tsx +0 -55
  439. package/src/components/Dialog/examples/DebugHtmlExample.tsx +0 -68
  440. package/src/components/Dialog/examples/HtmlDialogExample.tsx +0 -202
  441. package/src/components/Dialog/examples/SimpleHtmlTest.tsx +0 -61
  442. package/src/components/Dialog/examples/SmartDialogExample.tsx +0 -322
  443. package/src/components/Dialog/examples/__tests__/SmartDialogExample.unit.test.tsx +0 -151
  444. package/src/components/Dialog/index.ts +0 -12
  445. package/src/components/Dialog/utils/__tests__/safeHtml.unit.test.ts +0 -611
  446. package/src/components/Dialog/utils/safeHtml.ts +0 -185
  447. package/src/components/ErrorBoundary/ErrorBoundary.tsx +0 -312
  448. package/src/components/ErrorBoundary/__tests__/ErrorBoundary.accessibility.test.tsx +0 -517
  449. package/src/components/ErrorBoundary/__tests__/ErrorBoundary.integration.test.tsx +0 -572
  450. package/src/components/ErrorBoundary/__tests__/ErrorBoundary.unit.test.tsx +0 -579
  451. package/src/components/ErrorBoundary/index.ts +0 -8
  452. package/src/components/EventSelector/EventSelector.tsx +0 -360
  453. package/src/components/EventSelector/__tests__/EventSelector.test.tsx +0 -528
  454. package/src/components/EventSelector/index.ts +0 -3
  455. package/src/components/EventSelector/types.ts +0 -79
  456. package/src/components/FileUpload/FileUpload.example.tsx +0 -218
  457. package/src/components/FileUpload/FileUpload.tsx +0 -237
  458. package/src/components/FileUpload/__tests__/FileUpload.integration.test.tsx +0 -992
  459. package/src/components/FileUpload/__tests__/FileUpload.real.test.tsx +0 -927
  460. package/src/components/FileUpload/__tests__/FileUpload.test.tsx +0 -855
  461. package/src/components/FileUpload/__tests__/FileUpload.unit.test.tsx +0 -1311
  462. package/src/components/FileUpload/__tests__/FileUpload.unmocked.test.tsx +0 -937
  463. package/src/components/FileUpload/index.ts +0 -6
  464. package/src/components/Footer/Footer.tsx +0 -197
  465. package/src/components/Footer/__tests__/Footer.accessibility.test.tsx +0 -359
  466. package/src/components/Footer/__tests__/Footer.integration.test.tsx +0 -353
  467. package/src/components/Footer/__tests__/Footer.performance.test.tsx +0 -309
  468. package/src/components/Footer/__tests__/Footer.unit.test.tsx +0 -309
  469. package/src/components/Footer/__tests__/Footer.visual.test.tsx +0 -335
  470. package/src/components/Footer/index.ts +0 -17
  471. package/src/components/Form/Form.tsx +0 -166
  472. package/src/components/Form/FormErrorSummary.tsx +0 -113
  473. package/src/components/Form/FormField.tsx +0 -249
  474. package/src/components/Form/FormFieldset.tsx +0 -127
  475. package/src/components/Form/FormLiveRegion.tsx +0 -198
  476. package/src/components/Form/__tests__/Form.accessibility.test.tsx +0 -820
  477. package/src/components/Form/__tests__/Form.unit.test.tsx +0 -305
  478. package/src/components/Form/__tests__/FormErrorSummary.unit.test.tsx +0 -285
  479. package/src/components/Form/__tests__/FormFieldset.unit.test.tsx +0 -241
  480. package/src/components/Form/index.ts +0 -26
  481. package/src/components/Header/Header.tsx +0 -301
  482. package/src/components/Header/__tests__/Header.accessibility.test.tsx +0 -382
  483. package/src/components/Header/__tests__/Header.comprehensive.test.tsx +0 -509
  484. package/src/components/Header/__tests__/Header.unit.test.tsx +0 -335
  485. package/src/components/Header/index.ts +0 -4
  486. package/src/components/InactivityWarningModal/InactivityWarningModal.test.tsx +0 -196
  487. package/src/components/InactivityWarningModal/InactivityWarningModal.tsx +0 -164
  488. package/src/components/InactivityWarningModal/__tests__/InactivityWarningModal.unit.test.tsx +0 -224
  489. package/src/components/InactivityWarningModal/index.ts +0 -9
  490. package/src/components/Input/Input.tsx +0 -201
  491. package/src/components/Input/__mocks__/Input.tsx +0 -2
  492. package/src/components/Input/__tests__/Input.accessibility.test.tsx +0 -632
  493. package/src/components/Input/__tests__/Input.unit.test.tsx +0 -1121
  494. package/src/components/Input/index.ts +0 -9
  495. package/src/components/Label/Label.tsx +0 -186
  496. package/src/components/Label/__tests__/Label.accessibility.test.tsx +0 -239
  497. package/src/components/Label/__tests__/Label.unit.test.tsx +0 -331
  498. package/src/components/Label/index.ts +0 -2
  499. package/src/components/LoadingSpinner/LoadingSpinner.tsx +0 -98
  500. package/src/components/LoadingSpinner/__tests__/LoadingSpinner.accessibility.test.tsx +0 -116
  501. package/src/components/LoadingSpinner/__tests__/LoadingSpinner.unit.test.tsx +0 -144
  502. package/src/components/LoadingSpinner/index.ts +0 -3
  503. package/src/components/LoginForm/LoginForm.tsx +0 -273
  504. package/src/components/LoginForm/__tests__/LoginForm.accessibility.test.tsx +0 -201
  505. package/src/components/LoginForm/__tests__/LoginForm.unit.test.tsx +0 -119
  506. package/src/components/LoginForm/index.ts +0 -3
  507. package/src/components/NavigationMenu/NavigationMenu.tsx +0 -698
  508. package/src/components/NavigationMenu/__tests__/NavigationMenu.accessibility.test.tsx +0 -378
  509. package/src/components/NavigationMenu/__tests__/NavigationMenu.enhanced.test.tsx +0 -768
  510. package/src/components/NavigationMenu/__tests__/NavigationMenu.integration.test.tsx +0 -576
  511. package/src/components/NavigationMenu/__tests__/NavigationMenu.performance.test.tsx +0 -585
  512. package/src/components/NavigationMenu/__tests__/NavigationMenu.real.component.test.tsx +0 -783
  513. package/src/components/NavigationMenu/__tests__/NavigationMenu.security.enhanced.test.tsx +0 -810
  514. package/src/components/NavigationMenu/__tests__/NavigationMenu.security.test.tsx +0 -494
  515. package/src/components/NavigationMenu/__tests__/NavigationMenu.unit.test.tsx +0 -331
  516. package/src/components/NavigationMenu/__tests__/NavigationMenu.userWorkflows.test.tsx +0 -347
  517. package/src/components/NavigationMenu/__tests__/NavigationMenu.workflows.test.tsx +0 -584
  518. package/src/components/NavigationMenu/index.ts +0 -10
  519. package/src/components/NavigationMenu/types.ts +0 -85
  520. package/src/components/OrganisationSelector/OrganisationSelector.tsx +0 -304
  521. package/src/components/OrganisationSelector/__tests__/OrganisationSelector.unit.test.tsx +0 -664
  522. package/src/components/OrganisationSelector/index.ts +0 -9
  523. package/src/components/PaceAppLayout/PaceAppLayout.tsx +0 -699
  524. package/src/components/PaceAppLayout/README.md +0 -278
  525. package/src/components/PaceAppLayout/__tests__/PaceAppLayout.accessibility.test.tsx +0 -288
  526. package/src/components/PaceAppLayout/__tests__/PaceAppLayout.integration.test.tsx +0 -893
  527. package/src/components/PaceAppLayout/__tests__/PaceAppLayout.performance.test.tsx +0 -629
  528. package/src/components/PaceAppLayout/__tests__/PaceAppLayout.security.test.tsx +0 -782
  529. package/src/components/PaceAppLayout/__tests__/PaceAppLayout.unit.test.tsx +0 -904
  530. package/src/components/PaceAppLayout/index.ts +0 -1
  531. package/src/components/PaceLoginPage/PaceLoginPage.tsx +0 -221
  532. package/src/components/PaceLoginPage/__tests__/PaceLoginPage.accessibility.test.tsx +0 -463
  533. package/src/components/PaceLoginPage/__tests__/PaceLoginPage.integration.test.tsx +0 -586
  534. package/src/components/PaceLoginPage/__tests__/PaceLoginPage.unit.test.tsx +0 -533
  535. package/src/components/PaceLoginPage/index.ts +0 -1
  536. package/src/components/PasswordReset/PasswordChangeForm.tsx +0 -186
  537. package/src/components/PasswordReset/PasswordResetForm.tsx +0 -201
  538. package/src/components/PasswordReset/__tests__/PasswordChangeForm.accessibility.test.tsx +0 -408
  539. package/src/components/PasswordReset/__tests__/PasswordChangeForm.unit.test.tsx +0 -561
  540. package/src/components/PasswordReset/__tests__/PasswordReset.integration.test.tsx +0 -304
  541. package/src/components/PasswordReset/__tests__/PasswordResetForm.accessibility.test.tsx +0 -20
  542. package/src/components/PasswordReset/__tests__/PasswordResetForm.unit.test.tsx +0 -523
  543. package/src/components/PasswordReset/__tests__/__mocks__/UnifiedAuthProvider.ts +0 -29
  544. package/src/components/PasswordReset/index.ts +0 -4
  545. package/src/components/Print/__tests__/Print.comprehensive.test.tsx +0 -331
  546. package/src/components/PrintButton/PrintButton.tsx +0 -321
  547. package/src/components/PrintButton/PrintButtonGroup.tsx +0 -84
  548. package/src/components/PrintButton/PrintToolbar.tsx +0 -94
  549. package/src/components/PrintButton/__tests__/PrintButton.unit.test.tsx +0 -429
  550. package/src/components/PrintButton/__tests__/PrintButtonGroup.unit.test.tsx +0 -277
  551. package/src/components/PrintButton/__tests__/PrintToolbar.unit.test.tsx +0 -264
  552. package/src/components/PrintButton/examples/PrintButtonShowcase.tsx +0 -438
  553. package/src/components/PrintButton/index.ts +0 -33
  554. package/src/components/PrintButton/types.ts +0 -173
  555. package/src/components/PrintCard/PrintCard.tsx +0 -154
  556. package/src/components/PrintCard/PrintCardContent.tsx +0 -57
  557. package/src/components/PrintCard/PrintCardFooter.tsx +0 -60
  558. package/src/components/PrintCard/PrintCardGrid.tsx +0 -91
  559. package/src/components/PrintCard/PrintCardHeader.tsx +0 -78
  560. package/src/components/PrintCard/PrintCardImage.tsx +0 -81
  561. package/src/components/PrintCard/__tests__/PrintCard.unit.test.tsx +0 -233
  562. package/src/components/PrintCard/__tests__/PrintCardContent.test.tsx +0 -284
  563. package/src/components/PrintCard/__tests__/PrintCardGrid.unit.test.tsx +0 -214
  564. package/src/components/PrintCard/__tests__/PrintCardImage.unit.test.tsx +0 -264
  565. package/src/components/PrintCard/examples/PrintCardShowcase.tsx +0 -239
  566. package/src/components/PrintCard/index.ts +0 -34
  567. package/src/components/PrintCard/types.ts +0 -171
  568. package/src/components/PrintDataTable/PrintDataTable.tsx +0 -215
  569. package/src/components/PrintDataTable/PrintTableGroup.tsx +0 -90
  570. package/src/components/PrintDataTable/PrintTableRow.tsx +0 -76
  571. package/src/components/PrintDataTable/__tests__/PrintDataTable.unit.test.tsx +0 -361
  572. package/src/components/PrintDataTable/__tests__/PrintTableGroup.unit.test.tsx +0 -314
  573. package/src/components/PrintDataTable/__tests__/PrintTableRow.unit.test.tsx +0 -362
  574. package/src/components/PrintDataTable/index.ts +0 -25
  575. package/src/components/PrintDataTable/types.ts +0 -67
  576. package/src/components/PrintFooter/PrintFooter.tsx +0 -183
  577. package/src/components/PrintFooter/PrintFooterContent.tsx +0 -71
  578. package/src/components/PrintFooter/PrintFooterInfo.tsx +0 -86
  579. package/src/components/PrintFooter/PrintPageNumber.tsx +0 -90
  580. package/src/components/PrintFooter/__tests__/PrintFooter.unit.test.tsx +0 -500
  581. package/src/components/PrintFooter/__tests__/PrintFooterContent.unit.test.tsx +0 -321
  582. package/src/components/PrintFooter/__tests__/PrintFooterInfo.unit.test.tsx +0 -335
  583. package/src/components/PrintFooter/__tests__/PrintPageNumber.unit.test.tsx +0 -340
  584. package/src/components/PrintFooter/examples/PrintFooterShowcase.tsx +0 -390
  585. package/src/components/PrintFooter/index.ts +0 -30
  586. package/src/components/PrintFooter/types.ts +0 -149
  587. package/src/components/PrintGrid/PrintGrid.tsx +0 -180
  588. package/src/components/PrintGrid/PrintGridBreakpoint.tsx +0 -109
  589. package/src/components/PrintGrid/PrintGridContainer.tsx +0 -128
  590. package/src/components/PrintGrid/PrintGridItem.tsx +0 -220
  591. package/src/components/PrintGrid/__tests__/PrintGrid.unit.test.tsx +0 -340
  592. package/src/components/PrintGrid/__tests__/PrintGridBreakpoint.unit.test.tsx +0 -261
  593. package/src/components/PrintGrid/__tests__/PrintGridContainer.unit.test.tsx +0 -338
  594. package/src/components/PrintGrid/__tests__/PrintGridItem.unit.test.tsx +0 -338
  595. package/src/components/PrintGrid/examples/PrintGridShowcase.tsx +0 -359
  596. package/src/components/PrintGrid/index.ts +0 -31
  597. package/src/components/PrintGrid/types.ts +0 -159
  598. package/src/components/PrintHeader/PrintCoverHeader.tsx +0 -230
  599. package/src/components/PrintHeader/PrintHeader.tsx +0 -150
  600. package/src/components/PrintHeader/__tests__/PrintCoverHeader.unit.test.tsx +0 -309
  601. package/src/components/PrintHeader/__tests__/PrintHeader.unit.test.tsx +0 -202
  602. package/src/components/PrintHeader/index.ts +0 -17
  603. package/src/components/PrintHeader/types.ts +0 -42
  604. package/src/components/PrintLayout/PrintLayout.tsx +0 -122
  605. package/src/components/PrintLayout/PrintLayoutContext.tsx +0 -66
  606. package/src/components/PrintLayout/PrintPageBreak.tsx +0 -52
  607. package/src/components/PrintLayout/__tests__/PrintLayout.unit.test.tsx +0 -238
  608. package/src/components/PrintLayout/examples/PrintShowcase.tsx +0 -230
  609. package/src/components/PrintLayout/index.ts +0 -19
  610. package/src/components/PrintLayout/types.ts +0 -37
  611. package/src/components/PrintPageBreak/PrintPageBreak.tsx +0 -120
  612. package/src/components/PrintPageBreak/PrintPageBreakGroup.tsx +0 -90
  613. package/src/components/PrintPageBreak/PrintPageBreakIndicator.tsx +0 -112
  614. package/src/components/PrintPageBreak/__tests__/PrintPageBreak.unit.test.tsx +0 -263
  615. package/src/components/PrintPageBreak/__tests__/PrintPageBreakGroup.unit.test.tsx +0 -239
  616. package/src/components/PrintPageBreak/__tests__/PrintPageBreakIndicator.unit.test.tsx +0 -235
  617. package/src/components/PrintPageBreak/examples/PrintPageBreakShowcase.tsx +0 -279
  618. package/src/components/PrintPageBreak/index.ts +0 -23
  619. package/src/components/PrintPageBreak/types.ts +0 -94
  620. package/src/components/PrintSection/PrintColumn.tsx +0 -104
  621. package/src/components/PrintSection/PrintDivider.tsx +0 -101
  622. package/src/components/PrintSection/PrintSection.tsx +0 -129
  623. package/src/components/PrintSection/PrintSectionContent.tsx +0 -75
  624. package/src/components/PrintSection/PrintSectionHeader.tsx +0 -97
  625. package/src/components/PrintSection/__tests__/PrintColumn.unit.test.tsx +0 -385
  626. package/src/components/PrintSection/__tests__/PrintDivider.unit.test.tsx +0 -373
  627. package/src/components/PrintSection/__tests__/PrintSection.unit.test.tsx +0 -390
  628. package/src/components/PrintSection/__tests__/PrintSectionContent.unit.test.tsx +0 -321
  629. package/src/components/PrintSection/__tests__/PrintSectionHeader.unit.test.tsx +0 -334
  630. package/src/components/PrintSection/examples/PrintSectionShowcase.tsx +0 -258
  631. package/src/components/PrintSection/index.ts +0 -33
  632. package/src/components/PrintSection/types.ts +0 -155
  633. package/src/components/PrintText/PrintText.tsx +0 -116
  634. package/src/components/PrintText/__tests__/PrintText.unit.test.tsx +0 -351
  635. package/src/components/PrintText/index.ts +0 -16
  636. package/src/components/PrintText/types.ts +0 -24
  637. package/src/components/Progress/Progress.tsx +0 -116
  638. package/src/components/Progress/__tests__/Progress.accessibility.test.tsx +0 -240
  639. package/src/components/Progress/__tests__/Progress.unit.test.tsx +0 -242
  640. package/src/components/Progress/index.ts +0 -3
  641. package/src/components/PublicLayout/EventLogo.tsx +0 -287
  642. package/src/components/PublicLayout/PublicErrorBoundary.tsx +0 -279
  643. package/src/components/PublicLayout/PublicLoadingSpinner.tsx +0 -208
  644. package/src/components/PublicLayout/PublicPageContextChecker.tsx +0 -130
  645. package/src/components/PublicLayout/PublicPageDebugger.tsx +0 -104
  646. package/src/components/PublicLayout/PublicPageDiagnostic.tsx +0 -162
  647. package/src/components/PublicLayout/PublicPageFooter.tsx +0 -124
  648. package/src/components/PublicLayout/PublicPageHeader.tsx +0 -178
  649. package/src/components/PublicLayout/PublicPageLayout.tsx +0 -232
  650. package/src/components/PublicLayout/PublicPageProvider.tsx +0 -137
  651. package/src/components/PublicLayout/__tests__/EventLogo.test.tsx +0 -761
  652. package/src/components/PublicLayout/__tests__/PublicErrorBoundary.simplified.test.tsx +0 -228
  653. package/src/components/PublicLayout/__tests__/PublicErrorBoundary.test.tsx +0 -228
  654. package/src/components/PublicLayout/__tests__/PublicLoadingSpinner.test.tsx +0 -459
  655. package/src/components/PublicLayout/__tests__/PublicPageFooter.test.tsx +0 -362
  656. package/src/components/PublicLayout/__tests__/PublicPageHeader.test.tsx +0 -522
  657. package/src/components/PublicLayout/__tests__/PublicPageLayout.test.tsx +0 -599
  658. package/src/components/PublicLayout/__tests__/PublicPageProvider.test.tsx +0 -513
  659. package/src/components/PublicLayout/index.ts +0 -51
  660. package/src/components/RBAC/PagePermissionGuard.tsx +0 -287
  661. package/src/components/RBAC/RBACGuard.tsx +0 -143
  662. package/src/components/RBAC/RBACProvider.tsx +0 -186
  663. package/src/components/RBAC/RoleBasedContent.tsx +0 -129
  664. package/src/components/RBAC/__tests__/PagePermissionGuard.unit.test.tsx +0 -683
  665. package/src/components/RBAC/__tests__/RBAC.integration.test.tsx +0 -573
  666. package/src/components/RBAC/__tests__/RBACGuard.unit.test.tsx +0 -467
  667. package/src/components/RBAC/__tests__/RBACProvider.accessibility.test.tsx +0 -475
  668. package/src/components/RBAC/__tests__/RBACProvider.advanced.test.tsx +0 -569
  669. package/src/components/RBAC/__tests__/RBACProvider.integration.test.tsx +0 -352
  670. package/src/components/RBAC/__tests__/RBACProvider.unit.test.tsx +0 -128
  671. package/src/components/RBAC/__tests__/RoleBasedContent.unit.test.tsx +0 -657
  672. package/src/components/RBAC/index.ts +0 -23
  673. package/src/components/Select/Select.tsx +0 -660
  674. package/src/components/Select/__tests__/SearchableSelect.unit.test.tsx +0 -437
  675. package/src/components/Select/__tests__/Select.accessibility.test.tsx +0 -1202
  676. package/src/components/Select/__tests__/Select.actual.test.tsx +0 -774
  677. package/src/components/Select/__tests__/Select.comprehensive.test.tsx +0 -837
  678. package/src/components/Select/__tests__/Select.enhanced.test.tsx +0 -1101
  679. package/src/components/Select/__tests__/Select.integration.test.tsx +0 -772
  680. package/src/components/Select/__tests__/Select.performance.test.tsx +0 -695
  681. package/src/components/Select/__tests__/Select.real-world.test.tsx +0 -1046
  682. package/src/components/Select/__tests__/Select.search-algorithms.test.tsx +0 -968
  683. package/src/components/Select/__tests__/Select.unit.test.tsx +0 -647
  684. package/src/components/Select/__tests__/Select.utils.test.tsx +0 -890
  685. package/src/components/Select/index.ts +0 -1
  686. package/src/components/SuperAdminGuard.tsx +0 -116
  687. package/src/components/Table/Table.tsx +0 -222
  688. package/src/components/Table/__tests__/Table.accessibility.test.tsx +0 -233
  689. package/src/components/Table/__tests__/Table.unit.test.tsx +0 -235
  690. package/src/components/Table/index.ts +0 -11
  691. package/src/components/Toast/Toast.tsx +0 -339
  692. package/src/components/Toast/__tests__/Toast.accessibility.test.tsx +0 -238
  693. package/src/components/Toast/__tests__/Toast.integration.test.tsx +0 -699
  694. package/src/components/Toast/__tests__/Toast.unit.test.tsx +0 -750
  695. package/src/components/Toast/index.ts +0 -14
  696. package/src/components/Tooltip/Tooltip.tsx +0 -167
  697. package/src/components/Tooltip/__tests__/Tooltip.accessibility.test.tsx +0 -121
  698. package/src/components/Tooltip/__tests__/Tooltip.unit.test.tsx +0 -185
  699. package/src/components/Tooltip/index.ts +0 -7
  700. package/src/components/UserMenu/UserMenu.tsx +0 -243
  701. package/src/components/UserMenu/__tests__/UserMenu.accessibility.test.tsx +0 -139
  702. package/src/components/UserMenu/__tests__/UserMenu.integration.test.tsx +0 -188
  703. package/src/components/UserMenu/__tests__/UserMenu.unit.test.tsx +0 -458
  704. package/src/components/UserMenu/index.ts +0 -3
  705. package/src/components/__tests__/EdgeCaseTesting.enhanced.test.tsx +0 -524
  706. package/src/components/__tests__/ErrorTesting.enhanced.test.tsx +0 -455
  707. package/src/components/__tests__/SuperAdminGuard.test.tsx +0 -456
  708. package/src/components/__tests__/SuperAdminGuard.unit.test.tsx +0 -456
  709. package/src/components/examples/PermissionExample.tsx +0 -150
  710. package/src/components/examples/__tests__/PermissionExample.unit.test.tsx +0 -360
  711. package/src/components/index.ts +0 -434
  712. package/src/components.ts +0 -19
  713. package/src/constants/performance.ts +0 -14
  714. package/src/examples/CorrectPublicPageImplementation.tsx +0 -301
  715. package/src/examples/PublicEventPage.tsx +0 -274
  716. package/src/examples/PublicPageApp.tsx +0 -308
  717. package/src/examples/PublicPageUsageExample.tsx +0 -216
  718. package/src/hooks/__tests__/hooks.integration.test.tsx +0 -575
  719. package/src/hooks/__tests__/useApiFetch.unit.test.ts +0 -115
  720. package/src/hooks/__tests__/useComponentPerformance.unit.test.tsx +0 -133
  721. package/src/hooks/__tests__/useDebounce.unit.test.ts +0 -82
  722. package/src/hooks/__tests__/useFocusTrap.unit.test.tsx +0 -293
  723. package/src/hooks/__tests__/useInactivityTracker.unit.test.ts +0 -385
  724. package/src/hooks/__tests__/useOrganisationPermissions.unit.test.tsx +0 -286
  725. package/src/hooks/__tests__/useOrganisationSecurity.unit.test.tsx +0 -838
  726. package/src/hooks/__tests__/usePermissionCache.unit.test.ts +0 -627
  727. package/src/hooks/__tests__/useRBAC.unit.test.ts +0 -911
  728. package/src/hooks/__tests__/useSecureDataAccess.unit.test.tsx +0 -537
  729. package/src/hooks/__tests__/useToast.unit.test.tsx +0 -62
  730. package/src/hooks/__tests__/useZodForm.unit.test.tsx +0 -37
  731. package/src/hooks/index.ts +0 -56
  732. package/src/hooks/public/__tests__/usePublicEvent.test.tsx +0 -397
  733. package/src/hooks/public/__tests__/usePublicEventLogo.test.tsx +0 -690
  734. package/src/hooks/public/__tests__/usePublicRouteParams.test.tsx +0 -449
  735. package/src/hooks/public/index.ts +0 -34
  736. package/src/hooks/public/usePublicEvent.ts +0 -261
  737. package/src/hooks/public/usePublicEventLogo.ts +0 -285
  738. package/src/hooks/public/usePublicRouteParams.ts +0 -259
  739. package/src/hooks/useAppConfig.ts +0 -94
  740. package/src/hooks/useComponentPerformance.ts +0 -39
  741. package/src/hooks/useDataTablePerformance.ts +0 -387
  742. package/src/hooks/useDataTableState.ts +0 -110
  743. package/src/hooks/useDebounce.ts +0 -18
  744. package/src/hooks/useFocusManagement.ts +0 -161
  745. package/src/hooks/useFocusTrap.ts +0 -155
  746. package/src/hooks/useInactivityTracker.ts +0 -372
  747. package/src/hooks/useIsMobile.ts +0 -42
  748. package/src/hooks/useKeyboardShortcuts.ts +0 -237
  749. package/src/hooks/useOrganisationPermissions.ts +0 -208
  750. package/src/hooks/useOrganisationSecurity.ts +0 -262
  751. package/src/hooks/usePerformanceMonitor.ts +0 -128
  752. package/src/hooks/usePermissionCache.ts +0 -455
  753. package/src/hooks/useRBAC.ts +0 -262
  754. package/src/hooks/useSecureDataAccess.ts +0 -586
  755. package/src/hooks/useStorage.ts +0 -274
  756. package/src/hooks/useToast.ts +0 -242
  757. package/src/hooks/useZodForm.ts +0 -28
  758. package/src/index.ts +0 -200
  759. package/src/providers/AuthProvider.tsx +0 -369
  760. package/src/providers/EventProvider.tsx +0 -324
  761. package/src/providers/InactivityProvider.tsx +0 -238
  762. package/src/providers/OrganisationProvider.tsx +0 -588
  763. package/src/providers/RBACProvider.tsx +0 -634
  764. package/src/providers/UnifiedAuthProvider.tsx +0 -327
  765. package/src/providers/__tests__/EventProvider.unit.test.tsx +0 -768
  766. package/src/providers/__tests__/OrganisationProvider.basic.test.tsx +0 -116
  767. package/src/providers/__tests__/OrganisationProvider.unit.test.tsx +0 -1312
  768. package/src/providers/__tests__/UnifiedAuthProvider.inactivity.test.tsx +0 -601
  769. package/src/providers/__tests__/UnifiedAuthProvider.unit.test.tsx +0 -683
  770. package/src/providers/__tests__/index.unit.test.ts +0 -78
  771. package/src/providers/index.ts +0 -15
  772. package/src/rbac/README.md +0 -885
  773. package/src/rbac/__tests__/PagePermissionGuard.test.tsx +0 -673
  774. package/src/rbac/__tests__/README.md +0 -170
  775. package/src/rbac/__tests__/RoleBasedRouter.test.tsx +0 -709
  776. package/src/rbac/__tests__/TestContext.tsx +0 -72
  777. package/src/rbac/__tests__/__mocks__/cache.ts +0 -144
  778. package/src/rbac/__tests__/__mocks__/supabase.ts +0 -152
  779. package/src/rbac/__tests__/adapters-hooks-comprehensive.test.tsx +0 -782
  780. package/src/rbac/__tests__/adapters-hooks.test.tsx +0 -561
  781. package/src/rbac/__tests__/adapters.comprehensive.test.tsx +0 -963
  782. package/src/rbac/__tests__/adapters.test.tsx +0 -444
  783. package/src/rbac/__tests__/api.test.ts +0 -620
  784. package/src/rbac/__tests__/audit-observability-comprehensive.test.ts +0 -792
  785. package/src/rbac/__tests__/audit-observability.test.ts +0 -549
  786. package/src/rbac/__tests__/audit.test.ts +0 -616
  787. package/src/rbac/__tests__/build-contract-compliance-simple.test.ts +0 -230
  788. package/src/rbac/__tests__/cache-invalidation-comprehensive.test.ts +0 -889
  789. package/src/rbac/__tests__/cache-invalidation.test.ts +0 -457
  790. package/src/rbac/__tests__/cache.test.ts +0 -458
  791. package/src/rbac/__tests__/components-navigation-guard.enhanced.test.tsx +0 -859
  792. package/src/rbac/__tests__/components-navigation-guard.test.tsx +0 -895
  793. package/src/rbac/__tests__/components-navigation-provider.test.tsx +0 -692
  794. package/src/rbac/__tests__/components-page-permission-guard.test.tsx +0 -673
  795. package/src/rbac/__tests__/components-page-permission-provider.test.tsx +0 -614
  796. package/src/rbac/__tests__/components-permission-enforcer.enhanced.fixed.test.tsx +0 -836
  797. package/src/rbac/__tests__/components-permission-enforcer.enhanced.test.tsx +0 -837
  798. package/src/rbac/__tests__/components-permission-enforcer.test.tsx +0 -825
  799. package/src/rbac/__tests__/components-role-based-router.test.tsx +0 -709
  800. package/src/rbac/__tests__/components-secure-data-provider.test.tsx +0 -607
  801. package/src/rbac/__tests__/config.test.ts +0 -583
  802. package/src/rbac/__tests__/core-logic-unit.test.ts +0 -190
  803. package/src/rbac/__tests__/core-permission-logic-comprehensive.test.ts +0 -1467
  804. package/src/rbac/__tests__/core-permission-logic-fixed.test.ts +0 -151
  805. package/src/rbac/__tests__/core-permission-logic-simple.test.ts +0 -968
  806. package/src/rbac/__tests__/core-permission-logic.test.ts +0 -966
  807. package/src/rbac/__tests__/edge-cases-comprehensive.test.ts +0 -988
  808. package/src/rbac/__tests__/edge-cases.test.ts +0 -654
  809. package/src/rbac/__tests__/engine.test.ts +0 -361
  810. package/src/rbac/__tests__/engine.unit.test.ts +0 -361
  811. package/src/rbac/__tests__/hooks.enhanced.test.tsx +0 -979
  812. package/src/rbac/__tests__/hooks.fixed.test.tsx +0 -475
  813. package/src/rbac/__tests__/hooks.test.tsx +0 -385
  814. package/src/rbac/__tests__/index.test.ts +0 -269
  815. package/src/rbac/__tests__/integration.enhanced.test.tsx +0 -824
  816. package/src/rbac/__tests__/page-permission-guard-super-admin.test.tsx +0 -261
  817. package/src/rbac/__tests__/performance.enhanced.test.tsx +0 -724
  818. package/src/rbac/__tests__/permissions.test.ts +0 -383
  819. package/src/rbac/__tests__/requires-event.test.ts +0 -330
  820. package/src/rbac/__tests__/scope-isolation-comprehensive.test.ts +0 -1349
  821. package/src/rbac/__tests__/scope-isolation.test.ts +0 -755
  822. package/src/rbac/__tests__/secure-client-rls-comprehensive.test.ts +0 -592
  823. package/src/rbac/__tests__/secure-client-rls.test.ts +0 -377
  824. package/src/rbac/__tests__/security.test.ts +0 -296
  825. package/src/rbac/__tests__/setup.ts +0 -228
  826. package/src/rbac/__tests__/test-utils-enhanced.tsx +0 -400
  827. package/src/rbac/__tests__/types.test.ts +0 -685
  828. package/src/rbac/adapters.tsx +0 -726
  829. package/src/rbac/api.ts +0 -339
  830. package/src/rbac/audit-enhanced.ts +0 -339
  831. package/src/rbac/audit.ts +0 -338
  832. package/src/rbac/cache.ts +0 -215
  833. package/src/rbac/components/EnhancedNavigationMenu.tsx +0 -294
  834. package/src/rbac/components/NavigationGuard.tsx +0 -294
  835. package/src/rbac/components/NavigationProvider.tsx +0 -314
  836. package/src/rbac/components/PagePermissionGuard.tsx +0 -430
  837. package/src/rbac/components/PagePermissionProvider.tsx +0 -274
  838. package/src/rbac/components/PermissionEnforcer.tsx +0 -307
  839. package/src/rbac/components/RoleBasedRouter.tsx +0 -425
  840. package/src/rbac/components/SecureDataProvider.tsx +0 -319
  841. package/src/rbac/components/__tests__/EnhancedNavigationMenu.test.tsx +0 -631
  842. package/src/rbac/components/__tests__/NavigationProvider.test.tsx +0 -667
  843. package/src/rbac/components/__tests__/PagePermissionProvider.test.tsx +0 -647
  844. package/src/rbac/components/__tests__/SecureDataProvider.test.tsx +0 -496
  845. package/src/rbac/components/index.ts +0 -64
  846. package/src/rbac/config.ts +0 -133
  847. package/src/rbac/docs/event-based-apps.md +0 -285
  848. package/src/rbac/engine.ts +0 -1026
  849. package/src/rbac/eslint-rules.js +0 -285
  850. package/src/rbac/examples/CompleteRBACExample.tsx +0 -323
  851. package/src/rbac/examples/EventBasedApp.tsx +0 -238
  852. package/src/rbac/hooks.ts +0 -570
  853. package/src/rbac/index.ts +0 -114
  854. package/src/rbac/permissions.ts +0 -293
  855. package/src/rbac/secureClient.ts +0 -244
  856. package/src/rbac/security.ts +0 -346
  857. package/src/rbac/testing/__tests__/index.test.tsx +0 -342
  858. package/src/rbac/testing/index.tsx +0 -340
  859. package/src/rbac/types.ts +0 -343
  860. package/src/rbac/utils/__tests__/eventContext.test.ts +0 -428
  861. package/src/rbac/utils/__tests__/eventContext.unit.test.ts +0 -428
  862. package/src/rbac/utils/eventContext.ts +0 -83
  863. package/src/styles/__tests__/styles.unit.test.ts +0 -164
  864. package/src/styles/core.css +0 -422
  865. package/src/styles/index.ts +0 -51
  866. package/src/test-dom-cleanup.test.tsx +0 -38
  867. package/src/theming/__tests__/README.md +0 -335
  868. package/src/theming/__tests__/runtime.accessibility.test.ts +0 -474
  869. package/src/theming/__tests__/runtime.error.test.ts +0 -616
  870. package/src/theming/__tests__/runtime.integration.test.ts +0 -376
  871. package/src/theming/__tests__/runtime.performance.test.ts +0 -411
  872. package/src/theming/__tests__/runtime.unit.test.ts +0 -470
  873. package/src/theming/runtime.ts +0 -187
  874. package/src/types/__tests__/database.unit.test.ts +0 -489
  875. package/src/types/__tests__/guards.unit.test.ts +0 -146
  876. package/src/types/__tests__/index.unit.test.ts +0 -77
  877. package/src/types/__tests__/organisation.unit.test.ts +0 -713
  878. package/src/types/__tests__/rbac.unit.test.ts +0 -621
  879. package/src/types/__tests__/security.unit.test.ts +0 -347
  880. package/src/types/__tests__/supabase.unit.test.ts +0 -658
  881. package/src/types/__tests__/theme.unit.test.ts +0 -218
  882. package/src/types/__tests__/unified.unit.test.ts +0 -537
  883. package/src/types/__tests__/validation.unit.test.ts +0 -616
  884. package/src/types/database.ts +0 -472
  885. package/src/types/guards.ts +0 -30
  886. package/src/types/index.ts +0 -25
  887. package/src/types/organisation.ts +0 -184
  888. package/src/types/security.ts +0 -70
  889. package/src/types/supabase.ts +0 -166
  890. package/src/types/theme.ts +0 -6
  891. package/src/types/unified.ts +0 -262
  892. package/src/types/validation.ts +0 -164
  893. package/src/types/vitest-globals.d.ts +0 -43
  894. package/src/utils/__mocks__/supabaseMock.ts +0 -75
  895. package/src/utils/__mocks__/supabaseMock.tsx +0 -198
  896. package/src/utils/__tests__/appConfig.unit.test.ts +0 -55
  897. package/src/utils/__tests__/appNameResolver.unit.test.ts +0 -137
  898. package/src/utils/__tests__/audit.unit.test.ts +0 -69
  899. package/src/utils/__tests__/auth-utils.unit.test.ts +0 -70
  900. package/src/utils/__tests__/bundleAnalysis.unit.test.ts +0 -317
  901. package/src/utils/__tests__/cn.unit.test.ts +0 -34
  902. package/src/utils/__tests__/deviceFingerprint.unit.test.ts +0 -480
  903. package/src/utils/__tests__/dynamicUtils.unit.test.ts +0 -322
  904. package/src/utils/__tests__/formatDate.unit.test.ts +0 -109
  905. package/src/utils/__tests__/formatting.unit.test.ts +0 -66
  906. package/src/utils/__tests__/index.unit.test.ts +0 -251
  907. package/src/utils/__tests__/lazyLoad.unit.test.tsx +0 -304
  908. package/src/utils/__tests__/organisationContext.unit.test.ts +0 -192
  909. package/src/utils/__tests__/performanceBudgets.unit.test.ts +0 -259
  910. package/src/utils/__tests__/permissionTypes.unit.test.ts +0 -250
  911. package/src/utils/__tests__/permissionUtils.unit.test.ts +0 -362
  912. package/src/utils/__tests__/sanitization.unit.test.ts +0 -346
  913. package/src/utils/__tests__/schemaUtils.unit.test.ts +0 -441
  914. package/src/utils/__tests__/secureDataAccess.unit.test.ts +0 -334
  915. package/src/utils/__tests__/secureErrors.unit.test.ts +0 -377
  916. package/src/utils/__tests__/secureStorage.unit.test.ts +0 -293
  917. package/src/utils/__tests__/security.unit.test.ts +0 -127
  918. package/src/utils/__tests__/securityMonitor.unit.test.ts +0 -280
  919. package/src/utils/__tests__/sessionTracking.unit.test.ts +0 -370
  920. package/src/utils/__tests__/validation.unit.test.ts +0 -84
  921. package/src/utils/__tests__/validationUtils.unit.test.ts +0 -571
  922. package/src/utils/appConfig.ts +0 -47
  923. package/src/utils/appIdResolver.ts +0 -130
  924. package/src/utils/appNameResolver.ts +0 -190
  925. package/src/utils/audit.ts +0 -127
  926. package/src/utils/auth-utils.ts +0 -96
  927. package/src/utils/bundleAnalysis.ts +0 -129
  928. package/src/utils/cn.ts +0 -7
  929. package/src/utils/debugLogger.ts +0 -46
  930. package/src/utils/deviceFingerprint.ts +0 -215
  931. package/src/utils/dynamicUtils.ts +0 -105
  932. package/src/utils/formatting.ts +0 -77
  933. package/src/utils/index.ts +0 -145
  934. package/src/utils/lazyLoad.tsx +0 -44
  935. package/src/utils/organisationContext.ts +0 -135
  936. package/src/utils/performanceBenchmark.ts +0 -64
  937. package/src/utils/performanceBudgets.ts +0 -111
  938. package/src/utils/permissionTypes.ts +0 -37
  939. package/src/utils/permissionUtils.ts +0 -31
  940. package/src/utils/print/PrintDataProcessor.ts +0 -390
  941. package/src/utils/print/__tests__/PrintDataProcessor.unit.test.ts +0 -219
  942. package/src/utils/print/__tests__/usePrintOptimization.unit.test.tsx +0 -353
  943. package/src/utils/print/examples/PrintUtilitiesShowcase.tsx +0 -397
  944. package/src/utils/print/index.ts +0 -29
  945. package/src/utils/print/types.ts +0 -196
  946. package/src/utils/print/usePrintOptimization.ts +0 -272
  947. package/src/utils/sanitization.ts +0 -264
  948. package/src/utils/schemaUtils.ts +0 -37
  949. package/src/utils/secureDataAccess.ts +0 -361
  950. package/src/utils/secureErrors.ts +0 -79
  951. package/src/utils/secureStorage.ts +0 -244
  952. package/src/utils/security.ts +0 -156
  953. package/src/utils/securityMonitor.ts +0 -45
  954. package/src/utils/sessionTracking.ts +0 -170
  955. package/src/utils/storage/README.md +0 -348
  956. package/src/utils/storage/__tests__/config.unit.test.ts +0 -206
  957. package/src/utils/storage/__tests__/helpers.unit.test.ts +0 -648
  958. package/src/utils/storage/__tests__/index.unit.test.ts +0 -167
  959. package/src/utils/storage/__tests__/types.unit.test.ts +0 -441
  960. package/src/utils/storage/config.ts +0 -100
  961. package/src/utils/storage/helpers.ts +0 -359
  962. package/src/utils/storage/index.ts +0 -36
  963. package/src/utils/storage/types.ts +0 -90
  964. package/src/utils/validation.ts +0 -111
  965. package/src/utils/validationUtils.ts +0 -120
  966. package/src/validation/__tests__/common.unit.test.ts +0 -101
  967. package/src/validation/__tests__/csrf.unit.test.ts +0 -302
  968. package/src/validation/__tests__/passwordSchema.unit.test.ts +0 -98
  969. package/src/validation/__tests__/sqlInjectionProtection.unit.test.ts +0 -466
  970. package/src/validation/common.ts +0 -53
  971. package/src/validation/csrf.ts +0 -214
  972. package/src/validation/index.ts +0 -43
  973. package/src/validation/passwordSchema.ts +0 -125
  974. package/src/validation/sanitization.ts +0 -96
  975. package/src/validation/schemaUtils.ts +0 -42
  976. package/src/validation/sqlInjectionProtection.ts +0 -242
  977. package/src/validation/user.ts +0 -34
  978. package/dist/{DataTable-EEUDXPE5.js.map → DataTable-2LB6HI6V.js.map} +0 -0
  979. package/dist/{api-ETQ6YJ3C.js.map → api-AIJ3IJX3.js.map} +0 -0
  980. package/dist/{appNameResolver-7GHF5ED2.js.map → audit-PD5L5ZSC.js.map} +0 -0
  981. package/dist/{audit-BUW3LMJB.js.map → chunk-DC5AMYBS.js.map} +0 -0
  982. package/dist/{validation-PM_iOaTI.d.ts → validation-D2-NNCCE.d.ts} +6 -6
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/components/DataTable/DataTable.tsx","../src/components/DataTable/components/DataTableCore.tsx","../src/components/Checkbox/Checkbox.tsx","../src/components/DataTable/styles.ts","../src/components/Input/Input.tsx","../src/components/DataTable/components/DataTableToolbar.tsx","../src/components/DataTable/components/GroupingDropdown.tsx","../src/components/Select/Select.tsx","../src/components/DataTable/components/ColumnVisibilityDropdown.tsx","../src/components/DataTable/components/UnifiedTableBody.tsx","../src/components/DataTable/components/EmptyState.tsx","../src/components/DataTable/components/ColumnFilter.tsx","../src/components/DataTable/components/FilterRow.tsx","../src/components/DataTable/components/ActionButtons.tsx","../src/components/DataTable/utils/hierarchicalUtils.ts","../src/components/DataTable/components/PaginationControls.tsx","../src/components/DataTable/components/LoadingState.tsx","../src/components/DataTable/components/ImportModal.tsx","../src/components/DataTable/components/DataTableModals.tsx","../src/components/DataTable/components/DataTableErrorBoundary.tsx","../src/components/Alert/Alert.tsx","../src/components/DataTable/hooks/useColumnOrderPersistence.ts","../src/components/DataTable/hooks/useHierarchicalState.ts","../src/components/DataTable/hooks/useDataTableState.ts","../src/components/DataTable/utils/hierarchicalSorting.ts","../src/components/DataTable/core/ColumnFactory.ts","../src/components/DataTable/core/DataManager.ts","../src/components/DataTable/core/ColumnManager.ts","../src/components/DataTable/core/ActionManager.ts","../src/components/DataTable/core/StateManager.ts","../src/components/DataTable/core/PluginRegistry.ts","../src/components/DataTable/utils/exportUtils.ts","../src/components/DataTable/core/LocalDataAdapter.ts","../src/components/DataTable/core/DataTableContext.tsx","../src/components/DataTable/components/BulkOperationsDropdown.tsx","../src/components/DataTable/components/GroupHeader.tsx","../src/components/DataTable/components/EditableRow.tsx"],"sourcesContent":["/**\n * @file Enhanced DataTable Component with Performance Optimizations\n * @package @jmruthers/pace-core\n * @module Components/DataTable\n * @since 0.3.0\n *\n * A comprehensive, feature-rich data table component built on top of TanStack Table.\n * Provides advanced data management capabilities with a clean, accessible interface.\n * \n * The DataTable is an enterprise-grade data table component that provides all the features\n * you need for complex data management: sorting, filtering, pagination, search, export/import,\n * inline editing, grouping with aggregation, virtual scrolling, and full accessibility support.\n * \n * ## Performance Features\n * - 🚀 **Intelligent Virtual Scrolling** - Automatically handles 100,000+ records with smooth scrolling\n * - ⚡ **Smart Pagination** - Automatic mode detection (client/server/hybrid)\n * - 🔍 **Advanced Search** - Fast indexing with fuzzy search capabilities\n * - 💾 **Memory Management** - Intelligent data chunking and cleanup\n * - 🎯 **Intersection Observer** - Efficient visibility tracking\n * - 🔄 **Data Chunking** - LRU cache for optimal memory usage\n * - 🧠 **Adaptive Rendering** - Automatically switches between standard and virtualized rendering\n *\n * ## Features\n * - ✅ **Search** - Global search with column-specific filters\n * - ✅ **Pagination** - Configurable pagination with custom initial page size and page size options\n * - ✅ **Sorting** - Multi-column sorting with visual indicators (↕️ unsorted, ↑ ascending, ↓ descending)\n * - ✅ **Filtering** - Column-specific filtering with multiple input types\n * - ✅ **Export/Import** - CSV and JSON data export/import\n * - ✅ **Row Selection** - Single and multi-row selection for bulk operations\n * - ✅ **Row Creation** - Add new rows with validation\n * - ✅ **Row Editing** - Inline row editing with input field conversion\n * - ✅ **Row Deletion** - Individual and bulk row deletion\n * - ✅ **Actions** - Custom row actions and toolbar buttons\n * - ✅ **Grouping** - Data grouping with aggregation functions\n * - ✅ **Column Visibility** - Show/hide columns dynamically\n * - ✅ **Column Reordering** - Drag and drop column reordering\n * - ✅ **Intelligent Virtual Scrolling** - Automatic performance optimization for large datasets\n * - ✅ **Responsive Design** - Mobile-friendly responsive layout\n * - ✅ **Accessibility** - WCAG 2.1 AA compliant with keyboard navigation\n * - ✅ **TypeScript** - Full TypeScript support with strict typing\n *\n * @example\n * ```tsx\n * // Basic usage - simple data table (automatically optimized)\n * import { DataTable, type DataTableColumn } from '@jmruthers/pace-core';\n * \n * interface User {\n * id: string;\n * name: string;\n * email: string;\n * role: string;\n * status: 'active' | 'inactive';\n * }\n * \n * const columns: DataTableColumn<User>[] = [\n * {\n * accessorKey: 'name',\n * header: 'Name',\n * sortable: true,\n * searchable: true,\n * },\n * {\n * accessorKey: 'email', \n * header: 'Email',\n * sortable: true,\n * searchable: true,\n * },\n * {\n * accessorKey: 'role',\n * header: 'Role',\n * sortable: true,\n * enableGrouping: true,\n * },\n * {\n * accessorKey: 'status',\n * header: 'Status',\n * sortable: true,\n * cell: ({ row }) => (\n * <span className={`px-2 py-1 rounded text-xs ${\n * row.original.status === 'active' \n * ? 'bg-main-100 text-main-800'\n * : 'bg-acc-100 text-acc-800'\n * }`}>\n * {row.original.status}\n * </span>\n * ),\n * },\n * ];\n * \n * const data: User[] = [\n * { id: '1', name: 'John Doe', email: 'john@example.com', role: 'Admin', status: 'active' },\n * { id: '2', name: 'Jane Smith', email: 'jane@example.com', role: 'User', status: 'active' },\n * ];\n * \n * <DataTable\n * data={data}\n * columns={columns}\n * title=\"Users\"\n * description=\"Manage your users\"\n * features={{\n * search: true,\n * pagination: true,\n * sorting: true,\n * filtering: true,\n * export: true,\n * import: true,\n * selection: true,\n * creation: true,\n * editing: true,\n * deletion: true,\n * deleteSelected: true,\n * grouping: true,\n * columnVisibility: true,\n * columnReordering: true,\n * }}\n * initialPageSize={25} // Set custom initial page size\n * columnOrder={['select', 'name', 'email', 'role', 'status']} // Control column order\n * onEditRow={(row, data) => console.log('Edit:', row, data)}\n * onDeleteRow={(row) => console.log('Delete:', row)}\n * />\n * ```\n * \n * @example\n * ```tsx\n * // DataTable with custom column ordering and selection\n * <DataTable\n * data={data}\n * columns={columns}\n * title=\"Custom Ordered Table\"\n * features={{\n * selection: true,\n * sorting: true,\n * filtering: true,\n * // ... other features\n * }}\n * // Control the exact order of columns, including selection column\n * columnOrder={['select', 'name', 'email', 'role', 'status']}\n * // When selection is enabled but not in columnOrder, it defaults to first position\n * // columnOrder={['name', 'email', 'role']} // selection column will be first\n * />\n * ```\n * \n * @example\n * ```tsx\n * // Large dataset with performance optimizations\n * <DataTable\n * data={largeDataset} // 50,000+ records\n * columns={columns}\n * title=\"Large Dataset\"\n * \n * // Features configuration\n * features={{\n * search: true,\n * pagination: true,\n * sorting: true,\n * filtering: true,\n * export: true,\n * import: true,\n * selection: true,\n * creation: true,\n * editing: true,\n * deletion: true,\n * deleteSelected: true,\n * grouping: true,\n * columnVisibility: true,\n * columnReordering: true,\n * // Virtualization is automatically enabled for large datasets\n * }}\n * \n * // Performance configuration (optional)\n * performance={{\n * virtualScrolling: true,\n * enableChunking: true,\n * chunkSize: 1000,\n * enableWebWorkers: true,\n * }}\n * />\n * ```\n * \n * @example\n * ```tsx\n * // Server-side data with large datasets\n * <DataTable\n * data={[]} // Empty - data comes from server\n * columns={columns}\n * title=\"Server-side Data\"\n * \n * // Features configuration\n * features={{\n * search: true,\n * pagination: true,\n * sorting: true,\n * filtering: true,\n * export: true,\n * import: true,\n * selection: true,\n * creation: true,\n * editing: true,\n * deletion: true,\n * deleteSelected: true,\n * grouping: true,\n * columnVisibility: true,\n * columnReordering: true,\n * // Virtualization is automatically enabled for large datasets\n * }}\n * \n * // Server-side configuration\n * serverSide={{\n * fetchData: async (params) => {\n * const response = await fetchServerData(params);\n * return response;\n * },\n * enableServerSorting: true,\n * enableServerFiltering: true,\n * enableServerSearch: true,\n * enableServerPagination: true,\n * }}\n * />\n * ```\n * \n * @example\n * ```tsx\n * // DataTable with customized import modal text\n * const importConfig = {\n * title: \"Import Customer Data\",\n * description: \"Upload a CSV file with customer information to import multiple records.\",\n * uploadText: \"Choose a customer CSV file to upload\",\n * selectFileButtonText: \"Browse Files\",\n * importButtonText: \"Import Customers\",\n * importButtonProcessingText: \"Processing customers...\",\n * previewHeaderText: \"Customer Preview (first 5 records)\",\n * totalRowsText: \"Found {count} customer records to import\"\n * };\n * \n * <DataTable\n * data={customerData}\n * columns={customerColumns}\n * title=\"Customer Management\"\n * features={{\n * search: true,\n * pagination: true,\n * sorting: true,\n * filtering: true,\n * export: true,\n * import: true,\n * selection: true,\n * creation: true,\n * editing: true,\n * deletion: true,\n * deleteSelected: true,\n * grouping: true,\n * columnVisibility: true,\n * columnReordering: true,\n * }}\n * importModalConfig={importConfig}\n * onImport={(importedData) => {\n * console.log('Imported customers:', importedData);\n * // Handle imported customer data\n * }}\n * />\n * ```\n */\n\nimport React from 'react';\nimport { DataTableCore } from './components/DataTableCore';\nimport type { \n DataRecord,\n GetRowId,\n ServerSideParams,\n PerformanceConfig,\n ServerSideConfig,\n ChunkingConfig,\n SearchIndexConfig,\n PaginationMode,\n EmptyStateConfig,\n DataTableFeatureConfig,\n DataTableColumn,\n SimpleColumn,\n AggregateConfig,\n DataTableAction,\n HierarchicalConfig\n} from './types';\nimport type { ImportModalConfig } from './components/ImportModal';\n\n// ============================================================================\n// ENHANCED DATATABLE PROPS\n// ============================================================================\n\n/**\n * Enhanced DataTable props with performance features\n * @template TData - The type of data records in the table\n */\nexport interface DataTableProps<TData extends DataRecord> {\n // ========================================\n // CORE DATA\n // ========================================\n \n /** Array of data records to display in the table */\n data: TData[];\n /** Column definitions for the table */\n columns: DataTableColumn<TData>[];\n \n // ========================================\n // DISPLAY\n // ========================================\n \n /** Optional title displayed above the table */\n title?: string;\n /** Optional description displayed below the title */\n description?: string;\n /** Visual variant of the table */\n variant?: 'default' | 'compact' | 'spacious';\n /** Additional CSS classes for the table container */\n className?: string;\n \n // ========================================\n // NEW: UNIFIED FEATURE CONFIGURATION\n // ========================================\n \n /** Feature configuration - all features are disabled by default */\n features: DataTableFeatureConfig;\n\n // ========================================\n // HIERARCHICAL CONFIGURATION\n // ========================================\n \n /** Hierarchical parent/child row configuration */\n hierarchical?: HierarchicalConfig;\n \n // ========================================\n // PERFORMANCE FEATURES\n // ========================================\n \n /** Performance optimization configuration */\n performance?: PerformanceConfig;\n /** Server-side data fetching configuration */\n serverSide?: ServerSideConfig<TData>;\n /** Override automatic pagination mode detection */\n paginationMode?: PaginationMode;\n /** Data chunking configuration for memory optimization */\n chunking?: ChunkingConfig;\n /** Search indexing configuration for fast search */\n searchIndex?: SearchIndexConfig;\n /** Virtual scrolling height */\n virtualHeight?: number;\n /** Initial page size for pagination */\n initialPageSize?: number;\n /** Enable enhanced pagination controls */\n enhancedPagination?: boolean;\n /** Custom loading component */\n loadingComponent?: React.ComponentType;\n /** Custom error component */\n errorComponent?: React.ComponentType<{ error: Error; retry: () => void }>;\n \n // ========================================\n // EVENT HANDLERS\n // ========================================\n \n /** Callback when a row is edited */\n onEditRow?: (row: TData, data: Partial<TData>) => void;\n /** Callback when a row is deleted */\n onDeleteRow?: (row: TData) => void;\n /** Callback when a new row is created */\n onCreateRow?: (data: Partial<TData>) => void;\n /** Callback when data is imported */\n onImport?: (data: TData[]) => void | Promise<void>;\n /** Callback when row selection changes */\n onRowSelectionChange?: (selection: Record<string, boolean>) => void;\n /** Controlled selection state */\n selection?: Record<string, boolean>;\n /** Callback when bulk delete selected rows is triggered */\n onDeleteSelected?: (selectedRows: Record<string, boolean>) => void;\n \n // ========================================\n // UTILITIES\n // ========================================\n \n /** Function to generate unique row IDs */\n getRowId?: GetRowId<TData>;\n /** Whether the table is in a loading state */\n isLoading?: boolean;\n /** Custom component to display when table is empty */\n emptyState?: EmptyStateConfig | React.ReactElement;\n /** Array of aggregation functions for grouped data */\n aggregates?: AggregateConfig[];\n \n /** Import modal configuration */\n importModalConfig?: ImportModalConfig;\n \n /** Custom row actions - use this for custom action buttons */\n actions?: DataTableAction<TData>[];\n \n /** Column order configuration - array of column IDs in desired order */\n columnOrder?: string[];\n}\n\n// ============================================================================\n// MAIN ENHANCED DATATABLE COMPONENT\n// ============================================================================\n\n/**\n * Enhanced DataTable with comprehensive performance optimizations\n * \n * This component automatically detects dataset size and applies appropriate performance optimizations:\n * - < 1,000 records: Standard rendering with full feature support\n * - 1,000+ records: Automatic virtual scrolling with intelligent memory management\n * - 10,000+ records: Enhanced chunking and memory optimization\n * - 100,000+ records: Advanced server-side processing with virtualization\n * \n * Features are configured through the unified `features` prop for maximum flexibility.\n */\nexport function DataTable<TData extends DataRecord>(props: DataTableProps<TData>) {\n // Validate required features\n if (!props.features) {\n throw new Error('DataTable: features configuration is required');\n }\n\n // Validate feature dependencies\n if (props.features.deleteSelected && !props.features.deletion) {\n console.warn('DataTable: deleteSelected requires deletion to be enabled');\n }\n\n return <DataTableCore {...props} />;\n}\n\n// ============================================================================\n// EXPORT WITH PERFORMANCE OPTIMIZATIONS\n// ============================================================================\n\n/**\n * DataTable component with React.memo for performance optimization\n */\nconst DataTableComponent = React.memo(DataTable) as typeof DataTable;\n\nexport { DataTableComponent as default };\n\n// Re-export for convenience\nexport { DataTable as EnhancedDataTable };\n","/**\n * @file DataTable Core Component\n * @package @jmruthers/pace-core\n * @module Components/DataTable/Components\n * @since 0.4.0\n * \n * Core DataTable component that orchestrates all sub-components.\n * This is the main component that consumers will use.\n */\n\nimport React, { useMemo, useCallback, useEffect, useState, useRef } from 'react';\nimport { \n useReactTable, \n getCoreRowModel, \n getFilteredRowModel, \n getSortedRowModel, \n getPaginationRowModel, \n getGroupedRowModel, \n getExpandedRowModel,\n flexRender,\n type SortingState,\n type ColumnDef,\n type ColumnFiltersState,\n type VisibilityState,\n type GroupingState,\n type ExpandedState,\n type PaginationState,\n type HeaderContext,\n type CellContext,\n} from '@tanstack/react-table';\nimport { Edit, Trash, ChevronUp, ChevronDown, ChevronsUpDown } from 'lucide-react';\nimport { cn } from '../../../utils/cn';\nimport { Checkbox } from '../../Checkbox/Checkbox';\nimport { Button } from '../../Button/Button';\nimport { getTableClasses, getMainContainerClasses } from '../styles';\nimport { useDataTablePerformance } from '../../../hooks/useDataTablePerformance';\nimport { DataTableToolbar } from './DataTableToolbar';\nimport { UnifiedTableBody } from './UnifiedTableBody';\nimport { PaginationControls, EnhancedPaginationControls } from './PaginationControls';\nimport { LoadingState } from './LoadingState';\nimport { DataTableModals } from './DataTableModals';\nimport { DataTableErrorBoundary } from './DataTableErrorBoundary';\nimport { useColumnOrderPersistence } from '../hooks/useColumnOrderPersistence';\nimport { useHierarchicalState } from '../hooks/useHierarchicalState';\nimport { useDataTableState } from '../hooks/useDataTableState';\nimport { validateHierarchicalData, sortHierarchicalData } from '../utils/hierarchicalUtils';\nimport { sortHierarchicalData as sortHierarchicalDataWithSorting } from '../utils/hierarchicalSorting';\nimport { ColumnFactory } from '../core/ColumnFactory';\n\nimport type { \n DataRecord,\n GetRowId,\n ServerSideParams,\n PerformanceConfig,\n ServerSideConfig,\n ChunkingConfig,\n SearchIndexConfig,\n PaginationMode,\n EmptyStateConfig,\n DataTableFeatureConfig,\n DataTableColumn,\n SimpleColumn,\n AggregateConfig,\n DataTableAction,\n HierarchicalConfig,\n HierarchicalDataRow\n} from '../types';\nimport type { ImportModalConfig } from './ImportModal';\n\n// ============================================================================\n// CORE COMPONENT PROPS\n// ============================================================================\n\nexport interface DataTableCoreProps<TData extends DataRecord> {\n // Core data\n data: TData[];\n columns: DataTableColumn<TData>[];\n \n // Display\n title?: string;\n description?: string;\n variant?: 'default' | 'compact' | 'spacious';\n className?: string;\n \n // Feature configuration\n features: DataTableFeatureConfig;\n \n // Hierarchical configuration\n hierarchical?: HierarchicalConfig;\n \n // Performance props\n performance?: PerformanceConfig;\n serverSide?: ServerSideConfig<TData>;\n paginationMode?: PaginationMode;\n chunking?: ChunkingConfig;\n searchIndex?: SearchIndexConfig;\n virtualHeight?: number;\n enhancedPagination?: boolean;\n loadingComponent?: React.ComponentType;\n errorComponent?: React.ComponentType<{ error: Error; retry: () => void }>;\n initialPageSize?: number;\n \n // Event handlers\n onEditRow?: (row: TData, data: Partial<TData>) => void;\n onDeleteRow?: (row: TData) => void;\n onCreateRow?: (data: Partial<TData>) => void;\n onImport?: (data: TData[]) => void | Promise<void>;\n onRowSelectionChange?: (selection: Record<string, boolean>) => void;\n selection?: Record<string, boolean>;\n onDeleteSelected?: (selectedRows: Record<string, boolean>) => void;\n \n // Utilities\n getRowId?: GetRowId<TData>;\n isLoading?: boolean;\n emptyState?: EmptyStateConfig | React.ReactElement;\n aggregates?: AggregateConfig[];\n importModalConfig?: ImportModalConfig;\n actions?: DataTableAction<TData>[];\n columnOrder?: string[];\n}\n\n// ============================================================================\n// INTERNAL COMPONENT (USES CONTEXT)\n// ============================================================================\n\nfunction DataTableInternal<TData extends DataRecord>({\n data,\n columns,\n title,\n description,\n variant = 'default',\n className,\n features,\n hierarchical,\n performance = {},\n serverSide,\n paginationMode,\n chunking,\n searchIndex,\n virtualHeight = 600,\n enhancedPagination = false,\n loadingComponent: LoadingComponent = LoadingState,\n errorComponent: ErrorComponent,\n initialPageSize = 10,\n onEditRow,\n onDeleteRow,\n onCreateRow,\n onImport,\n onRowSelectionChange,\n selection,\n onDeleteSelected,\n getRowId,\n isLoading: externalIsLoading = false,\n emptyState,\n aggregates = [],\n importModalConfig,\n actions = [],\n columnOrder: externalColumnOrder,\n}: DataTableCoreProps<TData>) {\n \n // ============================================================================\n // TABLE STATE MANAGEMENT (Single State Source)\n // ============================================================================\n \n const [sorting, setSorting] = useState<SortingState>([]);\n const [columnFilters, setColumnFilters] = useState<ColumnFiltersState>([]);\n const [columnVisibility, setColumnVisibility] = useState<VisibilityState>({});\n const [internalRowSelection, setInternalRowSelection] = useState<Record<string, boolean>>({});\n const rowSelection = selection !== undefined ? selection : internalRowSelection;\n const [columnOrder, setColumnOrder] = useState<string[]>(() => {\n // Use external columnOrder if provided, otherwise derive from columns\n if (externalColumnOrder && externalColumnOrder.length > 0) {\n return externalColumnOrder;\n }\n return columns.map(col => col.id || col.accessorKey || '').filter(Boolean);\n });\n\n // Update columnOrder to include selection column if it's not already included\n const effectiveColumnOrder = useMemo(() => {\n if (features.selection && !columnOrder.includes('select')) {\n return ['select', ...columnOrder];\n }\n return columnOrder;\n }, [columnOrder, features.selection]);\n const [grouping, setGrouping] = useState<GroupingState>([]);\n const [expanded, setExpanded] = useState<ExpandedState>({});\n \n // ============================================================================\n // PAGINATION STATE MANAGEMENT\n // ============================================================================\n \n const [pagination, setPagination] = useState<PaginationState>({\n pageIndex: 0,\n pageSize: initialPageSize,\n });\n \n // ============================================================================\n // EDITING STATE MANAGEMENT\n // ============================================================================\n \n // Use the centralized state management hook\n const { state: tableState, actions: tableActions } = useDataTableState<TData>({\n initialPageSize,\n columnIds: effectiveColumnOrder,\n initialRowSelection: selection,\n onRowSelectionChange\n });\n \n // Extract editing state from the centralized state\n const isCreating = tableState.isCreating;\n const creationData = tableState.creationData;\n const editingRowId = tableState.editingRowId;\n const editingData = tableState.editingData;\n \n // ============================================================================\n // IMPORT MODAL STATE MANAGEMENT\n // ============================================================================\n \n const [showImportModal, setShowImportModal] = useState(false);\n \n // ============================================================================\n // FILTER ROW VISIBILITY STATE MANAGEMENT\n // ============================================================================\n \n const [showFilterRow, setShowFilterRow] = useState(false);\n \n // ============================================================================\n // PERFORMANCE HOOK\n // ============================================================================\n \n const performanceHook = useDataTablePerformance({\n data,\n performance,\n serverSide,\n chunking,\n searchIndex,\n });\n\n const {\n paginationMode: detectedMode,\n isVirtualized,\n pageSizeOptions: optimizedPageSizeOptions,\n processedData,\n totalCount,\n isLoading: performanceLoading,\n searchQuery,\n setSearchQuery,\n fetchServerData,\n serverData,\n cleanup,\n } = performanceHook;\n\n // ============================================================================\n // HIERARCHICAL DATA VALIDATION AND PROCESSING\n // ============================================================================\n \n const hierarchicalValidation = useMemo(() => {\n if (features.hierarchical && hierarchical?.enabled) {\n return validateHierarchicalData(data as unknown as HierarchicalDataRow[]);\n }\n return { isValid: true, errors: [] };\n }, [features.hierarchical, hierarchical?.enabled, data]);\n\n const processedHierarchicalData = useMemo(() => {\n if (features.hierarchical && hierarchical?.enabled && hierarchicalValidation.isValid) {\n return sortHierarchicalData(data as unknown as HierarchicalDataRow[]);\n }\n return data;\n }, [features.hierarchical, hierarchical?.enabled, hierarchicalValidation.isValid, data]);\n\n // ============================================================================\n // HIERARCHICAL STATE MANAGEMENT\n // ============================================================================\n \n const hierarchicalState = useHierarchicalState(\n processedHierarchicalData as unknown as HierarchicalDataRow[],\n hierarchical\n );\n\n // ============================================================================\n // COLUMN ORDER PERSISTENCE\n // ============================================================================\n \n const {\n columnOrder: savedColumnOrder,\n isLoaded: isColumnOrderLoaded,\n updateColumnOrder,\n } = useColumnOrderPersistence({\n tableId: title ? `datatable-${title.toLowerCase().replace(/\\s+/g, '-')}` : undefined,\n defaultOrder: columns.map(col => col.id || col.accessorKey || ''),\n enablePersistence: features.columnReordering,\n });\n\n // ============================================================================\n // CONFIGURATION RESOLUTION\n // ============================================================================\n \n const finalPaginationMode = paginationMode || detectedMode;\n const finalPageSizeOptions = optimizedPageSizeOptions;\n \n const validatedInitialPageSize = useMemo(() => {\n if (!features.pagination || !finalPageSizeOptions.length) {\n return initialPageSize;\n }\n \n if (finalPageSizeOptions.includes(initialPageSize)) {\n return initialPageSize;\n }\n \n const sortedOptions = [...finalPageSizeOptions].sort((a, b) => a - b);\n const closestOption = sortedOptions.reduce((prev, curr) => \n Math.abs(curr - initialPageSize) < Math.abs(prev - initialPageSize) ? curr : prev\n );\n \n console.warn(\n `DataTable: initialPageSize ${initialPageSize} is not available in page size options [${finalPageSizeOptions.join(', ')}]. Using closest option: ${closestOption}`\n );\n \n return closestOption;\n }, [initialPageSize, finalPageSizeOptions, features.pagination]);\n \n const isLoading = externalIsLoading || performanceLoading;\n \n // ============================================================================\n // DATA PROCESSING\n // ============================================================================\n \n // Data comparison utility to prevent unnecessary re-renders\n const dataComparisonRef = useRef<TData[]>([]);\n const renderCountRef = useRef(0);\n const lastDataRef = useRef<TData[]>([]);\n \n const isDataEqual = useCallback((newData: TData[], oldData: TData[]) => {\n if (newData.length !== oldData.length) return false;\n return newData.every((item, index) => {\n const oldItem = oldData[index];\n if (!oldItem) return false;\n // Shallow comparison of object keys\n const newKeys = Object.keys(item);\n const oldKeys = Object.keys(oldItem);\n if (newKeys.length !== oldKeys.length) return false;\n return newKeys.every(key => item[key] === oldItem[key]);\n });\n }, []);\n \n // Infinite loop detection and prevention\n const preventInfiniteLoop = useCallback((newData: TData[]) => {\n renderCountRef.current += 1;\n \n // If we've rendered too many times with the same data, return the last stable data\n if (renderCountRef.current > 10 && isDataEqual(newData, lastDataRef.current)) {\n console.warn('DataTable: Detected potential infinite loop, using last stable data');\n return lastDataRef.current;\n }\n \n // Reset counter if data actually changed\n if (!isDataEqual(newData, lastDataRef.current)) {\n renderCountRef.current = 0;\n lastDataRef.current = newData;\n }\n \n return newData;\n }, [isDataEqual]);\n \n // Stabilize data references to prevent infinite loops\n const baseData = useMemo(() => {\n const newData = finalPaginationMode === 'server' ? (serverData?.data || []) : (processedHierarchicalData as TData[]);\n \n // Apply infinite loop prevention\n const stableData = preventInfiniteLoop(newData);\n \n // Only update if data has actually changed\n if (!isDataEqual(stableData, dataComparisonRef.current)) {\n dataComparisonRef.current = stableData;\n }\n \n return dataComparisonRef.current;\n }, [finalPaginationMode, serverData?.data, processedHierarchicalData, preventInfiniteLoop, isDataEqual]);\n \n const tableData = useMemo(() => {\n return features.hierarchical && hierarchical?.enabled \n ? hierarchicalState.visibleRows as unknown as TData[]\n : baseData;\n }, [features.hierarchical, hierarchical?.enabled, hierarchicalState.visibleRows, baseData]);\n \n const dataCount = useMemo(() => {\n return finalPaginationMode === 'server' ? (serverData?.totalCount || 0) : data?.length || 0;\n }, [finalPaginationMode, serverData?.totalCount, data?.length]);\n\n // ============================================================================\n // HIERARCHICAL SORTING\n // ============================================================================\n \n const sortedTableData = useMemo(() => {\n if (features.hierarchical && hierarchical?.enabled && sorting.length > 0) {\n const hierarchicalVisibleRows = hierarchicalState.visibleRows as unknown as HierarchicalDataRow[];\n return sortHierarchicalDataWithSorting(hierarchicalVisibleRows, sorting) as unknown as TData[];\n }\n return tableData;\n }, [features.hierarchical, hierarchical?.enabled, hierarchicalState.visibleRows, sorting, tableData]);\n \n const finalTableData = useMemo(() => {\n return features.hierarchical && hierarchical?.enabled && sorting.length > 0 \n ? sortedTableData \n : tableData;\n }, [features.hierarchical, hierarchical?.enabled, sorting.length, sortedTableData, tableData]);\n \n const finalDataCount = finalPaginationMode === 'server' ? (serverData?.totalCount || 0) : finalTableData?.length || 0;\n\n // ============================================================================\n // ACTIONS PROCESSING\n // ============================================================================\n\n const effectiveActions = useMemo(() => {\n // Create a new array to avoid mutating the original\n const result = [...actions];\n \n // Add actions from event handlers if features are enabled\n if (features.editing && onEditRow && !result.some(a => a.label === 'Edit')) {\n result.push({\n label: 'Edit',\n onClick: (row: TData) => {\n // Get the row ID using the provided getRowId function or fallback to row.id\n const rowId = getRowId ? getRowId(row, 0) : (row as any).id || String(0);\n // Set the row into editing mode with the current row data\n tableActions.setEditingRow(rowId, { ...row });\n },\n icon: Edit,\n testId: 'edit',\n });\n }\n \n if (features.deletion && onDeleteRow && !result.some(a => a.label === 'Delete')) {\n result.push({\n label: 'Delete',\n onClick: onDeleteRow,\n icon: Trash,\n testId: 'delete',\n variant: 'destructive' as const,\n });\n }\n\n return result;\n }, [actions, features.editing, features.deletion, onEditRow, onDeleteRow, getRowId, tableActions]);\n\n // ============================================================================\n // COLUMN PROCESSING\n // ============================================================================\n \n const enhancedColumns = useMemo(() => {\n // Create enhanced base columns\n const baseColumns: ColumnDef<TData>[] = [...columns].map(column => ({\n ...column,\n enableSorting: features.sorting && (column.enableSorting !== false),\n enableColumnFilter: features.filtering && (column.enableColumnFilter !== false),\n enableGrouping: features.grouping && (column.enableGrouping !== false),\n }));\n\n // Create selection column if enabled\n const selectionColumn: ColumnDef<TData> | null = features.selection ? {\n id: 'select',\n header: ({ table }: HeaderContext<TData, unknown>) => {\n const isAllSelected = table.getIsAllPageRowsSelected();\n const isSomeSelected = table.getIsSomePageRowsSelected();\n return (\n <Checkbox\n checked={isAllSelected ? true : isSomeSelected ? 'indeterminate' : false}\n onCheckedChange={(value) => table.toggleAllPageRowsSelected(!!value)}\n aria-label=\"Select all\"\n />\n );\n },\n cell: ({ row }: CellContext<TData, unknown>) => (\n <Checkbox\n checked={row.getIsSelected()}\n onCheckedChange={(value) => row.toggleSelected(!!value)}\n aria-label=\"Select row\"\n />\n ),\n enableSorting: false,\n enableColumnFilter: false,\n enableGrouping: false,\n enableHiding: false,\n size: 50,\n minSize: 50,\n maxSize: 50,\n } : null;\n\n // Create actions column if there are actions\n const actionsColumn: ColumnDef<TData> | null = effectiveActions.length > 0 ? \n ColumnFactory.createActionColumn(effectiveActions, {\n header: 'Actions',\n size: 120,\n }) : null;\n\n // Build final columns array respecting columnOrder\n const finalColumns: ColumnDef<TData>[] = [];\n \n if (columnOrder && columnOrder.length > 0) {\n // Create set of used column IDs for remaining columns check\n const usedColumnIds = new Set(columnOrder);\n \n // Add selection column first if it wasn't in the order\n if (selectionColumn && !usedColumnIds.has('select')) {\n finalColumns.unshift(selectionColumn);\n }\n \n // Use provided columnOrder to arrange columns\n for (const columnId of columnOrder) {\n if (columnId === 'select' && selectionColumn) {\n finalColumns.push(selectionColumn);\n } else if (columnId === 'actions' && actionsColumn) {\n finalColumns.push(actionsColumn);\n } else {\n // Find the data column by id or accessorKey\n const dataColumn = baseColumns.find(col => \n col.id === columnId || ('accessorKey' in col && String(col.accessorKey) === columnId)\n );\n if (dataColumn) {\n finalColumns.push(dataColumn);\n }\n }\n }\n \n // Add any remaining columns that weren't in the columnOrder\n const remainingDataColumns = baseColumns.filter(col => {\n const colId = col.id ? String(col.id) : ('accessorKey' in col ? String(col.accessorKey) : '');\n return !usedColumnIds.has(colId);\n });\n finalColumns.push(...remainingDataColumns);\n \n // Add actions column if it wasn't in the order\n if (actionsColumn && !usedColumnIds.has('actions')) {\n finalColumns.push(actionsColumn);\n }\n } else {\n // No columnOrder provided, use default behavior\n if (selectionColumn) {\n finalColumns.push(selectionColumn);\n }\n finalColumns.push(...baseColumns);\n if (actionsColumn) {\n finalColumns.push(actionsColumn);\n }\n }\n\n return finalColumns;\n }, [columns, features, effectiveActions, columnOrder]);\n\n // ============================================================================\n // COLUMN WIDTHS\n // ============================================================================\n \n\n // ============================================================================\n // TABLE CONFIGURATION\n // ============================================================================\n \n // Memoize table configuration to prevent unnecessary re-creation\n const tableConfig = useMemo(() => ({\n data: finalTableData as TData[],\n columns: enhancedColumns,\n state: {\n sorting,\n columnFilters,\n columnVisibility,\n rowSelection,\n grouping,\n expanded,\n pagination,\n globalFilter: searchQuery,\n columnOrder: effectiveColumnOrder,\n },\n initialState: {\n expanded: features.grouping ? {} : undefined,\n },\n enableRowSelection: features.selection,\n enableGrouping: features.grouping,\n getRowId: getRowId || ((row: TData) => row?.id || row?.toString() || 'unknown'),\n onSortingChange: setSorting,\n onColumnFiltersChange: setColumnFilters,\n onColumnVisibilityChange: setColumnVisibility,\n onRowSelectionChange: (updaterOrValue: any) => {\n const newSelection = typeof updaterOrValue === 'function' ? updaterOrValue(rowSelection) : updaterOrValue;\n setInternalRowSelection(newSelection);\n onRowSelectionChange?.(newSelection);\n },\n onGroupingChange: setGrouping,\n onExpandedChange: setExpanded,\n onPaginationChange: setPagination,\n onColumnOrderChange: setColumnOrder,\n getCoreRowModel: getCoreRowModel(),\n getFilteredRowModel: finalPaginationMode === 'client' ? getFilteredRowModel() : undefined,\n getSortedRowModel: finalPaginationMode === 'client' ? getSortedRowModel() : undefined,\n getPaginationRowModel: features.pagination ? getPaginationRowModel() : undefined,\n getGroupedRowModel: features.grouping ? getGroupedRowModel() : undefined,\n getExpandedRowModel: features.grouping ? getExpandedRowModel() : undefined,\n manualSorting: finalPaginationMode === 'server',\n manualFiltering: finalPaginationMode === 'server',\n manualPagination: finalPaginationMode === 'server',\n pageCount: finalPaginationMode === 'server' ? Math.ceil(dataCount / pagination.pageSize) : undefined,\n }), [\n finalTableData,\n enhancedColumns,\n sorting,\n columnFilters,\n columnVisibility,\n rowSelection,\n grouping,\n expanded,\n pagination,\n searchQuery,\n effectiveColumnOrder,\n features.selection,\n features.grouping,\n getRowId,\n onRowSelectionChange,\n finalPaginationMode,\n features.pagination,\n dataCount,\n pagination.pageSize\n ]);\n \n const table = useReactTable(tableConfig);\n\n // ============================================================================\n // SEARCH HANDLERS\n // ============================================================================\n \n const handleSearch = useCallback((value: string) => {\n setSearchQuery(value);\n \n if (features.pagination) {\n setPagination(prev => ({ ...prev, pageIndex: 0 }));\n }\n }, [setSearchQuery, features.pagination]);\n\n // ============================================================================\n // SERVER-SIDE DATA FETCHING\n // ============================================================================\n \n const handleServerSideChange = useCallback(async () => {\n if (finalPaginationMode !== 'server' || !serverSide) return;\n\n const params: ServerSideParams = {\n pageIndex: pagination.pageIndex,\n pageSize: pagination.pageSize,\n sorting,\n columnFilters,\n globalFilter: searchQuery,\n grouping,\n };\n\n await fetchServerData(params);\n }, [\n finalPaginationMode,\n serverSide,\n pagination,\n sorting,\n columnFilters,\n searchQuery,\n grouping,\n fetchServerData,\n ]);\n\n // ============================================================================\n // EFFECTS\n // ============================================================================\n \n useEffect(() => {\n if ((tableData?.length || 0) > 0 || finalPaginationMode === 'server') {\n handleServerSideChange();\n }\n }, [handleServerSideChange, tableData?.length, finalPaginationMode]);\n\n useEffect(() => {\n return () => {\n if (typeof cleanup === 'function') {\n cleanup();\n }\n };\n }, [cleanup]);\n\n // ============================================================================\n // RENDER\n // ============================================================================\n \n if (isLoading) {\n return <LoadingComponent />;\n }\n\n const PaginationComponent = enhancedPagination || finalPaginationMode !== 'client' \n ? EnhancedPaginationControls \n : PaginationControls;\n\n // Calculate column counts for colgroup\n const visibleColumns = table?.getVisibleFlatColumns() || [];\n const dataColumns = visibleColumns.filter(col => \n col.id !== 'select' && col.id !== 'actions'\n ).length;\n const hasSelectColumn = visibleColumns.some(col => col.id === 'select');\n const hasActionsColumn = visibleColumns.some(col => col.id === 'actions');\n\n return (\n <>\n {/* Table with semantic HTML structure */}\n <table className={getTableClasses({\n isFixed: true,\n variant,\n className: cn('border-collapse relative w-full', className)\n })} style={{ \n tableLayout: 'fixed', \n width: '100%' \n }}>\n {/* Caption with title, description, and toolbar */}\n <caption className=\"text-left pb-2\">\n {(title || description) && (\n <>\n {title && <h2 >{title}</h2>}\n {description && <p>{description}</p>}\n </>\n )}\n <>\n <DataTableToolbar\n features={features}\n globalFilter={searchQuery}\n onGlobalFilterChange={handleSearch}\n columns={columns}\n grouping={grouping}\n onGroupByChange={(columnId) => {\n setGrouping(columnId ? [columnId] : []);\n }}\n tableColumns={table?.getAllColumns() || []}\n onColumnVisibilityChange={(columnId, visible) => {\n setColumnVisibility(prev => ({ ...prev, [columnId]: visible }));\n }}\n onCreateRow={features.creation && onCreateRow ? () => tableActions.setCreating(true) : undefined}\n onImportClick={() => setShowImportModal(true)}\n onExport={() => {\n // Export logic here\n }}\n rowSelection={rowSelection}\n onDeleteSelected={onDeleteSelected}\n onToggleFilterRow={() => setShowFilterRow(!showFilterRow)}\n showFilterRow={showFilterRow}\n />\n </>\n </caption>\n\n {/* Column groups */}\n <colgroup>\n {hasSelectColumn && <col span={1} data-col-type=\"select\" />}\n <col span={dataColumns} data-col-type=\"data\" />\n {hasActionsColumn && <col span={1} data-col-type=\"actions\" />}\n </colgroup>\n\n {/* Table header */}\n <thead>\n {table?.getHeaderGroups().map((headerGroup) => (\n <tr key={headerGroup.id}>\n {headerGroup.headers\n .filter(header => {\n return typeof header.column.getIsVisible === 'function' \n ? header.column.getIsVisible() \n : true;\n })\n .map((header) => {\n const isSortable = header.column.getCanSort();\n const ariaSort = isSortable\n ? (header.column.getIsSorted() === 'asc'\n ? 'ascending'\n : header.column.getIsSorted() === 'desc'\n ? 'descending'\n : 'none')\n : undefined;\n return (\n <th\n key={header.id}\n {...(isSortable ? { 'aria-sort': ariaSort } : {})}\n >\n {header.isPlaceholder ? null : (\n isSortable ? (\n <Button\n variant=\"ghost\"\n className=\"h-auto p-0 font-medium hover:bg-transparent\"\n onClick={header.column.getToggleSortingHandler()}\n aria-label={`Sort by ${typeof header.column.columnDef.header === 'string' ? header.column.columnDef.header : 'column'}`}\n tabIndex={0}\n >\n <div className=\"flex items-center gap-1\">\n {typeof header.column.columnDef.header === 'function'\n ? header.column.columnDef.header(header.getContext())\n : header.column.columnDef.header}\n {header.column.getIsSorted() === 'asc' ? (\n <ChevronUp className=\"h-4 w-4\" />\n ) : header.column.getIsSorted() === 'desc' ? (\n <ChevronDown className=\"h-4 w-4\" />\n ) : (\n <ChevronsUpDown className=\"h-4 w-4\" />\n )}\n </div>\n </Button>\n ) : (\n <div>\n {typeof header.column.columnDef.header === 'function'\n ? header.column.columnDef.header(header.getContext())\n : header.column.columnDef.header}\n </div>\n )\n )}\n </th>\n );\n })}\n </tr>\n ))}\n </thead>\n\n {/* Table body */}\n <UnifiedTableBody\n table={table}\n isCreating={isCreating}\n creationData={creationData}\n onCreationDataChange={tableActions.setCreationData}\n onSaveCreation={() => {\n if (onCreateRow) {\n onCreateRow(creationData as Partial<TData>);\n tableActions.clearCreationData();\n tableActions.setCreating(false);\n }\n }}\n onCancelCreation={() => {\n tableActions.clearCreationData();\n tableActions.setCreating(false);\n }}\n editingRowId={editingRowId}\n editingData={editingData}\n onEditingDataChange={(data) => {\n // Update the editing data in the centralized state\n if (editingRowId) {\n tableActions.setEditingRow(editingRowId, data);\n }\n }}\n onSaveEditing={() => {\n if (onEditRow && editingRowId) {\n // Find the original row data\n const originalRow = data.find(row => {\n const rowId = getRowId ? getRowId(row, 0) : (row as any).id || String(0);\n return rowId === editingRowId;\n });\n if (originalRow) {\n onEditRow(originalRow, editingData as Partial<TData>);\n }\n }\n tableActions.clearEditing();\n }}\n onCancelEditing={() => {\n tableActions.clearEditing();\n }}\n grouping={grouping}\n aggregates={aggregates}\n getRowId={getRowId}\n emptyState={React.isValidElement(emptyState) ? undefined : emptyState as any}\n isFiltered={searchQuery !== '' || columnFilters.length > 0}\n onClearFilters={() => {\n setSearchQuery('');\n setColumnFilters([]);\n }}\n enableFiltering={features.filtering}\n showFilterRow={showFilterRow}\n enableColumnReordering={features.columnReordering}\n onColumnOrderChange={setColumnOrder}\n onColumnDrop={(draggedColumnId, targetColumnId) => {\n // Handle column drop\n }}\n savedColumnOrder={savedColumnOrder}\n enablePersistence={features.columnReordering}\n tableId={title ? `datatable-${title.toLowerCase().replace(/\\s+/g, '-')}` : undefined}\n dataLength={finalTableData?.length || 0}\n virtualHeight={virtualHeight}\n forceVirtualization={false}\n hierarchical={features.hierarchical && hierarchical?.enabled ? {\n ...hierarchical,\n state: hierarchicalState,\n expandAll: hierarchicalState.expandAll,\n collapseAll: hierarchicalState.collapseAll,\n isAllExpanded: hierarchicalState.getExpandedIds().length > 0 && \n hierarchicalState.getExpandedIds().length === (finalTableData as any[]).filter(row => row.isParent).length,\n hasAnyChildren: (finalTableData as any[]).some(row => row.isParent),\n } : undefined}\n actions={effectiveActions}\n />\n\n {/* Table footer with pagination */}\n {features.pagination && (\n <tfoot>\n <tr>\n <td colSpan={visibleColumns.length}>\n <PaginationComponent\n table={table}\n pageSizeOptions={finalPageSizeOptions}\n paginationMode={finalPaginationMode}\n totalCount={finalDataCount}\n isLoading={isLoading}\n />\n </td>\n </tr>\n </tfoot>\n )}\n\n </table>\n\n {/* Modal Dialogs */}\n <DataTableModals\n showImportModal={showImportModal}\n onCloseImportModal={() => setShowImportModal(false)}\n onImport={async (data) => {\n if (onImport) {\n const result = onImport(data);\n if (result && typeof result.then === 'function') {\n await result;\n }\n }\n setShowImportModal(false);\n }}\n importModalConfig={importModalConfig}\n />\n </>\n );\n}\n\n// ============================================================================\n// MAIN COMPONENT\n// ============================================================================\n\nexport function DataTableCore<TData extends DataRecord>(props: DataTableCoreProps<TData>) {\n return (\n <DataTableErrorBoundary>\n <DataTableInternal {...props} />\n </DataTableErrorBoundary>\n );\n}\n","/**\n * @file Checkbox Component\n * @package @jmruthers/pace-core\n * @module Components\n * @since 0.1.0\n *\n * An accessible checkbox component built on top of Radix UI's Checkbox primitive.\n * Provides a customizable checkbox input with proper keyboard and screen reader support.\n *\n * Features:\n * - Customizable styling via className\n * - Built-in focus and hover states\n * - Disabled state support\n * - Checked state indicator\n * - Full keyboard navigation\n * - Screen reader support\n *\n * @example\n * ```tsx\n * // Basic usage\n * <Checkbox />\n *\n * // With label\n * <div className=\"flex items-center space-x-2\">\n * <Checkbox id=\"terms\" />\n * <label htmlFor=\"terms\">Accept terms and conditions</label>\n * </div>\n *\n * // Disabled state\n * <Checkbox disabled />\n *\n * // Controlled component\n * const [checked, setChecked] = React.useState(false);\n * <Checkbox \n * checked={checked}\n * onCheckedChange={setChecked}\n * />\n * ```\n *\n * @accessibility\n * - Uses Radix UI's accessible checkbox primitive\n * - Proper keyboard navigation (Space to toggle)\n * - Screen reader announcements for state changes\n * - Focus visible styles for keyboard users\n * - ARIA attributes handled automatically\n */\n\nimport * as React from \"react\"\nimport * as CheckboxPrimitive from \"@radix-ui/react-checkbox\"\nimport { Check } from \"lucide-react\"\n\nimport { cn } from \"../../utils/cn\"\n\nconst Checkbox = React.forwardRef<\n React.ElementRef<typeof CheckboxPrimitive.Root>,\n React.ComponentPropsWithoutRef<typeof CheckboxPrimitive.Root>\n>(({ className, ...props }, ref) => (\n <CheckboxPrimitive.Root\n ref={ref}\n className={cn(\n \"peer h-4 w-4 shrink-0 rounded-sm border border-primary ring-offset-background focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50 data-[state=checked]:bg-primary data-[state=checked]:text-primary-foreground\",\n className\n )}\n {...props}\n >\n <CheckboxPrimitive.Indicator\n className={cn(\"flex items-center justify-center text-current\")}\n >\n <Check className=\"h-4 w-4\" />\n </CheckboxPrimitive.Indicator>\n </CheckboxPrimitive.Root>\n))\nCheckbox.displayName = CheckboxPrimitive.Root.displayName\n\nexport { Checkbox }\n","/**\n * @file DataTable Styling Constants\n * @package @jmruthers/pace-core\n * @module Components/DataTable\n * @since 0.4.0\n *\n * Centralized styling constants for all DataTable components.\n * This ensures consistent styling across regular and virtualized tables.\n */\n\nimport { cn } from '../../utils/cn';\n\n// ============================================================================\n// TABLE BASE STYLES\n// ============================================================================\n\nexport const tableStyles = {\n // Main table container\n table: 'w-full caption-bottom text-sm',\n tableFixed: 'w-full table-fixed',\n \n // Table sections\n header: '[&_tr]:border-b',\n body: '[&_tr:last-child]:border-0',\n footer: 'border-t bg-muted/50 font-medium [&>tr]:last:border-b-0',\n \n // Table rows\n row: 'border-b transition-colors hover:bg-muted/50 data-[state=selected]:bg-muted',\n rowHover: 'hover:bg-sec-50 transition-colors',\n rowSelected: 'bg-main-50',\n \n // Table cells\n head: 'h-12 px-4 text-left align-middle font-medium text-muted-foreground [&:has([role=checkbox])]:pr-0',\n headSortable: 'cursor-pointer select-none hover:bg-muted/50',\n cell: 'p-4 align-middle [&:has([role=checkbox])]:pr-0',\n cellCompact: 'px-3 py-2 align-middle [&:has([role=checkbox])]:pr-0',\n cellVirtualized: 'px-4 py-2 text-sm border-b border-sec-200 whitespace-normal',\n cellSortable: 'cursor-pointer select-none',\n \n // Table layout\n mainContainer: 'w-full max-w-full',\n container: 'overflow-x-auto w-full',\n containerVirtualized: 'overflow-hidden',\n \n // Sticky positioning\n stickyHeader: 'sticky top-0 z-10',\n \n // Empty state\n emptyState: 'flex items-center justify-center py-12',\n emptyStateContent: 'text-center',\n emptyStateIcon: 'text-sec-400 text-lg mb-2',\n emptyStateText: 'text-sec-500',\n} as const;\n\n// ============================================================================\n// STYLING UTILITIES\n// ============================================================================\n\n/**\n * Get table cell classes based on context\n */\nexport const getTableCellClasses = (options: {\n isVirtualized?: boolean;\n isCompact?: boolean;\n isSortable?: boolean;\n className?: string;\n} = {}) => {\n const { isVirtualized = false, isCompact = false, isSortable = false, className } = options;\n \n if (isVirtualized) {\n return cn(\n tableStyles.cellVirtualized,\n isSortable && tableStyles.cellSortable,\n className\n );\n }\n \n return cn(\n isCompact ? tableStyles.cellCompact : tableStyles.cell,\n isSortable && tableStyles.cellSortable,\n className\n );\n};\n\n/**\n * Get table head classes based on context\n */\nexport const getTableHeadClasses = (options: {\n isSortable?: boolean;\n className?: string;\n} = {}) => {\n const { isSortable = false, className } = options;\n \n return cn(\n tableStyles.head,\n isSortable && tableStyles.headSortable,\n className\n );\n};\n\n/**\n * Get table row classes based on context\n */\nexport const getTableRowClasses = (options: {\n isSelected?: boolean;\n isVirtualized?: boolean;\n className?: string;\n} = {}) => {\n const { isSelected = false, isVirtualized = false, className } = options;\n \n if (isVirtualized) {\n return cn(\n tableStyles.rowHover,\n isSelected && tableStyles.rowSelected,\n className\n );\n }\n \n return cn(\n tableStyles.row,\n isSelected && tableStyles.rowSelected,\n className\n );\n};\n\n/**\n * Get table container classes based on context\n */\nexport const getTableContainerClasses = (options: {\n isVirtualized?: boolean;\n className?: string;\n} = {}) => {\n const { isVirtualized = false, className } = options;\n \n return cn(\n isVirtualized ? tableStyles.containerVirtualized : tableStyles.container,\n className\n );\n};\n\n/**\n * Get table classes based on context\n */\nexport const getTableClasses = (options: {\n isFixed?: boolean;\n variant?: 'default' | 'compact' | 'spacious';\n className?: string;\n} = {}) => {\n const { isFixed = false, variant = 'default', className } = options;\n \n return cn(\n isFixed ? tableStyles.tableFixed : tableStyles.table,\n variant === 'compact' && 'text-sm',\n variant === 'spacious' && 'text-base',\n className\n );\n};\n\n/**\n * Get main DataTable container classes\n */\nexport const getMainContainerClasses = (options: {\n className?: string;\n} = {}) => {\n const { className } = options;\n \n return cn(\n tableStyles.mainContainer,\n className\n );\n};\n","/**\n * @file Input Component Suite\n * @package @jmruthers/pace-core\n * @module Input\n * @since 0.1.0\n *\n * A comprehensive input component suite including Input and InputGroup.\n * Provides flexible, accessible input components with consistent styling and behavior.\n *\n * Features:\n * - Multiple input variants (default, destructive)\n * - Multiple input sizes (sm, md, lg)\n * - Error state styling\n * - Input grouping with consistent spacing\n * - Horizontal and vertical orientation support\n * - Forwarded ref support\n * - Composition support\n *\n * @example\n * ```tsx\n * // Basic input\n * <Input placeholder=\"Enter text\" />\n * \n * // Input with variants and sizes\n * <Input \n * variant=\"destructive\" \n * size=\"lg\" \n * placeholder=\"Error input\" \n * />\n * \n * // Input group\n * <InputGroup orientation=\"horizontal\" spacing=\"md\">\n * <Input placeholder=\"First name\" />\n * <Input placeholder=\"Last name\" />\n * </InputGroup>\n * \n * // Vertical input group\n * <InputGroup orientation=\"vertical\" spacing=\"lg\">\n * <Input placeholder=\"Email\" type=\"email\" />\n * <Input placeholder=\"Password\" type=\"password\" />\n * </InputGroup>\n * ```\n *\n * @accessibility\n * - Proper ARIA attributes and roles\n * - Keyboard navigation support\n * - Screen reader friendly\n * - Focus management\n */\n\nimport * as React from 'react';\nimport { cn } from '../../utils/cn';\n\n// ============================================================================\n// BASE INPUT COMPONENT\n// ============================================================================\n\nexport interface InputProps\n extends Omit<React.InputHTMLAttributes<HTMLInputElement>, 'size'> {\n /**\n * Input variant style\n */\n variant?: 'default' | 'destructive';\n \n /**\n * Input size\n */\n size?: 'sm' | 'md' | 'lg';\n \n /**\n * Error state for styling\n */\n error?: boolean;\n}\n\n/**\n * Input component\n * A flexible, accessible input component with multiple variants and sizes\n * \n * @param props - Input configuration and styling\n * @param ref - Forwarded ref to the input element\n * @returns JSX.Element - The rendered input element\n * \n * @example\n * ```tsx\n * // Basic input\n * <Input placeholder=\"Enter your name\" />\n * \n * // Input with error state\n * <Input \n * placeholder=\"Email\" \n * type=\"email\" \n * error={true}\n * />\n * \n * // Large input with destructive variant\n * <Input \n * variant=\"destructive\" \n * size=\"lg\" \n * placeholder=\"Error input\" \n * />\n * ```\n */\nconst Input = React.forwardRef<HTMLInputElement, InputProps>(\n ({ className, variant = 'default', size = 'md', error, type, ...props }, ref) => {\n return (\n <input\n type={type}\n className={cn(\n // Base styles\n 'flex w-full rounded-md border border-input bg-background px-3 py-2 text-sm ring-offset-background file:border-0 file:bg-transparent file:text-sm file:font-medium placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50',\n \n // Variant styles\n {\n 'border-input': variant === 'default' && !error,\n 'border-destructive focus-visible:ring-destructive': variant === 'destructive' || error,\n },\n \n // Size styles\n {\n 'h-8 px-2 py-1 text-xs': size === 'sm',\n 'h-9 px-3 py-2 text-sm': size === 'md',\n 'h-10 px-4 py-3 text-base': size === 'lg',\n },\n \n className\n )}\n ref={ref}\n {...props}\n />\n );\n }\n);\n\nInput.displayName = 'Input';\n\n// ============================================================================\n// INPUT GROUP COMPONENT\n// ============================================================================\n\nexport interface InputGroupProps extends React.HTMLAttributes<HTMLDivElement> {\n /** Child elements to be rendered in the group */\n children: React.ReactNode;\n /** Layout orientation of the input group */\n orientation?: 'horizontal' | 'vertical';\n /** Spacing between inputs in the group */\n spacing?: 'sm' | 'md' | 'lg';\n}\n\n/**\n * InputGroup Component\n * A container component that groups multiple inputs together with consistent spacing.\n * \n * @component\n * @example\n * ```tsx\n * // Horizontal group\n * <InputGroup orientation=\"horizontal\" spacing=\"md\">\n * <Input placeholder=\"First name\" />\n * <Input placeholder=\"Last name\" />\n * </InputGroup>\n * \n * // Vertical group\n * <InputGroup orientation=\"vertical\" spacing=\"lg\">\n * <Input placeholder=\"Email\" type=\"email\" />\n * <Input placeholder=\"Password\" type=\"password\" />\n * </InputGroup>\n * ```\n */\nexport const InputGroup = React.forwardRef<HTMLDivElement, InputGroupProps>(\n ({ className, children, orientation = 'vertical', spacing = 'md', ...props }, ref) => {\n const spacingClasses = {\n sm: orientation === 'horizontal' ? 'space-x-2' : 'space-y-2',\n md: orientation === 'horizontal' ? 'space-x-4' : 'space-y-4',\n lg: orientation === 'horizontal' ? 'space-x-6' : 'space-y-6'\n };\n\n return (\n <div\n ref={ref}\n className={cn(\n 'flex',\n orientation === 'horizontal' ? 'flex-row items-end' : 'flex-col',\n spacingClasses[spacing],\n className\n )}\n {...props}\n >\n {children}\n </div>\n );\n }\n);\n\nInputGroup.displayName = 'InputGroup';\n\n// ============================================================================\n// EXPORTS\n// ============================================================================\n\nexport { Input };\n","/**\n * @file DataTable Toolbar Component\n * @package @jmruthers/pace-core\n * @module Components/DataTable/Components\n * @since 0.3.0\n * \n * The DataTable toolbar provides a comprehensive interface for table operations including\n * search, grouping, column visibility, and action buttons. It's positioned above the table\n * and contains all primary user interactions.\n * \n * Features:\n * - Global search with debounced input\n * - Column-based grouping controls\n * - Column visibility toggles\n * - Custom toolbar buttons\n * - Import/Export actions\n * - Row creation button\n * - Responsive layout that adapts to screen size\n * \n * @example\n * ```tsx\n * <DataTableToolbar\n * searchable={true}\n * globalFilter=\"\"\n * onGlobalFilterChange={(value) => setFilter(value)}\n * enableGrouping={true}\n * columns={columns}\n * grouping={[]}\n * onGroupByChange={(columnId) => setGroupBy(columnId)}\n * enableColumnVisibility={true}\n * tableColumns={table.getAllColumns()}\n * onColumnVisibilityChange={(id, visible) => toggleColumn(id, visible)}\n * toolbarButtons={customButtons}\n * enableCreation={true}\n * onCreateRow={() => openCreateModal()}\n * enableImport={true}\n * onImportClick={() => openImportModal()}\n * exportable={true}\n * onExport={() => exportData()}\n * />\n * ```\n * \n * @accessibility\n * - Search input has proper aria-label\n * - All buttons have descriptive labels\n * - Keyboard navigation support\n * - Focus management\n * \n * @performance\n * - Search input uses debounced onChange to prevent excessive filtering\n * - Button renders are memoized\n * - Dropdown menus use virtual scrolling for large column lists\n */\n\nimport React from 'react';\nimport { Input } from '../../Input/Input';\nimport { Button } from '../../Button/Button';\nimport { Search, Plus, Upload, Download, Settings2, Filter, Trash2 } from 'lucide-react';\nimport { GroupingDropdown } from './GroupingDropdown';\nimport { ColumnVisibilityDropdown } from './ColumnVisibilityDropdown';\nimport type { DataTableColumn, DataRecord, SimpleColumn, DataTableFeatureConfig } from '../types';\nimport type { Column } from '@tanstack/react-table';\n\n/**\n * Props for the DataTable toolbar component\n * @template TData - The type of data records in the table\n */\ninterface DataTableToolbarProps<TData extends DataRecord = DataRecord> {\n // Feature configuration\n /** Feature configuration for the toolbar */\n features: DataTableFeatureConfig;\n \n // Data and state\n /** Current global filter value */\n globalFilter: string;\n /** Callback when global filter changes */\n onGlobalFilterChange: (value: string) => void;\n /** Column definitions for grouping dropdown */\n columns: (DataTableColumn<TData> | SimpleColumn<TData>)[];\n /** Currently applied grouping columns */\n grouping: string[];\n /** Callback when grouping changes */\n onGroupByChange: (columnId: string | null) => void;\n /** Table columns from TanStack Table instance */\n tableColumns: Column<TData, unknown>[];\n /** Callback when column visibility changes */\n onColumnVisibilityChange: (columnId: string, visible: boolean) => void;\n /** Current row selection state */\n rowSelection: Record<string, boolean>;\n \n // Callbacks\n /** Callback when create row button is clicked */\n onCreateRow?: () => void;\n /** Callback when import button is clicked */\n onImportClick: () => void;\n /** Callback when export button is clicked */\n onExport: () => void;\n /** Callback when delete selected button is clicked */\n onDeleteSelected?: (selectedRows: Record<string, boolean>) => void;\n /** Callback when filter toggle button is clicked */\n onToggleFilterRow?: () => void;\n \n // Filter state\n /** Whether the filter row is currently visible */\n showFilterRow?: boolean;\n}\n\n/**\n * DataTable toolbar component that provides search, filtering, and action controls\n * \n * This component renders the top toolbar of the DataTable with various controls including:\n * - Global search input (left side)\n * - Grouping dropdown (left side)\n * - Action buttons and controls (right side)\n * \n * The toolbar uses a responsive flexbox layout that adapts to different screen sizes.\n * \n * @template TData - The type of data records in the table\n * @param props - The toolbar props\n * @returns JSX.Element - The rendered toolbar component\n * \n * @example\n * ```tsx\n * <DataTableToolbar\n * searchable={true}\n * globalFilter=\"john\"\n * onGlobalFilterChange={(value) => setFilter(value)}\n * enableGrouping={true}\n * // ... other props\n * />\n * ```\n */\nexport function DataTableToolbar<TData extends DataRecord>({\n features,\n globalFilter,\n onGlobalFilterChange,\n columns,\n grouping,\n onGroupByChange,\n tableColumns,\n onColumnVisibilityChange,\n rowSelection,\n onCreateRow,\n onImportClick,\n onExport,\n onDeleteSelected,\n onToggleFilterRow,\n showFilterRow = false,\n}: DataTableToolbarProps<TData>) {\n const currentGroupBy = grouping.length > 0 ? grouping[0] : null;\n\n return (\n\n<nav className=\"flex justify-end flex-wrap gap-2\">\n {features.search && (\n\n <Input\n id=\"table-search\"\n placeholder=\"Search...\"\n value={globalFilter}\n onChange={(e) => onGlobalFilterChange(e.target.value)}\n aria-label=\"Search table\"\n tabIndex={0}\n className=\"justify-self-start w-50 flex-1\"\n />\n\n )}\n\n\n \n {/* Grouping */}\n {features.grouping && (\n <GroupingDropdown\n columns={columns}\n currentGroupBy={currentGroupBy}\n onGroupByChange={onGroupByChange}\n />\n )}\n \n {/* Column Visibility */}\n {features.columnVisibility && (\n <ColumnVisibilityDropdown\n columns={tableColumns}\n onColumnVisibilityChange={onColumnVisibilityChange}\n />\n )}\n\n {/* Filter Toggle */}\n {features.filtering && onToggleFilterRow && (\n <Button \n variant=\"outline\" \n onClick={onToggleFilterRow}\n >\n <Filter className=\"h-4 w-4 mr-2 flex-shrink-0\" />\n <span className=\"truncate\">\n {showFilterRow ? 'Hide Filters' : 'Show Filters'}\n </span>\n </Button>\n )}\n\n {/* Row Creation */}\n {features.creation && onCreateRow && (\n <Button \n variant=\"outline\" \n onClick={onCreateRow}\n >\n <Plus className=\"h-4 w-4 mr-2 flex-shrink-0\" />\n <span className=\"truncate\">Add Row</span>\n </Button>\n )}\n\n {/* Import */}\n {features.import && (\n <Button \n variant=\"outline\" \n onClick={onImportClick}\n >\n <Upload className=\"h-4 w-4 mr-2 flex-shrink-0\" />\n <span className=\"truncate\">Import</span>\n </Button>\n )}\n\n {/* Export */}\n {features.export && (\n <Button \n variant=\"outline\" \n onClick={onExport}\n >\n <Download className=\"h-4 w-4 mr-2 flex-shrink-0\" />\n <span className=\"truncate\">Export</span>\n </Button>\n )}\n\n\n {/* Delete - Only when both deletion and selection are enabled */}\n {features.deleteSelected && features.deletion && features.selection && (\n <Button\n variant=\"destructive\"\n onClick={() => onDeleteSelected?.(rowSelection)}\n disabled={Object.values(rowSelection).filter(Boolean).length === 0}\n >\n <Trash2 className=\"h-4 w-4 mr-2 flex-shrink-0\" />\n <span className=\"truncate\">Delete</span>\n </Button>\n )}\n\n </nav>\n\n );\n}\n","import React from 'react';\nimport { Button } from '../../Button/Button';\nimport {\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from '../../Select/Select';\nimport { Group } from 'lucide-react';\nimport type { DataTableColumn, DataRecord, SimpleColumn } from '../types';\n\ninterface GroupingDropdownProps<TData extends DataRecord = DataRecord> {\n columns: (DataTableColumn<TData> | SimpleColumn<TData>)[];\n currentGroupBy: string | null;\n onGroupByChange: (columnId: string | null) => void;\n className?: string;\n}\n\nexport function GroupingDropdown<TData extends DataRecord>({ \n columns, \n currentGroupBy, \n onGroupByChange,\n className\n}: GroupingDropdownProps<TData>) {\n // Convert columns to a consistent format for grouping\n const convertedColumns = columns.map(col => {\n if ('accessorKey' in col && 'header' in col) {\n // DataTableColumn format\n return {\n accessorKey: col.accessorKey,\n header: typeof col.header === 'string' ? col.header : String(col.accessorKey),\n enableGrouping: col.enableGrouping || false,\n };\n } else if ('key' in col && 'label' in col) {\n // SimpleColumn format\n return {\n accessorKey: col.key,\n header: col.label,\n enableGrouping: false, // SimpleColumn doesn't support grouping by default\n };\n } else {\n // Fallback for unknown format\n return {\n accessorKey: 'unknown',\n header: 'Unknown',\n enableGrouping: false,\n };\n }\n });\n\n const groupableColumns = convertedColumns.filter(col => col.enableGrouping && col.accessorKey);\n \n if (groupableColumns.length === 0) {\n return null;\n }\n\n return (\n <Select className=\"w-40\">\n <SelectTrigger asChild>\n <Button \n variant=\"outline\" \n className={className || ''}\n >\n <Group className=\"h-4 w-4 mr-2 flex-shrink-0\" />\n <span className=\"truncate\">Grouping</span>\n </Button>\n </SelectTrigger>\n <SelectContent>\n <SelectItem\n value=\"no-grouping\"\n onClick={() => onGroupByChange(null)}\n className={`px-3 py-2 text-sm ${!currentGroupBy ? \"bg-main-50 text-main-700\" : \"hover:bg-sec-50\"}`}\n >\n No grouping\n </SelectItem>\n {groupableColumns.map((column) => {\n const columnId = String(column.accessorKey);\n const isSelected = currentGroupBy === columnId;\n const displayName = column.header || String(column.accessorKey);\n \n return (\n <SelectItem\n key={columnId}\n value={columnId}\n onClick={() => onGroupByChange(columnId)}\n className={`px-3 py-2 text-sm ${isSelected ? \"bg-main-50 text-main-700\" : \"hover:bg-sec-50\"}`}\n >\n {displayName}\n </SelectItem>\n );\n })}\n </SelectContent>\n </Select>\n );\n}\n","/**\n * @file Select Component - Simple HTML Structure\n * @package @jmruthers/pace-core\n * @module Components/Select\n * @since 0.3.0\n *\n * A simple select component using semantic HTML structure\n * with proper DOM nesting and accessibility.\n *\n * Features:\n * - Semantic HTML with <form> + <button> + <ul> + <li>\n * - Proper DOM nesting (no button inside select)\n * - Built on pace-core Button component for consistency\n * - Simple positioning and styling\n * - Better accessibility and SEO\n * - Backward compatible API\n */\n\nimport * as React from \"react\";\nimport { Search, X, ChevronDown, Check } from \"lucide-react\";\nimport { Button, type ButtonProps } from \"../Button/Button\";\nimport { cn } from \"../../utils/cn\";\n\n// ============================================================================\n// TYPES AND INTERFACES\n// ============================================================================\n\nexport interface SelectContextValue {\n value: string;\n selectedText: string;\n onValueChange: (value: string, text: string) => void;\n open: boolean;\n onOpenChange: (open: boolean) => void;\n placeholder?: string;\n disabled?: boolean;\n}\n\nexport interface SelectProps extends Omit<React.HTMLAttributes<HTMLFormElement>, 'onChange' | 'onKeyDown' | 'onFocus' | 'onBlur'> {\n value?: string;\n defaultValue?: string;\n selectedText?: string;\n onValueChange?: (value: string) => void;\n open?: boolean;\n defaultOpen?: boolean;\n onOpenChange?: (open: boolean) => void;\n disabled?: boolean;\n children: React.ReactNode;\n className?: string;\n}\n\nexport interface SelectTriggerProps extends Omit<ButtonProps, 'onClick' | 'onKeyDown'> {\n children: React.ReactNode;\n asChild?: boolean;\n}\n\nexport interface SelectValueProps {\n placeholder?: string;\n children?: React.ReactNode;\n}\n\nexport interface SelectContentProps {\n children: React.ReactNode;\n className?: string;\n searchable?: boolean;\n searchPlaceholder?: string;\n maxHeight?: string;\n style?: React.CSSProperties;\n}\n\nexport interface SelectItemProps {\n value: string;\n children: React.ReactNode;\n disabled?: boolean;\n className?: string;\n onClick?: (e: React.MouseEvent) => void;\n}\n\n// ============================================================================\n// CONTEXT\n// ============================================================================\n\nconst SelectContext = React.createContext<SelectContextValue | null>(null);\n\nconst useSelectContext = () => {\n const context = React.useContext(SelectContext);\n if (!context) {\n throw new Error('Select components must be used within a Select');\n }\n return context;\n};\n\n// ============================================================================\n// ROOT COMPONENT\n// ============================================================================\n\nexport const Select = React.forwardRef<HTMLFormElement, SelectProps>(\n ({ \n value: controlledValue, \n defaultValue, \n selectedText: controlledSelectedText,\n onValueChange, \n open: controlledOpen, \n defaultOpen = false, \n onOpenChange,\n disabled = false,\n children,\n className,\n ...restProps\n }, ref) => {\n const [internalValue, setInternalValue] = React.useState(defaultValue || '');\n const [internalSelectedText, setInternalSelectedText] = React.useState('');\n const [internalOpen, setInternalOpen] = React.useState(defaultOpen);\n const [isSelecting, setIsSelecting] = React.useState(false);\n const internalRef = React.useRef<HTMLFormElement>(null);\n const selectRef = React.useMemo(() => {\n if (ref && typeof ref === 'object' && 'current' in ref) {\n return ref as React.RefObject<HTMLFormElement>;\n }\n return internalRef;\n }, [ref]);\n\n const value = controlledValue !== undefined ? controlledValue : internalValue;\n const open = controlledOpen !== undefined ? controlledOpen : internalOpen;\n\n const handleValueChange = React.useCallback((newValue: string, newText: string) => {\n if (controlledValue === undefined) {\n setInternalValue(newValue);\n setInternalSelectedText(newText);\n }\n onValueChange?.(newValue);\n // Close dropdown after selection\n if (controlledOpen === undefined) {\n setInternalOpen(false);\n }\n onOpenChange?.(false);\n }, [controlledValue, onValueChange, controlledOpen, onOpenChange]);\n\n const handleOpenChange = React.useCallback((newOpen: boolean) => {\n if (disabled) return;\n \n // Close all other select dropdowns when opening this one\n if (newOpen) {\n const allTriggers = document.querySelectorAll('[data-testid=\"select-trigger\"]');\n allTriggers.forEach(trigger => {\n if (trigger.getAttribute('aria-expanded') === 'true') {\n const selectRoot = trigger.closest('[data-testid=\"select-root\"]');\n if (selectRoot && selectRoot !== selectRef.current) {\n const closeEvent = new CustomEvent('closeSelect');\n selectRoot.dispatchEvent(closeEvent);\n }\n }\n });\n }\n \n if (controlledOpen === undefined) {\n setInternalOpen(newOpen);\n }\n onOpenChange?.(newOpen);\n }, [controlledOpen, onOpenChange, disabled, selectRef]);\n\n // Listen for close events from other selects\n React.useEffect(() => {\n const handleCloseSelect = () => {\n if (controlledOpen === undefined) {\n setInternalOpen(false);\n }\n onOpenChange?.(false);\n };\n\n const selectElement = selectRef.current;\n if (selectElement) {\n selectElement.addEventListener('closeSelect', handleCloseSelect);\n return () => {\n selectElement.removeEventListener('closeSelect', handleCloseSelect);\n };\n }\n }, [controlledOpen, onOpenChange, selectRef]);\n\n // Listen for SelectItem mousedown events to set selecting flag\n React.useEffect(() => {\n let timeoutId: NodeJS.Timeout | null = null;\n let isMounted = true;\n \n const handleSelectItemMouseDown = () => {\n if (!isMounted) return;\n \n setIsSelecting(true);\n timeoutId = setTimeout(() => {\n if (isMounted) {\n setIsSelecting(false);\n }\n }, 150);\n };\n\n document.addEventListener('selectItemMouseDown', handleSelectItemMouseDown as EventListener);\n return () => {\n isMounted = false;\n document.removeEventListener('selectItemMouseDown', handleSelectItemMouseDown as EventListener);\n if (timeoutId) {\n clearTimeout(timeoutId);\n }\n };\n }, []);\n\n // Global click handler to close dropdown when clicking outside\n React.useEffect(() => {\n const handleClickOutside = (event: MouseEvent) => {\n const selectElement = selectRef.current;\n const clickedElement = event.target as Element;\n const isSelectItem = clickedElement?.closest('[data-testid=\"select-item\"]');\n \n if (open && selectElement && !selectElement.contains(event.target as Node) && !isSelectItem && !isSelecting) {\n if (controlledOpen === undefined) {\n setInternalOpen(false);\n }\n onOpenChange?.(false);\n }\n };\n\n if (open) {\n document.addEventListener('mousedown', handleClickOutside);\n return () => {\n document.removeEventListener('mousedown', handleClickOutside);\n };\n }\n }, [open, controlledOpen, onOpenChange, selectRef, isSelecting]);\n\n // Find selected text when value changes\n React.useEffect(() => {\n if (value && !internalSelectedText) {\n // Find the SelectItem with the matching value and extract its text\n const selectElement = selectRef.current;\n if (selectElement) {\n const selectItem = selectElement.querySelector(`[data-value=\"${value}\"]`);\n if (selectItem) {\n const textContent = selectItem.textContent?.trim() || '';\n if (textContent) {\n setInternalSelectedText(textContent);\n }\n }\n }\n }\n }, [value, internalSelectedText, selectRef]);\n\n const contextValue = React.useMemo<SelectContextValue>(() => ({\n value,\n selectedText: controlledSelectedText || internalSelectedText,\n onValueChange: handleValueChange,\n open,\n onOpenChange: handleOpenChange,\n disabled,\n }), [value, controlledSelectedText, internalSelectedText, handleValueChange, open, handleOpenChange, disabled]);\n\n return (\n <form\n ref={selectRef}\n className={cn(\"relative\", className)}\n data-value={value}\n data-testid=\"select-root\"\n {...restProps}\n >\n <SelectContext.Provider value={contextValue}>\n {children}\n </SelectContext.Provider>\n </form>\n );\n }\n);\nSelect.displayName = \"Select\";\n\n// ============================================================================\n// TRIGGER COMPONENT\n// ============================================================================\n\nexport const SelectTrigger = React.forwardRef<HTMLButtonElement, SelectTriggerProps>(\n ({ children, className, variant = \"outline\", size = \"default\", asChild = false, ...props }, ref) => {\n const { open, onOpenChange, disabled, value } = useSelectContext();\n\n const handleClick = () => {\n onOpenChange(!open);\n };\n\n const handleKeyDown = (e: React.KeyboardEvent) => {\n if (disabled) return;\n\n switch (e.key) {\n case 'Enter':\n case ' ':\n case 'ArrowDown':\n case 'ArrowUp':\n e.preventDefault();\n onOpenChange(true);\n break;\n case 'Escape':\n if (open) {\n e.preventDefault();\n onOpenChange(false);\n }\n break;\n }\n };\n\n const triggerProps = {\n ref,\n type: \"button\" as const,\n role: \"combobox\",\n \"aria-expanded\": open,\n \"aria-haspopup\": \"listbox\",\n disabled,\n className: cn(\n \"!justify-between relative w-full\",\n \"[&_svg]:pointer-events-none\",\n open && \"!rounded-b-none !border-b-0\",\n className\n ),\n style: {\n ...props.style,\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap'\n },\n onClick: handleClick,\n onKeyDown: handleKeyDown,\n \"data-testid\": \"select-trigger\",\n \"data-value\": value,\n ...props\n };\n\n if (asChild) {\n const childChildren = React.Children.toArray((children as React.ReactElement).props.children);\n const hasChevron = childChildren.some(child => \n React.isValidElement(child) && \n (child.type === ChevronDown || \n (child.type === 'svg' && child.props['data-testid'] === 'chevron-down') ||\n (typeof child === 'object' && 'type' in child && typeof child.type === 'function' && child.type.name === 'ChevronDown'))\n );\n\n return React.cloneElement(children as React.ReactElement, {\n ...triggerProps,\n children: hasChevron ? childChildren : [\n ...childChildren,\n <ChevronDown \n key=\"chevron-down\"\n className={cn(\n \"h-4 w-4 opacity-50 transition-transform pointer-events-none float-right\",\n open && \"rotate-180\"\n )} \n />\n ]\n });\n }\n\n return (\n <Button\n ref={ref}\n type=\"button\"\n role=\"combobox\"\n aria-expanded={open}\n aria-haspopup=\"listbox\"\n disabled={disabled}\n variant={variant}\n size={size}\n className={cn(\n \"!justify-between relative w-full\",\n \"[&_svg]:pointer-events-none\",\n open && \"!rounded-b-none !border-b-0\",\n className\n )}\n style={{\n ...props.style,\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap'\n }}\n onClick={handleClick}\n onKeyDown={handleKeyDown}\n data-testid=\"select-trigger\"\n data-value={value}\n {...props}\n >\n {children}\n <ChevronDown \n className={cn(\n \"h-4 w-4 opacity-50 transition-transform pointer-events-none float-right\",\n open && \"rotate-180\"\n )} \n />\n </Button>\n );\n }\n);\nSelectTrigger.displayName = \"SelectTrigger\";\n\n// ============================================================================\n// VALUE COMPONENT\n// ============================================================================\n\nexport const SelectValue = React.forwardRef<HTMLSpanElement, SelectValueProps>(\n ({ placeholder = \"Select an option...\", children }, ref) => {\n const { selectedText } = useSelectContext();\n\n return (\n <span ref={ref} data-testid=\"select-value\">\n {children || (selectedText ? selectedText : placeholder)}\n </span>\n );\n }\n);\nSelectValue.displayName = \"SelectValue\";\n\n// ============================================================================\n// CONTENT COMPONENT\n// ============================================================================\n\nexport const SelectContent = React.forwardRef<HTMLUListElement, SelectContentProps>(\n ({ \n children, \n className, \n searchable = false,\n searchPlaceholder = \"Search...\",\n maxHeight = \"20rem\",\n style\n }, ref) => {\n const { open, onOpenChange, onValueChange } = useSelectContext();\n const [searchTerm, setSearchTerm] = React.useState('');\n const [filteredChildren, setFilteredChildren] = React.useState<React.ReactNode>(children);\n const searchInputRef = React.useRef<HTMLInputElement>(null);\n\n // Filter children based on search term\n React.useEffect(() => {\n if (!searchable || !searchTerm) {\n setFilteredChildren(children);\n return;\n }\n\n const filterChildren = (nodes: React.ReactNode): React.ReactNode => {\n return React.Children.map(nodes, (child) => {\n if (!React.isValidElement(child)) return child;\n\n if (child.type === SelectItem) {\n const childText = React.Children.toArray(child.props.children).join(' ').toLowerCase();\n const searchLower = searchTerm.toLowerCase();\n \n if (childText.includes(searchLower)) {\n return child;\n }\n return null;\n }\n\n if (child.props.children) {\n const filteredChildChildren = filterChildren(child.props.children);\n if (React.Children.count(filteredChildChildren) > 0) {\n return React.cloneElement(child, {}, filteredChildChildren);\n }\n return null;\n }\n\n return child;\n });\n };\n\n const filtered = filterChildren(children);\n setFilteredChildren(filtered);\n }, [children, searchTerm, searchable]);\n\n // Focus search input when dropdown opens\n React.useEffect(() => {\n if (open && searchable && searchInputRef.current) {\n searchInputRef.current.focus();\n }\n }, [open, searchable]);\n\n if (!open) {\n return null;\n }\n\n return (\n <ul\n ref={ref}\n className={cn(\n \"absolute z-[99999] w-full overflow-y-auto rounded-b-md border border-t-0 border-main-300 bg-main-50 shadow-lg\",\n \"list-none p-0 m-0\",\n className\n )}\n style={{ \n top: '100%',\n left: 0,\n right: 0,\n maxHeight,\n position: 'absolute',\n zIndex: 99999,\n ...style\n }}\n data-testid=\"select-content\"\n role=\"listbox\"\n >\n {searchable && (\n <div className=\"p-2 border-b border-main-200\">\n <div className=\"relative\">\n <Search className=\"absolute left-2 top-1/2 transform -translate-y-1/2 h-4 w-4 text-main-400\" />\n <input\n ref={searchInputRef}\n type=\"text\"\n placeholder={searchPlaceholder}\n value={searchTerm}\n onChange={(e) => setSearchTerm(e.target.value)}\n onKeyDown={(e) => {\n if (e.key === 'Escape') {\n e.preventDefault();\n setSearchTerm('');\n }\n }}\n className=\"w-full pl-8 pr-8 py-1 text-sm border border-main-200 rounded focus:outline-none focus:ring-2 focus:ring-main-500\"\n data-testid=\"select-search-input\"\n aria-label=\"Search options\"\n />\n {searchTerm && (\n <button\n type=\"button\"\n onClick={() => setSearchTerm('')}\n className=\"absolute right-2 top-1/2 transform -translate-y-1/2 text-main-400 hover:text-main-600\"\n data-testid=\"select-clear-search\"\n aria-label=\"Clear search\"\n >\n <X className=\"h-4 w-4\" />\n </button>\n )}\n </div>\n </div>\n )}\n {filteredChildren}\n </ul>\n );\n }\n);\nSelectContent.displayName = \"SelectContent\";\n\n// ============================================================================\n// ITEM COMPONENT\n// ============================================================================\n\nexport const SelectItem = React.forwardRef<HTMLLIElement, SelectItemProps>(\n ({ value, children, disabled = false, className, onClick }, ref) => {\n const { value: selectedValue, onValueChange } = useSelectContext();\n const isSelected = selectedValue === value;\n \n // Extract text content from children for display\n const getTextContent = (children: React.ReactNode): string => {\n if (typeof children === 'string') return children;\n if (typeof children === 'number') return children.toString();\n if (React.isValidElement(children) && children.props.children) {\n return getTextContent(children.props.children);\n }\n if (Array.isArray(children)) {\n return children.map(getTextContent).join('');\n }\n return '';\n };\n \n const itemText = getTextContent(children);\n \n const handleMouseDown = (e: React.MouseEvent) => {\n if (!disabled) {\n const event = new CustomEvent('selectItemMouseDown', { detail: { value } });\n document.dispatchEvent(event);\n }\n };\n\n const handleClick = (e: React.MouseEvent) => {\n if (!disabled) {\n if (onClick) {\n onClick(e);\n }\n onValueChange(value, itemText);\n }\n };\n\n const handleKeyDown = (e: React.KeyboardEvent) => {\n if (disabled) return;\n\n switch (e.key) {\n case 'Enter':\n case ' ':\n e.preventDefault();\n if (onClick) {\n onClick(e as any);\n }\n onValueChange(value, itemText);\n break;\n }\n };\n\n return (\n <li\n ref={ref}\n data-value={value}\n className={cn(\n \"relative flex cursor-pointer select-none items-start rounded-sm px-2 py-1.5 text-sm outline-none\",\n \"hover:bg-main-100 focus:bg-main-100\",\n \"break-words min-w-0\",\n isSelected && \"bg-main-100 text-main-900\",\n disabled && \"pointer-events-none opacity-50\",\n className\n )}\n onMouseDown={handleMouseDown}\n onClick={handleClick}\n onKeyDown={handleKeyDown}\n data-testid=\"select-item\"\n data-disabled={disabled ? \"true\" : undefined}\n role=\"option\"\n aria-selected={isSelected}\n >\n {children}\n {isSelected && (\n <Check className=\"absolute right-2 h-4 w-4 flex-shrink-0 mt-0.5\" />\n )}\n </li>\n );\n }\n);\nSelectItem.displayName = \"SelectItem\";\n\n// ============================================================================\n// ADDITIONAL COMPONENTS (for backward compatibility)\n// ============================================================================\n\nexport const SelectGroup = React.forwardRef<HTMLDivElement, { children: React.ReactNode; className?: string }>(\n ({ children, className }, ref) => {\n return (\n <div ref={ref} className={cn(\"p-1\", className)} data-testid=\"select-group\">\n {children}\n </div>\n );\n }\n);\nSelectGroup.displayName = \"SelectGroup\";\n\nexport const SelectLabel = React.forwardRef<HTMLDivElement, { children: React.ReactNode; className?: string }>(\n ({ children, className }, ref) => {\n return (\n <div ref={ref} className={cn(\"px-2 py-1.5 text-sm font-semibold\", className)} data-testid=\"select-label\">\n {children}\n </div>\n );\n }\n);\nSelectLabel.displayName = \"SelectLabel\";\n\nexport const SelectSeparator = React.forwardRef<HTMLDivElement, { className?: string }>(\n ({ className }, ref) => {\n return (\n <div\n ref={ref}\n className={cn(\"my-1 h-px bg-sec-200\", className)}\n data-testid=\"select-separator\"\n />\n );\n }\n);\nSelectSeparator.displayName = \"SelectSeparator\";","import React from 'react';\nimport { Column } from '@tanstack/react-table';\nimport { Button } from '../../Button/Button';\nimport { \n Select,\n SelectContent,\n SelectItem,\n SelectSeparator,\n SelectTrigger,\n} from '../../Select/Select';\nimport { Checkbox } from '../../Checkbox/Checkbox';\nimport { Settings2, Eye, EyeOff } from 'lucide-react';\n\ninterface ColumnVisibilityDropdownProps<TData> {\n columns: Column<TData, unknown>[];\n onColumnVisibilityChange: (columnId: string, visible: boolean) => void;\n}\n\nexport function ColumnVisibilityDropdown<TData>({ \n columns, \n onColumnVisibilityChange \n}: ColumnVisibilityDropdownProps<TData>) {\n const toggleableColumns = columns.filter(\n (column) => column.getCanHide() && column.id !== 'actions'\n );\n\n return (\n <Select className=\"w-52\">\n <SelectTrigger asChild>\n <Button \n variant=\"outline\" \n >\n <Settings2 className=\"h-4 w-4 mr-2 flex-shrink-0\" />\n <span className=\"truncate\">Columns</span>\n </Button>\n </SelectTrigger>\n <SelectContent>\n <div className=\"p-2 space-y-1\">\n <div className=\"flex gap-1 mb-2\">\n <Button\n variant=\"ghost\"\n size=\"sm\"\n className=\"h-7 px-2 text-xs\"\n onClick={() => {\n toggleableColumns.forEach(column => {\n if (!column.getIsVisible()) {\n onColumnVisibilityChange(column.id, true);\n }\n });\n }}\n >\n <Eye className=\"h-3 w-3 mr-1\" />\n Show All\n </Button>\n <Button\n variant=\"ghost\"\n size=\"sm\"\n className=\"h-7 px-2 text-xs\"\n onClick={() => {\n toggleableColumns.forEach(column => {\n if (column.getIsVisible()) {\n onColumnVisibilityChange(column.id, false);\n }\n });\n }}\n >\n <EyeOff className=\"h-3 w-3 mr-1\" />\n Hide All\n </Button>\n </div>\n <SelectSeparator />\n {toggleableColumns.map((column) => (\n <SelectItem \n key={column.id} \n value={column.id}\n className=\"flex items-center space-x-2 cursor-pointer px-3 py-2 text-sm hover:bg-sec-50\"\n onClick={(e) => e.preventDefault()}\n >\n <Checkbox\n id={column.id}\n checked={column.getIsVisible()}\n onCheckedChange={(checked) =>\n onColumnVisibilityChange(column.id, !!checked)\n }\n />\n <label\n htmlFor={column.id}\n className=\"text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70 cursor-pointer\"\n >\n {typeof column.columnDef?.header === 'string'\n ? column.columnDef.header\n : column.id}\n </label>\n </SelectItem>\n ))}\n </div>\n </SelectContent>\n </Select>\n );\n}\n","/**\n * @file Unified Table Body Component with Virtual Scrolling\n * @package @jmruthers/pace-core\n * @module Components/DataTable/Components\n * @since 0.3.0\n * \n * A unified table body component that handles both standard and virtualized rendering\n * based on data size. This eliminates the need for separate virtualized components\n * while maintaining all features consistently.\n */\n\nimport React, { useLayoutEffect, useState, useRef, useMemo } from 'react';\nimport { type Table, flexRender } from '@tanstack/react-table';\nimport { useVirtualizer } from '@tanstack/react-virtual';\n// Removed Table component imports - using native HTML elements\nimport { Button } from '../../Button/Button';\nimport { ChevronUp, ChevronDown, ChevronRight } from 'lucide-react';\nimport { EmptyState } from './EmptyState';\nimport { FilterRow } from './FilterRow';\nimport { ActionButtons } from './ActionButtons';\nimport { DraggableColumnHeader } from './DraggableColumnHeader';\nimport { getTableCellClasses, getTableHeadClasses, getTableRowClasses } from '../styles';\nimport { Input } from '../../Input/Input';\nimport { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from '../../Select/Select';\nimport type { AggregateConfig, HierarchicalConfig, HierarchicalDataRow } from '../types';\nimport { calculateIndentation } from '../utils/hierarchicalUtils';\n\n// Performance thresholds\nconst VIRTUALIZATION_THRESHOLD = 1000;\nconst CHUNKING_THRESHOLD = 10000;\nconst MEMORY_OPTIMIZATION_THRESHOLD = 100000;\n\n/**\n * Props for the unified table body component\n */\ninterface UnifiedTableBodyProps<TData extends Record<string, any>> {\n /** TanStack table instance */\n table: Table<TData>;\n /** Whether a new row is being created */\n isCreating: boolean;\n /** Data for the row being created */\n creationData: Record<string, any>;\n /** Callback when creation data changes */\n onCreationDataChange: (data: Record<string, any>) => void;\n /** Callback to save the new row */\n onSaveCreation: () => void;\n /** Callback to cancel row creation */\n onCancelCreation: () => void;\n /** ID of the row currently being edited */\n editingRowId: string | null;\n /** Data for the row being edited */\n editingData: Record<string, any>;\n /** Callback when editing data changes */\n onEditingDataChange: (data: Record<string, any>) => void;\n /** Callback to save the edited row */\n onSaveEditing?: () => void;\n /** Callback to cancel row editing */\n onCancelEditing?: () => void;\n /** Current grouping configuration */\n grouping: string[];\n /** Aggregate configurations for grouped data */\n aggregates: AggregateConfig[];\n /** Function to get unique row ID */\n getRowId?: (row: TData, index: number) => string;\n /** Custom empty state configuration */\n emptyState?: {\n title?: string;\n description?: string;\n icon?: React.ComponentType<{ className?: string }>;\n action?: {\n label: string;\n onClick: () => void;\n };\n };\n /** Whether the table is currently filtered */\n isFiltered?: boolean;\n /** Callback to clear all filters */\n onClearFilters?: () => void;\n /** Whether filtering is enabled */\n enableFiltering?: boolean;\n /** Whether the filter row should be visible */\n showFilterRow?: boolean;\n /** Whether column reordering is enabled */\n enableColumnReordering?: boolean;\n /** Callback when column order changes */\n onColumnOrderChange?: (columnOrder: string[]) => void;\n /** Callback when a column is dropped on another column */\n onColumnDrop?: (draggedColumnId: string, targetColumnId: string) => void;\n /** Saved column order from persistence */\n savedColumnOrder?: string[];\n /** Whether persistence is enabled */\n enablePersistence?: boolean;\n /** Table ID for persistence */\n tableId?: string;\n /** Data length for virtualization decision */\n dataLength: number;\n /** Virtual height for virtualized rendering */\n virtualHeight?: number;\n /** Whether to force virtualization */\n forceVirtualization?: boolean;\n /** Hierarchical configuration for parent/child rows */\n hierarchical?: HierarchicalConfig & {\n state?: {\n isExpanded: (rowId: string) => boolean;\n hasChildren: (rowId: string) => boolean;\n getChildrenCount: (rowId: string) => number;\n toggleRow: (rowId: string) => void;\n };\n expandAll?: () => void;\n collapseAll?: () => void;\n isAllExpanded?: boolean;\n hasAnyChildren?: boolean;\n };\n /** Actions for action buttons */\n actions?: Array<{\n label: string;\n onClick: (row: any) => void;\n icon?: any;\n variant?: 'default' | 'destructive' | 'outline' | 'secondary' | 'ghost';\n disabled?: boolean | ((row?: any) => boolean);\n visible?: boolean | ((row?: any) => boolean);\n testId?: string;\n showInEditMode?: boolean;\n hideInViewMode?: boolean;\n showInViewMode?: boolean;\n hidden?: boolean;\n showForParent?: boolean;\n showForChild?: boolean;\n parentIcon?: any;\n childIcon?: any;\n parentLabel?: string;\n childLabel?: string;\n }>;\n}\n\n// Helper function to render the appropriate input type based on column configuration\nconst renderEditField = (\n column: any,\n value: any,\n onChange: (value: any) => void,\n editingData: Record<string, any> = {},\n placeholder?: string\n) => {\n const columnDef = column.columnDef;\n \n // Check for custom field type\n if (columnDef.fieldType === 'select' && columnDef.fieldOptions) {\n // Use editAccessorKey if specified, otherwise use the column id\n const accessorKey = columnDef.editAccessorKey || column.id;\n const currentValue = editingData[accessorKey] || value || '';\n \n return (\n <Select\n value={currentValue}\n onValueChange={(newValue) => onChange({ [accessorKey]: newValue })}\n >\n <SelectTrigger className=\"h-8\">\n <SelectValue placeholder={placeholder || `Select ${columnDef.header || column.id}...`} />\n </SelectTrigger>\n <SelectContent>\n {columnDef.fieldOptions.map((option: any) => (\n <SelectItem key={option.value} value={option.value}>\n {option.label}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n );\n }\n \n // Check for number type\n if (columnDef.fieldType === 'number') {\n return (\n <Input\n type=\"number\"\n value={value || ''}\n onChange={(e) => onChange(e.target.value)}\n placeholder={placeholder || `Enter ${columnDef.header || column.id}...`}\n className=\"h-8\"\n />\n );\n }\n \n // Check for date type\n if (columnDef.fieldType === 'date') {\n return (\n <Input\n type=\"date\"\n value={value || ''}\n onChange={(e) => onChange(e.target.value)}\n className=\"h-8\"\n />\n );\n }\n \n // Default to text input\n return (\n <Input\n type=\"text\"\n value={value || ''}\n onChange={(e) => onChange(e.target.value)}\n placeholder={placeholder || `Enter ${columnDef.header || column.id}...`}\n className=\"h-8\"\n />\n );\n};\n\n// Row component without memoization to ensure column visibility works\nconst MemoizedRow = ({ \n row, \n style, \n isEditing, \n editingData, \n onEditingDataChange,\n onSaveEditing,\n onCancelEditing,\n getRowId,\n grouping,\n editingRowId,\n hierarchical,\n actions\n}: { \n row: any; \n style?: React.CSSProperties;\n isEditing?: boolean;\n editingData?: Record<string, any>;\n onEditingDataChange?: (data: Record<string, any>) => void;\n onSaveEditing?: () => void;\n onCancelEditing?: () => void;\n getRowId?: (row: any, index: number) => string;\n grouping: string[];\n editingRowId?: string | null;\n hierarchical?: HierarchicalConfig & {\n state?: {\n isExpanded: (rowId: string) => boolean;\n hasChildren: (rowId: string) => boolean;\n getChildrenCount: (rowId: string) => number;\n toggleRow: (rowId: string) => void;\n };\n };\n actions?: Array<{\n label: string;\n onClick: (row: any) => void;\n icon?: any;\n variant?: 'default' | 'destructive' | 'outline' | 'secondary' | 'ghost';\n disabled?: boolean | ((row?: any) => boolean);\n visible?: boolean | ((row?: any) => boolean);\n testId?: string;\n showInEditMode?: boolean;\n hideInViewMode?: boolean;\n showInViewMode?: boolean;\n hidden?: boolean;\n showForParent?: boolean;\n showForChild?: boolean;\n parentIcon?: any;\n childIcon?: any;\n parentLabel?: string;\n childLabel?: string;\n }>;\n}) => {\n const rowId = getRowId ? getRowId(row.original, row.index) : String(row.index);\n \n // Hierarchical row styling - moved to top to avoid hoisting issues\n const hierarchicalRow = row.original as HierarchicalDataRow;\n const isHierarchical = hierarchical?.enabled && hierarchicalRow?.isParent !== undefined;\n const isParent = isHierarchical && hierarchicalRow.isParent;\n const isChild = isHierarchical && !hierarchicalRow.isParent;\n \n // Handle grouped rows\n if (row.getIsGrouped && row.getIsGrouped()) {\n const groupValue = row.getValue(grouping[0]);\n const subRowsCount = row.subRows?.length || 0;\n const isExpanded = row.getIsExpanded();\n \n return (\n <React.Fragment>\n {/* Group Header Row */}\n <tr className=\"bg-sec-50 hover:bg-sec-100\" style={style}>\n <td \n className={getTableCellClasses({\n isCompact: true,\n className: \"px-3 py-2 flex items-center font-medium\"\n })} \n colSpan={row.getAllCells().length}\n >\n <Button\n variant=\"ghost\"\n size=\"sm\"\n onClick={() => row.toggleExpanded()}\n className=\"p-0 h-auto mr-2\"\n >\n {isExpanded ? (\n <ChevronDown className=\"h-4 w-4\" />\n ) : (\n <ChevronRight className=\"h-4 w-4\" />\n )}\n </Button>\n <span className=\"text-sm\">\n {String(groupValue)} ({subRowsCount} items)\n </span>\n </td>\n </tr>\n \n {/* Render sub-rows if expanded */}\n {isExpanded && row.subRows?.map((subRow: any) => {\n const subRowId = getRowId ? getRowId(subRow.original, subRow.index) : String(subRow.index);\n const isSubRowEditing = editingRowId === subRowId;\n \n return (\n <tr key={subRow.id} className=\"border-l-2 border-l-blue-200\" style={style}>\n {subRow.getVisibleCells().map((cell: any) => (\n <td \n key={cell.id} \n className={getTableCellClasses({\n isCompact: true,\n className: \"px-3 py-2 pl-8 whitespace-normal break-words\"\n })}\n >\n {isSubRowEditing && cell.column.id !== 'actions' ? (\n renderEditField(cell.column, editingData?.[cell.column.id], (value) => {\n if (typeof value === 'object' && value !== null) {\n onEditingDataChange?.({ ...editingData, ...value });\n } else {\n onEditingDataChange?.({ ...editingData, [cell.column.id]: value });\n }\n }, editingData)\n ) : cell.column.id === 'actions' ? (\n <ActionButtons \n row={row} \n actions={actions} \n isEditing={isEditing}\n isParent={isParent}\n hierarchical={!!hierarchical}\n />\n ) : (\n flexRender(cell.column.columnDef.cell, {\n ...cell.getContext(),\n hierarchical: hierarchical,\n isParent: false,\n isChild: true,\n isHierarchical: false,\n rowId: subRowId,\n isExpanded: false,\n hasChildren: false\n })\n )}\n </td>\n ))}\n </tr>\n );\n })}\n </React.Fragment>\n );\n }\n \n // Skip leaf rows when grouping is enabled\n if (grouping.length > 0 && typeof row.getParentRow === 'function' && row.getParentRow() && (!row.getIsGrouped || !row.getIsGrouped())) {\n return null;\n }\n \n // Regular row\n const visibleCells = row.getVisibleCells();\n const allCells = row.getAllCells ? row.getAllCells() : [];\n \n // Calculate indentation for child rows\n const indentSize = hierarchical?.indentSize || 24;\n const indentation = isChild && hierarchical?.state ? \n calculateIndentation(hierarchicalRow, [], indentSize) : 0;\n \n // Apply hierarchical row classes\n const rowClassName = isHierarchical ? (\n isParent \n ? hierarchical?.parentRowClassName || 'bg-main-50 hover:bg-main-100 font-medium'\n : hierarchical?.childRowClassName || 'bg-sec-25 hover:bg-sec-50'\n ) : '';\n \n return (\n <tr \n key={row.id} \n style={{\n ...style,\n ...(isChild && indentation > 0 ? { paddingLeft: `${indentation}px` } : {})\n }}\n className={rowClassName}\n >\n {visibleCells.map((cell: any, cellIndex: number) => {\n // For hierarchical parent rows, add expansion button to the first cell\n const isFirstCell = cellIndex === 0;\n const shouldShowExpansionButton = isHierarchical && isParent && isFirstCell && hierarchical?.state;\n const isExpanded = shouldShowExpansionButton ? hierarchical?.state?.isExpanded(rowId) : false;\n const hasChildren = shouldShowExpansionButton ? hierarchical?.state?.hasChildren(rowId) : false;\n \n // Debug logging for expander button conditions (development only)\n if (process.env.NODE_ENV === 'development' && isParent && isFirstCell) {\n console.log('🔍 Expander Button Debug:', {\n rowId,\n isHierarchical,\n isParent,\n isFirstCell,\n hasHierarchicalState: !!hierarchical?.state,\n shouldShowExpansionButton,\n hasChildren,\n isExpanded\n });\n }\n \n \n return (\n <td \n key={cell.id} \n className={getTableCellClasses({\n isCompact: true,\n className: \"px-3 py-2 whitespace-normal break-words\"\n })}\n >\n <div className=\"flex items-center gap-2\">\n {/* Individual expansion button for hierarchical parent rows */}\n {shouldShowExpansionButton && hasChildren && (\n <Button\n variant=\"ghost\"\n size=\"sm\"\n onClick={() => hierarchical?.state?.toggleRow(rowId)}\n className=\"h-6 w-6 p-0 flex-shrink-0\"\n aria-label={isExpanded ? 'Collapse row' : 'Expand row'}\n title={isExpanded ? 'Collapse row' : 'Expand row'}\n >\n {isExpanded ? (\n <ChevronDown className=\"h-4 w-4\" />\n ) : (\n <ChevronRight className=\"h-4 w-4\" />\n )}\n </Button>\n )}\n \n {/* Cell content */}\n <div className=\"flex-1\">\n {isEditing && cell.column.id !== 'actions' ? (\n renderEditField(cell.column, editingData?.[cell.column.id], (value) => {\n if (typeof value === 'object' && value !== null) {\n onEditingDataChange?.({ ...editingData, ...value });\n } else {\n onEditingDataChange?.({ ...editingData, [cell.column.id]: value });\n }\n }, editingData)\n ) : cell.column.id === 'actions' ? (\n isEditing ? (\n <div className=\"flex gap-1\">\n <button\n onClick={onSaveEditing}\n className=\"h-8 w-8 p-0 hover:bg-muted/50 flex items-center justify-center\"\n title=\"Save changes\"\n >\n <svg className=\"h-4 w-4\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M5 13l4 4L19 7\" />\n </svg>\n </button>\n <button\n onClick={onCancelEditing}\n className=\"h-8 w-8 p-0 hover:bg-muted/50 flex items-center justify-center\"\n title=\"Cancel changes\"\n >\n <svg className=\"h-4 w-4\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M6 18L18 6M6 6l12 12\" />\n </svg>\n </button>\n </div>\n ) : (\n <ActionButtons \n row={row} \n actions={actions} \n isEditing={isEditing}\n isParent={isParent}\n hierarchical={!!hierarchical}\n />\n )\n ) : (\n flexRender(cell.column.columnDef.cell, {\n ...cell.getContext(),\n hierarchical: hierarchical,\n isParent: isParent,\n isChild: isChild,\n isHierarchical: isHierarchical,\n rowId: rowId,\n isExpanded: isExpanded,\n hasChildren: hasChildren\n })\n )}\n </div>\n </div>\n </td>\n );\n })}\n </tr>\n );\n};\n\nMemoizedRow.displayName = 'MemoizedRow';\n\n/**\n * Unified table body component with intelligent virtualization\n */\nexport function UnifiedTableBody<TData extends Record<string, any>>({\n table,\n isCreating,\n creationData,\n onCreationDataChange,\n onSaveCreation,\n onCancelCreation,\n editingRowId,\n editingData,\n onEditingDataChange,\n onSaveEditing,\n onCancelEditing,\n grouping,\n aggregates,\n getRowId,\n emptyState,\n isFiltered,\n onClearFilters,\n enableFiltering = false,\n showFilterRow = false,\n enableColumnReordering = false,\n onColumnOrderChange,\n onColumnDrop,\n savedColumnOrder,\n enablePersistence = false,\n tableId,\n dataLength,\n virtualHeight = 600,\n forceVirtualization = false,\n hierarchical,\n actions = []\n}: UnifiedTableBodyProps<TData>) {\n \n \n const headerRef = useRef<HTMLTableSectionElement>(null);\n const bodyRef = useRef<HTMLTableSectionElement>(null);\n const parentRef = useRef<HTMLDivElement>(null);\n\n // Determine if virtualization should be used\n const shouldVirtualize = forceVirtualization || dataLength > VIRTUALIZATION_THRESHOLD;\n \n // Get table data\n const rows = table.getRowModel().rows;\n const headerGroups = table.getHeaderGroups();\n\n // Virtual scrolling setup\n const virtualizer = useVirtualizer({\n count: rows.length,\n getScrollElement: () => parentRef.current,\n estimateSize: () => 40,\n overscan: 5,\n });\n\n const virtualRows = virtualizer.getVirtualItems();\n const totalSize = virtualizer.getTotalSize();\n\n\n // Render table content\n const renderTableContent = () => {\n if (rows.length === 0) {\n return (\n <tr>\n <td \n colSpan={table.getVisibleFlatColumns().length} \n className=\"px-3 py-2\" \n role=\"status\"\n >\n <EmptyState\n title={emptyState?.title}\n description={emptyState?.description}\n icon={emptyState?.icon}\n action={emptyState?.action}\n isFiltered={isFiltered}\n onClearFilters={onClearFilters}\n />\n </td>\n </tr>\n );\n }\n\n if (shouldVirtualize) {\n // Virtualized rendering\n return virtualRows.map((virtualRow) => {\n const row = rows[virtualRow.index];\n if (!row) return null;\n \n const rowId = getRowId ? getRowId(row.original, row.index) : String(row.index);\n const isEditing = editingRowId === rowId;\n \n return (\n <MemoizedRow\n key={row.id}\n row={row}\n isEditing={isEditing}\n editingData={editingData}\n onEditingDataChange={onEditingDataChange}\n onSaveEditing={onSaveEditing}\n onCancelEditing={onCancelEditing}\n getRowId={getRowId}\n grouping={grouping}\n editingRowId={editingRowId}\n hierarchical={hierarchical}\n actions={actions}\n style={{\n position: 'absolute',\n top: 0,\n left: 0,\n width: '100%',\n height: `${virtualRow.size}px`,\n transform: `translateY(${virtualRow.start}px)`,\n }}\n />\n );\n });\n } else {\n // Standard rendering\n return rows.map((row) => {\n const rowId = getRowId ? getRowId(row.original, row.index) : String(row.index);\n const isEditing = editingRowId === rowId;\n \n return (\n <MemoizedRow\n key={row.id}\n row={row}\n isEditing={isEditing}\n editingData={editingData}\n onEditingDataChange={onEditingDataChange}\n onSaveEditing={onSaveEditing}\n onCancelEditing={onCancelEditing}\n getRowId={getRowId}\n grouping={grouping}\n editingRowId={editingRowId}\n hierarchical={hierarchical}\n actions={actions}\n />\n );\n });\n }\n };\n\n return (\n <tbody ref={bodyRef}>\n {/* Unified Table Body - Same structure for both virtualized and standard */}\n {/* Creation Row */}\n {isCreating && (\n <tr>\n {headerGroups[0]?.headers\n ?.filter(header => {\n // Check if getIsVisible method exists and call it, otherwise assume visible\n return typeof header.column.getIsVisible === 'function' \n ? header.column.getIsVisible() \n : true;\n })\n ?.filter(header => header.column.id !== 'actions' && header.column.id !== 'select')\n ?.map((header) => (\n <td \n key={header.column.id} \n className={getTableCellClasses({\n isCompact: true,\n className: \"px-3 py-2\"\n })}\n >\n {renderEditField(header.column, creationData[header.column.id], (value) => {\n if (typeof value === 'object' && value !== null) {\n onCreationDataChange({ ...creationData, ...value });\n } else {\n onCreationDataChange({ ...creationData, [header.column.id]: value });\n }\n }, creationData)}\n </td>\n ))}\n <td \n className={getTableCellClasses({\n isCompact: true,\n className: \"px-3 py-2 flex gap-1\"\n })}\n >\n <button\n onClick={onSaveCreation}\n className=\"h-8 w-8 p-0 hover:bg-muted/50 flex items-center justify-center\"\n title=\"Save new row\"\n >\n <svg className=\"h-4 w-4\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M5 13l4 4L19 7\" />\n </svg>\n </button>\n <button\n onClick={onCancelCreation}\n className=\"h-8 w-8 p-0 hover:bg-muted/50 flex items-center justify-center\"\n title=\"Cancel new row\"\n >\n <svg className=\"h-4 w-4\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M6 18L18 6M6 6l12 12\" />\n </svg>\n </button>\n </td>\n </tr>\n )}\n \n {/* Filter Row */}\n {showFilterRow && enableFiltering && (\n <FilterRow \n table={table} \n visibleColumns={table.getHeaderGroups()[0]?.headers || []} \n />\n )}\n \n {/* Table Content */}\n {renderTableContent()}\n </tbody>\n );\n}\n","import React from 'react';\nimport { Database, Search, Plus, User } from 'lucide-react';\nimport { Button } from '../../Button/Button';\n\ninterface EmptyStateProps {\n title?: string;\n description?: string;\n icon?: React.ComponentType<React.SVGProps<SVGSVGElement>>;\n action?: {\n label: string;\n onClick: () => void;\n };\n isFiltered?: boolean;\n onClearFilters?: () => void;\n}\n\nexport function EmptyState({ \n title,\n description,\n icon: Icon = Database,\n action,\n isFiltered = false,\n onClearFilters\n}: EmptyStateProps) {\n const defaultTitle = isFiltered ? \"No results found\" : \"No data available\";\n const defaultDescription = isFiltered \n ? \"Try adjusting your search or filter criteria\"\n : \"Get started by adding your first entry\";\n\n return (\n <div className=\"flex flex-col items-center justify-center p-8 text-center\">\n <Icon \n role=\"img\" \n aria-hidden=\"true\" \n className=\"h-12 w-12 text-muted-foreground mb-4\"\n data-testid={Icon === Database ? 'lucide-database' : Icon === User ? 'lucide-user' : 'custom-icon'}\n />\n <h3 className=\"text-lg font-semibold mb-2\">\n {title || defaultTitle}\n </h3>\n <p className=\"text-sm text-muted-foreground mb-4 max-w-sm\">\n {description || defaultDescription}\n </p>\n \n {(isFiltered && onClearFilters) || action ? (\n <div className=\"flex gap-2\">\n {isFiltered && onClearFilters && (\n <Button variant=\"outline\" onClick={onClearFilters}>\n <Search className=\"h-4 w-4 mr-2\" />\n Clear filters\n </Button>\n )}\n \n {action && (\n <Button onClick={action.onClick}>\n <Plus className=\"h-4 w-4 mr-2\" />\n {action.label}\n </Button>\n )}\n </div>\n ) : null}\n </div>\n );\n}\n","import React from 'react';\nimport { Input } from '../../Input/Input';\nimport { Select, SelectTrigger, SelectValue, SelectContent, SelectItem } from '../../Select/Select';\nimport { Button } from '../../Button/Button';\nimport { X, Filter } from 'lucide-react';\nimport type { Column } from '@tanstack/react-table';\n\ninterface ColumnFilterProps {\n column: Column<any, unknown>;\n placeholder?: string;\n filterType?: 'text' | 'select' | 'number' | 'date';\n options?: Array<{ value: string; label: string }>;\n}\n\nexport function ColumnFilter({ \n column, \n placeholder, \n filterType = 'text',\n options = []\n}: ColumnFilterProps) {\n const columnFilterValue = column.getFilterValue();\n const canFilter = column.getCanFilter();\n\n if (!canFilter) {\n return null;\n }\n\n const handleFilterChange = (value: string | number | undefined) => {\n if (value === '' || value === undefined) {\n column.setFilterValue(undefined);\n } else {\n column.setFilterValue(value);\n }\n };\n\n const clearFilter = () => {\n column.setFilterValue(undefined);\n };\n\n const hasFilter = columnFilterValue !== undefined && columnFilterValue !== '';\n\n const renderFilterInput = () => {\n switch (filterType) {\n case 'select':\n return (\n <Select\n value={columnFilterValue as string || ''}\n onValueChange={handleFilterChange}\n >\n <SelectTrigger className=\"h-8\">\n <SelectValue placeholder={placeholder || `Filter ${column.id}...`} />\n </SelectTrigger>\n <SelectContent>\n <SelectItem value=\"\">All</SelectItem>\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 case 'number':\n return (\n <Input\n type=\"number\"\n value={columnFilterValue as string || ''}\n onChange={(e) => handleFilterChange(e.target.value ? Number(e.target.value) : undefined)}\n placeholder={placeholder || `Filter ${column.id}...`}\n className=\"h-8\"\n />\n );\n \n case 'date':\n return (\n <Input\n type=\"date\"\n value={columnFilterValue as string || ''}\n onChange={(e) => handleFilterChange(e.target.value || undefined)}\n placeholder={placeholder || `Filter ${column.id}...`}\n className=\"h-8\"\n />\n );\n \n default: // text\n return (\n <Input\n value={columnFilterValue as string || ''}\n onChange={(e) => handleFilterChange(e.target.value || undefined)}\n placeholder={placeholder || `Filter ${column.id}...`}\n className=\"h-8\"\n />\n );\n }\n };\n\n return (\n <div className=\"relative flex items-center gap-1\">\n {renderFilterInput()}\n {hasFilter && (\n <Button\n variant=\"ghost\"\n onClick={clearFilter}\n >\n <X className=\"h-3 w-3\" />\n </Button>\n )}\n {hasFilter && (\n <div className=\"absolute -top-1 -right-1 h-2 w-2 bg-main-500 rounded-full\" />\n )}\n </div>\n );\n}\n","import React from 'react';\nimport { ColumnFilter } from './ColumnFilter';\nimport type { Header, Table } from '@tanstack/react-table';\n\ninterface FilterRowProps<TData> {\n table: Table<TData>;\n visibleColumns: Header<TData, unknown>[];\n}\n\nexport function FilterRow<TData>({ table, visibleColumns }: FilterRowProps<TData>) {\n const { getState } = table;\n const { columnFilters } = getState();\n\n // Get unique values for select filters\n const getColumnOptions = (columnId: string) => {\n const column = table.getColumn(columnId);\n if (!column) return [];\n\n // Check if column has explicit field options\n const columnDef = column.columnDef as any;\n if (columnDef.fieldOptions && Array.isArray(columnDef.fieldOptions)) {\n return columnDef.fieldOptions;\n }\n\n // Fallback to generating options from data\n const uniqueValues = new Set<string>();\n table.getRowModel().rows.forEach((row) => {\n const value = row.getValue(columnId);\n if (value !== null && value !== undefined) {\n uniqueValues.add(String(value));\n }\n });\n\n return Array.from(uniqueValues)\n .sort()\n .map((value) => ({ value, label: value }));\n };\n\n // Determine filter type based on column data\n const getFilterType = (columnId: string) => {\n const column = table.getColumn(columnId);\n if (!column) return 'text';\n\n // Check if column has explicit filter type configuration\n const columnDef = column.columnDef as any;\n if (columnDef.filterType) {\n return columnDef.filterType;\n }\n\n // Check if it's a date column\n if (columnId.toLowerCase().includes('date') || columnId.toLowerCase().includes('time')) {\n return 'date';\n }\n\n // Check if it's a number column\n const firstValue = table.getRowModel().rows[0]?.getValue(columnId);\n if (typeof firstValue === 'number') {\n return 'number';\n }\n\n // Check if it has limited unique values (good for select)\n const uniqueValues = getColumnOptions(columnId);\n if (uniqueValues.length <= 10 && uniqueValues.length > 1) {\n return 'select';\n }\n\n return 'text';\n };\n\n return (\n <tr className=\"border-b bg-sec-50/50\">\n {visibleColumns.map((header) => {\n const column = header.column;\n const canFilter = column.getCanFilter();\n const filterType = getFilterType(column.id);\n const options = filterType === 'select' ? getColumnOptions(column.id) : [];\n\n return (\n <td\n key={header.id}\n className=\"px-4 py-2\"\n >\n {canFilter ? (\n <ColumnFilter\n column={column}\n filterType={filterType}\n options={options}\n placeholder={`Filter ${column.id}...`}\n />\n ) : (\n <div className=\"h-8 flex items-center text-sec-400 text-sm\">\n No filter\n </div>\n )}\n </td>\n );\n })}\n </tr>\n );\n}\n","import React from 'react';\nimport { Button } from '../../Button/Button';\nimport { MoreHorizontal } from 'lucide-react';\nimport {\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from '../../Select/Select';\n\ninterface ActionButtonsProps {\n row: any;\n rowId?: string;\n index?: number;\n actions?: Array<{\n label: string;\n onClick: (row: any) => void;\n icon?: any;\n variant?: 'default' | 'destructive' | 'outline' | 'secondary' | 'ghost';\n disabled?: boolean | ((row?: any) => boolean);\n visible?: boolean | ((row?: any) => boolean);\n testId?: string;\n showInEditMode?: boolean;\n hideInViewMode?: boolean;\n showInViewMode?: boolean;\n hidden?: boolean;\n // Hierarchical action properties\n showForParent?: boolean;\n showForChild?: boolean;\n parentIcon?: any;\n childIcon?: any;\n parentLabel?: string;\n childLabel?: string;\n }>;\n isEditing?: boolean;\n className?: string;\n // Hierarchical context\n isParent?: boolean;\n hierarchical?: boolean;\n}\n\nexport function ActionButtons({ \n row, \n actions = [],\n isEditing = false,\n isParent = false,\n hierarchical = false,\n}: ActionButtonsProps) {\n // Return null if no actions are provided\n if (actions.length === 0) {\n return null;\n }\n\n // Use provided actions\n const allActions = actions;\n\n // Filter actions based on current mode, visibility, and hierarchical context\n const visibleActions = allActions.filter(action => {\n if (action.hidden) return false;\n \n // Check hierarchical visibility\n if (hierarchical) {\n if (action.showForParent && !isParent) return false;\n if (action.showForChild && isParent) return false;\n }\n \n // Check visible function/boolean if provided\n if (typeof action.visible === 'function') {\n return action.visible(row);\n } else if (typeof action.visible === 'boolean') {\n return action.visible;\n }\n \n if (isEditing) {\n return action.showInEditMode !== false;\n } else {\n return action.hideInViewMode !== true && action.showInViewMode !== false;\n }\n });\n\n // Return null if no visible actions\n if (visibleActions.length === 0) {\n return null;\n }\n\n // If only a few actions, render them as individual icon-only buttons\n if (visibleActions.length <= 6) {\n return (\n <>\n {visibleActions.map((action, actionIndex) => {\n // Determine the appropriate icon and label based on hierarchical context\n let Icon = action.icon;\n let label = action.label;\n \n if (hierarchical) {\n if (isParent && action.parentIcon) {\n Icon = action.parentIcon;\n } else if (!isParent && action.childIcon) {\n Icon = action.childIcon;\n }\n \n if (isParent && action.parentLabel) {\n label = action.parentLabel;\n } else if (!isParent && action.childLabel) {\n label = action.childLabel;\n }\n }\n \n const isDisabled = typeof action.disabled === 'function' ? action.disabled(row) : action.disabled;\n \n return (\n <Button\n key={actionIndex}\n variant={action.variant === 'destructive' ? 'destructive' : 'ghost'}\n size=\"sm\"\n onClick={() => action.onClick(row.original)}\n disabled={isDisabled}\n aria-disabled={isDisabled}\n data-testid={action.testId}\n aria-label={label}\n className=\"h-8 w-8 p-0\"\n >\n {Icon && <Icon className=\"h-4 w-4\" />}\n </Button>\n );\n })}\n </>\n );\n }\n\n // For many actions, use dropdown menu\n return (\n <Select>\n <SelectTrigger asChild>\n <Button variant=\"ghost\" className=\"h-8 w-8 p-0\">\n <span className=\"sr-only\">Open menu</span>\n <MoreHorizontal className=\"h-4 w-4\" />\n </Button>\n </SelectTrigger>\n <SelectContent className=\"!bg-main-50 border border-sec-200 shadow-lg z-[9999]\" style={{ backgroundColor: 'white' }}>\n {visibleActions.map((action, actionIndex) => {\n // Determine the appropriate icon and label based on hierarchical context\n let Icon = action.icon;\n let label = action.label;\n \n if (hierarchical) {\n if (isParent && action.parentIcon) {\n Icon = action.parentIcon;\n } else if (!isParent && action.childIcon) {\n Icon = action.childIcon;\n }\n \n if (isParent && action.parentLabel) {\n label = action.parentLabel;\n } else if (!isParent && action.childLabel) {\n label = action.childLabel;\n }\n }\n \n return (\n <SelectItem\n key={actionIndex}\n value={`action-${actionIndex}`}\n onClick={() => action.onClick(row.original)}\n className={action.variant === 'destructive' ? 'text-acc-600' : ''}\n >\n {Icon && <Icon className=\"mr-2 h-4 w-4\" />}\n {label}\n </SelectItem>\n );\n })}\n </SelectContent>\n </Select>\n );\n}\n\n","/**\n * @file Hierarchical Data Processing Utilities\n * @package @jmruthers/pace-core\n * @module Components/DataTable/Utils/hierarchicalUtils\n * @since 0.4.35\n */\n\nimport type { HierarchicalDataRow, DataTableColumn, DataRecord } from '../types';\n\n/**\n * Validates that data conforms to hierarchical structure\n */\nexport function validateHierarchicalData<TData extends HierarchicalDataRow>(\n data: TData[]\n): { isValid: boolean; errors: string[] } {\n const errors: string[] = [];\n \n // Check that all rows have required fields\n data.forEach((row, index) => {\n if (!row.id) {\n errors.push(`Row ${index}: Missing required 'id' field`);\n }\n \n if (typeof row.isParent !== 'boolean') {\n errors.push(`Row ${index}: Missing or invalid 'isParent' field`);\n }\n \n if (!row.isParent && !row.parentId) {\n errors.push(`Row ${index}: Child row missing 'parentId' field`);\n }\n });\n\n // Check for orphaned child rows\n const parentIds = new Set(data.filter(row => row.isParent).map(row => row.id));\n data.forEach((row, index) => {\n if (!row.isParent && row.parentId && !parentIds.has(row.parentId)) {\n errors.push(`Row ${index}: Child row references non-existent parent '${row.parentId}'`);\n }\n });\n\n // Check for duplicate IDs\n const ids = data.map(row => row.id);\n const duplicateIds = ids.filter((id, index) => ids.indexOf(id) !== index);\n if (duplicateIds.length > 0) {\n errors.push(`Duplicate IDs found: ${duplicateIds.join(', ')}`);\n }\n\n return {\n isValid: errors.length === 0,\n errors,\n };\n}\n\n/**\n * Sorts hierarchical data to ensure parent rows come before their children\n */\nexport function sortHierarchicalData<TData extends HierarchicalDataRow>(\n data: TData[]\n): TData[] {\n const sorted: TData[] = [];\n const processed = new Set<string>();\n \n // First, add all parent rows\n data.forEach(row => {\n if (row.isParent && !processed.has(row.id)) {\n sorted.push(row);\n processed.add(row.id);\n }\n });\n \n // Then, add children in order\n data.forEach(row => {\n if (!row.isParent && !processed.has(row.id)) {\n sorted.push(row);\n processed.add(row.id);\n }\n });\n \n return sorted;\n}\n\n/**\n * Groups data into parent-child relationships\n */\nexport function groupHierarchicalData<TData extends HierarchicalDataRow>(\n data: TData[]\n): Map<string, { parent: TData; children: TData[] }> {\n const groups = new Map<string, { parent: TData; children: TData[] }>();\n \n // Initialize groups for parent rows\n data.forEach(row => {\n if (row.isParent) {\n groups.set(row.id, { parent: row, children: [] });\n }\n });\n \n // Add children to their parent groups\n data.forEach(row => {\n if (!row.isParent && row.parentId) {\n const group = groups.get(row.parentId);\n if (group) {\n group.children.push(row);\n }\n }\n });\n \n return groups;\n}\n\n/**\n * Gets the depth level of a row in the hierarchy\n */\nexport function getRowDepth<TData extends HierarchicalDataRow>(\n row: TData,\n allData: TData[]\n): number {\n if (row.isParent) {\n return 0;\n }\n \n if (!row.parentId) {\n return 0;\n }\n \n // Find parent and calculate depth\n const parent = allData.find(p => p.id === row.parentId);\n if (!parent) {\n return 0;\n }\n \n return 1 + getRowDepth(parent, allData);\n}\n\n/**\n * Determines if a column should be visible for a given row type\n */\nexport function shouldShowColumnForRow<TData extends HierarchicalDataRow>(\n column: DataTableColumn<TData>,\n isParent: boolean\n): boolean {\n if (isParent && column.hideForParent) {\n return false;\n }\n \n if (!isParent && column.hideForChild) {\n return false;\n }\n \n return true;\n}\n\n/**\n * Gets the appropriate cell renderer for a row type\n */\nexport function getCellRenderer<TData extends HierarchicalDataRow>(\n column: DataTableColumn<TData>,\n row: TData\n): ((row: TData) => React.ReactNode) | undefined {\n if (row.isParent && column.renderForParent) {\n return column.renderForParent;\n }\n \n if (!row.isParent && column.renderForChild) {\n return column.renderForChild;\n }\n \n return column.cell as ((row: TData) => React.ReactNode) | undefined;\n}\n\n/**\n * Calculates the indentation for a child row\n */\nexport function calculateIndentation<TData extends HierarchicalDataRow>(\n row: TData,\n allData: TData[],\n baseIndent: number = 24\n): number {\n const depth = getRowDepth(row, allData);\n return depth * baseIndent;\n}\n\n/**\n * Creates a hierarchical data structure from flat data\n */\nexport function createHierarchicalStructure<TData extends DataRecord>(\n data: TData[],\n parentKey: keyof TData,\n childrenKey: keyof TData,\n idKey: keyof TData = 'id' as keyof TData\n): HierarchicalDataRow[] {\n const result: HierarchicalDataRow[] = [];\n \n data.forEach(item => {\n // Add parent row\n const parentRow: HierarchicalDataRow = {\n ...item,\n id: String(item[idKey]),\n isParent: true,\n };\n result.push(parentRow);\n \n // Add child rows\n const children = item[childrenKey] as TData[] | undefined;\n if (children && Array.isArray(children)) {\n children.forEach(child => {\n const childRow: HierarchicalDataRow = {\n ...child,\n id: `${String(item[idKey])}-${String(child[idKey])}`,\n isParent: false,\n parentId: String(item[idKey]),\n };\n result.push(childRow);\n });\n }\n });\n \n return result;\n}\n","import React from 'react';\nimport { Table } from '@tanstack/react-table';\nimport { Button } from '../../Button/Button';\nimport {\n ChevronLeft,\n ChevronRight,\n ChevronsLeft,\n ChevronsRight,\n Loader2,\n Server,\n Database,\n Zap\n} from 'lucide-react';\nimport { cn } from '../../../utils/cn';\nimport { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from '../../Select/Select';\nimport type { PaginationMode, ServerSideResponse, DataRecord } from '../types';\n\ninterface PaginationControlsProps<TData extends DataRecord> {\n table: Table<TData>;\n pageSizeOptions?: number[];\n paginationMode?: PaginationMode;\n serverData?: ServerSideResponse<TData> | null;\n isLoading?: boolean;\n onPageChange?: (pageIndex: number) => void;\n onPageSizeChange?: (pageSize: number) => void;\n showPerformanceInfo?: boolean;\n totalCount?: number;\n}\n\nexport function PaginationControls<TData extends DataRecord>({\n table,\n pageSizeOptions = [10, 20, 30, 40, 50],\n paginationMode = 'client',\n serverData,\n isLoading = false,\n onPageChange,\n onPageSizeChange,\n showPerformanceInfo = false,\n totalCount\n}: PaginationControlsProps<TData>) {\n\n // Get pagination state based on mode\n const getPaginationState = () => {\n if (paginationMode === 'server' && serverData) {\n return {\n currentPageSize: serverData.pageSize,\n currentPageIndex: serverData.pageIndex,\n pageCount: serverData.pageCount,\n totalRows: serverData.totalCount,\n canPreviousPage: serverData.hasPreviousPage,\n canNextPage: serverData.hasNextPage,\n };\n }\n\n // Client or hybrid mode\n const state = table.getState().pagination;\n return {\n currentPageSize: state.pageSize,\n currentPageIndex: state.pageIndex,\n pageCount: table.getPageCount(),\n totalRows: totalCount ?? table.getRowCount(),\n canPreviousPage: table.getCanPreviousPage(),\n canNextPage: table.getCanNextPage(),\n };\n };\n\n const {\n currentPageSize,\n currentPageIndex,\n pageCount,\n totalRows,\n canPreviousPage,\n canNextPage,\n } = getPaginationState();\n\n // Handle page size changes\n const handlePageSizeChange = (newPageSize: number) => {\n if (paginationMode === 'server') {\n onPageSizeChange?.(newPageSize);\n } else {\n table.setPageSize(newPageSize);\n }\n };\n\n // Handle page navigation\n const handleFirstPage = () => {\n if (paginationMode === 'server') {\n onPageChange?.(0);\n } else {\n table.setPageIndex(0);\n }\n };\n\n const handlePreviousPage = () => {\n if (paginationMode === 'server') {\n onPageChange?.(Math.max(0, currentPageIndex - 1));\n } else {\n table.previousPage();\n }\n };\n\n const handleNextPage = () => {\n if (paginationMode === 'server') {\n onPageChange?.(Math.min(pageCount - 1, currentPageIndex + 1));\n } else {\n table.nextPage();\n }\n };\n\n const handleLastPage = () => {\n if (paginationMode === 'server') {\n onPageChange?.(pageCount - 1);\n } else {\n table.setPageIndex(pageCount - 1);\n }\n };\n\n // Calculate display range\n const startRow = currentPageIndex * currentPageSize + 1;\n const endRow = Math.min((currentPageIndex + 1) * currentPageSize, totalRows);\n\n // Get mode-specific page size options\n const getPageSizeOptions = () => {\n switch (paginationMode) {\n case 'server':\n return pageSizeOptions.filter(size => size <= 250); // Limit server-side page sizes\n case 'hybrid':\n return pageSizeOptions.filter(size => size >= 50); // Hybrid mode prefers larger pages\n default:\n return pageSizeOptions;\n }\n };\n\n const availablePageSizes = getPageSizeOptions();\n\n // Performance mode indicator\n const getModeIcon = () => {\n switch (paginationMode) {\n case 'server':\n return <Server className=\"h-3 w-3\" />;\n case 'hybrid':\n return <Database className=\"h-3 w-3\" />;\n default:\n return <Zap className=\"h-3 w-3\" />;\n }\n };\n\n const getModeLabel = () => {\n switch (paginationMode) {\n case 'server':\n return 'Server-side';\n case 'hybrid':\n return 'Hybrid';\n default:\n return 'Client-side';\n }\n };\n\n\n return (\n <footer\n aria-label=\"pagination\"\n className=\"mx-auto grid grid-cols-[auto_auto_1fr_auto_auto_auto_auto] gap-4\"\n >\n {/* Left side - Page Size Selector */}\n \n <p className=\"text-sm text-sec-600\">Rows per page</p>\n <Select\n value={currentPageSize?.toString() || '10'}\n selectedText={currentPageSize?.toString() || '10'}\n onValueChange={(value) => handlePageSizeChange(Number(value))}\n disabled={isLoading}\n className=\"w-36 h-8\"\n >\n <SelectTrigger\n className={cn(\n \n isLoading && \"opacity-50 cursor-not-allowed\"\n )}\n aria-label=\"Rows per page\"\n >\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n {pageSizeOptions.map((pageSize) => (\n <SelectItem key={pageSize} value={pageSize?.toString() || '10'}>\n {pageSize}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n\n\n {/* Performance Mode Indicator */}\n {showPerformanceInfo && (\n <>\n {getModeIcon()}\n <span>{getModeLabel()}</span>\n </>\n )}\n\n\n {/* Row Count Display - Removed as per user request, keeping only \"Page X of Y\" */}\n\n\n {/* Center - Page Navigation */}\n\n <p className=\"justify-self-center text-sm text-sec-600\">\n Page {currentPageIndex + 1} of {pageCount || 1}\n </p>\n\n\n {/* Right side - Navigation Buttons */}\n\n\n <Button\n variant=\"outline\"\n size=\"sm\"\n className=\"h-8 w-8 p-0\"\n onClick={handleFirstPage}\n disabled={!canPreviousPage || isLoading}\n aria-label=\"Go to first page\"\n tabIndex={0}\n >\n <ChevronsLeft className=\"h-4 w-4\" />\n </Button>\n\n <Button\n variant=\"outline\"\n size=\"sm\"\n className=\"h-8 w-8 p-0\"\n onClick={handlePreviousPage}\n disabled={!canPreviousPage || isLoading}\n aria-label=\"Go to previous page\"\n tabIndex={0}\n >\n <ChevronLeft className=\"h-4 w-4\" />\n </Button>\n\n <Button\n variant=\"outline\"\n size=\"sm\"\n className=\"h-8 w-8 p-0\"\n onClick={handleNextPage}\n disabled={!canNextPage || isLoading}\n aria-label=\"Go to next page\"\n tabIndex={0}\n >\n <ChevronRight className=\"h-4 w-4\" />\n </Button>\n\n <Button\n variant=\"outline\"\n size=\"sm\"\n className=\"h-8 w-8 p-0\"\n onClick={handleLastPage}\n disabled={!canNextPage || isLoading}\n aria-label=\"Go to last page\"\n tabIndex={0}\n >\n <ChevronsRight className=\"h-4 w-4\" />\n </Button>\n </footer>\n );\n}\n\n/**\n * Enhanced pagination controls with additional features\n * Provides jump-to-page functionality for improved navigation\n */\ninterface EnhancedPaginationControlsProps<TData extends DataRecord>\n extends PaginationControlsProps<TData> {\n showJumpToPage?: boolean;\n}\n\nexport function EnhancedPaginationControls<TData extends DataRecord>({\n showJumpToPage = false,\n ...props\n}: EnhancedPaginationControlsProps<TData>) {\n const [jumpToPage, setJumpToPage] = React.useState('');\n\n const { table, paginationMode = 'client', serverData, onPageChange } = props;\n\n const { pageCount } = (() => {\n if (paginationMode === 'server' && serverData) {\n return { pageCount: serverData.pageCount };\n }\n return { pageCount: table.getPageCount() };\n })();\n\n const handleJumpToPage = (e: React.FormEvent) => {\n e.preventDefault();\n const pageNumber = parseInt(jumpToPage, 10);\n if (pageNumber >= 1 && pageNumber <= pageCount) {\n const pageIndex = pageNumber - 1;\n if (paginationMode === 'server') {\n onPageChange?.(pageIndex);\n } else {\n table.setPageIndex(pageIndex);\n }\n setJumpToPage('');\n }\n };\n\n return (\n <>\n <PaginationControls {...props} />\n\n {/* Additional Controls */}\n {showJumpToPage && (\n <>\n {/* Jump to Page */}\n <form onSubmit={handleJumpToPage} className=\"flex items-center space-x-2\">\n <span>Jump to page:</span>\n <input\n type=\"number\"\n min=\"1\"\n max={pageCount}\n value={jumpToPage}\n onChange={(e) => setJumpToPage(e.target.value)}\n className=\"w-16 h-6 px-2 border rounded text-xs\"\n placeholder=\"1\"\n />\n <Button type=\"submit\" size=\"sm\" variant=\"outline\" className=\"h-6 px-2 text-xs\">\n Go\n </Button>\n </form>\n </>\n )}\n </>\n );\n}\n","import React from 'react';\n\nexport function LoadingState() {\n return (\n <div className=\"p-8 text-center\">\n <div className=\"flex items-center justify-center space-x-2\">\n <div className=\"animate-spin rounded-full h-6 w-6 border-b-2 border-primary\"></div>\n <span aria-live=\"polite\" className=\"text-muted-foreground\">Loading...</span>\n </div>\n </div>\n );\n}\n","/**\n * @file Import Modal Component\n * @package @jmruthers/pace-core\n * @module Components/DataTable/Components\n * @since 0.2.0\n * \n * A modal dialog for importing CSV data into the DataTable component.\n * Provides file selection, data preview, and validation functionality.\n * \n * @example\n * ```tsx\n * <ImportModal\n * isOpen={showModal}\n * onClose={() => setShowModal(false)}\n * onImport={(data) => handleImportedData(data)}\n * title=\"Import Users\"\n * description=\"Upload a CSV file containing user data to import multiple users at once.\"\n * uploadText=\"Choose a user CSV file to upload\"\n * selectFileButtonText=\"Select User File\"\n * />\n * ```\n * \n * @accessibility\n * - Uses pace-core Dialog component with full accessibility support\n * - Proper ARIA labels and descriptions\n * - Keyboard navigation support\n * - Screen reader compatible file input\n * - Error messages are announced to screen readers\n * \n * @features\n * - CSV file validation and parsing\n * - Data preview (first 5 rows)\n * - Total row count display\n * - Error handling and user feedback\n * - Processing state management\n * - Customizable text content\n */\nimport React, { useState, useRef, useEffect } from 'react';\nimport { Dialog, DialogContent, DialogDescription, DialogHeader, DialogTitle } from '../../Dialog';\nimport { Button } from '../../Button/Button';\nimport { Input } from '../../Input/Input';\nimport { Upload, FileText, AlertCircle } from 'lucide-react';\n\n/**\n * Configuration interface for customizing ImportModal text content\n * @public\n */\nexport interface ImportModalConfig {\n /** Custom title for the import modal */\n title?: string;\n /** Custom description text shown below the title */\n description?: string;\n /** Custom text shown in the file upload area when no file is selected */\n uploadText?: string;\n /** Custom text for the file selection button */\n selectFileButtonText?: string;\n /** Custom text for the import button */\n importButtonText?: string;\n /** Custom text for the import button when processing */\n importButtonProcessingText?: string;\n /** Custom text for the cancel button */\n cancelButtonText?: string;\n /** Custom text for the preview section header */\n previewHeaderText?: string;\n /** Custom text pattern for total rows display. Use {count} as placeholder for the actual count */\n totalRowsText?: string;\n}\n\n/**\n * Props interface for the ImportModal component\n * @public\n */\ninterface ImportModalProps {\n /** Whether the modal is open */\n isOpen: boolean;\n /** Callback function when the modal is closed */\n onClose: () => void;\n /** Callback function when data is imported successfully */\n onImport: (data: any[]) => void | Promise<void>;\n /** Configuration object for customizing modal text content */\n config?: ImportModalConfig;\n}\n\n/**\n * ImportModal component for handling CSV data import\n * \n * @param props - The component props\n * @returns JSX.Element - The import modal dialog\n * \n * @example\n * ```tsx\n * const importConfig = {\n * title: \"Import Customer Data\",\n * description: \"Upload a CSV file with customer information to import multiple records.\",\n * uploadText: \"Choose a customer CSV file\",\n * selectFileButtonText: \"Browse Files\",\n * importButtonText: \"Import Customers\",\n * totalRowsText: \"Found {count} customer records to import\"\n * };\n * \n * <ImportModal\n * isOpen={isImportModalOpen}\n * onClose={() => setIsImportModalOpen(false)}\n * onImport={handleDataImport}\n * config={importConfig}\n * />\n * ```\n */\nexport function ImportModal({ isOpen, onClose, onImport, config = {} }: ImportModalProps) {\n const [file, setFile] = useState<File | null>(null);\n const [isProcessing, setIsProcessing] = useState(false);\n const [error, setError] = useState<string | null>(null);\n const [previewData, setPreviewData] = useState<any[] | null>(null);\n const [totalCount, setTotalCount] = useState<number>(0);\n const fileInputRef = useRef<HTMLInputElement>(null);\n const isMountedRef = useRef(true);\n\n // Cleanup effect to prevent state updates after unmount\n useEffect(() => {\n return () => {\n isMountedRef.current = false;\n };\n }, []);\n\n // Extract config with defaults\n const {\n title = 'Import Data',\n description = 'Upload a CSV file to import multiple records at once.',\n uploadText = 'Choose a CSV file to upload',\n selectFileButtonText = 'Select File',\n importButtonText = 'Import',\n importButtonProcessingText = 'Processing...',\n cancelButtonText = 'Cancel',\n previewHeaderText = 'Preview (first 5 rows)',\n totalRowsText = 'Total rows to import: {count}'\n } = config;\n\n const handleFileSelect = async (event: React.ChangeEvent<HTMLInputElement>) => {\n const selectedFile = event.target.files?.[0];\n console.log('📁 File selected:', selectedFile?.name);\n if (selectedFile) {\n setFile(selectedFile);\n setError(null);\n \n // Generate preview\n try {\n const text = await selectedFile.text();\n console.log('📄 File content length:', text.length);\n const data = processCSV(text);\n console.log('📊 Parsed CSV data:', data.length, 'rows');\n console.log('👀 Setting preview data:', data.slice(0, 5));\n setPreviewData(data.slice(0, 5)); // Show first 5 rows as preview\n setTotalCount(data.length); // Store total count\n console.log('👀 Preview data state should be updated');\n } catch (err) {\n console.error('❌ CSV parsing error:', err);\n setError(err instanceof Error ? err.message : 'Failed to preview file');\n setPreviewData(null);\n setTotalCount(0);\n }\n }\n };\n\n const processCSV = (csvText: string): any[] => {\n console.log('📄 Raw CSV text:', csvText.substring(0, 200) + '...');\n \n const lines = csvText.split('\\n').filter(line => line.trim());\n console.log('📄 CSV lines count:', lines.length);\n console.log('📄 First few lines:', lines.slice(0, 3));\n \n if (lines.length < 2) {\n throw new Error('CSV must have at least a header row and one data row');\n }\n\n // Better CSV parsing that handles quotes and commas within values\n const parseCSVLine = (line: string): string[] => {\n const result: string[] = [];\n let current = '';\n let inQuotes = false;\n \n for (let i = 0; i < line.length; i++) {\n const char = line[i];\n \n if (char === '\"') {\n inQuotes = !inQuotes;\n } else if (char === ',' && !inQuotes) {\n result.push(current.trim());\n current = '';\n } else {\n current += char;\n }\n }\n result.push(current.trim());\n return result;\n };\n\n const headers = parseCSVLine(lines[0]).map(h => h.replace(/\"/g, '').trim());\n console.log('📄 Parsed headers:', headers);\n \n const data = lines.slice(1).map((line, index) => {\n const values = parseCSVLine(line).map(v => v.replace(/\"/g, '').trim());\n const row: any = {};\n headers.forEach((header, colIndex) => {\n row[header] = values[colIndex] || '';\n });\n console.log(`📄 Row ${index + 1}:`, row);\n return row;\n });\n\n console.log('📄 Final parsed data:', data);\n return data;\n };\n\n const handleImport = async () => {\n if (!file) return;\n\n setIsProcessing(true);\n setError(null);\n\n try {\n const text = await file.text();\n const data = processCSV(text);\n \n // Await the onImport callback in case it returns a promise\n const result = onImport(data);\n if (result && typeof result.then === 'function') {\n await result;\n }\n \n onClose();\n setFile(null);\n } catch (err) {\n setError(err instanceof Error ? err.message : 'Failed to process file');\n } finally {\n if (isMountedRef.current) {\n setIsProcessing(false);\n }\n }\n };\n\n const handleClose = () => {\n setFile(null);\n setError(null);\n setPreviewData(null);\n setTotalCount(0);\n onClose();\n };\n\n return (\n <Dialog open={isOpen} onOpenChange={handleClose}>\n <DialogContent className=\"sm:max-w-2xl bg-main-50\">\n <DialogHeader>\n <DialogTitle>{title}</DialogTitle>\n <DialogDescription>\n {description}\n </DialogDescription>\n </DialogHeader>\n\n <div className=\"space-y-4\">\n <div className=\"border-2 border-dashed border-sec-200 rounded-lg p-6 text-center\">\n <FileText className=\"h-8 w-8 mx-auto text-sec-400 mb-2\" />\n <p className=\"text-sec-600 mb-2\">\n {file ? `Selected: ${file.name}` : uploadText}\n </p>\n {file && (\n <p className=\"text-xs text-sec-500\">\n File selected, processing preview...\n </p>\n )}\n <Button\n variant=\"outline\"\n size=\"sm\"\n onClick={() => fileInputRef.current?.click()}\n >\n <Upload className=\"h-4 w-4 mr-2\" />\n {selectFileButtonText}\n </Button>\n <Input\n ref={fileInputRef}\n type=\"file\"\n accept=\".csv\"\n onChange={handleFileSelect}\n className=\"hidden\"\n />\n </div>\n\n {error && (\n <div className=\"flex items-center gap-2 p-3 bg-acc-50 border border-acc-200 rounded text-acc-700\">\n <AlertCircle className=\"h-4 w-4\" />\n <span className=\"text-sm\">{error}</span>\n </div>\n )}\n\n\n {previewData && previewData.length > 0 && (\n <div className=\"space-y-3\">\n <h4 className=\"text-sec-900\">{previewHeaderText}</h4>\n <div className=\"border rounded-lg overflow-hidden\">\n <div className=\"overflow-x-auto max-h-48\">\n <table className=\"min-w-full text-xs\">\n <thead className=\"bg-sec-50\">\n <tr>\n {Object.keys(previewData[0]).map((header) => (\n <th key={header} className=\"px-2 py-1 text-left font-medium text-sec-900 border-b\">\n {header}\n </th>\n ))}\n </tr>\n </thead>\n <tbody>\n {previewData.map((row, index) => (\n <tr key={index} className={index % 2 === 0 ? 'bg-app-main-50' : 'bg-sec-50'}>\n {Object.values(row).map((value: any, cellIndex) => (\n <td key={cellIndex} className=\"px-2 py-1 text-sec-700 border-b\">\n {String(value)}\n </td>\n ))}\n </tr>\n ))}\n </tbody>\n </table>\n </div>\n </div>\n <p className=\"text-sec-500\">\n {totalRowsText.replace('{count}', totalCount.toString())}\n </p>\n </div>\n )}\n\n <div className=\"flex justify-end gap-2\">\n <Button variant=\"outline\" onClick={handleClose}>\n {cancelButtonText}\n </Button>\n <Button \n onClick={handleImport} \n disabled={!file || isProcessing}\n >\n {isProcessing ? importButtonProcessingText : importButtonText}\n </Button>\n </div>\n </div>\n </DialogContent>\n </Dialog>\n );\n}\n","/**\n * @file DataTable Modals Component\n * @package @jmruthers/pace-core\n * @module Components/DataTable/Components\n * @since 0.2.0\n * \n * Container component for all modal dialogs used by the DataTable component.\n * This includes import modals and other data table related dialogs.\n * \n * @example\n * ```tsx\n * <DataTableModals\n * showImportModal={isImportOpen}\n * onCloseImportModal={() => setIsImportOpen(false)}\n * onImport={handleImportData}\n * importModalConfig={{\n * title: \"Import Users\",\n * description: \"Upload a CSV file with user data.\"\n * }}\n * />\n * ```\n */\n\nimport React from 'react';\nimport { ImportModal, type ImportModalConfig } from './ImportModal';\n\n/**\n * Props interface for the DataTableModals component\n * @public\n */\nexport interface DataTableModalsProps {\n // Import modal\n /** Whether the import modal is visible */\n showImportModal: boolean;\n /** Callback function when the import modal is closed */\n onCloseImportModal: () => void;\n /** Callback function when data is imported successfully */\n onImport: (data: any[]) => void | Promise<void>;\n /** Configuration object for customizing import modal text content */\n importModalConfig?: ImportModalConfig;\n \n}\n\n/**\n * DataTableModals component that renders all modal dialogs for the DataTable\n * \n * @param props - The component props\n * @returns JSX.Element - Container with all data table modal dialogs\n * \n * @example\n * ```tsx\n * const importConfig = {\n * title: \"Import Customer Data\",\n * description: \"Upload a CSV file with customer information to import multiple records.\",\n * uploadText: \"Choose a customer CSV file\",\n * selectFileButtonText: \"Browse Files\"\n * };\n * \n * <DataTableModals\n * showImportModal={showImport}\n * onCloseImportModal={() => setShowImport(false)}\n * onImport={handleImportedData}\n * importModalConfig={importConfig}\n * isViewModalOpen={showView}\n * onCloseViewModal={() => setShowView(false)}\n * viewModalData={selectedRow}\n * />\n * ```\n */\nexport function DataTableModals({\n showImportModal,\n onCloseImportModal,\n onImport,\n importModalConfig,\n}: DataTableModalsProps) {\n return (\n <>\n <ImportModal\n isOpen={showImportModal}\n onClose={onCloseImportModal}\n onImport={onImport}\n config={importModalConfig}\n />\n\n </>\n );\n}\n","/**\n * @file DataTable Error Boundary\n * @package @jmruthers/pace-core\n * @module Components/DataTable/Components\n * @since 0.4.0\n * \n * Error boundary component for DataTable with fallback UI and error recovery.\n */\n\nimport React, { Component, ErrorInfo, ReactNode } from 'react';\nimport { Alert, AlertDescription, AlertTitle } from '../../Alert/Alert';\nimport { Button } from '../../Button/Button';\n// Icons removed to avoid test mocking issues\n\n// ============================================================================\n// ERROR BOUNDARY STATE\n// ============================================================================\n\ninterface ErrorBoundaryState {\n hasError: boolean;\n error: Error | null;\n errorInfo: ErrorInfo | null;\n retryCount: number;\n}\n\n// ============================================================================\n// ERROR BOUNDARY PROPS\n// ============================================================================\n\ninterface DataTableErrorBoundaryProps {\n children: ReactNode;\n fallback?: ReactNode;\n onError?: (error: Error, errorInfo: ErrorInfo) => void;\n onRetry?: () => void;\n maxRetries?: number;\n showRetryButton?: boolean;\n showErrorDetails?: boolean;\n}\n\n// ============================================================================\n// ERROR BOUNDARY COMPONENT\n// ============================================================================\n\nexport class DataTableErrorBoundary extends Component<\n DataTableErrorBoundaryProps,\n ErrorBoundaryState\n> {\n private retryTimeoutId: NodeJS.Timeout | null = null;\n\n constructor(props: DataTableErrorBoundaryProps) {\n super(props);\n this.state = {\n hasError: false,\n error: null,\n errorInfo: null,\n retryCount: 0\n };\n }\n\n static getDerivedStateFromError(error: Error): Partial<ErrorBoundaryState> {\n return {\n hasError: true,\n error\n };\n }\n\n componentDidCatch(error: Error, errorInfo: ErrorInfo) {\n this.setState({\n error,\n errorInfo\n });\n\n // Call error handler if provided\n this.props.onError?.(error, errorInfo);\n\n // Log error for debugging\n console.error('DataTable Error Boundary caught an error:', error, errorInfo);\n }\n\n componentWillUnmount() {\n if (this.retryTimeoutId) {\n clearTimeout(this.retryTimeoutId);\n }\n }\n\n handleRetry = () => {\n const { onRetry, maxRetries = 3 } = this.props;\n const { retryCount } = this.state;\n\n if (retryCount >= maxRetries) {\n console.warn('DataTable Error Boundary: Maximum retry attempts reached');\n return;\n }\n\n // Call custom retry handler if provided\n if (onRetry) {\n onRetry();\n }\n\n // Reset error state after a short delay\n this.retryTimeoutId = setTimeout(() => {\n this.setState({\n hasError: false,\n error: null,\n errorInfo: null,\n retryCount: retryCount + 1\n });\n }, 100);\n };\n\n handleReset = () => {\n this.setState({\n hasError: false,\n error: null,\n errorInfo: null,\n retryCount: 0\n });\n };\n\n render() {\n const { \n children, \n fallback, \n showRetryButton = true, \n showErrorDetails = false,\n maxRetries = 3\n } = this.props;\n const { hasError, error, retryCount } = this.state;\n\n if (hasError) {\n // Use custom fallback if provided\n if (fallback) {\n return fallback;\n }\n\n // Default error UI\n return (\n <div className=\"flex items-center justify-center p-8\">\n <Alert variant=\"destructive\" className=\"max-w-md\">\n <AlertTitle>DataTable Error</AlertTitle>\n <AlertDescription className=\"mt-2\">\n <span>Something went wrong</span>\n </AlertDescription>\n {error && error.message ? (\n <details className=\"mt-2\">\n <summary className=\"cursor-pointer text-sm font-medium\">\n Error Details\n </summary>\n <pre className=\"mt-2 text-xs overflow-auto max-h-32\">\n {error.message}\n {showErrorDetails && error.stack && (\n <>\n {'\\n\\nStack Trace:\\n'}\n {error.stack}\n </>\n )}\n </pre>\n </details>\n ) : (\n <div className=\"mt-2\">\n <span>An unexpected error occurred</span>\n </div>\n )}\n <div className=\"mt-4 flex gap-2\">\n {showRetryButton && retryCount < maxRetries && (\n <Button\n variant=\"outline\"\n size=\"sm\"\n onClick={this.handleRetry}\n className=\"flex items-center gap-2\"\n >\n Retry ({retryCount + 1}/{maxRetries})\n </Button>\n )}\n <Button\n variant=\"outline\"\n size=\"sm\"\n onClick={this.handleReset}\n >\n Reset\n </Button>\n </div>\n </Alert>\n </div>\n );\n }\n\n return children;\n }\n}\n\n// ============================================================================\n// HOOK FOR ERROR BOUNDARY\n// ============================================================================\n\nexport function useDataTableErrorBoundary() {\n const [error, setError] = React.useState<Error | null>(null);\n\n const resetError = React.useCallback(() => {\n setError(null);\n }, []);\n\n const captureError = React.useCallback((error: Error) => {\n setError(error);\n }, []);\n\n React.useEffect(() => {\n if (error) {\n throw error;\n }\n }, [error]);\n\n return { captureError, resetError };\n}","/**\n * @file Alert Component Suite\n * @package @jmruthers/pace-core\n * @module Components\n * @since 0.1.0\n *\n * A flexible and accessible alert component for displaying important messages.\n * Includes Alert, AlertTitle, and AlertDescription subcomponents.\n *\n * Features:\n * - Multiple visual variants (default, destructive, inline)\n * - Title and description support\n * - ARIA role=\"alert\" for accessibility\n * - Keyboard and screen reader accessible\n * - Composable with icons and actions\n * - Inline variant for lightweight text formatting\n *\n * @example\n * ```tsx\n * // Basic alert\n * <Alert>\n * <AlertTitle>Success</AlertTitle>\n * <AlertDescription>Your changes have been saved.</AlertDescription>\n * </Alert>\n *\n * // Destructive alert with icon\n * <Alert variant=\"destructive\">\n * <ErrorIcon />\n * <div>\n * <AlertTitle>Error</AlertTitle>\n * <AlertDescription>Something went wrong.</AlertDescription>\n * </div>\n * </Alert>\n *\n * // Inline alert (renders as fragment with strong/span)\n * <Alert variant=\"inline\">\n * <AlertTitle>Note:</AlertTitle>\n * <AlertDescription>This is an inline message.</AlertDescription>\n * </Alert>\n * ```\n *\n * @accessibility\n * - Uses role=\"alert\" for screen reader announcement\n * - Title and description are semantically structured\n * - Supports keyboard navigation and focus\n */\n\nimport * as React from \"react\"\n\nimport { cn } from \"../../utils/cn\"\n\n// Context to share variant with child components\nconst AlertContext = React.createContext<{ variant?: \"default\" | \"destructive\" | \"inline\" | null }>({ variant: \"default\" })\n\nconst getAlertClasses = (variant: \"default\" | \"destructive\" | \"inline\" = \"default\"): string => {\n const baseClasses = \"relative w-full rounded-lg border p-4\";\n \n const variantClasses = {\n default: \"bg-background text-foreground\",\n destructive: \"border-destructive text-destructive\",\n inline: \"\", // No classes for inline variant as it renders as fragment\n };\n \n return `${baseClasses} ${variantClasses[variant]}`;\n};\n\nconst Alert = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement> & { variant?: \"default\" | \"destructive\" | \"inline\" }\n>(({ className, variant = \"default\", ...props }, ref) => {\n const contextValue = React.useMemo(() => ({ variant }), [variant])\n \n if (variant === \"inline\") {\n return (\n <AlertContext.Provider value={contextValue}>\n <React.Fragment {...props} />\n </AlertContext.Provider>\n )\n }\n \n return (\n <AlertContext.Provider value={contextValue}>\n <div\n ref={ref}\n className={cn(getAlertClasses(variant), className)}\n role=\"alert\"\n {...props}\n />\n </AlertContext.Provider>\n )\n})\nAlert.displayName = \"Alert\"\n\nconst AlertTitle = React.forwardRef<\n HTMLParagraphElement,\n React.HTMLAttributes<HTMLHeadingElement>\n>(({ className, ...props }, ref) => {\n const { variant } = React.useContext(AlertContext)\n \n if (variant === \"inline\") {\n return <strong {...props} />\n }\n \n return (\n <h5\n ref={ref}\n className={cn(\"\", className)}\n {...props}\n />\n )\n})\nAlertTitle.displayName = \"AlertTitle\"\n\nconst AlertDescription = React.forwardRef<\n HTMLParagraphElement,\n React.HTMLAttributes<HTMLParagraphElement>\n>(({ className, ...props }, ref) => {\n const { variant } = React.useContext(AlertContext)\n \n if (variant === \"inline\") {\n return <span {...props} />\n }\n \n return (\n <p\n ref={ref}\n className={cn(\"\", className)}\n {...props}\n />\n )\n})\nAlertDescription.displayName = \"AlertDescription\"\n\nexport { Alert, AlertTitle, AlertDescription }\n","import { useState, useEffect, useCallback } from 'react';\n\ninterface UseColumnOrderPersistenceProps {\n tableId?: string;\n defaultOrder?: string[];\n enablePersistence?: boolean;\n}\n\nexport function useColumnOrderPersistence({\n tableId,\n defaultOrder = [],\n enablePersistence = false,\n}: UseColumnOrderPersistenceProps) {\n const [columnOrder, setColumnOrder] = useState<string[]>(defaultOrder);\n const [isLoaded, setIsLoaded] = useState(false);\n\n // Generate a unique key for this table\n const storageKey = tableId ? `datatable-column-order-${tableId}` : 'datatable-column-order';\n\n // Load column order from localStorage on mount\n useEffect(() => {\n if (!enablePersistence || !tableId) {\n setIsLoaded(true);\n return;\n }\n\n try {\n const savedOrder = localStorage.getItem(storageKey);\n if (savedOrder) {\n const parsedOrder = JSON.parse(savedOrder);\n if (Array.isArray(parsedOrder)) {\n setColumnOrder(parsedOrder);\n }\n }\n } catch (error) {\n console.warn('Failed to load column order from localStorage:', error);\n } finally {\n setIsLoaded(true);\n }\n }, [enablePersistence, tableId, storageKey]);\n\n // Save column order to localStorage\n const saveColumnOrder = useCallback((newOrder: string[]) => {\n if (!enablePersistence || !tableId) return;\n\n try {\n localStorage.setItem(storageKey, JSON.stringify(newOrder));\n } catch (error) {\n console.warn('Failed to save column order to localStorage:', error);\n }\n }, [enablePersistence, tableId, storageKey]);\n\n // Update column order and save to localStorage\n const updateColumnOrder = useCallback((newOrder: string[]) => {\n setColumnOrder(newOrder);\n saveColumnOrder(newOrder);\n }, [saveColumnOrder]);\n\n // Reset to default order\n const resetColumnOrder = useCallback(() => {\n setColumnOrder(defaultOrder);\n if (enablePersistence && tableId) {\n try {\n localStorage.removeItem(storageKey);\n } catch (error) {\n console.warn('Failed to remove column order from localStorage:', error);\n }\n }\n }, [defaultOrder, enablePersistence, tableId, storageKey]);\n\n // Clear all saved preferences\n const clearAllPreferences = useCallback(() => {\n if (!enablePersistence) return;\n\n try {\n // Remove all datatable preferences\n const keys = Object.keys(localStorage);\n keys.forEach(key => {\n if (key.startsWith('datatable-')) {\n localStorage.removeItem(key);\n }\n });\n } catch (error) {\n console.warn('Failed to clear datatable preferences:', error);\n }\n }, [enablePersistence]);\n\n return {\n columnOrder,\n isLoaded,\n updateColumnOrder,\n resetColumnOrder,\n clearAllPreferences,\n };\n}\n","/**\n * @file Hierarchical State Management Hook\n * @package @jmruthers/pace-core\n * @module Components/DataTable/Hooks/useHierarchicalState\n * @since 0.4.35\n */\n\nimport { useState, useCallback, useMemo, useEffect } from 'react';\nimport type { HierarchicalDataRow, HierarchicalConfig } from '../types';\n\n/**\n * Hook for managing hierarchical expand/collapse state\n * \n * Provides state management for hierarchical rows with support for:\n * - Individual row expansion/collapse\n * - Bulk expand/collapse operations\n * - Default expanded state configuration\n * - Parent/child relationship tracking\n */\nexport function useHierarchicalState<TData extends HierarchicalDataRow>(\n data: TData[],\n config?: HierarchicalConfig\n) {\n // Initialize expanded state based on defaultExpanded config\n const getInitialExpandedState = useCallback((): Set<string> => {\n if (!config?.defaultExpanded) {\n return new Set();\n }\n\n if (config.defaultExpanded === true) {\n // All parent rows expanded\n return new Set(data.filter(row => row.isParent).map(row => row.id));\n }\n\n if (Array.isArray(config.defaultExpanded)) {\n // Specific rows expanded\n return new Set(config.defaultExpanded);\n }\n\n // All collapsed\n return new Set();\n }, [data, config?.defaultExpanded]);\n\n const [expandedRows, setExpandedRows] = useState<Set<string>>(getInitialExpandedState);\n\n // Reset expanded state when data changes\n useEffect(() => {\n setExpandedRows(getInitialExpandedState());\n }, [getInitialExpandedState]);\n\n // Get parent-child relationships\n const parentChildMap = useMemo(() => {\n const map = new Map<string, TData[]>();\n \n if (Array.isArray(data)) {\n data.forEach(row => {\n if (row.isParent) {\n map.set(row.id, []);\n } else if (row.parentId) {\n const children = map.get(row.parentId) || [];\n children.push(row);\n map.set(row.parentId, children);\n }\n });\n }\n\n return map;\n }, [data]);\n\n // Get visible rows (parent rows + expanded children)\n const visibleRows = useMemo(() => {\n const visible: TData[] = [];\n \n if (Array.isArray(data)) {\n data.forEach(row => {\n if (row.isParent) {\n visible.push(row);\n \n // Add children if parent is expanded\n if (expandedRows.has(row.id)) {\n const children = parentChildMap.get(row.id) || [];\n visible.push(...children);\n }\n }\n });\n }\n\n return visible;\n }, [data, expandedRows, parentChildMap]);\n\n // Toggle single row expansion\n const toggleRow = useCallback((rowId: string) => {\n setExpandedRows(prev => {\n const newSet = new Set(prev);\n if (newSet.has(rowId)) {\n newSet.delete(rowId);\n } else {\n newSet.add(rowId);\n }\n \n // Notify parent component\n if (config?.onExpandedChange) {\n config.onExpandedChange(Array.from(newSet));\n }\n \n return newSet;\n });\n }, [config]);\n\n // Expand all parent rows\n const expandAll = useCallback(() => {\n const parentIds = data.filter(row => row.isParent).map(row => row.id);\n setExpandedRows(new Set(parentIds));\n \n if (config?.onExpandedChange) {\n config.onExpandedChange(parentIds);\n }\n }, [data, config]);\n\n // Collapse all rows\n const collapseAll = useCallback(() => {\n setExpandedRows(new Set());\n \n if (config?.onExpandedChange) {\n config.onExpandedChange([]);\n }\n }, [config]);\n\n // Check if row is expanded\n const isExpanded = useCallback((rowId: string) => {\n return expandedRows.has(rowId);\n }, [expandedRows]);\n\n // Check if row has children\n const hasChildren = useCallback((rowId: string) => {\n return parentChildMap.has(rowId) && (parentChildMap.get(rowId)?.length || 0) > 0;\n }, [parentChildMap]);\n\n // Get children count for a parent row\n const getChildrenCount = useCallback((rowId: string) => {\n return parentChildMap.get(rowId)?.length || 0;\n }, [parentChildMap]);\n\n // Get all expanded row IDs\n const getExpandedIds = useCallback(() => {\n return Array.from(expandedRows);\n }, [expandedRows]);\n\n // Set expanded state from external source\n const setExpandedIds = useCallback((ids: string[]) => {\n setExpandedRows(new Set(ids));\n }, []);\n\n return {\n // State\n expandedRows,\n visibleRows,\n \n // Actions\n toggleRow,\n expandAll,\n collapseAll,\n setExpandedIds,\n \n // Getters\n isExpanded,\n hasChildren,\n getChildrenCount,\n getExpandedIds,\n \n // Utilities\n parentChildMap,\n };\n}\n","/**\n * @file DataTable State Management Hook\n * @package @jmruthers/pace-core\n * @module Components/DataTable/Hooks\n * @since 0.4.0\n * \n * Centralized state management for DataTable using useReducer pattern.\n * This replaces the scattered useState calls with a single, predictable state management system.\n */\n\nimport { useReducer, useCallback, useMemo } from 'react';\nimport type { \n SortingState, \n ColumnFiltersState, \n VisibilityState, \n GroupingState, \n ExpandedState,\n PaginationState \n} from '@tanstack/react-table';\nimport type { DataRecord } from '../types';\n\n// ============================================================================\n// STATE INTERFACE\n// ============================================================================\n\nexport interface DataTableState<TData extends DataRecord> {\n // Table state\n sorting: SortingState;\n columnFilters: ColumnFiltersState;\n columnVisibility: VisibilityState;\n grouping: GroupingState;\n expanded: ExpandedState;\n pagination: PaginationState;\n columnOrder: string[];\n \n // Row operations\n rowSelection: Record<string, boolean>;\n \n // Editing state\n isCreating: boolean;\n creationData: Record<string, any>;\n editingRowId: string | null;\n editingData: Record<string, any>;\n \n // UI state\n showImportModal: boolean;\n showFilterRow: boolean;\n \n // Search state\n searchQuery: string;\n}\n\n// ============================================================================\n// ACTION TYPES\n// ============================================================================\n\nexport type DataTableAction<TData extends DataRecord> =\n | { type: 'SET_SORTING'; payload: SortingState }\n | { type: 'SET_COLUMN_FILTERS'; payload: ColumnFiltersState }\n | { type: 'SET_COLUMN_VISIBILITY'; payload: VisibilityState }\n | { type: 'SET_GROUPING'; payload: GroupingState }\n | { type: 'SET_EXPANDED'; payload: ExpandedState }\n | { type: 'SET_PAGINATION'; payload: PaginationState }\n | { type: 'SET_COLUMN_ORDER'; payload: string[] }\n | { type: 'SET_ROW_SELECTION'; payload: Record<string, boolean> }\n | { type: 'TOGGLE_ROW_SELECTION'; payload: { rowId: string; selected: boolean } }\n | { type: 'CLEAR_ROW_SELECTION' }\n | { type: 'SET_CREATING'; payload: boolean }\n | { type: 'SET_CREATION_DATA'; payload: Record<string, any> }\n | { type: 'CLEAR_CREATION_DATA' }\n | { type: 'SET_EDITING_ROW'; payload: { rowId: string | null; data: Record<string, any> } }\n | { type: 'CLEAR_EDITING' }\n | { type: 'SET_IMPORT_MODAL'; payload: boolean }\n | { type: 'SET_FILTER_ROW'; payload: boolean }\n | { type: 'SET_SEARCH_QUERY'; payload: string }\n | { type: 'RESET_STATE' }\n | { type: 'INITIALIZE_STATE'; payload: Partial<DataTableState<TData>> };\n\n// ============================================================================\n// REDUCER\n// ============================================================================\n\nexport function dataTableReducer<TData extends DataRecord>(\n state: DataTableState<TData>,\n action: DataTableAction<TData>\n): DataTableState<TData> {\n switch (action.type) {\n case 'SET_SORTING':\n return { ...state, sorting: action.payload };\n \n case 'SET_COLUMN_FILTERS':\n return { ...state, columnFilters: action.payload };\n \n case 'SET_COLUMN_VISIBILITY':\n return { ...state, columnVisibility: action.payload };\n \n case 'SET_GROUPING':\n return { ...state, grouping: action.payload };\n \n case 'SET_EXPANDED':\n return { ...state, expanded: action.payload };\n \n case 'SET_PAGINATION':\n return { ...state, pagination: action.payload };\n \n case 'SET_COLUMN_ORDER':\n return { ...state, columnOrder: action.payload };\n \n case 'SET_ROW_SELECTION':\n return { ...state, rowSelection: action.payload };\n \n case 'TOGGLE_ROW_SELECTION':\n return {\n ...state,\n rowSelection: {\n ...state.rowSelection,\n [action.payload.rowId]: action.payload.selected\n }\n };\n \n case 'CLEAR_ROW_SELECTION':\n return { ...state, rowSelection: {} };\n \n case 'SET_CREATING':\n return { ...state, isCreating: action.payload };\n \n case 'SET_CREATION_DATA':\n return { ...state, creationData: action.payload };\n \n case 'CLEAR_CREATION_DATA':\n return { ...state, creationData: {} };\n \n case 'SET_EDITING_ROW':\n return {\n ...state,\n editingRowId: action.payload.rowId,\n editingData: action.payload.data\n };\n \n case 'CLEAR_EDITING':\n return { ...state, editingRowId: null, editingData: {} };\n \n case 'SET_IMPORT_MODAL':\n return { ...state, showImportModal: action.payload };\n \n case 'SET_FILTER_ROW':\n return { ...state, showFilterRow: action.payload };\n \n case 'SET_SEARCH_QUERY':\n return { ...state, searchQuery: action.payload };\n \n case 'RESET_STATE':\n return createInitialState<TData>();\n \n case 'INITIALIZE_STATE':\n return { ...state, ...action.payload };\n \n default:\n return state;\n }\n}\n\n// ============================================================================\n// INITIAL STATE\n// ============================================================================\n\nexport function createInitialState<TData extends DataRecord>(\n initialPageSize: number = 10,\n columnIds: string[] = []\n): DataTableState<TData> {\n return {\n sorting: [],\n columnFilters: [],\n columnVisibility: {},\n grouping: [],\n expanded: {},\n pagination: {\n pageIndex: 0,\n pageSize: initialPageSize\n },\n columnOrder: columnIds,\n rowSelection: {},\n isCreating: false,\n creationData: {},\n editingRowId: null,\n editingData: {},\n showImportModal: false,\n showFilterRow: false,\n searchQuery: ''\n };\n}\n\n// ============================================================================\n// HOOK\n// ============================================================================\n\nexport interface UseDataTableStateOptions<TData extends DataRecord> {\n initialPageSize?: number;\n columnIds?: string[];\n initialRowSelection?: Record<string, boolean>;\n onRowSelectionChange?: (selection: Record<string, boolean>) => void;\n}\n\nexport function useDataTableState<TData extends DataRecord>({\n initialPageSize = 10,\n columnIds = [],\n initialRowSelection = {},\n onRowSelectionChange\n}: UseDataTableStateOptions<TData> = {}) {\n \n const initialState = useMemo(() => \n createInitialState<TData>(initialPageSize, columnIds),\n [initialPageSize, columnIds]\n );\n\n const [state, dispatch] = useReducer(dataTableReducer<TData>, {\n ...initialState,\n rowSelection: initialRowSelection\n });\n\n // ============================================================================\n // ACTION CREATORS\n // ============================================================================\n\n const actions = useMemo(() => ({\n setSorting: (sorting: SortingState) => \n dispatch({ type: 'SET_SORTING', payload: sorting }),\n \n setColumnFilters: (filters: ColumnFiltersState) => \n dispatch({ type: 'SET_COLUMN_FILTERS', payload: filters }),\n \n setColumnVisibility: (visibility: VisibilityState) => \n dispatch({ type: 'SET_COLUMN_VISIBILITY', payload: visibility }),\n \n setGrouping: (grouping: GroupingState) => \n dispatch({ type: 'SET_GROUPING', payload: grouping }),\n \n setExpanded: (expanded: ExpandedState) => \n dispatch({ type: 'SET_EXPANDED', payload: expanded }),\n \n setPagination: (pagination: PaginationState) => \n dispatch({ type: 'SET_PAGINATION', payload: pagination }),\n \n setColumnOrder: (order: string[]) => \n dispatch({ type: 'SET_COLUMN_ORDER', payload: order }),\n \n setRowSelection: (selection: Record<string, boolean> | ((old: Record<string, boolean>) => Record<string, boolean>)) => {\n const newSelection = typeof selection === 'function' ? selection(state.rowSelection) : selection;\n dispatch({ type: 'SET_ROW_SELECTION', payload: newSelection });\n onRowSelectionChange?.(newSelection);\n },\n \n toggleRowSelection: (rowId: string, selected: boolean) => {\n dispatch({ type: 'TOGGLE_ROW_SELECTION', payload: { rowId, selected } });\n const newSelection = { ...state.rowSelection, [rowId]: selected };\n onRowSelectionChange?.(newSelection);\n },\n \n clearRowSelection: () => {\n dispatch({ type: 'CLEAR_ROW_SELECTION' });\n onRowSelectionChange?.({});\n },\n \n setCreating: (isCreating: boolean) => \n dispatch({ type: 'SET_CREATING', payload: isCreating }),\n \n setCreationData: (data: Record<string, any>) => \n dispatch({ type: 'SET_CREATION_DATA', payload: data }),\n \n clearCreationData: () => \n dispatch({ type: 'CLEAR_CREATION_DATA' }),\n \n setEditingRow: (rowId: string | null, data: Record<string, any>) => \n dispatch({ type: 'SET_EDITING_ROW', payload: { rowId, data } }),\n \n clearEditing: () => \n dispatch({ type: 'CLEAR_EDITING' }),\n \n setImportModal: (show: boolean) => \n dispatch({ type: 'SET_IMPORT_MODAL', payload: show }),\n \n setFilterRow: (show: boolean) => \n dispatch({ type: 'SET_FILTER_ROW', payload: show }),\n \n setSearchQuery: (query: string) => \n dispatch({ type: 'SET_SEARCH_QUERY', payload: query }),\n \n resetState: () => \n dispatch({ type: 'RESET_STATE' }),\n \n initializeState: (partialState: Partial<DataTableState<TData>>) => \n dispatch({ type: 'INITIALIZE_STATE', payload: partialState })\n }), [state.rowSelection, onRowSelectionChange]);\n\n // ============================================================================\n // COMPUTED VALUES\n // ============================================================================\n\n const computed = useMemo(() => ({\n hasSelection: Object.values(state.rowSelection).some(Boolean),\n selectedRowIds: Object.entries(state.rowSelection)\n .filter(([_, selected]) => selected)\n .map(([rowId, _]) => rowId),\n isEditing: state.editingRowId !== null,\n isCreating: state.isCreating,\n hasFilters: state.columnFilters.length > 0 || state.searchQuery !== '',\n canClearFilters: state.columnFilters.length > 0 || state.searchQuery !== ''\n }), [state]);\n\n // ============================================================================\n // CLEAR FILTERS\n // ============================================================================\n\n const clearFilters = useCallback(() => {\n dispatch({ type: 'SET_COLUMN_FILTERS', payload: [] });\n dispatch({ type: 'SET_SEARCH_QUERY', payload: '' });\n }, []);\n\n return {\n state,\n actions,\n computed,\n clearFilters\n };\n}\n","/**\n * @file Hierarchical Sorting Utilities\n * @package @jmruthers/pace-core\n * @module Components/DataTable/Utils/hierarchicalSorting\n * @since 0.4.35\n */\n\nimport type { HierarchicalDataRow } from '../types';\nimport type { SortingState } from '@tanstack/react-table';\n\n/**\n * Sorts hierarchical data while preserving parent-child relationships\n * Parent rows maintain their order, child rows are sorted within their parent groups\n */\nexport function sortHierarchicalData<TData extends HierarchicalDataRow>(\n data: TData[],\n sorting: SortingState\n): TData[] {\n if (sorting.length === 0) {\n return data;\n }\n\n const [sortConfig] = sorting;\n const { id: columnId, desc } = sortConfig;\n\n // Group data by parent\n const parentGroups = new Map<string, { parent: TData; children: TData[] }>();\n \n data.forEach(row => {\n if (row.isParent) {\n parentGroups.set(row.id, { parent: row, children: [] });\n } else if (row.parentId) {\n const group = parentGroups.get(row.parentId);\n if (group) {\n group.children.push(row);\n }\n }\n });\n\n // Sort children within each parent group\n const sortedGroups = Array.from(parentGroups.values()).map(group => {\n const sortedChildren = [...group.children].sort((a, b) => {\n const aValue = getSortValue(a, columnId);\n const bValue = getSortValue(b, columnId);\n \n if (aValue === bValue) return 0;\n \n const comparison = compareValues(aValue, bValue);\n return desc ? -comparison : comparison;\n });\n\n return {\n parent: group.parent,\n children: sortedChildren\n };\n });\n\n // Reconstruct the sorted data maintaining parent-child order\n const sortedData: TData[] = [];\n \n sortedGroups.forEach(group => {\n sortedData.push(group.parent);\n sortedData.push(...group.children);\n });\n\n return sortedData;\n}\n\n/**\n * Gets the sort value for a row and column\n */\nfunction getSortValue<TData extends HierarchicalDataRow>(\n row: TData, \n columnId: string\n): any {\n // Handle nested property access (e.g., \"user.name\")\n const keys = columnId.split('.');\n let value: any = row;\n \n for (const key of keys) {\n if (value && typeof value === 'object' && key in value) {\n value = value[key];\n } else {\n return null;\n }\n }\n \n return value;\n}\n\n/**\n * Compares two values for sorting\n */\nfunction compareValues(a: any, b: any): number {\n // Handle null/undefined values\n if (a == null && b == null) return 0;\n if (a == null) return -1;\n if (b == null) return 1;\n\n // Handle numbers\n if (typeof a === 'number' && typeof b === 'number') {\n return a - b;\n }\n\n // Handle dates\n if (a instanceof Date && b instanceof Date) {\n return a.getTime() - b.getTime();\n }\n\n // Handle strings (case-insensitive)\n const aStr = String(a).toLowerCase();\n const bStr = String(b).toLowerCase();\n \n if (aStr < bStr) return -1;\n if (aStr > bStr) return 1;\n return 0;\n}\n\n/**\n * Determines if a column should be sortable in hierarchical mode\n * Child-only columns should not affect parent row order\n */\nexport function isHierarchicalSortableColumn<TData extends HierarchicalDataRow>(\n columnId: string,\n columns: any[]\n): boolean {\n const column = columns.find(col => col.id === columnId || col.accessorKey === columnId);\n \n if (!column) return true;\n \n // If column is hidden for parent rows, it should only sort children within parents\n return !column.hideForParent;\n}\n\n/**\n * Gets the effective sorting configuration for hierarchical data\n * Returns null if the column should not sort parent rows\n */\nexport function getHierarchicalSortConfig(\n sorting: SortingState,\n columns: any[]\n): SortingState {\n if (sorting.length === 0) return sorting;\n \n const [sortConfig] = sorting;\n const { id: columnId } = sortConfig;\n \n // If this is a child-only column, we still want to sort but only within parent groups\n // The main sorting logic will handle this appropriately\n return sorting;\n}\n","/**\n * @file Column Factory\n * @package @jmruthers/pace-core\n * @module Components/DataTable/Architecture/Factories\n * @since 0.3.0\n */\n\nimport { createColumnHelper, type ColumnDef } from '@tanstack/react-table';\nimport type { DataRecord, DataTableAction } from '../types';\n\n// ============================================================================\n// COLUMN OPTIONS INTERFACES\n// ============================================================================\n\nexport interface TextColumnOptions {\n label?: string;\n sortable?: boolean;\n filterable?: boolean;\n groupable?: boolean;\n hideable?: boolean;\n render?: (value: any) => React.ReactNode;\n footer?: React.ReactNode;\n size?: number;\n minSize?: number;\n maxSize?: number;\n}\n\nexport interface NumberColumnOptions extends TextColumnOptions {\n format?: (value: number) => string;\n}\n\nexport interface DateColumnOptions extends TextColumnOptions {\n format?: (date: Date) => string;\n locale?: string;\n dateOptions?: Intl.DateTimeFormatOptions;\n}\n\nexport interface BooleanColumnOptions extends TextColumnOptions {\n render?: (value: boolean) => React.ReactNode;\n}\n\nexport interface ActionColumnOptions {\n header?: string;\n render?: (row: DataRecord, actions: DataTableAction<DataRecord>[]) => React.ReactNode;\n size?: number;\n minSize?: number;\n maxSize?: number;\n}\n\nexport interface CustomColumnOptions<TData extends DataRecord> {\n header?: string;\n cell?: (info: any) => React.ReactNode;\n enableSorting?: boolean;\n enableColumnFilter?: boolean;\n enableGrouping?: boolean;\n enableHiding?: boolean;\n footer?: React.ReactNode;\n size?: number;\n minSize?: number;\n maxSize?: number;\n}\n\nexport interface ColumnConfig<TData extends DataRecord> {\n key: keyof TData | string;\n type: 'text' | 'number' | 'date' | 'boolean' | 'custom';\n options?: TextColumnOptions | NumberColumnOptions | DateColumnOptions | BooleanColumnOptions | CustomColumnOptions<TData>;\n}\n\n// ============================================================================\n// COLUMN FACTORY CLASS\n// ============================================================================\n\nexport class ColumnFactory<TData extends DataRecord = DataRecord> {\n /**\n * Create a text column\n */\n static createTextColumn<TData extends DataRecord>(\n key: keyof TData | string,\n options: TextColumnOptions = {}\n ): ColumnDef<TData> {\n return {\n id: String(key),\n accessorKey: String(key),\n header: options.label || String(key),\n enableSorting: options.sortable ?? true,\n enableColumnFilter: options.filterable ?? true,\n enableGrouping: options.groupable ?? false,\n enableHiding: options.hideable ?? true,\n cell: options.render ? ({ getValue }) => options.render!(getValue()) : undefined,\n footer: options.footer,\n size: options.size,\n minSize: options.minSize,\n maxSize: options.maxSize,\n } as ColumnDef<TData>;\n }\n\n /**\n * Create a number column\n */\n static createNumberColumn<TData extends DataRecord>(\n key: keyof TData | string,\n options: NumberColumnOptions = {}\n ): ColumnDef<TData> {\n return {\n id: String(key),\n accessorKey: String(key),\n header: options.label || String(key),\n enableSorting: options.sortable ?? true,\n enableColumnFilter: options.filterable ?? true,\n enableGrouping: options.groupable ?? true,\n enableHiding: options.hideable ?? true,\n cell: ({ getValue }) => {\n const value = getValue();\n if (options.format && typeof value === 'number') {\n return options.format(value);\n }\n return typeof value === 'number' ? value.toLocaleString() : value;\n },\n footer: options.footer,\n size: options.size,\n minSize: options.minSize,\n maxSize: options.maxSize,\n } as ColumnDef<TData>;\n }\n\n /**\n * Create a date column\n */\n static createDateColumn<TData extends DataRecord>(\n key: keyof TData | string,\n options: DateColumnOptions = {}\n ): ColumnDef<TData> {\n return {\n id: String(key),\n accessorKey: String(key),\n header: options.label || String(key),\n enableSorting: options.sortable ?? true,\n enableColumnFilter: options.filterable ?? true,\n enableGrouping: options.groupable ?? true,\n enableHiding: options.hideable ?? true,\n cell: ({ getValue }) => {\n const value = getValue();\n if (!value) return '';\n \n const date = new Date(value as any);\n if (isNaN(date.getTime())) return String(value);\n \n if (options.format) {\n return options.format(date);\n }\n \n return date.toLocaleDateString(options.locale, options.dateOptions);\n },\n footer: options.footer,\n size: options.size,\n minSize: options.minSize,\n maxSize: options.maxSize,\n } as ColumnDef<TData>;\n }\n\n /**\n * Create a boolean column\n */\n static createBooleanColumn<TData extends DataRecord>(\n key: keyof TData | string,\n options: BooleanColumnOptions = {}\n ): ColumnDef<TData> {\n return {\n id: String(key),\n accessorKey: String(key),\n header: options.label || String(key),\n enableSorting: options.sortable ?? true,\n enableColumnFilter: options.filterable ?? true,\n enableGrouping: options.groupable ?? true,\n enableHiding: options.hideable ?? true,\n cell: ({ getValue }) => {\n const value = getValue();\n if (options.render && typeof value === 'boolean') {\n return options.render(value);\n }\n return value ? 'Yes' : 'No';\n },\n footer: options.footer,\n size: options.size,\n minSize: options.minSize,\n maxSize: options.maxSize,\n } as ColumnDef<TData>;\n }\n\n /**\n * Create an action column\n */\n static createActionColumn<TData extends DataRecord>(\n actions: DataTableAction<TData>[],\n options: ActionColumnOptions = {}\n ): ColumnDef<TData> {\n return {\n id: 'actions',\n header: options.header || 'Actions',\n enableSorting: false,\n enableColumnFilter: false,\n enableGrouping: false,\n enableHiding: false,\n cell: ({ row }) => {\n if (options.render) {\n return options.render(row.original, actions as any);\n }\n \n // Return a simple object that can be rendered by the component\n return {\n type: 'actions',\n actions,\n row: row.original,\n };\n },\n size: options.size || 150,\n minSize: options.minSize || 100,\n maxSize: options.maxSize || 200,\n } as ColumnDef<TData>;\n }\n\n /**\n * Create a custom column\n */\n static createCustomColumn<TData extends DataRecord>(\n key: keyof TData | string,\n options: CustomColumnOptions<TData> = {}\n ): ColumnDef<TData> {\n return {\n id: String(key),\n accessorKey: String(key),\n header: options.header || String(key),\n enableSorting: options.enableSorting ?? false,\n enableColumnFilter: options.enableColumnFilter ?? false,\n enableGrouping: options.enableGrouping ?? false,\n enableHiding: options.enableHiding ?? true,\n cell: options.cell,\n footer: options.footer,\n size: options.size,\n minSize: options.minSize,\n maxSize: options.maxSize,\n } as ColumnDef<TData>;\n }\n\n /**\n * Create columns from simple configuration\n */\n static createColumnsFromConfig<TData extends DataRecord>(\n config: ColumnConfig<TData>[]\n ): ColumnDef<TData>[] {\n return config.map(col => {\n switch (col.type) {\n case 'text':\n return this.createTextColumn(col.key, col.options as TextColumnOptions);\n case 'number':\n return this.createNumberColumn(col.key, col.options as NumberColumnOptions);\n case 'date':\n return this.createDateColumn(col.key, col.options as DateColumnOptions);\n case 'boolean':\n return this.createBooleanColumn(col.key, col.options as BooleanColumnOptions);\n case 'custom':\n return this.createCustomColumn(col.key, col.options as CustomColumnOptions<TData>);\n default:\n return this.createTextColumn(col.key, col.options as TextColumnOptions);\n }\n });\n }\n} ","/**\n * @file DataTable Data Manager\n * @package @jmruthers/pace-core\n * @module Components/DataTable/Architecture/Managers\n * @since 0.3.0\n */\n\nimport type { DataTableDataManager, DataAdapter, FetchOptions } from './interfaces';\nimport type { DataRecord } from '../types';\n\n/**\n * Data manager implementation following SRP\n * Responsible only for data operations\n */\nexport class DataManager<TData extends DataRecord> implements DataTableDataManager<TData> {\n private data: TData[] = [];\n private _isLoading = false;\n private error: Error | null = null;\n private adapter: DataAdapter<TData>;\n private cache = new Map<string, { data: TData[]; timestamp: number }>();\n private cacheTimeout: number;\n\n constructor(adapter: DataAdapter<TData>, cacheTimeout = 5 * 60 * 1000) {\n this.adapter = adapter;\n this.cacheTimeout = cacheTimeout;\n }\n\n /**\n * Get current data\n */\n getData(): TData[] {\n return this.data;\n }\n\n /**\n * Update a data item\n */\n async updateData(id: string, data: Partial<TData>): Promise<void> {\n try {\n this.setLoading(true);\n this.setError(null);\n \n await this.adapter.updateData(id, data);\n \n // Update local data\n const index = this.data.findIndex(item => this.getRowId(item) === id);\n if (index !== -1) {\n this.data[index] = { ...this.data[index], ...data };\n }\n \n this.clearCache();\n } catch (error) {\n this.setError(error as Error);\n throw error;\n } finally {\n this.setLoading(false);\n }\n }\n\n /**\n * Delete a data item\n */\n async deleteData(id: string): Promise<void> {\n try {\n this.setLoading(true);\n this.setError(null);\n \n await this.adapter.deleteData(id);\n \n // Remove from local data\n this.data = this.data.filter(item => this.getRowId(item) !== id);\n \n this.clearCache();\n } catch (error) {\n this.setError(error as Error);\n throw error;\n } finally {\n this.setLoading(false);\n }\n }\n\n /**\n * Create a new data item\n */\n async createData(data: Partial<TData>): Promise<TData> {\n try {\n this.setLoading(true);\n this.setError(null);\n \n const newItem = await this.adapter.createData(data);\n \n // Add to local data\n this.data.push(newItem);\n \n this.clearCache();\n return newItem;\n } catch (error) {\n this.setError(error as Error);\n throw error;\n } finally {\n this.setLoading(false);\n }\n }\n\n\n /**\n * Get cached data if available\n */\n async getCachedData(cacheKey: string): Promise<TData[] | null> {\n const cached = this.cache.get(cacheKey);\n if (!cached) return null;\n \n const isExpired = Date.now() - cached.timestamp > this.cacheTimeout;\n if (isExpired) {\n this.cache.delete(cacheKey);\n return null;\n }\n \n return cached.data;\n }\n\n /**\n * Set cached data\n */\n setCachedData(cacheKey: string, data: TData[]): void {\n this.cache.set(cacheKey, {\n data,\n timestamp: Date.now(),\n });\n }\n\n /**\n * Clear all cached data\n */\n clearCache(): void {\n this.cache.clear();\n }\n\n /**\n * Check if currently loading\n */\n isLoading(): boolean {\n return this._isLoading;\n }\n\n /**\n * Get current error\n */\n getError(): Error | null {\n return this.error;\n }\n\n /**\n * Set loading state\n */\n private setLoading(loading: boolean): void {\n this._isLoading = loading;\n }\n\n /**\n * Set error state\n */\n private setError(error: Error | null): void {\n this.error = error;\n }\n\n /**\n * Get row ID from data item\n */\n private getRowId(item: TData): string {\n return (item as any).id || (item as any).key || JSON.stringify(item);\n }\n\n /**\n * Set adapter\n */\n setAdapter(adapter: DataAdapter<TData>): void {\n this.adapter = adapter;\n this.clearCache();\n }\n\n /**\n * Get adapter\n */\n getAdapter(): DataAdapter<TData> {\n return this.adapter;\n }\n} ","/**\n * @file DataTable Column Manager\n * @package @jmruthers/pace-core\n * @module Components/DataTable/Architecture/Managers\n * @since 0.3.0\n */\n\nimport type { ColumnManager } from './interfaces';\nimport type { ColumnDef } from '@tanstack/react-table';\nimport type { DataRecord } from '../types';\n\n/**\n * Column manager implementation following SRP\n * Responsible only for column operations\n */\nexport class ColumnManagerImpl<TData extends DataRecord> implements ColumnManager<TData> {\n private columns: ColumnDef<TData>[] = [];\n private columnMap = new Map<string, ColumnDef<TData>>();\n\n constructor(initialColumns: ColumnDef<TData>[] = []) {\n this.setColumns(initialColumns);\n }\n\n /**\n * Get all columns\n */\n getColumns(): ColumnDef<TData>[] {\n return [...this.columns];\n }\n\n /**\n * Add a new column\n */\n addColumn(column: ColumnDef<TData>): void {\n const columnId = this.getColumnId(column);\n \n // Remove existing column with same ID if it exists\n this.removeColumn(columnId);\n \n // Add new column\n this.columns.push(column);\n this.columnMap.set(columnId, column);\n }\n\n /**\n * Remove a column by ID\n */\n removeColumn(id: string): void {\n const index = this.columns.findIndex(col => this.getColumnId(col) === id);\n if (index !== -1) {\n this.columns.splice(index, 1);\n this.columnMap.delete(id);\n }\n }\n\n /**\n * Update an existing column\n */\n updateColumn(id: string, updates: Partial<ColumnDef<TData>>): void {\n const existingColumn = this.columnMap.get(id);\n if (!existingColumn) {\n throw new Error(`Column with ID \"${id}\" not found`);\n }\n\n const updatedColumn = { ...existingColumn, ...updates } as ColumnDef<TData>;\n const index = this.columns.findIndex(col => this.getColumnId(col) === id);\n \n if (index !== -1) {\n this.columns[index] = updatedColumn;\n this.columnMap.set(id, updatedColumn);\n }\n }\n\n /**\n * Get a specific column by ID\n */\n getColumn(id: string): ColumnDef<TData> | undefined {\n return this.columnMap.get(id);\n }\n\n /**\n * Check if a column exists\n */\n hasColumn(id: string): boolean {\n return this.columnMap.has(id);\n }\n\n /**\n * Get column IDs\n */\n getColumnIds(): string[] {\n return Array.from(this.columnMap.keys());\n }\n\n /**\n * Get visible columns\n */\n getVisibleColumns(): ColumnDef<TData>[] {\n return this.columns.filter(column => {\n const id = this.getColumnId(column);\n return column.enableHiding !== false;\n });\n }\n\n /**\n * Get sortable columns\n */\n getSortableColumns(): ColumnDef<TData>[] {\n return this.columns.filter(column => column.enableSorting === true);\n }\n\n /**\n * Get filterable columns\n */\n getFilterableColumns(): ColumnDef<TData>[] {\n return this.columns.filter(column => column.enableColumnFilter === true);\n }\n\n /**\n * Get groupable columns\n */\n getGroupableColumns(): ColumnDef<TData>[] {\n return this.columns.filter(column => column.enableGrouping === true);\n }\n\n /**\n * Set all columns at once\n */\n setColumns(columns: ColumnDef<TData>[]): void {\n this.columns = [...columns];\n this.columnMap.clear();\n \n columns.forEach(column => {\n const id = this.getColumnId(column);\n this.columnMap.set(id, column);\n });\n }\n\n /**\n * Clear all columns\n */\n clearColumns(): void {\n this.columns = [];\n this.columnMap.clear();\n }\n\n /**\n * Get column count\n */\n getColumnCount(): number {\n return this.columns.length;\n }\n\n /**\n * Get column by index\n */\n getColumnByIndex(index: number): ColumnDef<TData> | undefined {\n return this.columns[index];\n }\n\n /**\n * Get column index by ID\n */\n getColumnIndex(id: string): number {\n return this.columns.findIndex(col => this.getColumnId(col) === id);\n }\n\n /**\n * Move column to new position\n */\n moveColumn(id: string, newIndex: number): void {\n const currentIndex = this.getColumnIndex(id);\n if (currentIndex === -1) {\n throw new Error(`Column with ID \"${id}\" not found`);\n }\n\n if (newIndex < 0 || newIndex >= this.columns.length) {\n throw new Error(`Invalid index: ${newIndex}`);\n }\n\n const column = this.columns[currentIndex];\n this.columns.splice(currentIndex, 1);\n this.columns.splice(newIndex, 0, column);\n }\n\n /**\n * Get column ID from column definition\n */\n private getColumnId(column: ColumnDef<TData>): string {\n // Handle different column types\n if ('id' in column && column.id) {\n return column.id;\n }\n \n if ('accessorKey' in column && column.accessorKey) {\n return String(column.accessorKey);\n }\n \n if ('accessorFn' in column && typeof column.accessorFn === 'function') {\n return `fn-${Math.random().toString(36).substr(2, 9)}`;\n }\n \n return `fn-${Math.random().toString(36).substr(2, 9)}`;\n }\n} ","/**\n * @file DataTable Action Manager\n * @package @jmruthers/pace-core\n * @module Components/DataTable/Architecture/Managers\n * @since 0.3.0\n */\n\nimport type { ActionManager } from './interfaces';\nimport type { DataTableAction, DataRecord } from '../types';\n\n/**\n * Action manager implementation following SRP\n * Responsible only for action operations\n */\nexport class ActionManagerImpl<TData extends DataRecord> implements ActionManager<TData> {\n private actions: DataTableAction<TData>[] = [];\n private actionMap = new Map<string, DataTableAction<TData>>();\n\n constructor(initialActions: DataTableAction<TData>[] = []) {\n this.setActions(initialActions);\n }\n\n /**\n * Get all actions\n */\n getActions(): DataTableAction<TData>[] {\n return [...this.actions];\n }\n\n /**\n * Add a new action\n */\n addAction(action: DataTableAction<TData>): void {\n const actionId = this.getActionId(action);\n \n // Remove existing action with same ID if it exists\n this.removeAction(actionId);\n \n // Add new action\n this.actions.push(action);\n this.actionMap.set(actionId, action);\n }\n\n /**\n * Remove an action by ID\n */\n removeAction(id: string): void {\n const index = this.actions.findIndex(action => this.getActionId(action) === id);\n if (index !== -1) {\n this.actions.splice(index, 1);\n this.actionMap.delete(id);\n }\n }\n\n /**\n * Update an existing action\n */\n updateAction(id: string, updates: Partial<DataTableAction<TData>>): void {\n const existingAction = this.actionMap.get(id);\n if (!existingAction) {\n throw new Error(`Action with ID \"${id}\" not found`);\n }\n\n const updatedAction = { ...existingAction, ...updates };\n const index = this.actions.findIndex(action => this.getActionId(action) === id);\n \n if (index !== -1) {\n this.actions[index] = updatedAction;\n this.actionMap.set(id, updatedAction);\n }\n }\n\n /**\n * Get action by ID\n */\n getAction(id: string): DataTableAction<TData> | undefined {\n return this.actionMap.get(id);\n }\n\n /**\n * Check if action exists\n */\n hasAction(id: string): boolean {\n return this.actionMap.has(id);\n }\n\n /**\n * Get action IDs\n */\n getActionIds(): string[] {\n return Array.from(this.actionMap.keys());\n }\n\n /**\n * Get enabled actions\n */\n getEnabledActions(): DataTableAction<TData>[] {\n return this.actions.filter(action => {\n if (!action.disabled) return true;\n if (typeof action.disabled === 'function') {\n // For function-based disabled, we need a row to check against\n // Since we don't have a specific row here, we'll create a mock row\n // This is not ideal but allows the method to work\n const mockRow = {} as TData;\n return !action.disabled(mockRow);\n }\n return !action.disabled;\n });\n }\n\n /**\n * Get actions by variant\n */\n getActionsByVariant(variant: DataTableAction<TData>['variant']): DataTableAction<TData>[] {\n return this.actions.filter(action => action.variant === variant);\n }\n\n /**\n * Get destructive actions\n */\n getDestructiveActions(): DataTableAction<TData>[] {\n return this.getActionsByVariant('destructive');\n }\n\n /**\n * Get primary actions\n */\n getPrimaryActions(): DataTableAction<TData>[] {\n return this.getActionsByVariant('default');\n }\n\n /**\n * Get secondary actions\n */\n getSecondaryActions(): DataTableAction<TData>[] {\n return this.getActionsByVariant('secondary');\n }\n\n /**\n * Set all actions at once\n */\n setActions(actions: DataTableAction<TData>[]): void {\n this.actions = [...actions];\n this.actionMap.clear();\n \n actions.forEach(action => {\n const id = this.getActionId(action);\n this.actionMap.set(id, action);\n });\n }\n\n /**\n * Clear all actions\n */\n clearActions(): void {\n this.actions = [];\n this.actionMap.clear();\n }\n\n /**\n * Get action count\n */\n getActionCount(): number {\n return this.actions.length;\n }\n\n /**\n * Get action by index\n */\n getActionByIndex(index: number): DataTableAction<TData> | undefined {\n return this.actions[index];\n }\n\n /**\n * Get action index by ID\n */\n getActionIndex(id: string): number {\n return this.actions.findIndex(action => this.getActionId(action) === id);\n }\n\n /**\n * Move action to new position\n */\n moveAction(id: string, newIndex: number): void {\n const currentIndex = this.getActionIndex(id);\n if (currentIndex === -1) {\n throw new Error(`Action with ID \"${id}\" not found`);\n }\n\n if (newIndex < 0 || newIndex >= this.actions.length) {\n throw new Error(`Invalid index: ${newIndex}`);\n }\n\n const action = this.actions[currentIndex];\n this.actions.splice(currentIndex, 1);\n this.actions.splice(newIndex, 0, action);\n }\n\n /**\n * Execute an action\n */\n executeAction(id: string, row: TData): void {\n const action = this.actionMap.get(id);\n if (!action) {\n throw new Error(`Action with ID \"${id}\" not found`);\n }\n\n if (action.disabled && typeof action.disabled === 'function' && action.disabled(row)) {\n throw new Error(`Action \"${id}\" is disabled for this row`);\n }\n\n action.onClick(row);\n }\n\n /**\n * Check if action is disabled for a specific row\n */\n isActionDisabled(id: string, row: TData): boolean {\n const action = this.actionMap.get(id);\n if (!action) return true;\n\n if (typeof action.disabled === 'function') {\n return action.disabled(row);\n }\n\n return !!action.disabled;\n }\n\n /**\n * Get action ID from action definition\n */\n private getActionId(action: DataTableAction<TData>): string {\n return action.testId || action.label.toLowerCase().replace(/\\s+/g, '-') || `action-${Math.random().toString(36).substr(2, 9)}`;\n }\n} ","/**\n * @file DataTable State Manager\n * @package @jmruthers/pace-core\n * @module Components/DataTable/Architecture/Managers\n * @since 0.3.0\n */\n\nimport type { StateManager, DataTableState, DataTableObserver, Observable, UIState } from './interfaces';\nimport type { DataRecord } from '../types';\n\n/**\n * State manager implementation with observer pattern\n * Responsible only for state management\n */\nexport class StateManagerImpl<TData extends DataRecord> implements StateManager<TData>, Observable<TData> {\n private state: DataTableState<TData>;\n private observers: Map<string, DataTableObserver<TData>> = new Map();\n private observerIdCounter = 0;\n\n constructor(initialState?: Partial<DataTableState<TData>>) {\n this.state = this.createInitialState(initialState);\n }\n\n /**\n * Get current state\n */\n getState(): DataTableState<TData> {\n return { ...this.state };\n }\n\n /**\n * Set state with updater function\n */\n setState(updater: (state: DataTableState<TData>) => DataTableState<TData>): void {\n const newState = updater(this.getState());\n const oldState = this.state;\n this.state = newState;\n\n // Notify observers of state changes\n this.notifyStateChange(oldState, newState);\n }\n\n /**\n * Subscribe to state changes\n */\n subscribe(observer: DataTableObserver<TData> | ((state: DataTableState<TData>) => void)): () => void {\n const observerId = `observer-${++this.observerIdCounter}`;\n \n let dataTableObserver: DataTableObserver<TData>;\n \n if (typeof observer === 'function') {\n dataTableObserver = {\n id: observerId,\n onStateChange: observer,\n };\n } else {\n dataTableObserver = observer;\n }\n\n this.observers.set(observerId, dataTableObserver);\n \n // Return unsubscribe function\n return () => this.unsubscribe(observerId);\n }\n\n /**\n * Subscribe to specific state changes\n */\n subscribeToObserver(observer: DataTableObserver<TData>): () => void {\n this.observers.set(observer.id, observer);\n return () => this.unsubscribe(observer.id);\n }\n\n /**\n * Unsubscribe observer\n */\n unsubscribe(observerId: string): void {\n this.observers.delete(observerId);\n }\n\n /**\n * Notify all observers of an event\n */\n notify(event: string, data: any): void {\n this.observers.forEach(observer => {\n switch (event) {\n case 'dataChange':\n observer.onDataChange?.(data);\n break;\n case 'columnChange':\n observer.onColumnChange?.(data);\n break;\n case 'stateChange':\n observer.onStateChange?.(data);\n break;\n case 'error':\n observer.onError?.(data);\n break;\n }\n });\n }\n\n /**\n * Update data and notify observers\n */\n updateData(data: TData[]): void {\n const oldData = this.state.data;\n this.setState(state => ({ ...state, data }));\n \n if (oldData !== data) {\n this.notify('dataChange', data);\n }\n }\n\n /**\n * Update columns and notify observers\n */\n updateColumns(columns: any[]): void {\n const oldColumns = this.state.columns;\n this.setState(state => ({ ...state, columns }));\n \n if (oldColumns !== columns) {\n this.notify('columnChange', columns);\n }\n }\n\n /**\n * Update actions and notify observers\n */\n updateActions(actions: any[]): void {\n this.setState(state => ({ ...state, actions }));\n }\n\n /**\n * Update UI state\n */\n updateUI(uiUpdates: Partial<UIState>): void {\n this.setState(state => ({\n ...state,\n ui: { ...state.ui, ...uiUpdates }\n }));\n }\n\n /**\n * Update global filter\n */\n updateGlobalFilter(filter: string): void {\n this.updateUI({ globalFilter: filter });\n }\n\n /**\n * Update column filters\n */\n updateColumnFilters(filters: Array<{ id: string; value: any }>): void {\n this.updateUI({ columnFilters: filters });\n }\n\n /**\n * Update sorting\n */\n updateSorting(sorting: Array<{ id: string; desc: boolean }>): void {\n this.updateUI({ sorting });\n }\n\n /**\n * Update grouping\n */\n updateGrouping(grouping: string[]): void {\n this.updateUI({ grouping });\n }\n\n /**\n * Update pagination\n */\n updatePagination(pagination: { pageIndex: number; pageSize: number }): void {\n this.updateUI({ pagination });\n }\n\n /**\n * Update row selection\n */\n updateRowSelection(selection: Record<string, boolean>): void {\n this.updateUI({ rowSelection: selection });\n }\n\n /**\n * Update editing state\n */\n updateEditing(editing: DataTableState<TData>['ui']['editing']): void {\n this.updateUI({ editing });\n }\n\n /**\n * Update modal state\n */\n updateModals(modals: DataTableState<TData>['ui']['modals']): void {\n this.updateUI({ modals });\n }\n\n /**\n * Update feature state\n */\n updateFeatureState(featureName: string, state: any): void {\n this.setState(currentState => ({\n ...currentState,\n features: new Map(currentState.features).set(featureName, state)\n }));\n }\n\n /**\n * Update plugin state\n */\n updatePluginState(pluginName: string, state: any): void {\n this.setState(currentState => ({\n ...currentState,\n plugins: new Map(currentState.plugins).set(pluginName, state)\n }));\n }\n\n /**\n * Set loading state\n */\n setLoading(loading: boolean): void {\n this.setState(state => ({ ...state, isLoading: loading }));\n }\n\n /**\n * Set error state\n */\n setError(error: Error | null): void {\n this.setState(state => ({ ...state, error }));\n \n if (error) {\n this.notify('error', error);\n }\n }\n\n /**\n * Reset state to initial values\n */\n reset(): void {\n this.state = this.createInitialState();\n this.notify('stateChange', this.state);\n }\n\n /**\n * Get observer count\n */\n getObserverCount(): number {\n return this.observers.size;\n }\n\n /**\n * Create initial state\n */\n private createInitialState(overrides?: Partial<DataTableState<TData>>): DataTableState<TData> {\n const defaultState: DataTableState<TData> = {\n data: [],\n isLoading: false,\n error: null,\n columns: [],\n columnVisibility: {},\n actions: [],\n ui: {\n globalFilter: '',\n columnFilters: [],\n sorting: [],\n grouping: [],\n expanded: {},\n pagination: {\n pageIndex: 0,\n pageSize: 10,\n },\n rowSelection: {},\n editing: {\n rowId: null,\n data: {},\n isCreating: false,\n creationData: {},\n },\n modals: {\n import: false,\n export: false,\n view: false,\n viewData: null,\n },\n },\n features: new Map(),\n plugins: new Map(),\n };\n\n return { ...defaultState, ...overrides };\n }\n\n /**\n * Notify observers of state changes\n */\n private notifyStateChange(oldState: DataTableState<TData>, newState: DataTableState<TData>): void {\n // Check for specific changes and notify accordingly\n if (oldState.data !== newState.data) {\n this.notify('dataChange', newState.data);\n }\n \n if (oldState.columns !== newState.columns) {\n this.notify('columnChange', newState.columns);\n }\n \n // Always notify of state change\n this.notify('stateChange', newState);\n }\n} ","/**\n * @file DataTable Plugin Registry\n * @package @jmruthers/pace-core\n * @module Components/DataTable/Architecture\n * @since 0.3.0\n */\n\nimport type { PluginRegistry, DataTablePlugin, DataTableContext } from './interfaces';\nimport type { DataRecord } from '../types';\n\n/**\n * Plugin registry implementation\n * Manages plugin registration, dependency resolution, and lifecycle\n */\nexport class PluginRegistryImpl<TData extends DataRecord = DataRecord> implements PluginRegistry<TData> {\n private plugins = new Map<string, DataTablePlugin<TData>>();\n private initializedPlugins = new Set<string>();\n\n /**\n * Register a plugin\n */\n register(plugin: DataTablePlugin<TData>): void {\n if (this.plugins.has(plugin.name)) {\n throw new Error(`Plugin \"${plugin.name}\" is already registered`);\n }\n\n this.plugins.set(plugin.name, plugin);\n }\n\n /**\n * Unregister a plugin\n */\n unregister(name: string): void {\n const plugin = this.plugins.get(name);\n if (!plugin) {\n throw new Error(`Plugin \"${name}\" is not registered`);\n }\n\n // Cleanup if initialized\n if (this.initializedPlugins.has(name)) {\n plugin.cleanup().catch(error => {\n console.error(`Error cleaning up plugin \"${name}\":`, error);\n });\n this.initializedPlugins.delete(name);\n }\n\n this.plugins.delete(name);\n }\n\n /**\n * Get a plugin by name\n */\n getPlugin(name: string): DataTablePlugin<TData> | undefined {\n return this.plugins.get(name);\n }\n\n /**\n * Get all enabled plugins\n */\n getEnabledPlugins(): DataTablePlugin<TData>[] {\n return Array.from(this.plugins.values());\n }\n\n /**\n * Get plugins in dependency order\n */\n getDependencyOrder(): DataTablePlugin<TData>[] {\n const sorted: DataTablePlugin<TData>[] = [];\n const visited = new Set<string>();\n const visiting = new Set<string>();\n\n const visit = (pluginName: string) => {\n if (visiting.has(pluginName)) {\n throw new Error(`Circular dependency detected: ${pluginName}`);\n }\n\n if (visited.has(pluginName)) {\n return;\n }\n\n const plugin = this.plugins.get(pluginName);\n if (!plugin) {\n throw new Error(`Plugin \"${pluginName}\" not found`);\n }\n\n visiting.add(pluginName);\n\n // Visit dependencies first\n if (plugin.dependencies) {\n for (const dependency of plugin.dependencies) {\n visit(dependency);\n }\n }\n\n visiting.delete(pluginName);\n visited.add(pluginName);\n sorted.push(plugin);\n };\n\n // Visit all plugins\n for (const pluginName of this.plugins.keys()) {\n if (!visited.has(pluginName)) {\n visit(pluginName);\n }\n }\n\n return sorted;\n }\n\n /**\n * Initialize all plugins\n */\n async initializePlugins(context: DataTableContext<TData>): Promise<void> {\n const plugins = this.getDependencyOrder();\n\n for (const plugin of plugins) {\n try {\n await plugin.initialize(context);\n this.initializedPlugins.add(plugin.name);\n } catch (error) {\n console.error(`Failed to initialize plugin \"${plugin.name}\":`, error);\n throw error;\n }\n }\n }\n\n /**\n * Cleanup all plugins\n */\n async cleanupPlugins(): Promise<void> {\n const plugins = this.getDependencyOrder().reverse(); // Reverse for cleanup order\n\n for (const plugin of plugins) {\n if (this.initializedPlugins.has(plugin.name)) {\n try {\n await plugin.cleanup();\n this.initializedPlugins.delete(plugin.name);\n } catch (error) {\n console.error(`Error cleaning up plugin \"${plugin.name}\":`, error);\n }\n }\n }\n }\n\n /**\n * Render all plugins\n */\n renderPlugins(): React.ReactNode[] {\n return this.getEnabledPlugins()\n .filter(plugin => this.initializedPlugins.has(plugin.name))\n .map(plugin => plugin.render());\n }\n\n /**\n * Check if plugin is initialized\n */\n isPluginInitialized(name: string): boolean {\n return this.initializedPlugins.has(name);\n }\n\n /**\n * Get plugin count\n */\n getPluginCount(): number {\n return this.plugins.size;\n }\n\n /**\n * Get initialized plugin count\n */\n getInitializedPluginCount(): number {\n return this.initializedPlugins.size;\n }\n\n /**\n * Check if plugin has dependencies\n */\n hasDependencies(name: string): boolean {\n const plugin = this.plugins.get(name);\n return plugin ? !!(plugin.dependencies && plugin.dependencies.length > 0) : false;\n }\n\n /**\n * Get plugin dependencies\n */\n getPluginDependencies(name: string): string[] {\n const plugin = this.plugins.get(name);\n return plugin?.dependencies || [];\n }\n\n /**\n * Check if all dependencies are satisfied\n */\n areDependenciesSatisfied(name: string): boolean {\n const dependencies = this.getPluginDependencies(name);\n return dependencies.every(dep => this.plugins.has(dep));\n }\n\n /**\n * Get plugins that depend on a specific plugin\n */\n getDependents(name: string): DataTablePlugin<TData>[] {\n return Array.from(this.plugins.values()).filter(plugin => \n plugin.dependencies?.includes(name)\n );\n }\n\n /**\n * Validate plugin dependencies\n */\n validateDependencies(): { valid: boolean; errors: string[] } {\n const errors: string[] = [];\n\n for (const [name, plugin] of this.plugins) {\n if (plugin.dependencies) {\n for (const dependency of plugin.dependencies) {\n if (!this.plugins.has(dependency)) {\n errors.push(`Plugin \"${name}\" depends on \"${dependency}\" which is not registered`);\n }\n }\n }\n }\n\n return {\n valid: errors.length === 0,\n errors\n };\n }\n} ","/**\n * @file Export Utilities for DataTable\n * @package @jmruthers/pace-core\n * @module DataTable\n * @since 0.1.0\n * \n * Utility functions for exporting DataTable data to CSV format.\n * Provides automatic column mapping and data formatting.\n * \n * Features:\n * - CSV export with headers\n * - Automatic column mapping\n * - Data sanitization\n * - Custom filename support\n * - Browser download handling\n * \n * @example\n * ```tsx\n * // Basic export\n * exportToCSV(\n * tableData,\n * columns,\n * 'export.csv'\n * );\n * ```\n * \n * @example\n * ```tsx\n * // With custom column mapping\n * const columns = [\n * { accessorKey: 'name', header: 'Full Name' },\n * { accessorKey: 'email', header: 'Email Address' },\n * { accessorKey: 'role', header: 'User Role' }\n * ];\n * \n * exportToCSV(users, columns, 'users.csv');\n * ```\n */\n\n/**\n * Generates CSV content from data without triggering download\n * \n * @param data - Array of data objects to export\n * @param columns - Column definitions for mapping\n * @param options - Export options\n * @returns CSV content as string\n */\nexport function generateCSVContent<TData>(\n data: TData[],\n columns: any[],\n options: { includeHeaders?: boolean } = {}\n): string {\n if (!data.length) return '';\n\n const { includeHeaders = true } = options;\n\n // Create CSV header row\n const headers = columns.map(col => col.header || col.id || \"Column\");\n \n // Format data into CSV rows\n const csvData = data.map(row => {\n return columns.map(col => {\n const key = col.accessorKey || col.id;\n const value = (row as any)[key];\n // Escape commas and quotes\n const escapedValue = String(value || '').replace(/\"/g, '\"\"');\n return `\"${escapedValue}\"`;\n }).join(\",\");\n });\n \n // Combine header and data\n const csvContent = includeHeaders \n ? [headers.join(\",\"), ...csvData].join(\"\\n\")\n : csvData.join(\"\\n\");\n \n return csvContent;\n}\n\n/**\n * Exports DataTable data to CSV format\n * \n * @param data - Array of data objects to export\n * @param columns - Column definitions for mapping\n * @param filename - Optional filename for download (default: \"download.csv\")\n * \n * @example\n * ```tsx\n * // Export user data\n * const users = [\n * { id: 1, name: 'John Doe', email: 'john@example.com' },\n * { id: 2, name: 'Jane Smith', email: 'jane@example.com' }\n * ];\n * \n * const columns = [\n * { accessorKey: 'name', header: 'Name' },\n * { accessorKey: 'email', header: 'Email' }\n * ];\n * \n * exportToCSV(users, columns, 'users.csv');\n * ```\n * \n * @remarks\n * - Automatically handles special characters in data\n * - Uses column headers for CSV headers\n * - Sanitizes data to prevent CSV injection\n * - Triggers browser download\n */\nexport function exportToCSV<TData>(\n data: TData[],\n columns: any[],\n filename: string = \"download.csv\"\n): void {\n const csvContent = generateCSVContent(data, columns);\n \n // Create and trigger download\n const blob = new Blob([csvContent], { type: \"text/csv;charset=utf-8;\" });\n const link = document.createElement(\"a\");\n const url = URL.createObjectURL(blob);\n \n link.setAttribute(\"href\", url);\n link.setAttribute(\"download\", filename);\n link.style.display = \"none\";\n document.body.appendChild(link);\n link.click();\n document.body.removeChild(link);\n}\n","/**\n * @file Local Data Adapter\n * @package @jmruthers/pace-core\n * @module Components/DataTable/Architecture/Adapters\n * @since 0.3.0\n */\n\nimport type { DataAdapter, FetchOptions, ExportFormat, ExportOptions } from './interfaces';\nimport type { DataRecord } from '../types';\nimport { generateCSVContent } from '../utils/exportUtils';\n\n/**\n * Local data adapter for in-memory data operations\n * Implements DataAdapter interface for local data management\n */\nexport class LocalDataAdapter<TData extends DataRecord = DataRecord> implements DataAdapter<TData> {\n public name = 'local';\n private data: TData[] = [];\n private error: Error | null = null;\n\n constructor(initialData: TData[] = []) {\n this.data = [...initialData];\n }\n\n /**\n * Fetch data with filtering, sorting, and pagination\n */\n async fetchData(options: FetchOptions = {}): Promise<TData[]> {\n try {\n this.error = null;\n let result = [...this.data];\n\n // Apply search filter\n if (options.search) {\n const searchTerm = options.search.toLowerCase();\n result = result.filter(item =>\n Object.values(item).some(value =>\n String(value).toLowerCase().includes(searchTerm)\n )\n );\n }\n\n // Apply column filters\n if (options.filters) {\n result = result.filter(item => {\n return Object.entries(options.filters!).every(([key, value]) => {\n const itemValue = item[key];\n if (value === null || value === undefined) return true;\n if (typeof value === 'string') {\n return String(itemValue).toLowerCase().includes(value.toLowerCase());\n }\n return itemValue === value;\n });\n });\n }\n\n // Apply sorting\n if (options.sortBy) {\n result.sort((a, b) => {\n const aValue = a[options.sortBy!];\n const bValue = b[options.sortBy!];\n \n if (aValue < bValue) return options.sortDirection === 'desc' ? 1 : -1;\n if (aValue > bValue) return options.sortDirection === 'desc' ? -1 : 1;\n return 0;\n });\n }\n\n // Apply pagination\n if (options.page !== undefined && options.pageSize) {\n const start = options.page * options.pageSize;\n const end = start + options.pageSize;\n result = result.slice(start, end);\n }\n\n return result;\n } catch (error) {\n this.error = error as Error;\n throw error;\n }\n }\n\n /**\n * Update a data item\n */\n async updateData(id: string, data: Partial<TData>): Promise<void> {\n try {\n this.error = null;\n const index = this.data.findIndex(item => this.getRowId(item) === id);\n \n if (index === -1) {\n throw new Error(`Item with ID \"${id}\" not found`);\n }\n\n this.data[index] = { ...this.data[index], ...data };\n } catch (error) {\n this.error = error as Error;\n throw error;\n }\n }\n\n /**\n * Delete a data item\n */\n async deleteData(id: string): Promise<void> {\n try {\n this.error = null;\n const index = this.data.findIndex(item => this.getRowId(item) === id);\n \n if (index === -1) {\n throw new Error(`Item with ID \"${id}\" not found`);\n }\n\n this.data.splice(index, 1);\n } catch (error) {\n this.error = error as Error;\n throw error;\n }\n }\n\n /**\n * Create a new data item\n */\n async createData(data: Partial<TData>): Promise<TData> {\n try {\n this.error = null;\n const newItem = {\n id: this.generateId(),\n ...data,\n } as unknown as TData;\n\n this.data.push(newItem);\n return newItem;\n } catch (error) {\n this.error = error as Error;\n throw error;\n }\n }\n\n /**\n * Export data in specified format\n */\n async exportData(format: ExportFormat, options: ExportOptions = {}): Promise<string> {\n try {\n this.error = null;\n \n switch (format) {\n case 'csv':\n return this.exportToCSV(options);\n case 'json':\n return this.exportToJSON(options);\n case 'xlsx':\n return this.exportToXLSX(options);\n default:\n throw new Error(`Unsupported export format: ${format}`);\n }\n } catch (error) {\n this.error = error as Error;\n throw error;\n }\n }\n\n /**\n * Import data\n */\n async importData(data: TData[]): Promise<void> {\n try {\n this.error = null;\n this.data = [...data];\n } catch (error) {\n this.error = error as Error;\n throw error;\n }\n }\n\n /**\n * Check if adapter is connected\n */\n isConnected(): boolean {\n return true; // Local adapter is always connected\n }\n\n /**\n * Get current error\n */\n getError(): Error | null {\n return this.error;\n }\n\n /**\n * Set data directly\n */\n setData(data: TData[]): void {\n this.data = [...data];\n }\n\n /**\n * Get all data without filtering\n */\n getAllData(): TData[] {\n return [...this.data];\n }\n\n /**\n * Get data count\n */\n getDataCount(): number {\n return this.data.length;\n }\n\n /**\n * Clear all data\n */\n clearData(): void {\n this.data = [];\n }\n\n /**\n * Get row ID from data item\n */\n private getRowId(item: TData): string {\n return (item as any).id || (item as any).key || JSON.stringify(item);\n }\n\n /**\n * Generate unique ID\n */\n private generateId(): string {\n return `id-${Date.now()}-${Math.random().toString(36).substr(2, 9)}`;\n }\n\n /**\n * Export to CSV format\n */\n private exportToCSV(options: ExportOptions): string {\n if (this.data.length === 0) return '';\n\n // Create column definitions from data keys\n const columns = Object.keys(this.data[0]).map(key => ({\n accessorKey: key,\n header: key\n }));\n\n return generateCSVContent(this.data, columns, {\n includeHeaders: options.includeHeaders\n });\n }\n\n /**\n * Export to JSON format\n */\n private exportToJSON(options: ExportOptions): string {\n return JSON.stringify(this.data, null, 2);\n }\n\n /**\n * Export to XLSX format (simplified - returns JSON for now)\n */\n private exportToXLSX(options: ExportOptions): string {\n // In a real implementation, you would use a library like xlsx\n // For now, return JSON format\n return this.exportToJSON(options);\n }\n} ","/**\n * @file DataTable Context\n * @package @jmruthers/pace-core\n * @module Components/DataTable/Architecture\n * @since 0.3.0\n */\n\nimport React, { createContext, useContext, useMemo, useCallback, useRef, useEffect } from 'react';\nimport { useReactTable, getCoreRowModel, getFilteredRowModel, getSortedRowModel, getPaginationRowModel } from '@tanstack/react-table';\nimport { ChevronDown, ChevronUp, ChevronsUpDown, Filter, MoreHorizontal, Plus, Search, Settings, Trash2, Upload, Download, Eye, Edit, Copy } from 'lucide-react';\nimport { Button } from '../../Button/Button';\nimport { Input } from '../../Input/Input';\nimport { Checkbox } from '../../Checkbox/Checkbox';\n// DropdownMenu components have been merged into Select components\nimport { Dialog, DialogContent, DialogDescription, DialogHeader, DialogTitle, DialogTrigger } from '../../Dialog/Dialog';\nimport type { DataTableContext as IDataTableContext, DataTableConfig, DataTableUtils } from './interfaces';\nimport type { DataRecord } from '../types';\nimport { DataManager } from './DataManager';\nimport { ColumnManagerImpl } from './ColumnManager';\nimport { ActionManagerImpl } from './ActionManager';\nimport { StateManagerImpl } from './StateManager';\nimport { PluginRegistryImpl } from './PluginRegistry';\nimport { LocalDataAdapter } from './LocalDataAdapter';\n\n// Create the context\nconst DataTableContext = createContext<IDataTableContext<any> | null>(null);\n\n/**\n * DataTable provider component\n */\nexport interface DataTableProviderProps<TData extends DataRecord> {\n children: React.ReactNode;\n config: DataTableConfig<TData>;\n data?: TData[];\n columns?: any[];\n actions?: any[];\n pageSize?: number;\n}\n\nexport function DataTableProvider<TData extends DataRecord>({\n children,\n config,\n data = [],\n columns = [],\n actions = [],\n pageSize = 10,\n}: DataTableProviderProps<TData>) {\n // Create managers\n const adapter = useMemo(() => new LocalDataAdapter<TData>(data), [data]);\n const dataManager = useMemo(() => new DataManager<TData>(adapter), [adapter]);\n const columnManager = useMemo(() => new ColumnManagerImpl<TData>(columns), [columns]);\n const actionManager = useMemo(() => new ActionManagerImpl<TData>(actions), [actions]);\n const stateManager = useMemo(() => new StateManagerImpl<TData>({\n ui: {\n globalFilter: '',\n columnFilters: [],\n sorting: [],\n grouping: [],\n expanded: {},\n pagination: {\n pageIndex: 0,\n pageSize: pageSize,\n },\n rowSelection: {},\n editing: {\n rowId: null,\n data: {},\n isCreating: false,\n creationData: {},\n },\n modals: {\n import: false,\n export: false,\n view: false,\n viewData: null,\n },\n }\n }), [pageSize]);\n const pluginRegistry = useMemo(() => new PluginRegistryImpl<TData>(), []);\n\n // Create utilities\n const utils: DataTableUtils<TData> = useMemo(() => ({\n getRowId: (row: TData, index: number) => (row as any).id || String(index),\n formatValue: (value: any, column: any) => String(value),\n validateData: (data: Partial<TData>) => null,\n debounce: <T extends (...args: any[]) => any>(func: T, delay: number) => {\n let timeoutId: NodeJS.Timeout;\n return ((...args: any[]) => {\n clearTimeout(timeoutId);\n timeoutId = setTimeout(() => func(...args), delay);\n }) as T;\n },\n }), []);\n\n // Create context value\n const contextValue: IDataTableContext<TData> = useMemo(() => ({\n dataManager,\n columnManager,\n actionManager,\n stateManager,\n pluginRegistry,\n adapter,\n observable: stateManager,\n config,\n utils,\n }), [dataManager, columnManager, actionManager, stateManager, pluginRegistry, adapter, config, utils]);\n\n // Initialize data\n useEffect(() => {\n // Update the adapter with new data\n adapter.setData(data);\n \n if (data.length > 0) {\n stateManager.updateData(data);\n } else {\n // Handle empty data case\n stateManager.updateData([]);\n }\n }, [data, dataManager, stateManager, adapter]);\n\n // Initialize columns\n useEffect(() => {\n if (columns.length > 0) {\n columnManager.setColumns(columns);\n stateManager.updateColumns(columns);\n }\n }, [columns, columnManager, stateManager]);\n\n // Initialize actions\n useEffect(() => {\n if (actions.length > 0) {\n actionManager.setActions(actions);\n stateManager.updateActions(actions);\n }\n }, [actions, actionManager, stateManager]);\n\n return (\n <DataTableContext.Provider value={contextValue}>\n {children}\n </DataTableContext.Provider>\n );\n}\n\n/**\n * Hook to use DataTable context\n */\nexport function useDataTableContext<TData extends DataRecord = DataRecord>(): IDataTableContext<TData> {\n const context = useContext(DataTableContext);\n if (!context) {\n throw new Error('useDataTableContext must be used within a DataTableProvider');\n }\n return context as IDataTableContext<TData>;\n}\n\n/**\n * Hook to use specific managers\n */\nexport function useDataManager<TData extends DataRecord = DataRecord>() {\n const context = useDataTableContext<TData>();\n return context.dataManager;\n}\n\nexport function useColumnManager<TData extends DataRecord = DataRecord>() {\n const context = useDataTableContext<TData>();\n return context.columnManager;\n}\n\nexport function useActionManager<TData extends DataRecord = DataRecord>() {\n const context = useDataTableContext<TData>();\n return context.actionManager;\n}\n\nexport function useStateManager<TData extends DataRecord = DataRecord>() {\n const context = useDataTableContext<TData>();\n return context.stateManager;\n}\n\nexport function usePluginRegistry<TData extends DataRecord = DataRecord>() {\n const context = useDataTableContext<TData>();\n return context.pluginRegistry;\n} ","/**\n * @file Bulk Operations Dropdown Component\n * @package @jmruthers/pace-core\n * @module Components/DataTable/Components\n * @since 0.4.0\n * \n * A dropdown component for bulk operations on selected rows in the DataTable.\n * Provides a clean interface for performing actions on multiple selected rows.\n * \n * Features:\n * - Dynamic operation list based on configuration\n * - Disabled state when no rows are selected\n * - Consistent styling with other toolbar components\n * - Accessible dropdown interface\n * - Clear operation feedback\n * \n * @example\n * ```tsx\n * <BulkOperationsDropdown\n * operations={['export', 'delete']}\n * selectedRows={rowSelection}\n * onOperation={(operation, rows) => {\n * switch (operation) {\n * case 'export': exportRows(rows); break;\n * case 'delete': deleteRows(rows); break;\n * }\n * }}\n * />\n * ```\n * \n * @accessibility\n * - Proper ARIA labels and descriptions\n * - Keyboard navigation support\n * - Screen reader friendly\n * - High contrast support\n * \n * @dependencies\n * - Select components (formerly DropdownMenu)\n * - Button component\n * - Lucide React icons\n * - React 18+ hooks\n */\n\nimport React from 'react';\nimport { \n Select, \n SelectContent, \n SelectItem, \n SelectTrigger \n} from '../../Select/Select';\nimport { Button } from '../../Button/Button';\nimport { \n MoreHorizontal, \n Download, \n Trash \n} from 'lucide-react';\n\n/**\n * Props for the BulkOperationsDropdown component\n */\nexport interface BulkOperationsDropdownProps {\n /** Available bulk operations */\n operations: ('delete' | 'export')[];\n /** Currently selected rows */\n selectedRows: Record<string, boolean>;\n /** Handler for bulk operations */\n onOperation?: (operation: string, selectedRows: any[]) => void;\n /** Custom class names */\n className?: string;\n}\n\n/**\n * Bulk operations dropdown for DataTable toolbar\n * \n * This component provides a dropdown menu for performing bulk operations\n * on selected rows. It automatically disables when no rows are selected\n * and provides clear visual feedback for each operation type.\n * \n * @param props - Component configuration\n * @returns JSX.Element - The rendered dropdown component\n */\nexport function BulkOperationsDropdown({\n operations,\n selectedRows = {},\n onOperation,\n className,\n}: BulkOperationsDropdownProps) {\n // Handle null/undefined selectedRows gracefully\n const safeSelectedRows = selectedRows || {};\n const hasSelection = Object.values(safeSelectedRows).some(Boolean);\n const selectedCount = Object.values(safeSelectedRows).filter(Boolean).length;\n\n // Icon mapping for operations\n const operationIcons = {\n export: Download,\n delete: Trash,\n };\n\n // Label mapping for operations\n const operationLabels = {\n export: 'Export Selected',\n delete: 'Delete',\n };\n\n // Variant mapping for operations\n const operationVariants = {\n export: 'outline',\n delete: 'destructive',\n } as const;\n\n const handleOperation = (operation: string) => {\n if (onOperation && hasSelection) {\n // Convert selectedRows to array of selected data\n const selectedData = Object.entries(selectedRows)\n .filter(([_, selected]) => selected)\n .map(([key, _]) => key);\n onOperation(operation, selectedData);\n }\n };\n\n return (\n <Select disabled={!hasSelection}>\n <SelectTrigger asChild>\n <Button \n variant=\"outline\" \n size=\"sm\"\n disabled={!hasSelection}\n className={`min-w-[140px] h-9 px-3 py-2 text-sm font-medium ${className || ''}`}\n >\n <MoreHorizontal className=\"h-4 w-4 mr-2 flex-shrink-0\" />\n <span className=\"truncate\">\n Bulk Actions ({selectedCount})\n </span>\n </Button>\n </SelectTrigger>\n <SelectContent className=\"w-48 !bg-main-50 border border-sec-200 shadow-lg z-[9999]\" style={{ backgroundColor: 'white' }}>\n {operations.map((operation) => {\n const Icon = operationIcons[operation];\n const label = operationLabels[operation];\n const variant = operationVariants[operation];\n\n return (\n <SelectItem\n key={operation}\n value={operation}\n onClick={() => handleOperation(operation)}\n disabled={!hasSelection}\n className={`flex items-center gap-2 ${\n variant === 'destructive' ? 'text-destructive focus:text-destructive' : ''\n }`}\n >\n <Icon className=\"h-4 w-4\" />\n <span>{label}</span>\n </SelectItem>\n );\n })}\n </SelectContent>\n </Select>\n );\n}\n","import React from 'react';\nimport { Row } from '@tanstack/react-table';\nimport { Button } from '../../Button/Button';\nimport { ChevronDown, ChevronRight } from 'lucide-react';\n\ninterface GroupHeaderProps<TData> {\n row: Row<TData>;\n groupByColumn: string;\n isExpanded: boolean;\n onToggle: () => void;\n subRowsCount: number;\n}\n\nexport function GroupHeader<TData>({ \n row, \n groupByColumn, \n isExpanded, \n onToggle, \n subRowsCount \n}: GroupHeaderProps<TData>) {\n const groupValue = row.getValue(groupByColumn);\n \n return (\n <div className=\"flex items-center py-2 px-4 bg-muted/50 border-b font-medium\">\n <Button\n variant=\"ghost\"\n size=\"sm\"\n onClick={onToggle}\n className=\"p-0 h-auto mr-2\"\n >\n {isExpanded ? (\n <ChevronDown className=\"h-4 w-4\" />\n ) : (\n <ChevronRight className=\"h-4 w-4\" />\n )}\n </Button>\n <span className=\"text-sm\">\n {String(groupValue)} ({subRowsCount} items)\n </span>\n </div>\n );\n}\n","import React from 'react';\nimport { flexRender } from '@tanstack/react-table';\nimport { ActionButtons } from './ActionButtons';\nimport { Input } from '../../Input/Input';\nimport { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from '../../Select/Select';\nimport { Button } from '../../Button/Button';\nimport type { DataTableAction, DataRecord } from '../types';\n\ninterface EditableRowProps<TData extends DataRecord> {\n row: any;\n editingData: Record<string, any>;\n onEditingDataChange: (data: Record<string, any>) => void;\n onSave: () => void;\n onCancel: () => void;\n actions: DataTableAction<TData>[];\n getRowId?: (row: TData, index: number) => string;\n isParent?: boolean;\n hierarchical?: boolean;\n}\n\n// Helper function to render the appropriate input type based on column configuration\nconst renderEditField = (\n column: any,\n value: any,\n onChange: (value: any) => void,\n editingData: Record<string, any> = {},\n placeholder?: string\n) => {\n const columnDef = column.columnDef;\n \n // Check for custom field type\n if (columnDef.fieldType === 'select' && columnDef.fieldOptions) {\n // Use editAccessorKey if specified, otherwise use the column id\n const editKey = columnDef.editAccessorKey || column.id;\n const editValue = editingData[editKey] || value;\n \n return (\n <Select\n value={String(editValue || '')}\n onValueChange={(newValue) => {\n // If editAccessorKey is specified, update that field instead\n if (columnDef.editAccessorKey) {\n onChange({ [columnDef.editAccessorKey]: Number(newValue) });\n } else {\n onChange(newValue);\n }\n }}\n >\n <SelectTrigger className=\"w-full h-7\">\n <SelectValue placeholder={placeholder || `Select ${column.id}`} />\n </SelectTrigger>\n <SelectContent>\n {columnDef.fieldOptions.map((option: any) => (\n <SelectItem key={option.value} value={String(option.value)}>\n {option.label}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n );\n }\n \n if (columnDef.fieldType === 'date') {\n return (\n <Input\n type=\"date\"\n value={value || ''}\n onChange={(e) => onChange(e.target.value)}\n className=\"w-full h-7\"\n />\n );\n }\n \n // Default to text input\n return (\n <Input\n type=\"text\"\n value={value || ''}\n onChange={(e) => onChange(e.target.value)}\n className=\"w-full h-7\"\n placeholder={placeholder || `Enter ${column.id}`}\n />\n );\n};\n\nexport function EditableRow<TData extends DataRecord>({\n row,\n editingData,\n onEditingDataChange,\n onSave,\n onCancel,\n actions,\n getRowId,\n isParent = false,\n hierarchical = false,\n}: EditableRowProps<TData>) {\n const rowId = getRowId ? getRowId(row.original, row.index) : String(row.id);\n\n // Convert DataTableAction to ActionButtons format with proper disabled handling\n const convertedActions = actions.map(action => ({\n label: action.label,\n onClick: action.onClick,\n icon: action.icon,\n variant: action.variant === 'destructive' ? 'destructive' as const : 'default' as const,\n disabled: action.disabled ? ((row?: any) => action.disabled!(row)) : false,\n testId: action.testId || `action-${action.label.toLowerCase().replace(/\\s+/g, '-')}-${rowId}`,\n visible: true,\n }));\n\n return (\n <tr>\n {row.getVisibleCells().map((cell: any) => (\n <td key={cell.id}>\n {cell.column.id !== 'actions' ? (\n renderEditField(cell.column, editingData[cell.column.id], (value) => {\n if (typeof value === 'object' && value !== null) {\n // Handle editAccessorKey case\n onEditingDataChange({ ...editingData, ...value });\n } else {\n // Handle simple value case\n onEditingDataChange({ ...editingData, [cell.column.id]: value });\n }\n }, editingData)\n ) : (\n <div className=\"flex gap-1\">\n <Button\n onClick={onSave}\n size=\"sm\"\n variant=\"default\"\n >\n Save\n </Button>\n <Button\n onClick={onCancel}\n size=\"sm\"\n variant=\"outline\"\n >\n Cancel\n </Button>\n </div>\n )}\n </td>\n ))}\n {actions.length > 0 && (\n <td>\n <ActionButtons\n row={row.original}\n rowId={rowId}\n index={row.index}\n actions={convertedActions}\n isEditing={true}\n isParent={isParent}\n hierarchical={hierarchical}\n />\n </td>\n )}\n </tr>\n );\n}\n"],"mappings":"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","names":["React","React","useMemo","useCallback","useEffect","useState","useRef","ChevronUp","ChevronDown","React","jsx","React","Check","jsx","children","jsx","jsxs","jsx","jsxs","jsx","jsxs","React","useRef","ChevronDown","Search","Plus","jsx","jsxs","X","jsx","jsxs","jsx","jsx","jsxs","jsx","jsxs","jsxs","jsx","React","ChevronDown","useRef","React","ChevronRight","Database","Fragment","jsx","jsxs","Database","ChevronRight","React","jsx","jsxs","useState","useRef","useEffect","Upload","jsx","jsxs","useState","useRef","useEffect","Fragment","jsx","React","React","jsx","Fragment","jsx","jsxs","useState","useEffect","useCallback","useState","useCallback","useMemo","useEffect","useCallback","useMemo","sortHierarchicalData","Fragment","jsx","jsxs","useState","useMemo","useRef","useCallback","sortHierarchicalData","table","useEffect","ChevronUp","ChevronDown","data","React","jsx","React","createContext","useContext","useMemo","useEffect","jsx","createContext","useMemo","data","useEffect","useContext","MoreHorizontal","Download","Trash","jsx","jsxs","ChevronDown","ChevronRight","jsx","jsxs","jsx","jsxs","renderEditField","row"]}