@jmruthers/pace-core 0.5.181 → 0.5.183
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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/usePublicEventLogo.test.ts +147 -0
- 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.test.ts +21 -0
- package/src/styles/index.ts +1 -5
- package/src/types/__tests__/guards.test.ts +1 -1
- package/src/types/__tests__/organisation.roles.test.ts +55 -0
- 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/audit/audit.test.ts +65 -0
- package/src/utils/device/deviceFingerprint.test.ts +171 -0
- 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/__tests__/validationUtils.test.ts +72 -0
- 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-18T14:00:00+11:00
|
|
3
|
+
version: 0.5.181
|
|
4
|
+
reviewedBy: documentation-standards-audit
|
|
5
5
|
---
|
|
6
6
|
|
|
7
7
|
# RBAC Getting Started Guide
|
|
@@ -411,7 +411,6 @@ function Navigation({ userId, organisationId }) {
|
|
|
411
411
|
<UnifiedAuthProvider
|
|
412
412
|
supabaseClient={supabase}
|
|
413
413
|
appName="your-app"
|
|
414
|
-
enableRBAC={true}
|
|
415
414
|
requireOrganisationContext={true}
|
|
416
415
|
>
|
|
417
416
|
<OrganisationProvider>
|
|
@@ -721,6 +720,66 @@ function AdaptiveComponent({ appId }) {
|
|
|
721
720
|
- [Troubleshooting](./troubleshooting.md) - Common issues and solutions
|
|
722
721
|
- [Migration Guide](../migration/rbac-migration.md) - Migrating from legacy RBAC
|
|
723
722
|
|
|
723
|
+
## ♿ Accessibility
|
|
724
|
+
|
|
725
|
+
RBAC components are designed with accessibility in mind:
|
|
726
|
+
|
|
727
|
+
- **WCAG 2.1 AA compliant** - All RBAC components meet accessibility standards
|
|
728
|
+
- **Screen Reader Support** - Permission states and errors are properly announced
|
|
729
|
+
- **Keyboard Navigation** - All permission-protected content is keyboard accessible
|
|
730
|
+
- **Focus Management** - Proper focus handling during permission checks and loading states
|
|
731
|
+
- **Error Announcements** - Permission errors are clearly communicated
|
|
732
|
+
|
|
733
|
+
### Accessibility Best Practices
|
|
734
|
+
|
|
735
|
+
1. **Use semantic HTML** - Prefer semantic elements for permission-protected content
|
|
736
|
+
2. **Provide clear fallbacks** - Use descriptive fallback messages for access denied states
|
|
737
|
+
3. **Announce permission changes** - Use ARIA live regions for dynamic permission updates
|
|
738
|
+
4. **Test with screen readers** - Verify permission operations work with assistive technologies
|
|
739
|
+
5. **Ensure keyboard access** - All permission-protected content should be keyboard accessible
|
|
740
|
+
|
|
741
|
+
## ⚠️ Edge Cases
|
|
742
|
+
|
|
743
|
+
### Permission Changes During Session
|
|
744
|
+
|
|
745
|
+
When user permissions change during active session:
|
|
746
|
+
- Permission checks update automatically via cache invalidation
|
|
747
|
+
- Protected content appears/disappears dynamically
|
|
748
|
+
- No page refresh required
|
|
749
|
+
- Clear feedback explains permission changes
|
|
750
|
+
|
|
751
|
+
### Missing Permission Data
|
|
752
|
+
|
|
753
|
+
When permission data is missing or unavailable:
|
|
754
|
+
- System fails securely (denies access by default)
|
|
755
|
+
- Clear error messages explain the issue
|
|
756
|
+
- Fallback UI is shown when appropriate
|
|
757
|
+
- User-friendly error messages guide recovery
|
|
758
|
+
|
|
759
|
+
### Network Failures During Permission Checks
|
|
760
|
+
|
|
761
|
+
When network fails during permission validation:
|
|
762
|
+
- Operations fail securely (deny by default)
|
|
763
|
+
- Cached permissions may be used when available
|
|
764
|
+
- Error messages clearly explain the issue
|
|
765
|
+
- Retry mechanisms are available
|
|
766
|
+
|
|
767
|
+
### Invalid Permission Scopes
|
|
768
|
+
|
|
769
|
+
When invalid permission scopes are provided:
|
|
770
|
+
- Validation errors are clearly displayed
|
|
771
|
+
- Operations fail gracefully
|
|
772
|
+
- No unauthorized data access
|
|
773
|
+
- User-friendly error messages guide correction
|
|
774
|
+
|
|
775
|
+
### RPC Call Timeouts
|
|
776
|
+
|
|
777
|
+
When RPC calls timeout:
|
|
778
|
+
- System fails securely (denies access by default)
|
|
779
|
+
- Clear error messages explain the timeout
|
|
780
|
+
- Retry mechanisms are available
|
|
781
|
+
- Check database connection and performance
|
|
782
|
+
|
|
724
783
|
## Need Help?
|
|
725
784
|
|
|
726
785
|
- Check the [Troubleshooting Guide](./troubleshooting.md)
|
package/docs/rbac/quick-start.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 Quick Start
|
|
@@ -432,7 +432,7 @@ export function Dashboard() {
|
|
|
432
432
|
|
|
433
433
|
return (
|
|
434
434
|
<div className="min-h-screen bg-sec-50">
|
|
435
|
-
<nav className="bg-
|
|
435
|
+
<nav className="bg-background shadow">
|
|
436
436
|
<div className="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8">
|
|
437
437
|
<div className="flex justify-between h-16">
|
|
438
438
|
<div className="flex items-center">
|
|
@@ -506,7 +506,7 @@ export function Users() {
|
|
|
506
506
|
|
|
507
507
|
return (
|
|
508
508
|
<div className="min-h-screen bg-sec-50">
|
|
509
|
-
<nav className="bg-
|
|
509
|
+
<nav className="bg-background shadow">
|
|
510
510
|
<div className="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8">
|
|
511
511
|
<div className="flex justify-between h-16">
|
|
512
512
|
<div className="flex items-center">
|
|
@@ -752,3 +752,55 @@ If you're still having problems after following this guide exactly:
|
|
|
752
752
|
4. **Check that your user has the correct roles** in the database
|
|
753
753
|
|
|
754
754
|
This guide is designed to be foolproof - if you follow it exactly, your RBAC system will work correctly.
|
|
755
|
+
|
|
756
|
+
## ♿ Accessibility
|
|
757
|
+
|
|
758
|
+
The RBAC system you've built includes accessibility features:
|
|
759
|
+
|
|
760
|
+
- **WCAG 2.1 AA compliant** - All RBAC components meet accessibility standards
|
|
761
|
+
- **Screen Reader Support** - Permission states and errors are properly announced
|
|
762
|
+
- **Keyboard Navigation** - All permission-protected content is keyboard accessible
|
|
763
|
+
- **Focus Management** - Proper focus handling during permission checks
|
|
764
|
+
- **Error Announcements** - Permission errors are clearly communicated
|
|
765
|
+
|
|
766
|
+
### Accessibility Best Practices
|
|
767
|
+
|
|
768
|
+
1. **Use semantic HTML** - Prefer semantic elements in your components
|
|
769
|
+
2. **Provide clear fallbacks** - Use descriptive fallback messages for access denied
|
|
770
|
+
3. **Test with screen readers** - Verify your app works with assistive technologies
|
|
771
|
+
4. **Ensure keyboard access** - All interactive elements should be keyboard accessible
|
|
772
|
+
5. **Announce permission changes** - Use ARIA live regions for dynamic updates
|
|
773
|
+
|
|
774
|
+
## ⚠️ Edge Cases
|
|
775
|
+
|
|
776
|
+
### Database Setup Failures
|
|
777
|
+
|
|
778
|
+
When database setup fails:
|
|
779
|
+
- Verify SQL commands are executed correctly
|
|
780
|
+
- Check that all tables exist and have correct structure
|
|
781
|
+
- Ensure user has proper database permissions
|
|
782
|
+
- Review error messages for specific issues
|
|
783
|
+
|
|
784
|
+
### Permission Check Failures
|
|
785
|
+
|
|
786
|
+
When permission checks fail:
|
|
787
|
+
- Verify `setupRBAC()` was called before using RBAC
|
|
788
|
+
- Check that app name matches exactly (case-sensitive)
|
|
789
|
+
- Ensure user has organisation role assigned
|
|
790
|
+
- Verify page permissions exist in database
|
|
791
|
+
|
|
792
|
+
### Provider Setup Issues
|
|
793
|
+
|
|
794
|
+
When providers aren't set up correctly:
|
|
795
|
+
- Verify provider order: UnifiedAuthProvider → OrganisationProvider
|
|
796
|
+
- Check that all required props are provided
|
|
797
|
+
- Ensure providers wrap all RBAC-protected content
|
|
798
|
+
- Review error messages for specific issues
|
|
799
|
+
|
|
800
|
+
### Environment Variable Issues
|
|
801
|
+
|
|
802
|
+
When environment variables are incorrect:
|
|
803
|
+
- Verify `VITE_APP_NAME` matches database app name exactly
|
|
804
|
+
- Check that Supabase URL and keys are correct
|
|
805
|
+
- Ensure environment variables are loaded before app starts
|
|
806
|
+
- Restart dev server after changing environment variables
|
|
@@ -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-RLS Integration: Dynamic Permission Enforcement
|
|
@@ -297,6 +297,28 @@ SELECT check_rbac_permission_with_context(
|
|
|
297
297
|
|
|
298
298
|
## Examples
|
|
299
299
|
|
|
300
|
+
### React Component Usage
|
|
301
|
+
|
|
302
|
+
```tsx
|
|
303
|
+
import { PagePermissionGuard } from '@jmruthers/pace-core/rbac';
|
|
304
|
+
|
|
305
|
+
function MealsPage() {
|
|
306
|
+
return (
|
|
307
|
+
<div>
|
|
308
|
+
<PagePermissionGuard
|
|
309
|
+
pageName="meals"
|
|
310
|
+
operation="delete"
|
|
311
|
+
fallback={<div>You don't have permission to delete meals</div>}
|
|
312
|
+
>
|
|
313
|
+
<button onClick={handleDeleteMeal}>
|
|
314
|
+
Delete Selected Meal
|
|
315
|
+
</button>
|
|
316
|
+
</PagePermissionGuard>
|
|
317
|
+
</div>
|
|
318
|
+
);
|
|
319
|
+
}
|
|
320
|
+
```
|
|
321
|
+
|
|
300
322
|
### Complete Table Migration
|
|
301
323
|
|
|
302
324
|
```sql
|
|
@@ -318,10 +340,10 @@ SELECT * FROM check_rbac_policy_health()
|
|
|
318
340
|
WHERE table_name = 'cake_meal';
|
|
319
341
|
```
|
|
320
342
|
|
|
321
|
-
###
|
|
343
|
+
### Database Permission Testing
|
|
322
344
|
|
|
323
345
|
```sql
|
|
324
|
-
-- Test different scenarios
|
|
346
|
+
-- Test different permission scenarios
|
|
325
347
|
SELECT
|
|
326
348
|
'planner delete meals' as test_case,
|
|
327
349
|
check_rbac_permission_with_context('delete', 'meals', 'org-uuid', 'event-123', 'CAKE') as result
|
|
@@ -335,6 +357,19 @@ SELECT
|
|
|
335
357
|
check_rbac_permission_with_context('delete', 'deliveries', 'org-uuid', 'event-123', 'CAKE');
|
|
336
358
|
```
|
|
337
359
|
|
|
360
|
+
### Dynamic Permission Changes
|
|
361
|
+
|
|
362
|
+
```sql
|
|
363
|
+
-- Change permissions in real-time
|
|
364
|
+
UPDATE rbac_page_permissions
|
|
365
|
+
SET allowed = false
|
|
366
|
+
WHERE app_page_id = 'page-meals-id'
|
|
367
|
+
AND role_name = 'planner'
|
|
368
|
+
AND operation = 'delete';
|
|
369
|
+
|
|
370
|
+
-- Policies automatically update to reflect the change!
|
|
371
|
+
```
|
|
372
|
+
|
|
338
373
|
## Monitoring and Maintenance
|
|
339
374
|
|
|
340
375
|
### Regular Health Checks
|
|
@@ -380,4 +415,31 @@ The RBAC-RLS integration provides a robust, dynamic permission enforcement syste
|
|
|
380
415
|
4. **Enables flexibility** - Organisations can configure permissions without code changes
|
|
381
416
|
5. **Ensures consistency** - RBAC and RLS are always in sync
|
|
382
417
|
|
|
383
|
-
This
|
|
418
|
+
This integration solves the fundamental disconnect between configurable RBAC permissions and hardcoded RLS policies, ensuring that:
|
|
419
|
+
- Organisations have true control over their permission systems
|
|
420
|
+
- Developers can rely on consistent behavior across all operations
|
|
421
|
+
- Users get the functionality they expect based on their assigned roles
|
|
422
|
+
- The system is maintainable and auditable with clear change tracking
|
|
423
|
+
|
|
424
|
+
This integration is not just a bug fix - it's a fundamental improvement to the pace-core architecture that will benefit all current and future applications in the suite.
|
|
425
|
+
|
|
426
|
+
## Support
|
|
427
|
+
|
|
428
|
+
### Getting Help
|
|
429
|
+
1. Check the troubleshooting section above
|
|
430
|
+
2. Review the audit log for error details
|
|
431
|
+
3. Use the SQL functions for debugging
|
|
432
|
+
4. Check the health monitoring views
|
|
433
|
+
|
|
434
|
+
### Reporting Issues
|
|
435
|
+
When reporting issues, please include:
|
|
436
|
+
- The specific error message
|
|
437
|
+
- Relevant audit log entries
|
|
438
|
+
- Health check results
|
|
439
|
+
- Steps to reproduce the issue
|
|
440
|
+
|
|
441
|
+
## Related Documentation
|
|
442
|
+
|
|
443
|
+
- **[RLS Integration Example](./examples/rbac-rls-integration-example.md)** - Practical usage examples
|
|
444
|
+
- **[API Reference](./api-reference.md)** - Complete function reference
|
|
445
|
+
- **[Troubleshooting](./troubleshooting.md)** - Common issues and solutions
|
|
@@ -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
|
# Super Admin Access Guide
|
|
@@ -582,3 +582,47 @@ Super admin access in @jmruthers/pace-core provides:
|
|
|
582
582
|
- **Comprehensive audit logging**
|
|
583
583
|
|
|
584
584
|
Use the provided hooks and components to implement super admin access in your consuming applications. This guide includes both implementation patterns and practical examples to help you get started quickly.
|
|
585
|
+
|
|
586
|
+
## ♿ Accessibility
|
|
587
|
+
|
|
588
|
+
Super admin components are designed with accessibility in mind:
|
|
589
|
+
|
|
590
|
+
- **WCAG 2.1 AA compliant** - All super admin components meet accessibility standards
|
|
591
|
+
- **Screen Reader Support** - Super admin status and actions are properly announced
|
|
592
|
+
- **Keyboard Navigation** - All super admin interfaces are keyboard accessible
|
|
593
|
+
- **Focus Management** - Proper focus handling during super admin operations
|
|
594
|
+
- **Status Indicators** - Super admin status is clearly communicated
|
|
595
|
+
|
|
596
|
+
### Accessibility Best Practices
|
|
597
|
+
|
|
598
|
+
1. **Use semantic HTML** - Prefer semantic elements for super admin interfaces
|
|
599
|
+
2. **Label super admin controls clearly** - Use descriptive labels for all super admin actions
|
|
600
|
+
3. **Announce privilege changes** - Use ARIA live regions for dynamic privilege updates
|
|
601
|
+
4. **Test with screen readers** - Verify super admin operations work with assistive technologies
|
|
602
|
+
5. **Ensure keyboard access** - All super admin actions should be keyboard accessible
|
|
603
|
+
|
|
604
|
+
## ⚠️ Edge Cases
|
|
605
|
+
|
|
606
|
+
### Super Admin Access Revocation
|
|
607
|
+
|
|
608
|
+
When super admin access is revoked:
|
|
609
|
+
- Current session may continue with elevated privileges
|
|
610
|
+
- New operations respect revoked status
|
|
611
|
+
- Audit logs track all super admin actions
|
|
612
|
+
- Clear warnings indicate privilege changes
|
|
613
|
+
|
|
614
|
+
### Concurrent Super Admin Operations
|
|
615
|
+
|
|
616
|
+
When multiple super admin operations occur simultaneously:
|
|
617
|
+
- Operations are queued and processed in order
|
|
618
|
+
- Security checks prevent conflicts
|
|
619
|
+
- Audit logging tracks all operations
|
|
620
|
+
- Data consistency is maintained
|
|
621
|
+
|
|
622
|
+
### Super Admin Bypass Failures
|
|
623
|
+
|
|
624
|
+
When super admin bypass doesn't work:
|
|
625
|
+
- Verify super admin status is correctly detected
|
|
626
|
+
- Check that bypass logic is properly implemented
|
|
627
|
+
- Ensure audit logging is working
|
|
628
|
+
- Review error messages for specific issues
|
package/docs/security/README.md
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
|
-
lastUpdated: 2025-
|
|
3
|
-
version: 0.5.
|
|
4
|
-
reviewedBy:
|
|
2
|
+
lastUpdated: 2025-11-18T18:00:00+11:00
|
|
3
|
+
version: 0.5.181
|
|
4
|
+
reviewedBy: documentation-standards-audit
|
|
5
5
|
---
|
|
6
6
|
|
|
7
7
|
# Security Guide
|
|
@@ -747,3 +747,68 @@ Conduct regular security reviews:
|
|
|
747
747
|
- **Dependency reviews** - Review third-party dependencies
|
|
748
748
|
|
|
749
749
|
This security guide provides a comprehensive overview of security considerations when using PACE Core. Always follow security best practices and stay updated with the latest security recommendations.
|
|
750
|
+
|
|
751
|
+
## ♿ Accessibility
|
|
752
|
+
|
|
753
|
+
Security implementations should maintain accessibility:
|
|
754
|
+
|
|
755
|
+
- **Security forms are keyboard accessible** - All authentication and security forms should support keyboard navigation
|
|
756
|
+
- **Error messages are accessible** - Security errors should be clearly communicated to assistive technologies
|
|
757
|
+
- **Screen reader support** - Security messages and warnings should be properly announced
|
|
758
|
+
- **Focus management** - Ensure focus is properly managed during security operations
|
|
759
|
+
- **Timeouts are announced** - Session timeouts and security warnings should be accessible
|
|
760
|
+
|
|
761
|
+
### Accessibility Best Practices
|
|
762
|
+
|
|
763
|
+
1. **Test authentication flows with screen readers** - Verify login and security flows work with assistive technologies
|
|
764
|
+
2. **Ensure keyboard access** - All security forms should be keyboard accessible
|
|
765
|
+
3. **Provide clear error messages** - Security errors should be descriptive without exposing vulnerabilities
|
|
766
|
+
4. **Announce security state changes** - Use ARIA live regions for security status updates
|
|
767
|
+
5. **Test with assistive technologies** - Verify all security features work with screen readers
|
|
768
|
+
|
|
769
|
+
## ⚠️ Edge Cases
|
|
770
|
+
|
|
771
|
+
### Security vs Usability Conflicts
|
|
772
|
+
|
|
773
|
+
When security measures impact usability:
|
|
774
|
+
- Find balance between security and user experience
|
|
775
|
+
- Provide clear guidance for security requirements
|
|
776
|
+
- Implement security transparently
|
|
777
|
+
- Test with real users to ensure usability
|
|
778
|
+
- Document security decisions
|
|
779
|
+
|
|
780
|
+
### Authentication Failures
|
|
781
|
+
|
|
782
|
+
When authentication fails:
|
|
783
|
+
- Provide clear error messages without exposing system details
|
|
784
|
+
- Handle rate limiting gracefully
|
|
785
|
+
- Ensure error messages are accessible
|
|
786
|
+
- Test with different authentication scenarios
|
|
787
|
+
- Monitor authentication failures for security threats
|
|
788
|
+
|
|
789
|
+
### Permission Check Failures
|
|
790
|
+
|
|
791
|
+
When permission checks fail:
|
|
792
|
+
- Verify RLS policies are correctly configured
|
|
793
|
+
- Check organisation context is properly set
|
|
794
|
+
- Ensure user has required roles assigned
|
|
795
|
+
- Review audit logs for permission denials
|
|
796
|
+
- Test with different user roles
|
|
797
|
+
|
|
798
|
+
### Session Management Edge Cases
|
|
799
|
+
|
|
800
|
+
When session management fails:
|
|
801
|
+
- Handle session expiration gracefully
|
|
802
|
+
- Provide clear messages for session issues
|
|
803
|
+
- Ensure proper cleanup on session end
|
|
804
|
+
- Test with multiple concurrent sessions
|
|
805
|
+
- Verify session security across devices
|
|
806
|
+
|
|
807
|
+
### Security Configuration Issues
|
|
808
|
+
|
|
809
|
+
When security configuration is incorrect:
|
|
810
|
+
- Verify environment variables are set correctly
|
|
811
|
+
- Check security policies are properly configured
|
|
812
|
+
- Ensure RLS policies are enabled
|
|
813
|
+
- Review security configuration documentation
|
|
814
|
+
- Test with minimal security configuration
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
|
-
lastUpdated: 2025-
|
|
3
|
-
version: 0.5.
|
|
4
|
-
reviewedBy:
|
|
2
|
+
lastUpdated: 2025-11-18T18:00:00+11:00
|
|
3
|
+
version: 0.5.181
|
|
4
|
+
reviewedBy: documentation-standards-audit
|
|
5
5
|
---
|
|
6
6
|
|
|
7
7
|
# Security Checklist
|
|
@@ -347,3 +347,50 @@ Comprehensive security checklist for PACE Core applications before going to prod
|
|
|
347
347
|
- **Approved By**: [Name]
|
|
348
348
|
|
|
349
349
|
Remember: **Security is everyone's responsibility!**
|
|
350
|
+
|
|
351
|
+
## ♿ Accessibility
|
|
352
|
+
|
|
353
|
+
Security checklist items should consider accessibility:
|
|
354
|
+
|
|
355
|
+
- **Security forms are keyboard accessible** - Verify all authentication forms support keyboard navigation
|
|
356
|
+
- **Error messages are accessible** - Ensure security error messages are properly announced
|
|
357
|
+
- **Screen reader support** - Verify security warnings and messages work with screen readers
|
|
358
|
+
- **Focus management** - Ensure focus is properly managed during security operations
|
|
359
|
+
- **Accessibility testing included** - Include accessibility testing in security checklist
|
|
360
|
+
|
|
361
|
+
### Accessibility Checklist Items
|
|
362
|
+
|
|
363
|
+
- [ ] All security forms are keyboard accessible
|
|
364
|
+
- [ ] Security error messages are properly announced
|
|
365
|
+
- [ ] Security warnings work with screen readers
|
|
366
|
+
- [ ] Focus management is correct during security operations
|
|
367
|
+
- [ ] Accessibility testing is included in security testing
|
|
368
|
+
|
|
369
|
+
## ⚠️ Edge Cases
|
|
370
|
+
|
|
371
|
+
### Checklist Items Not Applicable
|
|
372
|
+
|
|
373
|
+
When checklist items don't apply:
|
|
374
|
+
- Document why items are not applicable
|
|
375
|
+
- Provide alternative security measures
|
|
376
|
+
- Review with security team
|
|
377
|
+
- Update checklist for your specific use case
|
|
378
|
+
- Maintain security standards even when items don't apply
|
|
379
|
+
|
|
380
|
+
### Partial Compliance
|
|
381
|
+
|
|
382
|
+
When only partial compliance is possible:
|
|
383
|
+
- Document compliance gaps
|
|
384
|
+
- Create remediation plan
|
|
385
|
+
- Prioritize critical security items
|
|
386
|
+
- Set timeline for full compliance
|
|
387
|
+
- Monitor compliance progress
|
|
388
|
+
|
|
389
|
+
### Environment-Specific Security
|
|
390
|
+
|
|
391
|
+
When security requirements vary by environment:
|
|
392
|
+
- Document environment-specific requirements
|
|
393
|
+
- Verify security measures for each environment
|
|
394
|
+
- Test security in all environments
|
|
395
|
+
- Maintain security standards across environments
|
|
396
|
+
- Review environment-specific configurations
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
# Architecture Standard
|
|
2
|
+
|
|
3
|
+
## Purpose
|
|
4
|
+
Define the core architectural principles for pace-core so that components, APIs, RPCs, utilities, and documentation evolve consistently and sustainably.
|
|
5
|
+
|
|
6
|
+
## Principles
|
|
7
|
+
- Composition over complexity
|
|
8
|
+
- Separation of concerns
|
|
9
|
+
- Domain-agnostic
|
|
10
|
+
- Extensible, stable APIs
|
|
11
|
+
- Secure by default
|
|
12
|
+
- Performance-conscious
|
|
13
|
+
|
|
14
|
+
## Boundaries
|
|
15
|
+
### In scope
|
|
16
|
+
- UI primitives
|
|
17
|
+
- Generic hooks
|
|
18
|
+
- Shared API patterns
|
|
19
|
+
- Error-handling conventions
|
|
20
|
+
- RPC shape conventions
|
|
21
|
+
|
|
22
|
+
### Out of scope
|
|
23
|
+
- App-specific domain logic
|
|
24
|
+
- App-specific styling
|
|
25
|
+
- Business workflows
|
|
26
|
+
|
|
27
|
+
## Precedence
|
|
28
|
+
1. Security Standard
|
|
29
|
+
2. API & RPC Standard
|
|
30
|
+
3. Component Standard
|
|
31
|
+
4. Code Style Standard
|
|
32
|
+
5. Testing Standard
|
|
33
|
+
6. Documentation Standard
|
|
34
|
+
|
|
35
|
+
## Cursor Checklist
|
|
36
|
+
- Ensure changes fit boundaries
|
|
37
|
+
- Do not introduce domain logic
|
|
38
|
+
- Follow precedence ordering
|
|
39
|
+
- Prefer additive changes
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
# API & RPC Standard
|
|
2
|
+
|
|
3
|
+
## Naming
|
|
4
|
+
- `<family>_<domain>_<verb>` pattern (e.g., `data_cake_dishes_list`, `app_cake_dish_create`)
|
|
5
|
+
- `data_*` prefix for read operations (e.g., `data_file_reference_list`)
|
|
6
|
+
- `app_*` prefix for write operations (e.g., `app_cake_dish_create`)
|
|
7
|
+
- CRUD verbs only: create, read, update, delete, list, get
|
|
8
|
+
- Bulk operations use `_bulk` suffix (e.g., `app_cake_dish_create_bulk`)
|
|
9
|
+
|
|
10
|
+
## Result Shape
|
|
11
|
+
```ts
|
|
12
|
+
type ApiResult<T> =
|
|
13
|
+
| { ok: true; data: T }
|
|
14
|
+
| { ok: false; error: ApiError };
|
|
15
|
+
|
|
16
|
+
type ApiError = {
|
|
17
|
+
code: string;
|
|
18
|
+
message: string;
|
|
19
|
+
details?: object;
|
|
20
|
+
};
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
## RPC Rules
|
|
24
|
+
- Read RPCs never mutate
|
|
25
|
+
- Write RPCs should be idempotent when possible
|
|
26
|
+
- Never accept dynamic SQL
|
|
27
|
+
- Must enforce RLS + tenant boundaries
|
|
28
|
+
- Errors must be user-safe
|
|
29
|
+
|
|
30
|
+
## Deprecation Rules
|
|
31
|
+
- Mark outdated RPCs with @deprecated
|
|
32
|
+
- Retirement window: 2 stable releases
|
|
33
|
+
|
|
34
|
+
## Cursor Checklist
|
|
35
|
+
- Enforce ApiResult shape
|
|
36
|
+
- Follow naming rules
|
|
37
|
+
- Do not bypass RLS
|
|
38
|
+
- Avoid overlapping or redundant RPCs
|
|
39
|
+
- Ensure idempotency for writes
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
# Component Development Standard
|
|
2
|
+
|
|
3
|
+
## Principles
|
|
4
|
+
- Stateless when possible
|
|
5
|
+
- Composable structure
|
|
6
|
+
- Accessible by default
|
|
7
|
+
- Fully typed
|
|
8
|
+
- Small surface area
|
|
9
|
+
|
|
10
|
+
## Architecture
|
|
11
|
+
- UI primitives only
|
|
12
|
+
- Never add domain logic
|
|
13
|
+
- No data fetching inside components
|
|
14
|
+
- Support controlled + uncontrolled usage
|
|
15
|
+
|
|
16
|
+
## Accessibility Checklist
|
|
17
|
+
- Keyboard operable
|
|
18
|
+
- Correct ARIA roles
|
|
19
|
+
- Visible focus states
|
|
20
|
+
- No inaccessible interactions
|
|
21
|
+
|
|
22
|
+
## Testing Requirements
|
|
23
|
+
- Use React Testing Library
|
|
24
|
+
- Test key interactions
|
|
25
|
+
- Snapshot tests only for simple components
|
|
26
|
+
|
|
27
|
+
## Cursor Checklist
|
|
28
|
+
- Do not add domain logic
|
|
29
|
+
- Validate accessibility rules
|
|
30
|
+
- Keep components small
|
|
31
|
+
- Move non-UI logic to hooks
|
|
32
|
+
- Enforce strict typings
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
# TypeScript & Code Style Standard
|
|
2
|
+
|
|
3
|
+
## TypeScript Rules
|
|
4
|
+
- No any
|
|
5
|
+
- Prefer discriminated unions
|
|
6
|
+
- Avoid assertions unless in escape hatches
|
|
7
|
+
- Use ReadonlyArray where possible
|
|
8
|
+
- Avoid boolean mode flags
|
|
9
|
+
|
|
10
|
+
## Naming Conventions
|
|
11
|
+
- Hooks: useSomething
|
|
12
|
+
- Providers: SomethingProvider
|
|
13
|
+
- Utilities: camelCase
|
|
14
|
+
- Components: PascalCase
|
|
15
|
+
|
|
16
|
+
## Preferred Patterns
|
|
17
|
+
- Pure functions
|
|
18
|
+
- Composition over inheritance
|
|
19
|
+
- Early returns
|
|
20
|
+
- Small private helpers
|
|
21
|
+
|
|
22
|
+
## Forbidden
|
|
23
|
+
- Implicit any
|
|
24
|
+
- Bloated components
|
|
25
|
+
- Domain-specific types in pace-core
|
|
26
|
+
|
|
27
|
+
## Cursor Checklist
|
|
28
|
+
- No any / unknown / unnecessary assertions
|
|
29
|
+
- Convert flags into unions
|
|
30
|
+
- Enforce naming rules
|
|
31
|
+
- Extract large functions into helpers
|
|
32
|
+
- Prevent domain types from leaking in
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
# Security Standard
|
|
2
|
+
|
|
3
|
+
## Threat Model
|
|
4
|
+
- Multi-tenant SaaS
|
|
5
|
+
- Untrusted browser environment
|
|
6
|
+
- Supabase backend
|
|
7
|
+
- Risks: RLS gaps, injection, unsafe logging, leaking PII
|
|
8
|
+
|
|
9
|
+
## Security Rules
|
|
10
|
+
- Never bypass RLS
|
|
11
|
+
- Validate all inputs
|
|
12
|
+
- Sanitize logs
|
|
13
|
+
- Never store secrets in code
|
|
14
|
+
- Use safe error messaging
|
|
15
|
+
|
|
16
|
+
## Logging Rules
|
|
17
|
+
Allowed:
|
|
18
|
+
- IDs
|
|
19
|
+
- Non-PII metadata
|
|
20
|
+
|
|
21
|
+
Forbidden:
|
|
22
|
+
- Passwords
|
|
23
|
+
- Tokens
|
|
24
|
+
- Sensitive data
|
|
25
|
+
|
|
26
|
+
## Cursor Checklist
|
|
27
|
+
- Confirm RLS is enforced
|
|
28
|
+
- Ensure no sensitive logs
|
|
29
|
+
- Replace raw errors with ApiError
|
|
30
|
+
- Validate input shapes
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
# Testing & Documentation Standard
|
|
2
|
+
|
|
3
|
+
## Testing Strategy
|
|
4
|
+
- Unit tests for utils & hooks
|
|
5
|
+
- Integration tests for components
|
|
6
|
+
- Few meaningful E2E tests (in consuming apps)
|
|
7
|
+
- Coverage: ≥90% utils, ≥70% components
|
|
8
|
+
|
|
9
|
+
## Test Structure
|
|
10
|
+
- Colocated tests (*.test.ts/tsx)
|
|
11
|
+
- Use RTL + userEvent
|
|
12
|
+
- Avoid unnecessary mocks
|
|
13
|
+
|
|
14
|
+
## Documentation Requirements
|
|
15
|
+
- Component READMEs
|
|
16
|
+
- API docs
|
|
17
|
+
- Standards directory
|
|
18
|
+
|
|
19
|
+
## Required Sections
|
|
20
|
+
- Overview
|
|
21
|
+
- API/Props
|
|
22
|
+
- Examples
|
|
23
|
+
- A11y notes
|
|
24
|
+
- Edge cases
|
|
25
|
+
|
|
26
|
+
## Cursor Checklist
|
|
27
|
+
- Update docs after API changes
|
|
28
|
+
- Ensure tests cover critical paths
|
|
29
|
+
- Use RTL patterns only
|