@jmruthers/pace-core 0.6.9 → 0.6.10

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 (665) hide show
  1. package/audit-tool/audits/02-project-structure.cjs +62 -0
  2. package/audit-tool/audits/03-architecture.cjs +145 -19
  3. package/audit-tool/audits/04-code-quality.cjs +86 -1
  4. package/audit-tool/audits/06-security-rbac.cjs +109 -11
  5. package/cursor-rules/02-project-structure.mdc +2 -26
  6. package/cursor-rules/05-styling.mdc +84 -6
  7. package/cursor-rules/06-security-rbac.mdc +124 -1
  8. package/dist/{DataTable-SOAFXIWY.js → DataTable-SAXFG4XI.js} +11 -13
  9. package/dist/{AuthService-DmfO5rGS.d.ts → InactivityServiceProvider-DHryoh6K.d.ts} +24 -249
  10. package/dist/UnifiedAuthProvider-BBD2PS3Q.js +7 -0
  11. package/dist/{UnifiedAuthProvider-CKvHP1MK.d.ts → UnifiedAuthProvider-CiBAl9-s.d.ts} +34 -22
  12. package/dist/{api-7P7DI652.js → api-F47QJ7FX.js} +3 -3
  13. package/dist/assets/app-icons/admin_favicon.svg +462 -0
  14. package/dist/assets/app-icons/base_favicon.svg +85 -0
  15. package/dist/assets/app-icons/cake_favicon.svg +68 -0
  16. package/dist/assets/app-icons/core_favicon.svg +256 -0
  17. package/dist/assets/app-icons/gear_favicon.svg +91 -0
  18. package/dist/assets/app-icons/medi_favicon.svg +92 -0
  19. package/dist/assets/app-icons/mint_favicon.svg +83 -0
  20. package/dist/assets/app-icons/pace_favicon.svg +49 -0
  21. package/dist/assets/app-icons/pump_favicon.svg +68 -0
  22. package/dist/assets/app-icons/seed_favicon.svg +91 -0
  23. package/dist/assets/app-icons/team_favicon.svg +67 -0
  24. package/dist/assets/app-icons/trac_favicon.svg +112 -0
  25. package/dist/assets/app-icons/trip_favicon.svg +102 -0
  26. package/dist/audit-Z6ZZBWLU.js +3 -0
  27. package/dist/chunk-3GWSPISD.js +61 -0
  28. package/dist/{chunk-4DDCYDQ3.js → chunk-66R6RLUZ.js} +12 -27
  29. package/dist/{chunk-FYHN4DD5.js → chunk-7YDC7LMU.js} +80 -8
  30. package/dist/{chunk-S7DKJPLT.js → chunk-BCTXBU6U.js} +22 -17
  31. package/dist/{chunk-TTRFSOKR.js → chunk-BTHN5MKC.js} +4 -4
  32. package/dist/{chunk-A3W6LW53.js → chunk-DDMPHZ3D.js} +6 -18
  33. package/dist/{chunk-MPBLMWVR.js → chunk-FBZ7U3ID.js} +140 -92
  34. package/dist/chunk-FN52B75D.js +246 -0
  35. package/dist/{chunk-5W2A3DRC.js → chunk-JJEYZ3DX.js} +5 -4
  36. package/dist/chunk-KPYQWGFQ.js +183 -0
  37. package/dist/{chunk-C7ZQ5O4C.js → chunk-KSNLMI7N.js} +3 -3
  38. package/dist/chunk-KYURMOQM.js +977 -0
  39. package/dist/{chunk-LX6U42O3.js → chunk-LNHFAF4X.js} +160 -58
  40. package/dist/{chunk-J2U36LHD.js → chunk-MPY44PWB.js} +620 -627
  41. package/dist/{chunk-AHU7G2R5.js → chunk-NIU6DPQV.js} +10 -6
  42. package/dist/{chunk-HF6O3O37.js → chunk-RMLY6KB5.js} +1 -1
  43. package/dist/{chunk-6GLLNA6U.js → chunk-SACF5YSM.js} +1 -1
  44. package/dist/{chunk-5HNSDQWH.js → chunk-TFIPNIPE.js} +865 -532
  45. package/dist/{chunk-OJ4SKRSV.js → chunk-UZNAFKGW.js} +25 -5
  46. package/dist/chunk-W46INAVW.js +1216 -0
  47. package/dist/chunk-X5EAU5G7.js +793 -0
  48. package/dist/{chunk-T5CVK4R3.js → chunk-Y4PF6HIM.js} +110 -64
  49. package/dist/components.d.ts +8 -86
  50. package/dist/components.js +21 -55
  51. package/dist/eslint-rules/rules/05-styling.cjs +507 -0
  52. package/dist/eslint-rules/rules/06-security-rbac.cjs +10 -0
  53. package/dist/{event-CW5YB_2p.d.ts → event-WTAQuGcq.d.ts} +1 -1
  54. package/dist/{functions-lBy5L2ry.d.ts → functions-DH45k8ec.d.ts} +1 -1
  55. package/dist/hooks.d.ts +11 -10
  56. package/dist/hooks.js +69 -44
  57. package/dist/index.d.ts +379 -31
  58. package/dist/index.js +46 -32
  59. package/dist/papaparseLoader-WG2UXQ22.js +7 -0
  60. package/dist/providers.d.ts +28 -14
  61. package/dist/providers.js +5 -5
  62. package/dist/rbac/eslint-rules.js +2 -2
  63. package/dist/rbac/index.d.ts +57 -213
  64. package/dist/rbac/index.js +11 -11
  65. package/dist/theming/runtime.d.ts +9 -3
  66. package/dist/theming/runtime.js +2 -2
  67. package/dist/{timezone-0AyangqX.d.ts → timezone-K-ptz3HO.d.ts} +21 -22
  68. package/dist/{types-t9H8qKRw.d.ts → types-BE2sEHKd.d.ts} +1 -1
  69. package/dist/{types-BeoeWV5I.d.ts → types-CvOPXWWZ.d.ts} +6 -5
  70. package/dist/{types-DXstZpNI.d.ts → types-D05dCGma.d.ts} +56 -149
  71. package/dist/types-Dr8sNhER.d.ts +50 -0
  72. package/dist/types.d.ts +4 -4
  73. package/dist/{PublicPageProvider-CIGSujI2.d.ts → usePublicPageContext-vxBlEHO9.d.ts} +294 -151
  74. package/dist/{usePublicRouteParams-DQLrDqDb.d.ts → usePublicRouteParams-G3Ks53mk.d.ts} +7 -6
  75. package/dist/utils.d.ts +300 -136
  76. package/dist/utils.js +42 -41
  77. package/dist/{validation-643vUDZW.d.ts → validation-g5n0hDkh.d.ts} +2 -2
  78. package/docs/api/modules.md +542 -549
  79. package/docs/api-reference/components.md +5 -5
  80. package/docs/implementation-guides/data-tables.md +190 -8
  81. package/docs/rbac/RBAC_CONTRACT.md +0 -12
  82. package/docs/standards/2-project-structure-standards.md +12 -74
  83. package/docs/standards/6-security-rbac-standards.md +222 -7
  84. package/docs/standards/7-api-tech-stack-standards.md +91 -3
  85. package/docs/testing/README.md +10 -0
  86. package/docs/testing/test-setup-for-consumers.md +914 -0
  87. package/eslint-config-pace-core.cjs +4 -0
  88. package/package.json +1 -1
  89. package/scripts/eslint-audit.cjs +110 -11
  90. package/src/__mocks__/lucide-react.ts +0 -2
  91. package/src/__tests__/helpers/__tests__/test-utils.test.tsx +0 -2
  92. package/src/__tests__/index.test.ts +532 -0
  93. package/src/__tests__/integration/UserProfile.test.tsx +1 -1
  94. package/src/__tests__/rbac/PagePermissionGuard.test.tsx +10 -8
  95. package/src/__tests__/rls-policies.test.ts +3 -2
  96. package/src/assets/app-icons/admin_favicon.svg +462 -0
  97. package/src/assets/app-icons/base_favicon.svg +85 -0
  98. package/src/assets/app-icons/cake_favicon.svg +68 -0
  99. package/src/assets/app-icons/core_favicon.svg +256 -0
  100. package/src/assets/app-icons/gear_favicon.svg +91 -0
  101. package/src/assets/app-icons/index.ts +83 -0
  102. package/src/assets/app-icons/medi_favicon.svg +92 -0
  103. package/src/assets/app-icons/mint_favicon.svg +83 -0
  104. package/src/assets/app-icons/pace_favicon.svg +49 -0
  105. package/src/assets/app-icons/pump_favicon.svg +68 -0
  106. package/src/assets/app-icons/seed_favicon.svg +91 -0
  107. package/src/assets/app-icons/team_favicon.svg +67 -0
  108. package/src/assets/app-icons/trac_favicon.svg +112 -0
  109. package/src/assets/app-icons/trip_favicon.svg +102 -0
  110. package/src/components/AddressField/AddressField.test.tsx +378 -3
  111. package/src/components/AddressField/AddressField.tsx +2 -2
  112. package/src/components/AddressField/types.ts +2 -2
  113. package/src/components/Alert/Alert.test.tsx +35 -25
  114. package/src/components/Alert/Alert.tsx +8 -8
  115. package/src/components/AppSwitcher/AppSwitcher.test.tsx +1250 -0
  116. package/src/components/AppSwitcher/AppSwitcher.tsx +315 -0
  117. package/src/components/Avatar/Avatar.test.tsx +11 -1
  118. package/src/components/Avatar/Avatar.tsx +3 -2
  119. package/src/components/Badge/Badge.test.tsx +11 -1
  120. package/src/components/Button/Button.test.tsx +13 -3
  121. package/src/components/Calendar/Calendar.test.tsx +523 -131
  122. package/src/components/Calendar/Calendar.tsx +107 -488
  123. package/src/components/Card/Card.test.tsx +220 -249
  124. package/src/components/Checkbox/Checkbox.test.tsx +58 -174
  125. package/src/components/ContextSelector/ContextSelector.tsx +3 -3
  126. package/src/components/ContextSelector/__tests__/ContextSelector.test.tsx +360 -0
  127. package/src/components/DataTable/DataTable.tsx +2 -2
  128. package/src/components/DataTable/__tests__/DataTable.comprehensive.test.tsx +1 -1
  129. package/src/components/DataTable/__tests__/DataTable.export.test.tsx +2 -2
  130. package/src/components/DataTable/__tests__/DataTable.grouping-aggregation.test.tsx +1 -1
  131. package/src/components/DataTable/__tests__/DataTable.select-label-display.test.tsx +16 -14
  132. package/src/components/DataTable/__tests__/DataTable.test.tsx +2 -2
  133. package/src/components/DataTable/__tests__/DataTableCore.test-setup.ts +1 -1
  134. package/src/components/DataTable/__tests__/DataTableCore.test.tsx +76 -580
  135. package/src/components/DataTable/__tests__/README.md +1 -1
  136. package/src/components/DataTable/__tests__/a11y.basic.test.tsx +1 -1
  137. package/src/components/DataTable/__tests__/keyboard.test.tsx +1 -1
  138. package/src/components/DataTable/__tests__/pagination.modes.test.tsx +1 -3
  139. package/src/components/DataTable/__tests__/ssr.strict-mode.test.tsx +0 -6
  140. package/src/components/DataTable/__tests__/test-utils/sharedTestUtils.tsx +14 -6
  141. package/src/components/DataTable/components/ActionButtons.tsx +9 -4
  142. package/src/components/DataTable/components/BulkOperationsDropdown.tsx +3 -3
  143. package/src/components/DataTable/components/ColumnFilter.tsx +2 -7
  144. package/src/components/DataTable/components/DataTableCore.tsx +44 -52
  145. package/src/components/DataTable/components/DataTableLayout.tsx +37 -26
  146. package/src/components/DataTable/components/DataTableModals.tsx +118 -30
  147. package/src/components/DataTable/components/DataTableToolbar.tsx +2 -2
  148. package/src/components/DataTable/components/EditFields.tsx +6 -47
  149. package/src/components/DataTable/components/EditableRow.tsx +8 -8
  150. package/src/components/DataTable/components/EmptyState.tsx +6 -3
  151. package/src/components/DataTable/components/FilterRow.tsx +18 -11
  152. package/src/components/DataTable/components/GroupingDropdown.tsx +0 -1
  153. package/src/components/DataTable/components/ImportModal.tsx +305 -133
  154. package/src/components/DataTable/components/LoadingState.tsx +2 -2
  155. package/src/components/DataTable/components/PaginationControls.tsx +0 -4
  156. package/src/components/DataTable/components/RowComponent.tsx +42 -22
  157. package/src/components/DataTable/components/UnifiedTableBody.tsx +52 -12
  158. package/src/components/DataTable/components/__tests__/AccessDeniedPage.test.tsx +51 -463
  159. package/src/components/DataTable/components/__tests__/ActionButtons.test.tsx +122 -116
  160. package/src/components/DataTable/components/__tests__/BulkOperationsDropdown.test.tsx +40 -68
  161. package/src/components/DataTable/components/__tests__/ColumnFilter.test.tsx +9 -137
  162. package/src/components/DataTable/components/__tests__/ColumnVisibilityDropdown.test.tsx +57 -17
  163. package/src/components/DataTable/components/__tests__/DataTableCore.test.tsx +792 -0
  164. package/src/components/DataTable/components/__tests__/DataTableErrorBoundary.test.tsx +24 -65
  165. package/src/components/DataTable/components/__tests__/DataTableLayout.test.tsx +467 -0
  166. package/src/components/DataTable/components/__tests__/DataTableModals.test.tsx +8 -125
  167. package/src/components/DataTable/components/__tests__/DataTableToolbar.test.tsx +528 -56
  168. package/src/components/DataTable/components/__tests__/EditFields.test.tsx +526 -0
  169. package/src/components/DataTable/components/__tests__/EditableRow.test.tsx +1 -68
  170. package/src/components/DataTable/components/__tests__/EmptyState.test.tsx +8 -25
  171. package/src/components/DataTable/components/__tests__/FilterRow.test.tsx +3 -62
  172. package/src/components/DataTable/components/__tests__/GroupingDropdown.test.tsx +9 -14
  173. package/src/components/DataTable/components/__tests__/ImportModal.test.tsx +50 -186
  174. package/src/components/DataTable/components/__tests__/LoadingState.test.tsx +39 -97
  175. package/src/components/DataTable/components/__tests__/PaginationControls.test.tsx +13 -103
  176. package/src/components/DataTable/components/__tests__/RowComponent.test.tsx +629 -0
  177. package/src/components/DataTable/components/__tests__/SortIndicator.test.tsx +135 -0
  178. package/src/components/DataTable/components/__tests__/UnifiedTableBody.test.tsx +31 -171
  179. package/src/components/DataTable/components/__tests__/cellValueUtils.test.ts +453 -0
  180. package/src/components/DataTable/components/hooks/useImportModalFocus.test.ts +184 -0
  181. package/src/components/DataTable/components/hooks/usePermissionTracking.test.ts +381 -0
  182. package/src/components/DataTable/context/DataTableContext.tsx +9 -10
  183. package/src/components/DataTable/context/__tests__/DataTableContext.test.tsx +12 -26
  184. package/src/components/DataTable/core/ColumnFactory.ts +3 -3
  185. package/src/components/DataTable/core/ColumnManager.ts +0 -1
  186. package/src/components/DataTable/core/DataManager.ts +4 -2
  187. package/src/components/DataTable/core/LocalDataAdapter.ts +1 -1
  188. package/src/components/DataTable/core/PluginRegistry.ts +2 -2
  189. package/src/components/DataTable/core/__tests__/ActionManager.test.ts +114 -2
  190. package/src/components/DataTable/core/__tests__/ColumnFactory.test.ts +103 -5
  191. package/src/components/DataTable/core/__tests__/ColumnManager.test.ts +57 -0
  192. package/src/components/DataTable/core/__tests__/DataManager.test.ts +63 -0
  193. package/src/components/DataTable/core/__tests__/LocalDataAdapter.test.ts +42 -9
  194. package/src/components/DataTable/core/__tests__/PluginRegistry.test.ts +29 -7
  195. package/src/components/DataTable/core/__tests__/StateManager.test.ts +58 -4
  196. package/src/components/DataTable/hooks/__tests__/useColumnOrderPersistence.test.ts +16 -21
  197. package/src/components/DataTable/hooks/__tests__/useColumnVisibilityPersistence.test.ts +93 -4
  198. package/src/components/DataTable/hooks/__tests__/useDataTableConfiguration.test.ts +227 -54
  199. package/src/components/DataTable/hooks/__tests__/useDataTableDataPipeline.test.ts +215 -62
  200. package/src/components/DataTable/hooks/__tests__/useDataTablePermissions.test.ts +217 -39
  201. package/src/components/DataTable/hooks/__tests__/useDataTableState.test.ts +101 -6
  202. package/src/components/DataTable/hooks/__tests__/useEffectiveColumnOrder.test.ts +157 -27
  203. package/src/components/DataTable/hooks/__tests__/useHierarchicalState.test.ts +80 -0
  204. package/src/components/DataTable/hooks/__tests__/useKeyboardNavigation.test.ts +787 -0
  205. package/src/components/DataTable/hooks/__tests__/useServerSideDataEffect.test.ts +258 -0
  206. package/src/components/DataTable/hooks/__tests__/useTableColumns.test.ts +128 -77
  207. package/src/components/DataTable/hooks/__tests__/useTableHandlers.test.ts +440 -0
  208. package/src/components/DataTable/hooks/useColumnOrderPersistence.ts +12 -9
  209. package/src/components/DataTable/hooks/useColumnVisibilityPersistence.ts +12 -9
  210. package/src/components/DataTable/hooks/useDataTableConfiguration.ts +1 -1
  211. package/src/components/DataTable/hooks/useDataTablePermissions.ts +11 -22
  212. package/src/components/DataTable/hooks/useDataTableState.ts +20 -24
  213. package/src/components/DataTable/hooks/useKeyboardNavigation.ts +5 -5
  214. package/src/components/DataTable/hooks/useServerSideDataEffect.ts +13 -1
  215. package/src/components/DataTable/hooks/useTableColumns.ts +15 -39
  216. package/src/components/DataTable/hooks/useTableHandlers.ts +8 -20
  217. package/src/components/DataTable/index.ts +24 -2
  218. package/src/components/DataTable/types.ts +6 -3
  219. package/src/components/DataTable/utils/__tests__/a11yUtils.test.ts +3 -67
  220. package/src/components/DataTable/utils/__tests__/aggregationUtils.test.ts +288 -0
  221. package/src/components/DataTable/utils/__tests__/errorHandling.test.ts +3 -60
  222. package/src/components/DataTable/utils/__tests__/flexibleImport.test.ts +1 -1
  223. package/src/components/DataTable/utils/__tests__/hierarchicalSorting.test.ts +9 -21
  224. package/src/components/DataTable/utils/__tests__/hierarchicalUtils.test.ts +102 -86
  225. package/src/components/DataTable/utils/__tests__/paginationUtils.test.ts +593 -0
  226. package/src/components/DataTable/utils/__tests__/rowUtils.test.ts +33 -49
  227. package/src/components/DataTable/utils/__tests__/selectFieldUtils.test.ts +1 -0
  228. package/src/components/DataTable/utils/a11yUtils.ts +1 -1
  229. package/src/components/DataTable/utils/aggregationUtils.ts +5 -5
  230. package/src/components/DataTable/utils/errorHandling.ts +3 -1
  231. package/src/components/DataTable/utils/exportUtils.ts +1 -1
  232. package/src/components/DataTable/utils/flexibleImport.ts +2 -2
  233. package/src/components/DataTable/utils/hierarchicalSorting.ts +3 -3
  234. package/src/components/DataTable/utils/paginationUtils.ts +1 -1
  235. package/src/components/DataTable/utils/performanceUtils.ts +1 -1
  236. package/src/components/DataTable/utils/selectFieldUtils.ts +0 -7
  237. package/src/components/DatePickerWithTimezone/DatePickerWithTimezone.test.tsx +17 -24
  238. package/src/components/DatePickerWithTimezone/DatePickerWithTimezone.tsx +1 -1
  239. package/src/components/DateTimeField/DateTimeField.test.tsx +2 -15
  240. package/src/components/DateTimeField/DateTimeField.tsx +1 -1
  241. package/src/components/Dialog/Dialog.test.tsx +2007 -407
  242. package/src/components/Dialog/Dialog.tsx +97 -192
  243. package/src/components/ErrorBoundary/ErrorBoundary.test.tsx +2 -62
  244. package/src/components/ErrorBoundary/ErrorBoundaryContext.context.ts +17 -0
  245. package/src/components/ErrorBoundary/ErrorBoundaryContext.tsx +2 -45
  246. package/src/components/ErrorBoundary/ErrorBoundaryContext.types.ts +41 -0
  247. package/src/components/ErrorBoundary/index.ts +3 -4
  248. package/src/components/ErrorBoundary/useErrorBoundaryContext.ts +20 -0
  249. package/src/components/FileDisplay/FileDisplay.test.tsx +454 -222
  250. package/src/components/FileDisplay/FileDisplay.tsx +14 -12
  251. package/src/components/FileDisplay/index.tsx +1 -1
  252. package/src/components/FileUpload/FileUpload.test.tsx +54 -18
  253. package/src/components/FileUpload/FileUpload.tsx +10 -7
  254. package/src/components/FileUpload/index.tsx +1 -1
  255. package/src/components/Footer/Footer.test.tsx +33 -114
  256. package/src/components/Form/Form.test.tsx +388 -68
  257. package/src/components/Form/Form.tsx +57 -42
  258. package/src/components/Header/Header.test.tsx +645 -154
  259. package/src/components/Header/Header.tsx +52 -43
  260. package/src/components/InactivityWarningModal/InactivityWarningModal.test.tsx +35 -76
  261. package/src/components/Input/Input.test.tsx +34 -120
  262. package/src/components/Label/Label.test.tsx +47 -46
  263. package/src/components/LoadingSpinner/LoadingSpinner.test.tsx +9 -12
  264. package/src/components/LoginForm/LoginForm.test.tsx +0 -1
  265. package/src/components/NavigationMenu/NavigationMenu.test.tsx +1399 -82
  266. package/src/components/NavigationMenu/NavigationMenu.tsx +2 -2
  267. package/src/components/NavigationMenu/__tests__/useNavigationFiltering.test.ts +1934 -0
  268. package/src/components/NavigationMenu/useNavigationFiltering.ts +5 -15
  269. package/src/components/PaceAppLayout/PaceAppLayout.edge-cases.test.tsx +1307 -0
  270. package/src/components/PaceAppLayout/PaceAppLayout.integration.test.tsx +47 -46
  271. package/src/components/PaceAppLayout/PaceAppLayout.performance.test.tsx +81 -38
  272. package/src/components/PaceAppLayout/PaceAppLayout.security.test.tsx +87 -66
  273. package/src/components/PaceAppLayout/PaceAppLayout.test.tsx +245 -39
  274. package/src/components/PaceAppLayout/PaceAppLayout.tsx +14 -20
  275. package/src/components/PaceAppLayout/README.md +0 -9
  276. package/src/components/PaceAppLayout/test-setup.tsx +15 -9
  277. package/src/components/PaceLoginPage/PaceLoginPage.test.tsx +759 -3
  278. package/src/components/PaceLoginPage/PaceLoginPage.tsx +2 -3
  279. package/src/components/PasswordChange/PasswordChangeForm.test.tsx +1 -1
  280. package/src/components/Progress/Progress.test.tsx +127 -1
  281. package/src/components/ProtectedRoute/ProtectedRoute.test.tsx +1196 -4
  282. package/src/components/ProtectedRoute/ProtectedRoute.tsx +24 -6
  283. package/src/components/PublicLayout/PublicLayout.test.tsx +1435 -14
  284. package/src/components/PublicLayout/PublicPageContext.ts +28 -0
  285. package/src/components/PublicLayout/PublicPageLayout.tsx +6 -6
  286. package/src/components/PublicLayout/PublicPageProvider.tsx +2 -41
  287. package/src/components/PublicLayout/usePublicPageContext.ts +36 -0
  288. package/src/components/Select/Select.test.tsx +46 -9
  289. package/src/components/Select/Select.tsx +31 -24
  290. package/src/components/Select/__tests__/context.test.tsx +56 -0
  291. package/src/components/Select/hooks/__tests__/useSelectEvents.test.ts +279 -0
  292. package/src/components/Select/hooks/__tests__/useSelectSearch.test.tsx +295 -0
  293. package/src/components/Select/hooks/__tests__/useSelectState.test.ts +254 -0
  294. package/src/components/Select/hooks/useSelectState.ts +16 -16
  295. package/src/components/Select/types.ts +3 -0
  296. package/src/components/Select/utils/__tests__/text.test.tsx +104 -0
  297. package/src/components/SessionRestorationLoader/SessionRestorationLoader.test.tsx +28 -112
  298. package/src/components/Switch/Switch.test.tsx +57 -153
  299. package/src/components/Table/Table.test.tsx +47 -317
  300. package/src/components/Tabs/Tabs.tsx +3 -3
  301. package/src/components/Textarea/Textarea.test.tsx +11 -38
  302. package/src/components/Toast/Toast.test.tsx +78 -569
  303. package/src/components/Tooltip/Tooltip.test.tsx +4 -21
  304. package/src/components/UserMenu/UserMenu.test.tsx +1 -21
  305. package/src/components/UserMenu/UserMenu.tsx +0 -1
  306. package/src/components/__tests__/index.test.ts +346 -0
  307. package/src/components/index.ts +12 -1
  308. package/src/constants/__tests__/performance.test.ts +91 -0
  309. package/src/hooks/__tests__/ServiceHooks.test.tsx +239 -129
  310. package/src/hooks/__tests__/hooks.integration.test.tsx +4 -3
  311. package/src/hooks/__tests__/useApiFetch.unit.test.ts +1 -1
  312. package/src/hooks/__tests__/useAppConfig.unit.test.ts +88 -29
  313. package/src/hooks/__tests__/useComponentPerformance.unit.test.tsx +282 -98
  314. package/src/hooks/__tests__/useDataTablePerformance.unit.test.ts +53 -109
  315. package/src/hooks/__tests__/useDataTableState.test.ts +143 -49
  316. package/src/hooks/__tests__/useDebounce.unit.test.ts +94 -19
  317. package/src/hooks/__tests__/useEvents.unit.test.ts +100 -125
  318. package/src/hooks/__tests__/useFileDisplay.test.ts +540 -0
  319. package/src/hooks/__tests__/useFileDisplay.unit.test.ts +1 -4
  320. package/src/hooks/__tests__/useFileUrl.unit.test.ts +27 -247
  321. package/src/hooks/__tests__/useFileUrlCache.test.ts +246 -56
  322. package/src/hooks/__tests__/useFocusManagement.unit.test.ts +442 -68
  323. package/src/hooks/__tests__/useFocusTrap.unit.test.tsx +345 -560
  324. package/src/hooks/__tests__/useFormDialog.test.ts +51 -222
  325. package/src/hooks/__tests__/useInactivityTracker.unit.test.ts +1 -1
  326. package/src/hooks/__tests__/useKeyboardShortcuts.unit.test.ts +1 -4
  327. package/src/hooks/__tests__/useOrganisationPermissions.unit.test.tsx +0 -1
  328. package/src/hooks/__tests__/usePerformanceMonitor.unit.test.ts +1 -1
  329. package/src/hooks/__tests__/usePermissionCache.test.ts +506 -0
  330. package/src/hooks/__tests__/usePreventTabReload.test.ts +255 -36
  331. package/src/hooks/__tests__/usePublicEvent.simple.test.ts +17 -8
  332. package/src/hooks/__tests__/usePublicEvent.test.ts +16 -24
  333. package/src/hooks/__tests__/usePublicEvent.unit.test.ts +12 -4
  334. package/src/hooks/__tests__/usePublicFileDisplay.test.ts +3 -6
  335. package/src/hooks/__tests__/usePublicRouteParams.unit.test.ts +1 -2
  336. package/src/hooks/__tests__/useQueryCache.test.ts +313 -66
  337. package/src/hooks/__tests__/useSessionDraft.test.ts +496 -103
  338. package/src/hooks/__tests__/useSessionRestoration.unit.test.tsx +2 -2
  339. package/src/hooks/__tests__/useStorage.unit.test.ts +72 -102
  340. package/src/hooks/__tests__/useToast.test.ts +413 -0
  341. package/src/hooks/__tests__/useToast.unit.test.tsx +1 -1
  342. package/src/hooks/__tests__/useZodForm.unit.test.tsx +175 -21
  343. package/src/hooks/index.ts +13 -1
  344. package/src/hooks/public/usePublicEvent.test.ts +304 -0
  345. package/src/hooks/public/usePublicEvent.ts +11 -11
  346. package/src/hooks/public/usePublicEventLogo.test.ts +655 -120
  347. package/src/hooks/public/usePublicEventLogo.ts +2 -2
  348. package/src/hooks/public/usePublicFileDisplay.test.ts +723 -0
  349. package/src/hooks/public/usePublicFileDisplay.ts +79 -49
  350. package/src/hooks/public/usePublicRouteParams.test.ts +595 -0
  351. package/src/hooks/public/usePublicRouteParams.ts +2 -2
  352. package/src/hooks/services/useAuthService.ts +1 -1
  353. package/src/hooks/services/useEventService.ts +1 -1
  354. package/src/hooks/useAccessibleApps.test.ts +400 -0
  355. package/src/hooks/useAccessibleApps.ts +264 -0
  356. package/src/hooks/useAddressAutocomplete.test.ts +165 -42
  357. package/src/hooks/useAddressAutocomplete.ts +41 -28
  358. package/src/hooks/useAppConfig.ts +13 -3
  359. package/src/hooks/useDataTablePerformance.ts +13 -12
  360. package/src/hooks/useDataTableState.ts +5 -5
  361. package/src/hooks/useEventTheme.test.ts +66 -17
  362. package/src/hooks/useEventTheme.ts +1 -1
  363. package/src/hooks/useEvents.ts +8 -1
  364. package/src/hooks/useFileDisplay.ts +66 -33
  365. package/src/hooks/useFileReference.test.ts +365 -87
  366. package/src/hooks/useFileReference.ts +2 -6
  367. package/src/hooks/useFileUrlCache.ts +4 -1
  368. package/src/hooks/useFormDialog.ts +2 -2
  369. package/src/hooks/useInactivityTracker.ts +3 -3
  370. package/src/hooks/useOrganisationPermissions.test.ts +1 -2
  371. package/src/hooks/useOrganisationPermissions.ts +1 -4
  372. package/src/hooks/useOrganisationSecurity.test.ts +1 -30
  373. package/src/hooks/useOrganisationSecurity.ts +3 -3
  374. package/src/hooks/useOrganisations.ts +1 -1
  375. package/src/hooks/usePerformanceMonitor.ts +1 -1
  376. package/src/hooks/usePermissionCache.ts +2 -6
  377. package/src/hooks/useQueryCache.ts +7 -7
  378. package/src/hooks/useSessionDraft.ts +14 -11
  379. package/src/hooks/useSessionRestoration.ts +1 -1
  380. package/src/hooks/useStorage.ts +75 -40
  381. package/src/hooks/useToast.ts +2 -2
  382. package/src/hooks/useZodForm.ts +3 -3
  383. package/src/icons/__tests__/index.test.ts +133 -0
  384. package/src/icons/index.ts +1 -1
  385. package/src/index.ts +43 -4
  386. package/src/providers/OrganisationProvider.test.tsx +40 -0
  387. package/src/providers/OrganisationProvider.tsx +5 -5
  388. package/src/providers/UnifiedAuthProvider.smoke.test.tsx +7 -12
  389. package/src/providers/__tests__/AuthProvider.test.tsx +22 -91
  390. package/src/providers/__tests__/EventProvider.test.tsx +16 -80
  391. package/src/providers/__tests__/InactivityProvider.test.tsx +29 -173
  392. package/src/providers/__tests__/OrganisationProvider.test.tsx +4 -5
  393. package/src/providers/__tests__/OrganisationProvider.wrapper.test.tsx +591 -0
  394. package/src/providers/__tests__/ProviderLifecycle.test.tsx +80 -196
  395. package/src/providers/__tests__/UnifiedAuthProvider.test.tsx +40 -133
  396. package/src/providers/__tests__/index.test.ts +138 -0
  397. package/src/providers/services/AuthServiceContext.ts +27 -0
  398. package/src/providers/services/AuthServiceProvider.tsx +81 -20
  399. package/src/providers/services/EventServiceContext.ts +25 -0
  400. package/src/providers/services/EventServiceProvider.tsx +11 -20
  401. package/src/providers/services/InactivityServiceContext.ts +25 -0
  402. package/src/providers/services/InactivityServiceProvider.tsx +7 -17
  403. package/src/providers/services/OrganisationServiceContext.ts +25 -0
  404. package/src/providers/services/OrganisationServiceProvider.tsx +7 -17
  405. package/src/providers/services/UnifiedAuthContext.ts +99 -0
  406. package/src/providers/services/UnifiedAuthProvider.test.tsx +212 -0
  407. package/src/providers/services/UnifiedAuthProvider.tsx +38 -143
  408. package/src/providers/services/__tests__/AuthServiceProvider.integration.test.tsx +61 -95
  409. package/src/providers/services/__tests__/AuthServiceProvider.test.tsx +638 -0
  410. package/src/providers/services/__tests__/EventServiceProvider.test.tsx +839 -0
  411. package/src/providers/services/__tests__/InactivityServiceProvider.test.tsx +662 -0
  412. package/src/providers/services/__tests__/OrganisationServiceProvider.test.tsx +440 -0
  413. package/src/providers/services/__tests__/UnifiedAuthProvider.advanced.test.tsx +435 -0
  414. package/src/providers/services/__tests__/UnifiedAuthProvider.appId.test.tsx +408 -0
  415. package/src/providers/services/__tests__/UnifiedAuthProvider.integration.test.tsx +55 -48
  416. package/src/providers/services/__tests__/contexts.test.tsx +281 -0
  417. package/src/providers/services/__tests__/useUnifiedAuth.test.tsx +251 -0
  418. package/src/providers/services/useUnifiedAuth.ts +29 -0
  419. package/src/rbac/README.md +5 -5
  420. package/src/rbac/__tests__/adapters.comprehensive.test.tsx +9 -14
  421. package/src/rbac/__tests__/audit-batched.test.ts +550 -0
  422. package/src/rbac/__tests__/auth-rbac-security.integration.test.tsx +1 -14
  423. package/src/rbac/__tests__/auth-rbac.e2e.test.tsx +43 -12
  424. package/src/rbac/__tests__/cache-invalidation.test.ts +8 -14
  425. package/src/rbac/__tests__/engine.comprehensive.test.ts +2 -7
  426. package/src/rbac/__tests__/index.test.ts +107 -0
  427. package/src/rbac/__tests__/performance.test.ts +451 -0
  428. package/src/rbac/__tests__/rbac-core.test.tsx +2 -2
  429. package/src/rbac/__tests__/rbac-engine-core-logic.test.ts +0 -5
  430. package/src/rbac/__tests__/rbac-engine-simplified.test.ts +1 -7
  431. package/src/rbac/__tests__/rbac-functions.test.ts +0 -1
  432. package/src/rbac/__tests__/rbac-integration.test.ts +0 -1
  433. package/src/rbac/__tests__/scenarios.user-role.test.tsx +21 -32
  434. package/src/rbac/adapters.test.tsx +654 -0
  435. package/src/rbac/adapters.tsx +24 -9
  436. package/src/rbac/api.test.ts +13 -217
  437. package/src/rbac/api.ts +85 -16
  438. package/src/rbac/audit-batched.ts +5 -4
  439. package/src/rbac/audit.test.ts +225 -28
  440. package/src/rbac/audit.ts +22 -17
  441. package/src/rbac/cache-invalidation.ts +18 -15
  442. package/src/rbac/cache.test.ts +123 -63
  443. package/src/rbac/cache.ts +3 -4
  444. package/src/rbac/components/AccessDenied.tsx +20 -18
  445. package/src/rbac/components/NavigationGuard.tsx +10 -8
  446. package/src/rbac/components/PagePermissionGuard.tsx +27 -25
  447. package/src/rbac/components/__tests__/AccessDenied.test.tsx +324 -0
  448. package/src/rbac/components/__tests__/NavigationGuard.test.tsx +242 -71
  449. package/src/rbac/components/__tests__/PagePermissionGuard.performance.test.tsx +20 -37
  450. package/src/rbac/components/__tests__/PagePermissionGuard.race-condition.test.tsx +18 -17
  451. package/src/rbac/components/__tests__/PagePermissionGuard.test.tsx +452 -129
  452. package/src/rbac/components/__tests__/PagePermissionGuard.verification.test.tsx +14 -13
  453. package/src/rbac/config.test.ts +131 -48
  454. package/src/rbac/config.ts +11 -8
  455. package/src/rbac/docs/event-based-apps.md +26 -13
  456. package/src/rbac/engine.test.ts +496 -146
  457. package/src/rbac/engine.ts +53 -13
  458. package/src/rbac/errors.test.ts +99 -87
  459. package/src/rbac/eslint-rules.js +2 -2
  460. package/src/rbac/hooks/__tests__/usePermissions.integration.test.ts +0 -5
  461. package/src/rbac/hooks/__tests__/useSecureSupabase.test.ts +601 -1
  462. package/src/rbac/hooks/permissions/__tests__/useAccessLevel.test.ts +622 -0
  463. package/src/rbac/hooks/permissions/__tests__/useCan.test.ts +798 -0
  464. package/src/rbac/hooks/permissions/__tests__/useMultiplePermissions.test.ts +843 -0
  465. package/src/rbac/hooks/permissions/__tests__/usePermissions.test.ts +545 -0
  466. package/src/rbac/hooks/permissions/useAccessLevel.ts +7 -8
  467. package/src/rbac/hooks/permissions/useCan.ts +12 -10
  468. package/src/rbac/hooks/permissions/useMultiplePermissions.ts +57 -8
  469. package/src/rbac/hooks/permissions/usePermissions.ts +15 -14
  470. package/src/rbac/hooks/useCan.test.ts +319 -3
  471. package/src/rbac/hooks/usePermissions.test.ts +426 -0
  472. package/src/rbac/hooks/usePermissions.ts +5 -7
  473. package/src/rbac/hooks/useRBAC.test.ts +1669 -2
  474. package/src/rbac/hooks/useRBAC.ts +7 -11
  475. package/src/rbac/hooks/useResolvedScope.test.ts +442 -5
  476. package/src/rbac/hooks/useResolvedScope.ts +4 -1
  477. package/src/rbac/hooks/useResourcePermissions.test.ts +538 -1
  478. package/src/rbac/hooks/useResourcePermissions.ts +9 -7
  479. package/src/rbac/hooks/useRoleManagement.test.ts +659 -1
  480. package/src/rbac/hooks/useRoleManagement.ts +16 -12
  481. package/src/rbac/hooks/useSecureSupabase.ts +11 -12
  482. package/src/rbac/index.ts +32 -32
  483. package/src/rbac/permissions.test.ts +149 -68
  484. package/src/rbac/permissions.ts +0 -3
  485. package/src/rbac/request-deduplication.test.ts +347 -0
  486. package/src/rbac/secureClient.test.ts +112 -159
  487. package/src/rbac/secureClient.ts +46 -26
  488. package/src/rbac/security.test.ts +125 -44
  489. package/src/rbac/security.ts +7 -6
  490. package/src/rbac/types.test.ts +236 -0
  491. package/src/rbac/types.ts +7 -5
  492. package/src/rbac/utils/__tests__/clientSecurity.test.ts +192 -0
  493. package/src/rbac/utils/__tests__/contextValidator.test.ts +1 -3
  494. package/src/rbac/utils/__tests__/deep-equal.test.ts +23 -0
  495. package/src/rbac/utils/__tests__/eventContext.test.ts +10 -57
  496. package/src/rbac/utils/clientSecurity.ts +6 -4
  497. package/src/rbac/utils/contextValidator.ts +1 -2
  498. package/src/rbac/utils/eventContext.ts +2 -2
  499. package/src/services/AuthService.ts +13 -11
  500. package/src/services/EventService.ts +4 -5
  501. package/src/services/OrganisationService.ts +13 -30
  502. package/src/services/__tests__/AuthService.edge-cases.test.ts +746 -0
  503. package/src/services/__tests__/AuthService.restoreSession.test.ts +23 -3
  504. package/src/services/__tests__/AuthService.test.ts +4 -8
  505. package/src/services/__tests__/BaseService.edge-cases.test.ts +506 -0
  506. package/src/services/__tests__/BaseService.test.ts +49 -0
  507. package/src/services/__tests__/EventService.edge-cases.test.ts +633 -0
  508. package/src/services/__tests__/EventService.eventColours.test.ts +0 -12
  509. package/src/services/__tests__/EventService.test.ts +0 -7
  510. package/src/services/__tests__/InactivityService.edge-cases.test.ts +492 -0
  511. package/src/services/__tests__/InactivityService.lifecycle.test.ts +0 -5
  512. package/src/services/__tests__/OrganisationService.edge-cases.test.ts +633 -0
  513. package/src/services/base/BaseService.test.ts +214 -0
  514. package/src/services/interfaces/IOrganisationService.ts +0 -1
  515. package/src/services/interfaces/__tests__/IAuthService.test.ts +190 -0
  516. package/src/services/interfaces/__tests__/IEventService.test.ts +176 -0
  517. package/src/services/interfaces/__tests__/IInactivityService.test.ts +183 -0
  518. package/src/services/interfaces/__tests__/IOrganisationService.test.ts +207 -0
  519. package/src/styles/core.css +1 -0
  520. package/src/theming/__tests__/runtime.test.ts +29 -94
  521. package/src/theming/parseEventColours.ts +18 -9
  522. package/src/theming/runtime.ts +1 -5
  523. package/src/types/__tests__/core.test.ts +397 -0
  524. package/src/types/__tests__/database-generated.test.ts +78 -0
  525. package/src/types/__tests__/file-reference.test.ts +270 -366
  526. package/src/types/__tests__/guards.test.ts +26 -26
  527. package/src/types/__tests__/index.test.ts +265 -0
  528. package/src/types/__tests__/type-validation.test.ts +3 -3
  529. package/src/types/__tests__/validation.test.ts +0 -2
  530. package/src/types/auth.ts +0 -1
  531. package/src/types/event.ts +1 -1
  532. package/src/types/rpc-responses.ts +33 -0
  533. package/src/types/supabase.ts +1 -2
  534. package/src/types/vitest-globals.d.ts +1 -1
  535. package/src/utils/__tests__/bundleAnalysis.unit.test.ts +64 -77
  536. package/src/utils/__tests__/dynamicUtils.unit.test.ts +13 -0
  537. package/src/utils/__tests__/formatDate.unit.test.ts +1 -1
  538. package/src/utils/__tests__/lazyLoad.unit.test.tsx +0 -1
  539. package/src/utils/__tests__/logger.unit.test.ts +1 -1
  540. package/src/utils/__tests__/performanceBenchmark.test.ts +1 -2
  541. package/src/utils/__tests__/performanceBudgets.unit.test.ts +48 -13
  542. package/src/utils/__tests__/request-deduplication.test.ts +349 -0
  543. package/src/utils/__tests__/secureDataAccess.unit.test.ts +0 -1
  544. package/src/utils/__tests__/timezone.test.ts +1 -1
  545. package/src/utils/__tests__/validation.unit.test.ts +1 -2
  546. package/src/utils/__tests__/validationUtils.unit.test.ts +1 -1
  547. package/src/utils/app/appConfig.test.ts +235 -0
  548. package/src/utils/app/appIdResolver.test.ts +188 -20
  549. package/src/utils/app/appNameResolver.test.ts +18 -10
  550. package/src/utils/app/appNameResolver.ts +11 -9
  551. package/src/utils/app/appPortMap.test.ts +125 -0
  552. package/src/utils/app/appPortMap.ts +51 -0
  553. package/src/utils/app/buildAppUrl.test.ts +273 -0
  554. package/src/utils/app/buildAppUrl.ts +114 -0
  555. package/src/utils/audit/audit.test.ts +354 -39
  556. package/src/utils/context/organisationContext.test.ts +10 -4
  557. package/src/utils/context/organisationContext.ts +5 -5
  558. package/src/utils/context/sessionTracking.test.ts +354 -0
  559. package/src/utils/core/__tests__/cn.test.ts +66 -0
  560. package/src/utils/core/__tests__/debugLogger.test.ts +113 -0
  561. package/src/utils/core/__tests__/logger.test.ts +217 -0
  562. package/src/utils/core/debugLogger.ts +15 -8
  563. package/src/utils/core/logger.ts +20 -16
  564. package/src/utils/device/deviceFingerprint.test.ts +8 -5
  565. package/src/utils/device/deviceFingerprint.ts +3 -3
  566. package/src/utils/dynamic/__tests__/dynamicUtils.test.ts +185 -0
  567. package/src/utils/dynamic/__tests__/lazyLoad.test.tsx +156 -0
  568. package/src/utils/dynamic/createLazyComponent.tsx +38 -0
  569. package/src/utils/dynamic/dynamicUtils.ts +6 -6
  570. package/src/utils/dynamic/lazyLoad.tsx +8 -36
  571. package/src/utils/dynamic/papaparseLoader.ts +7 -0
  572. package/src/utils/file-reference/__tests__/file-reference.test.ts +583 -145
  573. package/src/utils/file-reference/index.ts +0 -1
  574. package/src/utils/formatting/formatDate.test.ts +22 -148
  575. package/src/utils/formatting/formatDateTime.test.ts +41 -119
  576. package/src/utils/formatting/formatDateTimeTimezone.test.ts +40 -84
  577. package/src/utils/formatting/formatNumber.test.ts +259 -0
  578. package/src/utils/formatting/formatTime.test.ts +36 -128
  579. package/src/utils/formatting/formatting.ts +1 -1
  580. package/src/utils/google-places/googlePlacesUtils.test.ts +72 -3
  581. package/src/utils/google-places/googlePlacesUtils.ts +15 -2
  582. package/src/utils/google-places/loadGoogleMapsScript.test.ts +58 -1
  583. package/src/utils/google-places/loadGoogleMapsScript.ts +2 -1
  584. package/src/utils/index.ts +52 -11
  585. package/src/utils/location/location.test.ts +18 -115
  586. package/src/utils/performance/__tests__/bundleAnalysis.test.ts +148 -0
  587. package/src/utils/performance/__tests__/performanceBenchmark.test.ts +251 -0
  588. package/src/utils/performance/__tests__/performanceBudgets.test.ts +241 -0
  589. package/src/utils/performance/bundleAnalysis.ts +16 -22
  590. package/src/utils/performance/performanceBenchmark.ts +12 -4
  591. package/src/utils/performance/performanceBudgets.ts +9 -6
  592. package/src/utils/permissions/__tests__/permissionTypes.test.ts +149 -0
  593. package/src/utils/permissions/permissionUtils.test.ts +20 -42
  594. package/src/utils/persistence/__tests__/keyDerivation.test.ts +180 -9
  595. package/src/utils/persistence/__tests__/sensitiveFieldDetection.test.ts +164 -16
  596. package/src/utils/persistence/sensitiveFieldDetection.ts +2 -2
  597. package/src/utils/request-deduplication.ts +6 -4
  598. package/src/utils/security/auth-utils.ts +7 -7
  599. package/src/utils/security/secureDataAccess.test.ts +22 -191
  600. package/src/utils/security/secureErrors.test.ts +163 -0
  601. package/src/utils/security/secureStorage.test.ts +156 -0
  602. package/src/utils/security/secureStorage.ts +1 -1
  603. package/src/utils/security/security.test.ts +204 -0
  604. package/src/utils/security/securityMonitor.test.ts +90 -0
  605. package/src/utils/security/securityMonitor.ts +1 -1
  606. package/src/utils/storage/__tests__/config.unit.test.ts +239 -0
  607. package/src/utils/storage/__tests__/index.unit.test.ts +64 -12
  608. package/src/utils/storage/helpers.test.ts +757 -430
  609. package/src/utils/storage/helpers.ts +1 -2
  610. package/src/utils/storage/{index.ts → storageUtils.ts} +1 -36
  611. package/src/utils/storage/types.ts +2 -2
  612. package/src/utils/supabase/createBaseClient.test.ts +201 -0
  613. package/src/utils/supabase/createBaseClient.ts +2 -1
  614. package/src/utils/timezone/timezone.test.ts +25 -43
  615. package/src/utils/validation/__tests__/common.test.ts +115 -0
  616. package/src/utils/validation/__tests__/csrf.test.ts +65 -0
  617. package/src/utils/validation/__tests__/htmlSanitization.unit.test.ts +27 -7
  618. package/src/utils/validation/__tests__/passwordSchema.test.ts +164 -0
  619. package/src/utils/validation/__tests__/schema.test.ts +127 -0
  620. package/src/utils/validation/__tests__/sqlInjectionProtection.test.ts +76 -3
  621. package/src/utils/validation/__tests__/user.test.ts +173 -0
  622. package/src/utils/validation/__tests__/validation.test.ts +197 -0
  623. package/src/utils/validation/__tests__/validationUtils.test.ts +265 -43
  624. package/src/utils/validation/htmlSanitization.ts +27 -31
  625. package/src/utils/validation/schema.ts +6 -3
  626. package/src/utils/validation/sqlInjectionProtection.ts +2 -2
  627. package/src/vite-env.d.ts +6 -0
  628. package/dist/DataTable-DRUIgtUH.d.ts +0 -166
  629. package/dist/UnifiedAuthProvider-7SNDOWYD.js +0 -7
  630. package/dist/audit-MYQXYZFU.js +0 -3
  631. package/dist/chunk-7ILTDCL2.js +0 -80
  632. package/dist/chunk-EF2UGZWY.js +0 -611
  633. package/dist/chunk-FEJLJNWA.js +0 -181
  634. package/dist/chunk-GS5672WG.js +0 -2003
  635. package/dist/chunk-S6ZQKDY6.js +0 -62
  636. package/dist/chunk-Z2FNRKF3.js +0 -994
  637. package/dist/useToast-AyaT-x7p.d.ts +0 -68
  638. package/src/components/DataTable/components/index.ts +0 -16
  639. package/src/components/DataTable/core/index.ts +0 -1
  640. package/src/components/DataTable/hooks/index.ts +0 -13
  641. package/src/components/DataTable/utils/index.ts +0 -10
  642. package/src/components/PublicLayout/index.ts +0 -32
  643. package/src/hooks/__tests__/usePermissionCache.simple.test.ts +0 -192
  644. package/src/hooks/__tests__/usePermissionCache.unit.test.ts +0 -741
  645. package/src/hooks/public/index.ts +0 -36
  646. package/src/hooks/usePermissionCache.test.ts +0 -536
  647. package/src/rbac/__tests__/isSuperAdmin.real.test.ts +0 -82
  648. package/src/rbac/audit-enhanced.ts +0 -384
  649. package/src/rbac/compliance/database-validator.ts +0 -165
  650. package/src/rbac/compliance/index.ts +0 -48
  651. package/src/rbac/compliance/pattern-detector.ts +0 -553
  652. package/src/rbac/compliance/quick-fix-suggestions.ts +0 -209
  653. package/src/rbac/compliance/runtime-compliance.ts +0 -99
  654. package/src/rbac/compliance/setup-validator.ts +0 -131
  655. package/src/rbac/components/index.ts +0 -26
  656. package/src/rbac/hooks/index.ts +0 -34
  657. package/src/rbac/hooks/permissions/index.ts +0 -4
  658. package/src/rbac/hooks/useRBAC.simple.test.ts +0 -95
  659. package/src/rbac/utils/__tests__/eventContext.unit.test.ts +0 -490
  660. package/src/utils/app/appNameResolver.simple.test.ts +0 -212
  661. package/src/utils/google-places/index.ts +0 -26
  662. package/src/utils/location/index.ts +0 -16
  663. package/src/utils/storage/__tests__/helpers.unit.test.ts +0 -332
  664. package/src/utils/timezone/index.ts +0 -17
  665. package/src/utils/validation/index.ts +0 -73
@@ -9,26 +9,39 @@
9
9
  */
10
10
 
11
11
  import React from 'react';
12
- import { render, screen, fireEvent, waitFor, within } from '@testing-library/react';
12
+ import { render, screen, waitFor } from '@testing-library/react';
13
13
  import userEvent from '@testing-library/user-event';
14
14
  import { describe, it, expect, vi, beforeEach, afterEach } from 'vitest';
15
15
  import { DataTableCore } from '../components/DataTableCore';
16
- import type { DataTableColumn } from '../types';
17
16
  import { createTestData, createTestColumns, testDataScenarios } from './test-utils/dataFactories';
18
- import { createDefaultFeatures, createReadOnlyFeatures, createFullFeatures } from './test-utils.ts';
17
+ import { createDefaultFeatures, createFullFeatures } from './test-utils.ts';
19
18
  import { renderWithProviders } from '../../../__tests__/helpers/test-utils';
20
19
 
21
- // Mock the RBAC hooks
22
- vi.mock('../../../rbac/hooks', () => ({
23
- useCan: vi.fn(() => ({ can: true, isLoading: false, error: null })),
24
- useResolvedScope: vi.fn(() => ({
25
- resolvedScope: {
26
- organisationId: 'test-org-id',
27
- eventId: 'test-event-id',
28
- appId: 'test-app-id'
29
- },
30
- isLoading: false
31
- }))
20
+ // Mock the RBAC hooks - use hoisted mocks for control
21
+ const mockUseCanFn = vi.hoisted(() => vi.fn(() => ({
22
+ can: true,
23
+ isLoading: false,
24
+ error: null,
25
+ refetch: vi.fn().mockResolvedValue(undefined)
26
+ })));
27
+
28
+ const mockUseResolvedScopeFn = vi.hoisted(() => vi.fn(() => ({
29
+ resolvedScope: {
30
+ organisationId: 'test-org-id',
31
+ eventId: 'test-event-id',
32
+ appId: 'test-app-id'
33
+ },
34
+ isLoading: false,
35
+ error: null
36
+ })));
37
+
38
+ // Mock individual files since barrel was removed
39
+ vi.mock('../../../rbac/hooks/usePermissions', () => ({
40
+ useCan: mockUseCanFn
41
+ }));
42
+
43
+ vi.mock('../../../rbac/hooks/useResolvedScope', () => ({
44
+ useResolvedScope: mockUseResolvedScopeFn
32
45
  }));
33
46
 
34
47
  // Mock the auth provider
@@ -159,15 +172,7 @@ vi.mock('../utils/hierarchicalSorting', () => ({
159
172
  }));
160
173
 
161
174
  // Mock the new extracted hooks
162
- // Create a variable to control permission mocks
163
- const mockPermissions = {
164
- canRead: { can: true },
165
- canCreate: { can: true },
166
- canUpdate: { can: true },
167
- canDelete: { can: true },
168
- canExport: { can: true },
169
- canImport: { can: true },
170
- };
175
+ // Note: mockPermissions removed - not used in tests
171
176
 
172
177
  // Create a mock implementation that can be overridden
173
178
  const mockUseDataTablePermissions = vi.hoisted(() => vi.fn(() => ({
@@ -213,32 +218,19 @@ describe('DataTableCore Component', () => {
213
218
  const mockRBAC = { pageId: 'test-page' };
214
219
  const mockPerformance = { serverSideThreshold: 10000 };
215
220
 
216
- beforeEach(async () => {
221
+ beforeEach(() => {
217
222
  vi.clearAllMocks();
218
- const { useCan } = await import('../../../rbac/hooks');
219
- (useCan as any).mockReturnValue({
223
+ // Use hoisted mock function directly
224
+ mockUseCanFn.mockReturnValue({
220
225
  can: true,
221
226
  isLoading: false,
222
227
  error: null,
228
+ refetch: vi.fn().mockResolvedValue(undefined),
223
229
  });
224
230
  });
225
231
 
226
232
  describe('Rendering', () => {
227
- it('renders with basic props', () => {
228
- render(
229
- <DataTableCore
230
- data={mockData}
231
- columns={mockColumns}
232
- rbac={mockRBAC}
233
- features={createDefaultFeatures()}
234
- performance={mockPerformance}
235
- />
236
- );
237
-
238
- expect(screen.getByRole('table')).toBeInTheDocument();
239
- });
240
-
241
- it('renders with title and description', () => {
233
+ it('renders table with data, title, and description', () => {
242
234
  render(
243
235
  <DataTableCore
244
236
  data={mockData}
@@ -247,41 +239,13 @@ describe('DataTableCore Component', () => {
247
239
  features={createDefaultFeatures()}
248
240
  title="Test Table"
249
241
  description="Test description"
242
+ performance={mockPerformance}
250
243
  />
251
244
  );
252
245
 
246
+ expect(screen.getByRole('table')).toBeInTheDocument();
253
247
  expect(screen.getByText('Test Table')).toBeInTheDocument();
254
248
  expect(screen.getByText('Test description')).toBeInTheDocument();
255
- });
256
-
257
- it('renders with custom className', () => {
258
- render(
259
- <DataTableCore
260
- data={mockData}
261
- columns={mockColumns}
262
- rbac={mockRBAC}
263
- features={createDefaultFeatures()}
264
- className="custom-table"
265
- />
266
- );
267
-
268
- // Check that the component renders without error
269
- expect(screen.getByText('User 1')).toBeInTheDocument();
270
- });
271
-
272
- it('renders with variant prop', () => {
273
- render(
274
- <DataTableCore
275
- data={mockData}
276
- columns={mockColumns}
277
- rbac={mockRBAC}
278
- features={createDefaultFeatures()}
279
- variant="compact"
280
- performance={mockPerformance}
281
- />
282
- );
283
-
284
- // Check that the component renders without error
285
249
  expect(screen.getByText('User 1')).toBeInTheDocument();
286
250
  });
287
251
  });
@@ -361,25 +325,7 @@ describe('DataTableCore Component', () => {
361
325
  });
362
326
 
363
327
  describe('Column Headers', () => {
364
- it('renders column headers correctly', () => {
365
- render(
366
- <DataTableCore
367
- data={mockData}
368
- columns={mockColumns}
369
- rbac={mockRBAC}
370
- features={createDefaultFeatures()}
371
- performance={mockPerformance}
372
- />
373
- );
374
-
375
- // Check that column headers are rendered by looking for the columnheader role
376
- // This avoids matching text in hidden SelectItems (column visibility selector)
377
- expect(screen.getByRole('columnheader', { name: 'Name' })).toBeInTheDocument();
378
- expect(screen.getByRole('columnheader', { name: 'Age' })).toBeInTheDocument();
379
- expect(screen.getByRole('columnheader', { name: 'Email' })).toBeInTheDocument();
380
- });
381
-
382
- it('renders sortable column headers when sorting is enabled', () => {
328
+ it('renders column headers with sorting when enabled', () => {
383
329
  const features = createDefaultFeatures();
384
330
  features.sorting = true;
385
331
 
@@ -393,11 +339,9 @@ describe('DataTableCore Component', () => {
393
339
  />
394
340
  );
395
341
 
396
- // Check that column headers are rendered and sorting is enabled
397
- // Use columnheader role to avoid matching hidden SelectItem labels
398
- expect(screen.getByRole('columnheader', { name: /Name/i })).toBeInTheDocument();
399
- expect(screen.getByRole('columnheader', { name: /Age/i })).toBeInTheDocument();
400
- expect(screen.getByRole('columnheader', { name: /Email/i })).toBeInTheDocument();
342
+ expect(screen.getByRole('columnheader', { name: 'Name' })).toBeInTheDocument();
343
+ expect(screen.getByRole('columnheader', { name: 'Age' })).toBeInTheDocument();
344
+ expect(screen.getByRole('columnheader', { name: 'Email' })).toBeInTheDocument();
401
345
  });
402
346
  });
403
347
 
@@ -443,25 +387,7 @@ describe('DataTableCore Component', () => {
443
387
  });
444
388
 
445
389
  describe('Pagination', () => {
446
- it('renders pagination controls when pagination is enabled', () => {
447
- const features = createDefaultFeatures();
448
- features.pagination = true;
449
-
450
- render(
451
- <DataTableCore
452
- data={mockData}
453
- columns={mockColumns}
454
- rbac={mockRBAC}
455
- features={features}
456
- performance={mockPerformance}
457
- />
458
- );
459
-
460
- // Check that the component renders without error when pagination is enabled
461
- expect(screen.getByText('User 1')).toBeInTheDocument();
462
- });
463
-
464
- it('handles page size changes', async () => {
390
+ it('renders table when pagination is enabled', () => {
465
391
  const features = createDefaultFeatures();
466
392
  features.pagination = true;
467
393
 
@@ -475,13 +401,13 @@ describe('DataTableCore Component', () => {
475
401
  />
476
402
  );
477
403
 
478
- // Check that the component renders without error when pagination is enabled
404
+ expect(screen.getByRole('table')).toBeInTheDocument();
479
405
  expect(screen.getByText('User 1')).toBeInTheDocument();
480
406
  });
481
407
  });
482
408
 
483
409
  describe('Row Selection', () => {
484
- it('renders checkboxes when selection is enabled', () => {
410
+ it('renders table when selection is enabled', () => {
485
411
  const features = createDefaultFeatures();
486
412
  features.selection = true;
487
413
 
@@ -495,109 +421,15 @@ describe('DataTableCore Component', () => {
495
421
  />
496
422
  );
497
423
 
498
- // Check that the component renders without error when selection is enabled
499
- expect(screen.getByText('User 1')).toBeInTheDocument();
500
- });
501
-
502
- it('handles row selection', async () => {
503
- const features = createDefaultFeatures();
504
- features.selection = true;
505
-
506
- render(
507
- <DataTableCore
508
- data={mockData}
509
- columns={mockColumns}
510
- rbac={mockRBAC}
511
- features={features}
512
- performance={mockPerformance}
513
- />
514
- );
515
-
516
- // Check that selection functionality is available
517
- expect(screen.getByText('User 1')).toBeInTheDocument();
518
- });
519
-
520
- it('handles select all functionality', async () => {
521
- const features = createDefaultFeatures();
522
- features.selection = true;
523
-
524
- render(
525
- <DataTableCore
526
- data={mockData}
527
- columns={mockColumns}
528
- rbac={mockRBAC}
529
- features={features}
530
- performance={mockPerformance}
531
- />
532
- );
533
-
534
- // Check that select all functionality is available
424
+ expect(screen.getByRole('table')).toBeInTheDocument();
535
425
  expect(screen.getByText('User 1')).toBeInTheDocument();
536
426
  });
537
427
  });
538
428
 
539
429
  describe('Row Actions', () => {
540
- it('renders action buttons when editing is enabled', () => {
541
- const features = createDefaultFeatures();
542
- features.editing = true;
543
-
544
- render(
545
- <DataTableCore
546
- data={mockData}
547
- columns={mockColumns}
548
- rbac={mockRBAC}
549
- features={features}
550
- performance={mockPerformance}
551
- />
552
- );
553
-
554
- // Check that the component renders without error when editing is enabled
555
- expect(screen.getByText('User 1')).toBeInTheDocument();
556
- });
557
-
558
- it('renders delete buttons when deletion is enabled', () => {
559
- const features = createDefaultFeatures();
560
- features.deletion = true;
561
-
562
- render(
563
- <DataTableCore
564
- data={mockData}
565
- columns={mockColumns}
566
- rbac={mockRBAC}
567
- features={features}
568
- performance={mockPerformance}
569
- />
570
- );
571
-
572
- // Check that the component renders without error when deletion is enabled
573
- expect(screen.getByText('User 1')).toBeInTheDocument();
574
- });
575
-
576
- it('handles edit row action', async () => {
577
- const user = userEvent.setup();
578
- const onEditRow = vi.fn();
430
+ it('renders table when editing and deletion are enabled', () => {
579
431
  const features = createDefaultFeatures();
580
432
  features.editing = true;
581
-
582
- render(
583
- <DataTableCore
584
- data={mockData}
585
- columns={mockColumns}
586
- rbac={mockRBAC}
587
- features={features}
588
- onEditRow={onEditRow}
589
- performance={mockPerformance}
590
- />
591
- );
592
-
593
- // Check that the component renders without error when editing is enabled
594
- expect(screen.getByText('User 1')).toBeInTheDocument();
595
- });
596
-
597
- it('handles delete row action', async () => {
598
- const user = userEvent.setup();
599
- const onDeleteRow = vi.fn();
600
- const features = createDefaultFeatures();
601
433
  features.deletion = true;
602
434
 
603
435
  render(
@@ -606,37 +438,19 @@ describe('DataTableCore Component', () => {
606
438
  columns={mockColumns}
607
439
  rbac={mockRBAC}
608
440
  features={features}
609
- onDeleteRow={onDeleteRow}
610
441
  performance={mockPerformance}
611
442
  />
612
443
  );
613
444
 
614
- // Check that the component renders without error when deletion is enabled
445
+ expect(screen.getByRole('table')).toBeInTheDocument();
615
446
  expect(screen.getByText('User 1')).toBeInTheDocument();
616
447
  });
617
448
  });
618
449
 
619
450
  describe('Export/Import', () => {
620
- it('renders export button when export is enabled', () => {
451
+ it('renders table when export and import are enabled', () => {
621
452
  const features = createDefaultFeatures();
622
453
  features.export = true;
623
-
624
- render(
625
- <DataTableCore
626
- data={mockData}
627
- columns={mockColumns}
628
- rbac={mockRBAC}
629
- features={features}
630
- performance={mockPerformance}
631
- />
632
- );
633
-
634
- // Check that the component renders without error when export is enabled
635
- expect(screen.getByText('User 1')).toBeInTheDocument();
636
- });
637
-
638
- it('renders import button when import is enabled', () => {
639
- const features = createDefaultFeatures();
640
454
  features.import = true;
641
455
 
642
456
  render(
@@ -649,13 +463,13 @@ describe('DataTableCore Component', () => {
649
463
  />
650
464
  );
651
465
 
652
- // Check that the component renders without error when import is enabled
466
+ expect(screen.getByRole('table')).toBeInTheDocument();
653
467
  expect(screen.getByText('User 1')).toBeInTheDocument();
654
468
  });
655
469
  });
656
470
 
657
471
  describe('Column Visibility', () => {
658
- it('renders column visibility dropdown when enabled', () => {
472
+ it('renders table when column visibility is enabled', () => {
659
473
  const features = createDefaultFeatures();
660
474
  features.columnVisibility = true;
661
475
 
@@ -669,13 +483,13 @@ describe('DataTableCore Component', () => {
669
483
  />
670
484
  );
671
485
 
672
- // Check that the component renders without error when column visibility is enabled
486
+ expect(screen.getByRole('table')).toBeInTheDocument();
673
487
  expect(screen.getByText('User 1')).toBeInTheDocument();
674
488
  });
675
489
  });
676
490
 
677
491
  describe('Error Handling', () => {
678
- it('renders without error when errorComponent is provided', () => {
492
+ it('renders table when errorComponent is provided', () => {
679
493
  const ErrorComponent = () => <div data-testid="error-component">Error Component</div>;
680
494
 
681
495
  render(
@@ -689,7 +503,7 @@ describe('DataTableCore Component', () => {
689
503
  />
690
504
  );
691
505
 
692
- // Component should render normally
506
+ expect(screen.getByRole('table')).toBeInTheDocument();
693
507
  expect(screen.getByText('User 1')).toBeInTheDocument();
694
508
  });
695
509
  });
@@ -760,22 +574,7 @@ describe('DataTableCore Component', () => {
760
574
  });
761
575
 
762
576
  describe('Accessibility', () => {
763
- it('has proper table structure', () => {
764
- render(
765
- <DataTableCore
766
- data={mockData}
767
- columns={mockColumns}
768
- rbac={mockRBAC}
769
- features={createDefaultFeatures()}
770
- performance={mockPerformance}
771
- />
772
- );
773
-
774
- // Check that the component renders without error
775
- expect(screen.getByText('User 1')).toBeInTheDocument();
776
- });
777
-
778
- it('has proper column headers', () => {
577
+ it('has proper table structure with headers and rows', () => {
779
578
  render(
780
579
  <DataTableCore
781
580
  data={mockData}
@@ -786,292 +585,65 @@ describe('DataTableCore Component', () => {
786
585
  />
787
586
  );
788
587
 
789
- // Check that the component renders without error
790
- expect(screen.getByText('User 1')).toBeInTheDocument();
791
- });
792
-
793
- it('has proper row structure', () => {
794
- render(
795
- <DataTableCore
796
- data={mockData}
797
- columns={mockColumns}
798
- rbac={mockRBAC}
799
- features={createDefaultFeatures()}
800
- performance={mockPerformance}
801
- />
802
- );
803
-
804
- // Check that the component renders without error
588
+ expect(screen.getByRole('table')).toBeInTheDocument();
589
+ expect(screen.getByRole('columnheader', { name: 'Name' })).toBeInTheDocument();
805
590
  expect(screen.getByText('User 1')).toBeInTheDocument();
806
591
  });
807
592
  });
808
593
 
809
594
  describe('Event Handlers', () => {
810
- it('calls onEditRow when row is edited', async () => {
595
+ it('renders table with event handlers configured', () => {
811
596
  const onEditRow = vi.fn();
812
- const features = createDefaultFeatures();
813
- features.editing = true;
814
-
815
- render(
816
- <DataTableCore
817
- data={mockData}
818
- columns={mockColumns}
819
- rbac={mockRBAC}
820
- features={features}
821
- onEditRow={onEditRow}
822
- performance={mockPerformance}
823
- />
824
- );
825
-
826
- // Wait for table to render
827
- await waitFor(() => {
828
- expect(screen.getByRole('table')).toBeInTheDocument();
829
- });
830
-
831
- // Verify table rendered with data
832
- expect(await screen.findByText('User 1')).toBeInTheDocument();
833
-
834
- // Note: Testing actual editing interaction would require clicking edit button
835
- // and interacting with EditableRow component, which is complex to mock.
836
- // This test verifies the component renders correctly with editing enabled.
837
- });
838
-
839
- it('calls onDeleteRow when row is deleted', async () => {
840
597
  const onDeleteRow = vi.fn();
841
- const features = createDefaultFeatures();
842
- features.deletion = true;
843
-
844
- render(
845
- <DataTableCore
846
- data={mockData}
847
- columns={mockColumns}
848
- rbac={mockRBAC}
849
- features={features}
850
- onDeleteRow={onDeleteRow}
851
- performance={mockPerformance}
852
- />
853
- );
854
-
855
- expect(screen.getByText('User 1')).toBeInTheDocument();
856
- });
857
-
858
- it('calls onCreateRow when new row is created', async () => {
859
598
  const onCreateRow = vi.fn();
860
599
  const features = createDefaultFeatures();
600
+ features.editing = true;
601
+ features.deletion = true;
861
602
  features.creation = true;
862
603
 
863
- const { useDataTableState } = await import('../hooks/useDataTableState');
864
- vi.mocked(useDataTableState).mockReturnValueOnce({
865
- state: {
866
- sorting: [],
867
- columnFilters: [],
868
- columnVisibility: {},
869
- grouping: [],
870
- expanded: {},
871
- pagination: { pageIndex: 0, pageSize: 10 },
872
- columnOrder: [],
873
- rowSelection: {},
874
- isCreating: true,
875
- creationData: { name: 'New User', email: 'new@example.com' },
876
- editingRowId: null,
877
- editingData: {},
878
- showImportModal: false,
879
- showFilterRow: false,
880
- searchQuery: '',
881
- },
882
- actions: {
883
- setSorting: vi.fn(),
884
- setColumnFilters: vi.fn(),
885
- setColumnVisibility: vi.fn(),
886
- setGrouping: vi.fn(),
887
- setExpanded: vi.fn(),
888
- setPagination: vi.fn(),
889
- setColumnOrder: vi.fn(),
890
- setRowSelection: vi.fn(),
891
- setCreating: vi.fn(),
892
- setCreationData: vi.fn(),
893
- clearCreationData: vi.fn(),
894
- setEditingRow: vi.fn(),
895
- clearEditing: vi.fn(),
896
- setImportModal: vi.fn(),
897
- setFilterRow: vi.fn(),
898
- setSearchQuery: vi.fn(),
899
- resetState: vi.fn(),
900
- },
901
- });
902
-
903
604
  render(
904
605
  <DataTableCore
905
606
  data={mockData}
906
607
  columns={mockColumns}
907
608
  rbac={mockRBAC}
908
609
  features={features}
610
+ onEditRow={onEditRow}
611
+ onDeleteRow={onDeleteRow}
909
612
  onCreateRow={onCreateRow}
910
613
  performance={mockPerformance}
911
614
  />
912
615
  );
913
616
 
914
- expect(screen.getByText('User 1')).toBeInTheDocument();
915
- });
916
-
917
- it('calls onRowSelectionChange when row selection changes', async () => {
918
- const onRowSelectionChange = vi.fn();
919
- const features = createDefaultFeatures();
920
- features.selection = true;
921
-
922
- render(
923
- <DataTableCore
924
- data={mockData}
925
- columns={mockColumns}
926
- rbac={mockRBAC}
927
- features={features}
928
- onRowSelectionChange={onRowSelectionChange}
929
- performance={mockPerformance}
930
- />
931
- );
932
-
933
- expect(screen.getByText('User 1')).toBeInTheDocument();
934
- });
935
-
936
- it('calls onDeleteSelected when selected rows are deleted', async () => {
937
- const onDeleteSelected = vi.fn();
938
- const features = createDefaultFeatures();
939
- features.deletion = true;
940
- features.deleteSelected = true;
941
-
942
- render(
943
- <DataTableCore
944
- data={mockData}
945
- columns={mockColumns}
946
- rbac={mockRBAC}
947
- features={features}
948
- onDeleteSelected={onDeleteSelected}
949
- performance={mockPerformance}
950
- />
951
- );
952
-
617
+ expect(screen.getByRole('table')).toBeInTheDocument();
953
618
  expect(screen.getByText('User 1')).toBeInTheDocument();
954
619
  });
955
620
  });
956
621
 
957
622
  describe('Export/Import Functionality', () => {
958
- it('handles export when export feature is enabled', async () => {
959
- const user = userEvent.setup();
623
+ it('renders table when export and import features are enabled', () => {
960
624
  const features = createDefaultFeatures();
961
625
  features.export = true;
962
-
963
- render(
964
- <DataTableCore
965
- data={mockData}
966
- columns={mockColumns}
967
- rbac={mockRBAC}
968
- features={features}
969
- performance={mockPerformance}
970
- />
971
- );
972
-
973
- // Export button should be available
974
- expect(screen.getByText('User 1')).toBeInTheDocument();
975
- });
976
-
977
- it('handles import when import feature is enabled', async () => {
978
- const user = userEvent.setup();
979
- const onImport = vi.fn();
980
- const features = createDefaultFeatures();
981
626
  features.import = true;
982
627
 
983
- const { useDataTableState } = await import('../hooks/useDataTableState');
984
- vi.mocked(useDataTableState).mockReturnValueOnce({
985
- state: {
986
- sorting: [],
987
- columnFilters: [],
988
- columnVisibility: {},
989
- grouping: [],
990
- expanded: {},
991
- pagination: { pageIndex: 0, pageSize: 10 },
992
- columnOrder: [],
993
- rowSelection: {},
994
- isCreating: false,
995
- creationData: {},
996
- editingRowId: null,
997
- editingData: {},
998
- showImportModal: true,
999
- showFilterRow: false,
1000
- searchQuery: '',
1001
- },
1002
- actions: {
1003
- setSorting: vi.fn(),
1004
- setColumnFilters: vi.fn(),
1005
- setColumnVisibility: vi.fn(),
1006
- setGrouping: vi.fn(),
1007
- setExpanded: vi.fn(),
1008
- setPagination: vi.fn(),
1009
- setColumnOrder: vi.fn(),
1010
- setRowSelection: vi.fn(),
1011
- setCreating: vi.fn(),
1012
- setCreationData: vi.fn(),
1013
- clearCreationData: vi.fn(),
1014
- setEditingRow: vi.fn(),
1015
- clearEditing: vi.fn(),
1016
- setImportModal: vi.fn(),
1017
- setFilterRow: vi.fn(),
1018
- setSearchQuery: vi.fn(),
1019
- resetState: vi.fn(),
1020
- },
1021
- });
1022
-
1023
628
  render(
1024
629
  <DataTableCore
1025
630
  data={mockData}
1026
631
  columns={mockColumns}
1027
632
  rbac={mockRBAC}
1028
633
  features={features}
1029
- onImport={onImport}
1030
634
  performance={mockPerformance}
1031
635
  />
1032
636
  );
1033
637
 
638
+ expect(screen.getByRole('table')).toBeInTheDocument();
1034
639
  expect(screen.getByText('User 1')).toBeInTheDocument();
1035
640
  });
1036
641
  });
1037
642
 
1038
643
  describe('Column Operations', () => {
1039
- it('handles column visibility changes', () => {
644
+ it('renders table when column visibility and reordering are enabled', () => {
1040
645
  const features = createDefaultFeatures();
1041
646
  features.columnVisibility = true;
1042
-
1043
- render(
1044
- <DataTableCore
1045
- data={mockData}
1046
- columns={mockColumns}
1047
- rbac={mockRBAC}
1048
- features={features}
1049
- performance={mockPerformance}
1050
- />
1051
- );
1052
-
1053
- expect(screen.getByText('User 1')).toBeInTheDocument();
1054
- });
1055
-
1056
- it('handles column reordering when enabled', () => {
1057
- const features = createDefaultFeatures();
1058
- features.columnReordering = true;
1059
-
1060
- render(
1061
- <DataTableCore
1062
- data={mockData}
1063
- columns={mockColumns}
1064
- rbac={mockRBAC}
1065
- features={features}
1066
- performance={mockPerformance}
1067
- />
1068
- );
1069
-
1070
- expect(screen.getByText('User 1')).toBeInTheDocument();
1071
- });
1072
-
1073
- it('handles column order persistence', () => {
1074
- const features = createDefaultFeatures();
1075
647
  features.columnReordering = true;
1076
648
 
1077
649
  render(
@@ -1085,30 +657,16 @@ describe('DataTableCore Component', () => {
1085
657
  />
1086
658
  );
1087
659
 
660
+ expect(screen.getByRole('table')).toBeInTheDocument();
1088
661
  expect(screen.getByText('User 1')).toBeInTheDocument();
1089
662
  });
1090
663
  });
1091
664
 
1092
665
  describe('State Management', () => {
1093
- it('handles default sorting state', () => {
666
+ it('renders table with default sorting, grouping, page size, and selection', () => {
1094
667
  const defaultSorting = [{ id: 'name', desc: false }];
1095
-
1096
- render(
1097
- <DataTableCore
1098
- data={mockData}
1099
- columns={mockColumns}
1100
- rbac={mockRBAC}
1101
- features={createDefaultFeatures()}
1102
- defaultSorting={defaultSorting}
1103
- performance={mockPerformance}
1104
- />
1105
- );
1106
-
1107
- expect(screen.getByText('User 1')).toBeInTheDocument();
1108
- });
1109
-
1110
- it('handles default grouping state', () => {
1111
668
  const defaultGrouping = ['department'];
669
+ const selection = { 'user-1': true, 'user-2': false };
1112
670
 
1113
671
  render(
1114
672
  <DataTableCore
@@ -1116,70 +674,21 @@ describe('DataTableCore Component', () => {
1116
674
  columns={mockColumns}
1117
675
  rbac={mockRBAC}
1118
676
  features={createDefaultFeatures()}
677
+ defaultSorting={defaultSorting}
1119
678
  defaultGrouping={defaultGrouping}
1120
- performance={mockPerformance}
1121
- />
1122
- );
1123
-
1124
- expect(screen.getByText('User 1')).toBeInTheDocument();
1125
- });
1126
-
1127
- it('handles initial page size', () => {
1128
- render(
1129
- <DataTableCore
1130
- data={mockData}
1131
- columns={mockColumns}
1132
- rbac={mockRBAC}
1133
- features={createDefaultFeatures()}
1134
679
  initialPageSize={25}
1135
- performance={mockPerformance}
1136
- />
1137
- );
1138
-
1139
- expect(screen.getByText('User 1')).toBeInTheDocument();
1140
- });
1141
-
1142
- it('handles controlled selection state', () => {
1143
- const selection = { 'user-1': true, 'user-2': false };
1144
-
1145
- render(
1146
- <DataTableCore
1147
- data={mockData}
1148
- columns={mockColumns}
1149
- rbac={mockRBAC}
1150
- features={createDefaultFeatures()}
1151
680
  selection={selection}
1152
681
  performance={mockPerformance}
1153
682
  />
1154
683
  );
1155
684
 
685
+ expect(screen.getByRole('table')).toBeInTheDocument();
1156
686
  expect(screen.getByText('User 1')).toBeInTheDocument();
1157
687
  });
1158
688
  });
1159
689
 
1160
690
  describe('Server-Side Features', () => {
1161
- it('handles server-side pagination mode', () => {
1162
- const serverSide = {
1163
- fetchData: vi.fn().mockResolvedValue({ data: mockData, totalCount: 100 }),
1164
- totalCount: 100,
1165
- };
1166
-
1167
- render(
1168
- <DataTableCore
1169
- data={mockData}
1170
- columns={mockColumns}
1171
- rbac={mockRBAC}
1172
- features={createDefaultFeatures()}
1173
- serverSide={serverSide}
1174
- paginationMode="server"
1175
- performance={mockPerformance}
1176
- />
1177
- );
1178
-
1179
- expect(screen.getByText('User 1')).toBeInTheDocument();
1180
- });
1181
-
1182
- it('handles server-side data fetching', async () => {
691
+ it('renders table with server-side pagination', async () => {
1183
692
  const serverSide = {
1184
693
  fetchData: vi.fn().mockResolvedValue({ data: mockData, totalCount: 100 }),
1185
694
  totalCount: 100,
@@ -1198,6 +707,7 @@ describe('DataTableCore Component', () => {
1198
707
  );
1199
708
 
1200
709
  await waitFor(() => {
710
+ expect(screen.getByRole('table')).toBeInTheDocument();
1201
711
  expect(screen.getByText('User 1')).toBeInTheDocument();
1202
712
  });
1203
713
  });
@@ -1321,7 +831,7 @@ describe('DataTableCore Component', () => {
1321
831
  });
1322
832
 
1323
833
  describe('Layout Persistence', () => {
1324
- it('calls onLayoutChange when layout changes', () => {
834
+ it('renders table with layout change handler', () => {
1325
835
  const onLayoutChange = vi.fn();
1326
836
  const features = createDefaultFeatures();
1327
837
  features.columnVisibility = true;
@@ -1338,12 +848,13 @@ describe('DataTableCore Component', () => {
1338
848
  />
1339
849
  );
1340
850
 
851
+ expect(screen.getByRole('table')).toBeInTheDocument();
1341
852
  expect(screen.getByText('User 1')).toBeInTheDocument();
1342
853
  });
1343
854
  });
1344
855
 
1345
856
  describe('Performance Features', () => {
1346
- it('handles virtual scrolling for large datasets', () => {
857
+ it('renders table with virtual scrolling and enhanced pagination', () => {
1347
858
  const largeData = testDataScenarios.large;
1348
859
  const features = createDefaultFeatures();
1349
860
  features.pagination = true;
@@ -1355,34 +866,18 @@ describe('DataTableCore Component', () => {
1355
866
  rbac={mockRBAC}
1356
867
  features={features}
1357
868
  virtualHeight={600}
1358
- performance={mockPerformance}
1359
- />
1360
- );
1361
-
1362
- expect(screen.getByText('User 1')).toBeInTheDocument();
1363
- });
1364
-
1365
- it('handles enhanced pagination when enabled', () => {
1366
- const features = createDefaultFeatures();
1367
- features.pagination = true;
1368
-
1369
- render(
1370
- <DataTableCore
1371
- data={mockData}
1372
- columns={mockColumns}
1373
- rbac={mockRBAC}
1374
- features={features}
1375
869
  enhancedPagination={true}
1376
870
  performance={mockPerformance}
1377
871
  />
1378
872
  );
1379
873
 
874
+ expect(screen.getByRole('table')).toBeInTheDocument();
1380
875
  expect(screen.getByText('User 1')).toBeInTheDocument();
1381
876
  });
1382
877
  });
1383
878
 
1384
879
  describe('Actions Configuration', () => {
1385
- it('renders custom actions', () => {
880
+ it('renders table with custom actions', () => {
1386
881
  const actions = [
1387
882
  {
1388
883
  label: 'Custom Action',
@@ -1402,6 +897,7 @@ describe('DataTableCore Component', () => {
1402
897
  />
1403
898
  );
1404
899
 
900
+ expect(screen.getByRole('table')).toBeInTheDocument();
1405
901
  expect(screen.getByText('User 1')).toBeInTheDocument();
1406
902
  });
1407
903
  });