@jmruthers/pace-core 0.5.181 → 0.5.182
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +1 -1
- package/README.md +16 -2
- package/dist/{AuthService-DYuQPJj6.d.ts → AuthService-B-cd2MA4.d.ts} +9 -11
- package/dist/{DataTable-CWAZZcXC.d.ts → DataTable-Bz8ffqyA.d.ts} +1 -1
- package/dist/{DataTable-UA6CL4JI.js → DataTable-QAB34V6K.js} +14 -15
- package/dist/UnifiedAuthProvider-7F6T4B6K.js +13 -0
- package/dist/{UnifiedAuthProvider-DJxGTftH.d.ts → UnifiedAuthProvider-F86d7dSi.d.ts} +5 -6
- package/dist/{api-45XYYO2A.js → api-ROMBCNKU.js} +5 -5
- package/dist/{audit-64X3VJXB.js → audit-WRS3KJKI.js} +4 -4
- package/dist/auth-BZOJqrdd.d.ts +49 -0
- package/dist/{chunk-CX5M4ZAG.js → chunk-5DRSZLL2.js} +1 -1
- package/dist/chunk-5DRSZLL2.js.map +1 -0
- package/dist/{chunk-BESYRHQM.js → chunk-6C4YBBJM.js} +10 -7
- package/dist/chunk-6C4YBBJM.js.map +1 -0
- package/dist/{chunk-PLDDJCW6.js → chunk-7D4SUZUM.js} +2 -13
- package/dist/{chunk-HRO5HWN2.js → chunk-CSOFYHAG.js} +55 -162
- package/dist/chunk-CSOFYHAG.js.map +1 -0
- package/dist/{chunk-ANBQRTPX.js → chunk-E66EQZE6.js} +3 -5
- package/dist/{chunk-ANBQRTPX.js.map → chunk-E66EQZE6.js.map} +1 -1
- package/dist/{chunk-Q5QRDWKI.js → chunk-F2IMUDXZ.js} +4 -6
- package/dist/chunk-F2IMUDXZ.js.map +1 -0
- package/dist/{chunk-SBVILCCA.js → chunk-FSFQFJCU.js} +28 -6
- package/dist/chunk-FSFQFJCU.js.map +1 -0
- package/dist/chunk-FUEYYMX5.js +2296 -0
- package/dist/chunk-FUEYYMX5.js.map +1 -0
- package/dist/{chunk-FFKNH6U5.js → chunk-HKIT6O7W.js} +3 -5
- package/dist/{chunk-FFKNH6U5.js.map → chunk-HKIT6O7W.js.map} +1 -1
- package/dist/chunk-KQCRWDSA.js +1 -0
- package/dist/{chunk-S5OFRT4M.js → chunk-KUEN3HFB.js} +6 -6
- package/dist/chunk-KUEN3HFB.js.map +1 -0
- package/dist/chunk-LMC26NLJ.js +84 -0
- package/dist/chunk-LMC26NLJ.js.map +1 -0
- package/dist/{chunk-BVYWGZVV.js → chunk-M7W4CP3M.js} +52 -19
- package/dist/chunk-M7W4CP3M.js.map +1 -0
- package/dist/{chunk-HZLDFOE4.js → chunk-MI7HBHN3.js} +164 -243
- package/dist/chunk-MI7HBHN3.js.map +1 -0
- package/dist/{chunk-PPMP5J6T.js → chunk-PWAHJW4G.js} +180 -29
- package/dist/chunk-PWAHJW4G.js.map +1 -0
- package/dist/chunk-PWLANIRT.js +127 -0
- package/dist/{chunk-XDNLUEXI.js.map → chunk-PWLANIRT.js.map} +1 -1
- package/dist/chunk-QCDXODCA.js +75 -0
- package/dist/chunk-QCDXODCA.js.map +1 -0
- package/dist/{chunk-D7LCGMVS.js → chunk-QETLRQI6.js} +526 -887
- package/dist/chunk-QETLRQI6.js.map +1 -0
- package/dist/{chunk-5MT24GKJ.js → chunk-QUVSNGIP.js} +264 -262
- package/dist/chunk-QUVSNGIP.js.map +1 -0
- package/dist/chunk-QXHPKYJV.js +113 -0
- package/dist/chunk-QXHPKYJV.js.map +1 -0
- package/dist/{chunk-OWAG3GSU.js → chunk-R77UEZ4E.js} +11 -1
- package/dist/chunk-R77UEZ4E.js.map +1 -0
- package/dist/{chunk-ZYTYSTO5.js → chunk-RA3JUFMW.js} +314 -161
- package/dist/chunk-RA3JUFMW.js.map +1 -0
- package/dist/{chunk-ERISIBYU.js → chunk-SQGMNID3.js} +3 -8
- package/dist/chunk-SQGMNID3.js.map +1 -0
- package/dist/{chunk-XJ2HZOBU.js → chunk-UHNYIBXL.js} +1 -1
- package/dist/chunk-UHNYIBXL.js.map +1 -0
- package/{src/utils/secureStorage.ts → dist/chunk-VBXEHIUJ.js} +113 -88
- package/dist/{chunk-7QCC6MCP.js.map → chunk-VBXEHIUJ.js.map} +1 -1
- package/dist/{chunk-VZ4VDGTB.js → chunk-W22JP75J.js} +5 -13
- package/dist/{chunk-VZ4VDGTB.js.map → chunk-W22JP75J.js.map} +1 -1
- package/dist/components.d.ts +12 -93
- package/dist/components.js +23 -106
- package/dist/components.js.map +1 -1
- package/dist/core-CUElvH_C.d.ts +164 -0
- package/dist/database.generated-CBmg2950.d.ts +8284 -0
- package/dist/event-CW5YB_2p.d.ts +239 -0
- package/dist/{file-reference-C6Gkn77H.d.ts → file-reference-D06mEEWW.d.ts} +7 -5
- package/dist/functions-D_kgHktt.d.ts +208 -0
- package/dist/hooks.d.ts +54 -7
- package/dist/hooks.js +204 -17
- package/dist/hooks.js.map +1 -1
- package/dist/{EventLogo-B3V3otev.d.ts → index-Bl--n7-T.d.ts} +387 -397
- package/dist/index.d.ts +94 -261
- package/dist/index.js +314 -126
- package/dist/index.js.map +1 -1
- package/dist/providers.d.ts +7 -8
- package/dist/providers.js +6 -13
- package/dist/rbac/index.d.ts +171 -101
- package/dist/rbac/index.js +23 -17
- package/dist/styles/index.d.ts +1 -3
- package/dist/styles/index.js +2 -17
- package/dist/theming/runtime.js +3 -3
- package/dist/types-UU913iLA.d.ts +102 -0
- package/dist/{types-Dfz9dmVH.d.ts → types-_x1f4QBF.d.ts} +6 -6
- package/dist/types.d.ts +88 -227
- package/dist/types.js +64 -112
- package/dist/types.js.map +1 -1
- package/dist/{usePublicRouteParams-B7PabvuH.d.ts → usePublicRouteParams-JJczomYq.d.ts} +203 -6
- package/dist/utils.d.ts +299 -13
- package/dist/utils.js +481 -55
- package/dist/utils.js.map +1 -1
- package/dist/validation-643vUDZW.d.ts +177 -0
- package/docs/DOCUMENTATION_REVIEW_TRACKER.md +511 -0
- package/docs/README.md +9 -8
- package/docs/api/README.md +16 -2
- package/docs/api/classes/ColumnFactory.md +1 -1
- package/docs/api/classes/ErrorBoundary.md +1 -1
- package/docs/api/classes/InvalidScopeError.md +4 -4
- package/docs/api/classes/MissingUserContextError.md +4 -4
- package/docs/api/classes/OrganisationContextRequiredError.md +4 -4
- package/docs/api/classes/PermissionDeniedError.md +4 -4
- package/docs/api/classes/RBACAuditManager.md +14 -14
- package/docs/api/classes/RBACCache.md +1 -1
- package/docs/api/classes/RBACEngine.md +2 -2
- package/docs/api/classes/RBACError.md +4 -4
- package/docs/api/classes/RBACNotInitializedError.md +4 -4
- package/docs/api/classes/SecureSupabaseClient.md +29 -9
- package/docs/api/classes/StorageUtils.md +1 -1
- package/docs/api/enums/FileCategory.md +17 -17
- package/docs/api/enums/RBACErrorCode.md +228 -0
- package/docs/api/enums/RPCFunction.md +118 -0
- package/docs/api/interfaces/AggregateConfig.md +1 -1
- package/docs/api/interfaces/BadgeProps.md +1 -1
- package/docs/api/interfaces/ButtonProps.md +2 -2
- package/docs/api/interfaces/CalendarProps.md +1 -1
- package/docs/api/interfaces/CardProps.md +29 -3
- package/docs/api/interfaces/ColorPalette.md +1 -1
- package/docs/api/interfaces/ColorShade.md +1 -1
- package/docs/api/interfaces/DataAccessRecord.md +1 -1
- package/docs/api/interfaces/DataRecord.md +1 -1
- package/docs/api/interfaces/DataTableAction.md +2 -2
- package/docs/api/interfaces/DataTableColumn.md +6 -6
- package/docs/api/interfaces/DataTableProps.md +1 -1
- package/docs/api/interfaces/DataTableToolbarButton.md +2 -2
- package/docs/api/interfaces/EmptyStateConfig.md +1 -1
- package/docs/api/interfaces/EnhancedNavigationMenuProps.md +1 -1
- package/docs/api/interfaces/EventAppRoleData.md +1 -1
- package/docs/api/interfaces/ExportColumn.md +5 -5
- package/docs/api/interfaces/ExportOptions.md +4 -4
- package/docs/api/interfaces/FileDisplayProps.md +1 -1
- package/docs/api/interfaces/FileMetadata.md +13 -13
- package/docs/api/interfaces/FileReference.md +12 -12
- package/docs/api/interfaces/FileSizeLimits.md +1 -1
- package/docs/api/interfaces/FileUploadOptions.md +10 -10
- package/docs/api/interfaces/FileUploadProps.md +19 -19
- package/docs/api/interfaces/FooterProps.md +1 -1
- package/docs/api/interfaces/FormFieldProps.md +166 -0
- package/docs/api/interfaces/FormProps.md +113 -0
- package/docs/api/interfaces/GrantEventAppRoleParams.md +1 -1
- package/docs/api/interfaces/InactivityWarningModalProps.md +8 -8
- package/docs/api/interfaces/InputProps.md +2 -2
- package/docs/api/interfaces/LabelProps.md +8 -8
- package/docs/api/interfaces/LoginFormProps.md +1 -1
- package/docs/api/interfaces/NavigationAccessRecord.md +1 -1
- package/docs/api/interfaces/NavigationContextType.md +1 -1
- package/docs/api/interfaces/NavigationGuardProps.md +1 -1
- package/docs/api/interfaces/NavigationItem.md +17 -73
- package/docs/api/interfaces/NavigationMenuProps.md +38 -53
- package/docs/api/interfaces/NavigationProviderProps.md +1 -1
- package/docs/api/interfaces/Organisation.md +13 -13
- package/docs/api/interfaces/OrganisationContextType.md +21 -21
- package/docs/api/interfaces/OrganisationMembership.md +15 -15
- package/docs/api/interfaces/OrganisationProviderProps.md +59 -2
- package/docs/api/interfaces/OrganisationSecurityError.md +5 -5
- package/docs/api/interfaces/PaceAppLayoutProps.md +26 -39
- package/docs/api/interfaces/PaceLoginPageProps.md +1 -1
- package/docs/api/interfaces/PageAccessRecord.md +1 -1
- package/docs/api/interfaces/PagePermissionContextType.md +1 -1
- package/docs/api/interfaces/PagePermissionGuardProps.md +1 -1
- package/docs/api/interfaces/PagePermissionProviderProps.md +1 -1
- package/docs/api/interfaces/PaletteData.md +1 -1
- package/docs/api/interfaces/PermissionEnforcerProps.md +1 -1
- package/docs/api/interfaces/ProgressProps.md +50 -0
- package/docs/api/interfaces/ProtectedRouteProps.md +1 -1
- package/docs/api/interfaces/PublicPageFooterProps.md +9 -9
- package/docs/api/interfaces/PublicPageHeaderProps.md +10 -10
- package/docs/api/interfaces/PublicPageLayoutProps.md +15 -15
- package/docs/api/interfaces/RBACAccessValidateParams.md +52 -0
- package/docs/api/interfaces/RBACAccessValidateResult.md +41 -0
- package/docs/api/interfaces/RBACAuditLogParams.md +85 -0
- package/docs/api/interfaces/RBACAuditLogResult.md +52 -0
- package/docs/api/interfaces/RBACConfig.md +2 -2
- package/docs/api/interfaces/RBACContext.md +52 -0
- package/docs/api/interfaces/RBACLogger.md +1 -1
- package/docs/api/interfaces/RBACPageAccessCheckParams.md +74 -0
- package/docs/api/interfaces/RBACPermissionCheckParams.md +74 -0
- package/docs/api/interfaces/RBACPermissionCheckResult.md +52 -0
- package/docs/api/interfaces/RBACPermissionsGetParams.md +63 -0
- package/docs/api/interfaces/RBACPermissionsGetResult.md +63 -0
- package/docs/api/interfaces/RBACResult.md +58 -0
- package/docs/api/interfaces/RBACRoleGrantParams.md +63 -0
- package/docs/api/interfaces/RBACRoleGrantResult.md +52 -0
- package/docs/api/interfaces/RBACRoleRevokeParams.md +63 -0
- package/docs/api/interfaces/RBACRoleRevokeResult.md +52 -0
- package/docs/api/interfaces/RBACRoleValidateParams.md +52 -0
- package/docs/api/interfaces/RBACRoleValidateResult.md +63 -0
- package/docs/api/interfaces/RBACRolesListParams.md +52 -0
- package/docs/api/interfaces/RBACRolesListResult.md +74 -0
- package/docs/api/interfaces/RBACSessionTrackParams.md +74 -0
- package/docs/api/interfaces/RBACSessionTrackResult.md +52 -0
- package/docs/api/interfaces/ResourcePermissions.md +1 -1
- package/docs/api/interfaces/RevokeEventAppRoleParams.md +1 -1
- package/docs/api/interfaces/RoleBasedRouterContextType.md +1 -1
- package/docs/api/interfaces/RoleBasedRouterProps.md +1 -1
- package/docs/api/interfaces/RoleManagementResult.md +1 -1
- package/docs/api/interfaces/RouteAccessRecord.md +1 -1
- package/docs/api/interfaces/RouteConfig.md +1 -1
- package/docs/api/interfaces/SecureDataContextType.md +1 -1
- package/docs/api/interfaces/SecureDataProviderProps.md +1 -1
- package/docs/api/interfaces/SessionRestorationLoaderProps.md +15 -2
- package/docs/api/interfaces/StorageConfig.md +1 -1
- package/docs/api/interfaces/StorageFileInfo.md +1 -1
- package/docs/api/interfaces/StorageFileMetadata.md +1 -1
- package/docs/api/interfaces/StorageListOptions.md +1 -1
- package/docs/api/interfaces/StorageListResult.md +1 -1
- package/docs/api/interfaces/StorageUploadOptions.md +1 -1
- package/docs/api/interfaces/StorageUploadResult.md +1 -1
- package/docs/api/interfaces/StorageUrlOptions.md +1 -1
- package/docs/api/interfaces/StyleImport.md +1 -1
- package/docs/api/interfaces/SwitchProps.md +1 -1
- package/docs/api/interfaces/TabsContentProps.md +1 -1
- package/docs/api/interfaces/TabsListProps.md +1 -1
- package/docs/api/interfaces/TabsProps.md +1 -1
- package/docs/api/interfaces/TabsTriggerProps.md +43 -2
- package/docs/api/interfaces/TextareaProps.md +2 -2
- package/docs/api/interfaces/ToastActionElement.md +1 -1
- package/docs/api/interfaces/ToastProps.md +1 -1
- package/docs/api/interfaces/UnifiedAuthContextType.md +61 -61
- package/docs/api/interfaces/UnifiedAuthProviderProps.md +13 -13
- package/docs/api/interfaces/UseInactivityTrackerOptions.md +1 -1
- package/docs/api/interfaces/UseInactivityTrackerReturn.md +1 -1
- package/docs/api/interfaces/UsePublicEventLogoOptions.md +87 -0
- package/docs/api/interfaces/UsePublicEventLogoReturn.md +81 -0
- package/docs/api/interfaces/UsePublicEventOptions.md +3 -3
- package/docs/api/interfaces/UsePublicEventReturn.md +5 -5
- package/docs/api/interfaces/UsePublicFileDisplayOptions.md +2 -2
- package/docs/api/interfaces/UsePublicFileDisplayReturn.md +1 -1
- package/docs/api/interfaces/UsePublicRouteParamsReturn.md +1 -1
- package/docs/api/interfaces/UseResolvedScopeOptions.md +2 -2
- package/docs/api/interfaces/UseResolvedScopeReturn.md +1 -1
- package/docs/api/interfaces/UseResourcePermissionsOptions.md +1 -1
- package/docs/api/interfaces/UserEventAccess.md +1 -1
- package/docs/api/interfaces/UserMenuProps.md +4 -4
- package/docs/api/interfaces/UserProfile.md +7 -7
- package/docs/api/modules.md +484 -462
- package/docs/api-reference/components.md +186 -15
- package/docs/api-reference/deprecated.md +376 -0
- package/docs/api-reference/hooks.md +149 -19
- package/docs/api-reference/providers.md +61 -6
- package/docs/api-reference/rpc-functions.md +397 -0
- package/docs/api-reference/types.md +135 -78
- package/docs/api-reference/utilities.md +51 -380
- package/docs/architecture/README.md +49 -3
- package/docs/architecture/database-schema-requirements.md +40 -3
- package/docs/architecture/rbac-security-architecture.md +41 -4
- package/docs/architecture/services.md +127 -42
- package/docs/best-practices/README.md +51 -5
- package/docs/best-practices/accessibility.md +32 -3
- package/docs/best-practices/common-patterns.md +50 -3
- package/docs/best-practices/deployment.md +50 -4
- package/docs/best-practices/performance.md +50 -3
- package/docs/best-practices/security.md +94 -41
- package/docs/best-practices/testing.md +33 -4
- package/docs/core-concepts/authentication.md +5 -5
- package/docs/core-concepts/events.md +3 -3
- package/docs/core-concepts/organisations.md +3 -3
- package/docs/core-concepts/permissions.md +3 -3
- package/docs/core-concepts/rbac-system.md +5 -5
- package/docs/documentation-index.md +30 -8
- package/docs/getting-started/documentation-index.md +1 -1
- package/docs/getting-started/examples/README.md +7 -5
- package/docs/getting-started/examples/basic-auth-app.md +3 -0
- package/docs/getting-started/examples/full-featured-app.md +5 -3
- package/docs/getting-started/faq.md +6 -6
- package/docs/getting-started/installation-guide.md +192 -13
- package/docs/getting-started/local-development.md +303 -0
- package/docs/getting-started/quick-reference.md +3 -3
- package/docs/getting-started/quick-start.md +517 -0
- package/docs/implementation-guides/app-layout.md +45 -3
- package/docs/implementation-guides/authentication.md +66 -7
- package/docs/implementation-guides/component-styling.md +53 -3
- package/docs/implementation-guides/data-tables.md +76 -7
- package/docs/implementation-guides/datatable-filtering.md +1 -2
- package/docs/implementation-guides/datatable-rbac-usage.md +0 -1
- package/docs/implementation-guides/dynamic-colors.md +155 -4
- package/docs/implementation-guides/file-reference-system.md +72 -3
- package/docs/implementation-guides/file-upload-storage.md +72 -3
- package/docs/implementation-guides/forms.md +53 -3
- package/docs/implementation-guides/inactivity-tracking.md +53 -3
- package/docs/implementation-guides/large-datasets.md +1 -1
- package/docs/implementation-guides/navigation.md +55 -5
- package/docs/implementation-guides/organisation-security.md +72 -3
- package/docs/implementation-guides/performance.md +57 -1
- package/docs/implementation-guides/permission-enforcement.md +81 -8
- package/docs/implementation-guides/public-pages.md +560 -14
- package/docs/migration/MIGRATION_GUIDE.md +409 -50
- package/docs/migration/README.md +37 -3
- package/docs/migration/organisation-context-timing-fix.md +39 -4
- package/docs/migration/quick-migration-guide.md +41 -5
- package/docs/migration/rbac-migration.md +59 -3
- package/docs/migration/service-architecture.md +77 -14
- package/docs/rbac/README.md +79 -3
- package/docs/rbac/advanced-patterns.md +47 -3
- package/docs/rbac/api-reference.md +77 -8
- package/docs/rbac/event-based-apps.md +50 -5
- package/docs/rbac/examples/rbac-rls-integration-example.md +3 -3
- package/docs/rbac/examples.md +39 -3
- package/docs/rbac/getting-started.md +63 -4
- package/docs/rbac/quick-start.md +57 -5
- package/docs/rbac/rbac-rls-integration.md +68 -6
- package/docs/rbac/super-admin-guide.md +47 -3
- package/docs/rbac/troubleshooting.md +3 -3
- package/docs/security/README.md +68 -3
- package/docs/security/checklist.md +50 -3
- package/docs/standards/01-architecture-standard.md +39 -0
- package/docs/standards/02-api-and-rpc-standard.md +39 -0
- package/docs/standards/03-component-standard.md +32 -0
- package/docs/standards/04-code-style-standard.md +32 -0
- package/docs/standards/05-security-standard.md +30 -0
- package/docs/standards/06-testing-and-docs-standard.md +29 -0
- package/docs/standards/README.md +35 -0
- package/docs/styles/README.md +89 -8
- package/docs/testing/README.md +175 -24
- package/docs/troubleshooting/README.md +50 -3
- package/docs/troubleshooting/common-issues.md +271 -5
- package/docs/troubleshooting/debugging.md +54 -1
- package/docs/troubleshooting/migration.md +54 -1
- package/docs/troubleshooting/organisation-context-setup.md +29 -3
- package/docs/troubleshooting/styling-issues.md +246 -4
- package/{src/components/DataTable/examples → examples/DataTable}/GroupingAggregationExample.tsx +1 -1
- package/examples/{components 2/DataTable/HierarchicalActionsExample.tsx → DataTable/HierarchicalActionsExample.tsx} +7 -6
- package/{src/components/DataTable/examples → examples/DataTable}/HierarchicalExample.tsx +8 -6
- package/examples/{components 2/DataTable/PerformanceExample.tsx → DataTable/PerformanceExample.tsx} +2 -2
- package/examples/{components 2/DataTable/index.ts → DataTable/index.ts} +1 -0
- package/{src/components/Dialog/examples → examples/Dialog}/HtmlDialogExample.tsx +3 -3
- package/examples/{components 2/Dialog/ScrollableDialogExample.tsx → Dialog/ScrollableDialogExample.tsx} +1 -1
- package/{src/components/Dialog/examples → examples/Dialog}/SmartDialogExample.tsx +1 -1
- package/examples/{components 2/Dialog/index.ts → Dialog/index.ts} +0 -3
- package/examples/{features/public-pages → PublicPages}/CorrectPublicPageImplementation.tsx +52 -17
- package/examples/{features/public-pages → PublicPages}/PublicEventPage.tsx +65 -35
- package/examples/{features/public-pages → PublicPages}/PublicPageApp.tsx +52 -18
- package/examples/{features/public-pages → PublicPages}/PublicPageUsageExample.tsx +28 -15
- package/examples/README.md +81 -33
- package/examples/index.ts +14 -12
- package/examples/{RBAC → rbac}/CompleteRBACExample.tsx +1 -1
- package/examples/{features/rbac → rbac}/EventBasedApp.tsx +4 -4
- package/examples/{features/rbac → rbac}/PermissionExample.tsx +5 -3
- package/package.json +21 -27
- package/src/__tests__/helpers/test-utils.tsx +29 -3
- package/src/__tests__/rbac/PagePermissionGuard.test.tsx +7 -5
- package/src/components/Alert/Alert.test.tsx +2 -2
- package/src/components/Alert/Alert.tsx +4 -4
- package/src/components/Avatar/Avatar.test.tsx +17 -6
- package/src/components/Badge/Badge.test.tsx +1 -1
- package/src/components/Badge/Badge.tsx +2 -2
- package/src/components/Button/Button.test.tsx +2 -2
- package/src/components/Button/Button.tsx +11 -7
- package/src/components/Calendar/Calendar.test.tsx +41 -8
- package/src/components/Calendar/Calendar.tsx +39 -36
- package/src/components/Card/Card.tsx +51 -13
- package/src/components/Checkbox/Checkbox.test.tsx +36 -12
- package/src/components/DataTable/DataTable.test.tsx +1 -1
- package/src/components/DataTable/__tests__/DataTable.comprehensive.test.tsx +13 -7
- package/src/components/DataTable/__tests__/DataTable.default-state.test.tsx +14 -42
- package/src/components/DataTable/__tests__/DataTable.export.test.tsx +13 -10
- package/src/components/DataTable/__tests__/DataTable.grouping-aggregation.test.tsx +14 -11
- package/src/components/DataTable/__tests__/DataTable.hooks.test.tsx +4 -2
- package/src/components/DataTable/__tests__/DataTable.test.tsx +13 -7
- package/src/components/DataTable/__tests__/DataTableCore.test-setup.ts +13 -10
- package/src/components/DataTable/__tests__/DataTableCore.test.tsx +15 -11
- package/src/components/DataTable/__tests__/a11y.basic.test.tsx +12 -6
- package/src/components/DataTable/__tests__/keyboard.test.tsx +12 -6
- package/src/components/DataTable/__tests__/pagination.modes.test.tsx +10 -6
- package/src/components/DataTable/__tests__/test-utils/sharedTestUtils.tsx +1 -1
- package/src/components/DataTable/components/DataTableBody.tsx +10 -25
- package/src/components/DataTable/components/DataTableCore.tsx +1 -1
- package/src/components/DataTable/components/FilterRow.tsx +3 -1
- package/src/components/DataTable/components/ImportModal.tsx +1 -1
- package/src/components/DataTable/components/VirtualizedDataTable.tsx +9 -9
- package/src/components/DataTable/core/ColumnFactory.ts +6 -6
- package/src/components/DataTable/core/DataTableContext.tsx +14 -10
- package/src/components/DataTable/core/LocalDataAdapter.ts +2 -1
- package/src/components/DataTable/core/PluginRegistry.ts +3 -3
- package/src/components/DataTable/core/StateManager.ts +12 -11
- package/src/components/DataTable/core/__tests__/ActionManager.test.ts +104 -0
- package/src/components/DataTable/core/__tests__/DataManager.test.ts +101 -0
- package/src/components/DataTable/core/__tests__/LocalDataAdapter.test.ts +84 -0
- package/src/components/DataTable/core/__tests__/PluginRegistry.test.ts +102 -0
- package/src/components/DataTable/core/__tests__/StateManager.test.ts +104 -0
- package/src/components/DataTable/core/interfaces.ts +17 -17
- package/src/components/DataTable/hooks/__tests__/useDataTableConfiguration.test.ts +124 -0
- package/src/components/DataTable/hooks/__tests__/useDataTableDataPipeline.test.ts +117 -0
- package/src/components/DataTable/hooks/__tests__/useDataTablePermissions.test.ts +102 -0
- package/src/components/DataTable/hooks/__tests__/useEffectiveColumnOrder.test.ts +53 -0
- package/src/components/DataTable/hooks/useColumnOrderPersistence.ts +0 -2
- package/src/components/DataTable/hooks/useDataTablePermissions.ts +9 -8
- package/src/components/DataTable/types.ts +5 -5
- package/src/components/DataTable/utils/aggregationUtils.ts +4 -4
- package/src/components/DataTable/utils/columnUtils.ts +3 -2
- package/src/components/DataTable/utils/debugTools.ts +1 -1
- package/src/components/DataTable/utils/exportUtils.ts +6 -6
- package/src/components/DataTable/utils/hierarchicalSorting.ts +6 -6
- package/src/components/DataTable/utils/hierarchicalUtils.ts +0 -8
- package/src/components/DataTable/utils/index.ts +0 -1
- package/src/components/DataTable/utils/performanceUtils.ts +9 -4
- package/src/components/Dialog/Dialog.test.tsx +49 -27
- package/src/components/ErrorBoundary/ErrorBoundary.test.tsx +13 -8
- package/src/components/EventSelector/EventSelector.test.tsx +60 -12
- package/src/components/EventSelector/EventSelector.tsx +38 -15
- package/src/components/EventSelector/index.ts +2 -2
- package/src/components/FileDisplay/FileDisplay.test.tsx +143 -85
- package/src/components/FileDisplay/FileDisplay.tsx +1 -0
- package/src/components/FileUpload/FileUpload.test.tsx +532 -152
- package/src/components/FileUpload/FileUpload.tsx +43 -8
- package/src/components/Footer/Footer.test.tsx +19 -14
- package/src/components/Form/Form.test.tsx +96 -14
- package/src/components/Form/Form.tsx +210 -1
- package/src/components/Form/index.ts +3 -7
- package/src/components/Header/Header.test.tsx +24 -17
- package/src/components/Header/Header.tsx +3 -1
- package/src/components/InactivityWarningModal/InactivityWarningModal.tsx +2 -4
- package/src/components/Input/Input.test.tsx +61 -36
- package/src/components/Label/{__tests__/Label.test.tsx → Label.test.tsx} +2 -2
- package/src/components/Label/Label.tsx +2 -3
- package/src/components/LoadingSpinner/LoadingSpinner.test.tsx +6 -5
- package/src/components/LoadingSpinner/LoadingSpinner.tsx +6 -2
- package/src/components/LoginForm/LoginForm.test.tsx +14 -13
- package/src/components/LoginForm/LoginForm.tsx +1 -1
- package/src/components/LoginForm/index.ts +7 -0
- package/src/components/NavigationMenu/NavigationMenu.test.tsx +233 -20
- package/src/components/NavigationMenu/NavigationMenu.tsx +191 -55
- package/src/components/NavigationMenu/index.ts +1 -1
- package/src/components/OrganisationSelector/OrganisationSelector.test.tsx +20 -11
- package/src/components/OrganisationSelector/OrganisationSelector.tsx +1 -1
- package/src/components/PaceAppLayout/{__tests__/PaceAppLayout.integration.test.tsx → PaceAppLayout.integration.test.tsx} +272 -79
- package/src/components/PaceAppLayout/{__tests__/PaceAppLayout.performance.test.tsx → PaceAppLayout.performance.test.tsx} +155 -32
- package/src/components/PaceAppLayout/{__tests__/PaceAppLayout.security.test.tsx → PaceAppLayout.security.test.tsx} +211 -65
- package/src/components/PaceAppLayout/PaceAppLayout.test.tsx +498 -210
- package/src/components/PaceAppLayout/PaceAppLayout.tsx +63 -64
- package/src/components/PaceAppLayout/test-setup.tsx +192 -0
- package/src/components/PaceLoginPage/PaceLoginPage.test.tsx +193 -39
- package/src/components/{PasswordReset → PasswordChange}/PasswordChangeForm.test.tsx +2 -2
- package/src/components/{PasswordReset → PasswordChange}/PasswordChangeForm.tsx +10 -4
- package/src/components/PasswordChange/index.ts +2 -0
- package/src/components/Progress/Progress.test.tsx +11 -0
- package/src/components/Progress/Progress.tsx +1 -1
- package/src/components/Progress/index.ts +10 -0
- package/src/components/ProtectedRoute/ProtectedRoute.test.tsx +2 -1
- package/src/components/PublicLayout/PublicLayout.test.tsx +1210 -0
- package/src/components/PublicLayout/PublicPageLayout.tsx +190 -36
- package/src/components/PublicLayout/PublicPageProvider.tsx +8 -7
- package/src/components/PublicLayout/index.ts +10 -28
- package/src/components/Select/Select.test.tsx +7 -7
- package/src/components/Select/Select.tsx +277 -11
- package/src/components/Select/index.ts +1 -2
- package/src/components/SessionRestorationLoader/SessionRestorationLoader.test.tsx +232 -0
- package/src/components/SessionRestorationLoader/SessionRestorationLoader.tsx +40 -19
- package/src/components/Table/{__tests__/Table.test.tsx → Table.test.tsx} +94 -41
- package/src/components/Tabs/Tabs.test.tsx +10 -9
- package/src/components/Tabs/Tabs.tsx +61 -33
- package/src/components/Textarea/Textarea.test.tsx +31 -18
- package/src/components/Toast/Toast.tsx +2 -2
- package/src/components/Tooltip/Tooltip.test.tsx +1 -1
- package/src/components/UserMenu/UserMenu.test.tsx +7 -6
- package/src/components/UserMenu/UserMenu.tsx +2 -2
- package/src/components/index.ts +5 -4
- package/src/constants/performance.ts +19 -8
- package/src/hooks/__tests__/useAppConfig.unit.test.ts +21 -22
- package/src/hooks/__tests__/useEvents.unit.test.ts +5 -4
- package/src/hooks/__tests__/useOrganisationPermissions.unit.test.tsx +2 -2
- package/src/hooks/__tests__/usePermissionCache.simple.test.ts +17 -0
- package/src/hooks/__tests__/usePermissionCache.unit.test.ts +16 -11
- package/src/hooks/__tests__/usePublicEvent.simple.test.ts +1 -3
- package/src/hooks/__tests__/usePublicEvent.unit.test.ts +1 -3
- package/src/hooks/__tests__/useRBAC.unit.test.ts +24 -2
- package/src/hooks/index.ts +4 -0
- package/src/hooks/public/index.ts +2 -0
- package/src/hooks/public/usePublicEvent.ts +4 -6
- package/src/hooks/public/usePublicRouteParams.ts +1 -1
- package/src/hooks/services/useAuth.ts +2 -4
- package/src/hooks/services/useCurrentEvent.ts +1 -1
- package/src/hooks/useAppConfig.ts +1 -1
- package/src/hooks/useDataTablePerformance.ts +2 -2
- package/src/hooks/useEventTheme.ts +1 -1
- package/src/hooks/useEvents.ts +51 -10
- package/src/hooks/useOrganisationPermissions.test.ts +3 -3
- package/src/hooks/useOrganisationPermissions.ts +1 -1
- package/src/hooks/useOrganisationSecurity.ts +2 -2
- package/src/hooks/usePermissionCache.test.ts +9 -9
- package/src/hooks/usePermissionCache.ts +2 -2
- package/src/index.ts +19 -12
- package/src/providers/OrganisationProvider.tsx +73 -9
- package/src/providers/UnifiedAuthProvider.smoke.test.tsx +113 -13
- package/src/providers/__tests__/AuthProvider.test.tsx +2 -1
- package/src/providers/__tests__/EventProvider.test.tsx +24 -15
- package/src/providers/__tests__/OrganisationProvider.test.tsx +87 -36
- package/src/providers/__tests__/UnifiedAuthProvider.test.tsx +80 -24
- package/src/providers/index.ts +0 -3
- package/src/providers/services/AuthServiceProvider.tsx +2 -17
- package/src/providers/services/EventServiceProvider.tsx +11 -16
- package/src/providers/services/InactivityServiceProvider.tsx +9 -12
- package/src/providers/services/OrganisationServiceProvider.tsx +9 -12
- package/src/providers/services/UnifiedAuthProvider.tsx +85 -18
- package/src/providers/services/__tests__/AuthServiceProvider.integration.test.tsx +11 -4
- package/src/rbac/__tests__/scenarios.user-role.test.tsx +105 -21
- package/src/rbac/adapters.tsx +1 -1
- package/src/rbac/api.ts +20 -4
- package/src/rbac/audit-enhanced.ts +47 -2
- package/src/rbac/audit.ts +47 -2
- package/src/rbac/components/NavigationGuard.tsx +1 -1
- package/src/rbac/components/NavigationProvider.test.tsx +7 -6
- package/src/rbac/components/NavigationProvider.tsx +1 -1
- package/src/rbac/components/PagePermissionGuard.tsx +1 -1
- package/src/rbac/components/PagePermissionProvider.test.tsx +7 -6
- package/src/rbac/components/PagePermissionProvider.tsx +1 -1
- package/src/rbac/components/PermissionEnforcer.tsx +1 -1
- package/src/rbac/components/RoleBasedRouter.tsx +1 -1
- package/src/rbac/components/SecureDataProvider.test.tsx +7 -6
- package/src/rbac/components/SecureDataProvider.tsx +1 -1
- package/src/rbac/components/__tests__/EnhancedNavigationMenu.test.tsx +6 -6
- package/src/rbac/components/__tests__/NavigationGuard.test.tsx +11 -10
- package/src/rbac/components/__tests__/NavigationProvider.test.tsx +10 -11
- package/src/rbac/components/__tests__/PagePermissionGuard.race-condition.test.tsx +19 -15
- package/src/rbac/components/__tests__/PagePermissionGuard.test.tsx +13 -12
- package/src/rbac/components/__tests__/PagePermissionGuard.verification.test.tsx +19 -15
- package/src/rbac/components/__tests__/PagePermissionProvider.test.tsx +18 -18
- package/src/rbac/components/__tests__/PermissionEnforcer.test.tsx +11 -10
- package/src/rbac/components/__tests__/RoleBasedRouter.test.tsx +8 -7
- package/src/rbac/components/__tests__/SecureDataProvider.fixed.test.tsx +10 -11
- package/src/rbac/components/__tests__/SecureDataProvider.test.tsx +48 -19
- package/src/rbac/hooks/__tests__/useSecureSupabase.test.ts +476 -0
- package/src/rbac/hooks/index.ts +3 -0
- package/src/rbac/hooks/usePermissions.ts +31 -85
- package/src/rbac/hooks/useRBAC.test.ts +13 -1
- package/src/rbac/hooks/useRBAC.ts +13 -67
- package/src/rbac/hooks/useResolvedScope.ts +11 -0
- package/src/rbac/hooks/useSecureSupabase.ts +308 -0
- package/src/rbac/index.ts +3 -0
- package/src/rbac/secureClient.ts +53 -6
- package/src/rbac/security.ts +37 -1
- package/src/{types/rbac-functions.ts → rbac/types/functions.ts} +30 -30
- package/src/rbac/types.ts +3 -2
- package/src/services/AuthService.ts +33 -25
- package/src/services/EventService.ts +56 -44
- package/src/services/InactivityService.ts +33 -53
- package/src/services/OrganisationService.ts +36 -40
- package/src/services/__tests__/AuthService.restoreSession.test.ts +6 -2
- package/src/services/__tests__/EventService.test.ts +67 -33
- package/src/services/interfaces/IEventService.ts +1 -1
- package/src/styles/core.css +2 -2
- package/src/styles/index.ts +1 -5
- package/src/types/__tests__/guards.test.ts +1 -1
- package/src/types/__tests__/type-validation.test.ts +0 -1
- package/src/types/auth.ts +42 -2
- package/src/types/core.ts +251 -0
- package/src/types/database.ts +11 -496
- package/src/types/event.ts +102 -0
- package/src/types/file-reference.ts +6 -4
- package/src/types/guards.ts +2 -1
- package/src/types/index.ts +48 -14
- package/src/types/lodash.debounce.d.ts +15 -0
- package/src/types/organisation.ts +14 -10
- package/src/types/supabase.ts +15 -17
- package/src/utils/__tests__/secureErrors.unit.test.ts +1 -1
- package/src/utils/__tests__/validationUtils.unit.test.ts +0 -29
- package/src/utils/app/appNameResolver.ts +1 -1
- package/src/utils/dynamic/dynamicUtils.ts +3 -2
- package/src/utils/file-reference/index.ts +25 -6
- package/src/utils/security/secureErrors.ts +1 -1
- package/src/utils/validation/index.ts +6 -12
- package/src/utils/validation/validationUtils.ts +0 -13
- package/dist/UnifiedAuthProvider-B37ATQHE.js +0 -16
- package/dist/auth-DReDSLq9.d.ts +0 -16
- package/dist/chunk-3JI76CYK.js +0 -2444
- package/dist/chunk-3JI76CYK.js.map +0 -1
- package/dist/chunk-56XJ3TU6.js +0 -11
- package/dist/chunk-56XJ3TU6.js.map +0 -1
- package/dist/chunk-5MT24GKJ.js.map +0 -1
- package/dist/chunk-7QCC6MCP.js +0 -288
- package/dist/chunk-BESYRHQM.js.map +0 -1
- package/dist/chunk-BJPBT3CU.js +0 -21
- package/dist/chunk-BJPBT3CU.js.map +0 -1
- package/dist/chunk-BVYWGZVV.js.map +0 -1
- package/dist/chunk-CX5M4ZAG.js.map +0 -1
- package/dist/chunk-D7LCGMVS.js.map +0 -1
- package/dist/chunk-EGI6MUL6.js +0 -27
- package/dist/chunk-EGI6MUL6.js.map +0 -1
- package/dist/chunk-ERISIBYU.js.map +0 -1
- package/dist/chunk-HRO5HWN2.js.map +0 -1
- package/dist/chunk-HZLDFOE4.js.map +0 -1
- package/dist/chunk-JISYG63F.js +0 -70
- package/dist/chunk-JISYG63F.js.map +0 -1
- package/dist/chunk-LIMSTKYD.js +0 -61
- package/dist/chunk-LIMSTKYD.js.map +0 -1
- package/dist/chunk-OWAG3GSU.js.map +0 -1
- package/dist/chunk-PPMP5J6T.js.map +0 -1
- package/dist/chunk-Q5QRDWKI.js.map +0 -1
- package/dist/chunk-S5OFRT4M.js.map +0 -1
- package/dist/chunk-SBVILCCA.js.map +0 -1
- package/dist/chunk-TUMEWN34.js +0 -15
- package/dist/chunk-TUMEWN34.js.map +0 -1
- package/dist/chunk-XDNLUEXI.js +0 -138
- package/dist/chunk-XJ2HZOBU.js.map +0 -1
- package/dist/chunk-ZYTYSTO5.js.map +0 -1
- package/dist/chunk-ZZ2SS7NI.js +0 -237
- package/dist/chunk-ZZ2SS7NI.js.map +0 -1
- package/dist/database-C6jy7EOu.d.ts +0 -500
- package/dist/organisation-D6qRDtbF.d.ts +0 -93
- package/dist/schema-DTDZQe2u.d.ts +0 -28
- package/dist/unified-DQ4VcT7H.d.ts +0 -198
- package/dist/useInactivityTracker-TO6ZOF35.js +0 -11
- package/dist/validation.d.ts +0 -47
- package/dist/validation.js +0 -24
- package/dist/validation.js.map +0 -1
- package/docs/DOCUMENTATION_AUDIT.md +0 -172
- package/docs/DOCUMENTATION_STANDARD.md +0 -137
- package/docs/api/classes/PublicErrorBoundary.md +0 -132
- package/docs/api/interfaces/EventLogoProps.md +0 -152
- package/docs/api/interfaces/PublicErrorBoundaryProps.md +0 -94
- package/docs/api/interfaces/PublicErrorBoundaryState.md +0 -68
- package/docs/api/interfaces/PublicLoadingSpinnerProps.md +0 -86
- package/docs/architecture/rpc-function-standards.md +0 -1106
- package/docs/getting-started/consuming-app-vite-config.md +0 -239
- package/docs/implementation-guides/event-theming-summary.md +0 -226
- package/docs/implementation-guides/public-pages-advanced.md +0 -1038
- package/docs/migration/v0.4.15-tailwind-scanning.md +0 -278
- package/docs/migration/v0.4.16-css-first-approach.md +0 -312
- package/docs/migration/v0.4.17-source-path-fix.md +0 -235
- package/docs/rbac/RBAC_EVENT_CONTEXT_LOADING.md +0 -222
- package/docs/rbac/RBAC_LOGIN_SAFETY_FIX.md +0 -95
- package/docs/rbac/RBAC_V0.5.147_FIX.md +0 -117
- package/docs/rbac/README-rbac-rls-integration.md +0 -374
- package/docs/styles/usage.md +0 -227
- package/docs/testing/visual-testing.md +0 -120
- package/docs/troubleshooting/DEBUG_NETWORK_ERROR.md +0 -152
- package/docs/troubleshooting/FIX_SUPABASE_CORS.md +0 -184
- package/docs/troubleshooting/cake-page-permission-guard-issue-summary.md +0 -193
- package/docs/troubleshooting/database-view-compatibility.md +0 -125
- package/docs/troubleshooting/react-hooks-issue-analysis.md +0 -172
- package/docs/troubleshooting/tailwind-content-scanning.md +0 -219
- package/examples/RBAC/EventBasedApp.tsx +0 -239
- package/examples/RBAC/PermissionExample.tsx +0 -151
- package/examples/STRUCTURE.md +0 -125
- package/examples/components 2/DataTable/HierarchicalExample.tsx +0 -475
- package/examples/components 2/Dialog/BasicHtmlTest.tsx +0 -55
- package/examples/components 2/Dialog/DebugHtmlExample.tsx +0 -68
- package/examples/components 2/Dialog/HtmlDialogExample.tsx +0 -202
- package/examples/components 2/Dialog/SimpleHtmlTest.tsx +0 -61
- package/examples/components 2/Dialog/SmartDialogExample.tsx +0 -322
- package/examples/components 2/index.ts +0 -11
- package/examples/features/index.ts +0 -12
- package/examples/features/rbac/CompleteRBACExample.tsx +0 -324
- package/examples/features/rbac/index.ts +0 -13
- package/examples/public-pages/CorrectPublicPageImplementation.tsx +0 -301
- package/examples/public-pages/PublicEventPage.tsx +0 -274
- package/examples/public-pages/PublicPageApp.tsx +0 -308
- package/examples/public-pages/PublicPageUsageExample.tsx +0 -216
- package/examples/public-pages/index.ts +0 -14
- package/src/__tests__/TEST_STANDARD.md +0 -1008
- package/src/components/Checkbox/__mocks__/Checkbox.tsx +0 -2
- package/src/components/DataTable/examples/HierarchicalActionsExample.tsx +0 -421
- package/src/components/DataTable/examples/InitialPageSizeExample.tsx +0 -177
- package/src/components/DataTable/examples/PerformanceExample.tsx +0 -506
- package/src/components/DataTable/examples/__tests__/HierarchicalActionsExample.test.tsx +0 -316
- package/src/components/DataTable/examples/__tests__/HierarchicalExample.test.tsx +0 -45
- package/src/components/DataTable/examples/__tests__/InitialPageSizeExample.test.tsx +0 -211
- package/src/components/DataTable/examples/__tests__/PerformanceExample.test.tsx +0 -126
- package/src/components/Dialog/README.md +0 -804
- package/src/components/Dialog/examples/BasicHtmlTest.tsx +0 -55
- package/src/components/Dialog/examples/DebugHtmlExample.tsx +0 -68
- package/src/components/Dialog/examples/ScrollableDialogExample.tsx +0 -290
- package/src/components/Dialog/examples/SimpleHtmlTest.tsx +0 -61
- package/src/components/Dialog/examples/__tests__/HtmlDialogExample.test.tsx +0 -71
- package/src/components/Dialog/examples/__tests__/SimpleHtmlTest.test.tsx +0 -122
- package/src/components/Dialog/examples/__tests__/SmartDialogExample.unit.test.tsx +0 -147
- package/src/components/Dialog/utils/__tests__/safeHtml.unit.test.ts +0 -611
- package/src/components/Dialog/utils/safeHtml.ts +0 -185
- package/src/components/EventSelector/types.ts +0 -79
- package/src/components/Form/FormErrorSummary.tsx +0 -113
- package/src/components/Form/FormField.tsx +0 -249
- package/src/components/Form/FormFieldset.tsx +0 -127
- package/src/components/Form/FormLiveRegion.tsx +0 -198
- package/src/components/Input/__mocks__/Input.tsx +0 -2
- package/src/components/NavigationMenu/types.ts +0 -85
- package/src/components/PaceAppLayout/__tests__/PaceAppLayout.accessibility.test.tsx +0 -326
- package/src/components/PaceAppLayout/__tests__/PaceAppLayout.unit.test.tsx +0 -1078
- package/src/components/PasswordReset/PasswordResetForm.test.tsx +0 -597
- package/src/components/PasswordReset/PasswordResetForm.tsx +0 -201
- package/src/components/PasswordReset/index.ts +0 -2
- package/src/components/ProtectedRoute/README.md +0 -164
- package/src/components/PublicLayout/EventLogo.tsx +0 -175
- package/src/components/PublicLayout/PublicErrorBoundary.tsx +0 -282
- package/src/components/PublicLayout/PublicLoadingSpinner.tsx +0 -216
- package/src/components/PublicLayout/PublicPageContextChecker.tsx +0 -131
- package/src/components/PublicLayout/PublicPageDebugger.tsx +0 -104
- package/src/components/PublicLayout/PublicPageDiagnostic.tsx +0 -162
- package/src/components/PublicLayout/PublicPageFooter.tsx +0 -124
- package/src/components/PublicLayout/PublicPageHeader.tsx +0 -209
- package/src/components/PublicLayout/__tests__/PublicErrorBoundary.test.tsx +0 -449
- package/src/components/PublicLayout/__tests__/PublicLoadingSpinner.test.tsx +0 -393
- package/src/components/PublicLayout/__tests__/PublicPageContextChecker.test.tsx +0 -192
- package/src/components/PublicLayout/__tests__/PublicPageFooter.test.tsx +0 -351
- package/src/components/PublicLayout/__tests__/PublicPageHeader.test.tsx +0 -402
- package/src/components/PublicLayout/__tests__/PublicPageLayout.test.tsx +0 -460
- package/src/components/PublicLayout/__tests__/PublicPageProvider.test.tsx +0 -313
- package/src/components/Select/hooks.ts +0 -289
- package/src/hooks/useCounter.test.ts +0 -131
- package/src/hooks/useDebounce.test.ts +0 -375
- package/src/providers/AuthProvider.tsx +0 -15
- package/src/providers/EventProvider.tsx +0 -16
- package/src/providers/InactivityProvider.tsx +0 -15
- package/src/providers/OrganisationProvider.context.test.tsx +0 -169
- package/src/providers/UnifiedAuthProvider.tsx +0 -15
- package/src/types/theme.ts +0 -6
- package/src/types/unified.ts +0 -265
- package/src/utils/appConfig.ts +0 -47
- package/src/utils/appIdResolver.test.ts +0 -499
- package/src/utils/appIdResolver.ts +0 -130
- package/src/utils/appNameResolver.simple.test.ts +0 -212
- package/src/utils/appNameResolver.test.ts +0 -121
- package/src/utils/appNameResolver.ts +0 -191
- package/src/utils/audit.ts +0 -127
- package/src/utils/auth-utils.ts +0 -96
- package/src/utils/bundleAnalysis.ts +0 -129
- package/src/utils/debugLogger.ts +0 -67
- package/src/utils/deviceFingerprint.ts +0 -215
- package/src/utils/dynamicUtils.ts +0 -105
- package/src/utils/file-reference.test.ts +0 -788
- package/src/utils/file-reference.ts +0 -519
- package/src/utils/formatDate.test.ts +0 -237
- package/src/utils/formatting.ts +0 -170
- package/src/utils/lazyLoad.tsx +0 -44
- package/src/utils/logger.ts +0 -179
- package/src/utils/organisationContext.test.ts +0 -322
- package/src/utils/organisationContext.ts +0 -153
- package/src/utils/performanceBenchmark.ts +0 -64
- package/src/utils/performanceBudgets.ts +0 -110
- package/src/utils/permissionTypes.ts +0 -37
- package/src/utils/permissionUtils.test.ts +0 -393
- package/src/utils/permissionUtils.ts +0 -34
- package/src/utils/sanitization.ts +0 -264
- package/src/utils/schemaUtils.ts +0 -37
- package/src/utils/secureDataAccess.test.ts +0 -711
- package/src/utils/secureDataAccess.ts +0 -377
- package/src/utils/secureErrors.ts +0 -79
- package/src/utils/security.ts +0 -156
- package/src/utils/securityMonitor.ts +0 -45
- package/src/utils/sessionTracking.ts +0 -126
- package/src/utils/validation.ts +0 -111
- package/src/utils/validationUtils.ts +0 -120
- package/src/validation/index.ts +0 -12
- /package/dist/{DataTable-UA6CL4JI.js.map → DataTable-QAB34V6K.js.map} +0 -0
- /package/dist/{UnifiedAuthProvider-B37ATQHE.js.map → UnifiedAuthProvider-7F6T4B6K.js.map} +0 -0
- /package/dist/{api-45XYYO2A.js.map → api-ROMBCNKU.js.map} +0 -0
- /package/dist/{audit-64X3VJXB.js.map → audit-WRS3KJKI.js.map} +0 -0
- /package/dist/{chunk-PLDDJCW6.js.map → chunk-7D4SUZUM.js.map} +0 -0
- /package/dist/{useInactivityTracker-TO6ZOF35.js.map → chunk-KQCRWDSA.js.map} +0 -0
- /package/examples/{components 2/DataTable → DataTable}/InitialPageSizeExample.tsx +0 -0
- /package/examples/{features/public-pages → PublicPages}/index.ts +0 -0
- /package/examples/{RBAC → rbac}/index.ts +0 -0
|
@@ -1,374 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
lastUpdated: 2025-10-29T22:43:00+11:00
|
|
3
|
-
version: 0.5.76
|
|
4
|
-
reviewedBy: content-audit
|
|
5
|
-
---
|
|
6
|
-
|
|
7
|
-
# RBAC-RLS Integration: Dynamic Permission Enforcement
|
|
8
|
-
|
|
9
|
-
> **🚨 Critical Architecture Fix** - This integration solves the fundamental disconnect between configurable RBAC permissions and hardcoded RLS policies that was breaking core functionality.
|
|
10
|
-
|
|
11
|
-
## Overview
|
|
12
|
-
|
|
13
|
-
The RBAC-RLS integration provides dynamic permission enforcement that automatically respects RBAC configuration changes. This solves the critical issue where:
|
|
14
|
-
|
|
15
|
-
- **RBAC permissions are configurable** - Organisations can set which roles have which CRUD permissions for each page ✅
|
|
16
|
-
- **RLS policies were hardcoded** - Database-level security policies were static and didn't respect the dynamic RBAC configuration ❌
|
|
17
|
-
- **Result:** Users with valid RBAC permissions were blocked by RLS policies, breaking core functionality
|
|
18
|
-
|
|
19
|
-
## Quick Start
|
|
20
|
-
|
|
21
|
-
### 1. Apply the Migration
|
|
22
|
-
|
|
23
|
-
```bash
|
|
24
|
-
# Apply the complete RBAC-RLS integration
|
|
25
|
-
supabase migration up
|
|
26
|
-
```
|
|
27
|
-
|
|
28
|
-
### 2. Register Your Tables
|
|
29
|
-
|
|
30
|
-
```sql
|
|
31
|
-
-- Register tables for RBAC policy management
|
|
32
|
-
SELECT register_rbac_table('cake_meal', 'meals', 'CAKE', 'organisation_id', 'meal_event_id');
|
|
33
|
-
SELECT register_rbac_table('cake_delivery', 'deliveries', 'CAKE', 'organisation_id', 'delivery_event_id');
|
|
34
|
-
```
|
|
35
|
-
|
|
36
|
-
### 3. Update Policies
|
|
37
|
-
|
|
38
|
-
```sql
|
|
39
|
-
-- Update all policies to use RBAC-aware permission checking
|
|
40
|
-
SELECT update_all_rbac_policies();
|
|
41
|
-
```
|
|
42
|
-
|
|
43
|
-
### 4. Verify the Integration
|
|
44
|
-
|
|
45
|
-
```sql
|
|
46
|
-
-- Check policy health
|
|
47
|
-
SELECT * FROM check_rbac_policy_health();
|
|
48
|
-
|
|
49
|
-
-- Test permission checking
|
|
50
|
-
SELECT check_rbac_permission_with_context('delete', 'meals', 'org-uuid', 'event-123', 'CAKE');
|
|
51
|
-
```
|
|
52
|
-
|
|
53
|
-
## Key Features
|
|
54
|
-
|
|
55
|
-
### 🔄 Dynamic Permission Checking
|
|
56
|
-
- **Real-time RBAC respect** - Policies automatically adapt to permission changes
|
|
57
|
-
- **Context-aware security** - Checks both organisation and event context
|
|
58
|
-
- **Performance optimized** - Efficient database functions with proper indexing
|
|
59
|
-
|
|
60
|
-
### 🛠️ Automatic Policy Management
|
|
61
|
-
- **Change detection** - Policies update automatically when RBAC permissions change
|
|
62
|
-
- **Audit logging** - Complete trail of all policy changes
|
|
63
|
-
- **Health monitoring** - Continuous validation of policy consistency
|
|
64
|
-
|
|
65
|
-
### 🎯 Developer Tools
|
|
66
|
-
- **SQL function management** - Direct database functions for policy management
|
|
67
|
-
- **Comprehensive testing** - Built-in test suite for validation
|
|
68
|
-
- **Debug utilities** - Easy troubleshooting and monitoring
|
|
69
|
-
|
|
70
|
-
## Architecture
|
|
71
|
-
|
|
72
|
-
### Before (Problematic)
|
|
73
|
-
```
|
|
74
|
-
Frontend RBAC Check → ✅ User has permission
|
|
75
|
-
Database RLS Policy → ❌ Hardcoded role check fails
|
|
76
|
-
Result → Operation appears to succeed but fails silently
|
|
77
|
-
```
|
|
78
|
-
|
|
79
|
-
### After (Fixed)
|
|
80
|
-
```
|
|
81
|
-
Frontend RBAC Check → ✅ User has permission
|
|
82
|
-
Database RLS Policy → ✅ Dynamic RBAC check passes
|
|
83
|
-
Result → Operation succeeds as expected
|
|
84
|
-
```
|
|
85
|
-
|
|
86
|
-
## Core Functions
|
|
87
|
-
|
|
88
|
-
### Permission Checking
|
|
89
|
-
```sql
|
|
90
|
-
-- Basic permission check
|
|
91
|
-
SELECT check_rbac_permission('delete', 'meals', 'event-123', 'org-uuid', 'CAKE');
|
|
92
|
-
|
|
93
|
-
-- Context-aware permission check
|
|
94
|
-
SELECT check_rbac_permission_with_context('delete', 'meals', resource.organisation_id, resource.meal_event_id, 'CAKE');
|
|
95
|
-
```
|
|
96
|
-
|
|
97
|
-
### Policy Management
|
|
98
|
-
```sql
|
|
99
|
-
-- Create RBAC-aware policy
|
|
100
|
-
SELECT create_rbac_rls_policy('cake_meal', 'DELETE', 'meals', 'rbac_delete_meals');
|
|
101
|
-
|
|
102
|
-
-- Update all policies
|
|
103
|
-
SELECT update_all_rbac_policies();
|
|
104
|
-
|
|
105
|
-
-- Register new table
|
|
106
|
-
SELECT register_rbac_table('your_table', 'your_page', 'YOUR_APP');
|
|
107
|
-
```
|
|
108
|
-
|
|
109
|
-
## Policy Management
|
|
110
|
-
|
|
111
|
-
All policy management is done through SQL functions. Connect to your Supabase database and use these commands:
|
|
112
|
-
|
|
113
|
-
### Usage
|
|
114
|
-
|
|
115
|
-
```sql
|
|
116
|
-
-- List registered tables
|
|
117
|
-
SELECT * FROM rbac_policy_configs WHERE is_active = true;
|
|
118
|
-
|
|
119
|
-
-- Register a new table
|
|
120
|
-
SELECT register_rbac_table('cake_meal', 'meals', 'CAKE', 'organisation_id', 'meal_event_id');
|
|
121
|
-
|
|
122
|
-
-- Update policies for a specific table
|
|
123
|
-
SELECT update_rbac_policies_for_table('cake_meal', 'meals', 'CAKE');
|
|
124
|
-
|
|
125
|
-
-- Update all policies
|
|
126
|
-
SELECT * FROM update_all_rbac_policies();
|
|
127
|
-
|
|
128
|
-
-- Check policy health
|
|
129
|
-
SELECT * FROM check_rbac_policy_health();
|
|
130
|
-
|
|
131
|
-
-- View audit log
|
|
132
|
-
SELECT * FROM rbac_policy_audit
|
|
133
|
-
ORDER BY changed_at DESC
|
|
134
|
-
LIMIT 50;
|
|
135
|
-
|
|
136
|
-
-- Test permission check
|
|
137
|
-
SELECT check_rbac_permission_with_context(
|
|
138
|
-
'delete',
|
|
139
|
-
'meals',
|
|
140
|
-
'org-uuid-here',
|
|
141
|
-
'event-123'::uuid,
|
|
142
|
-
'CAKE'
|
|
143
|
-
);
|
|
144
|
-
```
|
|
145
|
-
|
|
146
|
-
## Migration Guide
|
|
147
|
-
|
|
148
|
-
### From Hardcoded to Dynamic
|
|
149
|
-
|
|
150
|
-
#### Before (Hardcoded)
|
|
151
|
-
```sql
|
|
152
|
-
CREATE POLICY "Users can delete meals for their events" ON cake_meal
|
|
153
|
-
FOR DELETE TO public
|
|
154
|
-
USING (EXISTS (SELECT 1 FROM rbac_event_app_roles r
|
|
155
|
-
WHERE r.user_id = auth.uid()
|
|
156
|
-
AND r.event_id::text = cake_meal.meal_event_id::text
|
|
157
|
-
AND r.role = 'event_admin'::rbac_event_app_role));
|
|
158
|
-
```
|
|
159
|
-
|
|
160
|
-
#### After (Dynamic)
|
|
161
|
-
```sql
|
|
162
|
-
CREATE POLICY "rbac_delete_meals" ON cake_meal
|
|
163
|
-
FOR DELETE
|
|
164
|
-
USING (
|
|
165
|
-
check_rbac_permission_with_context(
|
|
166
|
-
'delete',
|
|
167
|
-
'meals',
|
|
168
|
-
organisation_id,
|
|
169
|
-
meal_event_id,
|
|
170
|
-
'CAKE'
|
|
171
|
-
)
|
|
172
|
-
);
|
|
173
|
-
```
|
|
174
|
-
|
|
175
|
-
### Migration Steps
|
|
176
|
-
|
|
177
|
-
1. **Apply the migration** - Run the complete RBAC-RLS integration migration
|
|
178
|
-
2. **Register tables** - Use `register_rbac_table()` for each table you want to manage
|
|
179
|
-
3. **Update policies** - Use `update_all_rbac_policies()` to create RBAC-aware policies
|
|
180
|
-
4. **Test thoroughly** - Use the SQL test functions to verify everything works
|
|
181
|
-
5. **Monitor changes** - Use the audit log and health checks for ongoing monitoring
|
|
182
|
-
|
|
183
|
-
## Examples
|
|
184
|
-
|
|
185
|
-
### React Component Usage
|
|
186
|
-
```tsx
|
|
187
|
-
import { PagePermissionGuard } from '@jmruthers/pace-core/rbac';
|
|
188
|
-
|
|
189
|
-
function MealsPage() {
|
|
190
|
-
return (
|
|
191
|
-
<div>
|
|
192
|
-
<PagePermissionGuard
|
|
193
|
-
pageName="meals"
|
|
194
|
-
operation="delete"
|
|
195
|
-
fallback={<div>You don't have permission to delete meals</div>}
|
|
196
|
-
>
|
|
197
|
-
<button onClick={handleDeleteMeal}>
|
|
198
|
-
Delete Selected Meal
|
|
199
|
-
</button>
|
|
200
|
-
</PagePermissionGuard>
|
|
201
|
-
</div>
|
|
202
|
-
);
|
|
203
|
-
}
|
|
204
|
-
```
|
|
205
|
-
|
|
206
|
-
### Database Permission Testing
|
|
207
|
-
```sql
|
|
208
|
-
-- Test different permission scenarios
|
|
209
|
-
SELECT
|
|
210
|
-
'planner delete meals' as test_case,
|
|
211
|
-
check_rbac_permission_with_context('delete', 'meals', 'org-uuid', 'event-123', 'CAKE') as result
|
|
212
|
-
UNION ALL
|
|
213
|
-
SELECT
|
|
214
|
-
'planner delete deliveries',
|
|
215
|
-
check_rbac_permission_with_context('delete', 'deliveries', 'org-uuid', 'event-123', 'CAKE');
|
|
216
|
-
```
|
|
217
|
-
|
|
218
|
-
### Dynamic Permission Changes
|
|
219
|
-
```sql
|
|
220
|
-
-- Change permissions in real-time
|
|
221
|
-
UPDATE rbac_page_permissions
|
|
222
|
-
SET allowed = false
|
|
223
|
-
WHERE app_page_id = 'page-meals-id'
|
|
224
|
-
AND role_name = 'planner'
|
|
225
|
-
AND operation = 'delete';
|
|
226
|
-
|
|
227
|
-
-- Policies automatically update to reflect the change!
|
|
228
|
-
```
|
|
229
|
-
|
|
230
|
-
## Monitoring and Maintenance
|
|
231
|
-
|
|
232
|
-
### Health Checks
|
|
233
|
-
```sql
|
|
234
|
-
-- Regular health monitoring
|
|
235
|
-
SELECT * FROM check_rbac_policy_health();
|
|
236
|
-
|
|
237
|
-
-- Policy status overview
|
|
238
|
-
SELECT * FROM rbac_policy_status;
|
|
239
|
-
|
|
240
|
-
-- Recent changes
|
|
241
|
-
SELECT * FROM rbac_recent_changes;
|
|
242
|
-
```
|
|
243
|
-
|
|
244
|
-
### Audit Logging
|
|
245
|
-
```sql
|
|
246
|
-
-- View all policy changes
|
|
247
|
-
SELECT * FROM rbac_policy_audit
|
|
248
|
-
ORDER BY changed_at DESC;
|
|
249
|
-
|
|
250
|
-
-- Filter by success/failure
|
|
251
|
-
SELECT * FROM rbac_policy_audit
|
|
252
|
-
WHERE success = false
|
|
253
|
-
ORDER BY changed_at DESC;
|
|
254
|
-
```
|
|
255
|
-
|
|
256
|
-
## Troubleshooting
|
|
257
|
-
|
|
258
|
-
### Common Issues
|
|
259
|
-
|
|
260
|
-
#### 1. Policies Not Created
|
|
261
|
-
**Problem:** `create_rbac_rls_policy()` returns false
|
|
262
|
-
**Solution:**
|
|
263
|
-
- Check that the table exists and you have proper permissions
|
|
264
|
-
- Verify the page and app are properly configured
|
|
265
|
-
- Check the audit log for error details
|
|
266
|
-
|
|
267
|
-
#### 2. Permission Checks Fail
|
|
268
|
-
**Problem:** `check_rbac_permission()` returns false when it should return true
|
|
269
|
-
**Solution:**
|
|
270
|
-
- Verify the user has the correct role in `rbac_event_app_roles`
|
|
271
|
-
- Check that the page permissions exist in `rbac_page_permissions`
|
|
272
|
-
- Ensure the app and page are properly configured
|
|
273
|
-
- Test with SQL: `SELECT check_rbac_permission('delete', 'meals', 'event-123', 'org-uuid', 'CAKE');`
|
|
274
|
-
|
|
275
|
-
#### 3. Policies Not Updating
|
|
276
|
-
**Problem:** Changes to RBAC permissions don't reflect in RLS policies
|
|
277
|
-
**Solution:**
|
|
278
|
-
- Check that the table is registered in `rbac_policy_configs`
|
|
279
|
-
- Verify the trigger is working: `SELECT * FROM rbac_policy_audit ORDER BY changed_at DESC LIMIT 10;`
|
|
280
|
-
- Manually update: `SELECT update_rbac_policies_for_table('table_name', 'page_name');`
|
|
281
|
-
|
|
282
|
-
### Debug Commands
|
|
283
|
-
|
|
284
|
-
```sql
|
|
285
|
-
-- Check policy health
|
|
286
|
-
SELECT * FROM check_rbac_policy_health();
|
|
287
|
-
|
|
288
|
-
-- View recent changes
|
|
289
|
-
SELECT * FROM rbac_policy_audit
|
|
290
|
-
ORDER BY changed_at DESC
|
|
291
|
-
LIMIT 20;
|
|
292
|
-
|
|
293
|
-
-- Test specific permission
|
|
294
|
-
SELECT check_rbac_permission_with_context(
|
|
295
|
-
'delete',
|
|
296
|
-
'meals',
|
|
297
|
-
'org-uuid-here',
|
|
298
|
-
'event-123'::uuid,
|
|
299
|
-
'CAKE'
|
|
300
|
-
);
|
|
301
|
-
|
|
302
|
-
-- Update all policies
|
|
303
|
-
SELECT * FROM update_all_rbac_policies();
|
|
304
|
-
```
|
|
305
|
-
|
|
306
|
-
## Performance Considerations
|
|
307
|
-
|
|
308
|
-
### Optimization
|
|
309
|
-
- RBAC functions are optimized for performance with proper indexing
|
|
310
|
-
- Permission checks are cached at the application level
|
|
311
|
-
- Database queries are optimized for minimal overhead
|
|
312
|
-
|
|
313
|
-
### Monitoring
|
|
314
|
-
```sql
|
|
315
|
-
-- Check for slow permission checks
|
|
316
|
-
SELECT
|
|
317
|
-
query,
|
|
318
|
-
calls,
|
|
319
|
-
total_time,
|
|
320
|
-
mean_time
|
|
321
|
-
FROM pg_stat_statements
|
|
322
|
-
WHERE query LIKE '%check_rbac_permission%'
|
|
323
|
-
ORDER BY mean_time DESC;
|
|
324
|
-
```
|
|
325
|
-
|
|
326
|
-
## Security
|
|
327
|
-
|
|
328
|
-
### Best Practices
|
|
329
|
-
- Always use `check_rbac_permission_with_context()` for resource-specific operations
|
|
330
|
-
- Validate organisation and event context
|
|
331
|
-
- Test permission changes thoroughly
|
|
332
|
-
- Monitor the audit log for suspicious activity
|
|
333
|
-
|
|
334
|
-
### Principle of Least Privilege
|
|
335
|
-
- Default to deny, only allow explicitly granted permissions
|
|
336
|
-
- Regular security audits using health checks
|
|
337
|
-
- Complete audit trail of all permission changes
|
|
338
|
-
|
|
339
|
-
## Documentation
|
|
340
|
-
|
|
341
|
-
- **[Complete Integration Guide](./rbac-rls-integration.md)** - Detailed technical documentation
|
|
342
|
-
- **[Examples](./examples/rbac-rls-integration-example.md)** - Practical usage examples
|
|
343
|
-
- **[API Reference](./api-reference.md)** - Complete function reference
|
|
344
|
-
- **[Troubleshooting](./troubleshooting.md)** - Common issues and solutions
|
|
345
|
-
|
|
346
|
-
## Support
|
|
347
|
-
|
|
348
|
-
### Getting Help
|
|
349
|
-
1. Check the troubleshooting section above
|
|
350
|
-
2. Review the audit log for error details
|
|
351
|
-
3. Use the SQL functions for debugging
|
|
352
|
-
4. Check the health monitoring views
|
|
353
|
-
|
|
354
|
-
### Reporting Issues
|
|
355
|
-
When reporting issues, please include:
|
|
356
|
-
- The specific error message
|
|
357
|
-
- Relevant audit log entries
|
|
358
|
-
- Health check results
|
|
359
|
-
- Steps to reproduce the issue
|
|
360
|
-
|
|
361
|
-
## Conclusion
|
|
362
|
-
|
|
363
|
-
The RBAC-RLS integration provides a robust, scalable solution for dynamic permission enforcement. It solves the critical architectural issue where RBAC configuration and RLS policies were disconnected, ensuring that:
|
|
364
|
-
|
|
365
|
-
1. **Organisations have true control** over their permission systems
|
|
366
|
-
2. **Developers can rely on consistent behavior** across all operations
|
|
367
|
-
3. **Users get the functionality they expect** based on their assigned roles
|
|
368
|
-
4. **The system is maintainable and auditable** with clear change tracking
|
|
369
|
-
|
|
370
|
-
This integration is not just a bug fix - it's a fundamental improvement to the pace-core architecture that will benefit all current and future applications in the suite.
|
|
371
|
-
|
|
372
|
-
---
|
|
373
|
-
|
|
374
|
-
**🎉 Your pace-core system now has true dynamic permission enforcement!**
|
package/docs/styles/usage.md
DELETED
|
@@ -1,227 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
lastUpdated: 2025-10-29T22:43:00+11:00
|
|
3
|
-
version: 0.5.76
|
|
4
|
-
reviewedBy: content-audit
|
|
5
|
-
---
|
|
6
|
-
|
|
7
|
-
# PACE Core Styling Usage Guide
|
|
8
|
-
|
|
9
|
-
This guide explains how to integrate PACE Core's new styling system into your application.
|
|
10
|
-
|
|
11
|
-
## Quick Start
|
|
12
|
-
|
|
13
|
-
### 1. Install PACE Core
|
|
14
|
-
|
|
15
|
-
```bash
|
|
16
|
-
npm install @jmruthers/pace-core
|
|
17
|
-
```
|
|
18
|
-
|
|
19
|
-
### 2. Create Your App CSS File
|
|
20
|
-
|
|
21
|
-
Create `src/app.css` in your consuming app with your brand colors and source directives:
|
|
22
|
-
|
|
23
|
-
```css
|
|
24
|
-
@import "tailwindcss";
|
|
25
|
-
|
|
26
|
-
/* @source directives for Tailwind v4 content scanning */
|
|
27
|
-
@source "./src/**/*.{js,ts,jsx,tsx}";
|
|
28
|
-
@source "./node_modules/@jmruthers/pace-core/src/**/*.{js,ts,jsx,tsx}";
|
|
29
|
-
@source "./node_modules/@jmruthers/pace-core/src/components/**/*.{js,ts,jsx,tsx}";
|
|
30
|
-
@source "./node_modules/@jmruthers/pace-core/src/providers/**/*.{js,ts,jsx,tsx}";
|
|
31
|
-
@source "./node_modules/@jmruthers/pace-core/src/hooks/**/*.{js,ts,jsx,tsx}";
|
|
32
|
-
@source "./node_modules/@jmruthers/pace-core/src/utils/**/*.{js,ts,jsx,tsx}";
|
|
33
|
-
@source "./node_modules/@jmruthers/pace-core/src/types/**/*.{js,ts,jsx,tsx}";
|
|
34
|
-
@source "./node_modules/@jmruthers/pace-core/src/validation/**/*.{js,ts,jsx,tsx}";
|
|
35
|
-
@source "./node_modules/@jmruthers/pace-core/src/rbac/**/*.{js,ts,jsx,tsx}";
|
|
36
|
-
|
|
37
|
-
/* Define your brand color palettes */
|
|
38
|
-
@theme static {
|
|
39
|
-
/* Your main, secondary, and accent color palettes here */
|
|
40
|
-
/* See the styling guide for the complete structure */
|
|
41
|
-
}
|
|
42
|
-
```
|
|
43
|
-
|
|
44
|
-
### 3. Import Both CSS Files
|
|
45
|
-
|
|
46
|
-
In your app's entry point (e.g., `main.tsx` or root layout):
|
|
47
|
-
|
|
48
|
-
```tsx
|
|
49
|
-
// Import the core CSS file first
|
|
50
|
-
import '@jmruthers/pace-core/src/styles/core.css';
|
|
51
|
-
|
|
52
|
-
// Import your app-specific colors second
|
|
53
|
-
import './app.css';
|
|
54
|
-
```
|
|
55
|
-
|
|
56
|
-
### 4. Use Your Brand Colors
|
|
57
|
-
|
|
58
|
-
Your app now uses your custom color palette defined in `app.css`. All pace-core components will automatically use your brand colors through the semantic token system.
|
|
59
|
-
|
|
60
|
-
### 5. Use Components
|
|
61
|
-
|
|
62
|
-
Now you can use PACE Core components with native Tailwind utilities:
|
|
63
|
-
|
|
64
|
-
```tsx
|
|
65
|
-
import { Button, Card, DataTable } from '@jmruthers/pace-core';
|
|
66
|
-
|
|
67
|
-
function MyComponent() {
|
|
68
|
-
return (
|
|
69
|
-
<Card className="bg-main-50 border-main-200">
|
|
70
|
-
<h2 className="text-main-900">Welcome</h2>
|
|
71
|
-
<p className="text-sec-700">This uses your brand colors!</p>
|
|
72
|
-
<Button className="bg-main-600 hover:bg-main-700">
|
|
73
|
-
Click me
|
|
74
|
-
</Button>
|
|
75
|
-
</Card>
|
|
76
|
-
);
|
|
77
|
-
}
|
|
78
|
-
```
|
|
79
|
-
|
|
80
|
-
## Dynamic Theming
|
|
81
|
-
|
|
82
|
-
### Automatic Event Theming (Recommended)
|
|
83
|
-
|
|
84
|
-
If your app uses the `EventProvider`, simply call `useEventTheme()`:
|
|
85
|
-
|
|
86
|
-
```tsx
|
|
87
|
-
import { useEventTheme } from '@jmruthers/pace-core';
|
|
88
|
-
|
|
89
|
-
function MyApp() {
|
|
90
|
-
// Automatically applies event colors when an event is selected
|
|
91
|
-
useEventTheme();
|
|
92
|
-
|
|
93
|
-
return <div>Your app</div>;
|
|
94
|
-
}
|
|
95
|
-
```
|
|
96
|
-
|
|
97
|
-
This hook automatically:
|
|
98
|
-
- Applies event colors when an event is selected
|
|
99
|
-
- Clears theming when no event is selected
|
|
100
|
-
- Handles cleanup and error cases
|
|
101
|
-
- Works consistently across all apps
|
|
102
|
-
|
|
103
|
-
### Manual Organisation/Event Colors
|
|
104
|
-
|
|
105
|
-
For custom logic or organisation-based theming:
|
|
106
|
-
|
|
107
|
-
```tsx
|
|
108
|
-
import { applyPalette, clearPalette } from '@jmruthers/pace-core/theming/runtime';
|
|
109
|
-
|
|
110
|
-
// Apply organisation colors
|
|
111
|
-
function applyOrganisationColors(orgData: any) {
|
|
112
|
-
applyPalette({
|
|
113
|
-
main: orgData.colors.main,
|
|
114
|
-
sec: orgData.colors.sec,
|
|
115
|
-
acc: orgData.colors.acc
|
|
116
|
-
});
|
|
117
|
-
}
|
|
118
|
-
|
|
119
|
-
// Clear dynamic theming (return to app defaults)
|
|
120
|
-
function resetToAppColors() {
|
|
121
|
-
clearPalette();
|
|
122
|
-
}
|
|
123
|
-
```
|
|
124
|
-
|
|
125
|
-
### SSR Support
|
|
126
|
-
|
|
127
|
-
For server-side rendering, generate the theme CSS:
|
|
128
|
-
|
|
129
|
-
```tsx
|
|
130
|
-
import { generateSSRThemeCSS } from '@jmruthers/pace-core/theming/runtime';
|
|
131
|
-
|
|
132
|
-
// In your SSR setup
|
|
133
|
-
const themeCSS = generateSSRThemeCSS(paletteData);
|
|
134
|
-
// Inject into your HTML head
|
|
135
|
-
```
|
|
136
|
-
|
|
137
|
-
## Available Utilities
|
|
138
|
-
|
|
139
|
-
### Color Utilities
|
|
140
|
-
|
|
141
|
-
- `bg-main-50` through `bg-main-950`
|
|
142
|
-
- `text-main-50` through `text-main-950`
|
|
143
|
-
- `border-main-200`, `border-main-300`
|
|
144
|
-
- `ring-main-500`, `ring-sec-500`, `ring-acc-500`
|
|
145
|
-
|
|
146
|
-
Same patterns for `sec-*` and `acc-*` palettes.
|
|
147
|
-
|
|
148
|
-
### Semantic Color Utilities
|
|
149
|
-
|
|
150
|
-
PACE Core also provides semantic color utilities that automatically map to your palettes:
|
|
151
|
-
|
|
152
|
-
- `bg-background`, `text-foreground` - Main background and text
|
|
153
|
-
- `bg-primary`, `text-primary-foreground` - Primary actions
|
|
154
|
-
- `bg-secondary`, `text-secondary-foreground` - Secondary elements
|
|
155
|
-
- `bg-destructive`, `text-destructive-foreground` - Destructive actions
|
|
156
|
-
- `bg-muted`, `text-muted-foreground` - Muted content
|
|
157
|
-
- `bg-accent`, `text-accent-foreground` - Accent elements
|
|
158
|
-
- `bg-card`, `text-card-foreground` - Card backgrounds
|
|
159
|
-
- `bg-popover`, `text-popover-foreground` - Popover backgrounds
|
|
160
|
-
|
|
161
|
-
### Typography
|
|
162
|
-
|
|
163
|
-
- `font-sans` - Open Sans
|
|
164
|
-
- `font-serif` - Open Sans (serif fallback)
|
|
165
|
-
- `font-mono` - Reddit Mono
|
|
166
|
-
|
|
167
|
-
### Other Utilities
|
|
168
|
-
|
|
169
|
-
- `rounded-sm` through `rounded-2xl`
|
|
170
|
-
- `shadow-sm` through `shadow-2xl`
|
|
171
|
-
- Custom utilities: `.pace-text-balance`, `.pace-scrollbar-hide`
|
|
172
|
-
|
|
173
|
-
## Migration from Old System
|
|
174
|
-
|
|
175
|
-
### Before (Old System)
|
|
176
|
-
```tsx
|
|
177
|
-
// Old app-* classes
|
|
178
|
-
<div className="bg-main-500 text-main-50">
|
|
179
|
-
<Button className="bg-sec-600 hover:bg-sec-700">
|
|
180
|
-
Click me
|
|
181
|
-
</Button>
|
|
182
|
-
</div>
|
|
183
|
-
```
|
|
184
|
-
|
|
185
|
-
### After (New System)
|
|
186
|
-
```tsx
|
|
187
|
-
// New native utilities
|
|
188
|
-
<div className="bg-main-500 text-main-50">
|
|
189
|
-
<Button className="bg-sec-600 hover:bg-sec-700">
|
|
190
|
-
Click me
|
|
191
|
-
</Button>
|
|
192
|
-
</div>
|
|
193
|
-
```
|
|
194
|
-
|
|
195
|
-
## Constraints
|
|
196
|
-
|
|
197
|
-
- **No arbitrary values**: Use only standard utilities like `bg-main-600`, not `bg-[oklch(...)]`
|
|
198
|
-
- **No CVA**: Components use native Tailwind utilities, not class-variance-authority
|
|
199
|
-
- **No utility aliases**: Use standard Tailwind class names
|
|
200
|
-
- **Default palettes included**: pace-core provides sensible defaults, but you can override with `app.css`
|
|
201
|
-
- **Tailwind v4 only**: Uses CSS-first approach with `@theme` blocks, no `tailwind.config.js`
|
|
202
|
-
|
|
203
|
-
## Troubleshooting
|
|
204
|
-
|
|
205
|
-
### Colors Not Appearing
|
|
206
|
-
- Ensure you've imported `@jmruthers/pace-core/src/styles/core.css`
|
|
207
|
-
- If using custom palettes, check that your `app.css` defines the complete palette
|
|
208
|
-
- Verify Tailwind v4 is installed
|
|
209
|
-
- Check that font files are available in your `/fonts` directory
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
### Dynamic Theming Issues
|
|
213
|
-
- Verify palette data has correct structure (main/sec/acc with 50-950 shades)
|
|
214
|
-
- Check browser console for errors
|
|
215
|
-
- Use `isDynamicThemingActive()` to debug
|
|
216
|
-
|
|
217
|
-
## Visual Testing
|
|
218
|
-
|
|
219
|
-
For visual regression testing and component verification, see the [Visual Testing Guide](./visual-testing.md).
|
|
220
|
-
|
|
221
|
-
## Support
|
|
222
|
-
|
|
223
|
-
For issues or questions:
|
|
224
|
-
- Check the [GitHub repository](https://github.com/jmruthers/pace-core)
|
|
225
|
-
- Review component documentation
|
|
226
|
-
- See [Visual Testing Guide](./visual-testing.md) for visual regression testing
|
|
227
|
-
- Open an issue with reproduction steps
|
|
@@ -1,120 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
lastUpdated: 2025-10-29T22:43:00+11:00
|
|
3
|
-
version: 0.5.76
|
|
4
|
-
reviewedBy: content-audit
|
|
5
|
-
---
|
|
6
|
-
|
|
7
|
-
# Visual Testing Guide
|
|
8
|
-
|
|
9
|
-
This document outlines the visual testing approach for pace-core components to ensure visual parity after the styling refactor.
|
|
10
|
-
|
|
11
|
-
## Before/After Visual Testing
|
|
12
|
-
|
|
13
|
-
### Testing Approach
|
|
14
|
-
|
|
15
|
-
1. **Component Snapshots**: Each component should be tested with visual snapshots
|
|
16
|
-
2. **Color Variations**: Test with different palette combinations
|
|
17
|
-
4. **Responsive**: Test at different screen sizes
|
|
18
|
-
|
|
19
|
-
### Key Components to Test
|
|
20
|
-
|
|
21
|
-
#### Button Component
|
|
22
|
-
- **Variants**: default, destructive, outline, secondary, ghost, link
|
|
23
|
-
- **Sizes**: sm, default, lg, icon
|
|
24
|
-
- **States**: normal, hover, active, disabled, focus
|
|
25
|
-
|
|
26
|
-
#### Card Component
|
|
27
|
-
- **Variants**: default, outline, ghost
|
|
28
|
-
- **Sizes**: default, sm, lg
|
|
29
|
-
- **Content**: with/without header, footer, actions
|
|
30
|
-
|
|
31
|
-
#### DataTable Component
|
|
32
|
-
- **States**: empty, loading, with data
|
|
33
|
-
- **Features**: sorting, filtering, pagination
|
|
34
|
-
- **Responsive**: mobile, tablet, desktop
|
|
35
|
-
|
|
36
|
-
### Visual Regression Testing
|
|
37
|
-
|
|
38
|
-
#### Setup
|
|
39
|
-
```bash
|
|
40
|
-
# Install visual testing tools
|
|
41
|
-
npm install --save-dev @storybook/react @storybook/addon-storyshots
|
|
42
|
-
|
|
43
|
-
# Run visual tests
|
|
44
|
-
npm run test:visual
|
|
45
|
-
```
|
|
46
|
-
|
|
47
|
-
#### Test Cases
|
|
48
|
-
|
|
49
|
-
1. **Light Mode Default Palette**
|
|
50
|
-
- Use default main/sec/acc colors
|
|
51
|
-
- Verify all components render correctly
|
|
52
|
-
- Check color contrast ratios
|
|
53
|
-
|
|
54
|
-
- Check no hue shifts occur
|
|
55
|
-
|
|
56
|
-
3. **Dynamic Palette Replacement**
|
|
57
|
-
- Apply different organisation palettes
|
|
58
|
-
- Verify all components update correctly
|
|
59
|
-
- Test palette switching
|
|
60
|
-
|
|
61
|
-
4. **Custom App Palettes**
|
|
62
|
-
- Test with different brand colors
|
|
63
|
-
- Verify OKLCH format works correctly
|
|
64
|
-
- Check all shade variations (50-950)
|
|
65
|
-
|
|
66
|
-
### Visual Parity Checklist
|
|
67
|
-
|
|
68
|
-
- [ ] Button variants maintain same visual appearance
|
|
69
|
-
- [ ] Card shadows and borders unchanged
|
|
70
|
-
- [ ] DataTable styling consistent
|
|
71
|
-
- [ ] Typography hierarchy preserved
|
|
72
|
-
- [ ] Focus states work correctly
|
|
73
|
-
- [ ] Hover effects unchanged
|
|
74
|
-
- [ ] Spacing and layout identical
|
|
75
|
-
- [ ] Color contrast maintained
|
|
76
|
-
- [ ] Dynamic theming works
|
|
77
|
-
|
|
78
|
-
### Screenshot Comparison
|
|
79
|
-
|
|
80
|
-
#### Before (Legacy System)
|
|
81
|
-
- Components using `app-*` classes
|
|
82
|
-
- CVA-based styling
|
|
83
|
-
- Complex theming system
|
|
84
|
-
|
|
85
|
-
#### After (New System)
|
|
86
|
-
- Components using native utilities (`main-*`, `sec-*`, `acc-*`)
|
|
87
|
-
- No CVA dependency
|
|
88
|
-
- Simple runtime theming
|
|
89
|
-
|
|
90
|
-
### Testing Tools
|
|
91
|
-
|
|
92
|
-
1. **Chromatic** - Visual regression testing
|
|
93
|
-
2. **Percy** - Cross-browser visual testing
|
|
94
|
-
3. **Storybook** - Component isolation and testing
|
|
95
|
-
4. **Playwright** - Automated visual testing
|
|
96
|
-
|
|
97
|
-
### Manual Testing Checklist
|
|
98
|
-
|
|
99
|
-
- [ ] All components render without errors
|
|
100
|
-
- [ ] Colors display correctly in light mode
|
|
101
|
-
- [ ] Dynamic palette switching works
|
|
102
|
-
- [ ] No visual regressions detected
|
|
103
|
-
- [ ] Performance is maintained or improved
|
|
104
|
-
- [ ] Accessibility features work correctly
|
|
105
|
-
|
|
106
|
-
### Reporting Issues
|
|
107
|
-
|
|
108
|
-
If visual regressions are found:
|
|
109
|
-
|
|
110
|
-
1. Document the specific component and variant
|
|
111
|
-
2. Note the expected vs actual appearance
|
|
112
|
-
3. Check if it's a color mapping issue
|
|
113
|
-
4. Verify the palette values are correct
|
|
114
|
-
5. Test with different color combinations
|
|
115
|
-
|
|
116
|
-
### Maintenance
|
|
117
|
-
|
|
118
|
-
- Update visual tests when adding new components
|
|
119
|
-
- Re-run tests after palette changes
|
|
120
|
-
- Test dynamic theming with new palettes
|