@jmruthers/pace-core 0.5.180 → 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-4VSEJQ7D.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-6HLVGAZG.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-CPTUD43C.js → chunk-MI7HBHN3.js} +164 -243
- package/dist/chunk-MI7HBHN3.js.map +1 -0
- package/dist/{chunk-N5YCCUG5.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-P6UUHOIF.js → chunk-QETLRQI6.js} +526 -887
- package/dist/chunk-QETLRQI6.js.map +1 -0
- package/dist/{chunk-GQA2LIAE.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-ONI7Y733.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-R53TUSFK.js → chunk-W22JP75J.js} +5 -13
- package/dist/{chunk-R53TUSFK.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/examples/{components 2/DataTable/HierarchicalExample.tsx → 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 +57 -31
- 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-BMJAP6Z7.js +0 -16
- package/dist/auth-DReDSLq9.d.ts +0 -16
- package/dist/chunk-56XJ3TU6.js +0 -11
- package/dist/chunk-56XJ3TU6.js.map +0 -1
- package/dist/chunk-6HLVGAZG.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-CPTUD43C.js.map +0 -1
- package/dist/chunk-CX5M4ZAG.js.map +0 -1
- package/dist/chunk-ERGKJX4D.js +0 -15
- package/dist/chunk-ERGKJX4D.js.map +0 -1
- package/dist/chunk-ERISIBYU.js.map +0 -1
- package/dist/chunk-GQA2LIAE.js.map +0 -1
- package/dist/chunk-JISYG63F.js +0 -70
- package/dist/chunk-JISYG63F.js.map +0 -1
- package/dist/chunk-MSHEVJXS.js +0 -27
- package/dist/chunk-MSHEVJXS.js.map +0 -1
- package/dist/chunk-N5YCCUG5.js.map +0 -1
- package/dist/chunk-ONI7Y733.js.map +0 -1
- package/dist/chunk-OWAG3GSU.js.map +0 -1
- package/dist/chunk-P6UUHOIF.js.map +0 -1
- package/dist/chunk-PKW27QVS.js +0 -61
- package/dist/chunk-PKW27QVS.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-WM26XK7I.js +0 -2432
- package/dist/chunk-WM26XK7I.js.map +0 -1
- package/dist/chunk-XDNLUEXI.js +0 -138
- package/dist/chunk-XJ2HZOBU.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/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/HierarchicalExample.tsx +0 -475
- 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-4VSEJQ7D.js.map → DataTable-QAB34V6K.js.map} +0 -0
- /package/dist/{UnifiedAuthProvider-BMJAP6Z7.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,172 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
lastUpdated: 2025-10-29T22:43:00+11:00
|
|
3
|
-
version: 0.5.76
|
|
4
|
-
reviewedBy: content-audit
|
|
5
|
-
---
|
|
6
|
-
|
|
7
|
-
# React Hooks Issue Analysis - pace-cake Team
|
|
8
|
-
|
|
9
|
-
## 🐛 Issue Summary
|
|
10
|
-
**Error**: "Rendered more hooks than during the previous render" in MenuModal component when using DataTable from pace-core.
|
|
11
|
-
|
|
12
|
-
## 🔍 Root Cause Analysis
|
|
13
|
-
|
|
14
|
-
### ✅ **pace-core DataTable is Clean**
|
|
15
|
-
After thorough analysis of the pace-core DataTable component and related hooks, I can confirm that **this is NOT a bug in pace-core**. The DataTable component follows proper React hooks rules:
|
|
16
|
-
|
|
17
|
-
- **No early returns** before hooks
|
|
18
|
-
- **No conditional hooks** - all hooks are called unconditionally
|
|
19
|
-
- **Consistent hook order** - hooks are always called in the same sequence
|
|
20
|
-
- **Proper hook dependencies** - all hooks have stable dependencies
|
|
21
|
-
|
|
22
|
-
### ❌ **The Problem is in pace-cake's Pattern**
|
|
23
|
-
|
|
24
|
-
The consuming app is using this **problematic pattern**:
|
|
25
|
-
|
|
26
|
-
```typescript
|
|
27
|
-
// ❌ WRONG - Early return before hooks
|
|
28
|
-
export const MenuModal = ({ isOpen, onClose, unit, eventId }: MenuModalProps) => {
|
|
29
|
-
// This early return causes the hooks error
|
|
30
|
-
if (!isOpen || !unit?.unit_id || !eventId) {
|
|
31
|
-
return null;
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
const { selectedOrganisation } = useOrganisations(); // Hook called after early return
|
|
35
|
-
const { mealplans, isLoading, ... } = useMealplanData(unit.unit_id, eventId);
|
|
36
|
-
|
|
37
|
-
return <DataTable ... />;
|
|
38
|
-
};
|
|
39
|
-
```
|
|
40
|
-
|
|
41
|
-
## 🚨 **Why This Causes the Error**
|
|
42
|
-
|
|
43
|
-
1. **First render**: `isOpen = false` → early return → **0 hooks called**
|
|
44
|
-
2. **Second render**: `isOpen = true` → no early return → **2+ hooks called**
|
|
45
|
-
3. **React detects**: "Rendered more hooks than during the previous render" ❌
|
|
46
|
-
|
|
47
|
-
This violates the fundamental React hooks rule: **hooks must always be called in the same order on every render**.
|
|
48
|
-
|
|
49
|
-
## ✅ **The Correct Pattern**
|
|
50
|
-
|
|
51
|
-
```typescript
|
|
52
|
-
// ✅ CORRECT - Hooks before any conditional logic
|
|
53
|
-
export const MenuModal = ({ isOpen, onClose, unit, eventId }: MenuModalProps) => {
|
|
54
|
-
// Always call hooks first, regardless of conditions
|
|
55
|
-
const { selectedOrganisation } = useOrganisations();
|
|
56
|
-
const { mealplans, isLoading, ... } = useMealplanData(unit?.unit_id, eventId);
|
|
57
|
-
|
|
58
|
-
// Then do conditional rendering
|
|
59
|
-
if (!isOpen || !unit?.unit_id || !eventId) {
|
|
60
|
-
return null;
|
|
61
|
-
}
|
|
62
|
-
|
|
63
|
-
return (
|
|
64
|
-
<Dialog open={isOpen} onOpenChange={onClose}>
|
|
65
|
-
<DialogContent>
|
|
66
|
-
<DataTable
|
|
67
|
-
data={mealplans}
|
|
68
|
-
columns={columns}
|
|
69
|
-
// ... other props
|
|
70
|
-
/>
|
|
71
|
-
</DialogContent>
|
|
72
|
-
</Dialog>
|
|
73
|
-
);
|
|
74
|
-
};
|
|
75
|
-
```
|
|
76
|
-
|
|
77
|
-
## 🛠️ **Alternative Solutions**
|
|
78
|
-
|
|
79
|
-
### **Option 1: Conditional Hook Parameters**
|
|
80
|
-
```typescript
|
|
81
|
-
// Pass safe defaults to hooks
|
|
82
|
-
const { mealplans, isLoading } = useMealplanData(
|
|
83
|
-
unit?.unit_id || '',
|
|
84
|
-
eventId || ''
|
|
85
|
-
);
|
|
86
|
-
|
|
87
|
-
// Handle empty data in the hook or component
|
|
88
|
-
if (!unit?.unit_id || !eventId) {
|
|
89
|
-
return null;
|
|
90
|
-
}
|
|
91
|
-
```
|
|
92
|
-
|
|
93
|
-
### **Option 2: Wrapper Component Pattern**
|
|
94
|
-
```typescript
|
|
95
|
-
const MenuModalContent = ({ unit, eventId, onClose }) => {
|
|
96
|
-
// All hooks here - no early returns
|
|
97
|
-
const { selectedOrganisation } = useOrganisations();
|
|
98
|
-
const { mealplans, isLoading } = useMealplanData(unit.unit_id, eventId);
|
|
99
|
-
|
|
100
|
-
return (
|
|
101
|
-
<DialogContent>
|
|
102
|
-
<DataTable data={mealplans} columns={columns} />
|
|
103
|
-
</DialogContent>
|
|
104
|
-
);
|
|
105
|
-
};
|
|
106
|
-
|
|
107
|
-
export const MenuModal = ({ isOpen, onClose, unit, eventId }) => {
|
|
108
|
-
if (!isOpen || !unit?.unit_id || !eventId) {
|
|
109
|
-
return null;
|
|
110
|
-
}
|
|
111
|
-
|
|
112
|
-
return (
|
|
113
|
-
<Dialog open={isOpen} onOpenChange={onClose}>
|
|
114
|
-
<MenuModalContent unit={unit} eventId={eventId} onClose={onClose} />
|
|
115
|
-
</Dialog>
|
|
116
|
-
);
|
|
117
|
-
};
|
|
118
|
-
```
|
|
119
|
-
|
|
120
|
-
## 📋 **Recommended Fix for pace-cake**
|
|
121
|
-
|
|
122
|
-
**Update the MenuModal component by moving all hooks before any conditional logic:**
|
|
123
|
-
|
|
124
|
-
```typescript
|
|
125
|
-
export const MenuModal = ({ isOpen, onClose, unit, eventId }: MenuModalProps) => {
|
|
126
|
-
// ✅ Move hooks to the top - before any early returns
|
|
127
|
-
const { selectedOrganisation } = useOrganisations();
|
|
128
|
-
const { mealplans, isLoading, ... } = useMealplanData(unit?.unit_id, eventId);
|
|
129
|
-
|
|
130
|
-
// ✅ Then do conditional rendering
|
|
131
|
-
if (!isOpen || !unit?.unit_id || !eventId) {
|
|
132
|
-
return null;
|
|
133
|
-
}
|
|
134
|
-
|
|
135
|
-
return (
|
|
136
|
-
<Dialog open={isOpen} onOpenChange={onClose}>
|
|
137
|
-
<DialogContent>
|
|
138
|
-
<DataTable
|
|
139
|
-
data={mealplans}
|
|
140
|
-
columns={columns}
|
|
141
|
-
// ... other props
|
|
142
|
-
/>
|
|
143
|
-
</DialogContent>
|
|
144
|
-
</Dialog>
|
|
145
|
-
);
|
|
146
|
-
};
|
|
147
|
-
```
|
|
148
|
-
|
|
149
|
-
## 🎯 **Key Points**
|
|
150
|
-
|
|
151
|
-
- **Not a pace-core bug** - DataTable follows proper React hooks rules
|
|
152
|
-
- **Consuming app issue** - early return before hooks violates React rules
|
|
153
|
-
- **Simple fix** - move hooks before conditional logic
|
|
154
|
-
- **This is a common React pattern mistake** - not specific to DataTable
|
|
155
|
-
|
|
156
|
-
## 📚 **React Hooks Rules Reference**
|
|
157
|
-
|
|
158
|
-
1. **Only call hooks at the top level** - Don't call hooks inside loops, conditions, or nested functions
|
|
159
|
-
2. **Only call hooks from React functions** - Don't call hooks from regular JavaScript functions
|
|
160
|
-
3. **Call hooks in the same order every time** - This is what's being violated in the current code
|
|
161
|
-
|
|
162
|
-
## 🔗 **Additional Resources**
|
|
163
|
-
|
|
164
|
-
- [React Hooks Rules](https://reactjs.org/docs/hooks-rules.html)
|
|
165
|
-
- [React Hooks FAQ](https://reactjs.org/docs/hooks-faq.html)
|
|
166
|
-
- [Common Hooks Mistakes](https://reactjs.org/docs/hooks-faq.html#what-can-i-do-if-my-effect-dependencies-change-too-often)
|
|
167
|
-
|
|
168
|
-
---
|
|
169
|
-
|
|
170
|
-
**Status**: ✅ **Resolved** - This is a consuming app pattern issue, not a pace-core bug.
|
|
171
|
-
**Action Required**: Update MenuModal component to call hooks before conditional logic.
|
|
172
|
-
**Priority**: High - This is blocking feature implementation.
|
|
@@ -1,219 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
lastUpdated: 2025-10-29T22:43:00+11:00
|
|
3
|
-
version: 0.5.76
|
|
4
|
-
reviewedBy: content-audit
|
|
5
|
-
---
|
|
6
|
-
|
|
7
|
-
# Tailwind v4 Content Scanning Solutions
|
|
8
|
-
|
|
9
|
-
This guide provides comprehensive solutions for Tailwind v4 content scanning issues with pace-core components.
|
|
10
|
-
|
|
11
|
-
## 🚨 The Core Problem
|
|
12
|
-
|
|
13
|
-
Tailwind v4 needs to scan source files to detect utility classes, but published packages only contain compiled JavaScript. This results in:
|
|
14
|
-
|
|
15
|
-
- ❌ Only ~292 CSS rules instead of 987+ needed
|
|
16
|
-
- ❌ Missing component styles
|
|
17
|
-
- ❌ Severely compromised UI
|
|
18
|
-
|
|
19
|
-
## ✅ Solution 1: Use Source Files (Recommended)
|
|
20
|
-
|
|
21
|
-
Pace-core v0.4.15+ includes source files in the published package for Tailwind scanning.
|
|
22
|
-
|
|
23
|
-
### Updated Vite Configuration
|
|
24
|
-
|
|
25
|
-
```typescript
|
|
26
|
-
// vite.config.ts
|
|
27
|
-
import { defineConfig } from 'vite'
|
|
28
|
-
import react from '@vitejs/plugin-react'
|
|
29
|
-
import tailwindcss from '@tailwindcss/vite'
|
|
30
|
-
|
|
31
|
-
export default defineConfig({
|
|
32
|
-
plugins: [
|
|
33
|
-
react(),
|
|
34
|
-
tailwindcss({
|
|
35
|
-
content: [
|
|
36
|
-
// Your app's source files
|
|
37
|
-
'./src/**/*.{js,ts,jsx,tsx}',
|
|
38
|
-
// Pace-core source files (NEW)
|
|
39
|
-
'./node_modules/@jmruthers/pace-core/src/**/*.{js,ts,jsx,tsx}'
|
|
40
|
-
]
|
|
41
|
-
})
|
|
42
|
-
],
|
|
43
|
-
})
|
|
44
|
-
```
|
|
45
|
-
|
|
46
|
-
### Alternative: PostCSS Configuration
|
|
47
|
-
|
|
48
|
-
```javascript
|
|
49
|
-
// tailwind.config.js
|
|
50
|
-
/** @type {import('tailwindcss').Config} */
|
|
51
|
-
module.exports = {
|
|
52
|
-
content: [
|
|
53
|
-
'./src/**/*.{js,ts,jsx,tsx}',
|
|
54
|
-
'./node_modules/@jmruthers/pace-core/src/**/*.{js,ts,jsx,tsx}'
|
|
55
|
-
],
|
|
56
|
-
theme: {
|
|
57
|
-
extend: {},
|
|
58
|
-
},
|
|
59
|
-
plugins: [],
|
|
60
|
-
}
|
|
61
|
-
```
|
|
62
|
-
|
|
63
|
-
## ✅ Solution 2: Pre-built CSS (Fallback)
|
|
64
|
-
|
|
65
|
-
If source file scanning doesn't work, use the pre-built CSS approach:
|
|
66
|
-
|
|
67
|
-
### 1. Import Pre-built CSS
|
|
68
|
-
|
|
69
|
-
```tsx
|
|
70
|
-
// src/main.tsx
|
|
71
|
-
import '@jmruthers/pace-core/src/styles/core.css';
|
|
72
|
-
// Don't import your own Tailwind CSS
|
|
73
|
-
```
|
|
74
|
-
|
|
75
|
-
### 2. Disable Tailwind in Your App
|
|
76
|
-
|
|
77
|
-
```typescript
|
|
78
|
-
// vite.config.ts
|
|
79
|
-
import { defineConfig } from 'vite'
|
|
80
|
-
import react from '@vitejs/plugin-react'
|
|
81
|
-
// Don't include tailwindcss plugin
|
|
82
|
-
|
|
83
|
-
export default defineConfig({
|
|
84
|
-
plugins: [react()],
|
|
85
|
-
})
|
|
86
|
-
```
|
|
87
|
-
|
|
88
|
-
## ✅ Solution 3: Hybrid Approach
|
|
89
|
-
|
|
90
|
-
Use both approaches for maximum compatibility:
|
|
91
|
-
|
|
92
|
-
### 1. Vite Configuration
|
|
93
|
-
|
|
94
|
-
```typescript
|
|
95
|
-
// vite.config.ts
|
|
96
|
-
import { defineConfig } from 'vite'
|
|
97
|
-
import react from '@vitejs/plugin-react'
|
|
98
|
-
import tailwindcss from '@tailwindcss/vite'
|
|
99
|
-
|
|
100
|
-
export default defineConfig({
|
|
101
|
-
plugins: [
|
|
102
|
-
react(),
|
|
103
|
-
tailwindcss({
|
|
104
|
-
content: [
|
|
105
|
-
'./src/**/*.{js,ts,jsx,tsx}',
|
|
106
|
-
'./node_modules/@jmruthers/pace-core/src/**/*.{js,ts,jsx,tsx}',
|
|
107
|
-
// Fallback: also scan dist files
|
|
108
|
-
'./node_modules/@jmruthers/pace-core/dist/**/*.{js,ts,jsx,tsx}'
|
|
109
|
-
]
|
|
110
|
-
})
|
|
111
|
-
],
|
|
112
|
-
})
|
|
113
|
-
```
|
|
114
|
-
|
|
115
|
-
### 2. CSS Import
|
|
116
|
-
|
|
117
|
-
```tsx
|
|
118
|
-
// src/main.tsx
|
|
119
|
-
import '@jmruthers/pace-core/src/styles/core.css';
|
|
120
|
-
```
|
|
121
|
-
|
|
122
|
-
## 🔍 Verification Steps
|
|
123
|
-
|
|
124
|
-
### 1. Check CSS Output Size
|
|
125
|
-
|
|
126
|
-
After building, your CSS should be:
|
|
127
|
-
- **Expected**: 50-100+ kB (with all utility classes)
|
|
128
|
-
- **Problem**: 20-30 kB (missing classes)
|
|
129
|
-
|
|
130
|
-
### 2. Verify Component Styling
|
|
131
|
-
|
|
132
|
-
Test with a simple component:
|
|
133
|
-
|
|
134
|
-
```tsx
|
|
135
|
-
import { Button, Card } from '@jmruthers/pace-core';
|
|
136
|
-
|
|
137
|
-
function TestComponent() {
|
|
138
|
-
return (
|
|
139
|
-
<Card className="p-4">
|
|
140
|
-
<Button variant="primary" className="bg-main-600 text-main-50">
|
|
141
|
-
Test Button
|
|
142
|
-
</Button>
|
|
143
|
-
</Card>
|
|
144
|
-
);
|
|
145
|
-
}
|
|
146
|
-
```
|
|
147
|
-
|
|
148
|
-
**Expected Result**: Properly styled components with PACE Core colors and spacing.
|
|
149
|
-
|
|
150
|
-
### 3. Check Browser Dev Tools
|
|
151
|
-
|
|
152
|
-
Inspect elements to verify:
|
|
153
|
-
- ✅ `bg-main-600` class is applied
|
|
154
|
-
- ✅ `text-main-50` class is applied
|
|
155
|
-
- ✅ Component has proper padding and styling
|
|
156
|
-
|
|
157
|
-
## 🛠️ Troubleshooting
|
|
158
|
-
|
|
159
|
-
### Issue: Source files not found
|
|
160
|
-
|
|
161
|
-
**Error**: `Cannot resolve './node_modules/@jmruthers/pace-core/src/**/*.{js,ts,jsx,tsx}'`
|
|
162
|
-
|
|
163
|
-
**Solution**: Ensure you're using pace-core v0.4.15+ which includes source files.
|
|
164
|
-
|
|
165
|
-
### Issue: Still only 292 rules
|
|
166
|
-
|
|
167
|
-
**Possible Causes**:
|
|
168
|
-
1. Using old package version
|
|
169
|
-
2. Incorrect content paths
|
|
170
|
-
3. Cached build files
|
|
171
|
-
|
|
172
|
-
**Solutions**:
|
|
173
|
-
1. Update to latest pace-core: `npm install @jmruthers/pace-core@latest`
|
|
174
|
-
2. Clear node_modules and reinstall: `rm -rf node_modules package-lock.json && npm install`
|
|
175
|
-
3. Clear build cache: `rm -rf dist .vite`
|
|
176
|
-
|
|
177
|
-
### Issue: Build errors with source files
|
|
178
|
-
|
|
179
|
-
**Error**: TypeScript errors when scanning source files
|
|
180
|
-
|
|
181
|
-
**Solution**: Add TypeScript configuration for node_modules:
|
|
182
|
-
|
|
183
|
-
```json
|
|
184
|
-
// tsconfig.json
|
|
185
|
-
{
|
|
186
|
-
"compilerOptions": {
|
|
187
|
-
"skipLibCheck": true
|
|
188
|
-
},
|
|
189
|
-
"include": [
|
|
190
|
-
"src/**/*",
|
|
191
|
-
"node_modules/@jmruthers/pace-core/src/**/*"
|
|
192
|
-
]
|
|
193
|
-
}
|
|
194
|
-
```
|
|
195
|
-
|
|
196
|
-
## 📊 Expected Results
|
|
197
|
-
|
|
198
|
-
With proper configuration, you should see:
|
|
199
|
-
|
|
200
|
-
- **CSS file size**: 50-100+ kB
|
|
201
|
-
- **Utility classes**: 800+ rules
|
|
202
|
-
- **Component styling**: Full PACE Core design system
|
|
203
|
-
- **Colors working**: `bg-main-600`, `text-sec-700`, etc.
|
|
204
|
-
- **Spacing working**: `p-4`, `m-2`, `space-y-4`, etc.
|
|
205
|
-
|
|
206
|
-
## 🆘 Still Having Issues?
|
|
207
|
-
|
|
208
|
-
If none of these solutions work:
|
|
209
|
-
|
|
210
|
-
1. **Check package version**: `npm list @jmruthers/pace-core`
|
|
211
|
-
2. **Verify source files**: Check if `node_modules/@jmruthers/pace-core/src/` exists
|
|
212
|
-
3. **Try pre-built CSS**: Use Solution 2 as a fallback
|
|
213
|
-
4. **Contact support**: This may be a deeper compatibility issue
|
|
214
|
-
|
|
215
|
-
## 📚 Related Documentation
|
|
216
|
-
|
|
217
|
-
- [Installation Guide](../getting-started/installation.md)
|
|
218
|
-
- [Vite Configuration](../consuming-app-vite-config.md)
|
|
219
|
-
- [Troubleshooting Guide](./styling-issues.md)
|
|
@@ -1,239 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Event-Based App Example
|
|
3
|
-
* @package @jmruthers/pace-core
|
|
4
|
-
* @module Examples/RBAC/EventBasedApp
|
|
5
|
-
* @since 1.0.0
|
|
6
|
-
*
|
|
7
|
-
* This example demonstrates how to build an event-based app using the RBAC system.
|
|
8
|
-
*/
|
|
9
|
-
|
|
10
|
-
import React from 'react';
|
|
11
|
-
import {
|
|
12
|
-
PermissionEnforcer,
|
|
13
|
-
PagePermissionGuard,
|
|
14
|
-
NavigationGuard,
|
|
15
|
-
useCan
|
|
16
|
-
} from '../../src/rbac';
|
|
17
|
-
import { useUnifiedAuth } from '../../src/providers';
|
|
18
|
-
import type { Permission } from '../../src/rbac/types';
|
|
19
|
-
|
|
20
|
-
// Example navigation items for an event-based app
|
|
21
|
-
const navigationItems = [
|
|
22
|
-
{
|
|
23
|
-
id: 'dashboard',
|
|
24
|
-
name: 'Dashboard',
|
|
25
|
-
label: 'Dashboard',
|
|
26
|
-
path: '/event/dashboard',
|
|
27
|
-
permissions: ['read:events'] as Permission[],
|
|
28
|
-
},
|
|
29
|
-
{
|
|
30
|
-
id: 'participants',
|
|
31
|
-
name: 'Participants',
|
|
32
|
-
label: 'Participants',
|
|
33
|
-
path: '/event/participants',
|
|
34
|
-
permissions: ['read:participants'] as Permission[],
|
|
35
|
-
},
|
|
36
|
-
{
|
|
37
|
-
id: 'settings',
|
|
38
|
-
name: 'Settings',
|
|
39
|
-
label: 'Settings',
|
|
40
|
-
path: '/event/settings',
|
|
41
|
-
permissions: ['read:events', 'create:events', 'update:events', 'delete:events'] as Permission[],
|
|
42
|
-
},
|
|
43
|
-
];
|
|
44
|
-
|
|
45
|
-
// Example event dashboard component
|
|
46
|
-
function EventDashboard() {
|
|
47
|
-
const { user, selectedEventId } = useUnifiedAuth();
|
|
48
|
-
|
|
49
|
-
return (
|
|
50
|
-
<div className="event-dashboard">
|
|
51
|
-
<h1>Event Dashboard</h1>
|
|
52
|
-
<p>Event ID: {selectedEventId}</p>
|
|
53
|
-
|
|
54
|
-
{/* Example of using useCan hook with event context */}
|
|
55
|
-
<PermissionEnforcer
|
|
56
|
-
permissions={['read:events']}
|
|
57
|
-
operation="dashboard"
|
|
58
|
-
>
|
|
59
|
-
<div className="dashboard-content">
|
|
60
|
-
<h2>Event Overview</h2>
|
|
61
|
-
<p>Welcome to the event dashboard!</p>
|
|
62
|
-
</div>
|
|
63
|
-
</PermissionEnforcer>
|
|
64
|
-
|
|
65
|
-
{/* Example of conditional rendering based on permissions */}
|
|
66
|
-
<PermissionEnforcer
|
|
67
|
-
permissions={['read:events', 'create:events', 'update:events', 'delete:events']}
|
|
68
|
-
operation="event-management"
|
|
69
|
-
>
|
|
70
|
-
<div className="admin-controls">
|
|
71
|
-
<h3>Admin Controls</h3>
|
|
72
|
-
<button>Edit Event</button>
|
|
73
|
-
<button>Delete Event</button>
|
|
74
|
-
</div>
|
|
75
|
-
</PermissionEnforcer>
|
|
76
|
-
</div>
|
|
77
|
-
);
|
|
78
|
-
}
|
|
79
|
-
|
|
80
|
-
// Example participants page component
|
|
81
|
-
function ParticipantsPage() {
|
|
82
|
-
return (
|
|
83
|
-
<PagePermissionGuard
|
|
84
|
-
pageName="participants"
|
|
85
|
-
operation="read"
|
|
86
|
-
>
|
|
87
|
-
<div className="participants-page">
|
|
88
|
-
<h1>Participants</h1>
|
|
89
|
-
<p>Manage event participants here.</p>
|
|
90
|
-
|
|
91
|
-
<PermissionEnforcer
|
|
92
|
-
permissions={['create:participants']}
|
|
93
|
-
operation="add-participant"
|
|
94
|
-
>
|
|
95
|
-
<button>Add Participant</button>
|
|
96
|
-
</PermissionEnforcer>
|
|
97
|
-
|
|
98
|
-
<PermissionEnforcer
|
|
99
|
-
permissions={['delete:participants']}
|
|
100
|
-
operation="remove-participant"
|
|
101
|
-
>
|
|
102
|
-
<button>Remove Participant</button>
|
|
103
|
-
</PermissionEnforcer>
|
|
104
|
-
</div>
|
|
105
|
-
</PagePermissionGuard>
|
|
106
|
-
);
|
|
107
|
-
}
|
|
108
|
-
|
|
109
|
-
// Example settings page component
|
|
110
|
-
function SettingsPage() {
|
|
111
|
-
return (
|
|
112
|
-
<PagePermissionGuard
|
|
113
|
-
pageName="settings"
|
|
114
|
-
operation="read"
|
|
115
|
-
>
|
|
116
|
-
<div className="settings-page">
|
|
117
|
-
<h1>Event Settings</h1>
|
|
118
|
-
<p>Configure event settings here.</p>
|
|
119
|
-
|
|
120
|
-
<PermissionEnforcer
|
|
121
|
-
permissions={['update:events']}
|
|
122
|
-
operation="update-settings"
|
|
123
|
-
>
|
|
124
|
-
<form>
|
|
125
|
-
<label>
|
|
126
|
-
Event Name:
|
|
127
|
-
<input type="text" />
|
|
128
|
-
</label>
|
|
129
|
-
<button type="submit">Save Changes</button>
|
|
130
|
-
</form>
|
|
131
|
-
</PermissionEnforcer>
|
|
132
|
-
</div>
|
|
133
|
-
</PagePermissionGuard>
|
|
134
|
-
);
|
|
135
|
-
}
|
|
136
|
-
|
|
137
|
-
// Example navigation component
|
|
138
|
-
function EventNavigation() {
|
|
139
|
-
return (
|
|
140
|
-
<nav className="event-navigation">
|
|
141
|
-
<ul>
|
|
142
|
-
{navigationItems.map(item => (
|
|
143
|
-
<li key={item.id}>
|
|
144
|
-
<NavigationGuard
|
|
145
|
-
navigationItem={item}
|
|
146
|
-
fallback={<span className="disabled">{item.name}</span>}
|
|
147
|
-
>
|
|
148
|
-
<a href={item.path}>{item.name}</a>
|
|
149
|
-
</NavigationGuard>
|
|
150
|
-
</li>
|
|
151
|
-
))}
|
|
152
|
-
</ul>
|
|
153
|
-
</nav>
|
|
154
|
-
);
|
|
155
|
-
}
|
|
156
|
-
|
|
157
|
-
// Example main app component
|
|
158
|
-
export function EventBasedApp() {
|
|
159
|
-
const { selectedEventId, user } = useUnifiedAuth();
|
|
160
|
-
|
|
161
|
-
// Show loading state if no event is selected
|
|
162
|
-
if (!selectedEventId) {
|
|
163
|
-
return (
|
|
164
|
-
<div className="event-app">
|
|
165
|
-
<h1>Event-Based App</h1>
|
|
166
|
-
<p>Please select an event to continue.</p>
|
|
167
|
-
</div>
|
|
168
|
-
);
|
|
169
|
-
}
|
|
170
|
-
|
|
171
|
-
// Show loading state if no user is authenticated
|
|
172
|
-
if (!user) {
|
|
173
|
-
return (
|
|
174
|
-
<div className="event-app">
|
|
175
|
-
<h1>Event-Based App</h1>
|
|
176
|
-
<p>Please log in to continue.</p>
|
|
177
|
-
</div>
|
|
178
|
-
);
|
|
179
|
-
}
|
|
180
|
-
|
|
181
|
-
return (
|
|
182
|
-
<div className="event-app">
|
|
183
|
-
<header>
|
|
184
|
-
<h1>Event-Based App</h1>
|
|
185
|
-
<p>User: {user.email}</p>
|
|
186
|
-
<p>Event: {selectedEventId}</p>
|
|
187
|
-
</header>
|
|
188
|
-
|
|
189
|
-
<EventNavigation />
|
|
190
|
-
|
|
191
|
-
<main>
|
|
192
|
-
<EventDashboard />
|
|
193
|
-
<ParticipantsPage />
|
|
194
|
-
<SettingsPage />
|
|
195
|
-
</main>
|
|
196
|
-
</div>
|
|
197
|
-
);
|
|
198
|
-
}
|
|
199
|
-
|
|
200
|
-
// Example of using the app with different permission scenarios
|
|
201
|
-
export function EventBasedAppWithCustomScope() {
|
|
202
|
-
const { user } = useUnifiedAuth();
|
|
203
|
-
|
|
204
|
-
// Example of providing explicit scope
|
|
205
|
-
const customScope = {
|
|
206
|
-
eventId: 'event-123',
|
|
207
|
-
appId: 'app-456'
|
|
208
|
-
};
|
|
209
|
-
|
|
210
|
-
return (
|
|
211
|
-
<div className="event-app">
|
|
212
|
-
<h1>Event-Based App with Custom Scope</h1>
|
|
213
|
-
|
|
214
|
-
<PermissionEnforcer
|
|
215
|
-
scope={customScope}
|
|
216
|
-
permissions={['read:events']}
|
|
217
|
-
operation="custom-scope-example"
|
|
218
|
-
>
|
|
219
|
-
<div>
|
|
220
|
-
<p>This content is shown when the user has read:events permission</p>
|
|
221
|
-
<p>for event-123 in app-456.</p>
|
|
222
|
-
</div>
|
|
223
|
-
</PermissionEnforcer>
|
|
224
|
-
|
|
225
|
-
<PermissionEnforcer
|
|
226
|
-
scope={customScope}
|
|
227
|
-
permissions={['read:events', 'create:events', 'update:events', 'delete:events']}
|
|
228
|
-
operation="admin-example"
|
|
229
|
-
fallback={<p>You don't have admin permissions for this event.</p>}
|
|
230
|
-
>
|
|
231
|
-
<div>
|
|
232
|
-
<p>This content is shown when the user has events permissions</p>
|
|
233
|
-
<p>for event-123 in app-456.</p>
|
|
234
|
-
</div>
|
|
235
|
-
</PermissionEnforcer>
|
|
236
|
-
</div>
|
|
237
|
-
);
|
|
238
|
-
}
|
|
239
|
-
|