@jmruthers/pace-core 0.5.181 → 0.5.183

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 (756) hide show
  1. package/CHANGELOG.md +1 -1
  2. package/README.md +16 -2
  3. package/dist/{AuthService-DYuQPJj6.d.ts → AuthService-B-cd2MA4.d.ts} +9 -11
  4. package/dist/{DataTable-CWAZZcXC.d.ts → DataTable-Bz8ffqyA.d.ts} +1 -1
  5. package/dist/{DataTable-UA6CL4JI.js → DataTable-QAB34V6K.js} +14 -15
  6. package/dist/UnifiedAuthProvider-7F6T4B6K.js +13 -0
  7. package/dist/{UnifiedAuthProvider-DJxGTftH.d.ts → UnifiedAuthProvider-F86d7dSi.d.ts} +5 -6
  8. package/dist/{api-45XYYO2A.js → api-ROMBCNKU.js} +5 -5
  9. package/dist/{audit-64X3VJXB.js → audit-WRS3KJKI.js} +4 -4
  10. package/dist/auth-BZOJqrdd.d.ts +49 -0
  11. package/dist/{chunk-CX5M4ZAG.js → chunk-5DRSZLL2.js} +1 -1
  12. package/dist/chunk-5DRSZLL2.js.map +1 -0
  13. package/dist/{chunk-BESYRHQM.js → chunk-6C4YBBJM.js} +10 -7
  14. package/dist/chunk-6C4YBBJM.js.map +1 -0
  15. package/dist/{chunk-PLDDJCW6.js → chunk-7D4SUZUM.js} +2 -13
  16. package/dist/{chunk-HRO5HWN2.js → chunk-CSOFYHAG.js} +55 -162
  17. package/dist/chunk-CSOFYHAG.js.map +1 -0
  18. package/dist/{chunk-ANBQRTPX.js → chunk-E66EQZE6.js} +3 -5
  19. package/dist/{chunk-ANBQRTPX.js.map → chunk-E66EQZE6.js.map} +1 -1
  20. package/dist/{chunk-Q5QRDWKI.js → chunk-F2IMUDXZ.js} +4 -6
  21. package/dist/chunk-F2IMUDXZ.js.map +1 -0
  22. package/dist/{chunk-SBVILCCA.js → chunk-FSFQFJCU.js} +28 -6
  23. package/dist/chunk-FSFQFJCU.js.map +1 -0
  24. package/dist/chunk-FUEYYMX5.js +2296 -0
  25. package/dist/chunk-FUEYYMX5.js.map +1 -0
  26. package/dist/{chunk-FFKNH6U5.js → chunk-HKIT6O7W.js} +3 -5
  27. package/dist/{chunk-FFKNH6U5.js.map → chunk-HKIT6O7W.js.map} +1 -1
  28. package/dist/chunk-KQCRWDSA.js +1 -0
  29. package/dist/{chunk-S5OFRT4M.js → chunk-KUEN3HFB.js} +6 -6
  30. package/dist/chunk-KUEN3HFB.js.map +1 -0
  31. package/dist/chunk-LMC26NLJ.js +84 -0
  32. package/dist/chunk-LMC26NLJ.js.map +1 -0
  33. package/dist/{chunk-BVYWGZVV.js → chunk-M7W4CP3M.js} +52 -19
  34. package/dist/chunk-M7W4CP3M.js.map +1 -0
  35. package/dist/{chunk-HZLDFOE4.js → chunk-MI7HBHN3.js} +164 -243
  36. package/dist/chunk-MI7HBHN3.js.map +1 -0
  37. package/dist/{chunk-PPMP5J6T.js → chunk-PWAHJW4G.js} +180 -29
  38. package/dist/chunk-PWAHJW4G.js.map +1 -0
  39. package/dist/chunk-PWLANIRT.js +127 -0
  40. package/dist/{chunk-XDNLUEXI.js.map → chunk-PWLANIRT.js.map} +1 -1
  41. package/dist/chunk-QCDXODCA.js +75 -0
  42. package/dist/chunk-QCDXODCA.js.map +1 -0
  43. package/dist/{chunk-D7LCGMVS.js → chunk-QETLRQI6.js} +526 -887
  44. package/dist/chunk-QETLRQI6.js.map +1 -0
  45. package/dist/{chunk-5MT24GKJ.js → chunk-QUVSNGIP.js} +264 -262
  46. package/dist/chunk-QUVSNGIP.js.map +1 -0
  47. package/dist/chunk-QXHPKYJV.js +113 -0
  48. package/dist/chunk-QXHPKYJV.js.map +1 -0
  49. package/dist/{chunk-OWAG3GSU.js → chunk-R77UEZ4E.js} +11 -1
  50. package/dist/chunk-R77UEZ4E.js.map +1 -0
  51. package/dist/{chunk-ZYTYSTO5.js → chunk-RA3JUFMW.js} +314 -161
  52. package/dist/chunk-RA3JUFMW.js.map +1 -0
  53. package/dist/{chunk-ERISIBYU.js → chunk-SQGMNID3.js} +3 -8
  54. package/dist/chunk-SQGMNID3.js.map +1 -0
  55. package/dist/{chunk-XJ2HZOBU.js → chunk-UHNYIBXL.js} +1 -1
  56. package/dist/chunk-UHNYIBXL.js.map +1 -0
  57. package/{src/utils/secureStorage.ts → dist/chunk-VBXEHIUJ.js} +113 -88
  58. package/dist/{chunk-7QCC6MCP.js.map → chunk-VBXEHIUJ.js.map} +1 -1
  59. package/dist/{chunk-VZ4VDGTB.js → chunk-W22JP75J.js} +5 -13
  60. package/dist/{chunk-VZ4VDGTB.js.map → chunk-W22JP75J.js.map} +1 -1
  61. package/dist/components.d.ts +12 -93
  62. package/dist/components.js +23 -106
  63. package/dist/components.js.map +1 -1
  64. package/dist/core-CUElvH_C.d.ts +164 -0
  65. package/dist/database.generated-CBmg2950.d.ts +8284 -0
  66. package/dist/event-CW5YB_2p.d.ts +239 -0
  67. package/dist/{file-reference-C6Gkn77H.d.ts → file-reference-D06mEEWW.d.ts} +7 -5
  68. package/dist/functions-D_kgHktt.d.ts +208 -0
  69. package/dist/hooks.d.ts +54 -7
  70. package/dist/hooks.js +204 -17
  71. package/dist/hooks.js.map +1 -1
  72. package/dist/{EventLogo-B3V3otev.d.ts → index-Bl--n7-T.d.ts} +387 -397
  73. package/dist/index.d.ts +94 -261
  74. package/dist/index.js +314 -126
  75. package/dist/index.js.map +1 -1
  76. package/dist/providers.d.ts +7 -8
  77. package/dist/providers.js +6 -13
  78. package/dist/rbac/index.d.ts +171 -101
  79. package/dist/rbac/index.js +23 -17
  80. package/dist/styles/index.d.ts +1 -3
  81. package/dist/styles/index.js +2 -17
  82. package/dist/theming/runtime.js +3 -3
  83. package/dist/types-UU913iLA.d.ts +102 -0
  84. package/dist/{types-Dfz9dmVH.d.ts → types-_x1f4QBF.d.ts} +6 -6
  85. package/dist/types.d.ts +88 -227
  86. package/dist/types.js +64 -112
  87. package/dist/types.js.map +1 -1
  88. package/dist/{usePublicRouteParams-B7PabvuH.d.ts → usePublicRouteParams-JJczomYq.d.ts} +203 -6
  89. package/dist/utils.d.ts +299 -13
  90. package/dist/utils.js +481 -55
  91. package/dist/utils.js.map +1 -1
  92. package/dist/validation-643vUDZW.d.ts +177 -0
  93. package/docs/DOCUMENTATION_REVIEW_TRACKER.md +511 -0
  94. package/docs/README.md +9 -8
  95. package/docs/api/README.md +16 -2
  96. package/docs/api/classes/ColumnFactory.md +1 -1
  97. package/docs/api/classes/ErrorBoundary.md +1 -1
  98. package/docs/api/classes/InvalidScopeError.md +4 -4
  99. package/docs/api/classes/MissingUserContextError.md +4 -4
  100. package/docs/api/classes/OrganisationContextRequiredError.md +4 -4
  101. package/docs/api/classes/PermissionDeniedError.md +4 -4
  102. package/docs/api/classes/RBACAuditManager.md +14 -14
  103. package/docs/api/classes/RBACCache.md +1 -1
  104. package/docs/api/classes/RBACEngine.md +2 -2
  105. package/docs/api/classes/RBACError.md +4 -4
  106. package/docs/api/classes/RBACNotInitializedError.md +4 -4
  107. package/docs/api/classes/SecureSupabaseClient.md +29 -9
  108. package/docs/api/classes/StorageUtils.md +1 -1
  109. package/docs/api/enums/FileCategory.md +17 -17
  110. package/docs/api/enums/RBACErrorCode.md +228 -0
  111. package/docs/api/enums/RPCFunction.md +118 -0
  112. package/docs/api/interfaces/AggregateConfig.md +1 -1
  113. package/docs/api/interfaces/BadgeProps.md +1 -1
  114. package/docs/api/interfaces/ButtonProps.md +2 -2
  115. package/docs/api/interfaces/CalendarProps.md +1 -1
  116. package/docs/api/interfaces/CardProps.md +29 -3
  117. package/docs/api/interfaces/ColorPalette.md +1 -1
  118. package/docs/api/interfaces/ColorShade.md +1 -1
  119. package/docs/api/interfaces/DataAccessRecord.md +1 -1
  120. package/docs/api/interfaces/DataRecord.md +1 -1
  121. package/docs/api/interfaces/DataTableAction.md +2 -2
  122. package/docs/api/interfaces/DataTableColumn.md +6 -6
  123. package/docs/api/interfaces/DataTableProps.md +1 -1
  124. package/docs/api/interfaces/DataTableToolbarButton.md +2 -2
  125. package/docs/api/interfaces/EmptyStateConfig.md +1 -1
  126. package/docs/api/interfaces/EnhancedNavigationMenuProps.md +1 -1
  127. package/docs/api/interfaces/EventAppRoleData.md +1 -1
  128. package/docs/api/interfaces/ExportColumn.md +5 -5
  129. package/docs/api/interfaces/ExportOptions.md +4 -4
  130. package/docs/api/interfaces/FileDisplayProps.md +1 -1
  131. package/docs/api/interfaces/FileMetadata.md +13 -13
  132. package/docs/api/interfaces/FileReference.md +12 -12
  133. package/docs/api/interfaces/FileSizeLimits.md +1 -1
  134. package/docs/api/interfaces/FileUploadOptions.md +10 -10
  135. package/docs/api/interfaces/FileUploadProps.md +19 -19
  136. package/docs/api/interfaces/FooterProps.md +1 -1
  137. package/docs/api/interfaces/FormFieldProps.md +166 -0
  138. package/docs/api/interfaces/FormProps.md +113 -0
  139. package/docs/api/interfaces/GrantEventAppRoleParams.md +1 -1
  140. package/docs/api/interfaces/InactivityWarningModalProps.md +8 -8
  141. package/docs/api/interfaces/InputProps.md +2 -2
  142. package/docs/api/interfaces/LabelProps.md +8 -8
  143. package/docs/api/interfaces/LoginFormProps.md +1 -1
  144. package/docs/api/interfaces/NavigationAccessRecord.md +1 -1
  145. package/docs/api/interfaces/NavigationContextType.md +1 -1
  146. package/docs/api/interfaces/NavigationGuardProps.md +1 -1
  147. package/docs/api/interfaces/NavigationItem.md +17 -73
  148. package/docs/api/interfaces/NavigationMenuProps.md +38 -53
  149. package/docs/api/interfaces/NavigationProviderProps.md +1 -1
  150. package/docs/api/interfaces/Organisation.md +13 -13
  151. package/docs/api/interfaces/OrganisationContextType.md +21 -21
  152. package/docs/api/interfaces/OrganisationMembership.md +15 -15
  153. package/docs/api/interfaces/OrganisationProviderProps.md +59 -2
  154. package/docs/api/interfaces/OrganisationSecurityError.md +5 -5
  155. package/docs/api/interfaces/PaceAppLayoutProps.md +26 -39
  156. package/docs/api/interfaces/PaceLoginPageProps.md +1 -1
  157. package/docs/api/interfaces/PageAccessRecord.md +1 -1
  158. package/docs/api/interfaces/PagePermissionContextType.md +1 -1
  159. package/docs/api/interfaces/PagePermissionGuardProps.md +1 -1
  160. package/docs/api/interfaces/PagePermissionProviderProps.md +1 -1
  161. package/docs/api/interfaces/PaletteData.md +1 -1
  162. package/docs/api/interfaces/PermissionEnforcerProps.md +1 -1
  163. package/docs/api/interfaces/ProgressProps.md +50 -0
  164. package/docs/api/interfaces/ProtectedRouteProps.md +1 -1
  165. package/docs/api/interfaces/PublicPageFooterProps.md +9 -9
  166. package/docs/api/interfaces/PublicPageHeaderProps.md +10 -10
  167. package/docs/api/interfaces/PublicPageLayoutProps.md +15 -15
  168. package/docs/api/interfaces/RBACAccessValidateParams.md +52 -0
  169. package/docs/api/interfaces/RBACAccessValidateResult.md +41 -0
  170. package/docs/api/interfaces/RBACAuditLogParams.md +85 -0
  171. package/docs/api/interfaces/RBACAuditLogResult.md +52 -0
  172. package/docs/api/interfaces/RBACConfig.md +2 -2
  173. package/docs/api/interfaces/RBACContext.md +52 -0
  174. package/docs/api/interfaces/RBACLogger.md +1 -1
  175. package/docs/api/interfaces/RBACPageAccessCheckParams.md +74 -0
  176. package/docs/api/interfaces/RBACPermissionCheckParams.md +74 -0
  177. package/docs/api/interfaces/RBACPermissionCheckResult.md +52 -0
  178. package/docs/api/interfaces/RBACPermissionsGetParams.md +63 -0
  179. package/docs/api/interfaces/RBACPermissionsGetResult.md +63 -0
  180. package/docs/api/interfaces/RBACResult.md +58 -0
  181. package/docs/api/interfaces/RBACRoleGrantParams.md +63 -0
  182. package/docs/api/interfaces/RBACRoleGrantResult.md +52 -0
  183. package/docs/api/interfaces/RBACRoleRevokeParams.md +63 -0
  184. package/docs/api/interfaces/RBACRoleRevokeResult.md +52 -0
  185. package/docs/api/interfaces/RBACRoleValidateParams.md +52 -0
  186. package/docs/api/interfaces/RBACRoleValidateResult.md +63 -0
  187. package/docs/api/interfaces/RBACRolesListParams.md +52 -0
  188. package/docs/api/interfaces/RBACRolesListResult.md +74 -0
  189. package/docs/api/interfaces/RBACSessionTrackParams.md +74 -0
  190. package/docs/api/interfaces/RBACSessionTrackResult.md +52 -0
  191. package/docs/api/interfaces/ResourcePermissions.md +1 -1
  192. package/docs/api/interfaces/RevokeEventAppRoleParams.md +1 -1
  193. package/docs/api/interfaces/RoleBasedRouterContextType.md +1 -1
  194. package/docs/api/interfaces/RoleBasedRouterProps.md +1 -1
  195. package/docs/api/interfaces/RoleManagementResult.md +1 -1
  196. package/docs/api/interfaces/RouteAccessRecord.md +1 -1
  197. package/docs/api/interfaces/RouteConfig.md +1 -1
  198. package/docs/api/interfaces/SecureDataContextType.md +1 -1
  199. package/docs/api/interfaces/SecureDataProviderProps.md +1 -1
  200. package/docs/api/interfaces/SessionRestorationLoaderProps.md +15 -2
  201. package/docs/api/interfaces/StorageConfig.md +1 -1
  202. package/docs/api/interfaces/StorageFileInfo.md +1 -1
  203. package/docs/api/interfaces/StorageFileMetadata.md +1 -1
  204. package/docs/api/interfaces/StorageListOptions.md +1 -1
  205. package/docs/api/interfaces/StorageListResult.md +1 -1
  206. package/docs/api/interfaces/StorageUploadOptions.md +1 -1
  207. package/docs/api/interfaces/StorageUploadResult.md +1 -1
  208. package/docs/api/interfaces/StorageUrlOptions.md +1 -1
  209. package/docs/api/interfaces/StyleImport.md +1 -1
  210. package/docs/api/interfaces/SwitchProps.md +1 -1
  211. package/docs/api/interfaces/TabsContentProps.md +1 -1
  212. package/docs/api/interfaces/TabsListProps.md +1 -1
  213. package/docs/api/interfaces/TabsProps.md +1 -1
  214. package/docs/api/interfaces/TabsTriggerProps.md +43 -2
  215. package/docs/api/interfaces/TextareaProps.md +2 -2
  216. package/docs/api/interfaces/ToastActionElement.md +1 -1
  217. package/docs/api/interfaces/ToastProps.md +1 -1
  218. package/docs/api/interfaces/UnifiedAuthContextType.md +61 -61
  219. package/docs/api/interfaces/UnifiedAuthProviderProps.md +13 -13
  220. package/docs/api/interfaces/UseInactivityTrackerOptions.md +1 -1
  221. package/docs/api/interfaces/UseInactivityTrackerReturn.md +1 -1
  222. package/docs/api/interfaces/UsePublicEventLogoOptions.md +87 -0
  223. package/docs/api/interfaces/UsePublicEventLogoReturn.md +81 -0
  224. package/docs/api/interfaces/UsePublicEventOptions.md +3 -3
  225. package/docs/api/interfaces/UsePublicEventReturn.md +5 -5
  226. package/docs/api/interfaces/UsePublicFileDisplayOptions.md +2 -2
  227. package/docs/api/interfaces/UsePublicFileDisplayReturn.md +1 -1
  228. package/docs/api/interfaces/UsePublicRouteParamsReturn.md +1 -1
  229. package/docs/api/interfaces/UseResolvedScopeOptions.md +2 -2
  230. package/docs/api/interfaces/UseResolvedScopeReturn.md +1 -1
  231. package/docs/api/interfaces/UseResourcePermissionsOptions.md +1 -1
  232. package/docs/api/interfaces/UserEventAccess.md +1 -1
  233. package/docs/api/interfaces/UserMenuProps.md +4 -4
  234. package/docs/api/interfaces/UserProfile.md +7 -7
  235. package/docs/api/modules.md +484 -462
  236. package/docs/api-reference/components.md +186 -15
  237. package/docs/api-reference/deprecated.md +376 -0
  238. package/docs/api-reference/hooks.md +149 -19
  239. package/docs/api-reference/providers.md +61 -6
  240. package/docs/api-reference/rpc-functions.md +397 -0
  241. package/docs/api-reference/types.md +135 -78
  242. package/docs/api-reference/utilities.md +51 -380
  243. package/docs/architecture/README.md +49 -3
  244. package/docs/architecture/database-schema-requirements.md +40 -3
  245. package/docs/architecture/rbac-security-architecture.md +41 -4
  246. package/docs/architecture/services.md +127 -42
  247. package/docs/best-practices/README.md +51 -5
  248. package/docs/best-practices/accessibility.md +32 -3
  249. package/docs/best-practices/common-patterns.md +50 -3
  250. package/docs/best-practices/deployment.md +50 -4
  251. package/docs/best-practices/performance.md +50 -3
  252. package/docs/best-practices/security.md +94 -41
  253. package/docs/best-practices/testing.md +33 -4
  254. package/docs/core-concepts/authentication.md +5 -5
  255. package/docs/core-concepts/events.md +3 -3
  256. package/docs/core-concepts/organisations.md +3 -3
  257. package/docs/core-concepts/permissions.md +3 -3
  258. package/docs/core-concepts/rbac-system.md +5 -5
  259. package/docs/documentation-index.md +30 -8
  260. package/docs/getting-started/documentation-index.md +1 -1
  261. package/docs/getting-started/examples/README.md +7 -5
  262. package/docs/getting-started/examples/basic-auth-app.md +3 -0
  263. package/docs/getting-started/examples/full-featured-app.md +5 -3
  264. package/docs/getting-started/faq.md +6 -6
  265. package/docs/getting-started/installation-guide.md +192 -13
  266. package/docs/getting-started/local-development.md +303 -0
  267. package/docs/getting-started/quick-reference.md +3 -3
  268. package/docs/getting-started/quick-start.md +517 -0
  269. package/docs/implementation-guides/app-layout.md +45 -3
  270. package/docs/implementation-guides/authentication.md +66 -7
  271. package/docs/implementation-guides/component-styling.md +53 -3
  272. package/docs/implementation-guides/data-tables.md +76 -7
  273. package/docs/implementation-guides/datatable-filtering.md +1 -2
  274. package/docs/implementation-guides/datatable-rbac-usage.md +0 -1
  275. package/docs/implementation-guides/dynamic-colors.md +155 -4
  276. package/docs/implementation-guides/file-reference-system.md +72 -3
  277. package/docs/implementation-guides/file-upload-storage.md +72 -3
  278. package/docs/implementation-guides/forms.md +53 -3
  279. package/docs/implementation-guides/inactivity-tracking.md +53 -3
  280. package/docs/implementation-guides/large-datasets.md +1 -1
  281. package/docs/implementation-guides/navigation.md +55 -5
  282. package/docs/implementation-guides/organisation-security.md +72 -3
  283. package/docs/implementation-guides/performance.md +57 -1
  284. package/docs/implementation-guides/permission-enforcement.md +81 -8
  285. package/docs/implementation-guides/public-pages.md +560 -14
  286. package/docs/migration/MIGRATION_GUIDE.md +409 -50
  287. package/docs/migration/README.md +37 -3
  288. package/docs/migration/organisation-context-timing-fix.md +39 -4
  289. package/docs/migration/quick-migration-guide.md +41 -5
  290. package/docs/migration/rbac-migration.md +59 -3
  291. package/docs/migration/service-architecture.md +77 -14
  292. package/docs/rbac/README.md +79 -3
  293. package/docs/rbac/advanced-patterns.md +47 -3
  294. package/docs/rbac/api-reference.md +77 -8
  295. package/docs/rbac/event-based-apps.md +50 -5
  296. package/docs/rbac/examples/rbac-rls-integration-example.md +3 -3
  297. package/docs/rbac/examples.md +39 -3
  298. package/docs/rbac/getting-started.md +63 -4
  299. package/docs/rbac/quick-start.md +57 -5
  300. package/docs/rbac/rbac-rls-integration.md +68 -6
  301. package/docs/rbac/super-admin-guide.md +47 -3
  302. package/docs/rbac/troubleshooting.md +3 -3
  303. package/docs/security/README.md +68 -3
  304. package/docs/security/checklist.md +50 -3
  305. package/docs/standards/01-architecture-standard.md +39 -0
  306. package/docs/standards/02-api-and-rpc-standard.md +39 -0
  307. package/docs/standards/03-component-standard.md +32 -0
  308. package/docs/standards/04-code-style-standard.md +32 -0
  309. package/docs/standards/05-security-standard.md +30 -0
  310. package/docs/standards/06-testing-and-docs-standard.md +29 -0
  311. package/docs/standards/README.md +35 -0
  312. package/docs/styles/README.md +89 -8
  313. package/docs/testing/README.md +175 -24
  314. package/docs/troubleshooting/README.md +50 -3
  315. package/docs/troubleshooting/common-issues.md +271 -5
  316. package/docs/troubleshooting/debugging.md +54 -1
  317. package/docs/troubleshooting/migration.md +54 -1
  318. package/docs/troubleshooting/organisation-context-setup.md +29 -3
  319. package/docs/troubleshooting/styling-issues.md +246 -4
  320. package/{src/components/DataTable/examples → examples/DataTable}/GroupingAggregationExample.tsx +1 -1
  321. package/examples/{components 2/DataTable/HierarchicalActionsExample.tsx → DataTable/HierarchicalActionsExample.tsx} +7 -6
  322. package/{src/components/DataTable/examples → examples/DataTable}/HierarchicalExample.tsx +8 -6
  323. package/examples/{components 2/DataTable/PerformanceExample.tsx → DataTable/PerformanceExample.tsx} +2 -2
  324. package/examples/{components 2/DataTable/index.ts → DataTable/index.ts} +1 -0
  325. package/{src/components/Dialog/examples → examples/Dialog}/HtmlDialogExample.tsx +3 -3
  326. package/examples/{components 2/Dialog/ScrollableDialogExample.tsx → Dialog/ScrollableDialogExample.tsx} +1 -1
  327. package/{src/components/Dialog/examples → examples/Dialog}/SmartDialogExample.tsx +1 -1
  328. package/examples/{components 2/Dialog/index.ts → Dialog/index.ts} +0 -3
  329. package/examples/{features/public-pages → PublicPages}/CorrectPublicPageImplementation.tsx +52 -17
  330. package/examples/{features/public-pages → PublicPages}/PublicEventPage.tsx +65 -35
  331. package/examples/{features/public-pages → PublicPages}/PublicPageApp.tsx +52 -18
  332. package/examples/{features/public-pages → PublicPages}/PublicPageUsageExample.tsx +28 -15
  333. package/examples/README.md +81 -33
  334. package/examples/index.ts +14 -12
  335. package/examples/{RBAC → rbac}/CompleteRBACExample.tsx +1 -1
  336. package/examples/{features/rbac → rbac}/EventBasedApp.tsx +4 -4
  337. package/examples/{features/rbac → rbac}/PermissionExample.tsx +5 -3
  338. package/package.json +21 -27
  339. package/src/__tests__/helpers/test-utils.tsx +29 -3
  340. package/src/__tests__/rbac/PagePermissionGuard.test.tsx +7 -5
  341. package/src/components/Alert/Alert.test.tsx +2 -2
  342. package/src/components/Alert/Alert.tsx +4 -4
  343. package/src/components/Avatar/Avatar.test.tsx +17 -6
  344. package/src/components/Badge/Badge.test.tsx +1 -1
  345. package/src/components/Badge/Badge.tsx +2 -2
  346. package/src/components/Button/Button.test.tsx +2 -2
  347. package/src/components/Button/Button.tsx +11 -7
  348. package/src/components/Calendar/Calendar.test.tsx +41 -8
  349. package/src/components/Calendar/Calendar.tsx +39 -36
  350. package/src/components/Card/Card.tsx +51 -13
  351. package/src/components/Checkbox/Checkbox.test.tsx +36 -12
  352. package/src/components/DataTable/DataTable.test.tsx +1 -1
  353. package/src/components/DataTable/__tests__/DataTable.comprehensive.test.tsx +13 -7
  354. package/src/components/DataTable/__tests__/DataTable.default-state.test.tsx +14 -42
  355. package/src/components/DataTable/__tests__/DataTable.export.test.tsx +13 -10
  356. package/src/components/DataTable/__tests__/DataTable.grouping-aggregation.test.tsx +14 -11
  357. package/src/components/DataTable/__tests__/DataTable.hooks.test.tsx +4 -2
  358. package/src/components/DataTable/__tests__/DataTable.test.tsx +13 -7
  359. package/src/components/DataTable/__tests__/DataTableCore.test-setup.ts +13 -10
  360. package/src/components/DataTable/__tests__/DataTableCore.test.tsx +15 -11
  361. package/src/components/DataTable/__tests__/a11y.basic.test.tsx +12 -6
  362. package/src/components/DataTable/__tests__/keyboard.test.tsx +12 -6
  363. package/src/components/DataTable/__tests__/pagination.modes.test.tsx +10 -6
  364. package/src/components/DataTable/__tests__/test-utils/sharedTestUtils.tsx +1 -1
  365. package/src/components/DataTable/components/DataTableBody.tsx +10 -25
  366. package/src/components/DataTable/components/DataTableCore.tsx +1 -1
  367. package/src/components/DataTable/components/FilterRow.tsx +3 -1
  368. package/src/components/DataTable/components/ImportModal.tsx +1 -1
  369. package/src/components/DataTable/components/VirtualizedDataTable.tsx +9 -9
  370. package/src/components/DataTable/core/ColumnFactory.ts +6 -6
  371. package/src/components/DataTable/core/DataTableContext.tsx +14 -10
  372. package/src/components/DataTable/core/LocalDataAdapter.ts +2 -1
  373. package/src/components/DataTable/core/PluginRegistry.ts +3 -3
  374. package/src/components/DataTable/core/StateManager.ts +12 -11
  375. package/src/components/DataTable/core/__tests__/ActionManager.test.ts +104 -0
  376. package/src/components/DataTable/core/__tests__/DataManager.test.ts +101 -0
  377. package/src/components/DataTable/core/__tests__/LocalDataAdapter.test.ts +84 -0
  378. package/src/components/DataTable/core/__tests__/PluginRegistry.test.ts +102 -0
  379. package/src/components/DataTable/core/__tests__/StateManager.test.ts +104 -0
  380. package/src/components/DataTable/core/interfaces.ts +17 -17
  381. package/src/components/DataTable/hooks/__tests__/useDataTableConfiguration.test.ts +124 -0
  382. package/src/components/DataTable/hooks/__tests__/useDataTableDataPipeline.test.ts +117 -0
  383. package/src/components/DataTable/hooks/__tests__/useDataTablePermissions.test.ts +102 -0
  384. package/src/components/DataTable/hooks/__tests__/useEffectiveColumnOrder.test.ts +53 -0
  385. package/src/components/DataTable/hooks/useColumnOrderPersistence.ts +0 -2
  386. package/src/components/DataTable/hooks/useDataTablePermissions.ts +9 -8
  387. package/src/components/DataTable/types.ts +5 -5
  388. package/src/components/DataTable/utils/aggregationUtils.ts +4 -4
  389. package/src/components/DataTable/utils/columnUtils.ts +3 -2
  390. package/src/components/DataTable/utils/debugTools.ts +1 -1
  391. package/src/components/DataTable/utils/exportUtils.ts +6 -6
  392. package/src/components/DataTable/utils/hierarchicalSorting.ts +6 -6
  393. package/src/components/DataTable/utils/hierarchicalUtils.ts +0 -8
  394. package/src/components/DataTable/utils/index.ts +0 -1
  395. package/src/components/DataTable/utils/performanceUtils.ts +9 -4
  396. package/src/components/Dialog/Dialog.test.tsx +49 -27
  397. package/src/components/ErrorBoundary/ErrorBoundary.test.tsx +13 -8
  398. package/src/components/EventSelector/EventSelector.test.tsx +60 -12
  399. package/src/components/EventSelector/EventSelector.tsx +38 -15
  400. package/src/components/EventSelector/index.ts +2 -2
  401. package/src/components/FileDisplay/FileDisplay.test.tsx +143 -85
  402. package/src/components/FileDisplay/FileDisplay.tsx +1 -0
  403. package/src/components/FileUpload/FileUpload.test.tsx +532 -152
  404. package/src/components/FileUpload/FileUpload.tsx +43 -8
  405. package/src/components/Footer/Footer.test.tsx +19 -14
  406. package/src/components/Form/Form.test.tsx +96 -14
  407. package/src/components/Form/Form.tsx +210 -1
  408. package/src/components/Form/index.ts +3 -7
  409. package/src/components/Header/Header.test.tsx +24 -17
  410. package/src/components/Header/Header.tsx +3 -1
  411. package/src/components/InactivityWarningModal/InactivityWarningModal.tsx +2 -4
  412. package/src/components/Input/Input.test.tsx +61 -36
  413. package/src/components/Label/{__tests__/Label.test.tsx → Label.test.tsx} +2 -2
  414. package/src/components/Label/Label.tsx +2 -3
  415. package/src/components/LoadingSpinner/LoadingSpinner.test.tsx +6 -5
  416. package/src/components/LoadingSpinner/LoadingSpinner.tsx +6 -2
  417. package/src/components/LoginForm/LoginForm.test.tsx +14 -13
  418. package/src/components/LoginForm/LoginForm.tsx +1 -1
  419. package/src/components/LoginForm/index.ts +7 -0
  420. package/src/components/NavigationMenu/NavigationMenu.test.tsx +233 -20
  421. package/src/components/NavigationMenu/NavigationMenu.tsx +191 -55
  422. package/src/components/NavigationMenu/index.ts +1 -1
  423. package/src/components/OrganisationSelector/OrganisationSelector.test.tsx +20 -11
  424. package/src/components/OrganisationSelector/OrganisationSelector.tsx +1 -1
  425. package/src/components/PaceAppLayout/{__tests__/PaceAppLayout.integration.test.tsx → PaceAppLayout.integration.test.tsx} +272 -79
  426. package/src/components/PaceAppLayout/{__tests__/PaceAppLayout.performance.test.tsx → PaceAppLayout.performance.test.tsx} +155 -32
  427. package/src/components/PaceAppLayout/{__tests__/PaceAppLayout.security.test.tsx → PaceAppLayout.security.test.tsx} +211 -65
  428. package/src/components/PaceAppLayout/PaceAppLayout.test.tsx +498 -210
  429. package/src/components/PaceAppLayout/PaceAppLayout.tsx +63 -64
  430. package/src/components/PaceAppLayout/test-setup.tsx +192 -0
  431. package/src/components/PaceLoginPage/PaceLoginPage.test.tsx +193 -39
  432. package/src/components/{PasswordReset → PasswordChange}/PasswordChangeForm.test.tsx +2 -2
  433. package/src/components/{PasswordReset → PasswordChange}/PasswordChangeForm.tsx +10 -4
  434. package/src/components/PasswordChange/index.ts +2 -0
  435. package/src/components/Progress/Progress.test.tsx +11 -0
  436. package/src/components/Progress/Progress.tsx +1 -1
  437. package/src/components/Progress/index.ts +10 -0
  438. package/src/components/ProtectedRoute/ProtectedRoute.test.tsx +2 -1
  439. package/src/components/PublicLayout/PublicLayout.test.tsx +1210 -0
  440. package/src/components/PublicLayout/PublicPageLayout.tsx +190 -36
  441. package/src/components/PublicLayout/PublicPageProvider.tsx +8 -7
  442. package/src/components/PublicLayout/index.ts +10 -28
  443. package/src/components/Select/Select.test.tsx +7 -7
  444. package/src/components/Select/Select.tsx +277 -11
  445. package/src/components/Select/index.ts +1 -2
  446. package/src/components/SessionRestorationLoader/SessionRestorationLoader.test.tsx +232 -0
  447. package/src/components/SessionRestorationLoader/SessionRestorationLoader.tsx +40 -19
  448. package/src/components/Table/{__tests__/Table.test.tsx → Table.test.tsx} +94 -41
  449. package/src/components/Tabs/Tabs.test.tsx +10 -9
  450. package/src/components/Tabs/Tabs.tsx +61 -33
  451. package/src/components/Textarea/Textarea.test.tsx +31 -18
  452. package/src/components/Toast/Toast.tsx +2 -2
  453. package/src/components/Tooltip/Tooltip.test.tsx +1 -1
  454. package/src/components/UserMenu/UserMenu.test.tsx +7 -6
  455. package/src/components/UserMenu/UserMenu.tsx +2 -2
  456. package/src/components/index.ts +5 -4
  457. package/src/constants/performance.ts +19 -8
  458. package/src/hooks/__tests__/useAppConfig.unit.test.ts +21 -22
  459. package/src/hooks/__tests__/useEvents.unit.test.ts +5 -4
  460. package/src/hooks/__tests__/useOrganisationPermissions.unit.test.tsx +2 -2
  461. package/src/hooks/__tests__/usePermissionCache.simple.test.ts +17 -0
  462. package/src/hooks/__tests__/usePermissionCache.unit.test.ts +16 -11
  463. package/src/hooks/__tests__/usePublicEvent.simple.test.ts +1 -3
  464. package/src/hooks/__tests__/usePublicEvent.unit.test.ts +1 -3
  465. package/src/hooks/__tests__/useRBAC.unit.test.ts +24 -2
  466. package/src/hooks/index.ts +4 -0
  467. package/src/hooks/public/index.ts +2 -0
  468. package/src/hooks/public/usePublicEvent.ts +4 -6
  469. package/src/hooks/public/usePublicEventLogo.test.ts +147 -0
  470. package/src/hooks/public/usePublicRouteParams.ts +1 -1
  471. package/src/hooks/services/useAuth.ts +2 -4
  472. package/src/hooks/services/useCurrentEvent.ts +1 -1
  473. package/src/hooks/useAppConfig.ts +1 -1
  474. package/src/hooks/useDataTablePerformance.ts +2 -2
  475. package/src/hooks/useEventTheme.ts +1 -1
  476. package/src/hooks/useEvents.ts +51 -10
  477. package/src/hooks/useOrganisationPermissions.test.ts +3 -3
  478. package/src/hooks/useOrganisationPermissions.ts +1 -1
  479. package/src/hooks/useOrganisationSecurity.ts +2 -2
  480. package/src/hooks/usePermissionCache.test.ts +9 -9
  481. package/src/hooks/usePermissionCache.ts +2 -2
  482. package/src/index.ts +19 -12
  483. package/src/providers/OrganisationProvider.tsx +73 -9
  484. package/src/providers/UnifiedAuthProvider.smoke.test.tsx +113 -13
  485. package/src/providers/__tests__/AuthProvider.test.tsx +2 -1
  486. package/src/providers/__tests__/EventProvider.test.tsx +24 -15
  487. package/src/providers/__tests__/OrganisationProvider.test.tsx +87 -36
  488. package/src/providers/__tests__/UnifiedAuthProvider.test.tsx +80 -24
  489. package/src/providers/index.ts +0 -3
  490. package/src/providers/services/AuthServiceProvider.tsx +2 -17
  491. package/src/providers/services/EventServiceProvider.tsx +11 -16
  492. package/src/providers/services/InactivityServiceProvider.tsx +9 -12
  493. package/src/providers/services/OrganisationServiceProvider.tsx +9 -12
  494. package/src/providers/services/UnifiedAuthProvider.tsx +85 -18
  495. package/src/providers/services/__tests__/AuthServiceProvider.integration.test.tsx +11 -4
  496. package/src/rbac/__tests__/scenarios.user-role.test.tsx +105 -21
  497. package/src/rbac/adapters.tsx +1 -1
  498. package/src/rbac/api.ts +20 -4
  499. package/src/rbac/audit-enhanced.ts +47 -2
  500. package/src/rbac/audit.ts +47 -2
  501. package/src/rbac/components/NavigationGuard.tsx +1 -1
  502. package/src/rbac/components/NavigationProvider.test.tsx +7 -6
  503. package/src/rbac/components/NavigationProvider.tsx +1 -1
  504. package/src/rbac/components/PagePermissionGuard.tsx +1 -1
  505. package/src/rbac/components/PagePermissionProvider.test.tsx +7 -6
  506. package/src/rbac/components/PagePermissionProvider.tsx +1 -1
  507. package/src/rbac/components/PermissionEnforcer.tsx +1 -1
  508. package/src/rbac/components/RoleBasedRouter.tsx +1 -1
  509. package/src/rbac/components/SecureDataProvider.test.tsx +7 -6
  510. package/src/rbac/components/SecureDataProvider.tsx +1 -1
  511. package/src/rbac/components/__tests__/EnhancedNavigationMenu.test.tsx +6 -6
  512. package/src/rbac/components/__tests__/NavigationGuard.test.tsx +11 -10
  513. package/src/rbac/components/__tests__/NavigationProvider.test.tsx +10 -11
  514. package/src/rbac/components/__tests__/PagePermissionGuard.race-condition.test.tsx +19 -15
  515. package/src/rbac/components/__tests__/PagePermissionGuard.test.tsx +13 -12
  516. package/src/rbac/components/__tests__/PagePermissionGuard.verification.test.tsx +19 -15
  517. package/src/rbac/components/__tests__/PagePermissionProvider.test.tsx +18 -18
  518. package/src/rbac/components/__tests__/PermissionEnforcer.test.tsx +11 -10
  519. package/src/rbac/components/__tests__/RoleBasedRouter.test.tsx +8 -7
  520. package/src/rbac/components/__tests__/SecureDataProvider.fixed.test.tsx +10 -11
  521. package/src/rbac/components/__tests__/SecureDataProvider.test.tsx +48 -19
  522. package/src/rbac/hooks/__tests__/useSecureSupabase.test.ts +476 -0
  523. package/src/rbac/hooks/index.ts +3 -0
  524. package/src/rbac/hooks/usePermissions.ts +31 -85
  525. package/src/rbac/hooks/useRBAC.test.ts +13 -1
  526. package/src/rbac/hooks/useRBAC.ts +13 -67
  527. package/src/rbac/hooks/useResolvedScope.ts +11 -0
  528. package/src/rbac/hooks/useSecureSupabase.ts +308 -0
  529. package/src/rbac/index.ts +3 -0
  530. package/src/rbac/secureClient.ts +53 -6
  531. package/src/rbac/security.ts +37 -1
  532. package/src/{types/rbac-functions.ts → rbac/types/functions.ts} +30 -30
  533. package/src/rbac/types.ts +3 -2
  534. package/src/services/AuthService.ts +33 -25
  535. package/src/services/EventService.ts +56 -44
  536. package/src/services/InactivityService.ts +33 -53
  537. package/src/services/OrganisationService.ts +36 -40
  538. package/src/services/__tests__/AuthService.restoreSession.test.ts +6 -2
  539. package/src/services/__tests__/EventService.test.ts +67 -33
  540. package/src/services/interfaces/IEventService.ts +1 -1
  541. package/src/styles/core.css +2 -2
  542. package/src/styles/index.test.ts +21 -0
  543. package/src/styles/index.ts +1 -5
  544. package/src/types/__tests__/guards.test.ts +1 -1
  545. package/src/types/__tests__/organisation.roles.test.ts +55 -0
  546. package/src/types/__tests__/type-validation.test.ts +0 -1
  547. package/src/types/auth.ts +42 -2
  548. package/src/types/core.ts +251 -0
  549. package/src/types/database.ts +11 -496
  550. package/src/types/event.ts +102 -0
  551. package/src/types/file-reference.ts +6 -4
  552. package/src/types/guards.ts +2 -1
  553. package/src/types/index.ts +48 -14
  554. package/src/types/lodash.debounce.d.ts +15 -0
  555. package/src/types/organisation.ts +14 -10
  556. package/src/types/supabase.ts +15 -17
  557. package/src/utils/__tests__/secureErrors.unit.test.ts +1 -1
  558. package/src/utils/__tests__/validationUtils.unit.test.ts +0 -29
  559. package/src/utils/app/appNameResolver.ts +1 -1
  560. package/src/utils/audit/audit.test.ts +65 -0
  561. package/src/utils/device/deviceFingerprint.test.ts +171 -0
  562. package/src/utils/dynamic/dynamicUtils.ts +3 -2
  563. package/src/utils/file-reference/index.ts +25 -6
  564. package/src/utils/security/secureErrors.ts +1 -1
  565. package/src/utils/validation/__tests__/validationUtils.test.ts +72 -0
  566. package/src/utils/validation/index.ts +6 -12
  567. package/src/utils/validation/validationUtils.ts +0 -13
  568. package/dist/UnifiedAuthProvider-B37ATQHE.js +0 -16
  569. package/dist/auth-DReDSLq9.d.ts +0 -16
  570. package/dist/chunk-3JI76CYK.js +0 -2444
  571. package/dist/chunk-3JI76CYK.js.map +0 -1
  572. package/dist/chunk-56XJ3TU6.js +0 -11
  573. package/dist/chunk-56XJ3TU6.js.map +0 -1
  574. package/dist/chunk-5MT24GKJ.js.map +0 -1
  575. package/dist/chunk-7QCC6MCP.js +0 -288
  576. package/dist/chunk-BESYRHQM.js.map +0 -1
  577. package/dist/chunk-BJPBT3CU.js +0 -21
  578. package/dist/chunk-BJPBT3CU.js.map +0 -1
  579. package/dist/chunk-BVYWGZVV.js.map +0 -1
  580. package/dist/chunk-CX5M4ZAG.js.map +0 -1
  581. package/dist/chunk-D7LCGMVS.js.map +0 -1
  582. package/dist/chunk-EGI6MUL6.js +0 -27
  583. package/dist/chunk-EGI6MUL6.js.map +0 -1
  584. package/dist/chunk-ERISIBYU.js.map +0 -1
  585. package/dist/chunk-HRO5HWN2.js.map +0 -1
  586. package/dist/chunk-HZLDFOE4.js.map +0 -1
  587. package/dist/chunk-JISYG63F.js +0 -70
  588. package/dist/chunk-JISYG63F.js.map +0 -1
  589. package/dist/chunk-LIMSTKYD.js +0 -61
  590. package/dist/chunk-LIMSTKYD.js.map +0 -1
  591. package/dist/chunk-OWAG3GSU.js.map +0 -1
  592. package/dist/chunk-PPMP5J6T.js.map +0 -1
  593. package/dist/chunk-Q5QRDWKI.js.map +0 -1
  594. package/dist/chunk-S5OFRT4M.js.map +0 -1
  595. package/dist/chunk-SBVILCCA.js.map +0 -1
  596. package/dist/chunk-TUMEWN34.js +0 -15
  597. package/dist/chunk-TUMEWN34.js.map +0 -1
  598. package/dist/chunk-XDNLUEXI.js +0 -138
  599. package/dist/chunk-XJ2HZOBU.js.map +0 -1
  600. package/dist/chunk-ZYTYSTO5.js.map +0 -1
  601. package/dist/chunk-ZZ2SS7NI.js +0 -237
  602. package/dist/chunk-ZZ2SS7NI.js.map +0 -1
  603. package/dist/database-C6jy7EOu.d.ts +0 -500
  604. package/dist/organisation-D6qRDtbF.d.ts +0 -93
  605. package/dist/schema-DTDZQe2u.d.ts +0 -28
  606. package/dist/unified-DQ4VcT7H.d.ts +0 -198
  607. package/dist/useInactivityTracker-TO6ZOF35.js +0 -11
  608. package/dist/validation.d.ts +0 -47
  609. package/dist/validation.js +0 -24
  610. package/dist/validation.js.map +0 -1
  611. package/docs/DOCUMENTATION_AUDIT.md +0 -172
  612. package/docs/DOCUMENTATION_STANDARD.md +0 -137
  613. package/docs/api/classes/PublicErrorBoundary.md +0 -132
  614. package/docs/api/interfaces/EventLogoProps.md +0 -152
  615. package/docs/api/interfaces/PublicErrorBoundaryProps.md +0 -94
  616. package/docs/api/interfaces/PublicErrorBoundaryState.md +0 -68
  617. package/docs/api/interfaces/PublicLoadingSpinnerProps.md +0 -86
  618. package/docs/architecture/rpc-function-standards.md +0 -1106
  619. package/docs/getting-started/consuming-app-vite-config.md +0 -239
  620. package/docs/implementation-guides/event-theming-summary.md +0 -226
  621. package/docs/implementation-guides/public-pages-advanced.md +0 -1038
  622. package/docs/migration/v0.4.15-tailwind-scanning.md +0 -278
  623. package/docs/migration/v0.4.16-css-first-approach.md +0 -312
  624. package/docs/migration/v0.4.17-source-path-fix.md +0 -235
  625. package/docs/rbac/RBAC_EVENT_CONTEXT_LOADING.md +0 -222
  626. package/docs/rbac/RBAC_LOGIN_SAFETY_FIX.md +0 -95
  627. package/docs/rbac/RBAC_V0.5.147_FIX.md +0 -117
  628. package/docs/rbac/README-rbac-rls-integration.md +0 -374
  629. package/docs/styles/usage.md +0 -227
  630. package/docs/testing/visual-testing.md +0 -120
  631. package/docs/troubleshooting/DEBUG_NETWORK_ERROR.md +0 -152
  632. package/docs/troubleshooting/FIX_SUPABASE_CORS.md +0 -184
  633. package/docs/troubleshooting/cake-page-permission-guard-issue-summary.md +0 -193
  634. package/docs/troubleshooting/database-view-compatibility.md +0 -125
  635. package/docs/troubleshooting/react-hooks-issue-analysis.md +0 -172
  636. package/docs/troubleshooting/tailwind-content-scanning.md +0 -219
  637. package/examples/RBAC/EventBasedApp.tsx +0 -239
  638. package/examples/RBAC/PermissionExample.tsx +0 -151
  639. package/examples/STRUCTURE.md +0 -125
  640. package/examples/components 2/DataTable/HierarchicalExample.tsx +0 -475
  641. package/examples/components 2/Dialog/BasicHtmlTest.tsx +0 -55
  642. package/examples/components 2/Dialog/DebugHtmlExample.tsx +0 -68
  643. package/examples/components 2/Dialog/HtmlDialogExample.tsx +0 -202
  644. package/examples/components 2/Dialog/SimpleHtmlTest.tsx +0 -61
  645. package/examples/components 2/Dialog/SmartDialogExample.tsx +0 -322
  646. package/examples/components 2/index.ts +0 -11
  647. package/examples/features/index.ts +0 -12
  648. package/examples/features/rbac/CompleteRBACExample.tsx +0 -324
  649. package/examples/features/rbac/index.ts +0 -13
  650. package/examples/public-pages/CorrectPublicPageImplementation.tsx +0 -301
  651. package/examples/public-pages/PublicEventPage.tsx +0 -274
  652. package/examples/public-pages/PublicPageApp.tsx +0 -308
  653. package/examples/public-pages/PublicPageUsageExample.tsx +0 -216
  654. package/examples/public-pages/index.ts +0 -14
  655. package/src/__tests__/TEST_STANDARD.md +0 -1008
  656. package/src/components/Checkbox/__mocks__/Checkbox.tsx +0 -2
  657. package/src/components/DataTable/examples/HierarchicalActionsExample.tsx +0 -421
  658. package/src/components/DataTable/examples/InitialPageSizeExample.tsx +0 -177
  659. package/src/components/DataTable/examples/PerformanceExample.tsx +0 -506
  660. package/src/components/DataTable/examples/__tests__/HierarchicalActionsExample.test.tsx +0 -316
  661. package/src/components/DataTable/examples/__tests__/HierarchicalExample.test.tsx +0 -45
  662. package/src/components/DataTable/examples/__tests__/InitialPageSizeExample.test.tsx +0 -211
  663. package/src/components/DataTable/examples/__tests__/PerformanceExample.test.tsx +0 -126
  664. package/src/components/Dialog/README.md +0 -804
  665. package/src/components/Dialog/examples/BasicHtmlTest.tsx +0 -55
  666. package/src/components/Dialog/examples/DebugHtmlExample.tsx +0 -68
  667. package/src/components/Dialog/examples/ScrollableDialogExample.tsx +0 -290
  668. package/src/components/Dialog/examples/SimpleHtmlTest.tsx +0 -61
  669. package/src/components/Dialog/examples/__tests__/HtmlDialogExample.test.tsx +0 -71
  670. package/src/components/Dialog/examples/__tests__/SimpleHtmlTest.test.tsx +0 -122
  671. package/src/components/Dialog/examples/__tests__/SmartDialogExample.unit.test.tsx +0 -147
  672. package/src/components/Dialog/utils/__tests__/safeHtml.unit.test.ts +0 -611
  673. package/src/components/Dialog/utils/safeHtml.ts +0 -185
  674. package/src/components/EventSelector/types.ts +0 -79
  675. package/src/components/Form/FormErrorSummary.tsx +0 -113
  676. package/src/components/Form/FormField.tsx +0 -249
  677. package/src/components/Form/FormFieldset.tsx +0 -127
  678. package/src/components/Form/FormLiveRegion.tsx +0 -198
  679. package/src/components/Input/__mocks__/Input.tsx +0 -2
  680. package/src/components/NavigationMenu/types.ts +0 -85
  681. package/src/components/PaceAppLayout/__tests__/PaceAppLayout.accessibility.test.tsx +0 -326
  682. package/src/components/PaceAppLayout/__tests__/PaceAppLayout.unit.test.tsx +0 -1078
  683. package/src/components/PasswordReset/PasswordResetForm.test.tsx +0 -597
  684. package/src/components/PasswordReset/PasswordResetForm.tsx +0 -201
  685. package/src/components/PasswordReset/index.ts +0 -2
  686. package/src/components/ProtectedRoute/README.md +0 -164
  687. package/src/components/PublicLayout/EventLogo.tsx +0 -175
  688. package/src/components/PublicLayout/PublicErrorBoundary.tsx +0 -282
  689. package/src/components/PublicLayout/PublicLoadingSpinner.tsx +0 -216
  690. package/src/components/PublicLayout/PublicPageContextChecker.tsx +0 -131
  691. package/src/components/PublicLayout/PublicPageDebugger.tsx +0 -104
  692. package/src/components/PublicLayout/PublicPageDiagnostic.tsx +0 -162
  693. package/src/components/PublicLayout/PublicPageFooter.tsx +0 -124
  694. package/src/components/PublicLayout/PublicPageHeader.tsx +0 -209
  695. package/src/components/PublicLayout/__tests__/PublicErrorBoundary.test.tsx +0 -449
  696. package/src/components/PublicLayout/__tests__/PublicLoadingSpinner.test.tsx +0 -393
  697. package/src/components/PublicLayout/__tests__/PublicPageContextChecker.test.tsx +0 -192
  698. package/src/components/PublicLayout/__tests__/PublicPageFooter.test.tsx +0 -351
  699. package/src/components/PublicLayout/__tests__/PublicPageHeader.test.tsx +0 -402
  700. package/src/components/PublicLayout/__tests__/PublicPageLayout.test.tsx +0 -460
  701. package/src/components/PublicLayout/__tests__/PublicPageProvider.test.tsx +0 -313
  702. package/src/components/Select/hooks.ts +0 -289
  703. package/src/hooks/useCounter.test.ts +0 -131
  704. package/src/hooks/useDebounce.test.ts +0 -375
  705. package/src/providers/AuthProvider.tsx +0 -15
  706. package/src/providers/EventProvider.tsx +0 -16
  707. package/src/providers/InactivityProvider.tsx +0 -15
  708. package/src/providers/OrganisationProvider.context.test.tsx +0 -169
  709. package/src/providers/UnifiedAuthProvider.tsx +0 -15
  710. package/src/types/theme.ts +0 -6
  711. package/src/types/unified.ts +0 -265
  712. package/src/utils/appConfig.ts +0 -47
  713. package/src/utils/appIdResolver.test.ts +0 -499
  714. package/src/utils/appIdResolver.ts +0 -130
  715. package/src/utils/appNameResolver.simple.test.ts +0 -212
  716. package/src/utils/appNameResolver.test.ts +0 -121
  717. package/src/utils/appNameResolver.ts +0 -191
  718. package/src/utils/audit.ts +0 -127
  719. package/src/utils/auth-utils.ts +0 -96
  720. package/src/utils/bundleAnalysis.ts +0 -129
  721. package/src/utils/debugLogger.ts +0 -67
  722. package/src/utils/deviceFingerprint.ts +0 -215
  723. package/src/utils/dynamicUtils.ts +0 -105
  724. package/src/utils/file-reference.test.ts +0 -788
  725. package/src/utils/file-reference.ts +0 -519
  726. package/src/utils/formatDate.test.ts +0 -237
  727. package/src/utils/formatting.ts +0 -170
  728. package/src/utils/lazyLoad.tsx +0 -44
  729. package/src/utils/logger.ts +0 -179
  730. package/src/utils/organisationContext.test.ts +0 -322
  731. package/src/utils/organisationContext.ts +0 -153
  732. package/src/utils/performanceBenchmark.ts +0 -64
  733. package/src/utils/performanceBudgets.ts +0 -110
  734. package/src/utils/permissionTypes.ts +0 -37
  735. package/src/utils/permissionUtils.test.ts +0 -393
  736. package/src/utils/permissionUtils.ts +0 -34
  737. package/src/utils/sanitization.ts +0 -264
  738. package/src/utils/schemaUtils.ts +0 -37
  739. package/src/utils/secureDataAccess.test.ts +0 -711
  740. package/src/utils/secureDataAccess.ts +0 -377
  741. package/src/utils/secureErrors.ts +0 -79
  742. package/src/utils/security.ts +0 -156
  743. package/src/utils/securityMonitor.ts +0 -45
  744. package/src/utils/sessionTracking.ts +0 -126
  745. package/src/utils/validation.ts +0 -111
  746. package/src/utils/validationUtils.ts +0 -120
  747. package/src/validation/index.ts +0 -12
  748. /package/dist/{DataTable-UA6CL4JI.js.map → DataTable-QAB34V6K.js.map} +0 -0
  749. /package/dist/{UnifiedAuthProvider-B37ATQHE.js.map → UnifiedAuthProvider-7F6T4B6K.js.map} +0 -0
  750. /package/dist/{api-45XYYO2A.js.map → api-ROMBCNKU.js.map} +0 -0
  751. /package/dist/{audit-64X3VJXB.js.map → audit-WRS3KJKI.js.map} +0 -0
  752. /package/dist/{chunk-PLDDJCW6.js.map → chunk-7D4SUZUM.js.map} +0 -0
  753. /package/dist/{useInactivityTracker-TO6ZOF35.js.map → chunk-KQCRWDSA.js.map} +0 -0
  754. /package/examples/{components 2/DataTable → DataTable}/InitialPageSizeExample.tsx +0 -0
  755. /package/examples/{features/public-pages → PublicPages}/index.ts +0 -0
  756. /package/examples/{RBAC → rbac}/index.ts +0 -0
@@ -0,0 +1,124 @@
1
+ /**
2
+ * @file Unit tests for useDataTableConfiguration
3
+ * @package @jmruthers/pace-core
4
+ * @module Components/DataTable/Hooks/__tests__
5
+ */
6
+
7
+ import { renderHook } from '@testing-library/react';
8
+ import { describe, expect, it } from 'vitest';
9
+ import type { ColumnDef } from '@tanstack/react-table';
10
+ import { useDataTableConfiguration } from '../useDataTableConfiguration';
11
+ import type { DataRecord, NormalizedDataTableFeatureConfig } from '../../types';
12
+ import type { TableHandlers, TableStateSnapshot } from '../useTableHandlers';
13
+
14
+ interface TestRow extends DataRecord {
15
+ id: string;
16
+ name: string;
17
+ }
18
+
19
+ const columns: ColumnDef<TestRow>[] = [
20
+ { accessorKey: 'name', header: 'Name' },
21
+ { accessorKey: 'status', header: 'Status' },
22
+ ];
23
+
24
+ const stateSnapshot: TableStateSnapshot<TestRow> = {
25
+ sorting: [],
26
+ columnFilters: [],
27
+ columnVisibility: {},
28
+ rowSelection: {},
29
+ grouping: [],
30
+ expanded: {},
31
+ pagination: { pageIndex: 0, pageSize: 10 },
32
+ globalFilter: '',
33
+ columnOrder: ['status', 'name'],
34
+ };
35
+
36
+ const handlers: TableHandlers = {
37
+ onSortingChange: () => {},
38
+ onColumnFiltersChange: () => {},
39
+ onColumnVisibilityChange: () => {},
40
+ onRowSelectionChange: () => {},
41
+ onGroupingChange: () => {},
42
+ onExpandedChange: () => {},
43
+ onPaginationChange: () => {},
44
+ onColumnOrderChange: () => {},
45
+ };
46
+
47
+ const baseFeatures: NormalizedDataTableFeatureConfig = {
48
+ search: false,
49
+ pagination: true,
50
+ sorting: true,
51
+ filtering: true,
52
+ import: false,
53
+ export: false,
54
+ selection: false,
55
+ creation: false,
56
+ editing: false,
57
+ deletion: false,
58
+ deleteSelected: false,
59
+ grouping: false,
60
+ columnVisibility: true,
61
+ columnReordering: true,
62
+ hierarchical: false,
63
+ };
64
+
65
+ describe('useDataTableConfiguration', () => {
66
+ it('pins selection column to the front of the order when enabled', () => {
67
+ const { result } = renderHook(() =>
68
+ useDataTableConfiguration<TestRow>({
69
+ data: [],
70
+ columns,
71
+ stateSnapshot,
72
+ handlers,
73
+ features: { ...baseFeatures, selection: true },
74
+ getRowId: row => row.id,
75
+ finalPaginationMode: 'client',
76
+ finalDataCount: 2,
77
+ pageSize: 10,
78
+ })
79
+ );
80
+
81
+ expect(result.current.state.columnOrder).toEqual(['select', 'status', 'name']);
82
+ });
83
+
84
+ it('enables manual pagination only when server config is available', () => {
85
+ const { result } = renderHook(() =>
86
+ useDataTableConfiguration<TestRow>({
87
+ data: [],
88
+ columns,
89
+ stateSnapshot,
90
+ handlers,
91
+ features: baseFeatures,
92
+ getRowId: row => row.id,
93
+ finalPaginationMode: 'server',
94
+ finalDataCount: 100,
95
+ pageSize: 25,
96
+ hasServerSideConfig: true,
97
+ })
98
+ );
99
+
100
+ expect(result.current.manualPagination).toBe(true);
101
+ expect(result.current.getPaginationRowModel).toBeUndefined();
102
+ expect(result.current.pageCount).toBe(4);
103
+ });
104
+
105
+ it('keeps client-side pagination when server config is missing', () => {
106
+ const { result } = renderHook(() =>
107
+ useDataTableConfiguration<TestRow>({
108
+ data: [],
109
+ columns,
110
+ stateSnapshot,
111
+ handlers,
112
+ features: baseFeatures,
113
+ getRowId: row => row.id,
114
+ finalPaginationMode: 'server',
115
+ finalDataCount: 100,
116
+ pageSize: 25,
117
+ hasServerSideConfig: false,
118
+ })
119
+ );
120
+
121
+ expect(result.current.manualPagination).toBe(false);
122
+ expect(typeof result.current.getPaginationRowModel).toBe('function');
123
+ });
124
+ });
@@ -0,0 +1,117 @@
1
+ /**
2
+ * @file Unit tests for useDataTableDataPipeline
3
+ * @package @jmruthers/pace-core
4
+ * @module Components/DataTable/Hooks/__tests__
5
+ */
6
+
7
+ import { renderHook } from '@testing-library/react';
8
+ import { beforeEach, describe, expect, it, vi } from 'vitest';
9
+ import { useDataTableDataPipeline } from '../useDataTableDataPipeline';
10
+ import { defaultDataTableFeatures, type DataRecord, type NormalizedDataTableFeatureConfig } from '../../types';
11
+
12
+ const mockValidateHierarchicalData = vi.fn(() => ({ isValid: true, errors: [] as string[] }));
13
+ const mockSortByStructure = vi.fn((rows: unknown[]) => rows);
14
+ const mockSortWithSorting = vi.fn((rows: unknown[], _sorting: unknown) => rows);
15
+ const mockHierarchicalState = vi.fn(() => ({
16
+ visibleRows: [],
17
+ toggleRow: vi.fn(),
18
+ }));
19
+
20
+ vi.mock('../../utils/hierarchicalUtils', () => ({
21
+ validateHierarchicalData: (...args: unknown[]) => mockValidateHierarchicalData(...args),
22
+ }));
23
+
24
+ vi.mock('../../utils/hierarchicalSorting', () => ({
25
+ sortHierarchicalDataByStructure: (...args: unknown[]) => mockSortByStructure(...args),
26
+ sortHierarchicalDataWithSorting: (...args: unknown[]) => mockSortWithSorting(...args),
27
+ }));
28
+
29
+ vi.mock('../useHierarchicalState', () => ({
30
+ useHierarchicalState: (...args: unknown[]) => mockHierarchicalState(...args),
31
+ }));
32
+
33
+ interface TestRow extends DataRecord {
34
+ id: string;
35
+ isParent?: boolean;
36
+ }
37
+
38
+ const baseFeatures: NormalizedDataTableFeatureConfig = {
39
+ ...defaultDataTableFeatures,
40
+ pagination: true,
41
+ };
42
+
43
+ describe('useDataTableDataPipeline', () => {
44
+ beforeEach(() => {
45
+ vi.clearAllMocks();
46
+ mockHierarchicalState.mockReturnValue({ visibleRows: [], toggleRow: vi.fn() });
47
+ mockSortByStructure.mockImplementation(rows => rows);
48
+ mockSortWithSorting.mockImplementation(rows => rows);
49
+ });
50
+
51
+ it('falls back to client data when server pagination is detected but no server data is present', () => {
52
+ const data: TestRow[] = [{ id: '1' }, { id: '2' }];
53
+
54
+ const { result } = renderHook(() =>
55
+ useDataTableDataPipeline<TestRow>({
56
+ data,
57
+ features: baseFeatures,
58
+ sorting: [],
59
+ finalPaginationMode: 'server',
60
+ serverData: null,
61
+ })
62
+ );
63
+
64
+ expect(result.current.finalTableData).toEqual(data);
65
+ expect(result.current.dataCount).toBe(0);
66
+ });
67
+
68
+ it('uses server data and total count when provided', () => {
69
+ const serverRows: TestRow[] = [{ id: 'server-1' }];
70
+
71
+ const { result } = renderHook(() =>
72
+ useDataTableDataPipeline<TestRow>({
73
+ data: [],
74
+ features: baseFeatures,
75
+ sorting: [],
76
+ finalPaginationMode: 'server',
77
+ serverData: { data: serverRows, totalCount: 42, pageIndex: 0, pageSize: 10 },
78
+ })
79
+ );
80
+
81
+ expect(result.current.finalTableData).toEqual(serverRows);
82
+ expect(result.current.dataCount).toBe(42);
83
+ });
84
+
85
+ it('validates and sorts hierarchical data when enabled', () => {
86
+ const structuredRows: TestRow[] = [
87
+ { id: 'parent', isParent: true },
88
+ { id: 'child', isParent: false },
89
+ ];
90
+
91
+ mockSortByStructure.mockReturnValue(structuredRows);
92
+ mockHierarchicalState.mockReturnValue({ visibleRows: structuredRows, toggleRow: vi.fn() });
93
+ mockSortWithSorting.mockImplementation((_rows, _sorting) => structuredRows.slice().reverse());
94
+
95
+ const hierarchicalFeatures: NormalizedDataTableFeatureConfig = {
96
+ ...baseFeatures,
97
+ hierarchical: true,
98
+ };
99
+
100
+ const { result } = renderHook(() =>
101
+ useDataTableDataPipeline<TestRow>({
102
+ data: structuredRows,
103
+ features: hierarchicalFeatures,
104
+ hierarchical: { enabled: true },
105
+ sorting: [{ id: 'name', desc: false }],
106
+ finalPaginationMode: 'client',
107
+ serverData: null,
108
+ })
109
+ );
110
+
111
+ expect(mockValidateHierarchicalData).toHaveBeenCalled();
112
+ expect(mockSortByStructure).toHaveBeenCalledWith(structuredRows);
113
+ expect(mockSortWithSorting).toHaveBeenCalled();
114
+ expect(result.current.hierarchicalState).toEqual({ visibleRows: structuredRows, toggleRow: expect.any(Function) });
115
+ expect(result.current.finalTableData).toEqual(structuredRows.slice().reverse());
116
+ });
117
+ });
@@ -0,0 +1,102 @@
1
+ /**
2
+ * @file Unit tests for useDataTablePermissions
3
+ * @package @jmruthers/pace-core
4
+ * @module Components/DataTable/Hooks/__tests__
5
+ */
6
+
7
+ import { renderHook } from '@testing-library/react';
8
+ import { beforeEach, describe, expect, it, vi } from 'vitest';
9
+ import { useDataTablePermissions } from '../useDataTablePermissions';
10
+ import type { DataTableFeatureConfig } from '../../types';
11
+
12
+ type CanResult = { can: boolean; isLoading: boolean; error: null };
13
+
14
+ const mockUseUnifiedAuth = vi.fn(() => ({
15
+ user: { id: 'user-1' },
16
+ selectedOrganisation: { id: 'org-1' },
17
+ selectedEvent: { event_id: 'event-1' },
18
+ supabase: {},
19
+ }));
20
+
21
+ const mockUseResolvedScope = vi.fn(() => ({
22
+ resolvedScope: { organisationId: 'org-1', appId: 'app-1', eventId: 'event-1' },
23
+ isLoading: false,
24
+ }));
25
+
26
+ const mockUseCan = vi.fn<(userId: string, scope: unknown, permission: string) => CanResult>();
27
+
28
+ vi.mock('../../../../providers/services/UnifiedAuthProvider', () => ({
29
+ useUnifiedAuth: () => mockUseUnifiedAuth(),
30
+ UnifiedAuthProvider: (props: { children: unknown }) => props.children,
31
+ }));
32
+
33
+ vi.mock('../../../../rbac/hooks', () => ({
34
+ useResolvedScope: (...args: unknown[]) => mockUseResolvedScope(...args),
35
+ useCan: (...args: Parameters<typeof mockUseCan>) => mockUseCan(...args),
36
+ }));
37
+
38
+ vi.mock('../../../../hooks/useToast', () => ({
39
+ useToast: () => ({
40
+ toast: vi.fn(),
41
+ }),
42
+ }));
43
+
44
+ vi.mock('../../../../utils/core/logger', () => {
45
+ const mockLoggerInstance = {
46
+ info: vi.fn(),
47
+ warn: vi.fn(),
48
+ error: vi.fn(),
49
+ debug: vi.fn(),
50
+ };
51
+ return {
52
+ createLogger: () => mockLoggerInstance,
53
+ logger: mockLoggerInstance,
54
+ };
55
+ });
56
+
57
+ describe('useDataTablePermissions', () => {
58
+ beforeEach(() => {
59
+ vi.clearAllMocks();
60
+ mockUseCan.mockImplementation(() => ({ can: false, isLoading: false, error: null }));
61
+ });
62
+
63
+ it('requires either pageId or pageName', () => {
64
+ expect(() =>
65
+ renderHook(() => useDataTablePermissions({}, {}))
66
+ ).toThrow('rbac.pageId or rbac.pageName');
67
+ });
68
+
69
+ it('filters features based on permission results', () => {
70
+ const featureConfig: DataTableFeatureConfig = {
71
+ creation: true,
72
+ editing: true,
73
+ deletion: true,
74
+ deleteSelected: true,
75
+ export: true,
76
+ import: true,
77
+ };
78
+
79
+ const allowedPermissions = new Set(['read:page.users', 'update:page.users']);
80
+
81
+ mockUseCan.mockImplementation((_, scope, permission) => ({
82
+ can: allowedPermissions.has(permission),
83
+ isLoading: false,
84
+ error: null,
85
+ }));
86
+
87
+ const { result } = renderHook(() =>
88
+ useDataTablePermissions({ pageId: 'users' }, featureConfig)
89
+ );
90
+
91
+ expect(result.current.effectivePageId).toBe('users');
92
+ expect(result.current.secureFeatures.creation).toBe(false);
93
+ expect(result.current.secureFeatures.editing).toBe(true);
94
+ expect(result.current.secureFeatures.deletion).toBe(false);
95
+ expect(result.current.secureFeatures.deleteSelected).toBe(false);
96
+ expect(result.current.secureFeatures.export).toBe(true);
97
+ expect(result.current.secureFeatures.import).toBe(false);
98
+
99
+ const scopes = mockUseCan.mock.calls.map(([, scope]) => scope);
100
+ expect(new Set(scopes).size).toBe(1);
101
+ });
102
+ });
@@ -0,0 +1,53 @@
1
+ /**
2
+ * @file Unit tests for useEffectiveColumnOrder
3
+ * @package @jmruthers/pace-core
4
+ * @module Components/DataTable/Hooks/__tests__
5
+ */
6
+
7
+ import { renderHook } from '@testing-library/react';
8
+ import { describe, expect, it } from 'vitest';
9
+ import type { DataTableColumn, DataRecord } from '../../types';
10
+ import { useEffectiveColumnOrder } from '../useEffectiveColumnOrder';
11
+
12
+ type TestRow = DataRecord & { id: string; name: string };
13
+
14
+ const baseColumns: DataTableColumn<TestRow>[] = [
15
+ { id: 'name', accessorKey: 'name', header: 'Name' },
16
+ { accessorKey: 'status', header: 'Status' },
17
+ ];
18
+
19
+ describe('useEffectiveColumnOrder', () => {
20
+ it('derives column order from definitions when no external order is provided', () => {
21
+ const { result } = renderHook(() =>
22
+ useEffectiveColumnOrder<TestRow>({
23
+ columns: baseColumns,
24
+ selectionEnabled: false,
25
+ })
26
+ );
27
+
28
+ expect(result.current).toEqual(['name', 'status']);
29
+ });
30
+
31
+ it('respects explicit column order and keeps select column pinned first', () => {
32
+ const { result } = renderHook(() =>
33
+ useEffectiveColumnOrder<TestRow>({
34
+ columns: baseColumns,
35
+ externalColumnOrder: ['status', 'select', 'name'],
36
+ selectionEnabled: true,
37
+ })
38
+ );
39
+
40
+ expect(result.current).toEqual(['select', 'status', 'name']);
41
+ });
42
+
43
+ it('injects selection column when not present in derived order', () => {
44
+ const { result } = renderHook(() =>
45
+ useEffectiveColumnOrder<TestRow>({
46
+ columns: baseColumns,
47
+ selectionEnabled: true,
48
+ })
49
+ );
50
+
51
+ expect(result.current).toEqual(['select', 'name', 'status']);
52
+ });
53
+ });
@@ -31,7 +31,6 @@ export function useColumnOrderPersistence({
31
31
  }
32
32
 
33
33
  // Only load if we have a storage key (either via storageKey prop or tableId)
34
- // This maintains backward compatibility with existing tests
35
34
  if (!storageKey && !tableId) {
36
35
  setIsLoaded(true);
37
36
  return;
@@ -57,7 +56,6 @@ export function useColumnOrderPersistence({
57
56
  if (!enablePersistence || typeof window === 'undefined') return;
58
57
 
59
58
  // Only save if we have a storage key (either via storageKey prop or tableId)
60
- // This maintains backward compatibility with existing tests
61
59
  if (!storageKey && !tableId) return;
62
60
 
63
61
  try {
@@ -9,7 +9,7 @@
9
9
  */
10
10
 
11
11
  import { useMemo, useRef } from 'react';
12
- import { useUnifiedAuth } from '../../../providers/UnifiedAuthProvider';
12
+ import { useUnifiedAuth } from '../../../providers/services/UnifiedAuthProvider';
13
13
  import { useCan, useResolvedScope } from '../../../rbac/hooks';
14
14
  import { useToast } from '../../../hooks/useToast';
15
15
  import { createLogger } from '../../../utils/core/logger';
@@ -18,6 +18,7 @@ import {
18
18
  type DataTableFeatureConfig,
19
19
  type DataTableRBACConfig,
20
20
  type NormalizedDataTableFeatureConfig,
21
+ type DataRecord,
21
22
  } from '../types';
22
23
  import type { Permission } from '../../../rbac/types';
23
24
 
@@ -34,7 +35,7 @@ export interface UseDataTablePermissionsReturn {
34
35
  effectivePageId: string | undefined;
35
36
  }
36
37
 
37
- export function useDataTablePermissions<TData extends Record<string, any>>(
38
+ export function useDataTablePermissions<TData extends DataRecord>(
38
39
  rbac: DataTableRBACConfig,
39
40
  features: DataTableFeatureConfig = {}
40
41
  ): UseDataTablePermissionsReturn {
@@ -87,9 +88,9 @@ export function useDataTablePermissions<TData extends Record<string, any>>(
87
88
  * 2. Maintain performance
88
89
  * 3. Still ensure permissions check against the current scope
89
90
  */
90
- const stableScopeRef = useRef<{ organisationId: string; appId: string; eventId: string | undefined }>({
91
- organisationId: '',
92
- appId: '',
91
+ const stableScopeRef = useRef<{ organisationId?: string; appId?: string; eventId?: string }>({
92
+ organisationId: undefined,
93
+ appId: undefined,
93
94
  eventId: undefined
94
95
  });
95
96
 
@@ -108,13 +109,13 @@ export function useDataTablePermissions<TData extends Record<string, any>>(
108
109
  stableScopeRef.current.appId !== newScope.appId) {
109
110
  stableScopeRef.current = {
110
111
  organisationId: newScope.organisationId,
111
- appId: newScope.appId || '',
112
+ appId: newScope.appId,
112
113
  eventId: newScope.eventId
113
114
  };
114
115
  }
115
116
  } else if (!rawResolvedScope) {
116
117
  // Reset to empty scope when no resolved scope (e.g., user logged out)
117
- stableScopeRef.current = { organisationId: '', appId: '', eventId: undefined };
118
+ stableScopeRef.current = { organisationId: undefined, appId: undefined, eventId: undefined };
118
119
  }
119
120
 
120
121
  const stableScope = stableScopeRef.current;
@@ -136,7 +137,7 @@ export function useDataTablePermissions<TData extends Record<string, any>>(
136
137
 
137
138
  // Always use a consistent scope object to prevent hooks order violations
138
139
  // When scope is loading or invalid, use empty scope which will cause useCan to return false
139
- const consistentScope = effectiveScope || { organisationId: '', eventId: undefined, appId: undefined };
140
+ const consistentScope = effectiveScope || { organisationId: undefined, eventId: undefined, appId: undefined };
140
141
 
141
142
  const permissions = {
142
143
  canRead: useCan(userId, consistentScope, readPermission, effectivePageId, true),
@@ -335,12 +335,12 @@ export interface DataTableColumn<TData extends DataRecord = DataRecord> extends
335
335
  * Receives all rows in the group and returns the aggregated value.
336
336
  * If not provided, grouped rows will show empty/undefined for this column.
337
337
  */
338
- aggregateFn?: (rows: TData[], column: DataTableColumn<TData>) => any;
338
+ aggregateFn?: (rows: TData[], column: DataTableColumn<TData>) => unknown;
339
339
  /**
340
340
  * Optional: Custom cell renderer for aggregated values in grouped rows.
341
341
  * If not provided, uses the column's regular cell renderer.
342
342
  */
343
- aggregateCell?: (value: any, rows: TData[], column: DataTableColumn<TData>) => React.ReactNode;
343
+ aggregateCell?: (value: unknown, rows: TData[], column: DataTableColumn<TData>) => React.ReactNode;
344
344
  }
345
345
 
346
346
  /**
@@ -646,7 +646,7 @@ export interface ExportOptions<TData extends DataRecord> {
646
646
  /** Filtered table rows with getValue() method for proper accessorFn evaluation */
647
647
  tableRows: Array<{
648
648
  original: TData;
649
- getValue: (columnId: string) => any;
649
+ getValue: (columnId: string) => unknown;
650
650
  id: string;
651
651
  }>;
652
652
  /** All column definitions passed to the DataTable */
@@ -654,13 +654,13 @@ export interface ExportOptions<TData extends DataRecord> {
654
654
  /** Currently visible columns in the table */
655
655
  visibleColumns: DataTableColumn<TData>[];
656
656
  /** Mapping of column IDs to TanStack table column instances (for getValue() calls) */
657
- columnIdToTableColumn: Map<string, any>;
657
+ columnIdToTableColumn: Map<string, unknown>;
658
658
  /** Raw data array (unfiltered) */
659
659
  data: TData[];
660
660
  /** Default filename generated from table title */
661
661
  filename: string;
662
662
  /** TanStack table instance for advanced operations */
663
- table: any; // Using any to avoid tight coupling with TanStack types
663
+ table: unknown; // Using unknown to avoid tight coupling with TanStack types
664
664
  }
665
665
 
666
666
  // ============================================================================
@@ -28,7 +28,7 @@ import type { DataTableColumn, DataRecord } from '../types';
28
28
  export function sum<TData extends DataRecord = DataRecord>(accessorKey: keyof TData | string) {
29
29
  return <TRow extends DataRecord = TData>(rows: TRow[], column: DataTableColumn<TRow>): number => {
30
30
  return rows.reduce((total, row) => {
31
- const value = (row as any)[accessorKey];
31
+ const value = row[accessorKey as keyof TRow];
32
32
  const numValue = typeof value === 'number' ? value : parseFloat(String(value || 0));
33
33
  return total + (isNaN(numValue) ? 0 : numValue);
34
34
  }, 0);
@@ -55,7 +55,7 @@ export function average<TData extends DataRecord = DataRecord>(accessorKey: keyo
55
55
  if (rows.length === 0) return 0;
56
56
 
57
57
  const validValues = rows
58
- .map(row => (row as any)[accessorKey])
58
+ .map(row => row[accessorKey as keyof TRow])
59
59
  .filter(value => value != null && value !== '')
60
60
  .map(value => {
61
61
  const numValue = typeof value === 'number' ? value : parseFloat(String(value));
@@ -111,7 +111,7 @@ export function min<TData extends DataRecord = DataRecord>(accessorKey: keyof TD
111
111
  if (rows.length === 0) return null;
112
112
 
113
113
  const validValues = rows
114
- .map(row => (row as any)[accessorKey])
114
+ .map(row => row[accessorKey as keyof TRow])
115
115
  .filter(value => value != null && value !== '')
116
116
  .map(value => {
117
117
  const numValue = typeof value === 'number' ? value : parseFloat(String(value));
@@ -145,7 +145,7 @@ export function max<TData extends DataRecord = DataRecord>(accessorKey: keyof TD
145
145
  if (rows.length === 0) return null;
146
146
 
147
147
  const validValues = rows
148
- .map(row => (row as any)[accessorKey])
148
+ .map(row => row[accessorKey as keyof TRow])
149
149
  .filter(value => value != null && value !== '')
150
150
  .map(value => {
151
151
  const numValue = typeof value === 'number' ? value : parseFloat(String(value));
@@ -1,5 +1,6 @@
1
1
  import React from 'react';
2
2
  import type { Column } from '@tanstack/react-table';
3
+ import type { DataRecord } from '../types';
3
4
 
4
5
  /**
5
6
  * Extracts a human-readable header text from a column definition.
@@ -9,7 +10,7 @@ import type { Column } from '@tanstack/react-table';
9
10
  * @param column - The TanStack Table column object
10
11
  * @returns The header text as a string, or falls back to column.id
11
12
  */
12
- export function getColumnHeaderText(column: Column<any, unknown>): string {
13
+ export function getColumnHeaderText<TData extends DataRecord = DataRecord>(column: Column<TData, unknown>): string {
13
14
  const header = column.columnDef.header;
14
15
 
15
16
  // If header is a string, use it directly
@@ -19,7 +20,7 @@ export function getColumnHeaderText(column: Column<any, unknown>): string {
19
20
 
20
21
  // Helper to get accessorKey safely
21
22
  const getAccessorKey = (): string | undefined => {
22
- const def = column.columnDef as any;
23
+ const def = column.columnDef;
23
24
  return 'accessorKey' in def && def.accessorKey ? String(def.accessorKey) : undefined;
24
25
  };
25
26
 
@@ -11,7 +11,7 @@ import type {
11
11
  PaginationMode,
12
12
  ServerSideParams
13
13
  } from '../types';
14
- import { createLogger } from '../../../utils/logger';
14
+ import { createLogger } from '../../../utils/core/logger';
15
15
 
16
16
  /**
17
17
  * Debug levels for controlling verbosity
@@ -49,7 +49,7 @@ export interface ExportColumn {
49
49
  header?: string;
50
50
  id?: string;
51
51
  accessorKey?: string;
52
- accessorFn?: (row: any) => any;
52
+ accessorFn?: (row: DataRecord) => unknown;
53
53
  editAccessorKey?: string;
54
54
  isIdColumn?: boolean; // Internal flag to mark ID columns for reference fields
55
55
  }
@@ -147,7 +147,7 @@ export function generateCSVContent<TData extends DataRecord>(
147
147
  // Format data into CSV rows
148
148
  const csvData = data.map(row => {
149
149
  return columns.map(col => {
150
- let value: any;
150
+ let value: unknown;
151
151
 
152
152
  // Handle accessorFn (for computed/reference fields) first
153
153
  if (col.accessorFn) {
@@ -187,12 +187,12 @@ export function generateCSVContent<TData extends DataRecord>(
187
187
  */
188
188
  export async function exportToCSVWithTableRows(
189
189
  tableRows: Array<{
190
- original: any;
191
- getValue: (columnId: string) => any;
190
+ original: DataRecord;
191
+ getValue: (columnId: string) => unknown;
192
192
  id: string;
193
193
  }>,
194
194
  columns: ExportColumn[],
195
- columnIdToTableColumn: Map<string, any>,
195
+ columnIdToTableColumn: Map<string, unknown>,
196
196
  filename: string = "download.csv",
197
197
  options: {
198
198
  locale?: string;
@@ -223,7 +223,7 @@ export async function exportToCSVWithTableRows(
223
223
  // Format data into CSV rows using table row getValue() for proper accessorFn evaluation
224
224
  const csvData = tableRows.map(tableRow => {
225
225
  return columns.map(col => {
226
- let value: any;
226
+ let value: unknown;
227
227
 
228
228
  // For ID columns (reference field IDs), get directly from original data
229
229
  if (col.isIdColumn && col.accessorKey) {
@@ -119,14 +119,14 @@ export function sortHierarchicalDataWithSorting<TData extends HierarchicalDataRo
119
119
  function getSortValue<TData extends HierarchicalDataRow>(
120
120
  row: TData,
121
121
  columnId: string
122
- ): any {
122
+ ): unknown {
123
123
  // Handle nested property access (e.g., "user.name")
124
124
  const keys = columnId.split('.');
125
- let value: any = row;
125
+ let value: unknown = row;
126
126
 
127
127
  for (const key of keys) {
128
128
  if (value && typeof value === 'object' && key in value) {
129
- value = value[key];
129
+ value = (value as Record<string, unknown>)[key];
130
130
  } else {
131
131
  return null;
132
132
  }
@@ -138,7 +138,7 @@ function getSortValue<TData extends HierarchicalDataRow>(
138
138
  /**
139
139
  * Compares two values for sorting
140
140
  */
141
- function compareValues(a: any, b: any): number {
141
+ function compareValues(a: unknown, b: unknown): number {
142
142
  // Handle null/undefined values
143
143
  if (a == null && b == null) return 0;
144
144
  if (a == null) return -1;
@@ -169,7 +169,7 @@ function compareValues(a: any, b: any): number {
169
169
  */
170
170
  export function isHierarchicalSortableColumn<TData extends HierarchicalDataRow>(
171
171
  columnId: string,
172
- columns: any[]
172
+ columns: Array<{ id?: string; accessorKey?: string; hideForParent?: boolean }>
173
173
  ): boolean {
174
174
  const column = columns.find(col => col.id === columnId || col.accessorKey === columnId);
175
175
 
@@ -185,7 +185,7 @@ export function isHierarchicalSortableColumn<TData extends HierarchicalDataRow>(
185
185
  */
186
186
  export function getHierarchicalSortConfig(
187
187
  sorting: SortingState,
188
- columns: any[]
188
+ columns: Array<{ id?: string; accessorKey?: string; hideForParent?: boolean }>
189
189
  ): SortingState {
190
190
  if (sorting.length === 0) return sorting;
191
191