@jmruthers/pace-core 0.5.193 → 0.6.2
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 +62 -0
- package/README.md +7 -1
- package/cursor-rules/00-pace-core-compliance.mdc +299 -0
- package/cursor-rules/01-standards-compliance.mdc +244 -0
- package/cursor-rules/02-project-structure.mdc +200 -0
- package/cursor-rules/03-solid-principles.mdc +222 -0
- package/cursor-rules/04-testing-standards.mdc +268 -0
- package/cursor-rules/05-bug-reports-and-features.mdc +246 -0
- package/cursor-rules/06-code-quality.mdc +309 -0
- package/cursor-rules/07-tech-stack-compliance.mdc +214 -0
- package/cursor-rules/08-markup-quality.mdc +452 -0
- package/cursor-rules/CHANGELOG.md +119 -0
- package/cursor-rules/README.md +192 -0
- package/dist/{AuthService-DjnJHDtC.d.ts → AuthService-BPvc3Ka0.d.ts} +54 -0
- package/dist/{DataTable-Be6dH_dR.d.ts → DataTable-BMRU8a1j.d.ts} +34 -2
- package/dist/{DataTable-5FU7IESH.js → DataTable-TPTKCX4D.js} +10 -9
- package/dist/{PublicPageProvider-C0Sm_e5k.d.ts → PublicPageProvider-DC6kCaqf.d.ts} +385 -261
- package/dist/{UnifiedAuthProvider-RGJTDE2C.js → UnifiedAuthProvider-CH6Z342H.js} +3 -3
- package/dist/{UnifiedAuthProvider-185Ih4dj.d.ts → UnifiedAuthProvider-CVcTjx-d.d.ts} +29 -0
- package/dist/{api-N774RPUA.js → api-MVVQZLJI.js} +2 -2
- package/dist/{chunk-KNC55RTG.js → chunk-24UVZUZG.js} +90 -54
- package/dist/chunk-24UVZUZG.js.map +1 -0
- package/dist/{chunk-HWIIPPNI.js → chunk-2UOI2FG5.js} +20 -20
- package/dist/chunk-2UOI2FG5.js.map +1 -0
- package/dist/{chunk-E3SPN4VZ 5.js → chunk-3XC4CPTD.js} +4345 -3986
- package/dist/chunk-3XC4CPTD.js.map +1 -0
- package/dist/{chunk-7EQTDTTJ.js → chunk-6J4GEEJR.js} +172 -45
- package/dist/chunk-6J4GEEJR.js.map +1 -0
- package/dist/{chunk-6C4YBBJM 5.js → chunk-6SOIHG6Z.js} +1 -1
- package/dist/chunk-6SOIHG6Z.js.map +1 -0
- package/dist/{chunk-7FLMSG37.js → chunk-EHMR7VYL.js} +25 -25
- package/dist/chunk-EHMR7VYL.js.map +1 -0
- package/dist/{chunk-I7PSE6JW.js → chunk-F2IMUDXZ.js} +2 -75
- package/dist/chunk-F2IMUDXZ.js.map +1 -0
- package/dist/{chunk-QWWZ5CAQ.js → chunk-FFQEQTNW.js} +7 -9
- package/dist/chunk-FFQEQTNW.js.map +1 -0
- package/dist/chunk-FMUCXFII.js +76 -0
- package/dist/chunk-FMUCXFII.js.map +1 -0
- package/dist/{chunk-HW3OVDUF.js → chunk-J36DSWQK.js} +1 -1
- package/dist/{chunk-HW3OVDUF.js.map → chunk-J36DSWQK.js.map} +1 -1
- package/dist/{chunk-SQGMNID3.js → chunk-L4OXEN46.js} +4 -5
- package/dist/chunk-L4OXEN46.js.map +1 -0
- package/dist/{chunk-R77UEZ4E 3.js → chunk-M43Y4SSO.js} +1 -1
- package/dist/chunk-M43Y4SSO.js.map +1 -0
- package/dist/{chunk-IIELH4DL.js → chunk-MMZ7JXPU.js} +60 -223
- package/dist/chunk-MMZ7JXPU.js.map +1 -0
- package/dist/{chunk-NOAYCWCX 5.js → chunk-NECFR5MM.js} +394 -312
- package/dist/chunk-NECFR5MM.js.map +1 -0
- package/dist/{chunk-BC4IJKSL.js → chunk-SFZUDBL5.js} +40 -4
- package/dist/chunk-SFZUDBL5.js.map +1 -0
- package/dist/{chunk-XNXXZ43G.js → chunk-XWQCNGTQ.js} +748 -364
- package/dist/chunk-XWQCNGTQ.js.map +1 -0
- package/dist/components.d.ts +6 -6
- package/dist/components.js +15 -12
- package/dist/components.js.map +1 -1
- package/dist/{functions-D_kgHktt.d.ts → functions-DHebl8-F.d.ts} +1 -1
- package/dist/hooks.d.ts +59 -126
- package/dist/hooks.js +19 -28
- package/dist/hooks.js.map +1 -1
- package/dist/index.d.ts +63 -16
- package/dist/index.js +23 -24
- package/dist/index.js.map +1 -1
- package/dist/providers.d.ts +21 -3
- package/dist/providers.js +2 -2
- package/dist/rbac/index.d.ts +146 -115
- package/dist/rbac/index.js +8 -11
- package/dist/theming/runtime.d.ts +1 -13
- package/dist/theming/runtime.js +1 -1
- package/dist/{timezone-_pgH8qrY.d.ts → timezone-CHhWg6b4.d.ts} +3 -10
- package/dist/{types-UU913iLA.d.ts → types-BeoeWV5I.d.ts} +8 -0
- package/dist/{types-CEpcvwwF.d.ts → types-CkbwOr4Y.d.ts} +6 -0
- package/dist/types.d.ts +2 -2
- package/dist/{usePublicRouteParams-TZe0gy-4.d.ts → usePublicRouteParams-1oMokgLF.d.ts} +34 -4
- package/dist/{useToast-C8gR5ir4.d.ts → useToast-AyaT-x7p.d.ts} +2 -2
- package/dist/utils.d.ts +4 -5
- package/dist/utils.js +15 -15
- package/dist/utils.js.map +1 -1
- package/docs/api/README.md +7 -1
- package/docs/api/classes/ColumnFactory.md +8 -8
- package/docs/api/classes/InvalidScopeError.md +4 -4
- package/docs/api/classes/Logger.md +1 -1
- 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 +1 -1
- package/docs/api/classes/RBACCache.md +1 -1
- package/docs/api/classes/RBACEngine.md +1 -1
- package/docs/api/classes/RBACError.md +4 -4
- package/docs/api/classes/RBACNotInitializedError.md +4 -4
- package/docs/api/classes/SecureSupabaseClient.md +18 -15
- package/docs/api/classes/StorageUtils.md +1 -1
- package/docs/api/enums/FileCategory.md +1 -1
- package/docs/api/enums/LogLevel.md +1 -1
- package/docs/api/enums/RBACErrorCode.md +1 -1
- package/docs/api/enums/RPCFunction.md +1 -1
- package/docs/api/interfaces/AddressFieldProps.md +1 -1
- package/docs/api/interfaces/AddressFieldRef.md +1 -1
- package/docs/api/interfaces/AggregateConfig.md +4 -4
- package/docs/api/interfaces/AutocompleteOptions.md +1 -1
- package/docs/api/interfaces/AvatarProps.md +1 -1
- package/docs/api/interfaces/BadgeProps.md +9 -2
- package/docs/api/interfaces/ButtonProps.md +7 -4
- package/docs/api/interfaces/CalendarProps.md +8 -5
- package/docs/api/interfaces/CardProps.md +8 -5
- package/docs/api/interfaces/ColorPalette.md +1 -1
- package/docs/api/interfaces/ColorShade.md +1 -1
- package/docs/api/interfaces/ComplianceResult.md +1 -1
- package/docs/api/interfaces/DataAccessRecord.md +9 -9
- package/docs/api/interfaces/DataRecord.md +1 -1
- package/docs/api/interfaces/DataTableAction.md +24 -21
- package/docs/api/interfaces/DataTableColumn.md +31 -31
- package/docs/api/interfaces/DataTableProps.md +1 -1
- package/docs/api/interfaces/DataTableToolbarButton.md +7 -7
- package/docs/api/interfaces/DatabaseComplianceResult.md +1 -1
- package/docs/api/interfaces/DatabaseIssue.md +1 -1
- package/docs/api/interfaces/EmptyStateConfig.md +5 -5
- package/docs/api/interfaces/EnhancedNavigationMenuProps.md +1 -1
- package/docs/api/interfaces/ErrorBoundaryProps.md +147 -0
- package/docs/api/interfaces/ErrorBoundaryProviderProps.md +36 -0
- package/docs/api/interfaces/ErrorBoundaryState.md +75 -0
- package/docs/api/interfaces/EventAppRoleData.md +1 -1
- package/docs/api/interfaces/ExportColumn.md +1 -1
- package/docs/api/interfaces/ExportOptions.md +8 -8
- package/docs/api/interfaces/FileDisplayProps.md +1 -1
- package/docs/api/interfaces/FileMetadata.md +1 -1
- package/docs/api/interfaces/FileReference.md +1 -1
- package/docs/api/interfaces/FileSizeLimits.md +1 -1
- package/docs/api/interfaces/FileUploadOptions.md +1 -1
- package/docs/api/interfaces/FileUploadProps.md +26 -23
- package/docs/api/interfaces/FooterProps.md +10 -8
- package/docs/api/interfaces/FormFieldProps.md +10 -10
- package/docs/api/interfaces/FormProps.md +1 -1
- package/docs/api/interfaces/GrantEventAppRoleParams.md +1 -1
- package/docs/api/interfaces/InactivityWarningModalProps.md +1 -1
- package/docs/api/interfaces/InputProps.md +7 -4
- package/docs/api/interfaces/LabelProps.md +1 -1
- package/docs/api/interfaces/LoggerConfig.md +1 -1
- package/docs/api/interfaces/LoginFormProps.md +14 -11
- 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 +11 -11
- package/docs/api/interfaces/NavigationMenuProps.md +15 -15
- package/docs/api/interfaces/NavigationProviderProps.md +1 -1
- package/docs/api/interfaces/Organisation.md +1 -1
- package/docs/api/interfaces/OrganisationContextType.md +1 -1
- package/docs/api/interfaces/OrganisationMembership.md +1 -1
- package/docs/api/interfaces/OrganisationProviderProps.md +1 -1
- package/docs/api/interfaces/OrganisationSecurityError.md +1 -1
- package/docs/api/interfaces/PaceAppLayoutProps.md +30 -27
- package/docs/api/interfaces/PaceLoginPageProps.md +6 -4
- 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/ParsedAddress.md +1 -1
- package/docs/api/interfaces/PermissionEnforcerProps.md +1 -1
- package/docs/api/interfaces/ProgressProps.md +1 -1
- package/docs/api/interfaces/ProtectedRouteProps.md +7 -26
- package/docs/api/interfaces/PublicPageFooterProps.md +9 -9
- package/docs/api/interfaces/PublicPageHeaderProps.md +10 -10
- package/docs/api/interfaces/PublicPageLayoutProps.md +7 -20
- package/docs/api/interfaces/QuickFix.md +1 -1
- package/docs/api/interfaces/RBACAccessValidateParams.md +1 -1
- package/docs/api/interfaces/RBACAccessValidateResult.md +1 -1
- package/docs/api/interfaces/RBACAuditLogParams.md +1 -1
- package/docs/api/interfaces/RBACAuditLogResult.md +1 -1
- package/docs/api/interfaces/RBACConfig.md +1 -1
- package/docs/api/interfaces/RBACContext.md +1 -1
- package/docs/api/interfaces/RBACLogger.md +1 -1
- package/docs/api/interfaces/RBACPageAccessCheckParams.md +1 -1
- package/docs/api/interfaces/RBACPerformanceMetrics.md +1 -1
- package/docs/api/interfaces/RBACPermissionCheckParams.md +1 -1
- package/docs/api/interfaces/RBACPermissionCheckResult.md +1 -1
- package/docs/api/interfaces/RBACPermissionsGetParams.md +1 -1
- package/docs/api/interfaces/RBACPermissionsGetResult.md +1 -1
- package/docs/api/interfaces/RBACResult.md +1 -1
- package/docs/api/interfaces/RBACRoleGrantParams.md +1 -1
- package/docs/api/interfaces/RBACRoleGrantResult.md +1 -1
- package/docs/api/interfaces/RBACRoleRevokeParams.md +1 -1
- package/docs/api/interfaces/RBACRoleRevokeResult.md +1 -1
- package/docs/api/interfaces/RBACRoleValidateParams.md +1 -1
- package/docs/api/interfaces/RBACRoleValidateResult.md +1 -1
- package/docs/api/interfaces/RBACRolesListParams.md +1 -1
- package/docs/api/interfaces/RBACRolesListResult.md +1 -1
- package/docs/api/interfaces/RBACSessionTrackParams.md +1 -1
- package/docs/api/interfaces/RBACSessionTrackResult.md +1 -1
- 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/RuntimeComplianceResult.md +1 -1
- package/docs/api/interfaces/SecureDataContextType.md +9 -9
- package/docs/api/interfaces/SecureDataProviderProps.md +8 -8
- package/docs/api/interfaces/SessionRestorationLoaderProps.md +3 -3
- package/docs/api/interfaces/SetupIssue.md +1 -1
- 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 +3 -3
- package/docs/api/interfaces/TextareaProps.md +1 -1
- package/docs/api/interfaces/ToastActionElement.md +4 -1
- package/docs/api/interfaces/ToastProps.md +1 -1
- package/docs/api/interfaces/UnifiedAuthContextType.md +58 -55
- package/docs/api/interfaces/UnifiedAuthProviderProps.md +15 -13
- package/docs/api/interfaces/UseFormDialogOptions.md +1 -1
- package/docs/api/interfaces/UseFormDialogReturn.md +1 -1
- package/docs/api/interfaces/UseInactivityTrackerOptions.md +11 -9
- package/docs/api/interfaces/UseInactivityTrackerReturn.md +8 -8
- package/docs/api/interfaces/UsePublicEventLogoOptions.md +6 -6
- package/docs/api/interfaces/UsePublicEventLogoReturn.md +9 -6
- package/docs/api/interfaces/UsePublicEventOptions.md +3 -3
- package/docs/api/interfaces/UsePublicEventReturn.md +8 -5
- package/docs/api/interfaces/UsePublicFileDisplayOptions.md +4 -4
- package/docs/api/interfaces/UsePublicFileDisplayReturn.md +12 -9
- package/docs/api/interfaces/UsePublicRouteParamsReturn.md +10 -7
- package/docs/api/interfaces/UseResolvedScopeOptions.md +1 -1
- package/docs/api/interfaces/UseResolvedScopeReturn.md +1 -1
- package/docs/api/interfaces/UseResourcePermissionsOptions.md +1 -1
- package/docs/api/interfaces/UserEventAccess.md +14 -11
- package/docs/api/interfaces/UserMenuProps.md +8 -6
- package/docs/api/interfaces/UserProfile.md +1 -1
- package/docs/api/modules.md +575 -634
- package/docs/architecture/database-schema-requirements.md +161 -0
- package/docs/core-concepts/rbac-system.md +3 -3
- package/docs/documentation-index.md +2 -4
- package/docs/getting-started/cursor-rules.md +263 -0
- package/docs/getting-started/installation-guide.md +6 -1
- package/docs/getting-started/quick-start.md +6 -1
- package/docs/migration/DOCUMENTATION_STRUCTURE.md +441 -0
- package/docs/migration/MIGRATION_GUIDE.md +6 -28
- package/docs/migration/README.md +52 -6
- package/docs/migration/V0.5.190_TO_V0.6.1_MIGRATION.md +1153 -0
- package/docs/migration/V0.6.0_REACT_19_MIGRATION.md +227 -0
- package/docs/migration/database-changes-december-2025.md +3 -3
- package/docs/rbac/event-based-apps.md +1 -1
- package/docs/rbac/getting-started.md +1 -1
- package/docs/rbac/quick-start.md +1 -1
- package/docs/standards/README.md +40 -0
- package/docs/troubleshooting/migration.md +4 -4
- package/examples/PublicPages/PublicEventPage.tsx +1 -1
- package/package.json +12 -6
- package/scripts/audit/core/checks/accessibility.cjs +197 -0
- package/scripts/audit/core/checks/api-usage.cjs +191 -0
- package/scripts/audit/core/checks/bundle.cjs +142 -0
- package/scripts/{check-pace-core-compliance.cjs → audit/core/checks/compliance.cjs} +737 -691
- package/scripts/audit/core/checks/config.cjs +54 -0
- package/scripts/audit/core/checks/coverage.cjs +84 -0
- package/scripts/audit/core/checks/dependencies.cjs +454 -0
- package/scripts/audit/core/checks/documentation.cjs +203 -0
- package/scripts/audit/core/checks/environment.cjs +128 -0
- package/scripts/audit/core/checks/error-handling.cjs +299 -0
- package/scripts/audit/core/checks/forms.cjs +172 -0
- package/scripts/audit/core/checks/heuristics.cjs +68 -0
- package/scripts/audit/core/checks/hooks.cjs +334 -0
- package/scripts/audit/core/checks/imports.cjs +244 -0
- package/scripts/audit/core/checks/performance.cjs +325 -0
- package/scripts/audit/core/checks/routes.cjs +117 -0
- package/scripts/audit/core/checks/state.cjs +130 -0
- package/scripts/audit/core/checks/structure.cjs +65 -0
- package/scripts/audit/core/checks/style.cjs +584 -0
- package/scripts/audit/core/checks/testing.cjs +122 -0
- package/scripts/audit/core/checks/typescript.cjs +61 -0
- package/scripts/audit/core/scanner.cjs +199 -0
- package/scripts/audit/core/utils.cjs +137 -0
- package/scripts/audit/index.cjs +223 -0
- package/scripts/audit/reporters/console.cjs +151 -0
- package/scripts/audit/reporters/json.cjs +54 -0
- package/scripts/audit/reporters/markdown.cjs +124 -0
- package/scripts/audit-consuming-app.cjs +86 -0
- package/scripts/build-docs/build-decision.js +240 -0
- package/scripts/build-docs/cache-utils.js +105 -0
- package/scripts/build-docs/content-normalization.js +150 -0
- package/scripts/build-docs/file-utils.js +105 -0
- package/scripts/build-docs/git-utils.js +86 -0
- package/scripts/build-docs/hash-utils.js +116 -0
- package/scripts/build-docs/typedoc-runner.js +220 -0
- package/scripts/build-docs-incremental.js +77 -913
- package/scripts/install-cursor-rules.cjs +236 -0
- package/scripts/utils/command-runner.js +16 -11
- package/scripts/validate-formats.js +61 -56
- package/scripts/validate-master.js +74 -69
- package/scripts/validate-pre-publish.js +70 -65
- package/src/__tests__/helpers/test-providers.tsx +1 -1
- package/src/__tests__/helpers/test-utils.tsx +1 -1
- package/src/__tests__/hooks/usePermissions.test.ts +2 -2
- package/src/components/Alert/Alert.test.tsx +12 -18
- package/src/components/Alert/Alert.tsx +5 -7
- package/src/components/Avatar/Avatar.test.tsx +4 -4
- package/src/components/Badge/Badge.tsx +16 -4
- package/src/components/Button/Button.tsx +27 -4
- package/src/components/Calendar/Calendar.tsx +9 -3
- package/src/components/Card/Card.tsx +4 -0
- package/src/components/Checkbox/Checkbox.test.tsx +12 -12
- package/src/components/Checkbox/Checkbox.tsx +2 -2
- package/src/components/DataTable/DataTable.test.tsx +57 -93
- package/src/components/DataTable/DataTable.tsx +40 -6
- package/src/components/DataTable/__tests__/DataTableCore.test-setup.ts +5 -6
- package/src/components/DataTable/__tests__/pagination.modes.test.tsx +29 -7
- package/src/components/DataTable/__tests__/ssr.strict-mode.test.tsx +12 -12
- package/src/components/DataTable/__tests__/test-utils/sharedTestUtils.tsx +2 -3
- package/src/components/DataTable/components/AccessDeniedPage.tsx +17 -26
- package/src/components/DataTable/components/ActionButtons.tsx +10 -7
- package/src/components/DataTable/components/BulkOperationsDropdown.tsx +2 -2
- package/src/components/DataTable/components/ColumnFilter.tsx +10 -0
- package/src/components/DataTable/components/ColumnVisibilityDropdown.tsx +12 -0
- package/src/components/DataTable/components/DataTableBody.tsx +8 -0
- package/src/components/DataTable/components/DataTableCore.tsx +200 -561
- package/src/components/DataTable/components/DataTableErrorBoundary.tsx +11 -0
- package/src/components/DataTable/components/DataTableLayout.tsx +559 -0
- package/src/components/DataTable/components/DataTableModals.tsx +9 -1
- package/src/components/DataTable/components/DataTableToolbar.tsx +8 -0
- package/src/components/DataTable/components/DraggableColumnHeader.tsx +12 -0
- package/src/components/DataTable/components/EditFields.tsx +307 -0
- package/src/components/DataTable/components/EditableRow.tsx +9 -1
- package/src/components/DataTable/components/EmptyState.tsx +10 -0
- package/src/components/DataTable/components/FilterRow.tsx +12 -0
- package/src/components/DataTable/components/GroupHeader.tsx +12 -0
- package/src/components/DataTable/components/GroupingDropdown.tsx +12 -0
- package/src/components/DataTable/components/ImportModal.tsx +7 -0
- package/src/components/DataTable/components/LoadingState.tsx +6 -0
- package/src/components/DataTable/components/PaginationControls.tsx +16 -1
- package/src/components/DataTable/components/RowComponent.tsx +391 -0
- package/src/components/DataTable/components/UnifiedTableBody.tsx +62 -852
- package/src/components/DataTable/components/VirtualizedDataTable.tsx +16 -4
- package/src/components/DataTable/components/__tests__/AccessDeniedPage.test.tsx +4 -2
- package/src/components/DataTable/components/__tests__/DataTableModals.test.tsx +23 -23
- package/src/components/DataTable/components/__tests__/EditableRow.test.tsx +11 -11
- package/src/components/DataTable/components/__tests__/ExpandButton.test.tsx +36 -36
- package/src/components/DataTable/components/__tests__/GroupHeader.test.tsx +27 -27
- package/src/components/DataTable/components/__tests__/ImportModal.test.tsx +39 -39
- package/src/components/DataTable/components/__tests__/UnifiedTableBody.test.tsx +33 -33
- package/src/components/DataTable/components/__tests__/ViewRowModal.test.tsx +29 -29
- package/src/components/DataTable/components/cellValueUtils.ts +40 -0
- package/src/components/DataTable/components/hooks/useImportModalFocus.ts +53 -0
- package/src/components/DataTable/components/hooks/usePermissionTracking.ts +126 -0
- package/src/components/DataTable/context/DataTableContext.tsx +50 -0
- package/src/components/DataTable/core/ColumnFactory.ts +31 -0
- package/src/components/DataTable/core/DataTableContext.tsx +32 -1
- package/src/components/DataTable/hooks/useColumnOrderPersistence.ts +10 -0
- package/src/components/DataTable/hooks/useColumnReordering.ts +14 -2
- package/src/components/DataTable/hooks/useColumnVisibilityPersistence.ts +10 -0
- package/src/components/DataTable/hooks/useDataTableDataPipeline.ts +16 -0
- package/src/components/DataTable/hooks/useDataTablePermissions.ts +124 -32
- package/src/components/DataTable/hooks/useDataTableState.ts +35 -1
- package/src/components/DataTable/hooks/useEffectiveColumnOrder.ts +12 -0
- package/src/components/DataTable/hooks/useKeyboardNavigation.ts +2 -2
- package/src/components/DataTable/hooks/useServerSideDataEffect.ts +11 -0
- package/src/components/DataTable/hooks/useTableColumns.ts +8 -0
- package/src/components/DataTable/hooks/useTableHandlers.ts +14 -0
- package/src/components/DataTable/styles.ts +6 -6
- package/src/components/DataTable/types.ts +6 -10
- package/src/components/DataTable/utils/a11yUtils.ts +7 -0
- package/src/components/DataTable/utils/debugTools.ts +18 -113
- package/src/components/DataTable/utils/errorHandling.ts +12 -0
- package/src/components/DataTable/utils/exportUtils.ts +9 -0
- package/src/components/DataTable/utils/flexibleImport.ts +12 -48
- package/src/components/DataTable/utils/paginationUtils.ts +8 -0
- package/src/components/DataTable/utils/performanceUtils.ts +5 -1
- package/src/components/DatePickerWithTimezone/DatePickerWithTimezone.test.tsx +8 -14
- package/src/components/Dialog/Dialog.tsx +8 -7
- package/src/components/ErrorBoundary/ErrorBoundary.test.tsx +180 -1
- package/src/components/ErrorBoundary/ErrorBoundary.tsx +46 -6
- package/src/components/ErrorBoundary/ErrorBoundaryContext.tsx +129 -0
- package/src/components/ErrorBoundary/index.ts +27 -2
- package/src/components/EventSelector/EventSelector.tsx +4 -1
- package/src/components/FileDisplay/FileDisplay.test.tsx +2 -2
- package/src/components/FileDisplay/FileDisplay.tsx +32 -18
- package/src/components/FileUpload/FileUpload.tsx +22 -2
- package/src/components/Footer/Footer.test.tsx +16 -16
- package/src/components/Footer/Footer.tsx +15 -12
- package/src/components/Form/Form.test.tsx +36 -15
- package/src/components/Form/Form.tsx +31 -26
- package/src/components/Header/Header.tsx +22 -11
- package/src/components/InactivityWarningModal/InactivityWarningModal.test.tsx +40 -40
- package/src/components/InactivityWarningModal/InactivityWarningModal.tsx +1 -1
- package/src/components/Input/Input.test.tsx +2 -2
- package/src/components/Input/Input.tsx +36 -34
- package/src/components/Label/Label.tsx +1 -1
- package/src/components/LoadingSpinner/LoadingSpinner.test.tsx +4 -4
- package/src/components/LoadingSpinner/LoadingSpinner.tsx +1 -1
- package/src/components/LoginForm/LoginForm.test.tsx +42 -42
- package/src/components/LoginForm/LoginForm.tsx +12 -8
- package/src/components/NavigationMenu/NavigationMenu.tsx +15 -514
- package/src/components/NavigationMenu/types.ts +56 -0
- package/src/components/NavigationMenu/useNavigationFiltering.ts +390 -0
- package/src/components/OrganisationSelector/OrganisationSelector.tsx +3 -0
- package/src/components/PaceAppLayout/PaceAppLayout.performance.test.tsx +1 -1
- package/src/components/PaceAppLayout/PaceAppLayout.test.tsx +54 -52
- package/src/components/PaceAppLayout/PaceAppLayout.tsx +33 -12
- package/src/components/PaceAppLayout/README.md +1 -1
- package/src/components/PaceAppLayout/test-setup.tsx +1 -2
- package/src/components/PaceLoginPage/PaceLoginPage.tsx +4 -1
- package/src/components/PasswordChange/PasswordChangeForm.test.tsx +33 -33
- package/src/components/PasswordChange/PasswordChangeForm.tsx +10 -1
- package/src/components/Progress/Progress.tsx +1 -1
- package/src/components/ProtectedRoute/ProtectedRoute.tsx +3 -9
- package/src/components/PublicLayout/PublicPageLayout.tsx +3 -6
- package/src/components/PublicLayout/PublicPageProvider.tsx +4 -0
- package/src/components/Select/Select.tsx +95 -438
- package/src/components/Select/context.ts +23 -0
- package/src/components/Select/hooks/useSelectEvents.ts +87 -0
- package/src/components/Select/hooks/useSelectSearch.ts +91 -0
- package/src/components/Select/hooks/useSelectState.ts +104 -0
- package/src/components/Select/index.ts +9 -1
- package/src/components/Select/types.ts +123 -0
- package/src/components/Select/utils/text.ts +26 -0
- package/src/components/SessionRestorationLoader/SessionRestorationLoader.tsx +5 -6
- package/src/components/Switch/Switch.tsx +4 -4
- package/src/components/Table/Table.tsx +1 -1
- package/src/components/Tabs/Tabs.tsx +1 -1
- package/src/components/Textarea/Textarea.tsx +27 -29
- package/src/components/Toast/Toast.tsx +5 -1
- package/src/components/Tooltip/Tooltip.tsx +3 -3
- package/src/components/UserMenu/UserMenu.test.tsx +24 -11
- package/src/components/UserMenu/UserMenu.tsx +22 -19
- package/src/components/index.ts +2 -2
- package/src/hooks/__tests__/hooks.integration.test.tsx +80 -55
- package/src/hooks/__tests__/index.unit.test.ts +2 -5
- package/src/hooks/__tests__/useStorage.unit.test.ts +36 -36
- package/src/hooks/index.ts +1 -2
- package/src/hooks/public/usePublicEvent.ts +5 -1
- package/src/hooks/public/usePublicEventLogo.ts +5 -1
- package/src/hooks/public/usePublicFileDisplay.ts +4 -0
- package/src/hooks/public/usePublicRouteParams.ts +5 -1
- package/src/hooks/services/useAuth.ts +32 -0
- package/src/hooks/services/useCurrentEvent.ts +6 -0
- package/src/hooks/services/useCurrentOrganisation.ts +6 -0
- package/src/hooks/useDataTableState.ts +8 -18
- package/src/hooks/useDebounce.ts +9 -0
- package/src/hooks/useEventTheme.ts +6 -0
- package/src/hooks/useFileDisplay.ts +4 -0
- package/src/hooks/useFileReference.ts +25 -7
- package/src/hooks/useFileUrl.ts +11 -1
- package/src/hooks/useFocusManagement.ts +16 -2
- package/src/hooks/useFocusTrap.ts +7 -4
- package/src/hooks/useFormDialog.ts +8 -7
- package/src/hooks/useInactivityTracker.ts +4 -1
- package/src/hooks/useKeyboardShortcuts.ts +4 -0
- package/src/hooks/useOrganisationPermissions.ts +4 -0
- package/src/hooks/useOrganisationSecurity.ts +4 -0
- package/src/hooks/usePerformanceMonitor.ts +4 -0
- package/src/hooks/usePermissionCache.ts +8 -1
- package/src/hooks/useQueryCache.ts +12 -1
- package/src/hooks/useSessionRestoration.ts +4 -0
- package/src/hooks/useStorage.ts +4 -0
- package/src/hooks/useToast.ts +3 -3
- package/src/index.ts +2 -1
- package/src/providers/__tests__/OrganisationProvider.test.tsx +115 -49
- package/src/providers/__tests__/ProviderLifecycle.test.tsx +21 -6
- package/src/providers/__tests__/UnifiedAuthProvider.test.tsx +10 -10
- package/src/providers/services/AuthServiceProvider.tsx +18 -0
- package/src/providers/services/EventServiceProvider.tsx +18 -0
- package/src/providers/services/InactivityServiceProvider.tsx +18 -0
- package/src/providers/services/OrganisationServiceProvider.tsx +18 -0
- package/src/providers/services/UnifiedAuthProvider.tsx +58 -22
- package/src/providers/services/__tests__/AuthServiceProvider.integration.test.tsx +33 -7
- package/src/rbac/README.md +1 -1
- package/src/rbac/__tests__/adapters.comprehensive.test.tsx +26 -26
- package/src/rbac/__tests__/scenarios.user-role.test.tsx +4 -5
- package/src/rbac/adapters.tsx +14 -5
- package/src/rbac/api.ts +100 -67
- package/src/rbac/components/EnhancedNavigationMenu.tsx +1 -1
- package/src/rbac/components/NavigationGuard.tsx +1 -1
- package/src/rbac/components/NavigationProvider.tsx +5 -2
- package/src/rbac/components/PagePermissionGuard.tsx +158 -18
- package/src/rbac/components/PagePermissionProvider.tsx +1 -1
- package/src/rbac/components/PermissionEnforcer.tsx +1 -1
- package/src/rbac/components/RoleBasedRouter.tsx +6 -2
- package/src/rbac/components/SecureDataProvider.test.tsx +84 -49
- package/src/rbac/components/SecureDataProvider.tsx +21 -6
- package/src/rbac/components/__tests__/PagePermissionGuard.race-condition.test.tsx +24 -14
- package/src/rbac/components/__tests__/PagePermissionGuard.test.tsx +7 -0
- package/src/rbac/components/__tests__/PagePermissionGuard.verification.test.tsx +14 -6
- package/src/rbac/components/__tests__/RoleBasedRouter.test.tsx +15 -4
- package/src/rbac/components/__tests__/SecureDataProvider.fixed.test.tsx +148 -24
- package/src/rbac/components/__tests__/SecureDataProvider.test.tsx +81 -15
- package/src/rbac/engine.ts +38 -14
- package/src/rbac/hooks/permissions/index.ts +7 -0
- package/src/rbac/hooks/permissions/useAccessLevel.ts +105 -0
- package/src/rbac/hooks/permissions/useCachedPermissions.ts +79 -0
- package/src/rbac/hooks/permissions/useCan.ts +347 -0
- package/src/rbac/hooks/permissions/useHasAllPermissions.ts +90 -0
- package/src/rbac/hooks/permissions/useHasAnyPermission.ts +90 -0
- package/src/rbac/hooks/permissions/useMultiplePermissions.ts +93 -0
- package/src/rbac/hooks/permissions/usePermissions.ts +253 -0
- package/src/rbac/hooks/useCan.test.ts +71 -64
- package/src/rbac/hooks/usePermissions.ts +14 -995
- package/src/rbac/hooks/useResourcePermissions.test.ts +54 -18
- package/src/rbac/hooks/useResourcePermissions.ts +14 -4
- package/src/rbac/hooks/useSecureSupabase.ts +33 -13
- package/src/rbac/permissions.ts +0 -30
- package/src/rbac/secureClient.ts +212 -61
- package/src/rbac/types.ts +8 -0
- package/src/theming/__tests__/parseEventColours.test.ts +6 -9
- package/src/theming/parseEventColours.ts +5 -19
- package/src/types/vitest-globals.d.ts +51 -26
- package/src/utils/__mocks__/supabaseMock.ts +1 -3
- package/src/utils/__tests__/formatting.unit.test.ts +4 -4
- package/src/utils/__tests__/index.unit.test.ts +2 -2
- package/src/utils/audit/audit.ts +0 -3
- package/src/utils/core/cn.ts +1 -1
- package/src/utils/file-reference/index.ts +53 -1
- package/src/utils/formatting/formatting.ts +8 -18
- package/src/utils/index.ts +0 -1
- package/src/utils/security/secureDataAccess.test.ts +31 -20
- package/src/utils/security/secureDataAccess.ts +4 -3
- package/dist/chunk-6C4YBBJM.js +0 -628
- package/dist/chunk-6C4YBBJM.js.map +0 -1
- package/dist/chunk-7D4SUZUM.js 2.map +0 -1
- package/dist/chunk-7EQTDTTJ.js 2.map +0 -1
- package/dist/chunk-7EQTDTTJ.js.map +0 -1
- package/dist/chunk-7FLMSG37.js 2.map +0 -1
- package/dist/chunk-7FLMSG37.js.map +0 -1
- package/dist/chunk-BC4IJKSL.js.map +0 -1
- package/dist/chunk-E3SPN4VZ.js +0 -12917
- package/dist/chunk-E3SPN4VZ.js.map +0 -1
- package/dist/chunk-E66EQZE6 5.js +0 -37
- package/dist/chunk-E66EQZE6.js 2.map +0 -1
- package/dist/chunk-HWIIPPNI.js.map +0 -1
- package/dist/chunk-I7PSE6JW 5.js +0 -191
- package/dist/chunk-I7PSE6JW.js 2.map +0 -1
- package/dist/chunk-I7PSE6JW.js.map +0 -1
- package/dist/chunk-IIELH4DL.js.map +0 -1
- package/dist/chunk-KNC55RTG.js 5.map +0 -1
- package/dist/chunk-KNC55RTG.js.map +0 -1
- package/dist/chunk-KQCRWDSA.js 5.map +0 -1
- package/dist/chunk-LFNCN2SP.js +0 -412
- package/dist/chunk-LFNCN2SP.js 2.map +0 -1
- package/dist/chunk-LFNCN2SP.js.map +0 -1
- package/dist/chunk-LMC26NLJ 2.js +0 -84
- package/dist/chunk-NOAYCWCX.js +0 -4993
- package/dist/chunk-NOAYCWCX.js.map +0 -1
- package/dist/chunk-QWWZ5CAQ.js 3.map +0 -1
- package/dist/chunk-QWWZ5CAQ.js.map +0 -1
- package/dist/chunk-QXHPKYJV 3.js +0 -113
- package/dist/chunk-R77UEZ4E.js +0 -68
- package/dist/chunk-R77UEZ4E.js.map +0 -1
- package/dist/chunk-SQGMNID3.js.map +0 -1
- package/dist/chunk-VBXEHIUJ.js 6.map +0 -1
- package/dist/chunk-XNXXZ43G.js.map +0 -1
- package/dist/chunk-ZSAAAMVR 6.js +0 -25
- package/dist/components.js 5.map +0 -1
- package/dist/styles/index 2.js +0 -12
- package/dist/styles/index.js 5.map +0 -1
- package/dist/theming/runtime 5.js +0 -19
- package/dist/theming/runtime.js 5.map +0 -1
- package/docs/api/classes/ErrorBoundary.md +0 -144
- package/docs/migration/quick-migration-guide.md +0 -356
- package/docs/migration/service-architecture.md +0 -281
- package/src/hooks/__tests__/useSecureDataAccess.unit.test.tsx +0 -680
- package/src/hooks/useSecureDataAccess.test.ts +0 -559
- package/src/hooks/useSecureDataAccess.ts +0 -666
- /package/dist/{DataTable-5FU7IESH.js.map → DataTable-TPTKCX4D.js.map} +0 -0
- /package/dist/{UnifiedAuthProvider-RGJTDE2C.js.map → UnifiedAuthProvider-CH6Z342H.js.map} +0 -0
- /package/dist/{api-N774RPUA.js.map → api-MVVQZLJI.js.map} +0 -0
- /package/docs/migration/{organisation-context-timing-fix.md → V0.3.44_organisation-context-timing-fix.md} +0 -0
- /package/docs/migration/{rbac-migration.md → V0.4.0_rbac-migration.md} +0 -0
- /package/docs/migration/{person-scoped-profiles-migration-guide.md → V0.5.190_person-scoped-profiles-migration-guide.md} +0 -0
- /package/examples/{rbac → RBAC}/CompleteRBACExample.tsx +0 -0
- /package/examples/{rbac → RBAC}/EventBasedApp.tsx +0 -0
- /package/examples/{rbac → RBAC}/PermissionExample.tsx +0 -0
- /package/examples/{rbac → RBAC}/index.ts +0 -0
|
@@ -1,356 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
lastUpdated: 2025-11-18T21:00:00+11:00
|
|
3
|
-
version: 0.5.181
|
|
4
|
-
reviewedBy: documentation-standards-audit
|
|
5
|
-
---
|
|
6
|
-
|
|
7
|
-
# Quick Migration Guide
|
|
8
|
-
|
|
9
|
-
> **🚀 Fast Track Migration** | [Full Migration Guide](./MIGRATION_GUIDE.md) | [Complete Migration Reference](./README.md)
|
|
10
|
-
|
|
11
|
-
Quick migration guide for common PACE Core upgrade scenarios. For detailed migration instructions, see the [Complete Migration Guide](./MIGRATION_GUIDE.md).
|
|
12
|
-
|
|
13
|
-
## 🎯 Quick Migration Checklist
|
|
14
|
-
|
|
15
|
-
### Before You Start
|
|
16
|
-
- [ ] **Backup your project** - Always backup before major updates
|
|
17
|
-
- [ ] **Check current version** - `npm list @jmruthers/pace-core`
|
|
18
|
-
- [ ] **Review changelog** - Check for breaking changes
|
|
19
|
-
- [ ] **Test in development** - Never migrate directly in production
|
|
20
|
-
|
|
21
|
-
### Common Migration Scenarios
|
|
22
|
-
|
|
23
|
-
## 📦 Package Updates
|
|
24
|
-
|
|
25
|
-
### Minor Version Updates (e.g., v0.4.16 → v0.4.17)
|
|
26
|
-
|
|
27
|
-
**Usually safe, but check for:**
|
|
28
|
-
- New features
|
|
29
|
-
- Bug fixes
|
|
30
|
-
- Performance improvements
|
|
31
|
-
|
|
32
|
-
```bash
|
|
33
|
-
# Update to latest
|
|
34
|
-
npm update @jmruthers/pace-core
|
|
35
|
-
|
|
36
|
-
# Or specific version
|
|
37
|
-
npm install @jmruthers/pace-core@0.4.17
|
|
38
|
-
```
|
|
39
|
-
|
|
40
|
-
**What to check:**
|
|
41
|
-
- [ ] App still builds successfully
|
|
42
|
-
- [ ] No console errors
|
|
43
|
-
- [ ] Components render correctly
|
|
44
|
-
- [ ] Authentication still works
|
|
45
|
-
|
|
46
|
-
### Major Version Updates (e.g., v0.x → v1.x)
|
|
47
|
-
|
|
48
|
-
**Requires more attention:**
|
|
49
|
-
- Breaking API changes
|
|
50
|
-
- New required props
|
|
51
|
-
- Deprecated features
|
|
52
|
-
- Configuration changes
|
|
53
|
-
|
|
54
|
-
```bash
|
|
55
|
-
# Check what's new
|
|
56
|
-
npm info @jmruthers/pace-core versions --json
|
|
57
|
-
|
|
58
|
-
# Update to latest
|
|
59
|
-
npm install @jmruthers/pace-core@latest
|
|
60
|
-
```
|
|
61
|
-
|
|
62
|
-
**What to check:**
|
|
63
|
-
- [ ] Review [Breaking Changes](./breaking-changes.md)
|
|
64
|
-
- [ ] Update import statements
|
|
65
|
-
- [ ] Fix deprecated API usage
|
|
66
|
-
- [ ] Update configuration files
|
|
67
|
-
- [ ] Test all functionality
|
|
68
|
-
|
|
69
|
-
## 🔧 Configuration Updates
|
|
70
|
-
|
|
71
|
-
### Tailwind v4 Migration
|
|
72
|
-
|
|
73
|
-
**From v0.4.15 to v0.4.16+ (CSS-First Approach):**
|
|
74
|
-
|
|
75
|
-
```bash
|
|
76
|
-
# Remove old dependencies
|
|
77
|
-
npm uninstall tailwindcss postcss autoprefixer
|
|
78
|
-
|
|
79
|
-
# Install new dependencies
|
|
80
|
-
npm install @tailwindcss/vite tailwindcss@^4.0.0
|
|
81
|
-
```
|
|
82
|
-
|
|
83
|
-
**Update vite.config.ts:**
|
|
84
|
-
```ts
|
|
85
|
-
// Before (v0.4.15)
|
|
86
|
-
import tailwindcss from '@tailwindcss/vite'
|
|
87
|
-
export default defineConfig({
|
|
88
|
-
plugins: [
|
|
89
|
-
react(),
|
|
90
|
-
tailwindcss({
|
|
91
|
-
content: [
|
|
92
|
-
'./src/**/*.{js,ts,jsx,tsx}',
|
|
93
|
-
'./node_modules/@jmruthers/pace-core/src/**/*.{js,ts,jsx,tsx}'
|
|
94
|
-
]
|
|
95
|
-
})
|
|
96
|
-
],
|
|
97
|
-
})
|
|
98
|
-
|
|
99
|
-
// After (v0.4.16+)
|
|
100
|
-
import tailwindcss from '@tailwindcss/vite'
|
|
101
|
-
export default defineConfig({
|
|
102
|
-
plugins: [
|
|
103
|
-
react(),
|
|
104
|
-
tailwindcss({
|
|
105
|
-
content: [
|
|
106
|
-
'./src/**/*.{js,ts,jsx,tsx}' // Only app files, pace-core scanned via @source
|
|
107
|
-
]
|
|
108
|
-
})
|
|
109
|
-
],
|
|
110
|
-
})
|
|
111
|
-
```
|
|
112
|
-
|
|
113
|
-
**Update CSS imports:**
|
|
114
|
-
```tsx
|
|
115
|
-
// Before
|
|
116
|
-
import '@jmruthers/pace-core/src/styles/core.css';
|
|
117
|
-
|
|
118
|
-
// After
|
|
119
|
-
import '@jmruthers/pace-core/src/styles/core.css';
|
|
120
|
-
```
|
|
121
|
-
|
|
122
|
-
### Source Path Fix (v0.4.17+)
|
|
123
|
-
|
|
124
|
-
**Critical fix for @source directive paths:**
|
|
125
|
-
|
|
126
|
-
```ts
|
|
127
|
-
// vite.config.ts
|
|
128
|
-
import tailwindcss from '@tailwindcss/vite'
|
|
129
|
-
export default defineConfig({
|
|
130
|
-
plugins: [
|
|
131
|
-
react(),
|
|
132
|
-
tailwindcss({
|
|
133
|
-
content: [
|
|
134
|
-
'./src/**/*.{js,ts,jsx,tsx}',
|
|
135
|
-
'./node_modules/@jmruthers/pace-core/**/*.{js,ts,jsx,tsx}'
|
|
136
|
-
]
|
|
137
|
-
})
|
|
138
|
-
],
|
|
139
|
-
})
|
|
140
|
-
```
|
|
141
|
-
|
|
142
|
-
## 🔄 API Changes
|
|
143
|
-
|
|
144
|
-
### Component Props
|
|
145
|
-
|
|
146
|
-
**Common prop changes:**
|
|
147
|
-
|
|
148
|
-
```tsx
|
|
149
|
-
// Before (v0.x)
|
|
150
|
-
<DataTable
|
|
151
|
-
data={data}
|
|
152
|
-
columns={columns}
|
|
153
|
-
enableSearch={true}
|
|
154
|
-
enablePagination={true}
|
|
155
|
-
/>
|
|
156
|
-
|
|
157
|
-
// After (v1.x)
|
|
158
|
-
<DataTable
|
|
159
|
-
data={data}
|
|
160
|
-
columns={columns}
|
|
161
|
-
features={{
|
|
162
|
-
search: true,
|
|
163
|
-
pagination: true,
|
|
164
|
-
sorting: true,
|
|
165
|
-
filtering: true
|
|
166
|
-
}}
|
|
167
|
-
/>
|
|
168
|
-
```
|
|
169
|
-
|
|
170
|
-
### Hook Changes
|
|
171
|
-
|
|
172
|
-
**RBAC hooks moved to separate module:**
|
|
173
|
-
|
|
174
|
-
```tsx
|
|
175
|
-
// Before
|
|
176
|
-
import { useCan, usePermissions } from '@jmruthers/pace-core';
|
|
177
|
-
|
|
178
|
-
// After
|
|
179
|
-
import { useCan, usePermissions } from '@jmruthers/pace-core/rbac';
|
|
180
|
-
```
|
|
181
|
-
|
|
182
|
-
### Import Changes
|
|
183
|
-
|
|
184
|
-
**Consolidated imports:**
|
|
185
|
-
|
|
186
|
-
```tsx
|
|
187
|
-
// Before
|
|
188
|
-
import { Button } from '@jmruthers/pace-core/components';
|
|
189
|
-
import { useUnifiedAuth } from '@jmruthers/pace-core/hooks';
|
|
190
|
-
|
|
191
|
-
// After
|
|
192
|
-
import { Button, useUnifiedAuth } from '@jmruthers/pace-core';
|
|
193
|
-
```
|
|
194
|
-
|
|
195
|
-
## 🐛 Common Migration Issues
|
|
196
|
-
|
|
197
|
-
### Styling Issues
|
|
198
|
-
|
|
199
|
-
**Problem**: Components appear unstyled after update
|
|
200
|
-
|
|
201
|
-
**Solution**:
|
|
202
|
-
```tsx
|
|
203
|
-
// Ensure CSS import is first
|
|
204
|
-
import '@jmruthers/pace-core/src/styles/core.css';
|
|
205
|
-
import { Button } from '@jmruthers/pace-core';
|
|
206
|
-
```
|
|
207
|
-
|
|
208
|
-
### Build Errors
|
|
209
|
-
|
|
210
|
-
**Problem**: Build fails with Tailwind errors
|
|
211
|
-
|
|
212
|
-
**Solution**:
|
|
213
|
-
```bash
|
|
214
|
-
# Clear all caches
|
|
215
|
-
rm -rf node_modules package-lock.json
|
|
216
|
-
npm install
|
|
217
|
-
|
|
218
|
-
# Check Tailwind config
|
|
219
|
-
npm run build -- --debug
|
|
220
|
-
```
|
|
221
|
-
|
|
222
|
-
### TypeScript Errors
|
|
223
|
-
|
|
224
|
-
**Problem**: Type errors after update
|
|
225
|
-
|
|
226
|
-
**Solution**:
|
|
227
|
-
```bash
|
|
228
|
-
# Update TypeScript types
|
|
229
|
-
npm install @types/react@latest @types/react-dom@latest
|
|
230
|
-
|
|
231
|
-
# Regenerate types
|
|
232
|
-
npm run type-check
|
|
233
|
-
```
|
|
234
|
-
|
|
235
|
-
### Authentication Issues
|
|
236
|
-
|
|
237
|
-
**Problem**: Login not working after update
|
|
238
|
-
|
|
239
|
-
**Solution**:
|
|
240
|
-
```tsx
|
|
241
|
-
// Check provider hierarchy
|
|
242
|
-
<UnifiedAuthProvider supabaseClient={supabase} appName="my-app">
|
|
243
|
-
<OrganisationProvider>
|
|
244
|
-
<EventProvider>
|
|
245
|
-
<YourApp />
|
|
246
|
-
</EventProvider>
|
|
247
|
-
</OrganisationProvider>
|
|
248
|
-
</UnifiedAuthProvider>
|
|
249
|
-
```
|
|
250
|
-
|
|
251
|
-
## ✅ Post-Migration Testing
|
|
252
|
-
|
|
253
|
-
### Essential Tests
|
|
254
|
-
- [ ] **Build succeeds** - `npm run build`
|
|
255
|
-
- [ ] **App starts** - `npm run dev`
|
|
256
|
-
- [ ] **Authentication works** - Login/logout
|
|
257
|
-
- [ ] **Components render** - All UI components display
|
|
258
|
-
- [ ] **Permissions work** - RBAC functions correctly
|
|
259
|
-
- [ ] **Forms work** - Form validation and submission
|
|
260
|
-
- [ ] **Data tables work** - CRUD operations
|
|
261
|
-
- [ ] **Styling correct** - No visual regressions
|
|
262
|
-
|
|
263
|
-
### Performance Tests
|
|
264
|
-
- [ ] **Bundle size** - Check for size increases
|
|
265
|
-
- [ ] **Load time** - Measure initial load
|
|
266
|
-
- [ ] **Runtime performance** - Check for slowdowns
|
|
267
|
-
- [ ] **Memory usage** - Monitor for leaks
|
|
268
|
-
|
|
269
|
-
### Browser Tests
|
|
270
|
-
- [ ] **Chrome** - Latest version
|
|
271
|
-
- [ ] **Firefox** - Latest version
|
|
272
|
-
- [ ] **Safari** - Latest version
|
|
273
|
-
- [ ] **Mobile browsers** - iOS Safari, Chrome Mobile
|
|
274
|
-
|
|
275
|
-
## 🆘 Getting Help
|
|
276
|
-
|
|
277
|
-
### If Migration Fails
|
|
278
|
-
|
|
279
|
-
1. **Check the logs** - Look for specific error messages
|
|
280
|
-
2. **Revert changes** - Go back to working version
|
|
281
|
-
3. **Check documentation** - Look for migration guides
|
|
282
|
-
4. **Search issues** - Check GitHub issues
|
|
283
|
-
5. **Ask for help** - Create detailed issue report
|
|
284
|
-
|
|
285
|
-
### Debug Information
|
|
286
|
-
|
|
287
|
-
When asking for help, include:
|
|
288
|
-
|
|
289
|
-
```bash
|
|
290
|
-
# Version information
|
|
291
|
-
npm list @jmruthers/pace-core
|
|
292
|
-
node --version
|
|
293
|
-
npm --version
|
|
294
|
-
|
|
295
|
-
# Build output
|
|
296
|
-
npm run build 2>&1 | tee build.log
|
|
297
|
-
|
|
298
|
-
# Error details
|
|
299
|
-
# Include full error messages and stack traces
|
|
300
|
-
```
|
|
301
|
-
|
|
302
|
-
### Emergency Rollback
|
|
303
|
-
|
|
304
|
-
```bash
|
|
305
|
-
# Rollback to previous version
|
|
306
|
-
npm install @jmruthers/pace-core@0.4.16
|
|
307
|
-
|
|
308
|
-
# Or specific working version
|
|
309
|
-
npm install @jmruthers/pace-core@0.4.15
|
|
310
|
-
|
|
311
|
-
# Clear caches
|
|
312
|
-
rm -rf node_modules package-lock.json
|
|
313
|
-
npm install
|
|
314
|
-
```
|
|
315
|
-
|
|
316
|
-
## 📚 Additional Resources
|
|
317
|
-
|
|
318
|
-
- **[Complete Migration Guide](./MIGRATION_GUIDE.md)** - Detailed migration instructions
|
|
319
|
-
- **[Migration Overview](./README.md)** - Migration guide index
|
|
320
|
-
- **[Troubleshooting](../troubleshooting/README.md)** - Common issues and solutions
|
|
321
|
-
- **[GitHub Issues](https://github.com/jmruthers/pace-core/issues)** - Report bugs and get help
|
|
322
|
-
|
|
323
|
-
---
|
|
324
|
-
|
|
325
|
-
**Remember**: Always test migrations in a development environment first!
|
|
326
|
-
|
|
327
|
-
## ♿ Accessibility
|
|
328
|
-
|
|
329
|
-
Migration processes should maintain accessibility:
|
|
330
|
-
|
|
331
|
-
- **Accessibility testing after migration** - Verify all components remain accessible after migration
|
|
332
|
-
- **Screen reader compatibility** - Test with assistive technologies after migration
|
|
333
|
-
- **Keyboard navigation** - Ensure keyboard navigation still works after migration
|
|
334
|
-
|
|
335
|
-
### Accessibility Best Practices
|
|
336
|
-
|
|
337
|
-
1. **Test accessibility after migration** - Run accessibility tests after each migration step
|
|
338
|
-
2. **Verify keyboard navigation** - Ensure all interactive elements remain keyboard accessible
|
|
339
|
-
3. **Test with screen readers** - Verify components work with assistive technologies
|
|
340
|
-
|
|
341
|
-
## ⚠️ Edge Cases
|
|
342
|
-
|
|
343
|
-
### Migration Failures
|
|
344
|
-
|
|
345
|
-
When migrations fail:
|
|
346
|
-
- Review error messages carefully
|
|
347
|
-
- Check version compatibility
|
|
348
|
-
- Verify all dependencies are updated
|
|
349
|
-
- Test with minimal configuration
|
|
350
|
-
|
|
351
|
-
### Partial Migrations
|
|
352
|
-
|
|
353
|
-
When only partial migration is possible:
|
|
354
|
-
- Document what was migrated and what wasn't
|
|
355
|
-
- Create remediation plan for remaining items
|
|
356
|
-
- Test partially migrated code thoroughly
|
|
@@ -1,281 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
lastUpdated: 2025-11-18T21:00:00+11:00
|
|
3
|
-
version: 0.5.181
|
|
4
|
-
reviewedBy: documentation-standards-audit
|
|
5
|
-
---
|
|
6
|
-
|
|
7
|
-
# Provider Architecture: Service-Based Design
|
|
8
|
-
|
|
9
|
-
## Overview
|
|
10
|
-
|
|
11
|
-
pace-core now uses a **service-based architecture** for all providers. This provides better testability, maintainability, and follows SOLID principles by separating business logic (services) from React context (providers).
|
|
12
|
-
|
|
13
|
-
## Architecture Benefits
|
|
14
|
-
|
|
15
|
-
- **Separation of Concerns**: Business logic in pure TypeScript services
|
|
16
|
-
- **Better Testability**: Services can be tested without React
|
|
17
|
-
- **Improved Performance**: Services instantiated once and reused
|
|
18
|
-
- **Type Safety**: Full TypeScript support with clear interfaces
|
|
19
|
-
|
|
20
|
-
## Quick Start
|
|
21
|
-
|
|
22
|
-
### Basic Usage
|
|
23
|
-
|
|
24
|
-
```tsx
|
|
25
|
-
import { UnifiedAuthProvider, useUnifiedAuth } from '@jmruthers/pace-core';
|
|
26
|
-
|
|
27
|
-
function App() {
|
|
28
|
-
return (
|
|
29
|
-
<UnifiedAuthProvider
|
|
30
|
-
supabaseClient={supabase}
|
|
31
|
-
appName="MY_APP"
|
|
32
|
-
idleTimeoutMs={30 * 60 * 1000} // 30 minutes
|
|
33
|
-
warnBeforeMs={60 * 1000} // 60 seconds
|
|
34
|
-
onIdleLogout={() => {
|
|
35
|
-
// Handle idle logout - redirect to login
|
|
36
|
-
window.location.href = '/login';
|
|
37
|
-
}}
|
|
38
|
-
>
|
|
39
|
-
<YourAppContent />
|
|
40
|
-
</UnifiedAuthProvider>
|
|
41
|
-
);
|
|
42
|
-
}
|
|
43
|
-
```
|
|
44
|
-
|
|
45
|
-
### Using Hooks
|
|
46
|
-
|
|
47
|
-
```tsx
|
|
48
|
-
import { useUnifiedAuth, useEvents, useOrganisations } from '@jmruthers/pace-core';
|
|
49
|
-
|
|
50
|
-
function MyComponent() {
|
|
51
|
-
const { user, isAuthenticated, signOut } = useUnifiedAuth();
|
|
52
|
-
const { events, selectedEvent, setSelectedEvent } = useEvents();
|
|
53
|
-
const { selectedOrganisation, organisations } = useOrganisations();
|
|
54
|
-
|
|
55
|
-
// Use the hooks as needed
|
|
56
|
-
}
|
|
57
|
-
```
|
|
58
|
-
|
|
59
|
-
## Service Architecture Overview
|
|
60
|
-
|
|
61
|
-
### Three-Layer Architecture
|
|
62
|
-
|
|
63
|
-
The service architecture follows a clear three-layer pattern:
|
|
64
|
-
|
|
65
|
-
1. **Service Layer** (`src/services/`) - Pure TypeScript classes containing business logic
|
|
66
|
-
- No React dependencies
|
|
67
|
-
- Observable pattern for state changes
|
|
68
|
-
- Easy to unit test
|
|
69
|
-
|
|
70
|
-
2. **Provider Layer** (`src/providers/services/`) - React context providers that create service instances
|
|
71
|
-
- Creates and manages service instances (singleton pattern)
|
|
72
|
-
- Provides services via React context
|
|
73
|
-
- Handles service lifecycle
|
|
74
|
-
- **Note**: Providers do NOT export hooks
|
|
75
|
-
|
|
76
|
-
3. **Hook Layer** (`src/hooks/services/`) - React hooks for reactive component integration
|
|
77
|
-
- Access services from context
|
|
78
|
-
- Subscribe to service state changes
|
|
79
|
-
- Trigger React re-renders when state changes
|
|
80
|
-
- **⚠️ Always import hooks from here, not from providers**
|
|
81
|
-
|
|
82
|
-
### Service Layer
|
|
83
|
-
|
|
84
|
-
Each service is a pure TypeScript class:
|
|
85
|
-
|
|
86
|
-
```typescript
|
|
87
|
-
class AuthService extends BaseService {
|
|
88
|
-
signIn(email: string, password: string): Promise<AuthResult> { /* ... */ }
|
|
89
|
-
signOut(): Promise<AuthResult> { /* ... */ }
|
|
90
|
-
// ... other methods
|
|
91
|
-
}
|
|
92
|
-
```
|
|
93
|
-
|
|
94
|
-
### Provider Layer
|
|
95
|
-
|
|
96
|
-
Service providers create and manage service instances:
|
|
97
|
-
|
|
98
|
-
```tsx
|
|
99
|
-
function AuthServiceProvider({ children, supabaseClient }) {
|
|
100
|
-
const authService = useMemo(() => new AuthService(supabaseClient), [supabaseClient]);
|
|
101
|
-
// Initialize and manage service lifecycle
|
|
102
|
-
return <AuthServiceContext.Provider value={{ authService }}>{children}</AuthServiceContext.Provider>;
|
|
103
|
-
}
|
|
104
|
-
```
|
|
105
|
-
|
|
106
|
-
### Hook Layer
|
|
107
|
-
|
|
108
|
-
Convenience hooks provide easy access to services:
|
|
109
|
-
|
|
110
|
-
```tsx
|
|
111
|
-
function useAuth() {
|
|
112
|
-
const context = useContext(AuthServiceContext);
|
|
113
|
-
return context.authService;
|
|
114
|
-
}
|
|
115
|
-
```
|
|
116
|
-
|
|
117
|
-
## Available Hooks
|
|
118
|
-
|
|
119
|
-
### Unified Hook (Recommended for Most Use Cases)
|
|
120
|
-
|
|
121
|
-
```tsx
|
|
122
|
-
import { useUnifiedAuth } from '@jmruthers/pace-core';
|
|
123
|
-
|
|
124
|
-
function MyComponent() {
|
|
125
|
-
const {
|
|
126
|
-
user,
|
|
127
|
-
isAuthenticated,
|
|
128
|
-
signOut,
|
|
129
|
-
selectedOrganisation,
|
|
130
|
-
events,
|
|
131
|
-
selectedEvent,
|
|
132
|
-
permissions,
|
|
133
|
-
hasRole,
|
|
134
|
-
hasPermission
|
|
135
|
-
} = useUnifiedAuth();
|
|
136
|
-
|
|
137
|
-
// Access all features from one hook
|
|
138
|
-
}
|
|
139
|
-
```
|
|
140
|
-
|
|
141
|
-
### Individual Service Hooks (For Performance)
|
|
142
|
-
|
|
143
|
-
For better performance, use individual service hooks:
|
|
144
|
-
|
|
145
|
-
```tsx
|
|
146
|
-
import {
|
|
147
|
-
useEvents,
|
|
148
|
-
useOrganisations,
|
|
149
|
-
useAuthService,
|
|
150
|
-
useEventService,
|
|
151
|
-
useOrganisationService
|
|
152
|
-
} from '@jmruthers/pace-core';
|
|
153
|
-
|
|
154
|
-
function MyComponent() {
|
|
155
|
-
const events = useEvents(); // Convenience hook
|
|
156
|
-
const orgs = useOrganisations(); // Convenience hook
|
|
157
|
-
const authService = useAuthService(); // Direct service hook
|
|
158
|
-
const eventService = useEventService(); // Direct service hook
|
|
159
|
-
|
|
160
|
-
// Only re-renders when relevant service state changes
|
|
161
|
-
}
|
|
162
|
-
```
|
|
163
|
-
|
|
164
|
-
**Important**: Service hooks (like `useAuthService`, `useEventService`) are exported from `hooks/services/` and include state subscription logic. Always import them from the main package or `hooks/services/`, never from `providers/services/`.
|
|
165
|
-
|
|
166
|
-
## Testing
|
|
167
|
-
|
|
168
|
-
### Testing Services
|
|
169
|
-
|
|
170
|
-
Services are pure TypeScript classes, making them easy to unit test:
|
|
171
|
-
|
|
172
|
-
```typescript
|
|
173
|
-
describe('AuthService', () => {
|
|
174
|
-
let authService: AuthService;
|
|
175
|
-
|
|
176
|
-
beforeEach(() => {
|
|
177
|
-
authService = new AuthService(mockSupabase);
|
|
178
|
-
});
|
|
179
|
-
|
|
180
|
-
it('should sign in user', async () => {
|
|
181
|
-
const result = await authService.signIn('test@example.com', 'password');
|
|
182
|
-
expect(result.user).toBeDefined();
|
|
183
|
-
});
|
|
184
|
-
});
|
|
185
|
-
```
|
|
186
|
-
|
|
187
|
-
### Testing Providers
|
|
188
|
-
|
|
189
|
-
Providers can be tested with React Testing Library:
|
|
190
|
-
|
|
191
|
-
```typescript
|
|
192
|
-
render(
|
|
193
|
-
<UnifiedAuthProvider
|
|
194
|
-
supabaseClient={mockSupabase}
|
|
195
|
-
appName="TEST_APP"
|
|
196
|
-
idleTimeoutMs={30000}
|
|
197
|
-
warnBeforeMs={5000}
|
|
198
|
-
onIdleLogout={() => {}}
|
|
199
|
-
>
|
|
200
|
-
<TestComponent />
|
|
201
|
-
</UnifiedAuthProvider>
|
|
202
|
-
);
|
|
203
|
-
```
|
|
204
|
-
|
|
205
|
-
## Common Issues
|
|
206
|
-
|
|
207
|
-
### Missing Required Props
|
|
208
|
-
|
|
209
|
-
**Error**: `Missing required prop: idleTimeoutMs`
|
|
210
|
-
|
|
211
|
-
Add the required inactivity management props:
|
|
212
|
-
|
|
213
|
-
```tsx
|
|
214
|
-
<UnifiedAuthProvider
|
|
215
|
-
supabaseClient={supabase}
|
|
216
|
-
appName="MY_APP"
|
|
217
|
-
idleTimeoutMs={30 * 60 * 1000}
|
|
218
|
-
warnBeforeMs={60 * 1000}
|
|
219
|
-
onIdleLogout={() => window.location.href = '/login'}
|
|
220
|
-
>
|
|
221
|
-
<YourAppContent />
|
|
222
|
-
</UnifiedAuthProvider>
|
|
223
|
-
```
|
|
224
|
-
|
|
225
|
-
## Performance Tips
|
|
226
|
-
|
|
227
|
-
1. **Use individual hooks** when you only need specific data
|
|
228
|
-
2. **Avoid unnecessary re-renders** by selecting only what you need
|
|
229
|
-
3. **Memoize expensive computations** in components
|
|
230
|
-
4. **Test services in isolation** for better unit tests
|
|
231
|
-
|
|
232
|
-
## Additional Resources
|
|
233
|
-
|
|
234
|
-
- [API Reference](../../api-reference/providers.md)
|
|
235
|
-
- [Architecture Documentation](../../architecture/services.md)
|
|
236
|
-
- [Example Apps](../../getting-started/examples/)
|
|
237
|
-
|
|
238
|
-
## ♿ Accessibility
|
|
239
|
-
|
|
240
|
-
Service architecture migration should maintain accessibility:
|
|
241
|
-
|
|
242
|
-
- **Accessibility testing after migration** - Verify all components remain accessible after migration
|
|
243
|
-
- **Screen reader compatibility** - Test with assistive technologies after migration
|
|
244
|
-
- **Keyboard navigation** - Ensure keyboard navigation still works after migration
|
|
245
|
-
- **Focus management** - Verify focus management is correct after migration
|
|
246
|
-
|
|
247
|
-
### Accessibility Best Practices
|
|
248
|
-
|
|
249
|
-
1. **Test accessibility after migration** - Run accessibility tests after each migration step
|
|
250
|
-
2. **Verify keyboard navigation** - Ensure all interactive elements remain keyboard accessible
|
|
251
|
-
3. **Test with screen readers** - Verify components work with assistive technologies
|
|
252
|
-
4. **Check focus indicators** - Ensure focus indicators are visible and correct
|
|
253
|
-
|
|
254
|
-
## ⚠️ Edge Cases
|
|
255
|
-
|
|
256
|
-
### Service Initialization Failures
|
|
257
|
-
|
|
258
|
-
When services fail to initialize:
|
|
259
|
-
- Verify all required props are provided
|
|
260
|
-
- Check Supabase client is properly configured
|
|
261
|
-
- Review service dependencies
|
|
262
|
-
- Test with minimal configuration
|
|
263
|
-
- Verify environment variables are set correctly
|
|
264
|
-
|
|
265
|
-
### Service Context Not Available
|
|
266
|
-
|
|
267
|
-
When service context is not available:
|
|
268
|
-
- Verify service provider is properly mounted
|
|
269
|
-
- Check provider order and hierarchy
|
|
270
|
-
- Review service provider composition
|
|
271
|
-
- Test with service provider examples
|
|
272
|
-
- Verify hooks are called within provider context
|
|
273
|
-
|
|
274
|
-
### Performance Issues After Migration
|
|
275
|
-
|
|
276
|
-
When performance degrades after migration:
|
|
277
|
-
- Check for unnecessary re-renders
|
|
278
|
-
- Review service instance creation
|
|
279
|
-
- Verify memoization is working correctly
|
|
280
|
-
- Test with performance profiling tools
|
|
281
|
-
- Consider using individual hooks instead of unified hook
|