@jmruthers/pace-core 0.5.181 → 0.5.182

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 (750) 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/usePublicRouteParams.ts +1 -1
  470. package/src/hooks/services/useAuth.ts +2 -4
  471. package/src/hooks/services/useCurrentEvent.ts +1 -1
  472. package/src/hooks/useAppConfig.ts +1 -1
  473. package/src/hooks/useDataTablePerformance.ts +2 -2
  474. package/src/hooks/useEventTheme.ts +1 -1
  475. package/src/hooks/useEvents.ts +51 -10
  476. package/src/hooks/useOrganisationPermissions.test.ts +3 -3
  477. package/src/hooks/useOrganisationPermissions.ts +1 -1
  478. package/src/hooks/useOrganisationSecurity.ts +2 -2
  479. package/src/hooks/usePermissionCache.test.ts +9 -9
  480. package/src/hooks/usePermissionCache.ts +2 -2
  481. package/src/index.ts +19 -12
  482. package/src/providers/OrganisationProvider.tsx +73 -9
  483. package/src/providers/UnifiedAuthProvider.smoke.test.tsx +113 -13
  484. package/src/providers/__tests__/AuthProvider.test.tsx +2 -1
  485. package/src/providers/__tests__/EventProvider.test.tsx +24 -15
  486. package/src/providers/__tests__/OrganisationProvider.test.tsx +87 -36
  487. package/src/providers/__tests__/UnifiedAuthProvider.test.tsx +80 -24
  488. package/src/providers/index.ts +0 -3
  489. package/src/providers/services/AuthServiceProvider.tsx +2 -17
  490. package/src/providers/services/EventServiceProvider.tsx +11 -16
  491. package/src/providers/services/InactivityServiceProvider.tsx +9 -12
  492. package/src/providers/services/OrganisationServiceProvider.tsx +9 -12
  493. package/src/providers/services/UnifiedAuthProvider.tsx +85 -18
  494. package/src/providers/services/__tests__/AuthServiceProvider.integration.test.tsx +11 -4
  495. package/src/rbac/__tests__/scenarios.user-role.test.tsx +105 -21
  496. package/src/rbac/adapters.tsx +1 -1
  497. package/src/rbac/api.ts +20 -4
  498. package/src/rbac/audit-enhanced.ts +47 -2
  499. package/src/rbac/audit.ts +47 -2
  500. package/src/rbac/components/NavigationGuard.tsx +1 -1
  501. package/src/rbac/components/NavigationProvider.test.tsx +7 -6
  502. package/src/rbac/components/NavigationProvider.tsx +1 -1
  503. package/src/rbac/components/PagePermissionGuard.tsx +1 -1
  504. package/src/rbac/components/PagePermissionProvider.test.tsx +7 -6
  505. package/src/rbac/components/PagePermissionProvider.tsx +1 -1
  506. package/src/rbac/components/PermissionEnforcer.tsx +1 -1
  507. package/src/rbac/components/RoleBasedRouter.tsx +1 -1
  508. package/src/rbac/components/SecureDataProvider.test.tsx +7 -6
  509. package/src/rbac/components/SecureDataProvider.tsx +1 -1
  510. package/src/rbac/components/__tests__/EnhancedNavigationMenu.test.tsx +6 -6
  511. package/src/rbac/components/__tests__/NavigationGuard.test.tsx +11 -10
  512. package/src/rbac/components/__tests__/NavigationProvider.test.tsx +10 -11
  513. package/src/rbac/components/__tests__/PagePermissionGuard.race-condition.test.tsx +19 -15
  514. package/src/rbac/components/__tests__/PagePermissionGuard.test.tsx +13 -12
  515. package/src/rbac/components/__tests__/PagePermissionGuard.verification.test.tsx +19 -15
  516. package/src/rbac/components/__tests__/PagePermissionProvider.test.tsx +18 -18
  517. package/src/rbac/components/__tests__/PermissionEnforcer.test.tsx +11 -10
  518. package/src/rbac/components/__tests__/RoleBasedRouter.test.tsx +8 -7
  519. package/src/rbac/components/__tests__/SecureDataProvider.fixed.test.tsx +10 -11
  520. package/src/rbac/components/__tests__/SecureDataProvider.test.tsx +48 -19
  521. package/src/rbac/hooks/__tests__/useSecureSupabase.test.ts +476 -0
  522. package/src/rbac/hooks/index.ts +3 -0
  523. package/src/rbac/hooks/usePermissions.ts +31 -85
  524. package/src/rbac/hooks/useRBAC.test.ts +13 -1
  525. package/src/rbac/hooks/useRBAC.ts +13 -67
  526. package/src/rbac/hooks/useResolvedScope.ts +11 -0
  527. package/src/rbac/hooks/useSecureSupabase.ts +308 -0
  528. package/src/rbac/index.ts +3 -0
  529. package/src/rbac/secureClient.ts +53 -6
  530. package/src/rbac/security.ts +37 -1
  531. package/src/{types/rbac-functions.ts → rbac/types/functions.ts} +30 -30
  532. package/src/rbac/types.ts +3 -2
  533. package/src/services/AuthService.ts +33 -25
  534. package/src/services/EventService.ts +56 -44
  535. package/src/services/InactivityService.ts +33 -53
  536. package/src/services/OrganisationService.ts +36 -40
  537. package/src/services/__tests__/AuthService.restoreSession.test.ts +6 -2
  538. package/src/services/__tests__/EventService.test.ts +67 -33
  539. package/src/services/interfaces/IEventService.ts +1 -1
  540. package/src/styles/core.css +2 -2
  541. package/src/styles/index.ts +1 -5
  542. package/src/types/__tests__/guards.test.ts +1 -1
  543. package/src/types/__tests__/type-validation.test.ts +0 -1
  544. package/src/types/auth.ts +42 -2
  545. package/src/types/core.ts +251 -0
  546. package/src/types/database.ts +11 -496
  547. package/src/types/event.ts +102 -0
  548. package/src/types/file-reference.ts +6 -4
  549. package/src/types/guards.ts +2 -1
  550. package/src/types/index.ts +48 -14
  551. package/src/types/lodash.debounce.d.ts +15 -0
  552. package/src/types/organisation.ts +14 -10
  553. package/src/types/supabase.ts +15 -17
  554. package/src/utils/__tests__/secureErrors.unit.test.ts +1 -1
  555. package/src/utils/__tests__/validationUtils.unit.test.ts +0 -29
  556. package/src/utils/app/appNameResolver.ts +1 -1
  557. package/src/utils/dynamic/dynamicUtils.ts +3 -2
  558. package/src/utils/file-reference/index.ts +25 -6
  559. package/src/utils/security/secureErrors.ts +1 -1
  560. package/src/utils/validation/index.ts +6 -12
  561. package/src/utils/validation/validationUtils.ts +0 -13
  562. package/dist/UnifiedAuthProvider-B37ATQHE.js +0 -16
  563. package/dist/auth-DReDSLq9.d.ts +0 -16
  564. package/dist/chunk-3JI76CYK.js +0 -2444
  565. package/dist/chunk-3JI76CYK.js.map +0 -1
  566. package/dist/chunk-56XJ3TU6.js +0 -11
  567. package/dist/chunk-56XJ3TU6.js.map +0 -1
  568. package/dist/chunk-5MT24GKJ.js.map +0 -1
  569. package/dist/chunk-7QCC6MCP.js +0 -288
  570. package/dist/chunk-BESYRHQM.js.map +0 -1
  571. package/dist/chunk-BJPBT3CU.js +0 -21
  572. package/dist/chunk-BJPBT3CU.js.map +0 -1
  573. package/dist/chunk-BVYWGZVV.js.map +0 -1
  574. package/dist/chunk-CX5M4ZAG.js.map +0 -1
  575. package/dist/chunk-D7LCGMVS.js.map +0 -1
  576. package/dist/chunk-EGI6MUL6.js +0 -27
  577. package/dist/chunk-EGI6MUL6.js.map +0 -1
  578. package/dist/chunk-ERISIBYU.js.map +0 -1
  579. package/dist/chunk-HRO5HWN2.js.map +0 -1
  580. package/dist/chunk-HZLDFOE4.js.map +0 -1
  581. package/dist/chunk-JISYG63F.js +0 -70
  582. package/dist/chunk-JISYG63F.js.map +0 -1
  583. package/dist/chunk-LIMSTKYD.js +0 -61
  584. package/dist/chunk-LIMSTKYD.js.map +0 -1
  585. package/dist/chunk-OWAG3GSU.js.map +0 -1
  586. package/dist/chunk-PPMP5J6T.js.map +0 -1
  587. package/dist/chunk-Q5QRDWKI.js.map +0 -1
  588. package/dist/chunk-S5OFRT4M.js.map +0 -1
  589. package/dist/chunk-SBVILCCA.js.map +0 -1
  590. package/dist/chunk-TUMEWN34.js +0 -15
  591. package/dist/chunk-TUMEWN34.js.map +0 -1
  592. package/dist/chunk-XDNLUEXI.js +0 -138
  593. package/dist/chunk-XJ2HZOBU.js.map +0 -1
  594. package/dist/chunk-ZYTYSTO5.js.map +0 -1
  595. package/dist/chunk-ZZ2SS7NI.js +0 -237
  596. package/dist/chunk-ZZ2SS7NI.js.map +0 -1
  597. package/dist/database-C6jy7EOu.d.ts +0 -500
  598. package/dist/organisation-D6qRDtbF.d.ts +0 -93
  599. package/dist/schema-DTDZQe2u.d.ts +0 -28
  600. package/dist/unified-DQ4VcT7H.d.ts +0 -198
  601. package/dist/useInactivityTracker-TO6ZOF35.js +0 -11
  602. package/dist/validation.d.ts +0 -47
  603. package/dist/validation.js +0 -24
  604. package/dist/validation.js.map +0 -1
  605. package/docs/DOCUMENTATION_AUDIT.md +0 -172
  606. package/docs/DOCUMENTATION_STANDARD.md +0 -137
  607. package/docs/api/classes/PublicErrorBoundary.md +0 -132
  608. package/docs/api/interfaces/EventLogoProps.md +0 -152
  609. package/docs/api/interfaces/PublicErrorBoundaryProps.md +0 -94
  610. package/docs/api/interfaces/PublicErrorBoundaryState.md +0 -68
  611. package/docs/api/interfaces/PublicLoadingSpinnerProps.md +0 -86
  612. package/docs/architecture/rpc-function-standards.md +0 -1106
  613. package/docs/getting-started/consuming-app-vite-config.md +0 -239
  614. package/docs/implementation-guides/event-theming-summary.md +0 -226
  615. package/docs/implementation-guides/public-pages-advanced.md +0 -1038
  616. package/docs/migration/v0.4.15-tailwind-scanning.md +0 -278
  617. package/docs/migration/v0.4.16-css-first-approach.md +0 -312
  618. package/docs/migration/v0.4.17-source-path-fix.md +0 -235
  619. package/docs/rbac/RBAC_EVENT_CONTEXT_LOADING.md +0 -222
  620. package/docs/rbac/RBAC_LOGIN_SAFETY_FIX.md +0 -95
  621. package/docs/rbac/RBAC_V0.5.147_FIX.md +0 -117
  622. package/docs/rbac/README-rbac-rls-integration.md +0 -374
  623. package/docs/styles/usage.md +0 -227
  624. package/docs/testing/visual-testing.md +0 -120
  625. package/docs/troubleshooting/DEBUG_NETWORK_ERROR.md +0 -152
  626. package/docs/troubleshooting/FIX_SUPABASE_CORS.md +0 -184
  627. package/docs/troubleshooting/cake-page-permission-guard-issue-summary.md +0 -193
  628. package/docs/troubleshooting/database-view-compatibility.md +0 -125
  629. package/docs/troubleshooting/react-hooks-issue-analysis.md +0 -172
  630. package/docs/troubleshooting/tailwind-content-scanning.md +0 -219
  631. package/examples/RBAC/EventBasedApp.tsx +0 -239
  632. package/examples/RBAC/PermissionExample.tsx +0 -151
  633. package/examples/STRUCTURE.md +0 -125
  634. package/examples/components 2/DataTable/HierarchicalExample.tsx +0 -475
  635. package/examples/components 2/Dialog/BasicHtmlTest.tsx +0 -55
  636. package/examples/components 2/Dialog/DebugHtmlExample.tsx +0 -68
  637. package/examples/components 2/Dialog/HtmlDialogExample.tsx +0 -202
  638. package/examples/components 2/Dialog/SimpleHtmlTest.tsx +0 -61
  639. package/examples/components 2/Dialog/SmartDialogExample.tsx +0 -322
  640. package/examples/components 2/index.ts +0 -11
  641. package/examples/features/index.ts +0 -12
  642. package/examples/features/rbac/CompleteRBACExample.tsx +0 -324
  643. package/examples/features/rbac/index.ts +0 -13
  644. package/examples/public-pages/CorrectPublicPageImplementation.tsx +0 -301
  645. package/examples/public-pages/PublicEventPage.tsx +0 -274
  646. package/examples/public-pages/PublicPageApp.tsx +0 -308
  647. package/examples/public-pages/PublicPageUsageExample.tsx +0 -216
  648. package/examples/public-pages/index.ts +0 -14
  649. package/src/__tests__/TEST_STANDARD.md +0 -1008
  650. package/src/components/Checkbox/__mocks__/Checkbox.tsx +0 -2
  651. package/src/components/DataTable/examples/HierarchicalActionsExample.tsx +0 -421
  652. package/src/components/DataTable/examples/InitialPageSizeExample.tsx +0 -177
  653. package/src/components/DataTable/examples/PerformanceExample.tsx +0 -506
  654. package/src/components/DataTable/examples/__tests__/HierarchicalActionsExample.test.tsx +0 -316
  655. package/src/components/DataTable/examples/__tests__/HierarchicalExample.test.tsx +0 -45
  656. package/src/components/DataTable/examples/__tests__/InitialPageSizeExample.test.tsx +0 -211
  657. package/src/components/DataTable/examples/__tests__/PerformanceExample.test.tsx +0 -126
  658. package/src/components/Dialog/README.md +0 -804
  659. package/src/components/Dialog/examples/BasicHtmlTest.tsx +0 -55
  660. package/src/components/Dialog/examples/DebugHtmlExample.tsx +0 -68
  661. package/src/components/Dialog/examples/ScrollableDialogExample.tsx +0 -290
  662. package/src/components/Dialog/examples/SimpleHtmlTest.tsx +0 -61
  663. package/src/components/Dialog/examples/__tests__/HtmlDialogExample.test.tsx +0 -71
  664. package/src/components/Dialog/examples/__tests__/SimpleHtmlTest.test.tsx +0 -122
  665. package/src/components/Dialog/examples/__tests__/SmartDialogExample.unit.test.tsx +0 -147
  666. package/src/components/Dialog/utils/__tests__/safeHtml.unit.test.ts +0 -611
  667. package/src/components/Dialog/utils/safeHtml.ts +0 -185
  668. package/src/components/EventSelector/types.ts +0 -79
  669. package/src/components/Form/FormErrorSummary.tsx +0 -113
  670. package/src/components/Form/FormField.tsx +0 -249
  671. package/src/components/Form/FormFieldset.tsx +0 -127
  672. package/src/components/Form/FormLiveRegion.tsx +0 -198
  673. package/src/components/Input/__mocks__/Input.tsx +0 -2
  674. package/src/components/NavigationMenu/types.ts +0 -85
  675. package/src/components/PaceAppLayout/__tests__/PaceAppLayout.accessibility.test.tsx +0 -326
  676. package/src/components/PaceAppLayout/__tests__/PaceAppLayout.unit.test.tsx +0 -1078
  677. package/src/components/PasswordReset/PasswordResetForm.test.tsx +0 -597
  678. package/src/components/PasswordReset/PasswordResetForm.tsx +0 -201
  679. package/src/components/PasswordReset/index.ts +0 -2
  680. package/src/components/ProtectedRoute/README.md +0 -164
  681. package/src/components/PublicLayout/EventLogo.tsx +0 -175
  682. package/src/components/PublicLayout/PublicErrorBoundary.tsx +0 -282
  683. package/src/components/PublicLayout/PublicLoadingSpinner.tsx +0 -216
  684. package/src/components/PublicLayout/PublicPageContextChecker.tsx +0 -131
  685. package/src/components/PublicLayout/PublicPageDebugger.tsx +0 -104
  686. package/src/components/PublicLayout/PublicPageDiagnostic.tsx +0 -162
  687. package/src/components/PublicLayout/PublicPageFooter.tsx +0 -124
  688. package/src/components/PublicLayout/PublicPageHeader.tsx +0 -209
  689. package/src/components/PublicLayout/__tests__/PublicErrorBoundary.test.tsx +0 -449
  690. package/src/components/PublicLayout/__tests__/PublicLoadingSpinner.test.tsx +0 -393
  691. package/src/components/PublicLayout/__tests__/PublicPageContextChecker.test.tsx +0 -192
  692. package/src/components/PublicLayout/__tests__/PublicPageFooter.test.tsx +0 -351
  693. package/src/components/PublicLayout/__tests__/PublicPageHeader.test.tsx +0 -402
  694. package/src/components/PublicLayout/__tests__/PublicPageLayout.test.tsx +0 -460
  695. package/src/components/PublicLayout/__tests__/PublicPageProvider.test.tsx +0 -313
  696. package/src/components/Select/hooks.ts +0 -289
  697. package/src/hooks/useCounter.test.ts +0 -131
  698. package/src/hooks/useDebounce.test.ts +0 -375
  699. package/src/providers/AuthProvider.tsx +0 -15
  700. package/src/providers/EventProvider.tsx +0 -16
  701. package/src/providers/InactivityProvider.tsx +0 -15
  702. package/src/providers/OrganisationProvider.context.test.tsx +0 -169
  703. package/src/providers/UnifiedAuthProvider.tsx +0 -15
  704. package/src/types/theme.ts +0 -6
  705. package/src/types/unified.ts +0 -265
  706. package/src/utils/appConfig.ts +0 -47
  707. package/src/utils/appIdResolver.test.ts +0 -499
  708. package/src/utils/appIdResolver.ts +0 -130
  709. package/src/utils/appNameResolver.simple.test.ts +0 -212
  710. package/src/utils/appNameResolver.test.ts +0 -121
  711. package/src/utils/appNameResolver.ts +0 -191
  712. package/src/utils/audit.ts +0 -127
  713. package/src/utils/auth-utils.ts +0 -96
  714. package/src/utils/bundleAnalysis.ts +0 -129
  715. package/src/utils/debugLogger.ts +0 -67
  716. package/src/utils/deviceFingerprint.ts +0 -215
  717. package/src/utils/dynamicUtils.ts +0 -105
  718. package/src/utils/file-reference.test.ts +0 -788
  719. package/src/utils/file-reference.ts +0 -519
  720. package/src/utils/formatDate.test.ts +0 -237
  721. package/src/utils/formatting.ts +0 -170
  722. package/src/utils/lazyLoad.tsx +0 -44
  723. package/src/utils/logger.ts +0 -179
  724. package/src/utils/organisationContext.test.ts +0 -322
  725. package/src/utils/organisationContext.ts +0 -153
  726. package/src/utils/performanceBenchmark.ts +0 -64
  727. package/src/utils/performanceBudgets.ts +0 -110
  728. package/src/utils/permissionTypes.ts +0 -37
  729. package/src/utils/permissionUtils.test.ts +0 -393
  730. package/src/utils/permissionUtils.ts +0 -34
  731. package/src/utils/sanitization.ts +0 -264
  732. package/src/utils/schemaUtils.ts +0 -37
  733. package/src/utils/secureDataAccess.test.ts +0 -711
  734. package/src/utils/secureDataAccess.ts +0 -377
  735. package/src/utils/secureErrors.ts +0 -79
  736. package/src/utils/security.ts +0 -156
  737. package/src/utils/securityMonitor.ts +0 -45
  738. package/src/utils/sessionTracking.ts +0 -126
  739. package/src/utils/validation.ts +0 -111
  740. package/src/utils/validationUtils.ts +0 -120
  741. package/src/validation/index.ts +0 -12
  742. /package/dist/{DataTable-UA6CL4JI.js.map → DataTable-QAB34V6K.js.map} +0 -0
  743. /package/dist/{UnifiedAuthProvider-B37ATQHE.js.map → UnifiedAuthProvider-7F6T4B6K.js.map} +0 -0
  744. /package/dist/{api-45XYYO2A.js.map → api-ROMBCNKU.js.map} +0 -0
  745. /package/dist/{audit-64X3VJXB.js.map → audit-WRS3KJKI.js.map} +0 -0
  746. /package/dist/{chunk-PLDDJCW6.js.map → chunk-7D4SUZUM.js.map} +0 -0
  747. /package/dist/{useInactivityTracker-TO6ZOF35.js.map → chunk-KQCRWDSA.js.map} +0 -0
  748. /package/examples/{components 2/DataTable → DataTable}/InitialPageSizeExample.tsx +0 -0
  749. /package/examples/{features/public-pages → PublicPages}/index.ts +0 -0
  750. /package/examples/{RBAC → rbac}/index.ts +0 -0
@@ -1,7 +1,7 @@
1
1
  ---
2
- lastUpdated: 2025-10-29T22:43:00+11:00
3
- version: 0.5.76
4
- reviewedBy: content-audit
2
+ lastUpdated: 2025-11-18T12:00:00+11:00
3
+ version: 0.5.181
4
+ reviewedBy: documentation-standards-audit
5
5
  ---
6
6
 
7
7
  # Hooks API Reference
@@ -14,23 +14,77 @@ This section provides detailed API documentation for all React hooks in `@jmruth
14
14
 
15
15
  ### useUnifiedAuth
16
16
 
17
- A comprehensive hook that combines authentication and event access management.
17
+ A comprehensive hook that combines authentication, organisation context, event access management, and inactivity tracking.
18
18
 
19
19
  ```typescript
20
- interface UseUnifiedAuthReturn {
20
+ interface UnifiedAuthContextType {
21
+ // Auth state
21
22
  user: User | null;
22
23
  session: Session | null;
23
- loading: boolean;
24
- error: AuthError | null;
25
- signIn: (credentials: SignInCredentials) => Promise<void>;
26
- signUp: (credentials: SignUpCredentials) => Promise<void>;
27
- signOut: () => Promise<void>;
28
- resetPassword: (email: string) => Promise<void>;
29
- updatePassword: (password: string) => Promise<void>;
24
+ isAuthenticated: boolean;
25
+ authLoading: boolean;
26
+ authError: AuthError | null;
27
+ error: AuthError | null; // Alias for authError
28
+ supabase: SupabaseClient | null;
29
+
30
+ // Auth methods
31
+ signIn: (email: string, password?: string) => Promise<{ error: AuthError | null }>;
32
+ signUp: (email: string, password: string) => Promise<{ error: AuthError | null }>;
33
+ signOut: () => Promise<{ error: AuthError | null }>;
34
+ resetPassword: (email: string) => Promise<{ error: AuthError | null }>;
35
+ updatePassword: (password: string) => Promise<{ error: AuthError | null }>;
36
+ refreshSession: () => Promise<{ error: AuthError | null }>;
37
+
38
+ // Organisation state
39
+ selectedOrganisation: Organisation | null;
40
+ organisations: Organisation[];
41
+ userMemberships: OrganisationMembership[];
42
+ organisationLoading: boolean;
43
+ organisationError: Error | null;
44
+ hasValidOrganisationContext: boolean;
45
+ isContextReady: boolean;
46
+
47
+ // Organisation methods
48
+ switchOrganisation: (orgId: string) => Promise<void>;
49
+ getUserRole: (orgId?: string) => string;
50
+ validateOrganisationAccess: (orgId: string) => boolean;
51
+ refreshOrganisations: () => Promise<void>;
52
+ ensureOrganisationContext: () => Organisation;
53
+ isOrganisationSecure: () => boolean;
54
+ getPrimaryOrganisation: () => Organisation | null;
55
+
56
+ // Event state
30
57
  events: Event[];
31
58
  selectedEvent: Event | null;
59
+ eventLoading: boolean;
60
+ eventError: Error | null;
61
+
62
+ // Event methods
32
63
  setSelectedEvent: (event: Event | null) => void;
33
- hasEventAccess: (eventId: string) => boolean;
64
+ refreshEvents: () => Promise<void>;
65
+
66
+ // Inactivity state
67
+ showInactivityWarning: boolean;
68
+ inactivityTimeRemaining: number;
69
+ isIdle: boolean;
70
+ timeRemaining: number;
71
+ showWarning: boolean;
72
+ isTracking: boolean;
73
+
74
+ // Inactivity methods
75
+ resetActivity: () => void;
76
+ startTracking: () => void;
77
+ stopTracking: () => void;
78
+ handleIdleLogout: () => Promise<void>;
79
+ handleStaySignedIn: () => void;
80
+ handleSignOutNow: () => Promise<void>;
81
+
82
+ // Additional properties
83
+ appName: string;
84
+ appConfig: { requires_event: boolean } | null;
85
+ isLoading: boolean;
86
+ hasErrors: boolean;
87
+ sessionRestorationTimedOut: boolean;
34
88
  }
35
89
  ```
36
90
 
@@ -43,18 +97,22 @@ function App() {
43
97
  const {
44
98
  user,
45
99
  session,
46
- loading,
47
- error,
100
+ isLoading,
101
+ authError,
48
102
  signIn,
49
103
  signOut,
104
+ selectedOrganisation,
105
+ organisations,
50
106
  events,
51
107
  selectedEvent,
52
108
  setSelectedEvent,
53
- hasEventAccess,
109
+ showWarning,
110
+ handleStaySignedIn,
111
+ handleSignOutNow,
54
112
  } = useUnifiedAuth();
55
113
 
56
- if (loading) return <div>Loading...</div>;
57
- if (error) return <div>Error: {error.message}</div>;
114
+ if (isLoading) return <div>Loading...</div>;
115
+ if (authError) return <div>Error: {authError.message}</div>;
58
116
 
59
117
  return (
60
118
  <div>
@@ -504,6 +562,78 @@ function Dropdown() {
504
562
 
505
563
  ## Performance Hooks
506
564
 
565
+ ### usePerformanceMonitor
566
+
567
+ Monitor overall application performance metrics.
568
+
569
+ ```typescript
570
+ interface PerformanceData {
571
+ renderTime: number;
572
+ memoryUsage: number;
573
+ componentCount: number;
574
+ }
575
+
576
+ function usePerformanceMonitor(): PerformanceData;
577
+ ```
578
+
579
+ #### Usage
580
+
581
+ ```tsx
582
+ import { usePerformanceMonitor } from '@jmruthers/pace-core';
583
+
584
+ function PerformanceDashboard() {
585
+ const metrics = usePerformanceMonitor();
586
+
587
+ return (
588
+ <div>
589
+ <p>Render time: {metrics.renderTime}ms</p>
590
+ <p>Memory usage: {metrics.memoryUsage}MB</p>
591
+ <p>Components: {metrics.componentCount}</p>
592
+ </div>
593
+ );
594
+ }
595
+ ```
596
+
597
+ ### useOperationPerformance
598
+
599
+ Monitor performance of specific operations with budget tracking.
600
+
601
+ ```typescript
602
+ function useOperationPerformance(
603
+ operationName: string,
604
+ budgetName?: string
605
+ ): {
606
+ start: () => void;
607
+ end: () => void;
608
+ duration: number;
609
+ isOverBudget: boolean;
610
+ };
611
+ ```
612
+
613
+ #### Usage
614
+
615
+ ```tsx
616
+ import { useOperationPerformance } from '@jmruthers/pace-core';
617
+
618
+ function ExpensiveOperation() {
619
+ const { start, end, duration, isOverBudget } = useOperationPerformance(
620
+ 'data-processing',
621
+ 'data-processing-budget'
622
+ );
623
+
624
+ const handleProcess = async () => {
625
+ start();
626
+ await processData();
627
+ end();
628
+
629
+ if (isOverBudget) {
630
+ console.warn('Operation exceeded budget');
631
+ }
632
+ };
633
+
634
+ return <button onClick={handleProcess}>Process</button>;
635
+ }
636
+ ```
507
637
 
508
638
  ## Hook Composition
509
639
 
@@ -1290,4 +1420,4 @@ All hooks include comprehensive testing:
1290
1420
  - **Performance Tests**: Memory leak detection
1291
1421
  - **Type Safety**: TypeScript validation
1292
1422
 
1293
- For more information about testing hooks, see the [Testing Guide](../best-practices/testing.md).
1423
+ For more information about testing hooks, see the [Testing Guide](../testing/README.md).
@@ -1,7 +1,7 @@
1
1
  ---
2
- lastUpdated: 2025-10-29T22:43:00+11:00
3
- version: 0.5.76
4
- reviewedBy: content-audit
2
+ lastUpdated: 2025-11-18T20:00:00+11:00
3
+ version: 0.5.181
4
+ reviewedBy: documentation-standards-audit
5
5
  ---
6
6
 
7
7
  # Providers API Reference
@@ -21,7 +21,7 @@ interface UnifiedAuthProviderProps {
21
21
  children: React.ReactNode;
22
22
  persistState?: boolean;
23
23
  requireOrganisationContext?: boolean;
24
- enableRBAC?: boolean;
24
+ // Note: RBAC is always enabled - no prop needed
25
25
  onAuthStateChange?: (event: AuthChangeEvent, session: Session | null) => void;
26
26
 
27
27
  // Inactivity auto-logout configuration - MANDATORY for security
@@ -56,7 +56,6 @@ function App() {
56
56
  <UnifiedAuthProvider
57
57
  supabaseClient={supabase}
58
58
  appName="my-app"
59
- enableRBAC={true}
60
59
  requireOrganisationContext={true}
61
60
  idleTimeoutMs={30 * 60 * 1000} // Required: 30 minutes
62
61
  warnBeforeMs={5 * 60 * 1000} // Required: 5 minutes warning
@@ -76,7 +75,7 @@ function App() {
76
75
  | `appName` | `string` | Required | Name of your application |
77
76
  | `persistState` | `boolean` | `true` | Persist auth state across sessions |
78
77
  | `requireOrganisationContext` | `boolean` | `true` | Require organisation context for security |
79
- | `enableRBAC` | `boolean` | `false` | Enable the RBAC system |
78
+ | RBAC | Always enabled | - | RBAC is always enabled, no configuration needed |
80
79
  | `onAuthStateChange` | `function` | `undefined` | Callback for auth state changes |
81
80
  | `idleTimeoutMs` | `number` | **Required** | Inactivity timeout in milliseconds (e.g., `30 * 60 * 1000` for 30 minutes) |
82
81
  | `warnBeforeMs` | `number` | **Required** | Warning time before logout in milliseconds (e.g., `5 * 60 * 1000` for 5 minutes) |
@@ -572,6 +571,62 @@ Use context splitting when possible to prevent unnecessary re-renders.
572
571
 
573
572
  Only pass required props to avoid unnecessary re-renders and complexity.
574
573
 
574
+ ## ♿ Accessibility
575
+
576
+ Providers support accessibility:
577
+
578
+ - **Keyboard navigation** - All provider-managed components support keyboard navigation
579
+ - **Screen reader support** - Providers ensure proper ARIA attributes and roles
580
+ - **Focus management** - Providers handle focus management correctly
581
+ - **Error announcements** - Error states are properly announced to screen readers
582
+ - **Loading states** - Loading indicators are accessible and announced
583
+
584
+ ### Accessibility Best Practices
585
+
586
+ 1. **Test provider composition** - Verify accessibility works with provider hierarchy
587
+ 2. **Check focus management** - Ensure focus is properly managed during state changes
588
+ 3. **Test with screen readers** - Verify provider-managed content works with assistive technologies
589
+ 4. **Verify ARIA attributes** - Ensure providers set appropriate ARIA attributes
590
+ 5. **Test keyboard navigation** - Verify all provider-managed interactions are keyboard accessible
591
+
592
+ ## ⚠️ Edge Cases
593
+
594
+ ### Provider Initialization Failures
595
+
596
+ When providers fail to initialize:
597
+ - Verify all required props are provided
598
+ - Check Supabase client is properly configured
599
+ - Review provider dependencies and order
600
+ - Test with minimal configuration
601
+ - Verify environment variables are set correctly
602
+
603
+ ### Context Not Available
604
+
605
+ When provider context is not available:
606
+ - Verify provider is properly mounted in component tree
607
+ - Check provider order (UnifiedAuthProvider → OrganisationProvider → EventProvider)
608
+ - Review component hierarchy for missing providers
609
+ - Test with provider composition examples
610
+ - Verify hooks are called within provider context
611
+
612
+ ### State Synchronization Issues
613
+
614
+ When provider state is out of sync:
615
+ - Check for multiple provider instances
616
+ - Verify provider state updates correctly
617
+ - Review state management logic
618
+ - Test with rapid state changes
619
+ - Check for race conditions in state updates
620
+
621
+ ### Inactivity Tracking Edge Cases
622
+
623
+ When inactivity tracking fails:
624
+ - Verify mandatory props (idleTimeoutMs, warnBeforeMs, onIdleLogout) are provided
625
+ - Check localStorage is available and working
626
+ - Review cross-tab synchronization
627
+ - Test with different browser environments
628
+ - Verify inactivity events are properly monitored
629
+
575
630
  ## What's Next?
576
631
 
577
632
  - **[Components](./components.md)** - All UI components
@@ -0,0 +1,397 @@
1
+ ---
2
+ lastUpdated: 2025-11-18T12:00:00+11:00
3
+ version: 0.5.181
4
+ reviewedBy: documentation-standards-audit
5
+ ---
6
+
7
+ # RPC Functions API Reference
8
+
9
+ This document provides an overview of RPC (Remote Procedure Call) functions in `pace-core` and how to use them. RPC functions follow strict naming conventions and security standards as defined in the [API & RPC Standard](../standards/02-api-and-rpc-standard.md).
10
+
11
+ ## Overview
12
+
13
+ RPC functions are PostgreSQL functions that provide a secure, standardized way to interact with the database. They enforce Row Level Security (RLS), validate organisation context, and return consistent result shapes.
14
+
15
+ ## Naming Convention
16
+
17
+ All RPC functions follow the `<family>_<domain>_<verb>` pattern:
18
+
19
+ - **`data_*`** prefix for read operations (e.g., `data_file_reference_list`, `data_user_organisations_get`)
20
+ - **`app_*`** prefix for write operations (e.g., `app_cake_dish_create`, `app_file_reference_create`)
21
+ - **`rbac_*`** prefix for RBAC operations (exception to standard pattern, e.g., `rbac_permission_check`, `rbac_role_grant`)
22
+ - **`util_*`** prefix for utility functions (e.g., `util_app_resolve`)
23
+ - **CRUD verbs**: `create`, `read`, `get`, `list`, `update`, `delete`
24
+ - **Bulk operations**: Use `_bulk` suffix (e.g., `app_cake_dish_create_bulk`)
25
+
26
+ **Note**: The `rbac_*` prefix is an exception to the standard `data_*`/`app_*` pattern. RBAC functions use their own prefix for clarity and consistency within the RBAC system.
27
+
28
+ ### Examples
29
+
30
+ ```sql
31
+ -- Read operations (data_*)
32
+ data_file_reference_list(...)
33
+ data_file_reference_get(...)
34
+ data_cake_dishes_list(...)
35
+ data_event_list(...)
36
+
37
+ -- Write operations (app_*)
38
+ app_cake_dish_create(...)
39
+ app_file_reference_create(...)
40
+ app_cake_dish_update(...)
41
+ app_cake_dish_delete(...)
42
+
43
+ -- Bulk operations
44
+ app_cake_dish_create_bulk(...)
45
+ ```
46
+
47
+ ## Result Shape
48
+
49
+ RPC functions conceptually follow the `ApiResult<T>` shape as defined in the [API & RPC Standard](../standards/02-api-and-rpc-standard.md), but are wrapped by Supabase's client into the standard `{ data, error }` format:
50
+
51
+ ```typescript
52
+ // Conceptual ApiResult shape (from standard)
53
+ type ApiResult<T> =
54
+ | { ok: true; data: T }
55
+ | { ok: false; error: ApiError };
56
+
57
+ type ApiError = {
58
+ code: string;
59
+ message: string;
60
+ details?: object;
61
+ };
62
+
63
+ // Actual Supabase RPC response format
64
+ type SupabaseRPCResponse<T> = {
65
+ data: T | null;
66
+ error: PostgrestError | null;
67
+ };
68
+ ```
69
+
70
+ **Note**: Supabase RPCs return data directly (as TABLE or scalar types), and the Supabase client wraps them in `{ data, error }` format. Error handling should check the `error` field rather than expecting an `ApiResult` wrapper.
71
+
72
+ ### Usage Example
73
+
74
+ ```typescript
75
+ import { supabase } from './supabaseClient';
76
+
77
+ // Call RPC function
78
+ const { data, error } = await supabase.rpc('data_file_reference_list', {
79
+ p_table_name: 'pace_person',
80
+ p_record_id: personId,
81
+ p_organisation_id: orgId
82
+ });
83
+
84
+ if (error) {
85
+ // Handle error - Supabase wraps errors in the error field
86
+ console.error('RPC error:', error.message, error.code);
87
+ return;
88
+ }
89
+
90
+ // Use data - data is null if error occurred
91
+ if (data) {
92
+ const fileReferences = data;
93
+ }
94
+ ```
95
+
96
+ ## RPC Rules
97
+
98
+ As per the [API & RPC Standard](../standards/02-api-and-rpc-standard.md):
99
+
100
+ 1. **Read RPCs never mutate** - `data_*` functions are read-only
101
+ 2. **Write RPCs should be idempotent** - `app_*` functions can be safely retried
102
+ 3. **Never accept dynamic SQL** - All queries are parameterized
103
+ 4. **Must enforce RLS + tenant boundaries** - Organisation context is always validated
104
+ 5. **Errors must be user-safe** - No sensitive information in error messages
105
+
106
+ ## Core RPC Functions
107
+
108
+ ### File Reference System
109
+
110
+ Documented in [File Reference System Guide](../implementation-guides/file-reference-system.md):
111
+
112
+ **Note**: File reference RPCs use `data_*` prefix for all operations (including create/delete) as an exception to the standard naming pattern. This maintains consistency within the file reference system.
113
+
114
+ **Read Operations:**
115
+ - `data_file_reference_get` - Get a file reference by ID
116
+ - `data_file_reference_list` - List file references for a record
117
+ - `data_file_reference_url_get` - Get public URL for a file
118
+ - `data_file_reference_signed_url_get` - Get signed URL path for private files
119
+ - `data_file_reference_by_category_list` - List files by category
120
+ - `data_file_reference_count_get` - Get count of file references for a record
121
+
122
+ **Write Operations (exception to naming standard):**
123
+ - `data_file_reference_create` - Create a file reference (uses `data_*` prefix for consistency within file reference system)
124
+ - `data_file_reference_delete` - Delete a file reference (uses `data_*` prefix for consistency within file reference system)
125
+
126
+ ### RBAC System
127
+
128
+ Documented in [RBAC API Reference](../rbac/api-reference.md):
129
+
130
+ **Permission Checking:**
131
+ - `rbac_permission_check` - Check if user has a specific permission
132
+ - `rbac_permissions_get` - Get all permissions for current user in a scope
133
+ - `rbac_access_validate` - Validate user access to a resource
134
+ - `rbac_page_access_check` - Check page-level access permissions
135
+
136
+ **Role Management:**
137
+ - `rbac_role_grant` - Grant a role to a user
138
+ - `rbac_role_revoke` - Revoke a role from a user
139
+ - `rbac_roles_list` - List available roles
140
+ - `rbac_role_validate` - Validate role configuration
141
+
142
+ **Session & Audit:**
143
+ - `rbac_session_track` - Track user session activity
144
+ - `rbac_audit_log` - Log RBAC-related actions
145
+
146
+ **Data Access (RBAC-protected):**
147
+ - `data_user_organisations_get` - Get all organisations for a user
148
+ - `data_user_organisation_roles_get` - Get user roles in organisations
149
+ - `data_user_events_get` - Get events accessible to a user
150
+ - `data_cake_meals_get` - Get cake meals for an event (application-specific, RBAC-protected)
151
+
152
+ **Additional RBAC Functions:**
153
+ - `rbac_check_permission_simplified` - Simplified permission check (event-scoped)
154
+ - `rbac_check_distribution_or_page_permission` - Check distribution or page permissions
155
+
156
+ **Utility:**
157
+ - `util_app_resolve` - Resolve app ID from app name
158
+ - `util_get_cake_app_id` - Get CAKE app ID (application-specific utility)
159
+ - `debug_auth_context` - Debug authentication context (development only)
160
+ - `handle_new_user` - Handle new user registration (triggered automatically)
161
+
162
+ ### Event System
163
+
164
+ - `data_user_events_get` - Get events accessible to a user (replaces deprecated `get_pace_user_events`)
165
+ - `get_public_event_by_code` - Get public event by code (public access, exception to naming pattern)
166
+ - `data_event_list` - List events (if implemented)
167
+ - `app_event_create` - Create an event (if implemented)
168
+
169
+ **Note**: `get_public_event_by_code` is a legacy function that doesn't follow the standard naming pattern. It's maintained for backward compatibility with public pages.
170
+
171
+ ## Application-Specific RPCs
172
+
173
+ Each application may define its own RPC functions following the naming convention. Common patterns include:
174
+
175
+ ### Cake Application Example
176
+
177
+ ```sql
178
+ -- Read operations
179
+ data_cake_dishes_list(p_organisation_id UUID, p_event_id UUID)
180
+ data_cake_diner_get(p_diner_id UUID, p_organisation_id UUID)
181
+ data_cake_diners_list(p_organisation_id UUID, p_event_id UUID)
182
+
183
+ -- Write operations
184
+ app_cake_dish_create(p_organisation_id UUID, p_event_id UUID, p_data JSONB)
185
+ app_cake_dish_update(p_dish_id UUID, p_organisation_id UUID, p_data JSONB)
186
+ app_cake_dish_delete(p_dish_id UUID, p_organisation_id UUID)
187
+
188
+ -- Bulk operations
189
+ app_cake_dish_create_bulk(p_organisation_id UUID, p_event_id UUID, p_data JSONB[])
190
+ ```
191
+
192
+ ## Finding RPC Functions
193
+
194
+ ### In Supabase Dashboard
195
+
196
+ 1. Navigate to **Database** → **Functions**
197
+ 2. Filter by prefix (`data_`, `app_`, `rbac_`, or `util_`)
198
+ 3. Review function signatures and documentation
199
+
200
+ ### In Migration Files
201
+
202
+ RPC functions are defined in Supabase migration files:
203
+
204
+ ```bash
205
+ supabase/migrations/YYYYMMDDHHMMSS_description.sql
206
+ ```
207
+
208
+ Search for `CREATE OR REPLACE FUNCTION` statements:
209
+
210
+ ```sql
211
+ CREATE OR REPLACE FUNCTION data_file_reference_list(
212
+ p_table_name TEXT,
213
+ p_record_id TEXT,
214
+ p_organisation_id UUID
215
+ )
216
+ RETURNS TABLE(...)
217
+ LANGUAGE plpgsql
218
+ SECURITY DEFINER
219
+ SET search_path = public
220
+ AS $$
221
+ BEGIN
222
+ -- Function implementation
223
+ END;
224
+ $$;
225
+ ```
226
+
227
+ ## Security Considerations
228
+
229
+ ### Organisation Context
230
+
231
+ All RPC functions validate organisation context:
232
+
233
+ ```sql
234
+ -- Functions check organisation membership
235
+ IF NOT EXISTS (
236
+ SELECT 1 FROM user_organisation_memberships
237
+ WHERE user_id = auth.uid()
238
+ AND organisation_id = p_organisation_id
239
+ ) THEN
240
+ RAISE EXCEPTION 'Access denied';
241
+ END IF;
242
+ ```
243
+
244
+ ### RLS Enforcement
245
+
246
+ RPC functions run with `SECURITY DEFINER` but still respect RLS policies:
247
+
248
+ - Functions validate organisation membership
249
+ - Functions check user permissions
250
+ - Direct table access is protected by RLS
251
+
252
+ ### Error Handling
253
+
254
+ RPC functions return user-safe errors:
255
+
256
+ ```sql
257
+ BEGIN
258
+ -- Validation
259
+ IF p_organisation_id IS NULL THEN
260
+ RAISE EXCEPTION 'Organisation ID is required';
261
+ END IF;
262
+
263
+ -- Business logic
264
+ -- ...
265
+
266
+ EXCEPTION
267
+ WHEN OTHERS THEN
268
+ RAISE EXCEPTION 'Operation failed: %', SQLERRM;
269
+ END;
270
+ ```
271
+
272
+ ## Best Practices
273
+
274
+ ### 1. Always Pass Organisation Context
275
+
276
+ ```typescript
277
+ // ✅ Good
278
+ const { data, error } = await supabase.rpc('data_file_reference_list', {
279
+ p_table_name: 'pace_person',
280
+ p_record_id: personId,
281
+ p_organisation_id: currentOrganisationId // Always include
282
+ });
283
+
284
+ if (error) {
285
+ console.error('Failed to list file references:', error);
286
+ return;
287
+ }
288
+
289
+ // Use data
290
+ const fileReferences = data;
291
+
292
+ // ❌ Bad - Missing organisation context
293
+ const { data, error } = await supabase.rpc('data_file_reference_list', {
294
+ p_table_name: 'pace_person',
295
+ p_record_id: personId
296
+ // Missing p_organisation_id - will fail RLS validation
297
+ });
298
+ ```
299
+
300
+ ### 2. Handle Errors Properly
301
+
302
+ ```typescript
303
+ const { data, error } = await supabase.rpc('app_cake_dish_create', {
304
+ p_organisation_id: orgId,
305
+ p_event_id: eventId,
306
+ p_data: dishData
307
+ });
308
+
309
+ if (error) {
310
+ // Check error code
311
+ if (error.code === 'PGRST301' || error.message?.includes('Access denied')) {
312
+ // Handle permission error
313
+ toast.error('You do not have permission to create dishes');
314
+ } else {
315
+ // Handle other errors
316
+ toast.error('Failed to create dish');
317
+ }
318
+ return;
319
+ }
320
+
321
+ // Use data
322
+ const newDish = data;
323
+ ```
324
+
325
+ ### 3. Use TypeScript Types
326
+
327
+ ```typescript
328
+ // Define RPC result types
329
+ type FileReferenceListResult = {
330
+ id: string;
331
+ table_name: string;
332
+ record_id: string;
333
+ file_path: string;
334
+ // ... other fields
335
+ }[];
336
+
337
+ const { data, error } = await supabase.rpc<FileReferenceListResult>(
338
+ 'data_file_reference_list',
339
+ {
340
+ p_table_name: 'pace_person',
341
+ p_record_id: personId,
342
+ p_organisation_id: orgId
343
+ }
344
+ );
345
+
346
+ if (error) {
347
+ console.error('RPC error:', error);
348
+ return;
349
+ }
350
+
351
+ // TypeScript now knows the shape of data
352
+ if (data) {
353
+ data.forEach(ref => {
354
+ console.log(ref.file_path); // Type-safe access
355
+ });
356
+ }
357
+ ```
358
+
359
+ ### 4. Prefer RPCs Over Direct Queries
360
+
361
+ ```typescript
362
+ // ✅ Good - Use RPC function with proper error handling
363
+ const { data, error } = await supabase.rpc('data_file_reference_list', {
364
+ p_table_name: 'pace_person',
365
+ p_record_id: personId,
366
+ p_organisation_id: orgId
367
+ });
368
+
369
+ if (error) {
370
+ console.error('Failed to list file references:', error);
371
+ return;
372
+ }
373
+
374
+ // Use data - RPC enforces RLS and organisation context
375
+ const fileReferences = data;
376
+
377
+ // ❌ Bad - Direct query bypasses RLS validation and organisation checks
378
+ const { data, error } = await supabase
379
+ .from('file_references')
380
+ .select('*')
381
+ .eq('table_name', 'pace_person')
382
+ .eq('record_id', personId);
383
+ // Missing organisation context validation
384
+ // May expose data from other organisations
385
+ ```
386
+
387
+ ## Deprecated RPCs
388
+
389
+ See [Deprecated APIs](./deprecated.md) for RPC functions that are deprecated and their migration paths.
390
+
391
+ ## Related Documentation
392
+
393
+ - [API & RPC Standard](../standards/02-api-and-rpc-standard.md) - Complete RPC standards
394
+ - [File Reference System](../implementation-guides/file-reference-system.md) - File reference RPCs
395
+ - [RBAC API Reference](../rbac/api-reference.md) - RBAC RPC functions
396
+ - [Database Schema Requirements](../architecture/database-schema-requirements.md) - Required RPC functions
397
+