@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,104 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @file Public Page Debugger
|
|
3
|
-
* @package @jmruthers/pace-core
|
|
4
|
-
* @module Components/PublicLayout
|
|
5
|
-
* @since 1.0.0
|
|
6
|
-
*
|
|
7
|
-
* A debugging component that helps identify why authentication context
|
|
8
|
-
* is being triggered in public pages.
|
|
9
|
-
*/
|
|
10
|
-
|
|
11
|
-
import React, { useEffect } from 'react';
|
|
12
|
-
import { usePublicPageContext } from './PublicPageProvider';
|
|
13
|
-
|
|
14
|
-
export interface PublicPageDebuggerProps {
|
|
15
|
-
/** Whether to enable debugging */
|
|
16
|
-
enabled?: boolean;
|
|
17
|
-
/** Custom label for this debugger instance */
|
|
18
|
-
label?: string;
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
/**
|
|
22
|
-
* Debugger component that logs context information
|
|
23
|
-
*
|
|
24
|
-
* This component helps identify why authentication context
|
|
25
|
-
* is being triggered in public pages.
|
|
26
|
-
*/
|
|
27
|
-
export function PublicPageDebugger({ enabled = true, label = 'PublicPage' }: PublicPageDebuggerProps) {
|
|
28
|
-
useEffect(() => {
|
|
29
|
-
if (!enabled) return;
|
|
30
|
-
|
|
31
|
-
console.log(`[${label}] Component mounted`);
|
|
32
|
-
|
|
33
|
-
// Check if we're in a public page context
|
|
34
|
-
try {
|
|
35
|
-
// This will throw if we're not in PublicPageProvider
|
|
36
|
-
const { isPublicPage } = usePublicPageContext();
|
|
37
|
-
console.log(`[${label}] Public page context detected:`, isPublicPage);
|
|
38
|
-
} catch (error) {
|
|
39
|
-
console.warn(`[${label}] Not in PublicPageProvider context:`, error instanceof Error ? error.message : String(error));
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
// Check for authentication context
|
|
43
|
-
try {
|
|
44
|
-
// This will throw if we're not in UnifiedAuthProvider
|
|
45
|
-
const { isAuthenticated } = require('../../providers/UnifiedAuthProvider').useUnifiedAuth();
|
|
46
|
-
console.warn(`[${label}] AUTHENTICATION CONTEXT DETECTED! This should not happen in public pages.`);
|
|
47
|
-
console.warn(`[${label}] isAuthenticated:`, isAuthenticated);
|
|
48
|
-
} catch (error) {
|
|
49
|
-
console.log(`[${label}] No authentication context detected (good for public pages)`);
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
// Check for organisation context
|
|
53
|
-
try {
|
|
54
|
-
// This will throw if we're not in OrganisationProvider
|
|
55
|
-
const { selectedOrganisation } = require('../../providers/OrganisationProvider').useOrganisations();
|
|
56
|
-
console.warn(`[${label}] ORGANISATION CONTEXT DETECTED! This should not happen in public pages.`);
|
|
57
|
-
console.warn(`[${label}] selectedOrganisation:`, selectedOrganisation);
|
|
58
|
-
} catch (error) {
|
|
59
|
-
console.log(`[${label}] No organisation context detected (good for public pages)`);
|
|
60
|
-
}
|
|
61
|
-
|
|
62
|
-
// Check for event context
|
|
63
|
-
try {
|
|
64
|
-
// This will throw if we're not in EventProvider
|
|
65
|
-
const { events } = require('../../providers/EventProvider').useEvents();
|
|
66
|
-
console.warn(`[${label}] EVENT CONTEXT DETECTED! This should not happen in public pages.`);
|
|
67
|
-
console.warn(`[${label}] events:`, events);
|
|
68
|
-
} catch (error) {
|
|
69
|
-
console.log(`[${label}] No event context detected (good for public pages)`);
|
|
70
|
-
}
|
|
71
|
-
|
|
72
|
-
// Check environment variables
|
|
73
|
-
const supabaseUrl = (import.meta as any).env?.VITE_SUPABASE_URL;
|
|
74
|
-
const supabaseKey = (import.meta as any).env?.VITE_SUPABASE_ANON_KEY;
|
|
75
|
-
|
|
76
|
-
console.log(`[${label}] Environment variables:`, {
|
|
77
|
-
supabaseUrl: supabaseUrl ? 'Present' : 'Missing',
|
|
78
|
-
supabaseKey: supabaseKey ? 'Present' : 'Missing'
|
|
79
|
-
});
|
|
80
|
-
|
|
81
|
-
return () => {
|
|
82
|
-
console.log(`[${label}] Component unmounted`);
|
|
83
|
-
};
|
|
84
|
-
}, [enabled, label]);
|
|
85
|
-
|
|
86
|
-
if (!enabled) return null;
|
|
87
|
-
|
|
88
|
-
return (
|
|
89
|
-
<div style={{
|
|
90
|
-
position: 'fixed',
|
|
91
|
-
top: 0,
|
|
92
|
-
right: 0,
|
|
93
|
-
background: 'rgba(0,0,0,0.8)',
|
|
94
|
-
color: 'white',
|
|
95
|
-
padding: '8px',
|
|
96
|
-
fontSize: '12px',
|
|
97
|
-
zIndex: 9999,
|
|
98
|
-
fontFamily: 'monospace'
|
|
99
|
-
}}>
|
|
100
|
-
<div>Public Page Debugger</div>
|
|
101
|
-
<div>Check console for context analysis</div>
|
|
102
|
-
</div>
|
|
103
|
-
);
|
|
104
|
-
}
|
|
@@ -1,162 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @file Public Page Diagnostic Component
|
|
3
|
-
* @package @jmruthers/pace-core
|
|
4
|
-
* @module Components/PublicLayout
|
|
5
|
-
* @since 1.0.0
|
|
6
|
-
*
|
|
7
|
-
* A diagnostic component that helps identify exactly where authentication
|
|
8
|
-
* context is being triggered in public pages.
|
|
9
|
-
*/
|
|
10
|
-
|
|
11
|
-
import React, { useEffect, useState } from 'react';
|
|
12
|
-
import { usePublicPageContext } from './PublicPageProvider';
|
|
13
|
-
|
|
14
|
-
export interface PublicPageDiagnosticProps {
|
|
15
|
-
/** Whether to enable diagnostics */
|
|
16
|
-
enabled?: boolean;
|
|
17
|
-
/** Custom label for this diagnostic instance */
|
|
18
|
-
label?: string;
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
/**
|
|
22
|
-
* Diagnostic component that identifies authentication context issues
|
|
23
|
-
*
|
|
24
|
-
* This component will help you identify exactly where the problem is
|
|
25
|
-
* in your public page implementation.
|
|
26
|
-
*/
|
|
27
|
-
export function PublicPageDiagnostic({ enabled = true, label = 'PublicPage' }: PublicPageDiagnosticProps) {
|
|
28
|
-
const [diagnostics, setDiagnostics] = useState<{
|
|
29
|
-
hasPublicPageContext: boolean;
|
|
30
|
-
hasAuthContext: boolean;
|
|
31
|
-
hasOrgContext: boolean;
|
|
32
|
-
hasEventContext: boolean;
|
|
33
|
-
hasEnvironmentVars: boolean;
|
|
34
|
-
routeParams: any;
|
|
35
|
-
}>({
|
|
36
|
-
hasPublicPageContext: false,
|
|
37
|
-
hasAuthContext: false,
|
|
38
|
-
hasOrgContext: false,
|
|
39
|
-
hasEventContext: false,
|
|
40
|
-
hasEnvironmentVars: false,
|
|
41
|
-
routeParams: null
|
|
42
|
-
});
|
|
43
|
-
|
|
44
|
-
useEffect(() => {
|
|
45
|
-
if (!enabled) return;
|
|
46
|
-
|
|
47
|
-
const runDiagnostics = () => {
|
|
48
|
-
const newDiagnostics = {
|
|
49
|
-
hasPublicPageContext: false,
|
|
50
|
-
hasAuthContext: false,
|
|
51
|
-
hasOrgContext: false,
|
|
52
|
-
hasEventContext: false,
|
|
53
|
-
hasEnvironmentVars: false,
|
|
54
|
-
routeParams: null
|
|
55
|
-
};
|
|
56
|
-
|
|
57
|
-
// Check for PublicPageProvider context
|
|
58
|
-
try {
|
|
59
|
-
const { isPublicPage } = usePublicPageContext();
|
|
60
|
-
newDiagnostics.hasPublicPageContext = isPublicPage === true;
|
|
61
|
-
} catch (error) {
|
|
62
|
-
newDiagnostics.hasPublicPageContext = false;
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
// Check for authentication context
|
|
66
|
-
try {
|
|
67
|
-
const { isAuthenticated } = require('../../providers/UnifiedAuthProvider').useUnifiedAuth();
|
|
68
|
-
newDiagnostics.hasAuthContext = true;
|
|
69
|
-
} catch (error) {
|
|
70
|
-
newDiagnostics.hasAuthContext = false;
|
|
71
|
-
}
|
|
72
|
-
|
|
73
|
-
// Check for organisation context
|
|
74
|
-
try {
|
|
75
|
-
const { selectedOrganisation } = require('../../providers/OrganisationProvider').useOrganisations();
|
|
76
|
-
newDiagnostics.hasOrgContext = true;
|
|
77
|
-
} catch (error) {
|
|
78
|
-
newDiagnostics.hasOrgContext = false;
|
|
79
|
-
}
|
|
80
|
-
|
|
81
|
-
// Check for event context
|
|
82
|
-
try {
|
|
83
|
-
const { events } = require('../../providers/EventProvider').useEvents();
|
|
84
|
-
newDiagnostics.hasEventContext = true;
|
|
85
|
-
} catch (error) {
|
|
86
|
-
newDiagnostics.hasEventContext = false;
|
|
87
|
-
}
|
|
88
|
-
|
|
89
|
-
// Check environment variables
|
|
90
|
-
const supabaseUrl = (import.meta as any).env?.VITE_SUPABASE_URL;
|
|
91
|
-
const supabaseKey = (import.meta as any).env?.VITE_SUPABASE_ANON_KEY;
|
|
92
|
-
newDiagnostics.hasEnvironmentVars = !!(supabaseUrl && supabaseKey);
|
|
93
|
-
|
|
94
|
-
// Check route parameters
|
|
95
|
-
try {
|
|
96
|
-
const { useParams } = require('react-router-dom');
|
|
97
|
-
const params = useParams();
|
|
98
|
-
newDiagnostics.routeParams = params;
|
|
99
|
-
} catch (error) {
|
|
100
|
-
newDiagnostics.routeParams = null;
|
|
101
|
-
}
|
|
102
|
-
|
|
103
|
-
setDiagnostics(newDiagnostics);
|
|
104
|
-
|
|
105
|
-
// Log results
|
|
106
|
-
console.group(`🔍 [${label}] Public Page Diagnostics`);
|
|
107
|
-
console.log('✅ Public Page Context:', newDiagnostics.hasPublicPageContext ? 'PRESENT' : 'MISSING');
|
|
108
|
-
console.log('❌ Auth Context:', newDiagnostics.hasAuthContext ? 'PRESENT (BAD!)' : 'ABSENT (GOOD!)');
|
|
109
|
-
console.log('❌ Org Context:', newDiagnostics.hasOrgContext ? 'PRESENT (BAD!)' : 'ABSENT (GOOD!)');
|
|
110
|
-
console.log('❌ Event Context:', newDiagnostics.hasEventContext ? 'PRESENT (BAD!)' : 'ABSENT (GOOD!)');
|
|
111
|
-
console.log('✅ Environment Vars:', newDiagnostics.hasEnvironmentVars ? 'PRESENT' : 'MISSING');
|
|
112
|
-
console.log('✅ Route Params:', newDiagnostics.routeParams);
|
|
113
|
-
console.groupEnd();
|
|
114
|
-
|
|
115
|
-
// Provide specific guidance
|
|
116
|
-
if (newDiagnostics.hasAuthContext || newDiagnostics.hasOrgContext || newDiagnostics.hasEventContext) {
|
|
117
|
-
console.error(`🚨 [${label}] PROBLEM DETECTED: Public page is inside authentication context!`);
|
|
118
|
-
console.error('🔧 SOLUTION: Move public routes outside of UnifiedAuthProvider, OrganisationProvider, and EventProvider');
|
|
119
|
-
console.error('📖 See: packages/core/docs/emergency-public-pages-fix.md');
|
|
120
|
-
} else if (!newDiagnostics.hasPublicPageContext) {
|
|
121
|
-
console.warn(`⚠️ [${label}] WARNING: Not in PublicPageProvider context`);
|
|
122
|
-
console.warn('🔧 SOLUTION: Wrap your public page component in <PublicPageProvider>');
|
|
123
|
-
} else if (!newDiagnostics.hasEnvironmentVars) {
|
|
124
|
-
console.warn(`⚠️ [${label}] WARNING: Missing environment variables`);
|
|
125
|
-
console.warn('🔧 SOLUTION: Set VITE_SUPABASE_URL and VITE_SUPABASE_ANON_KEY in your environment (use publishable key if anon key is disabled)');
|
|
126
|
-
} else {
|
|
127
|
-
console.log(`✅ [${label}] All diagnostics passed! Public page should work correctly.`);
|
|
128
|
-
}
|
|
129
|
-
};
|
|
130
|
-
|
|
131
|
-
runDiagnostics();
|
|
132
|
-
}, [enabled, label]);
|
|
133
|
-
|
|
134
|
-
if (!enabled) return null;
|
|
135
|
-
|
|
136
|
-
return (
|
|
137
|
-
<div style={{
|
|
138
|
-
position: 'fixed',
|
|
139
|
-
top: 0,
|
|
140
|
-
left: 0,
|
|
141
|
-
background: 'rgba(0,0,0,0.9)',
|
|
142
|
-
color: 'white',
|
|
143
|
-
padding: '12px',
|
|
144
|
-
fontSize: '11px',
|
|
145
|
-
zIndex: 9999,
|
|
146
|
-
fontFamily: 'monospace',
|
|
147
|
-
maxWidth: '300px',
|
|
148
|
-
borderRadius: '0 0 8px 0'
|
|
149
|
-
}}>
|
|
150
|
-
<div style={{ fontWeight: 'bold', marginBottom: '8px' }}>🔍 Public Page Diagnostics</div>
|
|
151
|
-
<div>Public Context: {diagnostics.hasPublicPageContext ? '✅' : '❌'}</div>
|
|
152
|
-
<div>Auth Context: {diagnostics.hasAuthContext ? '❌ BAD' : '✅ GOOD'}</div>
|
|
153
|
-
<div>Org Context: {diagnostics.hasOrgContext ? '❌ BAD' : '✅ GOOD'}</div>
|
|
154
|
-
<div>Event Context: {diagnostics.hasEventContext ? '❌ BAD' : '✅ GOOD'}</div>
|
|
155
|
-
<div>Env Vars: {diagnostics.hasEnvironmentVars ? '✅' : '❌'}</div>
|
|
156
|
-
<div>Route Params: {diagnostics.routeParams ? '✅' : '❌'}</div>
|
|
157
|
-
<div style={{ marginTop: '8px', fontSize: '10px', opacity: 0.8 }}>
|
|
158
|
-
Check console for detailed analysis
|
|
159
|
-
</div>
|
|
160
|
-
</div>
|
|
161
|
-
);
|
|
162
|
-
}
|
|
@@ -1,124 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @file Public Page Footer Component
|
|
3
|
-
* @package @jmruthers/pace-core
|
|
4
|
-
* @module Components/PublicLayout
|
|
5
|
-
* @since 1.0.0
|
|
6
|
-
*
|
|
7
|
-
* A footer component for public pages that matches the normal PaceAppLayout footer exactly.
|
|
8
|
-
* Uses the same styling and structure as the main Footer component.
|
|
9
|
-
*
|
|
10
|
-
* Features:
|
|
11
|
-
* - Identical to normal Footer component
|
|
12
|
-
* - Consistent branding with main app
|
|
13
|
-
* - Responsive design
|
|
14
|
-
* - Accessibility compliant
|
|
15
|
-
* - TypeScript support
|
|
16
|
-
*
|
|
17
|
-
* @example
|
|
18
|
-
* ```tsx
|
|
19
|
-
* import { PublicPageFooter } from '@jmruthers/pace-core';
|
|
20
|
-
*
|
|
21
|
-
* function PublicEventPage() {
|
|
22
|
-
* return (
|
|
23
|
-
* <PublicPageFooter
|
|
24
|
-
* event={event}
|
|
25
|
-
* companyName="My Company"
|
|
26
|
-
* />
|
|
27
|
-
* );
|
|
28
|
-
* }
|
|
29
|
-
* ```
|
|
30
|
-
*
|
|
31
|
-
* @accessibility
|
|
32
|
-
* - WCAG 2.1 AA compliant
|
|
33
|
-
* - Proper semantic HTML structure
|
|
34
|
-
* - Screen reader friendly
|
|
35
|
-
* - High contrast support
|
|
36
|
-
* - Clear content hierarchy
|
|
37
|
-
*
|
|
38
|
-
* @dependencies
|
|
39
|
-
* - React 18+ - Component framework
|
|
40
|
-
* - Event types - Type definitions
|
|
41
|
-
* - Tailwind CSS - Styling
|
|
42
|
-
*/
|
|
43
|
-
|
|
44
|
-
import React from 'react';
|
|
45
|
-
import { cn } from '../../utils/core/cn';
|
|
46
|
-
import type { Event } from '../../types/unified';
|
|
47
|
-
|
|
48
|
-
export interface PublicPageFooterProps {
|
|
49
|
-
/** The event data for this public page */
|
|
50
|
-
event: Event;
|
|
51
|
-
/** Company or organization name */
|
|
52
|
-
companyName?: string;
|
|
53
|
-
/** Current year or custom year for copyright */
|
|
54
|
-
year?: number;
|
|
55
|
-
/** Optional array of navigation links to display */
|
|
56
|
-
links?: Array<{
|
|
57
|
-
label: string;
|
|
58
|
-
href: string;
|
|
59
|
-
}>;
|
|
60
|
-
/** Optional CSS class name */
|
|
61
|
-
className?: string;
|
|
62
|
-
/** Logo image URL */
|
|
63
|
-
logo?: string;
|
|
64
|
-
/** Copyright text */
|
|
65
|
-
copyright?: string;
|
|
66
|
-
/** Footer content - children to render inside footer */
|
|
67
|
-
children?: React.ReactNode;
|
|
68
|
-
}
|
|
69
|
-
|
|
70
|
-
/**
|
|
71
|
-
* Footer component for public pages that matches the normal Footer exactly
|
|
72
|
-
*
|
|
73
|
-
* This component uses the same styling and structure as the main Footer component
|
|
74
|
-
* to ensure consistency across the application.
|
|
75
|
-
*
|
|
76
|
-
* @param props - Footer configuration and content
|
|
77
|
-
* @returns React element with public page footer
|
|
78
|
-
*/
|
|
79
|
-
export function PublicPageFooter({
|
|
80
|
-
event,
|
|
81
|
-
companyName = 'Solvera Solutions Pty Ltd',
|
|
82
|
-
year = new Date().getFullYear(),
|
|
83
|
-
links,
|
|
84
|
-
className = '',
|
|
85
|
-
logo,
|
|
86
|
-
copyright,
|
|
87
|
-
children
|
|
88
|
-
}: PublicPageFooterProps) {
|
|
89
|
-
// Use custom copyright if provided, otherwise generate default
|
|
90
|
-
const copyrightText = copyright || `© Copyright 2022–${year} all rights reserved, ${companyName}.`;
|
|
91
|
-
|
|
92
|
-
return (
|
|
93
|
-
<footer className={cn('mt-8 py-6 flex justify-center', className)}>
|
|
94
|
-
<section className='px-4 w-[min(var(--app-width),100%)] mx-auto text-center'>
|
|
95
|
-
{logo && (
|
|
96
|
-
<img src={logo} alt="Logo" className="h-8 w-auto" />
|
|
97
|
-
)}
|
|
98
|
-
|
|
99
|
-
{children && (
|
|
100
|
-
<>
|
|
101
|
-
{children}
|
|
102
|
-
</>
|
|
103
|
-
)}
|
|
104
|
-
|
|
105
|
-
<span className="text-muted-foreground">
|
|
106
|
-
{copyrightText}
|
|
107
|
-
</span>
|
|
108
|
-
|
|
109
|
-
{links && links.length > 0 && (
|
|
110
|
-
<ul className="flex gap-4 mt-2 md:mt-0">
|
|
111
|
-
{links.map((link, index) => (
|
|
112
|
-
<li key={index}>
|
|
113
|
-
<a href={link.href} className="text-muted-foreground hover:text-foreground">
|
|
114
|
-
{link.label}
|
|
115
|
-
</a>
|
|
116
|
-
</li>
|
|
117
|
-
))}
|
|
118
|
-
</ul>
|
|
119
|
-
)}
|
|
120
|
-
</section>
|
|
121
|
-
</footer>
|
|
122
|
-
);
|
|
123
|
-
}
|
|
124
|
-
|
|
@@ -1,209 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @file Public Page Header Component
|
|
3
|
-
* @package @jmruthers/pace-core
|
|
4
|
-
* @module Components/PublicLayout
|
|
5
|
-
* @since 1.0.0
|
|
6
|
-
*
|
|
7
|
-
* A header component specifically designed for public pages with event-specific branding.
|
|
8
|
-
* Displays app logo, event logo, and event information in a clean, accessible layout.
|
|
9
|
-
*
|
|
10
|
-
* Features:
|
|
11
|
-
* - Event-specific branding
|
|
12
|
-
* - App and event logo display
|
|
13
|
-
* - Responsive design
|
|
14
|
-
* - Print-friendly styling
|
|
15
|
-
* - Accessibility compliant
|
|
16
|
-
* - TypeScript support
|
|
17
|
-
*
|
|
18
|
-
* @example
|
|
19
|
-
* ```tsx
|
|
20
|
-
* import { PublicPageHeader, PublicPageProvider } from '@jmruthers/pace-core';
|
|
21
|
-
*
|
|
22
|
-
* const APP_NAME = 'CORE';
|
|
23
|
-
*
|
|
24
|
-
* function PublicEventPage() {
|
|
25
|
-
* return (
|
|
26
|
-
* <PublicPageProvider appName={APP_NAME}>
|
|
27
|
-
* <PublicPageHeader
|
|
28
|
-
* event={event}
|
|
29
|
-
* title="Event Details"
|
|
30
|
-
* description="Public information about this event"
|
|
31
|
-
* showEventLogo={true}
|
|
32
|
-
* />
|
|
33
|
-
* </PublicPageProvider>
|
|
34
|
-
* );
|
|
35
|
-
* }
|
|
36
|
-
* ```
|
|
37
|
-
*
|
|
38
|
-
*
|
|
39
|
-
* @accessibility
|
|
40
|
-
* - WCAG 2.1 AA compliant
|
|
41
|
-
* - Proper semantic HTML structure
|
|
42
|
-
* - Screen reader friendly
|
|
43
|
-
* - High contrast support
|
|
44
|
-
* - Clear content hierarchy
|
|
45
|
-
*
|
|
46
|
-
* @dependencies
|
|
47
|
-
* - React 18+ - Component framework
|
|
48
|
-
* - Event types - Type definitions
|
|
49
|
-
* - FileDisplay component - Logo display
|
|
50
|
-
* - Tailwind CSS - Styling
|
|
51
|
-
*/
|
|
52
|
-
|
|
53
|
-
import React, { ReactNode } from 'react';
|
|
54
|
-
import type { Event } from '../../types/unified';
|
|
55
|
-
import { FileDisplay } from '../FileDisplay/FileDisplay';
|
|
56
|
-
import { FileCategory } from '../../types/file-reference';
|
|
57
|
-
import { useAppConfig } from '../../hooks/useAppConfig';
|
|
58
|
-
import { cn } from '../../utils/core/cn';
|
|
59
|
-
|
|
60
|
-
export interface PublicPageHeaderProps {
|
|
61
|
-
/** The event data for this public page */
|
|
62
|
-
event?: Event;
|
|
63
|
-
/** The event code for this public page */
|
|
64
|
-
eventCode: string;
|
|
65
|
-
/** Optional page title */
|
|
66
|
-
title?: string;
|
|
67
|
-
/** Optional page description */
|
|
68
|
-
description?: string;
|
|
69
|
-
/** Whether to show the event logo (default: true) */
|
|
70
|
-
showEventLogo?: boolean;
|
|
71
|
-
/** Whether to show the app logo (default: true) */
|
|
72
|
-
showAppLogo?: boolean;
|
|
73
|
-
/** Custom CSS classes for the header */
|
|
74
|
-
className?: string;
|
|
75
|
-
/** Custom content to display in the header */
|
|
76
|
-
children?: ReactNode;
|
|
77
|
-
/** Custom event logo component */
|
|
78
|
-
customEventLogo?: ReactNode;
|
|
79
|
-
}
|
|
80
|
-
|
|
81
|
-
/**
|
|
82
|
-
* Header component for public pages with event-specific branding
|
|
83
|
-
*
|
|
84
|
-
* This component displays the app logo, event logo, and event information
|
|
85
|
-
* in a clean, accessible layout suitable for public pages.
|
|
86
|
-
*
|
|
87
|
-
* The app logo is automatically generated from the appName using the pattern:
|
|
88
|
-
* `/{appName.toLowerCase()}_logo_wide.svg` from the public folder.
|
|
89
|
-
*
|
|
90
|
-
* **Important:** The appName is obtained from PublicPageProvider context, which should
|
|
91
|
-
* receive the APP_NAME constant from your App.tsx file. This ensures consistency with
|
|
92
|
-
* authenticated pages that use the same APP_NAME constant.
|
|
93
|
-
*
|
|
94
|
-
* **Event Logo Requirements:**
|
|
95
|
-
* - Event logo files must be marked as `is_public = true` in the `file_references` table
|
|
96
|
-
* - The RPC function `data_file_reference_by_category_list` must be accessible to the anonymous/public role
|
|
97
|
-
* - Storage bucket must allow public read access for logo files
|
|
98
|
-
* - If no public logo is available, a fallback UI with event initials will be displayed
|
|
99
|
-
*
|
|
100
|
-
* @param props - Header configuration and content
|
|
101
|
-
* @returns React element with public page header
|
|
102
|
-
*/
|
|
103
|
-
export function PublicPageHeader({
|
|
104
|
-
event,
|
|
105
|
-
eventCode,
|
|
106
|
-
title,
|
|
107
|
-
description,
|
|
108
|
-
showEventLogo = true,
|
|
109
|
-
showAppLogo = true,
|
|
110
|
-
className = '',
|
|
111
|
-
children,
|
|
112
|
-
customEventLogo
|
|
113
|
-
}: PublicPageHeaderProps) {
|
|
114
|
-
const { appName } = useAppConfig();
|
|
115
|
-
|
|
116
|
-
return (
|
|
117
|
-
<header className={cn(
|
|
118
|
-
|
|
119
|
-
"w-full px-[max(0rem,calc((100vw-var(--app-width))/2-0.5rem))] grid grid-cols-[auto_1fr_auto] place-items-center gap-2",
|
|
120
|
-
className
|
|
121
|
-
)}>
|
|
122
|
-
|
|
123
|
-
{/* Top row with logos */}
|
|
124
|
-
|
|
125
|
-
{/* App Logo */}
|
|
126
|
-
{showAppLogo && appName && (
|
|
127
|
-
<img
|
|
128
|
-
className="ml-4 max-w-36 object-contain row-span-2"
|
|
129
|
-
src={`/${appName.toLowerCase()}_logo_wide.svg`}
|
|
130
|
-
alt={appName}
|
|
131
|
-
/>
|
|
132
|
-
)}
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
{/* Event Information */}
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
{event && (
|
|
139
|
-
<>
|
|
140
|
-
<h1>
|
|
141
|
-
{event.event_name}
|
|
142
|
-
</h1>
|
|
143
|
-
{/* Event Logo */}
|
|
144
|
-
{showEventLogo && event && (
|
|
145
|
-
<>
|
|
146
|
-
{customEventLogo || (
|
|
147
|
-
<>
|
|
148
|
-
<FileDisplay
|
|
149
|
-
table_name="event"
|
|
150
|
-
record_id={event.event_id}
|
|
151
|
-
organisation_id={event.organisation_id}
|
|
152
|
-
category={FileCategory.EVENT_LOGOS}
|
|
153
|
-
displayOnly={true}
|
|
154
|
-
showFallback={true}
|
|
155
|
-
fallbackSize="md"
|
|
156
|
-
className="mr-4 max-w-36 row-span-2"
|
|
157
|
-
generateFallbackText={(fileName) => {
|
|
158
|
-
if (!event.event_name) return 'EV';
|
|
159
|
-
return event.event_name
|
|
160
|
-
.split(/[\s\-_]+/)
|
|
161
|
-
.map(word => word.charAt(0).toUpperCase())
|
|
162
|
-
.join('')
|
|
163
|
-
.substring(0, 3);
|
|
164
|
-
}}
|
|
165
|
-
// Note: FileDisplay automatically detects public page context
|
|
166
|
-
// and uses FileDisplayPublic component which queries only public files (is_public = true)
|
|
167
|
-
// If no public logo is found, fallback UI with event initials will be displayed
|
|
168
|
-
/>
|
|
169
|
-
</>
|
|
170
|
-
)}
|
|
171
|
-
</>
|
|
172
|
-
)}
|
|
173
|
-
{event.event_venue && (
|
|
174
|
-
<h4>
|
|
175
|
-
{event.event_venue}
|
|
176
|
-
</h4>
|
|
177
|
-
)}
|
|
178
|
-
</>
|
|
179
|
-
)}
|
|
180
|
-
|
|
181
|
-
{/* Page Title and Description */}
|
|
182
|
-
{title && (
|
|
183
|
-
<>
|
|
184
|
-
<h1>
|
|
185
|
-
{title}
|
|
186
|
-
</h1>
|
|
187
|
-
{description && (
|
|
188
|
-
<p className="text-lg text-sec-600 max-w-3xl mx-auto">
|
|
189
|
-
{description}
|
|
190
|
-
</p>
|
|
191
|
-
)}
|
|
192
|
-
</>
|
|
193
|
-
)}
|
|
194
|
-
|
|
195
|
-
{/* Custom Content */}
|
|
196
|
-
{children && (
|
|
197
|
-
<>
|
|
198
|
-
{children}
|
|
199
|
-
</>
|
|
200
|
-
)}
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
</header>
|
|
207
|
-
);
|
|
208
|
-
}
|
|
209
|
-
|