@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
package/dist/types.js CHANGED
@@ -1,70 +1,58 @@
1
1
  import {
2
2
  FileCategory
3
- } from "./chunk-XJ2HZOBU.js";
3
+ } from "./chunk-UHNYIBXL.js";
4
4
  import {
5
+ AuthErrorCode,
6
+ PermissionErrorCode,
7
+ assertAppId,
8
+ assertEventId,
9
+ assertOrganisationId,
10
+ assertPageId,
11
+ assertUserId,
12
+ createAppId,
13
+ createEventId,
14
+ createOrganisationId,
15
+ createPageId,
16
+ createPermissionString,
17
+ createRequestId,
18
+ createSessionToken,
19
+ createUserId,
20
+ isAppId,
21
+ isEventId,
22
+ isOrganisationId,
23
+ isPageId,
24
+ isPermissionString,
25
+ isRequestId,
26
+ isSessionToken,
27
+ isUserId
28
+ } from "./chunk-QXHPKYJV.js";
29
+ import {
30
+ changePasswordSchema,
5
31
  combineSchemas,
6
- pickSchema
7
- } from "./chunk-BJPBT3CU.js";
8
- import "./chunk-PLDDJCW6.js";
32
+ contactFormSchema,
33
+ dateSchema,
34
+ emailSchema,
35
+ loginSchema,
36
+ nameSchema,
37
+ passwordResetSchema,
38
+ passwordSchema,
39
+ phoneSchema,
40
+ pickSchema,
41
+ registrationSchema,
42
+ secureLoginSchema,
43
+ securePasswordSchema,
44
+ urlSchema,
45
+ userProfileSchema
46
+ } from "./chunk-LMC26NLJ.js";
47
+ import "./chunk-7D4SUZUM.js";
9
48
 
10
- // src/types/unified.ts
11
- var AuthErrorCode = /* @__PURE__ */ ((AuthErrorCode2) => {
12
- AuthErrorCode2["UNKNOWN_ERROR"] = "UNKNOWN_ERROR";
13
- AuthErrorCode2["INVALID_CREDENTIALS"] = "INVALID_CREDENTIALS";
14
- AuthErrorCode2["USER_NOT_FOUND"] = "USER_NOT_FOUND";
15
- AuthErrorCode2["EMAIL_NOT_CONFIRMED"] = "EMAIL_NOT_CONFIRMED";
16
- AuthErrorCode2["PASSWORD_TOO_WEAK"] = "PASSWORD_TOO_WEAK";
17
- AuthErrorCode2["WEAK_PASSWORD"] = "WEAK_PASSWORD";
18
- AuthErrorCode2["RATE_LIMITED"] = "RATE_LIMITED";
19
- AuthErrorCode2["RATE_LIMIT_EXCEEDED"] = "RATE_LIMIT_EXCEEDED";
20
- AuthErrorCode2["SESSION_EXPIRED"] = "SESSION_EXPIRED";
21
- AuthErrorCode2["PERMISSION_DENIED"] = "PERMISSION_DENIED";
22
- AuthErrorCode2["NETWORK_ERROR"] = "NETWORK_ERROR";
23
- return AuthErrorCode2;
24
- })(AuthErrorCode || {});
25
- var PermissionErrorCode = /* @__PURE__ */ ((PermissionErrorCode2) => {
26
- PermissionErrorCode2["INSUFFICIENT_PERMISSIONS"] = "INSUFFICIENT_PERMISSIONS";
27
- PermissionErrorCode2["INVALID_PERMISSION"] = "INVALID_PERMISSION";
28
- PermissionErrorCode2["PERMISSION_CHECK_FAILED"] = "PERMISSION_CHECK_FAILED";
29
- PermissionErrorCode2["ACCESS_DENIED"] = "ACCESS_DENIED";
30
- return PermissionErrorCode2;
31
- })(PermissionErrorCode || {});
32
- var AccessLevel = /* @__PURE__ */ ((AccessLevel2) => {
33
- AccessLevel2["NONE"] = "none";
34
- AccessLevel2["VIEWER"] = "viewer";
35
- AccessLevel2["PARTICIPANT"] = "participant";
36
- AccessLevel2["EDITOR"] = "editor";
37
- AccessLevel2["PLANNER"] = "planner";
38
- AccessLevel2["ADMIN"] = "admin";
39
- AccessLevel2["SUPER_ADMIN"] = "super_admin";
40
- AccessLevel2["SUPER"] = "super";
41
- return AccessLevel2;
42
- })(AccessLevel || {});
43
- function createUserId(id) {
44
- return id;
45
- }
46
- function createSessionToken(token) {
47
- return token;
48
- }
49
- function createPermissionString(permission) {
50
- return permission;
51
- }
52
- function createRequestId(id) {
53
- return id;
54
- }
55
- function isUserId(value) {
56
- return typeof value === "string" && value.length > 0;
57
- }
58
- function isSessionToken(value) {
59
- return typeof value === "string" && value.length > 0;
60
- }
61
- function isPermissionString(value) {
62
- if (typeof value !== "string" || value.length === 0) return false;
63
- return value.includes(":") && value.split(":").length === 2;
64
- }
65
- function isRequestId(value) {
66
- return typeof value === "string" && value.length > 0;
67
- }
49
+ // src/types/organisation.ts
50
+ var ORGANISATION_ROLE_PERMISSIONS = {
51
+ supporter: ["view_basic"],
52
+ member: ["view_basic", "view_details"],
53
+ leader: ["view_basic", "view_details", "moderate_content", "manage_events"],
54
+ org_admin: ["view_basic", "view_details", "moderate_content", "manage_events", "manage_members", "manage_settings"]
55
+ };
68
56
 
69
57
  // src/types/guards.ts
70
58
  function isAuthErrorCode(code) {
@@ -78,70 +66,34 @@ function isSession(obj) {
78
66
  const candidate = obj;
79
67
  return candidate != null && typeof candidate === "object" && typeof candidate.access_token === "string" && candidate.user != null && typeof candidate.user === "object";
80
68
  }
81
-
82
- // src/types/validation.ts
83
- import { z } from "zod";
84
- var emailSchema = z.string().email("Please enter a valid email address");
85
- var nameSchema = z.string().min(1, "Name is required").max(100, "Name must be less than 100 characters");
86
- var phoneSchema = z.string().regex(/^\+?[\d\s\-\(\)]+$/, "Please enter a valid phone number");
87
- var urlSchema = z.string().url("Please enter a valid URL");
88
- var dateSchema = z.string().refine((date) => !isNaN(Date.parse(date)), "Please enter a valid date");
89
- var passwordSchema = z.string().min(8, "Password must be at least 8 characters").regex(/[A-Z]/, "Password must contain at least one uppercase letter").regex(/[a-z]/, "Password must contain at least one lowercase letter").regex(/[0-9]/, "Password must contain at least one number");
90
- var securePasswordSchema = passwordSchema.regex(/[!@#$%^&*(),.?":{}|<>]/, "Password must contain at least one special character");
91
- var loginSchema = z.object({
92
- email: emailSchema,
93
- password: z.string().min(1, "Password is required")
94
- });
95
- var registrationSchema = z.object({
96
- email: emailSchema,
97
- password: passwordSchema,
98
- confirmPassword: z.string()
99
- }).refine((data) => data.password === data.confirmPassword, {
100
- message: "Passwords don't match",
101
- path: ["confirmPassword"]
102
- });
103
- var secureLoginSchema = z.object({
104
- email: emailSchema,
105
- password: securePasswordSchema
106
- });
107
- var passwordResetSchema = z.object({
108
- email: emailSchema
109
- });
110
- var changePasswordSchema = z.object({
111
- currentPassword: z.string().min(1, "Current password is required"),
112
- newPassword: securePasswordSchema,
113
- confirmPassword: z.string()
114
- }).refine((data) => data.newPassword === data.confirmPassword, {
115
- message: "Passwords don't match",
116
- path: ["confirmPassword"]
117
- });
118
- var userProfileSchema = z.object({
119
- name: nameSchema,
120
- email: emailSchema,
121
- phone: phoneSchema.optional(),
122
- website: urlSchema.optional(),
123
- bio: z.string().max(500).optional()
124
- });
125
- var contactFormSchema = z.object({
126
- name: nameSchema,
127
- email: emailSchema,
128
- message: z.string().min(1, "Message is required").max(1e3, "Message must be less than 1000 characters")
129
- });
130
69
  export {
131
- AccessLevel,
132
70
  AuthErrorCode,
133
71
  FileCategory,
72
+ ORGANISATION_ROLE_PERMISSIONS,
134
73
  PermissionErrorCode,
74
+ assertAppId,
75
+ assertEventId,
76
+ assertOrganisationId,
77
+ assertPageId,
78
+ assertUserId,
135
79
  changePasswordSchema,
136
80
  combineSchemas,
137
81
  contactFormSchema,
82
+ createAppId,
83
+ createEventId,
84
+ createOrganisationId,
85
+ createPageId,
138
86
  createPermissionString,
139
87
  createRequestId,
140
88
  createSessionToken,
141
89
  createUserId,
142
90
  dateSchema,
143
91
  emailSchema,
92
+ isAppId,
144
93
  isAuthErrorCode,
94
+ isEventId,
95
+ isOrganisationId,
96
+ isPageId,
145
97
  isPermissionString,
146
98
  isRequestId,
147
99
  isSession,
package/dist/types.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/types/unified.ts","../src/types/guards.ts","../src/types/validation.ts"],"sourcesContent":["/**\n * @file Unified types for PACE Core\n * @package @jmruthers/pace-core\n * @module unified\n * @since 0.1.0\n */\n\n/**\n * @file Unified Types for DataTable\n * @package @jmruthers/pace-core\n * @module Types\n * @since 0.3.0\n */\n\n// Authentication Error Codes\nexport enum AuthErrorCode {\n UNKNOWN_ERROR = 'UNKNOWN_ERROR',\n INVALID_CREDENTIALS = 'INVALID_CREDENTIALS',\n USER_NOT_FOUND = 'USER_NOT_FOUND',\n EMAIL_NOT_CONFIRMED = 'EMAIL_NOT_CONFIRMED',\n PASSWORD_TOO_WEAK = 'PASSWORD_TOO_WEAK',\n WEAK_PASSWORD = 'WEAK_PASSWORD',\n RATE_LIMITED = 'RATE_LIMITED',\n RATE_LIMIT_EXCEEDED = 'RATE_LIMIT_EXCEEDED',\n SESSION_EXPIRED = 'SESSION_EXPIRED',\n PERMISSION_DENIED = 'PERMISSION_DENIED',\n NETWORK_ERROR = 'NETWORK_ERROR'\n}\n\n// Permission Error Codes\nexport enum PermissionErrorCode {\n INSUFFICIENT_PERMISSIONS = 'INSUFFICIENT_PERMISSIONS',\n INVALID_PERMISSION = 'INVALID_PERMISSION',\n PERMISSION_CHECK_FAILED = 'PERMISSION_CHECK_FAILED',\n ACCESS_DENIED = 'ACCESS_DENIED'\n}\n\n// Access Levels - using lowercase to match test expectations\nexport enum AccessLevel {\n NONE = 'none',\n VIEWER = 'viewer',\n PARTICIPANT = 'participant',\n EDITOR = 'editor',\n PLANNER = 'planner',\n ADMIN = 'admin',\n SUPER_ADMIN = 'super_admin',\n SUPER = 'super'\n}\n\n// Branded Types\nexport type UserId = string & { __brand: 'UserId' };\nexport type SessionToken = string & { __brand: 'SessionToken' };\nexport type PermissionString = string & { __brand: 'PermissionString' };\nexport type RequestId = string & { __brand: 'RequestId' };\n\n// Branded Type Creators\nexport function createUserId(id: string): UserId {\n return id as UserId;\n}\n\nexport function createSessionToken(token: string): SessionToken {\n return token as SessionToken;\n}\n\nexport function createPermissionString(permission: string): PermissionString {\n return permission as PermissionString;\n}\n\nexport function createRequestId(id: string): RequestId {\n return id as RequestId;\n}\n\n// Type Guards for branded types\nexport function isUserId(value: unknown): value is UserId {\n return typeof value === 'string' && value.length > 0;\n}\n\nexport function isSessionToken(value: unknown): value is SessionToken {\n return typeof value === 'string' && value.length > 0;\n}\n\nexport function isPermissionString(value: unknown): value is PermissionString {\n if (typeof value !== 'string' || value.length === 0) return false;\n // Basic validation for permission format (resource:action)\n return value.includes(':') && value.split(':').length === 2;\n}\n\nexport function isRequestId(value: unknown): value is RequestId {\n return typeof value === 'string' && value.length > 0;\n}\n\n// Permission Types\nexport type PermissionMap = Record<string, boolean>;\n\n// Permission Context\nexport interface PermissionContext {\n eventId?: string;\n appName?: string;\n userId?: string;\n}\n\n// Auth Error Interface - Define locally to avoid circular dependency\nexport interface AuthError extends Error {\n __isAuthError: true;\n name: 'AuthError';\n message: string;\n code: AuthErrorCode;\n user_message: string;\n timestamp: number;\n}\n\n// Permission Error Interface\nexport interface PermissionError extends Error {\n __isPermissionError: true;\n name: 'PermissionError';\n message: string;\n code: PermissionErrorCode;\n timestamp: number;\n}\n\n// Theme Types - Consolidated from theme.ts\nexport interface ThemeColors {\n primary: string;\n secondary: string;\n hover?: string;\n active?: string;\n bgSoft?: string;\n}\n\nexport interface EventTheme {\n mid: ThemeColors;\n light: ThemeColors;\n}\n\n// Event Types - Updated to match database schema exactly with organisation context\nexport interface Event {\n // Primary identification\n id: string;\n event_id: string;\n event_name: string;\n event_code?: string;\n \n // Organisation context - MANDATORY for security\n organisation_id: string;\n \n // Event details\n event_date?: string; // Use event_date from database for proper sorting\n event_days?: number;\n event_venue?: string;\n event_participants?: number;\n is_visible?: boolean;\n \n // Visual branding\n event_logo?: string; // DEPRECATED: Use file_references table instead\n event_colours?: Record<string, unknown> | null; // JSONB field for theme colors\n event_col_d1?: string;\n event_col_d2?: string;\n event_col_m1?: string;\n event_col_m2?: string;\n event_col_l1?: string;\n event_col_l2?: string;\n \n // Additional metadata\n event_news?: string;\n event_billing?: string;\n event_catering_email?: string;\n event_email?: string;\n event_footer?: string;\n event_rounddown?: number;\n event_youthmultiplier?: number;\n event_typicalunit?: number;\n \n // Timestamps\n created_at: string;\n updated_at: string;\n created_by?: string;\n updated_by?: string;\n \n // Legacy compatibility\n name?: string; // Alias for event_name\n description?: string;\n start_date?: string; // Alias for event_date\n end_date?: string;\n theme_colors?: EventTheme;\n}\n\n// Event Context Type\nexport interface EventContextType {\n selectedEvent: Event | null;\n currentEvent: Event | null; // Added missing property\n events: Event[];\n isLoading: boolean;\n error: string | null;\n selectEvent: (event: Event) => void;\n setCurrentEvent: (event: Event | null) => void; // Added missing property\n clearSelection: () => void;\n refreshEvents: () => Promise<void>;\n createEvent: (event: Partial<Event>) => Promise<Event>;\n updateEvent: (id: string, updates: Partial<Event>) => Promise<Event>;\n deleteEvent: (id: string) => Promise<void>;\n}\n\n// RBAC Types\nexport interface UserPermissions {\n user_id: UserId;\n accessLevel: AccessLevel;\n permissions: PermissionMap;\n roles: string[];\n}\n\n// Re-export standard Supabase types for consistency\n// Note: These are the same as what's in @supabase/supabase-js\nexport interface User {\n id: string;\n email?: string;\n created_at: string;\n updated_at: string;\n email_confirmed_at?: string;\n last_sign_in_at?: string;\n user_metadata?: Record<string, unknown>;\n app_metadata?: Record<string, unknown>;\n}\n\nexport interface Session {\n access_token: string;\n refresh_token?: string;\n expires_in: number;\n expires_at: number;\n token_type: string;\n user: User;\n provider_token?: string;\n provider_refresh_token?: string;\n}\n\nexport interface DataRecord {\n id: string | number;\n [key: string]: unknown;\n}\n\nexport interface DataTableAction<T = unknown> {\n label: string;\n onClick: (row: T) => void;\n testId?: string;\n disabled?: boolean | ((row: T) => boolean);\n variant?: 'primary' | 'secondary' | 'destructive';\n}\n\nexport interface DataTableColumn<T = unknown> {\n id?: string;\n key: string;\n label: string;\n sortable?: boolean;\n filterable?: boolean;\n accessorKey?: keyof T;\n accessorFn?: (row: T) => unknown;\n cell?: (value: unknown, row: T) => React.ReactNode;\n header?: React.ReactNode;\n enableSorting?: boolean;\n enableColumnFilter?: boolean;\n enableGrouping?: boolean;\n enableHiding?: boolean;\n}\n\n// Re-export file reference types\nexport * from './file-reference';\n","\n/**\n * @file Type Guards\n */\n\nimport { AuthErrorCode, User, Session } from './unified';\n\nexport function isAuthErrorCode(code: string): code is AuthErrorCode {\n return Object.values(AuthErrorCode).includes(code as AuthErrorCode);\n}\n\nexport function isUser(obj: unknown): obj is User {\n const candidate = obj as Partial<User> | null | undefined;\n return (\n candidate != null &&\n typeof candidate === 'object' &&\n typeof candidate.id === 'string' &&\n typeof candidate.created_at === 'string'\n );\n}\n\nexport function isSession(obj: unknown): obj is Session {\n const candidate = obj as Partial<Session> | null | undefined;\n return (\n candidate != null &&\n typeof candidate === 'object' &&\n typeof candidate.access_token === 'string' &&\n candidate.user != null &&\n typeof candidate.user === 'object'\n );\n}\n","/**\n * @file Validation Types\n * @package @jmruthers/pace-core\n * @module Types/Validation\n * @since 0.1.0\n * \n * Consolidated validation types and interfaces for the PACE Core library.\n * This file contains all validation-related type definitions.\n */\n\nimport { z } from 'zod';\n\n// ============================================================================\n// Core Validation Interfaces\n// ============================================================================\n\nexport interface ValidationError {\n field: string;\n message: string;\n code: string;\n}\n\nexport interface ValidationResult<T = unknown> {\n success: boolean;\n data?: T;\n errors?: ValidationError[];\n}\n\n// ============================================================================\n// Form Value Types\n// ============================================================================\n\n// Basic form schemas\nexport const emailSchema = z.string().email('Please enter a valid email address');\nexport const nameSchema = z.string().min(1, 'Name is required').max(100, 'Name must be less than 100 characters');\nexport const phoneSchema = z.string().regex(/^\\+?[\\d\\s\\-\\(\\)]+$/, 'Please enter a valid phone number');\nexport const urlSchema = z.string().url('Please enter a valid URL');\nexport const dateSchema = z.string().refine((date) => !isNaN(Date.parse(date)), 'Please enter a valid date');\n\n// Password schemas\nexport const passwordSchema = z.string()\n .min(8, 'Password must be at least 8 characters')\n .regex(/[A-Z]/, 'Password must contain at least one uppercase letter')\n .regex(/[a-z]/, 'Password must contain at least one lowercase letter')\n .regex(/[0-9]/, 'Password must contain at least one number');\n\nexport const securePasswordSchema = passwordSchema\n .regex(/[!@#$%^&*(),.?\":{}|<>]/, 'Password must contain at least one special character');\n\n// Auth schemas\nexport const loginSchema = z.object({\n email: emailSchema,\n password: z.string().min(1, 'Password is required'),\n});\n\nexport const registrationSchema = z.object({\n email: emailSchema,\n password: passwordSchema,\n confirmPassword: z.string(),\n}).refine((data) => data.password === data.confirmPassword, {\n message: \"Passwords don't match\",\n path: [\"confirmPassword\"],\n});\n\nexport const secureLoginSchema = z.object({\n email: emailSchema,\n password: securePasswordSchema,\n});\n\nexport const passwordResetSchema = z.object({\n email: emailSchema,\n});\n\nexport const changePasswordSchema = z.object({\n currentPassword: z.string().min(1, 'Current password is required'),\n newPassword: securePasswordSchema,\n confirmPassword: z.string(),\n}).refine((data) => data.newPassword === data.confirmPassword, {\n message: \"Passwords don't match\",\n path: ['confirmPassword'],\n});\n\n// User schemas\nexport const userProfileSchema = z.object({\n name: nameSchema,\n email: emailSchema,\n phone: phoneSchema.optional(),\n website: urlSchema.optional(),\n bio: z.string().max(500).optional(),\n});\n\n// Contact form schema\nexport const contactFormSchema = z.object({\n name: nameSchema,\n email: emailSchema,\n message: z.string().min(1, 'Message is required').max(1000, 'Message must be less than 1000 characters'),\n});\n\n// ============================================================================\n// Inferred Types\n// ============================================================================\n\nexport type LoginFormValues = z.infer<typeof loginSchema>;\nexport type RegistrationFormValues = z.infer<typeof registrationSchema>;\nexport type ChangePasswordFormValues = z.infer<typeof changePasswordSchema>;\nexport type UserProfileFormValues = z.infer<typeof userProfileSchema>;\n\n// Secure form types (with CSRF protection)\nexport type SecureLoginFormValues = {\n email: string;\n password: string;\n csrfToken?: string;\n};\n\nexport type SecureRegistrationFormValues = {\n email: string;\n password: string;\n confirmPassword: string;\n csrfToken?: string;\n};\n\n// ============================================================================\n// Utility Types\n// ============================================================================\n\nexport type FormData = LoginFormData | RegistrationFormData | ProfileFormData | ContactFormData;\n\nexport type LoginFormData = z.infer<typeof loginSchema>;\nexport type RegistrationFormData = z.infer<typeof registrationSchema>;\nexport type ProfileFormData = z.infer<typeof userProfileSchema>;\nexport type ContactFormData = z.infer<typeof contactFormSchema>;\n\n// ============================================================================\n// Schema Utility Functions\n// ============================================================================\n// Re-exported from utils/validation/schema.ts\nexport { pickSchema, combineSchemas } from '../utils/validation/schema';\n"],"mappings":";;;;;;;;;;AAeO,IAAK,gBAAL,kBAAKA,mBAAL;AACL,EAAAA,eAAA,mBAAgB;AAChB,EAAAA,eAAA,yBAAsB;AACtB,EAAAA,eAAA,oBAAiB;AACjB,EAAAA,eAAA,yBAAsB;AACtB,EAAAA,eAAA,uBAAoB;AACpB,EAAAA,eAAA,mBAAgB;AAChB,EAAAA,eAAA,kBAAe;AACf,EAAAA,eAAA,yBAAsB;AACtB,EAAAA,eAAA,qBAAkB;AAClB,EAAAA,eAAA,uBAAoB;AACpB,EAAAA,eAAA,mBAAgB;AAXN,SAAAA;AAAA,GAAA;AAeL,IAAK,sBAAL,kBAAKC,yBAAL;AACL,EAAAA,qBAAA,8BAA2B;AAC3B,EAAAA,qBAAA,wBAAqB;AACrB,EAAAA,qBAAA,6BAA0B;AAC1B,EAAAA,qBAAA,mBAAgB;AAJN,SAAAA;AAAA,GAAA;AAQL,IAAK,cAAL,kBAAKC,iBAAL;AACL,EAAAA,aAAA,UAAO;AACP,EAAAA,aAAA,YAAS;AACT,EAAAA,aAAA,iBAAc;AACd,EAAAA,aAAA,YAAS;AACT,EAAAA,aAAA,aAAU;AACV,EAAAA,aAAA,WAAQ;AACR,EAAAA,aAAA,iBAAc;AACd,EAAAA,aAAA,WAAQ;AARE,SAAAA;AAAA,GAAA;AAkBL,SAAS,aAAa,IAAoB;AAC/C,SAAO;AACT;AAEO,SAAS,mBAAmB,OAA6B;AAC9D,SAAO;AACT;AAEO,SAAS,uBAAuB,YAAsC;AAC3E,SAAO;AACT;AAEO,SAAS,gBAAgB,IAAuB;AACrD,SAAO;AACT;AAGO,SAAS,SAAS,OAAiC;AACxD,SAAO,OAAO,UAAU,YAAY,MAAM,SAAS;AACrD;AAEO,SAAS,eAAe,OAAuC;AACpE,SAAO,OAAO,UAAU,YAAY,MAAM,SAAS;AACrD;AAEO,SAAS,mBAAmB,OAA2C;AAC5E,MAAI,OAAO,UAAU,YAAY,MAAM,WAAW,EAAG,QAAO;AAE5D,SAAO,MAAM,SAAS,GAAG,KAAK,MAAM,MAAM,GAAG,EAAE,WAAW;AAC5D;AAEO,SAAS,YAAY,OAAoC;AAC9D,SAAO,OAAO,UAAU,YAAY,MAAM,SAAS;AACrD;;;AClFO,SAAS,gBAAgB,MAAqC;AACnE,SAAO,OAAO,OAAO,aAAa,EAAE,SAAS,IAAqB;AACpE;AAEO,SAAS,OAAO,KAA2B;AAChD,QAAM,YAAY;AAClB,SACE,aAAa,QACb,OAAO,cAAc,YACrB,OAAO,UAAU,OAAO,YACxB,OAAO,UAAU,eAAe;AAEpC;AAEO,SAAS,UAAU,KAA8B;AACtD,QAAM,YAAY;AAClB,SACE,aAAa,QACb,OAAO,cAAc,YACrB,OAAO,UAAU,iBAAiB,YAClC,UAAU,QAAQ,QAClB,OAAO,UAAU,SAAS;AAE9B;;;ACpBA,SAAS,SAAS;AAuBX,IAAM,cAAc,EAAE,OAAO,EAAE,MAAM,oCAAoC;AACzE,IAAM,aAAa,EAAE,OAAO,EAAE,IAAI,GAAG,kBAAkB,EAAE,IAAI,KAAK,uCAAuC;AACzG,IAAM,cAAc,EAAE,OAAO,EAAE,MAAM,sBAAsB,mCAAmC;AAC9F,IAAM,YAAY,EAAE,OAAO,EAAE,IAAI,0BAA0B;AAC3D,IAAM,aAAa,EAAE,OAAO,EAAE,OAAO,CAAC,SAAS,CAAC,MAAM,KAAK,MAAM,IAAI,CAAC,GAAG,2BAA2B;AAGpG,IAAM,iBAAiB,EAAE,OAAO,EACpC,IAAI,GAAG,wCAAwC,EAC/C,MAAM,SAAS,qDAAqD,EACpE,MAAM,SAAS,qDAAqD,EACpE,MAAM,SAAS,2CAA2C;AAEtD,IAAM,uBAAuB,eACjC,MAAM,0BAA0B,sDAAsD;AAGlF,IAAM,cAAc,EAAE,OAAO;AAAA,EAClC,OAAO;AAAA,EACP,UAAU,EAAE,OAAO,EAAE,IAAI,GAAG,sBAAsB;AACpD,CAAC;AAEM,IAAM,qBAAqB,EAAE,OAAO;AAAA,EACzC,OAAO;AAAA,EACP,UAAU;AAAA,EACV,iBAAiB,EAAE,OAAO;AAC5B,CAAC,EAAE,OAAO,CAAC,SAAS,KAAK,aAAa,KAAK,iBAAiB;AAAA,EAC1D,SAAS;AAAA,EACT,MAAM,CAAC,iBAAiB;AAC1B,CAAC;AAEM,IAAM,oBAAoB,EAAE,OAAO;AAAA,EACxC,OAAO;AAAA,EACP,UAAU;AACZ,CAAC;AAEM,IAAM,sBAAsB,EAAE,OAAO;AAAA,EAC1C,OAAO;AACT,CAAC;AAEM,IAAM,uBAAuB,EAAE,OAAO;AAAA,EAC3C,iBAAiB,EAAE,OAAO,EAAE,IAAI,GAAG,8BAA8B;AAAA,EACjE,aAAa;AAAA,EACb,iBAAiB,EAAE,OAAO;AAC5B,CAAC,EAAE,OAAO,CAAC,SAAS,KAAK,gBAAgB,KAAK,iBAAiB;AAAA,EAC7D,SAAS;AAAA,EACT,MAAM,CAAC,iBAAiB;AAC1B,CAAC;AAGM,IAAM,oBAAoB,EAAE,OAAO;AAAA,EACxC,MAAM;AAAA,EACN,OAAO;AAAA,EACP,OAAO,YAAY,SAAS;AAAA,EAC5B,SAAS,UAAU,SAAS;AAAA,EAC5B,KAAK,EAAE,OAAO,EAAE,IAAI,GAAG,EAAE,SAAS;AACpC,CAAC;AAGM,IAAM,oBAAoB,EAAE,OAAO;AAAA,EACxC,MAAM;AAAA,EACN,OAAO;AAAA,EACP,SAAS,EAAE,OAAO,EAAE,IAAI,GAAG,qBAAqB,EAAE,IAAI,KAAM,2CAA2C;AACzG,CAAC;","names":["AuthErrorCode","PermissionErrorCode","AccessLevel"]}
1
+ {"version":3,"sources":["../src/types/organisation.ts","../src/types/guards.ts"],"sourcesContent":["/**\n * @file Organisation Types\n * @package @jmruthers/pace-core\n * @module Types/Organisation\n * @since 1.0.0\n * \n * Type definitions for organisations, memberships, roles, and organisation context.\n */\n\nimport type { OrganisationId, UserId } from './core';\n\nexport interface Organisation {\n id: string;\n name: string;\n display_name: string;\n description?: string;\n parent_id?: string;\n subscription_tier: string;\n settings: Record<string, unknown>;\n is_active: boolean;\n created_at: string;\n updated_at: string;\n created_by?: string;\n updated_by?: string;\n}\n\nexport interface OrganisationMembership {\n id: string;\n user_id: UserId;\n organisation_id: OrganisationId;\n role: 'org_admin' | 'leader' | 'member' | 'supporter';\n status: 'active' | 'inactive' | 'suspended';\n granted_at: string;\n granted_by?: string;\n revoked_at?: string;\n revoked_by?: string;\n notes?: string;\n created_at: string;\n updated_at: string;\n}\n\nexport interface UserProfile {\n id: UserId;\n email: string;\n full_name?: string;\n created_at: string;\n updated_at: string;\n}\n\nexport interface OrganisationSettings {\n organisation_id: OrganisationId;\n logo_url?: string;\n primary_color?: string;\n secondary_color?: string;\n website_url?: string;\n contact_email?: string;\n phone?: string;\n address?: Record<string, unknown>;\n timezone?: string;\n date_format?: string;\n currency?: string;\n language?: string;\n custom_css?: string;\n email_templates?: Record<string, unknown>;\n notification_settings?: Record<string, unknown>;\n created_at: string;\n updated_at: string;\n created_by?: string;\n updated_by?: string;\n}\n\nexport interface OrganisationInvitation {\n id: string;\n organisation_id: OrganisationId;\n email: string;\n role: 'supporter' | 'member' | 'leader' | 'org_admin';\n invited_by?: string;\n expires_at: string;\n accepted_at?: string;\n created_at: string;\n updated_at: string;\n}\n\nexport interface OrganisationRoleDefinition {\n id: string;\n name: string;\n display_name: string;\n description?: string;\n permissions: Record<string, unknown>;\n is_active: boolean;\n created_at: string;\n updated_at: string;\n}\n\nexport interface SuperAdminContext {\n isSuperAdmin: boolean;\n hasGlobalAccess: boolean;\n canManageAllOrganisations: boolean;\n}\n\nexport interface OrganisationSecurityError extends Error {\n name: 'OrganisationSecurityError';\n code: string;\n organisationId?: string;\n userId?: string;\n}\n\nexport interface OrganisationContextType {\n // Current organisation context\n selectedOrganisation: Organisation | null;\n organisations: Organisation[];\n userMemberships: OrganisationMembership[];\n \n // Loading and error states\n isLoading: boolean;\n error: Error | null;\n hasValidOrganisationContext: boolean;\n isContextReady: boolean;\n \n // Organisation management\n setSelectedOrganisation: (org: Organisation | null) => void;\n switchOrganisation: (orgId: string) => Promise<void>;\n \n // Security helpers\n getUserRole: (orgId?: string) => string;\n validateOrganisationAccess: (orgId: string) => boolean;\n ensureOrganisationContext: () => Organisation;\n \n // Data management\n refreshOrganisations: () => Promise<void>;\n getPrimaryOrganisation: () => Organisation | null;\n isOrganisationSecure: () => boolean;\n \n // Enhanced security features\n getOrganisationHierarchy?: (orgId: string) => Promise<OrganisationHierarchy[]>;\n canAccessChildOrganisations?: (orgId: string) => boolean;\n validateUserAccess?: (userId: string, orgId: string) => Promise<boolean>;\n getUserPermissions?: (orgId?: string) => Promise<string[]>;\n logOrganisationAccess?: (action: string, details?: unknown) => Promise<void>;\n}\n\nexport interface OrganisationProviderProps {\n children: React.ReactNode;\n}\n\nexport interface OrganisationHierarchy {\n organisation: Organisation;\n children: OrganisationHierarchy[];\n parent?: Organisation;\n depth: number;\n}\n\n// Role permissions mapping - Updated for new consolidated role system\nexport const ORGANISATION_ROLE_PERMISSIONS = {\n supporter: ['view_basic'],\n member: ['view_basic', 'view_details'],\n leader: ['view_basic', 'view_details', 'moderate_content', 'manage_events'],\n org_admin: ['view_basic', 'view_details', 'moderate_content', 'manage_events', 'manage_members', 'manage_settings'],\n} as const;\n\nexport type OrganisationRole = keyof typeof ORGANISATION_ROLE_PERMISSIONS;\n\n// Define permission types based on the permissions used in the system\nexport type OrganisationPermission = \n | 'view_basic'\n | 'view_details'\n | 'moderate_content'\n | 'manage_events'\n | 'manage_members'\n | 'manage_settings'\n | '*';\n\n// Enhanced security types\nexport interface OrganisationAccessLog {\n id: string;\n user_id: UserId;\n organisation_id: OrganisationId;\n action: string;\n details: Record<string, unknown>;\n created_at: string;\n}\n\nexport interface SecureQueryOptions {\n table: string;\n select: string;\n filters?: Record<string, unknown>;\n organisationId: OrganisationId;\n userId?: UserId;\n} ","\n/**\n * @file Type Guards\n */\n\nimport { AuthErrorCode } from './core';\nimport type { User, Session } from './auth';\n\nexport function isAuthErrorCode(code: string): code is AuthErrorCode {\n return Object.values(AuthErrorCode).includes(code as AuthErrorCode);\n}\n\nexport function isUser(obj: unknown): obj is User {\n const candidate = obj as Partial<User> | null | undefined;\n return (\n candidate != null &&\n typeof candidate === 'object' &&\n typeof candidate.id === 'string' &&\n typeof candidate.created_at === 'string'\n );\n}\n\nexport function isSession(obj: unknown): obj is Session {\n const candidate = obj as Partial<Session> | null | undefined;\n return (\n candidate != null &&\n typeof candidate === 'object' &&\n typeof candidate.access_token === 'string' &&\n candidate.user != null &&\n typeof candidate.user === 'object'\n );\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAyJO,IAAM,gCAAgC;AAAA,EAC3C,WAAW,CAAC,YAAY;AAAA,EACxB,QAAQ,CAAC,cAAc,cAAc;AAAA,EACrC,QAAQ,CAAC,cAAc,gBAAgB,oBAAoB,eAAe;AAAA,EAC1E,WAAW,CAAC,cAAc,gBAAgB,oBAAoB,iBAAiB,kBAAkB,iBAAiB;AACpH;;;ACtJO,SAAS,gBAAgB,MAAqC;AACnE,SAAO,OAAO,OAAO,aAAa,EAAE,SAAS,IAAqB;AACpE;AAEO,SAAS,OAAO,KAA2B;AAChD,QAAM,YAAY;AAClB,SACE,aAAa,QACb,OAAO,cAAc,YACrB,OAAO,UAAU,OAAO,YACxB,OAAO,UAAU,eAAe;AAEpC;AAEO,SAAS,UAAU,KAA8B;AACtD,QAAM,YAAY;AAClB,SACE,aAAa,QACb,OAAO,cAAc,YACrB,OAAO,UAAU,iBAAiB,YAClC,UAAU,QAAQ,QAClB,OAAO,UAAU,SAAS;AAE9B;","names":[]}
@@ -1,8 +1,7 @@
1
- import { b as OrganisationRole, c as OrganisationPermission, S as SuperAdminContext } from './organisation-D6qRDtbF.js';
2
- import { E as Event } from './unified-DQ4VcT7H.js';
1
+ import { l as OrganisationRole, m as OrganisationPermission, S as SuperAdminContext, E as Event } from './event-CW5YB_2p.js';
3
2
  import { SupabaseClient } from '@supabase/supabase-js';
4
- import { D as Database } from './database-C6jy7EOu.js';
5
- import { F as FileCategory, a as FileReference } from './file-reference-C6Gkn77H.js';
3
+ import { D as Database } from './database.generated-CBmg2950.js';
4
+ import { b as FileCategory, F as FileReference } from './file-reference-D06mEEWW.js';
6
5
 
7
6
  /**
8
7
  * @file useOrganisationPermissions Hook
@@ -102,7 +101,7 @@ interface OrganisationSecurityHook {
102
101
  canAccessChildOrganisations: (orgId?: string) => boolean;
103
102
  hasPermission: (permission: string, orgId?: string) => Promise<boolean>;
104
103
  getUserPermissions: (orgId?: string) => Promise<string[]>;
105
- logOrganisationAccess: (action: string, details?: any) => Promise<void>;
104
+ logOrganisationAccess: (action: string, details?: Record<string, unknown>) => Promise<void>;
106
105
  ensureOrganisationAccess: (orgId: string) => Promise<void>;
107
106
  validateUserAccess: (userId: string, orgId: string) => Promise<boolean>;
108
107
  }
@@ -236,6 +235,88 @@ declare function useAppConfig(): UseAppConfigReturn;
236
235
  */
237
236
  declare function useEventTheme(event?: Event | null): void;
238
237
 
238
+ /**
239
+ * Storage utility types for pace-core
240
+ */
241
+ interface StorageUploadOptions {
242
+ /** The app name from rbac_apps */
243
+ appName: string;
244
+ /** Organisation ID for scoping */
245
+ orgId: string;
246
+ /** Whether the file should be publicly accessible */
247
+ isPublic?: boolean;
248
+ /** Optional tags for categorisation */
249
+ tags?: string[];
250
+ /** Optional custom path within the app/org structure */
251
+ customPath?: string;
252
+ /** Optional metadata to store with the file */
253
+ metadata?: Record<string, any>;
254
+ }
255
+ interface StorageFileMetadata {
256
+ mimeType: string;
257
+ size: number;
258
+ width?: number;
259
+ height?: number;
260
+ hash?: string;
261
+ orgId: string;
262
+ appName: string;
263
+ uploadedBy: string;
264
+ uploadedAt: string;
265
+ tags?: string[];
266
+ isPublic: boolean;
267
+ customMetadata?: Record<string, any>;
268
+ }
269
+ interface StorageUploadResult {
270
+ success: boolean;
271
+ path?: string;
272
+ publicUrl?: string;
273
+ metadata?: StorageFileMetadata;
274
+ error?: string;
275
+ }
276
+ interface StorageUrlOptions {
277
+ /** The app name from rbac_apps */
278
+ appName: string;
279
+ /** Organisation ID for scoping */
280
+ orgId: string;
281
+ /** Expiry time in seconds for signed URLs (default: 3600) */
282
+ expiresIn?: number;
283
+ }
284
+ interface StorageListOptions {
285
+ /** The app name from rbac_apps */
286
+ appName: string;
287
+ /** Organisation ID for scoping */
288
+ orgId: string;
289
+ /** Optional path prefix to filter by */
290
+ pathPrefix?: string;
291
+ /** Optional tags to filter by */
292
+ tags?: string[];
293
+ /** Maximum number of files to return */
294
+ limit?: number;
295
+ /** Offset for pagination */
296
+ offset?: number;
297
+ }
298
+ interface StorageFileInfo {
299
+ name: string;
300
+ path: string;
301
+ size: number;
302
+ mimeType: string;
303
+ lastModified: string;
304
+ metadata: StorageFileMetadata;
305
+ }
306
+ interface StorageListResult {
307
+ files: StorageFileInfo[];
308
+ totalCount: number;
309
+ hasMore: boolean;
310
+ }
311
+ interface FileSizeLimits {
312
+ [mimeType: string]: number;
313
+ }
314
+ interface StorageConfig {
315
+ bucketName: string;
316
+ fileSizeLimits: FileSizeLimits;
317
+ defaultFileSizeLimit: number;
318
+ }
319
+
239
320
  /**
240
321
  * @file Public Event Hook
241
322
  * @package @jmruthers/pace-core
@@ -428,6 +509,122 @@ declare function getPublicFileDisplayCacheStats(): {
428
509
  keys: string[];
429
510
  };
430
511
 
512
+ /**
513
+ * @file Public Event Logo Hook
514
+ * @package @jmruthers/pace-core
515
+ * @module Hooks/Public
516
+ * @since 1.0.0
517
+ *
518
+ * A React hook for accessing public event logo URLs without authentication.
519
+ * Provides logo URLs with fallback handling for public pages.
520
+ *
521
+ * Features:
522
+ * - No authentication required
523
+ * - Automatic fallback to event initials
524
+ * - Caching for performance
525
+ * - Error handling and loading states
526
+ * - TypeScript support
527
+ * - Image validation
528
+ *
529
+ * @example
530
+ * ```tsx
531
+ * import { usePublicEventLogo } from '@jmruthers/pace-core';
532
+ *
533
+ * function EventHeader() {
534
+ * const { logoUrl, fallbackText, isLoading, error } = usePublicEventLogo(
535
+ * eventId,
536
+ * eventName,
537
+ * organisationId
538
+ * );
539
+ *
540
+ * if (isLoading) return <div>Loading logo...</div>;
541
+ * if (error) return <div>Error: {error.message}</div>;
542
+ *
543
+ * return (
544
+ * <div>
545
+ * {logoUrl ? (
546
+ * <img src={logoUrl} alt={`${eventName} logo`} />
547
+ * ) : (
548
+ * <div className="logo-fallback">{fallbackText}</div>
549
+ * )}
550
+ * </div>
551
+ * );
552
+ * }
553
+ * ```
554
+ *
555
+ * @accessibility
556
+ * - No direct accessibility concerns (hook)
557
+ * - Enables accessible logo display with proper alt text
558
+ * - Supports screen reader friendly fallbacks
559
+ *
560
+ * @security
561
+ * - Only returns public-safe logo URLs
562
+ * - Validates image existence before returning URL
563
+ * - No sensitive information exposed
564
+ * - Rate limiting applied at storage level
565
+ *
566
+ * @performance
567
+ * - Built-in caching with TTL
568
+ * - Image validation and optimization
569
+ * - Minimal re-renders with stable references
570
+ * - Lazy loading support
571
+ *
572
+ * @dependencies
573
+ * - React 18+ - Hooks and effects
574
+ * - @supabase/supabase-js - Storage integration
575
+ * - Event types - Type definitions
576
+ */
577
+
578
+ interface UsePublicEventLogoReturn {
579
+ /** The logo URL if available, null if not found or error */
580
+ logoUrl: string | null;
581
+ /** Fallback text (event initials) if no logo is available */
582
+ fallbackText: string;
583
+ /** Whether the logo is currently loading */
584
+ isLoading: boolean;
585
+ /** Any error that occurred during loading */
586
+ error: Error | null;
587
+ /** Function to manually refetch the logo */
588
+ refetch: () => Promise<void>;
589
+ }
590
+ interface UsePublicEventLogoOptions {
591
+ /** Cache TTL in milliseconds (default: 30 minutes) */
592
+ cacheTtl?: number;
593
+ /** Whether to enable caching (default: true) */
594
+ enableCache?: boolean;
595
+ /** Whether to validate image existence (default: true) */
596
+ validateImage?: boolean;
597
+ /** Custom fallback text generator */
598
+ generateFallbackText?: (eventName: string) => string;
599
+ /** Supabase client instance (required) */
600
+ supabase: SupabaseClient<Database>;
601
+ }
602
+ /**
603
+ * Hook for accessing public event logo URLs
604
+ *
605
+ * This hook provides access to event logo URLs without requiring
606
+ * authentication. It includes fallback handling and image validation.
607
+ *
608
+ * @param eventId - The event ID to fetch logo for
609
+ * @param eventName - The event name for fallback text generation
610
+ * @param organisationId - The organisation ID for storage path
611
+ * @param options - Configuration options for caching and behavior
612
+ * @returns Object containing logo URL, fallback text, loading state, error, and refetch function
613
+ */
614
+ declare function usePublicEventLogo(eventId: string | undefined, eventName: string | undefined, organisationId: string | undefined, options: UsePublicEventLogoOptions): UsePublicEventLogoReturn;
615
+ /**
616
+ * Clear all cached public logo data
617
+ * Useful for testing or when you need to force refresh all data
618
+ */
619
+ declare function clearPublicLogoCache(): void;
620
+ /**
621
+ * Get cache statistics for debugging
622
+ */
623
+ declare function getPublicLogoCacheStats(): {
624
+ size: number;
625
+ keys: string[];
626
+ };
627
+
431
628
  /**
432
629
  * @file Public Route Params Hook
433
630
  * @package @jmruthers/pace-core
@@ -537,4 +734,4 @@ declare function generatePublicRoutePath(eventCode: string, pageName?: string):
537
734
  */
538
735
  declare function extractEventCodeFromPath(path: string): string | null;
539
736
 
540
- export { type OrganisationSecurityHook as O, type UseOrganisationPermissionsReturn as U, useOrganisationPermissions as a, useOrganisationSecurity as b, useAppConfig as c, type UseAppConfigReturn as d, usePublicEvent as e, clearPublicEventCache as f, getPublicEventCacheStats as g, usePublicFileDisplay as h, clearPublicFileDisplayCache as i, getPublicFileDisplayCacheStats as j, usePublicRouteParams as k, usePublicEventCode as l, generatePublicRoutePath as m, extractEventCodeFromPath as n, type UsePublicEventReturn as o, type UsePublicEventOptions as p, type UsePublicFileDisplayReturn as q, type UsePublicFileDisplayOptions as r, type UsePublicRouteParamsReturn as s, useEventTheme as u };
737
+ export { type UsePublicEventLogoReturn as A, type UsePublicEventLogoOptions as B, type UsePublicRouteParamsReturn as C, type StorageConfig as D, type StorageFileMetadata as E, type FileSizeLimits as F, type StorageUrlOptions as G, type OrganisationSecurityHook as O, type StorageUploadOptions as S, type UseOrganisationPermissionsReturn as U, type StorageUploadResult as a, type StorageListOptions as b, type StorageListResult as c, type StorageFileInfo as d, useOrganisationPermissions as e, useOrganisationSecurity as f, useAppConfig as g, type UseAppConfigReturn as h, usePublicEvent as i, clearPublicEventCache as j, getPublicEventCacheStats as k, usePublicFileDisplay as l, clearPublicFileDisplayCache as m, getPublicFileDisplayCacheStats as n, usePublicEventLogo as o, clearPublicLogoCache as p, getPublicLogoCacheStats as q, usePublicRouteParams as r, usePublicEventCode as s, generatePublicRoutePath as t, useEventTheme as u, extractEventCodeFromPath as v, type UsePublicEventReturn as w, type UsePublicEventOptions as x, type UsePublicFileDisplayReturn as y, type UsePublicFileDisplayOptions as z };