@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.
- package/CHANGELOG.md +1 -1
- package/README.md +16 -2
- package/dist/{AuthService-DYuQPJj6.d.ts → AuthService-B-cd2MA4.d.ts} +9 -11
- package/dist/{DataTable-CWAZZcXC.d.ts → DataTable-Bz8ffqyA.d.ts} +1 -1
- package/dist/{DataTable-UA6CL4JI.js → DataTable-QAB34V6K.js} +14 -15
- package/dist/UnifiedAuthProvider-7F6T4B6K.js +13 -0
- package/dist/{UnifiedAuthProvider-DJxGTftH.d.ts → UnifiedAuthProvider-F86d7dSi.d.ts} +5 -6
- package/dist/{api-45XYYO2A.js → api-ROMBCNKU.js} +5 -5
- package/dist/{audit-64X3VJXB.js → audit-WRS3KJKI.js} +4 -4
- package/dist/auth-BZOJqrdd.d.ts +49 -0
- package/dist/{chunk-CX5M4ZAG.js → chunk-5DRSZLL2.js} +1 -1
- package/dist/chunk-5DRSZLL2.js.map +1 -0
- package/dist/{chunk-BESYRHQM.js → chunk-6C4YBBJM.js} +10 -7
- package/dist/chunk-6C4YBBJM.js.map +1 -0
- package/dist/{chunk-PLDDJCW6.js → chunk-7D4SUZUM.js} +2 -13
- package/dist/{chunk-HRO5HWN2.js → chunk-CSOFYHAG.js} +55 -162
- package/dist/chunk-CSOFYHAG.js.map +1 -0
- package/dist/{chunk-ANBQRTPX.js → chunk-E66EQZE6.js} +3 -5
- package/dist/{chunk-ANBQRTPX.js.map → chunk-E66EQZE6.js.map} +1 -1
- package/dist/{chunk-Q5QRDWKI.js → chunk-F2IMUDXZ.js} +4 -6
- package/dist/chunk-F2IMUDXZ.js.map +1 -0
- package/dist/{chunk-SBVILCCA.js → chunk-FSFQFJCU.js} +28 -6
- package/dist/chunk-FSFQFJCU.js.map +1 -0
- package/dist/chunk-FUEYYMX5.js +2296 -0
- package/dist/chunk-FUEYYMX5.js.map +1 -0
- package/dist/{chunk-FFKNH6U5.js → chunk-HKIT6O7W.js} +3 -5
- package/dist/{chunk-FFKNH6U5.js.map → chunk-HKIT6O7W.js.map} +1 -1
- package/dist/chunk-KQCRWDSA.js +1 -0
- package/dist/{chunk-S5OFRT4M.js → chunk-KUEN3HFB.js} +6 -6
- package/dist/chunk-KUEN3HFB.js.map +1 -0
- package/dist/chunk-LMC26NLJ.js +84 -0
- package/dist/chunk-LMC26NLJ.js.map +1 -0
- package/dist/{chunk-BVYWGZVV.js → chunk-M7W4CP3M.js} +52 -19
- package/dist/chunk-M7W4CP3M.js.map +1 -0
- package/dist/{chunk-HZLDFOE4.js → chunk-MI7HBHN3.js} +164 -243
- package/dist/chunk-MI7HBHN3.js.map +1 -0
- package/dist/{chunk-PPMP5J6T.js → chunk-PWAHJW4G.js} +180 -29
- package/dist/chunk-PWAHJW4G.js.map +1 -0
- package/dist/chunk-PWLANIRT.js +127 -0
- package/dist/{chunk-XDNLUEXI.js.map → chunk-PWLANIRT.js.map} +1 -1
- package/dist/chunk-QCDXODCA.js +75 -0
- package/dist/chunk-QCDXODCA.js.map +1 -0
- package/dist/{chunk-D7LCGMVS.js → chunk-QETLRQI6.js} +526 -887
- package/dist/chunk-QETLRQI6.js.map +1 -0
- package/dist/{chunk-5MT24GKJ.js → chunk-QUVSNGIP.js} +264 -262
- package/dist/chunk-QUVSNGIP.js.map +1 -0
- package/dist/chunk-QXHPKYJV.js +113 -0
- package/dist/chunk-QXHPKYJV.js.map +1 -0
- package/dist/{chunk-OWAG3GSU.js → chunk-R77UEZ4E.js} +11 -1
- package/dist/chunk-R77UEZ4E.js.map +1 -0
- package/dist/{chunk-ZYTYSTO5.js → chunk-RA3JUFMW.js} +314 -161
- package/dist/chunk-RA3JUFMW.js.map +1 -0
- package/dist/{chunk-ERISIBYU.js → chunk-SQGMNID3.js} +3 -8
- package/dist/chunk-SQGMNID3.js.map +1 -0
- package/dist/{chunk-XJ2HZOBU.js → chunk-UHNYIBXL.js} +1 -1
- package/dist/chunk-UHNYIBXL.js.map +1 -0
- package/{src/utils/secureStorage.ts → dist/chunk-VBXEHIUJ.js} +113 -88
- package/dist/{chunk-7QCC6MCP.js.map → chunk-VBXEHIUJ.js.map} +1 -1
- package/dist/{chunk-VZ4VDGTB.js → chunk-W22JP75J.js} +5 -13
- package/dist/{chunk-VZ4VDGTB.js.map → chunk-W22JP75J.js.map} +1 -1
- package/dist/components.d.ts +12 -93
- package/dist/components.js +23 -106
- package/dist/components.js.map +1 -1
- package/dist/core-CUElvH_C.d.ts +164 -0
- package/dist/database.generated-CBmg2950.d.ts +8284 -0
- package/dist/event-CW5YB_2p.d.ts +239 -0
- package/dist/{file-reference-C6Gkn77H.d.ts → file-reference-D06mEEWW.d.ts} +7 -5
- package/dist/functions-D_kgHktt.d.ts +208 -0
- package/dist/hooks.d.ts +54 -7
- package/dist/hooks.js +204 -17
- package/dist/hooks.js.map +1 -1
- package/dist/{EventLogo-B3V3otev.d.ts → index-Bl--n7-T.d.ts} +387 -397
- package/dist/index.d.ts +94 -261
- package/dist/index.js +314 -126
- package/dist/index.js.map +1 -1
- package/dist/providers.d.ts +7 -8
- package/dist/providers.js +6 -13
- package/dist/rbac/index.d.ts +171 -101
- package/dist/rbac/index.js +23 -17
- package/dist/styles/index.d.ts +1 -3
- package/dist/styles/index.js +2 -17
- package/dist/theming/runtime.js +3 -3
- package/dist/types-UU913iLA.d.ts +102 -0
- package/dist/{types-Dfz9dmVH.d.ts → types-_x1f4QBF.d.ts} +6 -6
- package/dist/types.d.ts +88 -227
- package/dist/types.js +64 -112
- package/dist/types.js.map +1 -1
- package/dist/{usePublicRouteParams-B7PabvuH.d.ts → usePublicRouteParams-JJczomYq.d.ts} +203 -6
- package/dist/utils.d.ts +299 -13
- package/dist/utils.js +481 -55
- package/dist/utils.js.map +1 -1
- package/dist/validation-643vUDZW.d.ts +177 -0
- package/docs/DOCUMENTATION_REVIEW_TRACKER.md +511 -0
- package/docs/README.md +9 -8
- package/docs/api/README.md +16 -2
- package/docs/api/classes/ColumnFactory.md +1 -1
- package/docs/api/classes/ErrorBoundary.md +1 -1
- package/docs/api/classes/InvalidScopeError.md +4 -4
- package/docs/api/classes/MissingUserContextError.md +4 -4
- package/docs/api/classes/OrganisationContextRequiredError.md +4 -4
- package/docs/api/classes/PermissionDeniedError.md +4 -4
- package/docs/api/classes/RBACAuditManager.md +14 -14
- package/docs/api/classes/RBACCache.md +1 -1
- package/docs/api/classes/RBACEngine.md +2 -2
- package/docs/api/classes/RBACError.md +4 -4
- package/docs/api/classes/RBACNotInitializedError.md +4 -4
- package/docs/api/classes/SecureSupabaseClient.md +29 -9
- package/docs/api/classes/StorageUtils.md +1 -1
- package/docs/api/enums/FileCategory.md +17 -17
- package/docs/api/enums/RBACErrorCode.md +228 -0
- package/docs/api/enums/RPCFunction.md +118 -0
- package/docs/api/interfaces/AggregateConfig.md +1 -1
- package/docs/api/interfaces/BadgeProps.md +1 -1
- package/docs/api/interfaces/ButtonProps.md +2 -2
- package/docs/api/interfaces/CalendarProps.md +1 -1
- package/docs/api/interfaces/CardProps.md +29 -3
- package/docs/api/interfaces/ColorPalette.md +1 -1
- package/docs/api/interfaces/ColorShade.md +1 -1
- package/docs/api/interfaces/DataAccessRecord.md +1 -1
- package/docs/api/interfaces/DataRecord.md +1 -1
- package/docs/api/interfaces/DataTableAction.md +2 -2
- package/docs/api/interfaces/DataTableColumn.md +6 -6
- package/docs/api/interfaces/DataTableProps.md +1 -1
- package/docs/api/interfaces/DataTableToolbarButton.md +2 -2
- package/docs/api/interfaces/EmptyStateConfig.md +1 -1
- package/docs/api/interfaces/EnhancedNavigationMenuProps.md +1 -1
- package/docs/api/interfaces/EventAppRoleData.md +1 -1
- package/docs/api/interfaces/ExportColumn.md +5 -5
- package/docs/api/interfaces/ExportOptions.md +4 -4
- package/docs/api/interfaces/FileDisplayProps.md +1 -1
- package/docs/api/interfaces/FileMetadata.md +13 -13
- package/docs/api/interfaces/FileReference.md +12 -12
- package/docs/api/interfaces/FileSizeLimits.md +1 -1
- package/docs/api/interfaces/FileUploadOptions.md +10 -10
- package/docs/api/interfaces/FileUploadProps.md +19 -19
- package/docs/api/interfaces/FooterProps.md +1 -1
- package/docs/api/interfaces/FormFieldProps.md +166 -0
- package/docs/api/interfaces/FormProps.md +113 -0
- package/docs/api/interfaces/GrantEventAppRoleParams.md +1 -1
- package/docs/api/interfaces/InactivityWarningModalProps.md +8 -8
- package/docs/api/interfaces/InputProps.md +2 -2
- package/docs/api/interfaces/LabelProps.md +8 -8
- package/docs/api/interfaces/LoginFormProps.md +1 -1
- package/docs/api/interfaces/NavigationAccessRecord.md +1 -1
- package/docs/api/interfaces/NavigationContextType.md +1 -1
- package/docs/api/interfaces/NavigationGuardProps.md +1 -1
- package/docs/api/interfaces/NavigationItem.md +17 -73
- package/docs/api/interfaces/NavigationMenuProps.md +38 -53
- package/docs/api/interfaces/NavigationProviderProps.md +1 -1
- package/docs/api/interfaces/Organisation.md +13 -13
- package/docs/api/interfaces/OrganisationContextType.md +21 -21
- package/docs/api/interfaces/OrganisationMembership.md +15 -15
- package/docs/api/interfaces/OrganisationProviderProps.md +59 -2
- package/docs/api/interfaces/OrganisationSecurityError.md +5 -5
- package/docs/api/interfaces/PaceAppLayoutProps.md +26 -39
- package/docs/api/interfaces/PaceLoginPageProps.md +1 -1
- package/docs/api/interfaces/PageAccessRecord.md +1 -1
- package/docs/api/interfaces/PagePermissionContextType.md +1 -1
- package/docs/api/interfaces/PagePermissionGuardProps.md +1 -1
- package/docs/api/interfaces/PagePermissionProviderProps.md +1 -1
- package/docs/api/interfaces/PaletteData.md +1 -1
- package/docs/api/interfaces/PermissionEnforcerProps.md +1 -1
- package/docs/api/interfaces/ProgressProps.md +50 -0
- package/docs/api/interfaces/ProtectedRouteProps.md +1 -1
- package/docs/api/interfaces/PublicPageFooterProps.md +9 -9
- package/docs/api/interfaces/PublicPageHeaderProps.md +10 -10
- package/docs/api/interfaces/PublicPageLayoutProps.md +15 -15
- package/docs/api/interfaces/RBACAccessValidateParams.md +52 -0
- package/docs/api/interfaces/RBACAccessValidateResult.md +41 -0
- package/docs/api/interfaces/RBACAuditLogParams.md +85 -0
- package/docs/api/interfaces/RBACAuditLogResult.md +52 -0
- package/docs/api/interfaces/RBACConfig.md +2 -2
- package/docs/api/interfaces/RBACContext.md +52 -0
- package/docs/api/interfaces/RBACLogger.md +1 -1
- package/docs/api/interfaces/RBACPageAccessCheckParams.md +74 -0
- package/docs/api/interfaces/RBACPermissionCheckParams.md +74 -0
- package/docs/api/interfaces/RBACPermissionCheckResult.md +52 -0
- package/docs/api/interfaces/RBACPermissionsGetParams.md +63 -0
- package/docs/api/interfaces/RBACPermissionsGetResult.md +63 -0
- package/docs/api/interfaces/RBACResult.md +58 -0
- package/docs/api/interfaces/RBACRoleGrantParams.md +63 -0
- package/docs/api/interfaces/RBACRoleGrantResult.md +52 -0
- package/docs/api/interfaces/RBACRoleRevokeParams.md +63 -0
- package/docs/api/interfaces/RBACRoleRevokeResult.md +52 -0
- package/docs/api/interfaces/RBACRoleValidateParams.md +52 -0
- package/docs/api/interfaces/RBACRoleValidateResult.md +63 -0
- package/docs/api/interfaces/RBACRolesListParams.md +52 -0
- package/docs/api/interfaces/RBACRolesListResult.md +74 -0
- package/docs/api/interfaces/RBACSessionTrackParams.md +74 -0
- package/docs/api/interfaces/RBACSessionTrackResult.md +52 -0
- package/docs/api/interfaces/ResourcePermissions.md +1 -1
- package/docs/api/interfaces/RevokeEventAppRoleParams.md +1 -1
- package/docs/api/interfaces/RoleBasedRouterContextType.md +1 -1
- package/docs/api/interfaces/RoleBasedRouterProps.md +1 -1
- package/docs/api/interfaces/RoleManagementResult.md +1 -1
- package/docs/api/interfaces/RouteAccessRecord.md +1 -1
- package/docs/api/interfaces/RouteConfig.md +1 -1
- package/docs/api/interfaces/SecureDataContextType.md +1 -1
- package/docs/api/interfaces/SecureDataProviderProps.md +1 -1
- package/docs/api/interfaces/SessionRestorationLoaderProps.md +15 -2
- package/docs/api/interfaces/StorageConfig.md +1 -1
- package/docs/api/interfaces/StorageFileInfo.md +1 -1
- package/docs/api/interfaces/StorageFileMetadata.md +1 -1
- package/docs/api/interfaces/StorageListOptions.md +1 -1
- package/docs/api/interfaces/StorageListResult.md +1 -1
- package/docs/api/interfaces/StorageUploadOptions.md +1 -1
- package/docs/api/interfaces/StorageUploadResult.md +1 -1
- package/docs/api/interfaces/StorageUrlOptions.md +1 -1
- package/docs/api/interfaces/StyleImport.md +1 -1
- package/docs/api/interfaces/SwitchProps.md +1 -1
- package/docs/api/interfaces/TabsContentProps.md +1 -1
- package/docs/api/interfaces/TabsListProps.md +1 -1
- package/docs/api/interfaces/TabsProps.md +1 -1
- package/docs/api/interfaces/TabsTriggerProps.md +43 -2
- package/docs/api/interfaces/TextareaProps.md +2 -2
- package/docs/api/interfaces/ToastActionElement.md +1 -1
- package/docs/api/interfaces/ToastProps.md +1 -1
- package/docs/api/interfaces/UnifiedAuthContextType.md +61 -61
- package/docs/api/interfaces/UnifiedAuthProviderProps.md +13 -13
- package/docs/api/interfaces/UseInactivityTrackerOptions.md +1 -1
- package/docs/api/interfaces/UseInactivityTrackerReturn.md +1 -1
- package/docs/api/interfaces/UsePublicEventLogoOptions.md +87 -0
- package/docs/api/interfaces/UsePublicEventLogoReturn.md +81 -0
- package/docs/api/interfaces/UsePublicEventOptions.md +3 -3
- package/docs/api/interfaces/UsePublicEventReturn.md +5 -5
- package/docs/api/interfaces/UsePublicFileDisplayOptions.md +2 -2
- package/docs/api/interfaces/UsePublicFileDisplayReturn.md +1 -1
- package/docs/api/interfaces/UsePublicRouteParamsReturn.md +1 -1
- package/docs/api/interfaces/UseResolvedScopeOptions.md +2 -2
- package/docs/api/interfaces/UseResolvedScopeReturn.md +1 -1
- package/docs/api/interfaces/UseResourcePermissionsOptions.md +1 -1
- package/docs/api/interfaces/UserEventAccess.md +1 -1
- package/docs/api/interfaces/UserMenuProps.md +4 -4
- package/docs/api/interfaces/UserProfile.md +7 -7
- package/docs/api/modules.md +484 -462
- package/docs/api-reference/components.md +186 -15
- package/docs/api-reference/deprecated.md +376 -0
- package/docs/api-reference/hooks.md +149 -19
- package/docs/api-reference/providers.md +61 -6
- package/docs/api-reference/rpc-functions.md +397 -0
- package/docs/api-reference/types.md +135 -78
- package/docs/api-reference/utilities.md +51 -380
- package/docs/architecture/README.md +49 -3
- package/docs/architecture/database-schema-requirements.md +40 -3
- package/docs/architecture/rbac-security-architecture.md +41 -4
- package/docs/architecture/services.md +127 -42
- package/docs/best-practices/README.md +51 -5
- package/docs/best-practices/accessibility.md +32 -3
- package/docs/best-practices/common-patterns.md +50 -3
- package/docs/best-practices/deployment.md +50 -4
- package/docs/best-practices/performance.md +50 -3
- package/docs/best-practices/security.md +94 -41
- package/docs/best-practices/testing.md +33 -4
- package/docs/core-concepts/authentication.md +5 -5
- package/docs/core-concepts/events.md +3 -3
- package/docs/core-concepts/organisations.md +3 -3
- package/docs/core-concepts/permissions.md +3 -3
- package/docs/core-concepts/rbac-system.md +5 -5
- package/docs/documentation-index.md +30 -8
- package/docs/getting-started/documentation-index.md +1 -1
- package/docs/getting-started/examples/README.md +7 -5
- package/docs/getting-started/examples/basic-auth-app.md +3 -0
- package/docs/getting-started/examples/full-featured-app.md +5 -3
- package/docs/getting-started/faq.md +6 -6
- package/docs/getting-started/installation-guide.md +192 -13
- package/docs/getting-started/local-development.md +303 -0
- package/docs/getting-started/quick-reference.md +3 -3
- package/docs/getting-started/quick-start.md +517 -0
- package/docs/implementation-guides/app-layout.md +45 -3
- package/docs/implementation-guides/authentication.md +66 -7
- package/docs/implementation-guides/component-styling.md +53 -3
- package/docs/implementation-guides/data-tables.md +76 -7
- package/docs/implementation-guides/datatable-filtering.md +1 -2
- package/docs/implementation-guides/datatable-rbac-usage.md +0 -1
- package/docs/implementation-guides/dynamic-colors.md +155 -4
- package/docs/implementation-guides/file-reference-system.md +72 -3
- package/docs/implementation-guides/file-upload-storage.md +72 -3
- package/docs/implementation-guides/forms.md +53 -3
- package/docs/implementation-guides/inactivity-tracking.md +53 -3
- package/docs/implementation-guides/large-datasets.md +1 -1
- package/docs/implementation-guides/navigation.md +55 -5
- package/docs/implementation-guides/organisation-security.md +72 -3
- package/docs/implementation-guides/performance.md +57 -1
- package/docs/implementation-guides/permission-enforcement.md +81 -8
- package/docs/implementation-guides/public-pages.md +560 -14
- package/docs/migration/MIGRATION_GUIDE.md +409 -50
- package/docs/migration/README.md +37 -3
- package/docs/migration/organisation-context-timing-fix.md +39 -4
- package/docs/migration/quick-migration-guide.md +41 -5
- package/docs/migration/rbac-migration.md +59 -3
- package/docs/migration/service-architecture.md +77 -14
- package/docs/rbac/README.md +79 -3
- package/docs/rbac/advanced-patterns.md +47 -3
- package/docs/rbac/api-reference.md +77 -8
- package/docs/rbac/event-based-apps.md +50 -5
- package/docs/rbac/examples/rbac-rls-integration-example.md +3 -3
- package/docs/rbac/examples.md +39 -3
- package/docs/rbac/getting-started.md +63 -4
- package/docs/rbac/quick-start.md +57 -5
- package/docs/rbac/rbac-rls-integration.md +68 -6
- package/docs/rbac/super-admin-guide.md +47 -3
- package/docs/rbac/troubleshooting.md +3 -3
- package/docs/security/README.md +68 -3
- package/docs/security/checklist.md +50 -3
- package/docs/standards/01-architecture-standard.md +39 -0
- package/docs/standards/02-api-and-rpc-standard.md +39 -0
- package/docs/standards/03-component-standard.md +32 -0
- package/docs/standards/04-code-style-standard.md +32 -0
- package/docs/standards/05-security-standard.md +30 -0
- package/docs/standards/06-testing-and-docs-standard.md +29 -0
- package/docs/standards/README.md +35 -0
- package/docs/styles/README.md +89 -8
- package/docs/testing/README.md +175 -24
- package/docs/troubleshooting/README.md +50 -3
- package/docs/troubleshooting/common-issues.md +271 -5
- package/docs/troubleshooting/debugging.md +54 -1
- package/docs/troubleshooting/migration.md +54 -1
- package/docs/troubleshooting/organisation-context-setup.md +29 -3
- package/docs/troubleshooting/styling-issues.md +246 -4
- package/{src/components/DataTable/examples → examples/DataTable}/GroupingAggregationExample.tsx +1 -1
- package/examples/{components 2/DataTable/HierarchicalActionsExample.tsx → DataTable/HierarchicalActionsExample.tsx} +7 -6
- package/{src/components/DataTable/examples → examples/DataTable}/HierarchicalExample.tsx +8 -6
- package/examples/{components 2/DataTable/PerformanceExample.tsx → DataTable/PerformanceExample.tsx} +2 -2
- package/examples/{components 2/DataTable/index.ts → DataTable/index.ts} +1 -0
- package/{src/components/Dialog/examples → examples/Dialog}/HtmlDialogExample.tsx +3 -3
- package/examples/{components 2/Dialog/ScrollableDialogExample.tsx → Dialog/ScrollableDialogExample.tsx} +1 -1
- package/{src/components/Dialog/examples → examples/Dialog}/SmartDialogExample.tsx +1 -1
- package/examples/{components 2/Dialog/index.ts → Dialog/index.ts} +0 -3
- package/examples/{features/public-pages → PublicPages}/CorrectPublicPageImplementation.tsx +52 -17
- package/examples/{features/public-pages → PublicPages}/PublicEventPage.tsx +65 -35
- package/examples/{features/public-pages → PublicPages}/PublicPageApp.tsx +52 -18
- package/examples/{features/public-pages → PublicPages}/PublicPageUsageExample.tsx +28 -15
- package/examples/README.md +81 -33
- package/examples/index.ts +14 -12
- package/examples/{RBAC → rbac}/CompleteRBACExample.tsx +1 -1
- package/examples/{features/rbac → rbac}/EventBasedApp.tsx +4 -4
- package/examples/{features/rbac → rbac}/PermissionExample.tsx +5 -3
- package/package.json +21 -27
- package/src/__tests__/helpers/test-utils.tsx +29 -3
- package/src/__tests__/rbac/PagePermissionGuard.test.tsx +7 -5
- package/src/components/Alert/Alert.test.tsx +2 -2
- package/src/components/Alert/Alert.tsx +4 -4
- package/src/components/Avatar/Avatar.test.tsx +17 -6
- package/src/components/Badge/Badge.test.tsx +1 -1
- package/src/components/Badge/Badge.tsx +2 -2
- package/src/components/Button/Button.test.tsx +2 -2
- package/src/components/Button/Button.tsx +11 -7
- package/src/components/Calendar/Calendar.test.tsx +41 -8
- package/src/components/Calendar/Calendar.tsx +39 -36
- package/src/components/Card/Card.tsx +51 -13
- package/src/components/Checkbox/Checkbox.test.tsx +36 -12
- package/src/components/DataTable/DataTable.test.tsx +1 -1
- package/src/components/DataTable/__tests__/DataTable.comprehensive.test.tsx +13 -7
- package/src/components/DataTable/__tests__/DataTable.default-state.test.tsx +14 -42
- package/src/components/DataTable/__tests__/DataTable.export.test.tsx +13 -10
- package/src/components/DataTable/__tests__/DataTable.grouping-aggregation.test.tsx +14 -11
- package/src/components/DataTable/__tests__/DataTable.hooks.test.tsx +4 -2
- package/src/components/DataTable/__tests__/DataTable.test.tsx +13 -7
- package/src/components/DataTable/__tests__/DataTableCore.test-setup.ts +13 -10
- package/src/components/DataTable/__tests__/DataTableCore.test.tsx +15 -11
- package/src/components/DataTable/__tests__/a11y.basic.test.tsx +12 -6
- package/src/components/DataTable/__tests__/keyboard.test.tsx +12 -6
- package/src/components/DataTable/__tests__/pagination.modes.test.tsx +10 -6
- package/src/components/DataTable/__tests__/test-utils/sharedTestUtils.tsx +1 -1
- package/src/components/DataTable/components/DataTableBody.tsx +10 -25
- package/src/components/DataTable/components/DataTableCore.tsx +1 -1
- package/src/components/DataTable/components/FilterRow.tsx +3 -1
- package/src/components/DataTable/components/ImportModal.tsx +1 -1
- package/src/components/DataTable/components/VirtualizedDataTable.tsx +9 -9
- package/src/components/DataTable/core/ColumnFactory.ts +6 -6
- package/src/components/DataTable/core/DataTableContext.tsx +14 -10
- package/src/components/DataTable/core/LocalDataAdapter.ts +2 -1
- package/src/components/DataTable/core/PluginRegistry.ts +3 -3
- package/src/components/DataTable/core/StateManager.ts +12 -11
- package/src/components/DataTable/core/__tests__/ActionManager.test.ts +104 -0
- package/src/components/DataTable/core/__tests__/DataManager.test.ts +101 -0
- package/src/components/DataTable/core/__tests__/LocalDataAdapter.test.ts +84 -0
- package/src/components/DataTable/core/__tests__/PluginRegistry.test.ts +102 -0
- package/src/components/DataTable/core/__tests__/StateManager.test.ts +104 -0
- package/src/components/DataTable/core/interfaces.ts +17 -17
- package/src/components/DataTable/hooks/__tests__/useDataTableConfiguration.test.ts +124 -0
- package/src/components/DataTable/hooks/__tests__/useDataTableDataPipeline.test.ts +117 -0
- package/src/components/DataTable/hooks/__tests__/useDataTablePermissions.test.ts +102 -0
- package/src/components/DataTable/hooks/__tests__/useEffectiveColumnOrder.test.ts +53 -0
- package/src/components/DataTable/hooks/useColumnOrderPersistence.ts +0 -2
- package/src/components/DataTable/hooks/useDataTablePermissions.ts +9 -8
- package/src/components/DataTable/types.ts +5 -5
- package/src/components/DataTable/utils/aggregationUtils.ts +4 -4
- package/src/components/DataTable/utils/columnUtils.ts +3 -2
- package/src/components/DataTable/utils/debugTools.ts +1 -1
- package/src/components/DataTable/utils/exportUtils.ts +6 -6
- package/src/components/DataTable/utils/hierarchicalSorting.ts +6 -6
- package/src/components/DataTable/utils/hierarchicalUtils.ts +0 -8
- package/src/components/DataTable/utils/index.ts +0 -1
- package/src/components/DataTable/utils/performanceUtils.ts +9 -4
- package/src/components/Dialog/Dialog.test.tsx +49 -27
- package/src/components/ErrorBoundary/ErrorBoundary.test.tsx +13 -8
- package/src/components/EventSelector/EventSelector.test.tsx +60 -12
- package/src/components/EventSelector/EventSelector.tsx +38 -15
- package/src/components/EventSelector/index.ts +2 -2
- package/src/components/FileDisplay/FileDisplay.test.tsx +143 -85
- package/src/components/FileDisplay/FileDisplay.tsx +1 -0
- package/src/components/FileUpload/FileUpload.test.tsx +532 -152
- package/src/components/FileUpload/FileUpload.tsx +43 -8
- package/src/components/Footer/Footer.test.tsx +19 -14
- package/src/components/Form/Form.test.tsx +96 -14
- package/src/components/Form/Form.tsx +210 -1
- package/src/components/Form/index.ts +3 -7
- package/src/components/Header/Header.test.tsx +24 -17
- package/src/components/Header/Header.tsx +3 -1
- package/src/components/InactivityWarningModal/InactivityWarningModal.tsx +2 -4
- package/src/components/Input/Input.test.tsx +61 -36
- package/src/components/Label/{__tests__/Label.test.tsx → Label.test.tsx} +2 -2
- package/src/components/Label/Label.tsx +2 -3
- package/src/components/LoadingSpinner/LoadingSpinner.test.tsx +6 -5
- package/src/components/LoadingSpinner/LoadingSpinner.tsx +6 -2
- package/src/components/LoginForm/LoginForm.test.tsx +14 -13
- package/src/components/LoginForm/LoginForm.tsx +1 -1
- package/src/components/LoginForm/index.ts +7 -0
- package/src/components/NavigationMenu/NavigationMenu.test.tsx +233 -20
- package/src/components/NavigationMenu/NavigationMenu.tsx +191 -55
- package/src/components/NavigationMenu/index.ts +1 -1
- package/src/components/OrganisationSelector/OrganisationSelector.test.tsx +20 -11
- package/src/components/OrganisationSelector/OrganisationSelector.tsx +1 -1
- package/src/components/PaceAppLayout/{__tests__/PaceAppLayout.integration.test.tsx → PaceAppLayout.integration.test.tsx} +272 -79
- package/src/components/PaceAppLayout/{__tests__/PaceAppLayout.performance.test.tsx → PaceAppLayout.performance.test.tsx} +155 -32
- package/src/components/PaceAppLayout/{__tests__/PaceAppLayout.security.test.tsx → PaceAppLayout.security.test.tsx} +211 -65
- package/src/components/PaceAppLayout/PaceAppLayout.test.tsx +498 -210
- package/src/components/PaceAppLayout/PaceAppLayout.tsx +63 -64
- package/src/components/PaceAppLayout/test-setup.tsx +192 -0
- package/src/components/PaceLoginPage/PaceLoginPage.test.tsx +193 -39
- package/src/components/{PasswordReset → PasswordChange}/PasswordChangeForm.test.tsx +2 -2
- package/src/components/{PasswordReset → PasswordChange}/PasswordChangeForm.tsx +10 -4
- package/src/components/PasswordChange/index.ts +2 -0
- package/src/components/Progress/Progress.test.tsx +11 -0
- package/src/components/Progress/Progress.tsx +1 -1
- package/src/components/Progress/index.ts +10 -0
- package/src/components/ProtectedRoute/ProtectedRoute.test.tsx +2 -1
- package/src/components/PublicLayout/PublicLayout.test.tsx +1210 -0
- package/src/components/PublicLayout/PublicPageLayout.tsx +190 -36
- package/src/components/PublicLayout/PublicPageProvider.tsx +8 -7
- package/src/components/PublicLayout/index.ts +10 -28
- package/src/components/Select/Select.test.tsx +7 -7
- package/src/components/Select/Select.tsx +277 -11
- package/src/components/Select/index.ts +1 -2
- package/src/components/SessionRestorationLoader/SessionRestorationLoader.test.tsx +232 -0
- package/src/components/SessionRestorationLoader/SessionRestorationLoader.tsx +40 -19
- package/src/components/Table/{__tests__/Table.test.tsx → Table.test.tsx} +94 -41
- package/src/components/Tabs/Tabs.test.tsx +10 -9
- package/src/components/Tabs/Tabs.tsx +61 -33
- package/src/components/Textarea/Textarea.test.tsx +31 -18
- package/src/components/Toast/Toast.tsx +2 -2
- package/src/components/Tooltip/Tooltip.test.tsx +1 -1
- package/src/components/UserMenu/UserMenu.test.tsx +7 -6
- package/src/components/UserMenu/UserMenu.tsx +2 -2
- package/src/components/index.ts +5 -4
- package/src/constants/performance.ts +19 -8
- package/src/hooks/__tests__/useAppConfig.unit.test.ts +21 -22
- package/src/hooks/__tests__/useEvents.unit.test.ts +5 -4
- package/src/hooks/__tests__/useOrganisationPermissions.unit.test.tsx +2 -2
- package/src/hooks/__tests__/usePermissionCache.simple.test.ts +17 -0
- package/src/hooks/__tests__/usePermissionCache.unit.test.ts +16 -11
- package/src/hooks/__tests__/usePublicEvent.simple.test.ts +1 -3
- package/src/hooks/__tests__/usePublicEvent.unit.test.ts +1 -3
- package/src/hooks/__tests__/useRBAC.unit.test.ts +24 -2
- package/src/hooks/index.ts +4 -0
- package/src/hooks/public/index.ts +2 -0
- package/src/hooks/public/usePublicEvent.ts +4 -6
- package/src/hooks/public/usePublicRouteParams.ts +1 -1
- package/src/hooks/services/useAuth.ts +2 -4
- package/src/hooks/services/useCurrentEvent.ts +1 -1
- package/src/hooks/useAppConfig.ts +1 -1
- package/src/hooks/useDataTablePerformance.ts +2 -2
- package/src/hooks/useEventTheme.ts +1 -1
- package/src/hooks/useEvents.ts +51 -10
- package/src/hooks/useOrganisationPermissions.test.ts +3 -3
- package/src/hooks/useOrganisationPermissions.ts +1 -1
- package/src/hooks/useOrganisationSecurity.ts +2 -2
- package/src/hooks/usePermissionCache.test.ts +9 -9
- package/src/hooks/usePermissionCache.ts +2 -2
- package/src/index.ts +19 -12
- package/src/providers/OrganisationProvider.tsx +73 -9
- package/src/providers/UnifiedAuthProvider.smoke.test.tsx +113 -13
- package/src/providers/__tests__/AuthProvider.test.tsx +2 -1
- package/src/providers/__tests__/EventProvider.test.tsx +24 -15
- package/src/providers/__tests__/OrganisationProvider.test.tsx +87 -36
- package/src/providers/__tests__/UnifiedAuthProvider.test.tsx +80 -24
- package/src/providers/index.ts +0 -3
- package/src/providers/services/AuthServiceProvider.tsx +2 -17
- package/src/providers/services/EventServiceProvider.tsx +11 -16
- package/src/providers/services/InactivityServiceProvider.tsx +9 -12
- package/src/providers/services/OrganisationServiceProvider.tsx +9 -12
- package/src/providers/services/UnifiedAuthProvider.tsx +85 -18
- package/src/providers/services/__tests__/AuthServiceProvider.integration.test.tsx +11 -4
- package/src/rbac/__tests__/scenarios.user-role.test.tsx +105 -21
- package/src/rbac/adapters.tsx +1 -1
- package/src/rbac/api.ts +20 -4
- package/src/rbac/audit-enhanced.ts +47 -2
- package/src/rbac/audit.ts +47 -2
- package/src/rbac/components/NavigationGuard.tsx +1 -1
- package/src/rbac/components/NavigationProvider.test.tsx +7 -6
- package/src/rbac/components/NavigationProvider.tsx +1 -1
- package/src/rbac/components/PagePermissionGuard.tsx +1 -1
- package/src/rbac/components/PagePermissionProvider.test.tsx +7 -6
- package/src/rbac/components/PagePermissionProvider.tsx +1 -1
- package/src/rbac/components/PermissionEnforcer.tsx +1 -1
- package/src/rbac/components/RoleBasedRouter.tsx +1 -1
- package/src/rbac/components/SecureDataProvider.test.tsx +7 -6
- package/src/rbac/components/SecureDataProvider.tsx +1 -1
- package/src/rbac/components/__tests__/EnhancedNavigationMenu.test.tsx +6 -6
- package/src/rbac/components/__tests__/NavigationGuard.test.tsx +11 -10
- package/src/rbac/components/__tests__/NavigationProvider.test.tsx +10 -11
- package/src/rbac/components/__tests__/PagePermissionGuard.race-condition.test.tsx +19 -15
- package/src/rbac/components/__tests__/PagePermissionGuard.test.tsx +13 -12
- package/src/rbac/components/__tests__/PagePermissionGuard.verification.test.tsx +19 -15
- package/src/rbac/components/__tests__/PagePermissionProvider.test.tsx +18 -18
- package/src/rbac/components/__tests__/PermissionEnforcer.test.tsx +11 -10
- package/src/rbac/components/__tests__/RoleBasedRouter.test.tsx +8 -7
- package/src/rbac/components/__tests__/SecureDataProvider.fixed.test.tsx +10 -11
- package/src/rbac/components/__tests__/SecureDataProvider.test.tsx +48 -19
- package/src/rbac/hooks/__tests__/useSecureSupabase.test.ts +476 -0
- package/src/rbac/hooks/index.ts +3 -0
- package/src/rbac/hooks/usePermissions.ts +31 -85
- package/src/rbac/hooks/useRBAC.test.ts +13 -1
- package/src/rbac/hooks/useRBAC.ts +13 -67
- package/src/rbac/hooks/useResolvedScope.ts +11 -0
- package/src/rbac/hooks/useSecureSupabase.ts +308 -0
- package/src/rbac/index.ts +3 -0
- package/src/rbac/secureClient.ts +53 -6
- package/src/rbac/security.ts +37 -1
- package/src/{types/rbac-functions.ts → rbac/types/functions.ts} +30 -30
- package/src/rbac/types.ts +3 -2
- package/src/services/AuthService.ts +33 -25
- package/src/services/EventService.ts +56 -44
- package/src/services/InactivityService.ts +33 -53
- package/src/services/OrganisationService.ts +36 -40
- package/src/services/__tests__/AuthService.restoreSession.test.ts +6 -2
- package/src/services/__tests__/EventService.test.ts +67 -33
- package/src/services/interfaces/IEventService.ts +1 -1
- package/src/styles/core.css +2 -2
- package/src/styles/index.ts +1 -5
- package/src/types/__tests__/guards.test.ts +1 -1
- package/src/types/__tests__/type-validation.test.ts +0 -1
- package/src/types/auth.ts +42 -2
- package/src/types/core.ts +251 -0
- package/src/types/database.ts +11 -496
- package/src/types/event.ts +102 -0
- package/src/types/file-reference.ts +6 -4
- package/src/types/guards.ts +2 -1
- package/src/types/index.ts +48 -14
- package/src/types/lodash.debounce.d.ts +15 -0
- package/src/types/organisation.ts +14 -10
- package/src/types/supabase.ts +15 -17
- package/src/utils/__tests__/secureErrors.unit.test.ts +1 -1
- package/src/utils/__tests__/validationUtils.unit.test.ts +0 -29
- package/src/utils/app/appNameResolver.ts +1 -1
- package/src/utils/dynamic/dynamicUtils.ts +3 -2
- package/src/utils/file-reference/index.ts +25 -6
- package/src/utils/security/secureErrors.ts +1 -1
- package/src/utils/validation/index.ts +6 -12
- package/src/utils/validation/validationUtils.ts +0 -13
- package/dist/UnifiedAuthProvider-B37ATQHE.js +0 -16
- package/dist/auth-DReDSLq9.d.ts +0 -16
- package/dist/chunk-3JI76CYK.js +0 -2444
- package/dist/chunk-3JI76CYK.js.map +0 -1
- package/dist/chunk-56XJ3TU6.js +0 -11
- package/dist/chunk-56XJ3TU6.js.map +0 -1
- package/dist/chunk-5MT24GKJ.js.map +0 -1
- package/dist/chunk-7QCC6MCP.js +0 -288
- package/dist/chunk-BESYRHQM.js.map +0 -1
- package/dist/chunk-BJPBT3CU.js +0 -21
- package/dist/chunk-BJPBT3CU.js.map +0 -1
- package/dist/chunk-BVYWGZVV.js.map +0 -1
- package/dist/chunk-CX5M4ZAG.js.map +0 -1
- package/dist/chunk-D7LCGMVS.js.map +0 -1
- package/dist/chunk-EGI6MUL6.js +0 -27
- package/dist/chunk-EGI6MUL6.js.map +0 -1
- package/dist/chunk-ERISIBYU.js.map +0 -1
- package/dist/chunk-HRO5HWN2.js.map +0 -1
- package/dist/chunk-HZLDFOE4.js.map +0 -1
- package/dist/chunk-JISYG63F.js +0 -70
- package/dist/chunk-JISYG63F.js.map +0 -1
- package/dist/chunk-LIMSTKYD.js +0 -61
- package/dist/chunk-LIMSTKYD.js.map +0 -1
- package/dist/chunk-OWAG3GSU.js.map +0 -1
- package/dist/chunk-PPMP5J6T.js.map +0 -1
- package/dist/chunk-Q5QRDWKI.js.map +0 -1
- package/dist/chunk-S5OFRT4M.js.map +0 -1
- package/dist/chunk-SBVILCCA.js.map +0 -1
- package/dist/chunk-TUMEWN34.js +0 -15
- package/dist/chunk-TUMEWN34.js.map +0 -1
- package/dist/chunk-XDNLUEXI.js +0 -138
- package/dist/chunk-XJ2HZOBU.js.map +0 -1
- package/dist/chunk-ZYTYSTO5.js.map +0 -1
- package/dist/chunk-ZZ2SS7NI.js +0 -237
- package/dist/chunk-ZZ2SS7NI.js.map +0 -1
- package/dist/database-C6jy7EOu.d.ts +0 -500
- package/dist/organisation-D6qRDtbF.d.ts +0 -93
- package/dist/schema-DTDZQe2u.d.ts +0 -28
- package/dist/unified-DQ4VcT7H.d.ts +0 -198
- package/dist/useInactivityTracker-TO6ZOF35.js +0 -11
- package/dist/validation.d.ts +0 -47
- package/dist/validation.js +0 -24
- package/dist/validation.js.map +0 -1
- package/docs/DOCUMENTATION_AUDIT.md +0 -172
- package/docs/DOCUMENTATION_STANDARD.md +0 -137
- package/docs/api/classes/PublicErrorBoundary.md +0 -132
- package/docs/api/interfaces/EventLogoProps.md +0 -152
- package/docs/api/interfaces/PublicErrorBoundaryProps.md +0 -94
- package/docs/api/interfaces/PublicErrorBoundaryState.md +0 -68
- package/docs/api/interfaces/PublicLoadingSpinnerProps.md +0 -86
- package/docs/architecture/rpc-function-standards.md +0 -1106
- package/docs/getting-started/consuming-app-vite-config.md +0 -239
- package/docs/implementation-guides/event-theming-summary.md +0 -226
- package/docs/implementation-guides/public-pages-advanced.md +0 -1038
- package/docs/migration/v0.4.15-tailwind-scanning.md +0 -278
- package/docs/migration/v0.4.16-css-first-approach.md +0 -312
- package/docs/migration/v0.4.17-source-path-fix.md +0 -235
- package/docs/rbac/RBAC_EVENT_CONTEXT_LOADING.md +0 -222
- package/docs/rbac/RBAC_LOGIN_SAFETY_FIX.md +0 -95
- package/docs/rbac/RBAC_V0.5.147_FIX.md +0 -117
- package/docs/rbac/README-rbac-rls-integration.md +0 -374
- package/docs/styles/usage.md +0 -227
- package/docs/testing/visual-testing.md +0 -120
- package/docs/troubleshooting/DEBUG_NETWORK_ERROR.md +0 -152
- package/docs/troubleshooting/FIX_SUPABASE_CORS.md +0 -184
- package/docs/troubleshooting/cake-page-permission-guard-issue-summary.md +0 -193
- package/docs/troubleshooting/database-view-compatibility.md +0 -125
- package/docs/troubleshooting/react-hooks-issue-analysis.md +0 -172
- package/docs/troubleshooting/tailwind-content-scanning.md +0 -219
- package/examples/RBAC/EventBasedApp.tsx +0 -239
- package/examples/RBAC/PermissionExample.tsx +0 -151
- package/examples/STRUCTURE.md +0 -125
- package/examples/components 2/DataTable/HierarchicalExample.tsx +0 -475
- package/examples/components 2/Dialog/BasicHtmlTest.tsx +0 -55
- package/examples/components 2/Dialog/DebugHtmlExample.tsx +0 -68
- package/examples/components 2/Dialog/HtmlDialogExample.tsx +0 -202
- package/examples/components 2/Dialog/SimpleHtmlTest.tsx +0 -61
- package/examples/components 2/Dialog/SmartDialogExample.tsx +0 -322
- package/examples/components 2/index.ts +0 -11
- package/examples/features/index.ts +0 -12
- package/examples/features/rbac/CompleteRBACExample.tsx +0 -324
- package/examples/features/rbac/index.ts +0 -13
- package/examples/public-pages/CorrectPublicPageImplementation.tsx +0 -301
- package/examples/public-pages/PublicEventPage.tsx +0 -274
- package/examples/public-pages/PublicPageApp.tsx +0 -308
- package/examples/public-pages/PublicPageUsageExample.tsx +0 -216
- package/examples/public-pages/index.ts +0 -14
- package/src/__tests__/TEST_STANDARD.md +0 -1008
- package/src/components/Checkbox/__mocks__/Checkbox.tsx +0 -2
- package/src/components/DataTable/examples/HierarchicalActionsExample.tsx +0 -421
- package/src/components/DataTable/examples/InitialPageSizeExample.tsx +0 -177
- package/src/components/DataTable/examples/PerformanceExample.tsx +0 -506
- package/src/components/DataTable/examples/__tests__/HierarchicalActionsExample.test.tsx +0 -316
- package/src/components/DataTable/examples/__tests__/HierarchicalExample.test.tsx +0 -45
- package/src/components/DataTable/examples/__tests__/InitialPageSizeExample.test.tsx +0 -211
- package/src/components/DataTable/examples/__tests__/PerformanceExample.test.tsx +0 -126
- package/src/components/Dialog/README.md +0 -804
- package/src/components/Dialog/examples/BasicHtmlTest.tsx +0 -55
- package/src/components/Dialog/examples/DebugHtmlExample.tsx +0 -68
- package/src/components/Dialog/examples/ScrollableDialogExample.tsx +0 -290
- package/src/components/Dialog/examples/SimpleHtmlTest.tsx +0 -61
- package/src/components/Dialog/examples/__tests__/HtmlDialogExample.test.tsx +0 -71
- package/src/components/Dialog/examples/__tests__/SimpleHtmlTest.test.tsx +0 -122
- package/src/components/Dialog/examples/__tests__/SmartDialogExample.unit.test.tsx +0 -147
- package/src/components/Dialog/utils/__tests__/safeHtml.unit.test.ts +0 -611
- package/src/components/Dialog/utils/safeHtml.ts +0 -185
- package/src/components/EventSelector/types.ts +0 -79
- package/src/components/Form/FormErrorSummary.tsx +0 -113
- package/src/components/Form/FormField.tsx +0 -249
- package/src/components/Form/FormFieldset.tsx +0 -127
- package/src/components/Form/FormLiveRegion.tsx +0 -198
- package/src/components/Input/__mocks__/Input.tsx +0 -2
- package/src/components/NavigationMenu/types.ts +0 -85
- package/src/components/PaceAppLayout/__tests__/PaceAppLayout.accessibility.test.tsx +0 -326
- package/src/components/PaceAppLayout/__tests__/PaceAppLayout.unit.test.tsx +0 -1078
- package/src/components/PasswordReset/PasswordResetForm.test.tsx +0 -597
- package/src/components/PasswordReset/PasswordResetForm.tsx +0 -201
- package/src/components/PasswordReset/index.ts +0 -2
- package/src/components/ProtectedRoute/README.md +0 -164
- package/src/components/PublicLayout/EventLogo.tsx +0 -175
- package/src/components/PublicLayout/PublicErrorBoundary.tsx +0 -282
- package/src/components/PublicLayout/PublicLoadingSpinner.tsx +0 -216
- package/src/components/PublicLayout/PublicPageContextChecker.tsx +0 -131
- package/src/components/PublicLayout/PublicPageDebugger.tsx +0 -104
- package/src/components/PublicLayout/PublicPageDiagnostic.tsx +0 -162
- package/src/components/PublicLayout/PublicPageFooter.tsx +0 -124
- package/src/components/PublicLayout/PublicPageHeader.tsx +0 -209
- package/src/components/PublicLayout/__tests__/PublicErrorBoundary.test.tsx +0 -449
- package/src/components/PublicLayout/__tests__/PublicLoadingSpinner.test.tsx +0 -393
- package/src/components/PublicLayout/__tests__/PublicPageContextChecker.test.tsx +0 -192
- package/src/components/PublicLayout/__tests__/PublicPageFooter.test.tsx +0 -351
- package/src/components/PublicLayout/__tests__/PublicPageHeader.test.tsx +0 -402
- package/src/components/PublicLayout/__tests__/PublicPageLayout.test.tsx +0 -460
- package/src/components/PublicLayout/__tests__/PublicPageProvider.test.tsx +0 -313
- package/src/components/Select/hooks.ts +0 -289
- package/src/hooks/useCounter.test.ts +0 -131
- package/src/hooks/useDebounce.test.ts +0 -375
- package/src/providers/AuthProvider.tsx +0 -15
- package/src/providers/EventProvider.tsx +0 -16
- package/src/providers/InactivityProvider.tsx +0 -15
- package/src/providers/OrganisationProvider.context.test.tsx +0 -169
- package/src/providers/UnifiedAuthProvider.tsx +0 -15
- package/src/types/theme.ts +0 -6
- package/src/types/unified.ts +0 -265
- package/src/utils/appConfig.ts +0 -47
- package/src/utils/appIdResolver.test.ts +0 -499
- package/src/utils/appIdResolver.ts +0 -130
- package/src/utils/appNameResolver.simple.test.ts +0 -212
- package/src/utils/appNameResolver.test.ts +0 -121
- package/src/utils/appNameResolver.ts +0 -191
- package/src/utils/audit.ts +0 -127
- package/src/utils/auth-utils.ts +0 -96
- package/src/utils/bundleAnalysis.ts +0 -129
- package/src/utils/debugLogger.ts +0 -67
- package/src/utils/deviceFingerprint.ts +0 -215
- package/src/utils/dynamicUtils.ts +0 -105
- package/src/utils/file-reference.test.ts +0 -788
- package/src/utils/file-reference.ts +0 -519
- package/src/utils/formatDate.test.ts +0 -237
- package/src/utils/formatting.ts +0 -170
- package/src/utils/lazyLoad.tsx +0 -44
- package/src/utils/logger.ts +0 -179
- package/src/utils/organisationContext.test.ts +0 -322
- package/src/utils/organisationContext.ts +0 -153
- package/src/utils/performanceBenchmark.ts +0 -64
- package/src/utils/performanceBudgets.ts +0 -110
- package/src/utils/permissionTypes.ts +0 -37
- package/src/utils/permissionUtils.test.ts +0 -393
- package/src/utils/permissionUtils.ts +0 -34
- package/src/utils/sanitization.ts +0 -264
- package/src/utils/schemaUtils.ts +0 -37
- package/src/utils/secureDataAccess.test.ts +0 -711
- package/src/utils/secureDataAccess.ts +0 -377
- package/src/utils/secureErrors.ts +0 -79
- package/src/utils/security.ts +0 -156
- package/src/utils/securityMonitor.ts +0 -45
- package/src/utils/sessionTracking.ts +0 -126
- package/src/utils/validation.ts +0 -111
- package/src/utils/validationUtils.ts +0 -120
- package/src/validation/index.ts +0 -12
- /package/dist/{DataTable-UA6CL4JI.js.map → DataTable-QAB34V6K.js.map} +0 -0
- /package/dist/{UnifiedAuthProvider-B37ATQHE.js.map → UnifiedAuthProvider-7F6T4B6K.js.map} +0 -0
- /package/dist/{api-45XYYO2A.js.map → api-ROMBCNKU.js.map} +0 -0
- /package/dist/{audit-64X3VJXB.js.map → audit-WRS3KJKI.js.map} +0 -0
- /package/dist/{chunk-PLDDJCW6.js.map → chunk-7D4SUZUM.js.map} +0 -0
- /package/dist/{useInactivityTracker-TO6ZOF35.js.map → chunk-KQCRWDSA.js.map} +0 -0
- /package/examples/{components 2/DataTable → DataTable}/InitialPageSizeExample.tsx +0 -0
- /package/examples/{features/public-pages → PublicPages}/index.ts +0 -0
- /package/examples/{RBAC → rbac}/index.ts +0 -0
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
|
-
lastUpdated: 2025-
|
|
3
|
-
version: 0.5.
|
|
4
|
-
reviewedBy:
|
|
2
|
+
lastUpdated: 2025-11-18T21:00:00+11:00
|
|
3
|
+
version: 0.5.181
|
|
4
|
+
reviewedBy: documentation-standards-audit
|
|
5
5
|
---
|
|
6
6
|
|
|
7
7
|
# RBAC Migration Guide
|
|
@@ -684,3 +684,59 @@ const hasPermissionSecure = await isPermitted({
|
|
|
684
684
|
- **Automatic input sanitization** prevents injection attacks
|
|
685
685
|
|
|
686
686
|
The new RBAC system provides a more robust, performant, and secure foundation for your application's permission management.
|
|
687
|
+
|
|
688
|
+
## ♿ Accessibility
|
|
689
|
+
|
|
690
|
+
RBAC migration should maintain accessibility:
|
|
691
|
+
|
|
692
|
+
- **Accessibility testing after migration** - Verify all permission-guarded components remain accessible after migration
|
|
693
|
+
- **Screen reader compatibility** - Test with assistive technologies after migration
|
|
694
|
+
- **Keyboard navigation** - Ensure keyboard navigation still works after migration
|
|
695
|
+
- **Focus management** - Verify focus management is correct after migration
|
|
696
|
+
- **Permission announcements** - Ensure permission changes are properly announced
|
|
697
|
+
|
|
698
|
+
### Accessibility Best Practices
|
|
699
|
+
|
|
700
|
+
1. **Test accessibility after migration** - Run accessibility tests after each migration step
|
|
701
|
+
2. **Verify keyboard navigation** - Ensure all permission-guarded elements remain keyboard accessible
|
|
702
|
+
3. **Test with screen readers** - Verify permission checks work with assistive technologies
|
|
703
|
+
4. **Check focus indicators** - Ensure focus indicators are visible and correct
|
|
704
|
+
5. **Announce permission changes** - Use ARIA live regions for permission state changes
|
|
705
|
+
|
|
706
|
+
## ⚠️ Edge Cases
|
|
707
|
+
|
|
708
|
+
### Permission Check Failures
|
|
709
|
+
|
|
710
|
+
When permission checks fail after migration:
|
|
711
|
+
- Verify RLS policies are correctly configured
|
|
712
|
+
- Check organisation context is properly set
|
|
713
|
+
- Ensure user has required roles assigned
|
|
714
|
+
- Review permission string format
|
|
715
|
+
- Test with different user roles
|
|
716
|
+
|
|
717
|
+
### Migration Incomplete
|
|
718
|
+
|
|
719
|
+
When migration is only partially complete:
|
|
720
|
+
- Document what was migrated and what wasn't
|
|
721
|
+
- Create remediation plan for remaining items
|
|
722
|
+
- Test partially migrated code thoroughly
|
|
723
|
+
- Set timeline for completing migration
|
|
724
|
+
- Monitor for issues in partially migrated code
|
|
725
|
+
|
|
726
|
+
### Performance Issues After Migration
|
|
727
|
+
|
|
728
|
+
When performance degrades after migration:
|
|
729
|
+
- Check for unnecessary permission checks
|
|
730
|
+
- Review caching configuration
|
|
731
|
+
- Verify batch operations are used where appropriate
|
|
732
|
+
- Test with performance profiling tools
|
|
733
|
+
- Consider using permission memoization
|
|
734
|
+
|
|
735
|
+
### Role Assignment Issues
|
|
736
|
+
|
|
737
|
+
When role assignments don't work correctly:
|
|
738
|
+
- Verify database roles are correctly assigned
|
|
739
|
+
- Check organisation context is properly set
|
|
740
|
+
- Review role assignment process
|
|
741
|
+
- Test with different role combinations
|
|
742
|
+
- Verify super admin permissions work correctly
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
|
-
lastUpdated: 2025-
|
|
3
|
-
version: 0.5.
|
|
4
|
-
reviewedBy:
|
|
2
|
+
lastUpdated: 2025-11-18T21:00:00+11:00
|
|
3
|
+
version: 0.5.181
|
|
4
|
+
reviewedBy: documentation-standards-audit
|
|
5
5
|
---
|
|
6
6
|
|
|
7
7
|
# Provider Architecture: Service-Based Design
|
|
@@ -58,11 +58,26 @@ function MyComponent() {
|
|
|
58
58
|
|
|
59
59
|
## Service Architecture Overview
|
|
60
60
|
|
|
61
|
-
###
|
|
61
|
+
### Three-Layer Architecture
|
|
62
62
|
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
63
|
+
The service architecture follows a clear three-layer pattern:
|
|
64
|
+
|
|
65
|
+
1. **Service Layer** (`src/services/`) - Pure TypeScript classes containing business logic
|
|
66
|
+
- No React dependencies
|
|
67
|
+
- Observable pattern for state changes
|
|
68
|
+
- Easy to unit test
|
|
69
|
+
|
|
70
|
+
2. **Provider Layer** (`src/providers/services/`) - React context providers that create service instances
|
|
71
|
+
- Creates and manages service instances (singleton pattern)
|
|
72
|
+
- Provides services via React context
|
|
73
|
+
- Handles service lifecycle
|
|
74
|
+
- **Note**: Providers do NOT export hooks
|
|
75
|
+
|
|
76
|
+
3. **Hook Layer** (`src/hooks/services/`) - React hooks for reactive component integration
|
|
77
|
+
- Access services from context
|
|
78
|
+
- Subscribe to service state changes
|
|
79
|
+
- Trigger React re-renders when state changes
|
|
80
|
+
- **⚠️ Always import hooks from here, not from providers**
|
|
66
81
|
|
|
67
82
|
### Service Layer
|
|
68
83
|
|
|
@@ -123,28 +138,31 @@ function MyComponent() {
|
|
|
123
138
|
}
|
|
124
139
|
```
|
|
125
140
|
|
|
126
|
-
### Individual Hooks (For Performance)
|
|
141
|
+
### Individual Service Hooks (For Performance)
|
|
127
142
|
|
|
128
|
-
For better performance, use individual hooks:
|
|
143
|
+
For better performance, use individual service hooks:
|
|
129
144
|
|
|
130
145
|
```tsx
|
|
131
146
|
import {
|
|
132
147
|
useEvents,
|
|
133
148
|
useOrganisations,
|
|
134
149
|
useAuthService,
|
|
135
|
-
|
|
150
|
+
useEventService,
|
|
151
|
+
useOrganisationService
|
|
136
152
|
} from '@jmruthers/pace-core';
|
|
137
153
|
|
|
138
154
|
function MyComponent() {
|
|
139
|
-
const events = useEvents();
|
|
140
|
-
const orgs = useOrganisations();
|
|
141
|
-
const
|
|
142
|
-
const
|
|
155
|
+
const events = useEvents(); // Convenience hook
|
|
156
|
+
const orgs = useOrganisations(); // Convenience hook
|
|
157
|
+
const authService = useAuthService(); // Direct service hook
|
|
158
|
+
const eventService = useEventService(); // Direct service hook
|
|
143
159
|
|
|
144
160
|
// Only re-renders when relevant service state changes
|
|
145
161
|
}
|
|
146
162
|
```
|
|
147
163
|
|
|
164
|
+
**Important**: Service hooks (like `useAuthService`, `useEventService`) are exported from `hooks/services/` and include state subscription logic. Always import them from the main package or `hooks/services/`, never from `providers/services/`.
|
|
165
|
+
|
|
148
166
|
## Testing
|
|
149
167
|
|
|
150
168
|
### Testing Services
|
|
@@ -216,3 +234,48 @@ Add the required inactivity management props:
|
|
|
216
234
|
- [API Reference](../../api-reference/providers.md)
|
|
217
235
|
- [Architecture Documentation](../../architecture/services.md)
|
|
218
236
|
- [Example Apps](../../getting-started/examples/)
|
|
237
|
+
|
|
238
|
+
## ♿ Accessibility
|
|
239
|
+
|
|
240
|
+
Service architecture migration should maintain accessibility:
|
|
241
|
+
|
|
242
|
+
- **Accessibility testing after migration** - Verify all components remain accessible after migration
|
|
243
|
+
- **Screen reader compatibility** - Test with assistive technologies after migration
|
|
244
|
+
- **Keyboard navigation** - Ensure keyboard navigation still works after migration
|
|
245
|
+
- **Focus management** - Verify focus management is correct after migration
|
|
246
|
+
|
|
247
|
+
### Accessibility Best Practices
|
|
248
|
+
|
|
249
|
+
1. **Test accessibility after migration** - Run accessibility tests after each migration step
|
|
250
|
+
2. **Verify keyboard navigation** - Ensure all interactive elements remain keyboard accessible
|
|
251
|
+
3. **Test with screen readers** - Verify components work with assistive technologies
|
|
252
|
+
4. **Check focus indicators** - Ensure focus indicators are visible and correct
|
|
253
|
+
|
|
254
|
+
## ⚠️ Edge Cases
|
|
255
|
+
|
|
256
|
+
### Service Initialization Failures
|
|
257
|
+
|
|
258
|
+
When services fail to initialize:
|
|
259
|
+
- Verify all required props are provided
|
|
260
|
+
- Check Supabase client is properly configured
|
|
261
|
+
- Review service dependencies
|
|
262
|
+
- Test with minimal configuration
|
|
263
|
+
- Verify environment variables are set correctly
|
|
264
|
+
|
|
265
|
+
### Service Context Not Available
|
|
266
|
+
|
|
267
|
+
When service context is not available:
|
|
268
|
+
- Verify service provider is properly mounted
|
|
269
|
+
- Check provider order and hierarchy
|
|
270
|
+
- Review service provider composition
|
|
271
|
+
- Test with service provider examples
|
|
272
|
+
- Verify hooks are called within provider context
|
|
273
|
+
|
|
274
|
+
### Performance Issues After Migration
|
|
275
|
+
|
|
276
|
+
When performance degrades after migration:
|
|
277
|
+
- Check for unnecessary re-renders
|
|
278
|
+
- Review service instance creation
|
|
279
|
+
- Verify memoization is working correctly
|
|
280
|
+
- Test with performance profiling tools
|
|
281
|
+
- Consider using individual hooks instead of unified hook
|
package/docs/rbac/README.md
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
|
-
lastUpdated: 2025-
|
|
3
|
-
version: 0.5.
|
|
4
|
-
reviewedBy:
|
|
2
|
+
lastUpdated: 2025-11-18T14:00:00+11:00
|
|
3
|
+
version: 0.5.181
|
|
4
|
+
reviewedBy: documentation-standards-audit
|
|
5
5
|
---
|
|
6
6
|
|
|
7
7
|
# RBAC System
|
|
@@ -339,6 +339,82 @@ This allows users with `org_admin` role to access `<PagePermissionGuard pageName
|
|
|
339
339
|
- **Cache Security** - Secure cache key generation
|
|
340
340
|
- **Type Safety** - Compile-time permission validation
|
|
341
341
|
|
|
342
|
+
## ♿ Accessibility
|
|
343
|
+
|
|
344
|
+
The RBAC system is designed with accessibility in mind:
|
|
345
|
+
|
|
346
|
+
- **WCAG 2.1 AA compliant** - All RBAC components meet accessibility standards
|
|
347
|
+
- **Screen Reader Support** - Permission states and errors are properly announced
|
|
348
|
+
- **Keyboard Navigation** - All permission-protected content is keyboard accessible
|
|
349
|
+
- **Focus Management** - Proper focus handling during permission checks and loading states
|
|
350
|
+
- **Error Announcements** - Permission errors are clearly communicated to assistive technologies
|
|
351
|
+
|
|
352
|
+
### Accessibility Best Practices
|
|
353
|
+
|
|
354
|
+
1. **Use semantic HTML** - Prefer semantic elements for permission-protected content
|
|
355
|
+
2. **Provide clear fallbacks** - Use descriptive fallback messages for access denied states
|
|
356
|
+
3. **Announce permission changes** - Use ARIA live regions for dynamic permission updates
|
|
357
|
+
4. **Test with screen readers** - Verify permission operations work with assistive technologies
|
|
358
|
+
5. **Ensure keyboard access** - All permission-protected content should be keyboard accessible
|
|
359
|
+
|
|
360
|
+
## ⚠️ Edge Cases
|
|
361
|
+
|
|
362
|
+
### Permission Changes During Session
|
|
363
|
+
|
|
364
|
+
When user permissions change during active session:
|
|
365
|
+
- Permission checks update automatically via cache invalidation
|
|
366
|
+
- Protected content appears/disappears dynamically
|
|
367
|
+
- No page refresh required
|
|
368
|
+
- Clear feedback explains permission changes
|
|
369
|
+
|
|
370
|
+
### Missing Permission Data
|
|
371
|
+
|
|
372
|
+
When permission data is missing or unavailable:
|
|
373
|
+
- System fails securely (denies access by default)
|
|
374
|
+
- Clear error messages explain the issue
|
|
375
|
+
- Fallback UI is shown when appropriate
|
|
376
|
+
- User-friendly error messages guide recovery
|
|
377
|
+
|
|
378
|
+
### Network Failures During Permission Checks
|
|
379
|
+
|
|
380
|
+
When network fails during permission validation:
|
|
381
|
+
- Operations fail securely (deny by default)
|
|
382
|
+
- Cached permissions may be used when available
|
|
383
|
+
- Error messages clearly explain the issue
|
|
384
|
+
- Retry mechanisms are available
|
|
385
|
+
|
|
386
|
+
### Concurrent Permission Operations
|
|
387
|
+
|
|
388
|
+
When multiple permission operations occur simultaneously:
|
|
389
|
+
- Operations are queued and processed in order
|
|
390
|
+
- Permission checks prevent conflicts
|
|
391
|
+
- Audit logging tracks all operations
|
|
392
|
+
- Data consistency is maintained
|
|
393
|
+
|
|
394
|
+
### Invalid Permission Scopes
|
|
395
|
+
|
|
396
|
+
When invalid permission scopes are provided:
|
|
397
|
+
- Validation errors are clearly displayed
|
|
398
|
+
- Operations fail gracefully
|
|
399
|
+
- No unauthorized data access
|
|
400
|
+
- User-friendly error messages guide correction
|
|
401
|
+
|
|
402
|
+
### Super Admin Bypass
|
|
403
|
+
|
|
404
|
+
When super admin bypasses permission checks:
|
|
405
|
+
- Bypass is clearly logged in audit trail
|
|
406
|
+
- UI indicates elevated privileges
|
|
407
|
+
- Security is maintained through audit logging
|
|
408
|
+
- Clear warnings indicate privilege status
|
|
409
|
+
|
|
410
|
+
### Database Connection Loss
|
|
411
|
+
|
|
412
|
+
When database connection is lost:
|
|
413
|
+
- Permission checks fail securely (deny by default)
|
|
414
|
+
- Cached permissions may be used when available
|
|
415
|
+
- Clear error messages explain the issue
|
|
416
|
+
- System recovers automatically when connection is restored
|
|
417
|
+
|
|
342
418
|
## 📚 Next Steps
|
|
343
419
|
|
|
344
420
|
- **[Quick Start Guide](./quick-start.md)** - Build your first RBAC-enabled app
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
|
-
lastUpdated: 2025-
|
|
3
|
-
version: 0.5.
|
|
4
|
-
reviewedBy:
|
|
2
|
+
lastUpdated: 2025-11-18T14:00:00+11:00
|
|
3
|
+
version: 0.5.181
|
|
4
|
+
reviewedBy: documentation-standards-audit
|
|
5
5
|
---
|
|
6
6
|
|
|
7
7
|
# Advanced RBAC Patterns
|
|
@@ -773,3 +773,47 @@ function PerformanceTrackedComponent({ userId, scope }) {
|
|
|
773
773
|
```
|
|
774
774
|
|
|
775
775
|
These advanced patterns provide powerful tools for building sophisticated permission systems while maintaining performance and security. Choose the patterns that best fit your application's needs and complexity.
|
|
776
|
+
|
|
777
|
+
## ♿ Accessibility
|
|
778
|
+
|
|
779
|
+
Advanced RBAC patterns maintain accessibility standards:
|
|
780
|
+
|
|
781
|
+
- **WCAG 2.1 AA compliant** - All advanced pattern implementations meet accessibility standards
|
|
782
|
+
- **Screen Reader Support** - Permission states and errors are properly announced
|
|
783
|
+
- **Keyboard Navigation** - All permission-protected content is keyboard accessible
|
|
784
|
+
- **Focus Management** - Proper focus handling during complex permission checks
|
|
785
|
+
- **Error Announcements** - Permission errors are clearly communicated
|
|
786
|
+
|
|
787
|
+
### Accessibility Best Practices
|
|
788
|
+
|
|
789
|
+
1. **Use semantic HTML** - Prefer semantic elements in advanced pattern implementations
|
|
790
|
+
2. **Provide clear fallbacks** - Use descriptive fallback messages for access denied
|
|
791
|
+
3. **Test with screen readers** - Verify advanced patterns work with assistive technologies
|
|
792
|
+
4. **Ensure keyboard access** - All interactive elements should be keyboard accessible
|
|
793
|
+
5. **Announce permission changes** - Use ARIA live regions for dynamic updates
|
|
794
|
+
|
|
795
|
+
## ⚠️ Edge Cases
|
|
796
|
+
|
|
797
|
+
### Performance Optimization Failures
|
|
798
|
+
|
|
799
|
+
When performance optimizations don't work:
|
|
800
|
+
- Check that caching is properly configured
|
|
801
|
+
- Verify batch operations are correctly implemented
|
|
802
|
+
- Ensure permission checks are not blocking
|
|
803
|
+
- Review performance metrics for bottlenecks
|
|
804
|
+
|
|
805
|
+
### Complex Permission Scenario Failures
|
|
806
|
+
|
|
807
|
+
When complex permission scenarios fail:
|
|
808
|
+
- Verify all permission dependencies are correctly set up
|
|
809
|
+
- Check that permission hierarchies are properly configured
|
|
810
|
+
- Ensure conditional logic handles all edge cases
|
|
811
|
+
- Review error messages for specific issues
|
|
812
|
+
|
|
813
|
+
### Custom Permission Logic Issues
|
|
814
|
+
|
|
815
|
+
When custom permission logic doesn't work:
|
|
816
|
+
- Verify custom logic is correctly implemented
|
|
817
|
+
- Check that custom logic integrates with RBAC system
|
|
818
|
+
- Ensure custom logic respects security boundaries
|
|
819
|
+
- Review error messages for specific issues
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
|
-
lastUpdated: 2025-
|
|
3
|
-
version: 0.5.
|
|
4
|
-
reviewedBy:
|
|
2
|
+
lastUpdated: 2025-11-18T14:00:00+11:00
|
|
3
|
+
version: 0.5.181
|
|
4
|
+
reviewedBy: documentation-standards-audit
|
|
5
5
|
---
|
|
6
6
|
|
|
7
7
|
# RBAC API Reference
|
|
@@ -612,24 +612,41 @@ import { createClient } from '@supabase/supabase-js';
|
|
|
612
612
|
const supabase = createClient(url, key);
|
|
613
613
|
|
|
614
614
|
// Grant organisation role
|
|
615
|
-
const { data: roleId } = await supabase.rpc('
|
|
615
|
+
const { data: roleId, error: grantError } = await supabase.rpc('rbac_role_grant', {
|
|
616
616
|
p_user_id: 'user-123',
|
|
617
617
|
p_organisation_id: 'org-456',
|
|
618
|
-
|
|
618
|
+
p_role_name: 'org_admin',
|
|
619
619
|
p_notes: 'Promoted to administrator'
|
|
620
620
|
});
|
|
621
621
|
|
|
622
|
+
if (grantError) {
|
|
623
|
+
console.error('Failed to grant role:', grantError);
|
|
624
|
+
return;
|
|
625
|
+
}
|
|
626
|
+
|
|
622
627
|
// Get user roles
|
|
623
|
-
const { data: roles } = await supabase.rpc('
|
|
624
|
-
p_user_id: 'user-123'
|
|
628
|
+
const { data: roles, error: rolesError } = await supabase.rpc('rbac_roles_list', {
|
|
629
|
+
p_user_id: 'user-123',
|
|
630
|
+
p_organisation_id: 'org-456'
|
|
625
631
|
});
|
|
626
632
|
|
|
633
|
+
if (rolesError) {
|
|
634
|
+
console.error('Failed to get roles:', rolesError);
|
|
635
|
+
return;
|
|
636
|
+
}
|
|
637
|
+
|
|
627
638
|
// Revoke role
|
|
628
|
-
const { data: success } = await supabase.rpc('
|
|
639
|
+
const { data: success, error: revokeError } = await supabase.rpc('rbac_role_revoke', {
|
|
629
640
|
p_user_id: 'user-123',
|
|
630
641
|
p_organisation_id: 'org-456',
|
|
642
|
+
p_role_name: 'org_admin',
|
|
631
643
|
p_notes: 'Role revoked'
|
|
632
644
|
});
|
|
645
|
+
|
|
646
|
+
if (revokeError) {
|
|
647
|
+
console.error('Failed to revoke role:', revokeError);
|
|
648
|
+
return;
|
|
649
|
+
}
|
|
633
650
|
```
|
|
634
651
|
|
|
635
652
|
## Core Functions
|
|
@@ -1084,3 +1101,55 @@ export async function POST(request: Request) {
|
|
|
1084
1101
|
```
|
|
1085
1102
|
|
|
1086
1103
|
For more examples and advanced usage patterns, see the [Examples Guide](./examples.md) and [Advanced Patterns](./advanced-patterns.md).
|
|
1104
|
+
|
|
1105
|
+
## ♿ Accessibility
|
|
1106
|
+
|
|
1107
|
+
All RBAC hooks and components are designed with accessibility in mind:
|
|
1108
|
+
|
|
1109
|
+
- **WCAG 2.1 AA compliant** - All components meet accessibility standards
|
|
1110
|
+
- **Screen Reader Support** - Permission states and errors are properly announced
|
|
1111
|
+
- **Keyboard Navigation** - All permission-protected content is keyboard accessible
|
|
1112
|
+
- **Focus Management** - Proper focus handling during permission checks and loading states
|
|
1113
|
+
- **Error Announcements** - Permission errors are clearly communicated to assistive technologies
|
|
1114
|
+
|
|
1115
|
+
### Accessibility Best Practices
|
|
1116
|
+
|
|
1117
|
+
1. **Use semantic HTML** - Prefer semantic elements for permission-protected content
|
|
1118
|
+
2. **Provide clear fallbacks** - Use descriptive fallback messages for access denied states
|
|
1119
|
+
3. **Announce permission changes** - Use ARIA live regions for dynamic permission updates
|
|
1120
|
+
4. **Test with screen readers** - Verify permission operations work with assistive technologies
|
|
1121
|
+
5. **Ensure keyboard access** - All permission-protected content should be keyboard accessible
|
|
1122
|
+
|
|
1123
|
+
## ⚠️ Edge Cases
|
|
1124
|
+
|
|
1125
|
+
### Permission Check Failures
|
|
1126
|
+
|
|
1127
|
+
When permission checks fail:
|
|
1128
|
+
- System fails securely (denies access by default)
|
|
1129
|
+
- Clear error messages explain the issue
|
|
1130
|
+
- Cached permissions may be used when available
|
|
1131
|
+
- Retry mechanisms are available
|
|
1132
|
+
|
|
1133
|
+
### Invalid Hook Parameters
|
|
1134
|
+
|
|
1135
|
+
When invalid parameters are provided to hooks:
|
|
1136
|
+
- Validation errors are clearly displayed
|
|
1137
|
+
- Operations fail gracefully
|
|
1138
|
+
- No unauthorized data access
|
|
1139
|
+
- User-friendly error messages guide correction
|
|
1140
|
+
|
|
1141
|
+
### Concurrent Permission Operations
|
|
1142
|
+
|
|
1143
|
+
When multiple permission operations occur simultaneously:
|
|
1144
|
+
- Operations are queued and processed in order
|
|
1145
|
+
- Permission checks prevent conflicts
|
|
1146
|
+
- Audit logging tracks all operations
|
|
1147
|
+
- Data consistency is maintained
|
|
1148
|
+
|
|
1149
|
+
### Cache Invalidation Issues
|
|
1150
|
+
|
|
1151
|
+
When cache invalidation doesn't work:
|
|
1152
|
+
- Manual cache refresh may be required
|
|
1153
|
+
- Check that cache keys are correct
|
|
1154
|
+
- Verify cache TTL settings
|
|
1155
|
+
- Review cache invalidation triggers
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
|
-
lastUpdated: 2025-
|
|
3
|
-
version: 0.5.
|
|
4
|
-
reviewedBy:
|
|
2
|
+
lastUpdated: 2025-11-18T14:00:00+11:00
|
|
3
|
+
version: 0.5.181
|
|
4
|
+
reviewedBy: documentation-standards-audit
|
|
5
5
|
---
|
|
6
6
|
|
|
7
7
|
# Event-Based Apps with RBAC
|
|
@@ -456,7 +456,7 @@ export function Dashboard() {
|
|
|
456
456
|
|
|
457
457
|
return (
|
|
458
458
|
<div className="min-h-screen bg-sec-50">
|
|
459
|
-
<nav className="bg-
|
|
459
|
+
<nav className="bg-background shadow">
|
|
460
460
|
<div className="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8">
|
|
461
461
|
<div className="flex justify-between h-16">
|
|
462
462
|
<div className="flex items-center">
|
|
@@ -545,7 +545,7 @@ export function Participants() {
|
|
|
545
545
|
|
|
546
546
|
return (
|
|
547
547
|
<div className="min-h-screen bg-sec-50">
|
|
548
|
-
<nav className="bg-
|
|
548
|
+
<nav className="bg-background shadow">
|
|
549
549
|
<div className="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8">
|
|
550
550
|
<div className="flex justify-between h-16">
|
|
551
551
|
<div className="flex items-center">
|
|
@@ -870,3 +870,48 @@ If you're still having problems after following this guide exactly:
|
|
|
870
870
|
|
|
871
871
|
This guide is designed to be foolproof - if you follow it exactly, your event-based RBAC system will work correctly.
|
|
872
872
|
|
|
873
|
+
## ♿ Accessibility
|
|
874
|
+
|
|
875
|
+
The event-based RBAC system includes accessibility features:
|
|
876
|
+
|
|
877
|
+
- **WCAG 2.1 AA compliant** - All RBAC components meet accessibility standards
|
|
878
|
+
- **Screen Reader Support** - Permission states and errors are properly announced
|
|
879
|
+
- **Keyboard Navigation** - All permission-protected content is keyboard accessible
|
|
880
|
+
- **Focus Management** - Proper focus handling during permission checks
|
|
881
|
+
- **Error Announcements** - Permission errors are clearly communicated
|
|
882
|
+
|
|
883
|
+
### Accessibility Best Practices
|
|
884
|
+
|
|
885
|
+
1. **Use semantic HTML** - Prefer semantic elements in your components
|
|
886
|
+
2. **Provide clear fallbacks** - Use descriptive fallback messages for access denied
|
|
887
|
+
3. **Test with screen readers** - Verify your app works with assistive technologies
|
|
888
|
+
4. **Ensure keyboard access** - All interactive elements should be keyboard accessible
|
|
889
|
+
5. **Announce permission changes** - Use ARIA live regions for dynamic updates
|
|
890
|
+
|
|
891
|
+
## ⚠️ Edge Cases
|
|
892
|
+
|
|
893
|
+
### Event Selection Failures
|
|
894
|
+
|
|
895
|
+
When event selection fails:
|
|
896
|
+
- Verify event exists and belongs to organisation
|
|
897
|
+
- Check that user has access to the event
|
|
898
|
+
- Ensure event context is properly set
|
|
899
|
+
- Review error messages for specific issues
|
|
900
|
+
|
|
901
|
+
### Organisation Resolution Issues
|
|
902
|
+
|
|
903
|
+
When organisation can't be resolved from event:
|
|
904
|
+
- Verify event has correct organisation_id
|
|
905
|
+
- Check that organisation exists and is active
|
|
906
|
+
- Ensure user has access to the organisation
|
|
907
|
+
- Review event-organisation relationship
|
|
908
|
+
|
|
909
|
+
### Permission Check Failures
|
|
910
|
+
|
|
911
|
+
When permission checks fail:
|
|
912
|
+
- Verify `setupRBAC()` was called before using RBAC
|
|
913
|
+
- Check that app name matches exactly (case-sensitive)
|
|
914
|
+
- Ensure user has organisation role assigned
|
|
915
|
+
- Verify page permissions exist in database
|
|
916
|
+
- Confirm event is selected in context
|
|
917
|
+
|
package/docs/rbac/examples.md
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
|
-
lastUpdated: 2025-
|
|
3
|
-
version: 0.5.
|
|
4
|
-
reviewedBy:
|
|
2
|
+
lastUpdated: 2025-11-18T14:00:00+11:00
|
|
3
|
+
version: 0.5.181
|
|
4
|
+
reviewedBy: documentation-standards-audit
|
|
5
5
|
---
|
|
6
6
|
|
|
7
7
|
# RBAC Examples
|
|
@@ -891,3 +891,39 @@ function ContextAwareComponent({ appId }) {
|
|
|
891
891
|
```
|
|
892
892
|
|
|
893
893
|
These examples demonstrate the flexibility and power of the PACE Core RBAC system. For more advanced patterns and optimization techniques, see the [Advanced Patterns Guide](./advanced-patterns.md).
|
|
894
|
+
|
|
895
|
+
## ♿ Accessibility
|
|
896
|
+
|
|
897
|
+
All RBAC examples are designed with accessibility in mind:
|
|
898
|
+
|
|
899
|
+
- **WCAG 2.1 AA compliant** - All example components meet accessibility standards
|
|
900
|
+
- **Screen Reader Support** - Permission states and errors are properly announced
|
|
901
|
+
- **Keyboard Navigation** - All permission-protected content is keyboard accessible
|
|
902
|
+
- **Focus Management** - Proper focus handling during permission checks
|
|
903
|
+
- **Error Announcements** - Permission errors are clearly communicated
|
|
904
|
+
|
|
905
|
+
### Accessibility Best Practices
|
|
906
|
+
|
|
907
|
+
1. **Use semantic HTML** - Prefer semantic elements in your components
|
|
908
|
+
2. **Provide clear fallbacks** - Use descriptive fallback messages for access denied
|
|
909
|
+
3. **Test with screen readers** - Verify your app works with assistive technologies
|
|
910
|
+
4. **Ensure keyboard access** - All interactive elements should be keyboard accessible
|
|
911
|
+
5. **Announce permission changes** - Use ARIA live regions for dynamic updates
|
|
912
|
+
|
|
913
|
+
## ⚠️ Edge Cases
|
|
914
|
+
|
|
915
|
+
### Permission Check Failures in Examples
|
|
916
|
+
|
|
917
|
+
When permission checks fail in examples:
|
|
918
|
+
- Verify `setupRBAC()` was called before using RBAC
|
|
919
|
+
- Check that app name matches exactly (case-sensitive)
|
|
920
|
+
- Ensure user has organisation role assigned
|
|
921
|
+
- Verify page permissions exist in database
|
|
922
|
+
|
|
923
|
+
### Example Code Not Working
|
|
924
|
+
|
|
925
|
+
When example code doesn't work:
|
|
926
|
+
- Check that all required dependencies are installed
|
|
927
|
+
- Verify provider setup matches examples exactly
|
|
928
|
+
- Ensure database setup is complete
|
|
929
|
+
- Review error messages for specific issues
|