@jmruthers/pace-core 0.6.10 → 0.6.12
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 +21 -0
- package/audit-tool/00-dependencies.cjs +46 -13
- package/audit-tool/audits/01-pace-core-compliance.cjs +96 -21
- package/audit-tool/audits/02-project-structure.cjs +13 -3
- package/audit-tool/audits/03-architecture.cjs +78 -4
- package/audit-tool/audits/04-code-quality.cjs +9 -2
- package/audit-tool/audits/05-styling.cjs +19 -7
- package/audit-tool/audits/06-security-rbac.cjs +105 -14
- package/audit-tool/audits/07-api-tech-stack.cjs +31 -15
- package/audit-tool/audits/08-testing-documentation.cjs +11 -3
- package/audit-tool/audits/09-operations.cjs +19 -7
- package/audit-tool/index.cjs +22 -11
- package/audit-tool/utils/report-utils.cjs +4 -0
- package/cursor-rules/01-pace-core-compliance.mdc +1 -0
- package/cursor-rules/02-project-structure.mdc +1 -0
- package/cursor-rules/03-architecture.mdc +3 -1
- package/cursor-rules/04-code-quality.mdc +1 -0
- package/cursor-rules/05-styling.mdc +41 -7
- package/cursor-rules/06-security-rbac.mdc +2 -1
- package/cursor-rules/07-api-tech-stack.mdc +1 -0
- package/cursor-rules/08-testing-documentation.mdc +1 -0
- package/cursor-rules/09-operations.mdc +1 -0
- package/dist/DataTable-AQAHSFLM.js +17 -0
- package/dist/InactivityServiceProvider-BbxwwDz1.d.ts +308 -0
- package/dist/UnifiedAuthProvider-Bkt_tzdS.d.ts +183 -0
- package/dist/api-6OQXYT67.js +6 -0
- package/dist/api-result-USV1Czr-.d.ts +51 -0
- package/dist/audit-HI2DHUVU.js +4 -0
- package/dist/auth-JvdRVaud.d.ts +49 -0
- package/dist/chunk-2DL2WSOE.js +327 -0
- package/dist/chunk-2GBDPPUC.js +61 -0
- package/dist/chunk-44CNXN4P.js +15 -0
- package/dist/chunk-AP5FG7W4.js +2159 -0
- package/dist/chunk-CU2BU2MQ.js +2 -0
- package/dist/chunk-D6BMFMQZ.js +200 -0
- package/dist/chunk-ENLXB7GP.js +721 -0
- package/dist/chunk-GHCUP64P.js +105 -0
- package/dist/chunk-H6RTU4DZ.js +1098 -0
- package/dist/chunk-HQTYP6BX.js +6468 -0
- package/dist/chunk-M7QE7XOA.js +529 -0
- package/dist/chunk-MVVWZ7JV.js +1329 -0
- package/dist/chunk-NJ7FGQWB.js +811 -0
- package/dist/chunk-QRYSEPHB.js +429 -0
- package/dist/chunk-QWIG36BZ.js +264 -0
- package/dist/chunk-S57OLCLO.js +2946 -0
- package/dist/chunk-VFLR5K2H.js +23 -0
- package/dist/chunk-XOJME5T7.js +407 -0
- package/dist/chunk-XPFVT3GN.js +492 -0
- package/dist/chunk-Y2LWSLLB.js +9614 -0
- package/dist/chunk-YFGNMB67.js +2390 -0
- package/dist/components.d.ts +10 -9
- package/dist/components.js +20 -17
- package/dist/database.generated-qkdoiVrJ.d.ts +9441 -0
- package/dist/eslint-rules/index.cjs +3 -0
- package/dist/eslint-rules/rules/03-architecture.cjs +74 -0
- package/dist/eslint-rules/rules/06-security-rbac.cjs +74 -0
- package/dist/event-BfCox3N2.d.ts +265 -0
- package/dist/file-reference-DU1hcawx.d.ts +164 -0
- package/dist/functions-hF5ImHCr.d.ts +208 -0
- package/dist/hooks.d.ts +22 -9
- package/dist/hooks.js +35 -25
- package/dist/icons/index.d.ts +1 -0
- package/dist/icons/index.js +1 -0
- package/dist/index.d.ts +69 -180
- package/dist/index.js +319 -342
- package/dist/pagination-BW1mqywp.d.ts +201 -0
- package/dist/providers.d.ts +6 -5
- package/dist/providers.js +6 -3
- package/dist/rbac/index.d.ts +133 -148
- package/dist/rbac/index.js +12 -9
- package/dist/theming/runtime.d.ts +19 -2
- package/dist/theming/runtime.js +1 -1
- package/dist/timezone-BTWWXKVY.d.ts +696 -0
- package/dist/types-Besvoyzb.d.ts +55 -0
- package/dist/types-CGHrxfqc.d.ts +114 -0
- package/dist/types.d.ts +19 -12
- package/dist/types.js +1 -0
- package/dist/usePublicPageContext-BQrHf95t.d.ts +4367 -0
- package/dist/usePublicRouteParams-BgV6VhMi.d.ts +946 -0
- package/dist/utils.d.ts +163 -145
- package/dist/utils.js +45 -27
- package/docs/api/@jmruthers/namespaces/DialogPortal/README.md +14 -0
- package/docs/api/@jmruthers/namespaces/DialogPortal/variables/displayName.md +11 -0
- package/docs/api/README.md +6 -2
- package/docs/api/_media/README.md +186 -0
- package/docs/api/classes/ColumnFactory.md +225 -0
- package/docs/api/classes/Logger.md +246 -0
- package/docs/api/classes/RBACAuditManager.md +299 -0
- package/docs/api/classes/RBACCache.md +389 -0
- package/docs/api/classes/RBACEngine.md +181 -0
- package/docs/api/classes/SecureSupabaseClient.md +168 -0
- package/docs/api/classes/StorageUtils.md +324 -0
- package/docs/api/enumerations/FileCategory.md +137 -0
- package/docs/api/enumerations/LogLevel.md +43 -0
- package/docs/api/enumerations/RBACErrorCode.md +169 -0
- package/docs/api/enumerations/RPCFunction.md +89 -0
- package/docs/api/functions/AccessDenied.md +30 -0
- package/docs/api/functions/AppSwitcher.md +21 -0
- package/docs/api/functions/Badge.md +42 -0
- package/docs/api/functions/ContextSelector.md +43 -0
- package/docs/api/functions/DataTable.md +36 -0
- package/docs/api/functions/DatePickerWithTimezone.md +28 -0
- package/docs/api/functions/DialogBody.md +24 -0
- package/docs/api/functions/DialogFooter.md +24 -0
- package/docs/api/functions/DialogHeader.md +24 -0
- package/docs/api/functions/ErrorBoundaryProvider.md +28 -0
- package/docs/api/functions/EventServiceProvider.md +28 -0
- package/docs/api/functions/FileDisplay.md +25 -0
- package/docs/api/functions/FileUpload.md +21 -0
- package/docs/api/functions/Form.md +50 -0
- package/docs/api/functions/FormField.md +102 -0
- package/docs/api/functions/Header.md +21 -0
- package/docs/api/functions/InactivityServiceProvider.md +28 -0
- package/docs/api/functions/InactivityWarningModal.md +21 -0
- package/docs/api/functions/Input.md +49 -0
- package/docs/api/functions/NavigationGuard.md +31 -0
- package/docs/api/functions/OrganisationServiceProvider.md +28 -0
- package/docs/api/functions/PaceAppLayout.md +169 -0
- package/docs/api/functions/PasswordChangeForm.md +21 -0
- package/docs/api/functions/ProtectedRoute.md +37 -0
- package/docs/api/functions/PublicPageFooter.md +21 -0
- package/docs/api/functions/PublicPageHeader.md +21 -0
- package/docs/api/functions/PublicPageLayout.md +33 -0
- package/docs/api/functions/PublicPageProvider.md +30 -0
- package/docs/api/functions/Textarea.md +49 -0
- package/docs/api/functions/Toaster.md +34 -0
- package/docs/api/functions/UnifiedAuthProvider.md +28 -0
- package/docs/api/functions/applyPalette.md +33 -0
- package/docs/api/functions/archiveFile.md +47 -0
- package/docs/api/functions/average.md +63 -0
- package/docs/api/functions/buildAppUrl.md +46 -0
- package/docs/api/functions/clearInFlightRequests.md +17 -0
- package/docs/api/functions/clearPalette.md +18 -0
- package/docs/api/functions/clearPublicEventCache.md +18 -0
- package/docs/api/functions/clearPublicFileDisplayCache.md +18 -0
- package/docs/api/functions/clearPublicLogoCache.md +18 -0
- package/docs/api/functions/cn.md +21 -0
- package/docs/api/functions/count.md +56 -0
- package/docs/api/functions/createAuditManager.md +45 -0
- package/docs/api/functions/createBaseClient.md +75 -0
- package/docs/api/functions/createLogger.md +95 -0
- package/docs/api/functions/createRBACConfig.md +21 -0
- package/docs/api/functions/createRBACEngine.md +33 -0
- package/docs/api/functions/createRBACExpressMiddleware.md +84 -0
- package/docs/api/functions/createRBACMiddleware.md +88 -0
- package/docs/api/functions/createSecureClient.md +80 -0
- package/docs/api/functions/createSecureDataAccess.md +39 -0
- package/docs/api/functions/deleteFile.md +33 -0
- package/docs/api/functions/disablePerformanceMonitoring.md +17 -0
- package/docs/api/functions/downloadFile.md +33 -0
- package/docs/api/functions/emitAuditEvent.md +27 -0
- package/docs/api/functions/enablePerformanceMonitoring.md +17 -0
- package/docs/api/functions/err.md +23 -0
- package/docs/api/functions/exportToCSV.md +56 -0
- package/docs/api/functions/exportToCSVWithTableRows.md +46 -0
- package/docs/api/functions/extractEventCodeFromPath.md +24 -0
- package/docs/api/functions/extractFileMetadata.md +33 -0
- package/docs/api/functions/formatCompactNumber.md +27 -0
- package/docs/api/functions/formatCurrency.md +31 -0
- package/docs/api/functions/formatDate.md +23 -0
- package/docs/api/functions/formatDateTime.md +24 -0
- package/docs/api/functions/formatFileSize.md +23 -0
- package/docs/api/functions/formatInTimeZone.md +46 -0
- package/docs/api/functions/formatNumber.md +31 -0
- package/docs/api/functions/formatPercent.md +64 -0
- package/docs/api/functions/formatTime.md +24 -0
- package/docs/api/functions/formatTimeInTimeZone.md +40 -0
- package/docs/api/functions/fromSupabaseClient.md +49 -0
- package/docs/api/functions/fromZonedTime.md +41 -0
- package/docs/api/functions/generateCSVContent.md +55 -0
- package/docs/api/functions/generateFilePath.md +29 -0
- package/docs/api/functions/generateFileUrlsBatch.md +33 -0
- package/docs/api/functions/generatePublicRoutePath.md +27 -0
- package/docs/api/functions/generateUniqueFileName.md +24 -0
- package/docs/api/functions/getAccessLevel.md +48 -0
- package/docs/api/functions/getAllAppPorts.md +19 -0
- package/docs/api/functions/getAllStylePaths.md +15 -0
- package/docs/api/functions/getAppConfig.md +17 -0
- package/docs/api/functions/getAppPort.md +34 -0
- package/docs/api/functions/getBucketName.md +27 -0
- package/docs/api/functions/getCurrentAppId.md +17 -0
- package/docs/api/functions/getCurrentAppName.md +17 -0
- package/docs/api/functions/getFileSizeLimit.md +23 -0
- package/docs/api/functions/getGlobalAuditManager.md +19 -0
- package/docs/api/functions/getInFlightRequestCount.md +19 -0
- package/docs/api/functions/getPerformanceMetrics.md +17 -0
- package/docs/api/functions/getPerformanceSummary.md +17 -0
- package/docs/api/functions/getPermissionMap.md +52 -0
- package/docs/api/functions/getPublicEventCacheStats.md +25 -0
- package/docs/api/functions/getPublicFileDisplayCacheStats.md +25 -0
- package/docs/api/functions/getPublicLogoCacheStats.md +25 -0
- package/docs/api/functions/getPublicUrl.md +39 -0
- package/docs/api/functions/getRBACConfig.md +15 -0
- package/docs/api/functions/getRBACLogger.md +15 -0
- package/docs/api/functions/getRoleContext.md +31 -0
- package/docs/api/functions/getSignedUrl.md +34 -0
- package/docs/api/functions/getStylePath.md +21 -0
- package/docs/api/functions/getTimeZoneDifference.md +40 -0
- package/docs/api/functions/getTimezoneAbbreviation.md +40 -0
- package/docs/api/functions/getUserTimeZone.md +26 -0
- package/docs/api/functions/hasAllPermissions.md +41 -0
- package/docs/api/functions/hasAnyPermission.md +41 -0
- package/docs/api/functions/isDebugMode.md +15 -0
- package/docs/api/functions/isDevelopmentMode.md +15 -0
- package/docs/api/functions/isErr.md +29 -0
- package/docs/api/functions/isOk.md +29 -0
- package/docs/api/functions/isPerformanceMonitoringEnabled.md +17 -0
- package/docs/api/functions/isPermitted.md +58 -0
- package/docs/api/functions/isPermittedCached.md +36 -0
- package/docs/api/functions/isRBACInitialized.md +19 -0
- package/docs/api/functions/isSecureClient.md +38 -0
- package/docs/api/functions/isValidPermission.md +27 -0
- package/docs/api/functions/listFiles.md +29 -0
- package/docs/api/functions/max.md +63 -0
- package/docs/api/functions/min.md +63 -0
- package/docs/api/functions/ok.md +29 -0
- package/docs/api/functions/parseAndNormalizeEventColours.md +105 -0
- package/docs/api/functions/recordAuditEvent.md +23 -0
- package/docs/api/functions/recordPermissionCheck.md +31 -0
- package/docs/api/functions/resetPerformanceMetrics.md +17 -0
- package/docs/api/functions/resolveAppContext.md +27 -0
- package/docs/api/functions/roundToNearestMinutes.md +41 -0
- package/docs/api/functions/sanitizeFormData.md +49 -0
- package/docs/api/functions/sanitizeHtml.md +39 -0
- package/docs/api/functions/sanitizeUserInput.md +27 -0
- package/docs/api/functions/setAppConfig.md +23 -0
- package/docs/api/functions/setGlobalAuditManager.md +25 -0
- package/docs/api/functions/setupRBAC.md +31 -0
- package/docs/api/functions/sum.md +63 -0
- package/docs/api/functions/toZonedTime.md +41 -0
- package/docs/api/functions/uploadFile.md +32 -0
- package/docs/api/functions/useAccessLevel.md +71 -0
- package/docs/api/functions/useAccessibleApps.md +55 -0
- package/docs/api/functions/useAppConfig.md +20 -0
- package/docs/api/functions/useAuthService.md +15 -0
- package/docs/api/functions/useCan.md +99 -0
- package/docs/api/functions/useEventService.md +15 -0
- package/docs/api/functions/useEventTheme.md +26 -0
- package/docs/api/functions/useEvents.md +45 -0
- package/docs/api/functions/useFileReference.md +264 -0
- package/docs/api/functions/useFileReferenceById.md +63 -0
- package/docs/api/functions/useFileReferenceForRecord.md +129 -0
- package/docs/api/functions/useFilesByCategory.md +80 -0
- package/docs/api/functions/useFormDialog.md +62 -0
- package/docs/api/functions/useInactivityService.md +15 -0
- package/docs/api/functions/useInactivityTracker.md +21 -0
- package/docs/api/functions/useIsPublicPage.md +19 -0
- package/docs/api/functions/useMultiplePermissions.md +88 -0
- package/docs/api/functions/useOptionalEvents.md +31 -0
- package/docs/api/functions/useOrganisationPermissions.md +27 -0
- package/docs/api/functions/useOrganisationSecurity.md +15 -0
- package/docs/api/functions/useOrganisationService.md +15 -0
- package/docs/api/functions/useOrganisations.md +48 -0
- package/docs/api/functions/usePermissions.md +130 -0
- package/docs/api/functions/usePublicEvent.md +36 -0
- package/docs/api/functions/usePublicEventCode.md +32 -0
- package/docs/api/functions/usePublicEventLogo.md +48 -0
- package/docs/api/functions/usePublicFileDisplay.md +54 -0
- package/docs/api/functions/usePublicPageContext.md +19 -0
- package/docs/api/functions/usePublicRouteParams.md +31 -0
- package/docs/api/functions/useRBAC.md +21 -0
- package/docs/api/functions/useResolvedScope.md +46 -0
- package/docs/api/functions/useResourcePermissions.md +25 -0
- package/docs/api/functions/useRoleManagement.md +121 -0
- package/docs/api/functions/useSecureSupabase.md +51 -0
- package/docs/api/functions/useSessionRestoration.md +15 -0
- package/docs/api/functions/useSessionTracking.md +62 -0
- package/docs/api/functions/useToast.md +83 -0
- package/docs/api/functions/useUnifiedAuth.md +24 -0
- package/docs/api/functions/useZodForm.md +27 -0
- package/docs/api/functions/validateFileSize.md +31 -0
- package/docs/api/functions/warnIfInsecureClient.md +40 -0
- package/docs/api/functions/withAccessLevelGuard.md +67 -0
- package/docs/api/functions/withPermissionGuard.md +73 -0
- package/docs/api/functions/withRoleGuard.md +86 -0
- package/docs/api/globals.md +502 -0
- package/docs/api/interfaces/AccessDeniedProps.md +87 -0
- package/docs/api/interfaces/AccessibleApp.md +41 -0
- package/docs/api/interfaces/AddressFieldProps.md +195 -0
- package/docs/api/interfaces/AddressFieldRef.md +67 -0
- package/docs/api/interfaces/AggregateConfig.md +35 -0
- package/docs/api/interfaces/AppSwitcherProps.md +51 -0
- package/docs/api/interfaces/AuthSessionData.md +27 -0
- package/docs/api/interfaces/AutocompleteOptions.md +61 -0
- package/docs/api/interfaces/AvatarProps.md +97 -0
- package/docs/api/interfaces/BadgeProps.md +30 -0
- package/docs/api/interfaces/BuildAppUrlOptions.md +41 -0
- package/docs/api/interfaces/ButtonProps.md +46 -0
- package/docs/api/interfaces/CalendarProps.md +60 -0
- package/docs/api/interfaces/CardProps.md +56 -0
- package/docs/api/interfaces/ColorPalette.md +13 -0
- package/docs/api/interfaces/ColorShade.md +58 -0
- package/docs/api/interfaces/ContextSelectorProps.md +131 -0
- package/docs/api/interfaces/DataRecord.md +16 -0
- package/docs/api/interfaces/DataTableAction.md +198 -0
- package/docs/api/interfaces/DataTableColumn.md +422 -0
- package/docs/api/interfaces/DataTableProps.md +511 -0
- package/docs/api/interfaces/DataTableToolbarButton.md +75 -0
- package/docs/api/interfaces/DatePickerWithTimezoneProps.md +75 -0
- package/docs/api/interfaces/DialogBodyProps.md +55 -0
- package/docs/api/interfaces/DialogCloseProps.md +25 -0
- package/docs/api/interfaces/DialogContentProps.md +160 -0
- package/docs/api/interfaces/DialogFooterProps.md +25 -0
- package/docs/api/interfaces/DialogHeaderProps.md +25 -0
- package/docs/api/interfaces/DialogPortalProps.md +19 -0
- package/docs/api/interfaces/DialogProps.md +53 -0
- package/docs/api/interfaces/DialogTriggerProps.md +53 -0
- package/docs/api/interfaces/EmptyStateConfig.md +55 -0
- package/docs/api/interfaces/ErrorBoundaryProps.md +131 -0
- package/docs/api/interfaces/ErrorBoundaryProviderProps.md +31 -0
- package/docs/api/interfaces/ErrorBoundaryState.md +61 -0
- package/docs/api/interfaces/EventAppRoleData.md +54 -0
- package/docs/api/interfaces/ExportColumn.md +69 -0
- package/docs/api/interfaces/ExportOptions.md +109 -0
- package/docs/api/interfaces/FileDisplayProps.md +192 -0
- package/docs/api/interfaces/FileMetadata.md +97 -0
- package/docs/api/interfaces/FileReference.md +89 -0
- package/docs/api/interfaces/FileSizeLimits.md +13 -0
- package/docs/api/interfaces/FileUploadOptions.md +107 -0
- package/docs/api/interfaces/FooterProps.md +37 -0
- package/docs/api/interfaces/FormFieldProps.md +171 -0
- package/docs/api/interfaces/FormProps.md +93 -0
- package/docs/api/interfaces/GrantEventAppRoleParams.md +97 -0
- package/docs/api/interfaces/ImportSummary.md +49 -0
- package/docs/api/interfaces/InactivityWarningModalProps.md +87 -0
- package/docs/api/interfaces/InputProps.md +46 -0
- package/docs/api/interfaces/InvalidScopeError.md +37 -0
- package/docs/api/interfaces/LabelProps.md +85 -0
- package/docs/api/interfaces/LoggerConfig.md +51 -0
- package/docs/api/interfaces/LoginFormProps.md +146 -0
- package/docs/api/interfaces/MissingUserContextError.md +37 -0
- package/docs/api/interfaces/NavigationGuardProps.md +109 -0
- package/docs/api/interfaces/NavigationItem.md +91 -0
- package/docs/api/interfaces/NavigationMenuProps.md +169 -0
- package/docs/api/interfaces/Organisation.md +105 -0
- package/docs/api/interfaces/OrganisationContextRequiredError.md +37 -0
- package/docs/api/interfaces/OrganisationMembership.md +105 -0
- package/docs/api/interfaces/OrganisationSecurityError.md +49 -0
- package/docs/api/interfaces/PaceAppLayoutPermissionConfig.md +127 -0
- package/docs/api/interfaces/PaceAppLayoutRouteConfigItem.md +91 -0
- package/docs/api/interfaces/PaceAppLayoutRoutingConfig.md +79 -0
- package/docs/api/interfaces/PaceLoginPageProps.md +41 -0
- package/docs/api/interfaces/PagePermissionGuardProps.md +143 -0
- package/docs/api/interfaces/PaletteData.md +33 -0
- package/docs/api/interfaces/ParsedAddress.md +91 -0
- package/docs/api/interfaces/PermissionDeniedError.md +37 -0
- package/docs/api/interfaces/ProgressProps.md +35 -0
- package/docs/api/interfaces/ProtectedRouteProps.md +67 -0
- package/docs/api/interfaces/PublicPageFooterProps.md +97 -0
- package/docs/api/interfaces/PublicPageHeaderProps.md +99 -0
- package/docs/api/interfaces/PublicPageLayoutProps.md +153 -0
- package/docs/api/interfaces/RBACAccessValidateParams.md +41 -0
- package/docs/api/interfaces/RBACAccessValidateResult.md +33 -0
- package/docs/api/interfaces/RBACAuditLogParams.md +65 -0
- package/docs/api/interfaces/RBACAuditLogResult.md +41 -0
- package/docs/api/interfaces/RBACContext.md +41 -0
- package/docs/api/interfaces/RBACError.md +37 -0
- package/docs/api/interfaces/RBACLogger.md +97 -0
- package/docs/api/interfaces/RBACNotInitializedError.md +37 -0
- package/docs/api/interfaces/RBACPageAccessCheckParams.md +57 -0
- package/docs/api/interfaces/RBACPerformanceMetrics.md +109 -0
- package/docs/api/interfaces/RBACPermissionCheckParams.md +57 -0
- package/docs/api/interfaces/RBACPermissionCheckResult.md +41 -0
- package/docs/api/interfaces/RBACPermissionsGetParams.md +49 -0
- package/docs/api/interfaces/RBACPermissionsGetResult.md +49 -0
- package/docs/api/interfaces/RBACResult.md +47 -0
- package/docs/api/interfaces/RBACRoleGrantParams.md +49 -0
- package/docs/api/interfaces/RBACRoleGrantResult.md +41 -0
- package/docs/api/interfaces/RBACRoleRevokeParams.md +49 -0
- package/docs/api/interfaces/RBACRoleRevokeResult.md +41 -0
- package/docs/api/interfaces/RBACRoleValidateParams.md +41 -0
- package/docs/api/interfaces/RBACRoleValidateResult.md +49 -0
- package/docs/api/interfaces/RBACRolesListParams.md +41 -0
- package/docs/api/interfaces/RBACRolesListResult.md +57 -0
- package/docs/api/interfaces/RBACSessionTrackParams.md +57 -0
- package/docs/api/interfaces/RBACSessionTrackResult.md +41 -0
- package/docs/api/interfaces/ResourcePermissions.md +119 -0
- package/docs/api/interfaces/RevokeEventAppRoleParams.md +81 -0
- package/docs/api/interfaces/RoleManagementResult.md +41 -0
- package/docs/api/interfaces/SessionRestorationLoaderProps.md +29 -0
- package/docs/api/interfaces/StorageConfig.md +33 -0
- package/docs/api/interfaces/StorageFileInfo.md +57 -0
- package/docs/api/interfaces/StorageFileMetadata.md +113 -0
- package/docs/api/interfaces/StorageListOptions.md +79 -0
- package/docs/api/interfaces/StorageListResult.md +33 -0
- package/docs/api/interfaces/StorageUploadOptions.md +81 -0
- package/docs/api/interfaces/StorageUploadResult.md +49 -0
- package/docs/api/interfaces/StorageUploadSuccess.md +35 -0
- package/docs/api/interfaces/StorageUrlOptions.md +49 -0
- package/docs/api/interfaces/StyleImport.md +17 -0
- package/docs/api/interfaces/SwitchProps.md +30 -0
- package/docs/api/interfaces/TabsContentProps.md +13 -0
- package/docs/api/interfaces/TabsListProps.md +13 -0
- package/docs/api/interfaces/TabsProps.md +13 -0
- package/docs/api/interfaces/TabsTriggerProps.md +41 -0
- package/docs/api/interfaces/TextareaProps.md +43 -0
- package/docs/api/interfaces/ToastActionElement.md +16 -0
- package/docs/api/interfaces/ToastProps.md +13 -0
- package/docs/api/interfaces/UnifiedAuthProviderProps.md +129 -0
- package/docs/api/interfaces/UseAccessibleAppsReturn.md +55 -0
- package/docs/api/interfaces/UseFormDialogOptions.md +49 -0
- package/docs/api/interfaces/UseFormDialogReturn.md +95 -0
- package/docs/api/interfaces/UseInactivityTrackerOptions.md +103 -0
- package/docs/api/interfaces/UseInactivityTrackerReturn.md +91 -0
- package/docs/api/interfaces/UsePublicEventLogoOptions.md +69 -0
- package/docs/api/interfaces/UsePublicEventLogoReturn.md +66 -0
- package/docs/api/interfaces/UsePublicEventOptions.md +29 -0
- package/docs/api/interfaces/UsePublicEventReturn.md +56 -0
- package/docs/api/interfaces/UsePublicFileDisplayOptions.md +39 -0
- package/docs/api/interfaces/UsePublicFileDisplayReturn.md +96 -0
- package/docs/api/interfaces/UsePublicRouteParamsReturn.md +76 -0
- package/docs/api/interfaces/UseResolvedScopeOptions.md +49 -0
- package/docs/api/interfaces/UseResolvedScopeReturn.md +39 -0
- package/docs/api/interfaces/UseResourcePermissionsOptions.md +29 -0
- package/docs/api/interfaces/UserEventAccess.md +92 -0
- package/docs/api/interfaces/UserMenuProps.md +69 -0
- package/docs/api/interfaces/UserProfile.md +49 -0
- package/docs/api/type-aliases/AccessLevel.md +11 -0
- package/docs/api/type-aliases/AccessLevelContext.md +14 -0
- package/docs/api/type-aliases/AllPermissions.md +11 -0
- package/docs/api/type-aliases/ApiError.md +37 -0
- package/docs/api/type-aliases/ApiResult.md +19 -0
- package/docs/api/type-aliases/AuditEventType.md +11 -0
- package/docs/api/type-aliases/BadgeVariant.md +18 -0
- package/docs/api/type-aliases/DataTableFeatureConfig.md +14 -0
- package/docs/api/type-aliases/DialogSize.md +13 -0
- package/docs/api/type-aliases/EventAppRole.md +11 -0
- package/docs/api/type-aliases/FileUploadProps.md +15 -0
- package/docs/api/type-aliases/GetRowId.md +33 -0
- package/docs/api/type-aliases/GlobalErrorHandler.md +35 -0
- package/docs/api/type-aliases/GlobalRole.md +11 -0
- package/docs/api/type-aliases/ImportHandlerResult.md +13 -0
- package/docs/api/type-aliases/NavigationMode.md +13 -0
- package/docs/api/type-aliases/Operation.md +11 -0
- package/docs/api/type-aliases/OrganisationContextType.md +13 -0
- package/docs/api/type-aliases/OrganisationRole.md +11 -0
- package/docs/api/type-aliases/PaceAppLayoutProps.md +14 -0
- package/docs/api/type-aliases/Permission.md +11 -0
- package/docs/api/type-aliases/PermissionCheck.md +46 -0
- package/docs/api/type-aliases/PermissionMap.md +11 -0
- package/docs/api/type-aliases/PermissionSource.md +13 -0
- package/docs/api/type-aliases/RBACConfig.md +13 -0
- package/docs/api/type-aliases/RBACFunctionResponse.md +57 -0
- package/docs/api/type-aliases/Scope.md +41 -0
- package/docs/api/type-aliases/SessionType.md +11 -0
- package/docs/api/type-aliases/UUID.md +11 -0
- package/docs/api/type-aliases/UnifiedAuthContextType.md +13 -0
- package/docs/api/type-aliases/UseFileReferenceForRecordReturn.md +161 -0
- package/docs/api/type-aliases/UseFileReferenceOptions.md +35 -0
- package/docs/api/type-aliases/UseFileReferenceReturn.md +13 -0
- package/docs/api/variables/ALL_PERMISSIONS.md +281 -0
- package/docs/api/variables/APP_PATH_MAPPING.md +14 -0
- package/docs/api/variables/AddressField.md +41 -0
- package/docs/api/variables/Alert.md +11 -0
- package/docs/api/variables/AlertDescription.md +11 -0
- package/docs/api/variables/AlertTitle.md +11 -0
- package/docs/api/variables/Avatar.md +13 -0
- package/docs/api/variables/Button.md +31 -0
- package/docs/api/variables/CACHE_PATTERNS.md +89 -0
- package/docs/api/variables/Calendar.md +74 -0
- package/docs/api/variables/Card.md +11 -0
- package/docs/api/variables/CardActions.md +11 -0
- package/docs/api/variables/CardContent.md +11 -0
- package/docs/api/variables/CardDescription.md +11 -0
- package/docs/api/variables/CardFooter.md +11 -0
- package/docs/api/variables/CardHeader.md +11 -0
- package/docs/api/variables/CardTitle.md +11 -0
- package/docs/api/variables/Checkbox.md +11 -0
- package/docs/api/variables/DEFAULT_APP_PORT_MAP.md +14 -0
- package/docs/api/variables/DEFAULT_FILE_SIZE_LIMIT.md +13 -0
- package/docs/api/variables/Dialog.md +14 -0
- package/docs/api/variables/DialogClose.md +14 -0
- package/docs/api/variables/DialogContent.md +28 -0
- package/docs/api/variables/DialogDescription.md +14 -0
- package/docs/api/variables/DialogPortal.md +14 -0
- package/docs/api/variables/DialogTitle.md +14 -0
- package/docs/api/variables/DialogTrigger.md +14 -0
- package/docs/api/variables/EVENT_APP_PERMISSIONS.md +109 -0
- package/docs/api/variables/ErrorBoundary.md +15 -0
- package/docs/api/variables/FILE_SIZE_LIMITS.md +13 -0
- package/docs/api/variables/Footer.md +11 -0
- package/docs/api/variables/GLOBAL_PERMISSIONS.md +29 -0
- package/docs/api/variables/Label.md +34 -0
- package/docs/api/variables/LoadingSpinner.md +28 -0
- package/docs/api/variables/LoginForm.md +34 -0
- package/docs/api/variables/NavigationMenu.md +203 -0
- package/docs/api/variables/ORGANISATION_PERMISSIONS.md +89 -0
- package/docs/api/variables/PAGE_PERMISSIONS.md +93 -0
- package/docs/api/variables/PaceLoginPage.md +40 -0
- package/docs/api/variables/PagePermissionGuard.md +11 -0
- package/docs/api/variables/Progress.md +32 -0
- package/docs/api/variables/SECURE_CLIENT_SYMBOL.md +14 -0
- package/docs/api/variables/STORAGE_CONFIG.md +13 -0
- package/docs/api/variables/Select.md +26 -0
- package/docs/api/variables/SelectContent.md +26 -0
- package/docs/api/variables/SelectGroup.md +26 -0
- package/docs/api/variables/SelectItem.md +26 -0
- package/docs/api/variables/SelectLabel.md +26 -0
- package/docs/api/variables/SelectSeparator.md +26 -0
- package/docs/api/variables/SelectTrigger.md +26 -0
- package/docs/api/variables/SelectValue.md +26 -0
- package/docs/api/variables/SessionRestorationLoader.md +11 -0
- package/docs/api/variables/Switch.md +23 -0
- package/docs/api/variables/Table.md +35 -0
- package/docs/api/variables/TableBody.md +11 -0
- package/docs/api/variables/TableCaption.md +11 -0
- package/docs/api/variables/TableCell.md +11 -0
- package/docs/api/variables/TableFooter.md +11 -0
- package/docs/api/variables/TableHead.md +11 -0
- package/docs/api/variables/TableHeader.md +11 -0
- package/docs/api/variables/TableRow.md +11 -0
- package/docs/api/variables/Tabs.md +25 -0
- package/docs/api/variables/TabsContent.md +24 -0
- package/docs/api/variables/TabsList.md +25 -0
- package/docs/api/variables/TabsTrigger.md +34 -0
- package/docs/api/variables/Toast.md +36 -0
- package/docs/api/variables/ToastAction.md +32 -0
- package/docs/api/variables/ToastClose.md +32 -0
- package/docs/api/variables/ToastDescription.md +32 -0
- package/docs/api/variables/ToastProvider.md +11 -0
- package/docs/api/variables/ToastTitle.md +32 -0
- package/docs/api/variables/ToastViewport.md +26 -0
- package/docs/api/variables/Tooltip.md +34 -0
- package/docs/api/variables/TooltipContent.md +34 -0
- package/docs/api/variables/TooltipProvider.md +11 -0
- package/docs/api/variables/TooltipRoot.md +11 -0
- package/docs/api/variables/TooltipTrigger.md +11 -0
- package/docs/api/variables/UserMenu.md +11 -0
- package/docs/api/variables/emailSchema.md +13 -0
- package/docs/api/variables/logger.md +203 -0
- package/docs/api/variables/nameSchema.md +13 -0
- package/docs/api/variables/passwordSchema.md +13 -0
- package/docs/api/variables/phoneSchema.md +13 -0
- package/docs/api/variables/rbacCache.md +16 -0
- package/docs/api/variables/styleConfig.md +25 -0
- package/docs/api/variables/urlSchema.md +13 -0
- package/docs/api-reference/hooks.md +2 -0
- package/docs/api-reference/rpc-functions.md +12 -3
- package/docs/core-concepts/rbac-system.md +8 -0
- package/docs/getting-started/cursor-rules.md +17 -20
- package/docs/getting-started/dependencies.md +1 -1
- package/docs/getting-started/setup.md +235 -0
- package/docs/implementation-guides/authentication.md +27 -0
- package/docs/implementation-guides/data-tables.md +184 -3
- package/docs/migration/ApiResult-migration.md +25 -0
- package/docs/rbac/api-reference.md +33 -31
- package/docs/rbac/getting-started.md +7 -0
- package/docs/rbac/troubleshooting.md +5 -1
- package/docs/standards/0-standards-overview.md +50 -15
- package/docs/standards/1-pace-core-compliance-standards.md +62 -57
- package/docs/standards/2-project-structure-standards.md +33 -16
- package/docs/standards/3-architecture-standards.md +41 -1
- package/docs/standards/4-code-quality-standards.md +26 -6
- package/docs/standards/5-styling-standards.md +35 -1
- package/docs/standards/6-security-rbac-standards.md +66 -0
- package/docs/standards/7-api-tech-stack-standards.md +25 -14
- package/docs/standards/8-testing-documentation-standards.md +31 -0
- package/docs/standards/9-operations-standards.md +19 -0
- package/docs/standards/README.md +20 -201
- package/docs/testing/test-setup-for-consumers.md +2 -0
- package/docs/troubleshooting/common-issues.md +17 -1
- package/docs/troubleshooting/organisation-context-setup.md +8 -0
- package/docs/troubleshooting/print-event-name-css-variable-analysis.md +217 -0
- package/eslint-config-pace-core.cjs +20 -0
- package/package.json +16 -22
- package/scripts/build-docs.js +180 -0
- package/scripts/setup.cjs +536 -0
- package/scripts/validate.cjs +480 -0
- package/src/__tests__/helpers/component-test-utils.test.tsx +260 -0
- package/src/__tests__/helpers/optimized-test-setup.test.ts +224 -0
- package/src/__tests__/helpers/supabaseMock.test.ts +273 -0
- package/src/__tests__/helpers/test-providers.test.tsx +99 -0
- package/src/__tests__/helpers/test-providers.tsx +37 -39
- package/src/__tests__/helpers/test-utils.test.tsx +447 -0
- package/src/__tests__/helpers/timer-utils.test.ts +371 -0
- package/src/assets/app-icons/index.test.ts +304 -0
- package/src/components/AddressField/AddressField.test.tsx +1 -1
- package/src/components/AddressField/AddressField.tsx +238 -212
- package/src/components/Button/Button.tsx +1 -1
- package/src/components/Card/Card.test.tsx +172 -17
- package/src/components/Card/Card.tsx +19 -10
- package/src/components/ContextSelector/ContextSelector.internals.tsx +204 -0
- package/src/components/ContextSelector/ContextSelector.test.tsx +360 -0
- package/src/components/ContextSelector/ContextSelector.tsx +66 -280
- package/src/components/ContextSelector/ContextSelector.types.ts +35 -0
- package/src/components/ContextSelector/useContextSelectorState.tsx +195 -0
- package/src/components/DataTable/AUDIT_REPORT.md +59 -44
- package/src/components/DataTable/DataTable.comprehensive.test.tsx +759 -0
- package/src/components/DataTable/DataTable.default-state.test.tsx +524 -0
- package/src/components/DataTable/DataTable.export.test.tsx +705 -0
- package/src/components/DataTable/DataTable.grouping-aggregation.test.tsx +658 -0
- package/src/components/DataTable/DataTable.hooks.test.tsx +192 -0
- package/src/components/DataTable/DataTable.select-label-display.test.tsx +485 -0
- package/src/components/DataTable/DataTable.test.tsx +787 -416
- package/src/components/DataTable/DataTable.tsx +12 -12
- package/src/components/DataTable/DataTableCore.integration.test.tsx +458 -0
- package/src/components/DataTable/DataTableCore.test-setup.ts +221 -0
- package/src/components/DataTable/DataTableCore.test.tsx +970 -0
- package/src/components/DataTable/README.md +155 -0
- package/src/components/DataTable/TESTING.md +101 -0
- package/src/components/DataTable/a11y.basic.test.tsx +788 -0
- package/src/components/DataTable/components/DataTableCore.tsx +104 -864
- package/src/components/DataTable/components/GroupingDropdown.test.tsx +621 -0
- package/src/components/DataTable/components/GroupingDropdown.tsx +2 -2
- package/src/components/DataTable/components/ImportModal.tsx +61 -559
- package/src/components/DataTable/components/ImportModalFileSection.tsx +148 -0
- package/src/components/DataTable/context/DataTableContext.test.tsx +328 -0
- package/src/components/DataTable/context/DataTableContext.tsx +7 -6
- package/src/components/DataTable/core/ColumnFactory.test.ts +403 -0
- package/src/components/DataTable/hooks/useColumnOrderPersistence.test.ts +516 -0
- package/src/components/DataTable/hooks/useColumnVisibilityPersistence.test.ts +256 -0
- package/src/components/DataTable/hooks/useDataTableConfiguration.test.ts +297 -0
- package/src/components/DataTable/hooks/useDataTableConfiguration.ts +14 -2
- package/src/components/DataTable/hooks/useDataTableDataPipeline.test.ts +270 -0
- package/src/components/DataTable/hooks/useDataTableDeletionBatching.test.ts +127 -0
- package/src/components/DataTable/hooks/useDataTableDeletionBatching.ts +106 -0
- package/src/components/DataTable/hooks/useDataTableEffectiveActions.test.ts +461 -0
- package/src/components/DataTable/hooks/useDataTableEffectiveActions.ts +248 -0
- package/src/components/DataTable/hooks/useDataTableLayoutHandlers.test.ts +296 -0
- package/src/components/DataTable/hooks/useDataTableLayoutHandlers.ts +175 -0
- package/src/components/DataTable/hooks/useDataTablePaginationSync.test.ts +203 -0
- package/src/components/DataTable/hooks/useDataTablePaginationSync.ts +109 -0
- package/src/components/DataTable/hooks/useDataTablePermissions.test.ts +280 -0
- package/src/components/DataTable/hooks/useDataTablePermissions.ts +79 -247
- package/src/components/DataTable/hooks/useDataTablePipeline.test.tsx +219 -0
- package/src/components/DataTable/hooks/useDataTablePipeline.tsx +239 -0
- package/src/components/DataTable/hooks/useDataTableRenderGuard.test.tsx +316 -0
- package/src/components/DataTable/hooks/useDataTableRenderGuard.tsx +195 -0
- package/src/components/DataTable/hooks/useDataTableScope.test.ts +102 -0
- package/src/components/DataTable/hooks/useDataTableScope.ts +125 -0
- package/src/components/DataTable/hooks/useDataTableState.test.ts +733 -0
- package/src/components/DataTable/hooks/useDataTableState.ts +145 -94
- package/src/components/DataTable/hooks/useDataTableStateAndPersistence.test.ts +277 -0
- package/src/components/DataTable/hooks/useDataTableStateAndPersistence.ts +222 -0
- package/src/components/DataTable/hooks/useDataTableSuperAdmin.test.ts +93 -0
- package/src/components/DataTable/hooks/useDataTableSuperAdmin.ts +86 -0
- package/src/components/DataTable/hooks/useDataTableTableInstance.test.ts +185 -0
- package/src/components/DataTable/hooks/useDataTableTableInstance.ts +178 -0
- package/src/components/DataTable/hooks/useEffectiveColumnOrder.test.ts +183 -0
- package/src/components/DataTable/hooks/useHierarchicalState.test.ts +294 -0
- package/src/components/DataTable/hooks/useImportModalFocus.test.ts +184 -0
- package/src/components/DataTable/hooks/useImportModalFocus.ts +53 -0
- package/src/components/DataTable/hooks/useImportModalState.test.ts +390 -0
- package/src/components/DataTable/hooks/useImportModalState.ts +345 -0
- package/src/components/DataTable/hooks/useKeyboardNavigation.test.ts +787 -0
- package/src/components/DataTable/hooks/useKeyboardNavigation.ts +309 -269
- package/src/components/DataTable/hooks/usePermissionTracking.test.ts +381 -0
- package/src/components/DataTable/hooks/usePermissionTracking.ts +122 -0
- package/src/components/DataTable/hooks/useServerSideDataEffect.test.ts +258 -0
- package/src/components/DataTable/hooks/useServerSideDataEffect.ts +14 -3
- package/src/components/DataTable/hooks/useTableColumns.test.ts +499 -0
- package/src/components/DataTable/hooks/useTableHandlers.test.ts +461 -0
- package/src/components/DataTable/hooks/useTableHandlers.ts +5 -2
- package/src/components/DataTable/index.ts +18 -17
- package/src/components/DataTable/keyboard.test.tsx +734 -0
- package/src/components/DataTable/mocks/MockRBACProvider.tsx +66 -0
- package/src/components/DataTable/pagination.modes.test.tsx +728 -0
- package/src/components/DataTable/ssr.strict-mode.test.tsx +319 -0
- package/src/components/DataTable/styles.test.ts +379 -0
- package/src/components/DataTable/styles.ts +0 -1
- package/src/components/DataTable/test-utils/MockDataTableComponents.tsx +55 -0
- package/src/components/DataTable/test-utils/dataFactories.ts +103 -0
- package/src/components/DataTable/test-utils/featureConfig.ts +10 -0
- package/src/components/DataTable/test-utils/sharedTestUtils.ts +419 -0
- package/src/components/DataTable/test-utils.ts +94 -0
- package/src/components/DataTable/types/actions.ts +71 -0
- package/src/components/DataTable/types/base.ts +39 -0
- package/src/components/DataTable/types/columns.ts +125 -0
- package/src/components/DataTable/types/export.ts +32 -0
- package/src/components/DataTable/types/features.ts +81 -0
- package/src/components/DataTable/types/hierarchical.ts +44 -0
- package/src/components/DataTable/types/index.ts +43 -0
- package/src/components/DataTable/types/pagination.ts +85 -0
- package/src/components/DataTable/types/performance.ts +47 -0
- package/src/components/DataTable/types/props.ts +62 -0
- package/src/components/DataTable/types/rbac.ts +45 -0
- package/src/components/DataTable/ui/layout/DataTableCore.test.tsx +1194 -0
- package/src/components/DataTable/ui/layout/DataTableCore.tsx +345 -0
- package/src/components/DataTable/ui/layout/DataTableErrorBoundary.test.tsx +438 -0
- package/src/components/DataTable/ui/layout/DataTableErrorBoundary.tsx +225 -0
- package/src/components/DataTable/ui/layout/DataTableLayout.test.tsx +1352 -0
- package/src/components/DataTable/ui/layout/DataTableLayout.tsx +661 -0
- package/src/components/DataTable/ui/modals/BulkDeleteConfirmDialog.test.tsx +91 -0
- package/src/components/DataTable/ui/modals/BulkDeleteConfirmDialog.tsx +43 -0
- package/src/components/DataTable/ui/modals/DataTableModals.test.tsx +749 -0
- package/src/components/DataTable/ui/modals/DataTableModals.tsx +341 -0
- package/src/components/DataTable/ui/modals/ImportModal.test.tsx +1834 -0
- package/src/components/DataTable/ui/modals/ImportModal.tsx +197 -0
- package/src/components/DataTable/ui/modals/ImportModalFailedRowsSection.tsx +60 -0
- package/src/components/DataTable/ui/modals/ImportModalFileSection.tsx +148 -0
- package/src/components/DataTable/ui/modals/ImportModalPreviewSection.tsx +60 -0
- package/src/components/DataTable/ui/modals/ImportModalSummarySection.tsx +59 -0
- package/src/components/DataTable/ui/modals/importModalPersistence.ts +73 -0
- package/src/components/DataTable/ui/shared/AccessDeniedPage.test.tsx +245 -0
- package/src/components/DataTable/ui/shared/AccessDeniedPage.tsx +159 -0
- package/src/components/DataTable/ui/shared/ActionButtons.test.tsx +921 -0
- package/src/components/DataTable/ui/shared/ActionButtons.tsx +195 -0
- package/src/components/DataTable/ui/shared/ColumnFilter.test.tsx +497 -0
- package/src/components/DataTable/ui/shared/ColumnFilter.tsx +113 -0
- package/src/components/DataTable/ui/shared/PaginationControls.test.tsx +451 -0
- package/src/components/DataTable/ui/shared/PaginationControls.tsx +291 -0
- package/src/components/DataTable/ui/shared/SortIndicator.test.tsx +135 -0
- package/src/components/DataTable/ui/shared/SortIndicator.tsx +50 -0
- package/src/components/DataTable/ui/table/EditFields.test.tsx +526 -0
- package/src/components/DataTable/ui/table/EditFields.tsx +355 -0
- package/src/components/DataTable/ui/table/EditableRow.test.tsx +1003 -0
- package/src/components/DataTable/ui/table/EditableRow.tsx +444 -0
- package/src/components/DataTable/ui/table/EmptyState.test.tsx +360 -0
- package/src/components/DataTable/ui/table/EmptyState.tsx +74 -0
- package/src/components/DataTable/ui/table/FilterRow.test.tsx +416 -0
- package/src/components/DataTable/ui/table/FilterRow.tsx +148 -0
- package/src/components/DataTable/ui/table/LoadingState.test.tsx +77 -0
- package/src/components/DataTable/ui/table/LoadingState.tsx +17 -0
- package/src/components/DataTable/ui/table/RowComponent.test.tsx +1024 -0
- package/src/components/DataTable/ui/table/RowComponent.tsx +429 -0
- package/src/components/DataTable/ui/table/UnifiedTableBody.test.tsx +1273 -0
- package/src/components/DataTable/ui/table/UnifiedTableBody.tsx +440 -0
- package/src/components/DataTable/ui/table/cellValueUtils.test.ts +453 -0
- package/src/components/DataTable/ui/table/cellValueUtils.ts +40 -0
- package/src/components/DataTable/ui/toolbar/BulkOperationsDropdown.test.tsx +551 -0
- package/src/components/DataTable/ui/toolbar/BulkOperationsDropdown.tsx +160 -0
- package/src/components/DataTable/ui/toolbar/ColumnVisibilityDropdown.test.tsx +751 -0
- package/src/components/DataTable/ui/toolbar/ColumnVisibilityDropdown.tsx +114 -0
- package/src/components/DataTable/ui/toolbar/DataTableToolbar.test.tsx +629 -0
- package/src/components/DataTable/ui/toolbar/DataTableToolbar.tsx +271 -0
- package/src/components/DataTable/ui/toolbar/GroupingDropdown.test.tsx +621 -0
- package/src/components/DataTable/ui/toolbar/GroupingDropdown.tsx +107 -0
- package/src/components/DataTable/utils/a11yUtils.test.ts +548 -0
- package/src/components/DataTable/utils/aggregationUtils.test.ts +288 -0
- package/src/components/DataTable/utils/columnUtils.test.ts +94 -0
- package/src/components/DataTable/utils/csvParse.test.ts +74 -0
- package/src/components/DataTable/utils/csvParse.ts +65 -0
- package/src/components/DataTable/utils/errorHandling.test.ts +209 -0
- package/src/components/DataTable/utils/exportUtils.test.ts +954 -0
- package/src/components/DataTable/utils/flexibleImport.test.ts +573 -0
- package/src/components/DataTable/utils/flexibleImport.ts +3 -186
- package/src/components/DataTable/utils/hierarchicalSorting.test.ts +235 -0
- package/src/components/DataTable/utils/hierarchicalUtils.test.ts +586 -0
- package/src/components/DataTable/utils/importDateParser.test.ts +162 -0
- package/src/components/DataTable/utils/importDateParser.ts +114 -0
- package/src/components/DataTable/utils/importValueParser.test.ts +138 -0
- package/src/components/DataTable/utils/importValueParser.ts +91 -0
- package/src/components/DataTable/utils/paginationUtils.test.ts +593 -0
- package/src/components/DataTable/utils/paginationUtils.ts +6 -3
- package/src/components/DataTable/utils/performanceUtils.test.ts +470 -0
- package/src/components/DataTable/utils/rowUtils.test.ts +235 -0
- package/src/components/DataTable/utils/selectFieldUtils.test.ts +271 -0
- package/src/components/DataTable/utils/selectFieldUtils.ts +97 -60
- package/src/components/DatePickerWithTimezone/DatePickerWithTimezone.test.tsx +1 -1
- package/src/components/DateTimeField/DateTimeField.test.tsx +1 -1
- package/src/components/Dialog/Dialog.test-utils.ts +49 -0
- package/src/components/Dialog/Dialog.test.tsx +896 -89
- package/src/components/Dialog/Dialog.tsx +174 -882
- package/src/components/Dialog/dialogLock.test.ts +238 -0
- package/src/components/Dialog/dialogLock.ts +98 -0
- package/src/components/Dialog/index.ts +2 -0
- package/src/components/Dialog/useDialogDimensions.test.ts +163 -0
- package/src/components/Dialog/useDialogDimensions.ts +140 -0
- package/src/components/Dialog/useDialogLifecycle.test.ts +361 -0
- package/src/components/Dialog/useDialogLifecycle.ts +135 -0
- package/src/components/Dialog/useDialogPersistence.test.ts +381 -0
- package/src/components/Dialog/useDialogPersistence.ts +357 -0
- package/src/components/FileDisplay/FileDisplay.test.tsx +40 -40
- package/src/components/FileDisplay/FileDisplay.tsx +24 -656
- package/src/components/FileDisplay/FileDisplayContent.test.tsx +395 -0
- package/src/components/FileDisplay/FileDisplayContent.tsx +242 -0
- package/src/components/FileDisplay/FileDisplayDeleteConfirmDialog.test.tsx +74 -0
- package/src/components/FileDisplay/FileDisplayDeleteConfirmDialog.tsx +38 -0
- package/src/components/FileDisplay/FileDisplayEmptyView.test.tsx +33 -0
- package/src/components/FileDisplay/FileDisplayEmptyView.tsx +33 -0
- package/src/components/FileDisplay/FileDisplayErrorView.test.tsx +71 -0
- package/src/components/FileDisplay/FileDisplayErrorView.tsx +50 -0
- package/src/components/FileDisplay/FileDisplayLoadingFallbackView.test.tsx +22 -0
- package/src/components/FileDisplay/FileDisplayLoadingFallbackView.tsx +22 -0
- package/src/components/FileDisplay/FileDisplayLoadingView.test.tsx +21 -0
- package/src/components/FileDisplay/FileDisplayLoadingView.tsx +23 -0
- package/src/components/FileDisplay/FileDisplayMultipleFilesView.test.tsx +101 -0
- package/src/components/FileDisplay/FileDisplayMultipleFilesView.tsx +109 -0
- package/src/components/FileDisplay/FileDisplaySingleDocumentLinkView.test.tsx +58 -0
- package/src/components/FileDisplay/FileDisplaySingleDocumentLinkView.tsx +48 -0
- package/src/components/FileDisplay/FileDisplaySingleFileWithActionsView.test.tsx +111 -0
- package/src/components/FileDisplay/FileDisplaySingleFileWithActionsView.tsx +270 -0
- package/src/components/FileDisplay/FileDisplaySingleImageView.test.tsx +78 -0
- package/src/components/FileDisplay/FileDisplaySingleImageView.tsx +67 -0
- package/src/components/FileDisplay/fallbackUtils.test.ts +50 -0
- package/src/components/FileDisplay/fallbackUtils.ts +44 -0
- package/src/components/FileDisplay/fetchFileDisplayData.ts +24 -0
- package/src/components/FileDisplay/fetchFileDisplayData.unit.test.ts +183 -0
- package/src/components/FileDisplay/fileDisplayUtils.test.ts +58 -0
- package/src/components/FileDisplay/fileDisplayUtils.ts +24 -0
- package/src/components/FileDisplay/useFileDisplay.test.ts +538 -0
- package/src/components/FileDisplay/useFileDisplay.ts +515 -0
- package/src/components/FileDisplay/useFileDisplay.unit.test.ts +1442 -0
- package/src/components/FileDisplay/useFileDisplayData.ts +126 -0
- package/src/components/FileDisplay/usePublicFileDisplay.test.ts +729 -0
- package/src/components/FileDisplay/usePublicFileDisplay.ts +579 -0
- package/src/components/FileUpload/FileUpload.test.tsx +16 -10
- package/src/components/FileUpload/FileUpload.tsx +107 -525
- package/src/components/FileUpload/FileUploadDropZone.tsx +112 -0
- package/src/components/FileUpload/FileUploadProgressItem.tsx +86 -0
- package/src/components/FileUpload/FileUploadProgressList.tsx +40 -0
- package/src/components/FileUpload/useFileUploadManager.test.ts +308 -0
- package/src/components/FileUpload/useFileUploadManager.ts +454 -0
- package/src/components/FileUpload/useResolvedAppId.test.ts +102 -0
- package/src/components/FileUpload/useResolvedAppId.ts +77 -0
- package/src/components/Footer/Footer.test.tsx +6 -292
- package/src/components/Footer/Footer.tsx +8 -125
- package/src/components/Form/Form.test.tsx +44 -27
- package/src/components/Form/Form.tsx +64 -287
- package/src/components/Form/useFormPersistence.ts +257 -0
- package/src/components/Header/Header.test.tsx +17 -18
- package/src/components/Header/Header.tsx +10 -1
- package/src/components/Input/Input.tsx +1 -1
- package/src/components/Label/Label.test.tsx +1 -1
- package/src/components/LoadingSpinner/LoadingSpinner.test.tsx +1 -1
- package/src/components/NavigationMenu/HierarchicalNavItem.tsx +104 -0
- package/src/components/NavigationMenu/NavigationMenu.test.tsx +1029 -26
- package/src/components/NavigationMenu/NavigationMenu.tsx +61 -361
- package/src/components/NavigationMenu/index.ts +6 -1
- package/src/components/NavigationMenu/navigationPermissionHelper.ts +188 -0
- package/src/components/NavigationMenu/useNavigationFiltering.test.ts +1949 -0
- package/src/components/NavigationMenu/useNavigationFiltering.ts +197 -296
- package/src/components/NavigationMenu/useNavigationScope.ts +125 -0
- package/src/components/PaceAppLayout/PaceAppLayout.edge-cases.test.tsx +109 -70
- package/src/components/PaceAppLayout/PaceAppLayout.integration.test.tsx +3 -3
- package/src/components/PaceAppLayout/PaceAppLayout.security.test.tsx +16 -19
- package/src/components/PaceAppLayout/PaceAppLayout.test.tsx +529 -5
- package/src/components/PaceAppLayout/PaceAppLayout.tsx +280 -756
- package/src/components/PaceAppLayout/useFilteredNavItems.ts +319 -0
- package/src/components/PaceAppLayout/usePaceAppLayoutConfig.ts +163 -0
- package/src/components/PaceAppLayout/usePaceAppLayoutGate.tsx +150 -0
- package/src/components/PaceAppLayout/usePaceAppLayoutPermissions.ts +162 -0
- package/src/components/PaceAppLayout/usePaceAppLayoutScope.ts +81 -0
- package/src/components/PaceAppLayout/useRoleBasedRouteAccess.ts +157 -0
- package/src/components/PaceAppLayout/useSuperAdminFallback.ts +58 -0
- package/src/components/PaceLoginPage/PaceLoginPage.test.tsx +31 -25
- package/src/components/PaceLoginPage/PaceLoginPage.tsx +31 -122
- package/src/components/PaceLoginPage/useLoginAppAccess.ts +153 -0
- package/src/components/Progress/Progress.tsx +1 -2
- package/src/components/ProtectedRoute/ProtectedRoute.tsx +29 -235
- package/src/components/ProtectedRoute/useProtectedRouteState.ts +128 -0
- package/src/components/ProtectedRoute/useVisibilityRedirectGrace.ts +89 -0
- package/src/components/PublicLayout/PublicLayout.test.tsx +217 -36
- package/src/components/PublicLayout/PublicPageLayout.tsx +132 -73
- package/src/components/PublicLayout/PublicPageProvider.tsx +5 -1
- package/src/components/Select/Select.test.tsx +1 -1
- package/src/components/Select/Select.tsx +28 -18
- package/src/components/Select/context.test.tsx +56 -0
- package/src/components/Select/text.test.tsx +104 -0
- package/src/components/Select/text.ts +26 -0
- package/src/components/Select/useSelectEvents.test.ts +279 -0
- package/src/components/Select/useSelectEvents.ts +87 -0
- package/src/components/Select/useSelectSearch.test.tsx +295 -0
- package/src/components/Select/useSelectSearch.ts +91 -0
- package/src/components/Select/useSelectState.test.ts +268 -0
- package/src/components/Select/useSelectState.ts +104 -0
- package/src/components/Table/Table.test.tsx +348 -0
- package/src/components/Tabs/Tabs.test.tsx +270 -0
- package/src/components/Tabs/Tabs.tsx +1 -1
- package/src/components/Toast/Toast.test.tsx +420 -0
- package/src/components/index.test.ts +346 -0
- package/src/constants/performance.test.ts +91 -0
- package/src/hooks/ServiceHooks.test.tsx +725 -0
- package/src/hooks/hooks.integration.test.tsx +608 -0
- package/src/hooks/index.ts +7 -4
- package/src/hooks/index.unit.test.ts +220 -0
- package/src/hooks/public/usePublicEvent.test.ts +1 -1
- package/src/hooks/public/usePublicEventLogo.test.ts +1 -1
- package/src/hooks/public/usePublicRouteParams.test.ts +1 -1
- package/src/hooks/services/useAuth.ts +9 -7
- package/src/hooks/useAddressAutocomplete.test.ts +22 -22
- package/src/hooks/useAddressAutocomplete.ts +90 -75
- package/src/hooks/useAppConfig.unit.test.ts +720 -0
- package/src/hooks/useComponentPerformance.unit.test.tsx +316 -0
- package/src/hooks/useDataTablePerformance.ts +100 -120
- package/src/hooks/useDataTablePerformance.unit.test.ts +720 -0
- package/src/hooks/useDataTableState.test.ts +170 -0
- package/src/hooks/useDebounce.unit.test.ts +157 -0
- package/src/hooks/useEventTheme.test.ts +4 -1
- package/src/hooks/useEventTheme.ts +49 -21
- package/src/hooks/useEvents.ts +41 -1
- package/src/hooks/useEvents.unit.test.ts +227 -0
- package/src/hooks/useFileReference.test.ts +44 -41
- package/src/hooks/useFileReference.ts +182 -173
- package/src/hooks/useFileUrl.ts +1 -1
- package/src/hooks/useFileUrl.unit.test.ts +684 -0
- package/src/hooks/useFileUrlCache.test.ts +319 -0
- package/src/hooks/useFileUrlCache.ts +1 -1
- package/src/hooks/useFocusManagement.unit.test.ts +604 -0
- package/src/hooks/useFocusTrap.unit.test.tsx +613 -0
- package/src/hooks/useFormDialog.test.ts +307 -0
- package/src/hooks/useInactivityTracker.ts +138 -131
- package/src/hooks/useInactivityTracker.unit.test.ts +450 -0
- package/src/hooks/useIsMobile.unit.test.ts +317 -0
- package/src/hooks/useIsPrint.ts +62 -0
- package/src/hooks/useIsPrint.unit.test.ts +545 -0
- package/src/hooks/useKeyboardShortcuts.unit.test.ts +907 -0
- package/src/hooks/useOrganisationPermissions.unit.test.tsx +293 -0
- package/src/hooks/useOrganisationSecurity.test.ts +3 -3
- package/src/hooks/useOrganisationSecurity.ts +190 -201
- package/src/hooks/useOrganisationSecurity.unit.test.tsx +959 -0
- package/src/hooks/useOrganisations.unit.test.ts +369 -0
- package/src/hooks/usePerformanceMonitor.unit.test.ts +683 -0
- package/src/hooks/usePermissionCache.test.ts +505 -0
- package/src/hooks/usePermissionCache.ts +276 -271
- package/src/hooks/usePreventTabReload.test.ts +307 -0
- package/src/hooks/usePublicEvent.simple.test.ts +779 -0
- package/src/hooks/usePublicEvent.test.ts +664 -0
- package/src/hooks/usePublicEvent.unit.test.ts +638 -0
- package/src/hooks/usePublicFileDisplay.test.ts +948 -0
- package/src/hooks/usePublicRouteParams.unit.test.ts +442 -0
- package/src/hooks/useQueryCache.test.ts +391 -0
- package/src/hooks/useQueryCache.ts +0 -2
- package/src/hooks/useRBAC.unit.test.ts +253 -0
- package/src/hooks/useSessionDraft.test.ts +556 -0
- package/src/hooks/useSessionRestoration.unit.test.tsx +381 -0
- package/src/hooks/useStorage.ts +21 -16
- package/src/hooks/useStorage.unit.test.ts +684 -0
- package/src/hooks/useToast.test.ts +413 -0
- package/src/hooks/useToast.unit.test.tsx +481 -0
- package/src/hooks/useZodForm.unit.test.tsx +191 -0
- package/src/icons/index.test.ts +133 -0
- package/src/icons/index.ts +2 -0
- package/src/index.test.ts +528 -0
- package/src/index.ts +15 -7
- package/src/providers/AuthProvider.test.tsx +218 -0
- package/src/providers/EventProvider.test.tsx +487 -0
- package/src/providers/InactivityProvider.test-helper.tsx +40 -0
- package/src/providers/InactivityProvider.test.tsx +421 -0
- package/src/providers/ProviderLifecycle.test.tsx +308 -0
- package/src/providers/UnifiedAuthProvider.test.tsx +503 -0
- package/src/providers/index.test.ts +138 -0
- package/src/providers/services/AuthServiceProvider.integration.test.tsx +229 -0
- package/src/providers/services/AuthServiceProvider.test.tsx +643 -0
- package/src/providers/services/EventServiceProvider.test.tsx +844 -0
- package/src/providers/services/InactivityServiceProvider.test.tsx +667 -0
- package/src/providers/services/OrganisationServiceProvider.test.tsx +445 -0
- package/src/providers/services/UnifiedAuthContext.ts +30 -27
- package/src/providers/services/UnifiedAuthProvider.advanced.test.tsx +434 -0
- package/src/providers/services/UnifiedAuthProvider.appId.test.tsx +408 -0
- package/src/providers/services/UnifiedAuthProvider.integration.test.tsx +304 -0
- package/src/providers/services/UnifiedAuthProvider.tsx +115 -360
- package/src/providers/services/contexts.test.tsx +281 -0
- package/src/providers/services/useUnifiedAuth.test.tsx +251 -0
- package/src/providers/services/useUnifiedAuthContextValue.ts +279 -0
- package/src/providers/useInactivity.test-helper.ts +27 -0
- package/src/rbac/README.md +7 -5
- package/src/rbac/adapters.comprehensive.test.tsx +429 -0
- package/src/rbac/adapters.test.tsx +22 -22
- package/src/rbac/adapters.tsx +29 -29
- package/src/rbac/api.test.ts +1075 -87
- package/src/rbac/api.ts +300 -255
- package/src/rbac/audit-batched.test.ts +550 -0
- package/src/rbac/audit.ts +4 -1
- package/src/rbac/auth-rbac-security.integration.test.tsx +300 -0
- package/src/rbac/auth-rbac.e2e.test.tsx +510 -0
- package/src/rbac/cache-invalidation.test.ts +715 -0
- package/src/rbac/components/AccessDenied.test.tsx +324 -0
- package/src/rbac/components/NavigationGuard.test.tsx +1148 -0
- package/src/rbac/components/NavigationGuard.tsx +2 -1
- package/src/rbac/components/PagePermissionGuard.guard.test.tsx +236 -0
- package/src/rbac/components/PagePermissionGuard.performance.test.tsx +252 -0
- package/src/rbac/components/PagePermissionGuard.race-condition.test.tsx +243 -0
- package/src/rbac/components/PagePermissionGuard.test.tsx +1443 -0
- package/src/rbac/components/PagePermissionGuard.tsx +177 -372
- package/src/rbac/components/PagePermissionGuard.verification.test.tsx +185 -0
- package/src/rbac/config.ts +58 -18
- package/src/rbac/engine.comprehensive.test.ts +808 -0
- package/src/rbac/engine.test.ts +494 -0
- package/src/rbac/engine.ts +23 -1
- package/src/rbac/errors.ts +89 -55
- package/src/rbac/hooks/permissions/runPermissionCheck.ts +91 -0
- package/src/rbac/hooks/permissions/useAccessLevel.test.ts +622 -0
- package/src/rbac/hooks/permissions/useAccessLevel.ts +16 -6
- package/src/rbac/hooks/permissions/useCan.test.ts +837 -0
- package/src/rbac/hooks/permissions/useCan.ts +177 -255
- package/src/rbac/hooks/permissions/useMultiplePermissions.test.ts +843 -0
- package/src/rbac/hooks/permissions/useMultiplePermissions.ts +24 -11
- package/src/rbac/hooks/permissions/usePermissions.test.ts +543 -0
- package/src/rbac/hooks/permissions/usePermissions.ts +36 -65
- package/src/rbac/hooks/useCan.test.ts +44 -45
- package/src/rbac/hooks/usePageAccessLogging.ts +160 -0
- package/src/rbac/hooks/usePageGuardScope.ts +119 -0
- package/src/rbac/hooks/usePagePermissionCheck.ts +67 -0
- package/src/rbac/hooks/usePermissions.integration.test.ts +427 -0
- package/src/rbac/hooks/usePermissions.stability.test.ts +268 -0
- package/src/rbac/hooks/usePermissions.test.ts +54 -54
- package/src/rbac/hooks/useRBAC.test.ts +313 -217
- package/src/rbac/hooks/useRBAC.ts +145 -81
- package/src/rbac/hooks/useResolvedScope.ts +16 -10
- package/src/rbac/hooks/useResourcePermissions.test.ts +73 -83
- package/src/rbac/hooks/useResourcePermissions.ts +77 -152
- package/src/rbac/hooks/useResourcePermissionsSuperAdmin.ts +67 -0
- package/src/rbac/hooks/useRoleManagement.test.ts +27 -112
- package/src/rbac/hooks/useRoleManagement.ts +153 -585
- package/src/rbac/hooks/useSecureSupabase.test.ts +1179 -0
- package/src/rbac/hooks/useSecureSupabase.ts +10 -2
- package/src/rbac/hooks/useSuperAdminCheck.ts +80 -0
- package/src/rbac/performance.test.ts +451 -0
- package/src/rbac/rbac-core.test.tsx +276 -0
- package/src/rbac/rbac-engine-core-logic.test.ts +387 -0
- package/src/rbac/rbac-engine-simplified.test.ts +252 -0
- package/src/rbac/rbac-functions.test.ts +703 -0
- package/src/rbac/rbac-role-isolation.test.ts +456 -0
- package/src/rbac/request-deduplication.test.ts +14 -9
- package/src/rbac/request-deduplication.ts +5 -4
- package/src/rbac/scenarios.user-role.test.tsx +271 -0
- package/src/rbac/secureClient.test.ts +514 -83
- package/src/rbac/secureClient.ts +8 -2
- package/src/rbac/security.test.ts +323 -0
- package/src/rbac/types/roleManagement.ts +66 -0
- package/src/rbac/types.ts +3 -0
- package/src/rbac/utils/clientSecurity.test.ts +192 -0
- package/src/rbac/utils/contextValidator.test.ts +126 -0
- package/src/rbac/utils/contextValidator.ts +5 -1
- package/src/rbac/utils/deep-equal.test.ts +76 -0
- package/src/rbac/utils/eventContext.test.ts +401 -0
- package/src/rbac/utils/eventContext.ts +37 -33
- package/src/rbac/utils/fetchPermissionMap.ts +13 -0
- package/src/rbac/utils/permissionMapHelpers.ts +34 -0
- package/src/rbac/utils/roleManagementRpc.ts +303 -0
- package/src/services/AuthService.edge-cases.test.ts +746 -0
- package/src/services/AuthService.restoreSession.test.ts +59 -0
- package/src/services/AuthService.test.ts +1362 -0
- package/src/services/AuthService.ts +184 -205
- package/src/services/BaseService.edge-cases.test.ts +506 -0
- package/src/services/BaseService.test.ts +363 -0
- package/src/services/EventService.edge-cases.test.ts +636 -0
- package/src/services/EventService.eventColours.test.ts +64 -0
- package/src/services/EventService.test.ts +1250 -0
- package/src/services/EventService.ts +251 -316
- package/src/services/InactivityService.edge-cases.test.ts +492 -0
- package/src/services/InactivityService.lifecycle.test.ts +406 -0
- package/src/services/InactivityService.test.ts +829 -0
- package/src/services/InactivityService.ts +172 -213
- package/src/services/OrganisationService.edge-cases.test.ts +633 -0
- package/src/services/OrganisationService.pagination.test.ts +409 -0
- package/src/services/OrganisationService.test.ts +1579 -0
- package/src/services/OrganisationService.ts +184 -238
- package/src/services/base/BaseService.test.ts +1 -1
- package/src/services/interfaces/IAuthService.test.ts +184 -0
- package/src/services/interfaces/IAuthService.ts +10 -9
- package/src/services/interfaces/IEventService.test.ts +176 -0
- package/src/services/interfaces/IInactivityService.test.ts +183 -0
- package/src/services/interfaces/IOrganisationService.test.ts +207 -0
- package/src/styles/core.css +243 -12
- package/src/theming/parseEventColours.test.ts +321 -0
- package/src/theming/runtime.test.ts +495 -0
- package/src/theming/runtime.ts +71 -2
- package/src/types/api-result.ts +53 -0
- package/src/types/core.test.ts +397 -0
- package/src/types/database-generated.test.ts +78 -0
- package/src/types/database.generated.ts +45 -10
- package/src/types/event.ts +38 -18
- package/src/types/file-reference.test.ts +351 -0
- package/src/types/file-reference.ts +37 -12
- package/src/types/guards.test.ts +246 -0
- package/src/types/index.test.ts +265 -0
- package/src/types/index.ts +3 -0
- package/src/types/organisation.roles.test.ts +55 -0
- package/src/types/organisation.test.ts +1105 -0
- package/src/types/organisation.ts +15 -15
- package/src/types/supabase.ts +13 -4
- package/src/types/theme.test.ts +830 -0
- package/src/types/type-validation.test.ts +526 -0
- package/src/types/validation.test.ts +729 -0
- package/src/utils/app/appIdResolver.test.ts +98 -71
- package/src/utils/app/appIdResolver.ts +31 -20
- package/src/utils/appConfig.unit.test.ts +55 -0
- package/src/utils/audit.unit.test.ts +69 -0
- package/src/utils/auth-utils.unit.test.ts +69 -0
- package/src/utils/bundleAnalysis.unit.test.ts +326 -0
- package/src/utils/cn.unit.test.ts +34 -0
- package/src/utils/context/organisationContext.test.ts +105 -91
- package/src/utils/context/organisationContext.ts +29 -40
- package/src/utils/core/cn.test.ts +66 -0
- package/src/utils/core/debugLogger.test.ts +113 -0
- package/src/utils/core/logger.test.ts +217 -0
- package/src/utils/core/mergeRefs.ts +24 -0
- package/src/utils/debugLogger.test.ts +417 -0
- package/src/utils/deviceFingerprint.unit.test.ts +818 -0
- package/src/utils/dynamic/createLazyComponent.tsx +9 -1
- package/src/utils/dynamic/dynamicUtils.test.ts +185 -0
- package/src/utils/dynamic/lazyLoad.test.tsx +156 -0
- package/src/utils/dynamicUtils.unit.test.ts +331 -0
- package/src/utils/file-reference/file-reference.test.ts +1249 -0
- package/src/utils/file-reference/index.ts +330 -347
- package/src/utils/formatDate.unit.test.ts +109 -0
- package/src/utils/formatting/formatDateTimeTimezone.test.ts +1 -1
- package/src/utils/formatting/formatNumber.test.ts +1 -1
- package/src/utils/formatting.unit.test.ts +99 -0
- package/src/utils/google-places/googlePlacesUtils.test.ts +70 -48
- package/src/utils/google-places/googlePlacesUtils.ts +67 -99
- package/src/utils/google-places/loadGoogleMapsScript.test.ts +25 -22
- package/src/utils/google-places/loadGoogleMapsScript.ts +138 -117
- package/src/utils/index.unit.test.ts +251 -0
- package/src/utils/lazyLoad.unit.test.tsx +319 -0
- package/src/utils/location/location.test.ts +1 -1
- package/src/utils/logger.unit.test.ts +398 -0
- package/src/utils/organisationContext.unit.test.ts +180 -0
- package/src/utils/performance/bundleAnalysis.test.ts +148 -0
- package/src/utils/performance/performanceBenchmark.test.ts +251 -0
- package/src/utils/performance/performanceBudgets.test.ts +241 -0
- package/src/utils/performanceBenchmark.test.ts +174 -0
- package/src/utils/performanceBudgets.unit.test.ts +288 -0
- package/src/utils/permissionTypes.unit.test.ts +250 -0
- package/src/utils/permissionUtils.unit.test.ts +362 -0
- package/src/utils/permissions/permissionTypes.test.ts +149 -0
- package/src/utils/persistence/keyDerivation.test.ts +306 -0
- package/src/utils/persistence/sensitiveFieldDetection.test.ts +271 -0
- package/src/utils/request-deduplication.test.ts +349 -0
- package/src/utils/sanitization.unit.test.ts +346 -0
- package/src/utils/schemaUtils.unit.test.ts +441 -0
- package/src/utils/secureDataAccess.unit.test.ts +334 -0
- package/src/utils/secureErrors.unit.test.ts +390 -0
- package/src/utils/secureStorage.unit.test.ts +289 -0
- package/src/utils/security/auth-utils.ts +34 -23
- package/src/utils/security/secureDataAccess.ts +241 -281
- package/src/utils/security/secureErrors.test.ts +1 -1
- package/src/utils/security/secureStorage.test.ts +1 -1
- package/src/utils/security/security.test.ts +25 -17
- package/src/utils/security/security.ts +15 -18
- package/src/utils/security/securityMonitor.test.ts +1 -1
- package/src/utils/security.unit.test.ts +155 -0
- package/src/utils/securityMonitor.unit.test.ts +276 -0
- package/src/utils/sessionTracking.unit.test.ts +218 -0
- package/src/utils/storage/config.unit.test.ts +239 -0
- package/src/utils/storage/helpers.test.ts +88 -102
- package/src/utils/storage/helpers.ts +173 -251
- package/src/utils/storage/index.unit.test.ts +68 -0
- package/src/utils/storage/types.ts +7 -0
- package/src/utils/supabase/createBaseClient.test.ts +31 -14
- package/src/utils/timezone/timezone.test.ts +1 -1
- package/src/utils/timezone.test.ts +345 -0
- package/src/utils/validation/common.test.ts +115 -0
- package/src/utils/validation/csrf.test.ts +198 -0
- package/src/utils/validation/csrf.ts +42 -41
- package/src/utils/validation/htmlSanitization.unit.test.ts +618 -0
- package/src/utils/validation/passwordSchema.test.ts +164 -0
- package/src/utils/validation/schema.test.ts +127 -0
- package/src/utils/validation/sqlInjectionProtection.test.ts +165 -0
- package/src/utils/validation/user.test.ts +173 -0
- package/src/utils/validation/validation.test.ts +197 -0
- package/src/utils/validation/validationUtils.test.ts +294 -0
- package/src/utils/validation.unit.test.ts +307 -0
- package/src/utils/validationUtils.unit.test.ts +558 -0
- package/dist/DataTable-SAXFG4XI.js +0 -13
- package/dist/InactivityServiceProvider-DHryoh6K.d.ts +0 -299
- package/dist/UnifiedAuthProvider-BBD2PS3Q.js +0 -7
- package/dist/UnifiedAuthProvider-CiBAl9-s.d.ts +0 -151
- package/dist/api-F47QJ7FX.js +0 -4
- package/dist/audit-Z6ZZBWLU.js +0 -3
- package/dist/auth-BZOJqrdd.d.ts +0 -49
- package/dist/chunk-3GWSPISD.js +0 -61
- package/dist/chunk-66R6RLUZ.js +0 -529
- package/dist/chunk-7YDC7LMU.js +0 -487
- package/dist/chunk-BCTXBU6U.js +0 -704
- package/dist/chunk-FBZ7U3ID.js +0 -2209
- package/dist/chunk-FN52B75D.js +0 -246
- package/dist/chunk-JJEYZ3DX.js +0 -165
- package/dist/chunk-KPYQWGFQ.js +0 -183
- package/dist/chunk-KSNLMI7N.js +0 -481
- package/dist/chunk-KYURMOQM.js +0 -977
- package/dist/chunk-LNHFAF4X.js +0 -2279
- package/dist/chunk-MPY44PWB.js +0 -8510
- package/dist/chunk-NIU6DPQV.js +0 -427
- package/dist/chunk-TFIPNIPE.js +0 -5379
- package/dist/chunk-UZNAFKGW.js +0 -125
- package/dist/chunk-W46INAVW.js +0 -1216
- package/dist/chunk-X5EAU5G7.js +0 -793
- package/dist/chunk-Y4PF6HIM.js +0 -2862
- package/dist/database.generated-DT8JTZiP.d.ts +0 -9406
- package/dist/event-WTAQuGcq.d.ts +0 -239
- package/dist/file-reference-BavO2eQj.d.ts +0 -148
- package/dist/functions-DH45k8ec.d.ts +0 -208
- package/dist/timezone-K-ptz3HO.d.ts +0 -696
- package/dist/types-BE2sEHKd.d.ts +0 -55
- package/dist/types-CvOPXWWZ.d.ts +0 -111
- package/dist/types-D05dCGma.d.ts +0 -521
- package/dist/usePublicPageContext-vxBlEHO9.d.ts +0 -4290
- package/dist/usePublicRouteParams-G3Ks53mk.d.ts +0 -877
- package/docs/api/modules.md +0 -9889
- package/scripts/build-docs-incremental.js +0 -179
- package/scripts/eslint-audit.cjs +0 -222
- package/scripts/generate-docs.js +0 -157
- package/scripts/install-cursor-rules.cjs +0 -255
- package/scripts/install-eslint-config.cjs +0 -349
- package/scripts/setup-build-cache.js +0 -73
- package/scripts/validate-pre-publish.js +0 -145
- package/src/__tests__/helpers/__tests__/component-test-utils.test.tsx +0 -260
- package/src/__tests__/helpers/__tests__/optimized-test-setup.test.ts +0 -224
- package/src/__tests__/helpers/__tests__/supabaseMock.test.ts +0 -273
- package/src/__tests__/helpers/__tests__/test-providers.test.tsx +0 -99
- package/src/__tests__/helpers/__tests__/test-utils.test.tsx +0 -446
- package/src/__tests__/helpers/__tests__/timer-utils.test.ts +0 -371
- package/src/__tests__/hooks/usePermissions.test.ts +0 -268
- package/src/__tests__/index.test.ts +0 -532
- package/src/__tests__/integration/UserProfile.test.tsx +0 -124
- package/src/__tests__/public-recipe-view.test.ts +0 -228
- package/src/__tests__/rbac/PagePermissionGuard.test.tsx +0 -222
- package/src/__tests__/rls-policies.test.ts +0 -472
- package/src/components/ContextSelector/__tests__/ContextSelector.test.tsx +0 -360
- package/src/components/DataTable/__tests__/DataTable.comprehensive.test.tsx +0 -759
- package/src/components/DataTable/__tests__/DataTable.default-state.test.tsx +0 -524
- package/src/components/DataTable/__tests__/DataTable.export.test.tsx +0 -705
- package/src/components/DataTable/__tests__/DataTable.grouping-aggregation.test.tsx +0 -658
- package/src/components/DataTable/__tests__/DataTable.hooks.test.tsx +0 -192
- package/src/components/DataTable/__tests__/DataTable.select-label-display.test.tsx +0 -485
- package/src/components/DataTable/__tests__/DataTable.test.tsx +0 -876
- package/src/components/DataTable/__tests__/DataTableCore.test-setup.ts +0 -220
- package/src/components/DataTable/__tests__/DataTableCore.test.tsx +0 -970
- package/src/components/DataTable/__tests__/README.md +0 -145
- package/src/components/DataTable/__tests__/a11y.basic.test.tsx +0 -788
- package/src/components/DataTable/__tests__/keyboard.test.tsx +0 -756
- package/src/components/DataTable/__tests__/mocks/MockRBACProvider.tsx +0 -66
- package/src/components/DataTable/__tests__/pagination.modes.test.tsx +0 -728
- package/src/components/DataTable/__tests__/ssr.strict-mode.test.tsx +0 -319
- package/src/components/DataTable/__tests__/styles.test.ts +0 -382
- package/src/components/DataTable/__tests__/test-utils/dataFactories.ts +0 -103
- package/src/components/DataTable/__tests__/test-utils/sharedTestUtils.tsx +0 -388
- package/src/components/DataTable/__tests__/test-utils.ts +0 -94
- package/src/components/DataTable/components/AccessDeniedPage.tsx +0 -159
- package/src/components/DataTable/components/ActionButtons.tsx +0 -195
- package/src/components/DataTable/components/BulkOperationsDropdown.tsx +0 -160
- package/src/components/DataTable/components/ColumnFilter.tsx +0 -113
- package/src/components/DataTable/components/ColumnVisibilityDropdown.tsx +0 -114
- package/src/components/DataTable/components/DataTableErrorBoundary.tsx +0 -225
- package/src/components/DataTable/components/DataTableLayout.tsx +0 -584
- package/src/components/DataTable/components/DataTableModals.tsx +0 -333
- package/src/components/DataTable/components/DataTableToolbar.tsx +0 -271
- package/src/components/DataTable/components/EditFields.tsx +0 -286
- package/src/components/DataTable/components/EditableRow.tsx +0 -462
- package/src/components/DataTable/components/EmptyState.tsx +0 -82
- package/src/components/DataTable/components/FilterRow.tsx +0 -148
- package/src/components/DataTable/components/LoadingState.tsx +0 -17
- package/src/components/DataTable/components/PaginationControls.tsx +0 -285
- package/src/components/DataTable/components/RowComponent.tsx +0 -423
- package/src/components/DataTable/components/SortIndicator.tsx +0 -50
- package/src/components/DataTable/components/UnifiedTableBody.tsx +0 -395
- package/src/components/DataTable/components/__tests__/AccessDeniedPage.test.tsx +0 -245
- package/src/components/DataTable/components/__tests__/ActionButtons.test.tsx +0 -919
- package/src/components/DataTable/components/__tests__/BulkOperationsDropdown.test.tsx +0 -544
- package/src/components/DataTable/components/__tests__/ColumnFilter.test.tsx +0 -484
- package/src/components/DataTable/components/__tests__/ColumnVisibilityDropdown.test.tsx +0 -748
- package/src/components/DataTable/components/__tests__/DataTableCore.test.tsx +0 -792
- package/src/components/DataTable/components/__tests__/DataTableErrorBoundary.test.tsx +0 -438
- package/src/components/DataTable/components/__tests__/DataTableLayout.test.tsx +0 -467
- package/src/components/DataTable/components/__tests__/DataTableModals.test.tsx +0 -358
- package/src/components/DataTable/components/__tests__/DataTableToolbar.test.tsx +0 -629
- package/src/components/DataTable/components/__tests__/EditFields.test.tsx +0 -526
- package/src/components/DataTable/components/__tests__/EditableRow.test.tsx +0 -994
- package/src/components/DataTable/components/__tests__/EmptyState.test.tsx +0 -420
- package/src/components/DataTable/components/__tests__/FilterRow.test.tsx +0 -415
- package/src/components/DataTable/components/__tests__/GroupingDropdown.test.tsx +0 -612
- package/src/components/DataTable/components/__tests__/ImportModal.test.tsx +0 -957
- package/src/components/DataTable/components/__tests__/LoadingState.test.tsx +0 -81
- package/src/components/DataTable/components/__tests__/PaginationControls.test.tsx +0 -429
- package/src/components/DataTable/components/__tests__/RowComponent.test.tsx +0 -629
- package/src/components/DataTable/components/__tests__/SortIndicator.test.tsx +0 -135
- package/src/components/DataTable/components/__tests__/UnifiedTableBody.test.tsx +0 -864
- package/src/components/DataTable/components/__tests__/cellValueUtils.test.ts +0 -453
- package/src/components/DataTable/components/cellValueUtils.ts +0 -40
- package/src/components/DataTable/components/hooks/useImportModalFocus.test.ts +0 -184
- package/src/components/DataTable/components/hooks/useImportModalFocus.ts +0 -53
- package/src/components/DataTable/components/hooks/usePermissionTracking.test.ts +0 -381
- package/src/components/DataTable/components/hooks/usePermissionTracking.ts +0 -122
- package/src/components/DataTable/context/__tests__/DataTableContext.test.tsx +0 -328
- package/src/components/DataTable/core/ActionManager.ts +0 -235
- package/src/components/DataTable/core/ColumnManager.ts +0 -204
- package/src/components/DataTable/core/DataManager.ts +0 -190
- package/src/components/DataTable/core/LocalDataAdapter.ts +0 -274
- package/src/components/DataTable/core/PluginRegistry.ts +0 -229
- package/src/components/DataTable/core/StateManager.ts +0 -312
- package/src/components/DataTable/core/__tests__/ActionManager.test.ts +0 -235
- package/src/components/DataTable/core/__tests__/ColumnFactory.test.ts +0 -403
- package/src/components/DataTable/core/__tests__/ColumnManager.test.ts +0 -141
- package/src/components/DataTable/core/__tests__/DataManager.test.ts +0 -178
- package/src/components/DataTable/core/__tests__/LocalDataAdapter.test.ts +0 -133
- package/src/components/DataTable/core/__tests__/PluginRegistry.test.ts +0 -142
- package/src/components/DataTable/core/__tests__/StateManager.test.ts +0 -158
- package/src/components/DataTable/core/interfaces.ts +0 -338
- package/src/components/DataTable/hooks/__tests__/useColumnOrderPersistence.test.ts +0 -516
- package/src/components/DataTable/hooks/__tests__/useColumnVisibilityPersistence.test.ts +0 -256
- package/src/components/DataTable/hooks/__tests__/useDataTableConfiguration.test.ts +0 -297
- package/src/components/DataTable/hooks/__tests__/useDataTableDataPipeline.test.ts +0 -270
- package/src/components/DataTable/hooks/__tests__/useDataTablePermissions.test.ts +0 -280
- package/src/components/DataTable/hooks/__tests__/useDataTableState.test.ts +0 -691
- package/src/components/DataTable/hooks/__tests__/useEffectiveColumnOrder.test.ts +0 -183
- package/src/components/DataTable/hooks/__tests__/useHierarchicalState.test.ts +0 -294
- package/src/components/DataTable/hooks/__tests__/useKeyboardNavigation.test.ts +0 -787
- package/src/components/DataTable/hooks/__tests__/useServerSideDataEffect.test.ts +0 -258
- package/src/components/DataTable/hooks/__tests__/useTableColumns.test.ts +0 -499
- package/src/components/DataTable/hooks/__tests__/useTableHandlers.test.ts +0 -440
- package/src/components/DataTable/types.ts +0 -764
- package/src/components/DataTable/utils/__tests__/a11yUtils.test.ts +0 -548
- package/src/components/DataTable/utils/__tests__/aggregationUtils.test.ts +0 -288
- package/src/components/DataTable/utils/__tests__/columnUtils.test.ts +0 -94
- package/src/components/DataTable/utils/__tests__/errorHandling.test.ts +0 -209
- package/src/components/DataTable/utils/__tests__/exportUtils.test.ts +0 -954
- package/src/components/DataTable/utils/__tests__/flexibleImport.test.ts +0 -573
- package/src/components/DataTable/utils/__tests__/hierarchicalSorting.test.ts +0 -235
- package/src/components/DataTable/utils/__tests__/hierarchicalUtils.test.ts +0 -586
- package/src/components/DataTable/utils/__tests__/paginationUtils.test.ts +0 -593
- package/src/components/DataTable/utils/__tests__/performanceUtils.test.ts +0 -470
- package/src/components/DataTable/utils/__tests__/rowUtils.test.ts +0 -235
- package/src/components/DataTable/utils/__tests__/selectFieldUtils.test.ts +0 -208
- package/src/components/NavigationMenu/__tests__/useNavigationFiltering.test.ts +0 -1934
- package/src/components/Select/__tests__/context.test.tsx +0 -56
- package/src/components/Select/hooks/__tests__/useSelectEvents.test.ts +0 -279
- package/src/components/Select/hooks/__tests__/useSelectSearch.test.tsx +0 -295
- package/src/components/Select/hooks/__tests__/useSelectState.test.ts +0 -254
- package/src/components/Select/hooks/useSelectEvents.ts +0 -87
- package/src/components/Select/hooks/useSelectSearch.ts +0 -91
- package/src/components/Select/hooks/useSelectState.ts +0 -104
- package/src/components/Select/utils/__tests__/text.test.tsx +0 -104
- package/src/components/Select/utils/text.ts +0 -26
- package/src/components/__tests__/index.test.ts +0 -346
- package/src/constants/__tests__/performance.test.ts +0 -91
- package/src/hooks/__tests__/ServiceHooks.test.tsx +0 -725
- package/src/hooks/__tests__/hooks.integration.test.tsx +0 -608
- package/src/hooks/__tests__/index.unit.test.ts +0 -220
- package/src/hooks/__tests__/useAppConfig.unit.test.ts +0 -406
- package/src/hooks/__tests__/useComponentPerformance.unit.test.tsx +0 -328
- package/src/hooks/__tests__/useDataTablePerformance.unit.test.ts +0 -720
- package/src/hooks/__tests__/useDataTableState.test.ts +0 -170
- package/src/hooks/__tests__/useDebounce.unit.test.ts +0 -157
- package/src/hooks/__tests__/useEvents.unit.test.ts +0 -227
- package/src/hooks/__tests__/useFileDisplay.test.ts +0 -540
- package/src/hooks/__tests__/useFileDisplay.unit.test.ts +0 -1109
- package/src/hooks/__tests__/useFileUrl.unit.test.ts +0 -696
- package/src/hooks/__tests__/useFileUrlCache.test.ts +0 -319
- package/src/hooks/__tests__/useFocusManagement.unit.test.ts +0 -604
- package/src/hooks/__tests__/useFocusTrap.unit.test.tsx +0 -613
- package/src/hooks/__tests__/useFormDialog.test.ts +0 -307
- package/src/hooks/__tests__/useInactivityTracker.unit.test.ts +0 -446
- package/src/hooks/__tests__/useIsMobile.unit.test.ts +0 -317
- package/src/hooks/__tests__/useKeyboardShortcuts.unit.test.ts +0 -907
- package/src/hooks/__tests__/useOrganisationPermissions.unit.test.tsx +0 -293
- package/src/hooks/__tests__/useOrganisationSecurity.unit.test.tsx +0 -961
- package/src/hooks/__tests__/useOrganisations.unit.test.ts +0 -369
- package/src/hooks/__tests__/usePerformanceMonitor.unit.test.ts +0 -694
- package/src/hooks/__tests__/usePermissionCache.test.ts +0 -506
- package/src/hooks/__tests__/usePreventTabReload.test.ts +0 -307
- package/src/hooks/__tests__/usePublicEvent.simple.test.ts +0 -794
- package/src/hooks/__tests__/usePublicEvent.test.ts +0 -670
- package/src/hooks/__tests__/usePublicEvent.unit.test.ts +0 -638
- package/src/hooks/__tests__/usePublicFileDisplay.test.ts +0 -948
- package/src/hooks/__tests__/usePublicRouteParams.unit.test.ts +0 -442
- package/src/hooks/__tests__/useQueryCache.test.ts +0 -391
- package/src/hooks/__tests__/useRBAC.unit.test.ts +0 -236
- package/src/hooks/__tests__/useSessionDraft.test.ts +0 -556
- package/src/hooks/__tests__/useSessionRestoration.unit.test.tsx +0 -390
- package/src/hooks/__tests__/useStorage.unit.test.ts +0 -721
- package/src/hooks/__tests__/useToast.test.ts +0 -413
- package/src/hooks/__tests__/useToast.unit.test.tsx +0 -481
- package/src/hooks/__tests__/useZodForm.unit.test.tsx +0 -191
- package/src/hooks/public/usePublicFileDisplay.test.ts +0 -723
- package/src/hooks/public/usePublicFileDisplay.ts +0 -534
- package/src/hooks/useFileDisplay.ts +0 -748
- package/src/icons/__tests__/index.test.ts +0 -133
- package/src/providers/OrganisationProvider.test.tsx +0 -40
- package/src/providers/OrganisationProvider.tsx +0 -92
- package/src/providers/__tests__/AuthProvider.test.tsx +0 -218
- package/src/providers/__tests__/EventProvider.test.tsx +0 -487
- package/src/providers/__tests__/InactivityProvider.test-helper.tsx +0 -65
- package/src/providers/__tests__/InactivityProvider.test.tsx +0 -428
- package/src/providers/__tests__/OrganisationProvider.test.tsx +0 -616
- package/src/providers/__tests__/OrganisationProvider.wrapper.test.tsx +0 -591
- package/src/providers/__tests__/ProviderLifecycle.test.tsx +0 -308
- package/src/providers/__tests__/UnifiedAuthProvider.test.tsx +0 -503
- package/src/providers/__tests__/index.test.ts +0 -138
- package/src/providers/services/__tests__/AuthServiceProvider.integration.test.tsx +0 -229
- package/src/providers/services/__tests__/AuthServiceProvider.test.tsx +0 -638
- package/src/providers/services/__tests__/EventServiceProvider.test.tsx +0 -839
- package/src/providers/services/__tests__/InactivityServiceProvider.test.tsx +0 -662
- package/src/providers/services/__tests__/OrganisationServiceProvider.test.tsx +0 -440
- package/src/providers/services/__tests__/UnifiedAuthProvider.advanced.test.tsx +0 -435
- package/src/providers/services/__tests__/UnifiedAuthProvider.appId.test.tsx +0 -408
- package/src/providers/services/__tests__/UnifiedAuthProvider.integration.test.tsx +0 -301
- package/src/providers/services/__tests__/contexts.test.tsx +0 -281
- package/src/providers/services/__tests__/useUnifiedAuth.test.tsx +0 -251
- package/src/rbac/__tests__/adapters.comprehensive.test.tsx +0 -429
- package/src/rbac/__tests__/audit-batched.test.ts +0 -550
- package/src/rbac/__tests__/auth-rbac-security.integration.test.tsx +0 -300
- package/src/rbac/__tests__/auth-rbac.e2e.test.tsx +0 -517
- package/src/rbac/__tests__/cache-invalidation.test.ts +0 -393
- package/src/rbac/__tests__/engine.comprehensive.test.ts +0 -808
- package/src/rbac/__tests__/performance.test.ts +0 -451
- package/src/rbac/__tests__/rbac-core.test.tsx +0 -276
- package/src/rbac/__tests__/rbac-engine-core-logic.test.ts +0 -387
- package/src/rbac/__tests__/rbac-engine-simplified.test.ts +0 -252
- package/src/rbac/__tests__/rbac-functions.test.ts +0 -646
- package/src/rbac/__tests__/rbac-role-isolation.test.ts +0 -456
- package/src/rbac/__tests__/scenarios.user-role.test.tsx +0 -271
- package/src/rbac/components/__tests__/AccessDenied.test.tsx +0 -324
- package/src/rbac/components/__tests__/NavigationGuard.test.tsx +0 -1146
- package/src/rbac/components/__tests__/PagePermissionGuard.performance.test.tsx +0 -231
- package/src/rbac/components/__tests__/PagePermissionGuard.race-condition.test.tsx +0 -243
- package/src/rbac/components/__tests__/PagePermissionGuard.test.tsx +0 -1430
- package/src/rbac/components/__tests__/PagePermissionGuard.verification.test.tsx +0 -185
- package/src/rbac/hooks/__tests__/usePermissions.integration.test.ts +0 -427
- package/src/rbac/hooks/__tests__/useSecureSupabase.test.ts +0 -1179
- package/src/rbac/hooks/permissions/__tests__/useAccessLevel.test.ts +0 -622
- package/src/rbac/hooks/permissions/__tests__/useCan.test.ts +0 -798
- package/src/rbac/hooks/permissions/__tests__/useMultiplePermissions.test.ts +0 -843
- package/src/rbac/hooks/permissions/__tests__/usePermissions.test.ts +0 -545
- package/src/rbac/utils/__tests__/clientSecurity.test.ts +0 -192
- package/src/rbac/utils/__tests__/contextValidator.test.ts +0 -126
- package/src/rbac/utils/__tests__/deep-equal.test.ts +0 -76
- package/src/rbac/utils/__tests__/eventContext.test.ts +0 -386
- package/src/services/__tests__/AuthService.edge-cases.test.ts +0 -746
- package/src/services/__tests__/AuthService.restoreSession.test.ts +0 -59
- package/src/services/__tests__/AuthService.test.ts +0 -1328
- package/src/services/__tests__/BaseService.edge-cases.test.ts +0 -506
- package/src/services/__tests__/BaseService.test.ts +0 -363
- package/src/services/__tests__/EventService.edge-cases.test.ts +0 -633
- package/src/services/__tests__/EventService.eventColours.test.ts +0 -64
- package/src/services/__tests__/EventService.test.ts +0 -1018
- package/src/services/__tests__/InactivityService.edge-cases.test.ts +0 -492
- package/src/services/__tests__/InactivityService.lifecycle.test.ts +0 -406
- package/src/services/__tests__/InactivityService.test.ts +0 -654
- package/src/services/__tests__/OrganisationService.edge-cases.test.ts +0 -633
- package/src/services/__tests__/OrganisationService.pagination.test.ts +0 -409
- package/src/services/__tests__/OrganisationService.test.ts +0 -1176
- package/src/services/interfaces/__tests__/IAuthService.test.ts +0 -190
- package/src/services/interfaces/__tests__/IEventService.test.ts +0 -176
- package/src/services/interfaces/__tests__/IInactivityService.test.ts +0 -183
- package/src/services/interfaces/__tests__/IOrganisationService.test.ts +0 -207
- package/src/theming/__tests__/parseEventColours.test.ts +0 -321
- package/src/theming/__tests__/runtime.test.ts +0 -504
- package/src/types/__tests__/core.test.ts +0 -397
- package/src/types/__tests__/database-generated.test.ts +0 -78
- package/src/types/__tests__/file-reference.test.ts +0 -351
- package/src/types/__tests__/guards.test.ts +0 -246
- package/src/types/__tests__/index.test.ts +0 -265
- package/src/types/__tests__/organisation.roles.test.ts +0 -55
- package/src/types/__tests__/organisation.test.ts +0 -1133
- package/src/types/__tests__/theme.test.ts +0 -830
- package/src/types/__tests__/type-validation.test.ts +0 -526
- package/src/types/__tests__/validation.test.ts +0 -729
- package/src/utils/__tests__/appConfig.unit.test.ts +0 -55
- package/src/utils/__tests__/audit.unit.test.ts +0 -69
- package/src/utils/__tests__/auth-utils.unit.test.ts +0 -70
- package/src/utils/__tests__/bundleAnalysis.unit.test.ts +0 -326
- package/src/utils/__tests__/cn.unit.test.ts +0 -34
- package/src/utils/__tests__/debugLogger.test.ts +0 -417
- package/src/utils/__tests__/deviceFingerprint.unit.test.ts +0 -818
- package/src/utils/__tests__/dynamicUtils.unit.test.ts +0 -331
- package/src/utils/__tests__/formatDate.unit.test.ts +0 -109
- package/src/utils/__tests__/formatting.unit.test.ts +0 -99
- package/src/utils/__tests__/index.unit.test.ts +0 -251
- package/src/utils/__tests__/lazyLoad.unit.test.tsx +0 -320
- package/src/utils/__tests__/logger.unit.test.ts +0 -398
- package/src/utils/__tests__/organisationContext.unit.test.ts +0 -191
- package/src/utils/__tests__/performanceBenchmark.test.ts +0 -174
- package/src/utils/__tests__/performanceBudgets.unit.test.ts +0 -288
- package/src/utils/__tests__/permissionTypes.unit.test.ts +0 -250
- package/src/utils/__tests__/permissionUtils.unit.test.ts +0 -362
- package/src/utils/__tests__/request-deduplication.test.ts +0 -349
- package/src/utils/__tests__/sanitization.unit.test.ts +0 -346
- package/src/utils/__tests__/schemaUtils.unit.test.ts +0 -441
- package/src/utils/__tests__/secureDataAccess.unit.test.ts +0 -334
- package/src/utils/__tests__/secureErrors.unit.test.ts +0 -390
- package/src/utils/__tests__/secureStorage.unit.test.ts +0 -289
- package/src/utils/__tests__/security.unit.test.ts +0 -149
- package/src/utils/__tests__/securityMonitor.unit.test.ts +0 -276
- package/src/utils/__tests__/sessionTracking.unit.test.ts +0 -218
- package/src/utils/__tests__/timezone.test.ts +0 -345
- package/src/utils/__tests__/validation.unit.test.ts +0 -307
- package/src/utils/__tests__/validationUtils.unit.test.ts +0 -555
- package/src/utils/core/__tests__/cn.test.ts +0 -66
- package/src/utils/core/__tests__/debugLogger.test.ts +0 -113
- package/src/utils/core/__tests__/logger.test.ts +0 -217
- package/src/utils/dynamic/__tests__/dynamicUtils.test.ts +0 -185
- package/src/utils/dynamic/__tests__/lazyLoad.test.tsx +0 -156
- package/src/utils/file-reference/__tests__/file-reference.test.ts +0 -1313
- package/src/utils/performance/__tests__/bundleAnalysis.test.ts +0 -148
- package/src/utils/performance/__tests__/performanceBenchmark.test.ts +0 -251
- package/src/utils/performance/__tests__/performanceBudgets.test.ts +0 -241
- package/src/utils/permissions/__tests__/permissionTypes.test.ts +0 -149
- package/src/utils/persistence/__tests__/keyDerivation.test.ts +0 -306
- package/src/utils/persistence/__tests__/sensitiveFieldDetection.test.ts +0 -271
- package/src/utils/storage/__tests__/config.unit.test.ts +0 -239
- package/src/utils/storage/__tests__/index.unit.test.ts +0 -68
- package/src/utils/validation/__tests__/common.test.ts +0 -115
- package/src/utils/validation/__tests__/csrf.test.ts +0 -170
- package/src/utils/validation/__tests__/htmlSanitization.unit.test.ts +0 -618
- package/src/utils/validation/__tests__/passwordSchema.test.ts +0 -164
- package/src/utils/validation/__tests__/schema.test.ts +0 -127
- package/src/utils/validation/__tests__/sqlInjectionProtection.test.ts +0 -165
- package/src/utils/validation/__tests__/user.test.ts +0 -173
- package/src/utils/validation/__tests__/validation.test.ts +0 -197
- package/src/utils/validation/__tests__/validationUtils.test.ts +0 -294
- /package/src/components/DataTable/{components/__tests__ → ui}/COVERAGE_NOTE.md +0 -0
- /package/src/components/DataTable/utils/{__tests__/COVERAGE_NOTE.md → COVERAGE_NOTE.md} +0 -0
- /package/src/hooks/{__tests__/useApiFetch.unit.test.ts → useApiFetch.unit.test.ts} +0 -0
- /package/src/providers/{__tests__/README.md → README.md} +0 -0
- /package/src/rbac/{__tests__/index.test.ts → index.test.ts} +0 -0
- /package/src/rbac/{__tests__/rbac-integration.test.ts → rbac-integration.test.ts} +0 -0
- /package/src/types/{__tests__/README.md → README.md} +0 -0
|
@@ -2,12 +2,36 @@
|
|
|
2
2
|
|
|
3
3
|
**🤖 Cursor Rule**: See [06-security-rbac.mdc](../../cursor-rules/06-security-rbac.mdc) for AI-optimized directives that automatically enforce RBAC contract compliance (ESLint-enforced).
|
|
4
4
|
|
|
5
|
+
**🔧 ESLint Rules**: See [06-security-rbac.cjs](../../eslint-rules/rules/06-security-rbac.cjs) for mechanically checkable security and RBAC rules.
|
|
6
|
+
|
|
5
7
|
## Purpose
|
|
6
8
|
|
|
7
9
|
Define standards for Row-Level Security (RLS) policies and Role-Based Access Control (RBAC) integration to ensure security, performance, and maintainability.
|
|
8
10
|
|
|
9
11
|
**Note:** General performance optimization patterns (React, caching, bundle size) are covered in [Operations Standards](./9-operations-standards.md). This document focuses on RLS-specific performance requirements.
|
|
10
12
|
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
## How each layer enforces this standard
|
|
16
|
+
|
|
17
|
+
- **Standards (this doc):** Source of truth; defines RLS policy patterns, helper function requirements (STABLE, SECURITY DEFINER, SET search_path), forbidden/required patterns, Edge Function RBAC (isPermitted/setupRBAC), and security baseline.
|
|
18
|
+
- **Cursor rule:** `06-security-rbac.mdc` — AI guidance when editing `src/**/*.{ts,tsx,js,jsx}` and `supabase/migrations/**/*.sql`; points to this doc and RBAC contract.
|
|
19
|
+
- **ESLint:** Rules in `06-security-rbac.cjs` (plugin prefix `pace-core-compliance/`): see ESLint Rules section below. Run via lint step in CI and locally.
|
|
20
|
+
- **Audit tool:** Standard 6 audit runs as part of `npm run validate`; checks RLS policies in SQL migrations (naming, inline auth, subqueries, helper attributes, SECURITY DEFINER/search_path/schema-qualify/COMMENT), PagePermissionGuard coverage, and Edge Functions RBAC (setupRBAC before isPermitted). Report: `audit/<timestamp>-pace-core-audit.md`. For pace-core development, run `npm run validate` from the repository root.
|
|
21
|
+
|
|
22
|
+
---
|
|
23
|
+
|
|
24
|
+
## Audit issue types and where to read
|
|
25
|
+
|
|
26
|
+
| Audit issue type | See section in this doc |
|
|
27
|
+
|------------------|--------------------------|
|
|
28
|
+
| rlsPolicy | RLS Policy Performance Requirements; Helper Function Requirements; Forbidden/Required Patterns; SECURITY DEFINER Requirements; Security Risks & Mitigations; Policy Naming Convention; RLS Policy Patterns |
|
|
29
|
+
| rbacPageGuard | Security Baseline (page protection) |
|
|
30
|
+
| organisationIdResolution | Organisation context resolution (consuming apps) |
|
|
31
|
+
| edgeFunctionRBAC | Edge Functions and Serverless Functions |
|
|
32
|
+
|
|
33
|
+
---
|
|
34
|
+
|
|
11
35
|
## Principles
|
|
12
36
|
|
|
13
37
|
- **Performance First**: All RLS policies must use optimized helper functions
|
|
@@ -1072,6 +1096,33 @@ USING (organisation_id = get_organisation_context())
|
|
|
1072
1096
|
USING (is_public = true AND organisation_id IS NOT NULL)
|
|
1073
1097
|
```
|
|
1074
1098
|
|
|
1099
|
+
## Organisation context resolution (consuming apps)
|
|
1100
|
+
|
|
1101
|
+
When a consuming app uses both **selectedOrganisation** (from `useOrganisations()`) and **selectedEvent** (from `useEvents()`), any code that passes organisation context to RPCs or payloads (**p_organisation_id**, **organisation_id**, **selectedOrganisationId**) **MUST** use a **derived organisation ID** that falls back to the event’s organisation when the context selector has no org selected.
|
|
1102
|
+
|
|
1103
|
+
**Why:** If the user has selected an event but no organisation in the header, `selectedOrganisation` may be null while `selectedEvent.organisation_id` is set. Passing only `selectedOrganisation?.id` to RPCs then sends `undefined`, breaking data isolation or causing incorrect behaviour.
|
|
1104
|
+
|
|
1105
|
+
**✅ CORRECT – derived organisationId:**
|
|
1106
|
+
```ts
|
|
1107
|
+
const organisationId = useMemo(
|
|
1108
|
+
() =>
|
|
1109
|
+
selectedOrganisation?.id ??
|
|
1110
|
+
(selectedEvent as { organisation_id?: string | null } | undefined)?.organisation_id ??
|
|
1111
|
+
undefined,
|
|
1112
|
+
[selectedOrganisation?.id, selectedEvent]
|
|
1113
|
+
);
|
|
1114
|
+
// Use organisationId for all p_organisation_id, organisation_id, selectedOrganisationId
|
|
1115
|
+
```
|
|
1116
|
+
|
|
1117
|
+
**❌ WRONG – using selectedOrganisation?.id when selectedEvent is in scope:**
|
|
1118
|
+
```ts
|
|
1119
|
+
p_organisation_id: selectedOrganisation?.id, // undefined when event selected without org
|
|
1120
|
+
organisation_id: selectedOrganisation?.id || '',
|
|
1121
|
+
selectedOrganisationId: selectedOrganisation?.id,
|
|
1122
|
+
```
|
|
1123
|
+
|
|
1124
|
+
**Enforcement:** The Standard 6 audit and the ESLint rule `require-derived-organisation-id` flag files that use both `selectedOrganisation` and `selectedEvent` but pass `selectedOrganisation?.id` (or `selectedOrganisation.id`) to organisation context parameters. Fix by deriving `organisationId` as above and using it consistently.
|
|
1125
|
+
|
|
1075
1126
|
## App Ownership
|
|
1076
1127
|
|
|
1077
1128
|
Tables are assigned to specific apps for RBAC permission checking:
|
|
@@ -1184,6 +1235,21 @@ date +"%Y%m%d%H%M%S"
|
|
|
1184
1235
|
3. **Monitor performance** after deployment
|
|
1185
1236
|
4. **Rollback plan** ready if issues occur
|
|
1186
1237
|
|
|
1238
|
+
## ESLint Rules
|
|
1239
|
+
|
|
1240
|
+
Rule IDs use the plugin prefix **`pace-core-compliance/`**. The following rules enforce security and RBAC standards:
|
|
1241
|
+
|
|
1242
|
+
- **`pace-core-compliance/no-direct-supabase-client`** — Require useSecureSupabase from pace-core/rbac; disallow direct createClient from @supabase/supabase-js.
|
|
1243
|
+
- **`pace-core-compliance/rbac-permission-loading`** — Enforce loading state handling when using RBAC permission hooks.
|
|
1244
|
+
- **`pace-core-compliance/no-direct-rbac-rpc`** — Disallow direct RPC calls to rbac_*; use pace-core RBAC hooks/APIs.
|
|
1245
|
+
- **`pace-core-compliance/no-direct-rbac-table`** — Disallow direct queries to RBAC tables; use pace-core APIs.
|
|
1246
|
+
- **`pace-core-compliance/no-hardcoded-role-checks`** — Disallow hardcoded role checks; use useAccessLevel/getRoleContext from pace-core/rbac.
|
|
1247
|
+
- **`pace-core-compliance/rbac-use-resource-names-constants`** — Require RESOURCE_NAMES constants instead of string literals in useResourcePermissions.
|
|
1248
|
+
- **`pace-core-compliance/no-rbac-wrapper-components`** — Disallow wrapper components around pace-core RBAC components.
|
|
1249
|
+
- **`pace-core-compliance/no-rbac-wrapper-functions`** — Disallow wrapper functions around pace-core RBAC hooks.
|
|
1250
|
+
|
|
1251
|
+
These rules are part of the `pace-core-compliance` plugin and are enabled when extending `@jmruthers/pace-core/eslint-config`.
|
|
1252
|
+
|
|
1187
1253
|
## Related Documentation
|
|
1188
1254
|
|
|
1189
1255
|
- [Standards Overview](./0-standards-overview.md) - Standards system overview
|
|
@@ -10,6 +10,25 @@ This standard defines the required technology stack, API design patterns, and RP
|
|
|
10
10
|
|
|
11
11
|
---
|
|
12
12
|
|
|
13
|
+
## How each layer enforces this standard
|
|
14
|
+
|
|
15
|
+
- **Standards (this doc):** Source of truth; defines required tech stack (React 19+, TypeScript, Vite, Tailwind v4, Supabase, TanStack Query, etc.), API/RPC naming (`data_*` / `app_*`), ApiResult shape, RPC rules, Vite/TypeScript config, and deprecation policy.
|
|
16
|
+
- **Cursor rule:** `07-api-tech-stack.mdc` — AI guidance when editing `src/**`, config files, and `supabase/migrations/**/*.sql`; points to this doc.
|
|
17
|
+
- **ESLint:** Rules in `07-api-tech-stack.cjs` (plugin prefix `pace-core-compliance/`): see ESLint Rules section below. Run via lint step in CI and locally.
|
|
18
|
+
- **Audit tool:** Standard 7 audit runs as part of `npm run validate`; checks RPC naming in SQL migrations, tech stack versions (package.json), and Vite configuration (optimizeDeps.exclude, resolve.dedupe). Report: `audit/<timestamp>-pace-core-audit.md`. For pace-core development, run `npm run validate` from the repository root.
|
|
19
|
+
|
|
20
|
+
---
|
|
21
|
+
|
|
22
|
+
## Audit issue types and where to read
|
|
23
|
+
|
|
24
|
+
| Audit issue type | See section in this doc |
|
|
25
|
+
|------------------|--------------------------|
|
|
26
|
+
| rpcNaming | API & RPC Naming Conventions; RPC Naming Pattern; Naming Rules |
|
|
27
|
+
| techStack | Required Tech Stack; Version Requirements |
|
|
28
|
+
| viteConfig | Tech Stack Configuration (Vite Configuration) |
|
|
29
|
+
|
|
30
|
+
---
|
|
31
|
+
|
|
13
32
|
## Required Tech Stack
|
|
14
33
|
|
|
15
34
|
### Core Technologies
|
|
@@ -717,23 +736,15 @@ Before creating or updating an API/RPC, verify:
|
|
|
717
736
|
|
|
718
737
|
## ESLint Rules
|
|
719
738
|
|
|
720
|
-
The following
|
|
721
|
-
|
|
722
|
-
### RPC Naming
|
|
723
|
-
|
|
724
|
-
- **`rpc-naming-pattern`** - Enforces `data_*` prefix for read operations and `app_*` prefix for write operations
|
|
725
|
-
|
|
726
|
-
### React 19+ Patterns
|
|
727
|
-
|
|
728
|
-
- **`no-class-components`** - Disallows React class components (functional components only)
|
|
729
|
-
|
|
730
|
-
### Environment Variables
|
|
739
|
+
Rule IDs use the plugin prefix **`pace-core-compliance/`**. The following rules enforce API and tech stack standards:
|
|
731
740
|
|
|
732
|
-
- **`
|
|
741
|
+
- **`pace-core-compliance/rpc-naming-pattern`** — Enforces `data_*` prefix for read operations and `app_*` prefix for write operations.
|
|
742
|
+
- **`pace-core-compliance/no-class-components`** — Disallows React class components (functional components only).
|
|
743
|
+
- **`pace-core-compliance/prefer-import-meta-env`** — Enforces `import.meta.env` (Vite) instead of `process.env` in client code.
|
|
733
744
|
|
|
734
|
-
These rules are part of the `pace-core-compliance` plugin and are
|
|
745
|
+
These rules are part of the `pace-core-compliance` plugin and are enabled when extending `@jmruthers/pace-core/eslint-config`.
|
|
735
746
|
|
|
736
|
-
**Setup**: Run `
|
|
747
|
+
**Setup**: Run `npm run setup` to configure ESLint (and other pace-core tools) in your consuming app.
|
|
737
748
|
|
|
738
749
|
## Related Documentation
|
|
739
750
|
|
|
@@ -2,12 +2,33 @@
|
|
|
2
2
|
|
|
3
3
|
**🤖 Cursor Rule**: See [08-testing-documentation.mdc](../../cursor-rules/08-testing-documentation.mdc) for AI-optimized directives that automatically enforce testing and documentation standards.
|
|
4
4
|
|
|
5
|
+
**🔧 ESLint Rules**: See [08-testing.cjs](../../eslint-rules/rules/08-testing.cjs) for mechanically checkable testing rules.
|
|
6
|
+
|
|
5
7
|
## Purpose
|
|
6
8
|
|
|
7
9
|
This standard defines testing strategies, documentation requirements, and issue reporting templates to ensure consistent quality, maintainability, and effective communication across pace-core and consuming apps.
|
|
8
10
|
|
|
9
11
|
---
|
|
10
12
|
|
|
13
|
+
## How each layer enforces this standard
|
|
14
|
+
|
|
15
|
+
- **Standards (this doc):** Source of truth; defines testing strategy (unit/integration/E2E), test structure and naming, testing tools (React Testing Library, userEvent, Vitest), test timeouts, coverage requirements, documentation requirements, and bug/feature request templates.
|
|
16
|
+
- **Cursor rule:** `08-testing-documentation.mdc` — AI guidance when editing test files (`**/*.{test,spec}.{ts,tsx}`) and docs (`**/*.md`, `**/*.mdx`); points to this doc.
|
|
17
|
+
- **ESLint:** Rules in `08-testing.cjs` (plugin prefix `pace-core-compliance/`): see ESLint Rules section below. Run via lint step in CI and locally.
|
|
18
|
+
- **Audit tool:** Standard 8 audit runs as part of `npm run validate`; checks test timeout configuration (vitest.config, package.json scripts), required testing tools (vitest, @testing-library/react, @testing-library/user-event), and test file structure/naming (.test vs .spec). Report: `audit/<timestamp>-pace-core-audit.md`. For pace-core development, run `npm run validate` from the repository root.
|
|
19
|
+
|
|
20
|
+
---
|
|
21
|
+
|
|
22
|
+
## Audit issue types and where to read
|
|
23
|
+
|
|
24
|
+
| Audit issue type | See section in this doc |
|
|
25
|
+
|------------------|--------------------------|
|
|
26
|
+
| testTimeout | Test Timeouts |
|
|
27
|
+
| testingTools | Testing Tools |
|
|
28
|
+
| testStructure | Test Structure; Test File Naming |
|
|
29
|
+
|
|
30
|
+
---
|
|
31
|
+
|
|
11
32
|
## Testing Strategy
|
|
12
33
|
|
|
13
34
|
### Test Types
|
|
@@ -388,6 +409,16 @@ Before committing code with documentation, verify:
|
|
|
388
409
|
|
|
389
410
|
---
|
|
390
411
|
|
|
412
|
+
## ESLint Rules
|
|
413
|
+
|
|
414
|
+
Rule IDs use the plugin prefix **`pace-core-compliance/`**. The following rule enforces testing standards:
|
|
415
|
+
|
|
416
|
+
- **`pace-core-compliance/test-file-naming`** — Enforce test file naming: `*.test.ts` or `*.test.tsx` (not `*.spec.ts`).
|
|
417
|
+
|
|
418
|
+
This rule is part of the `pace-core-compliance` plugin and is enabled when extending `@jmruthers/pace-core/eslint-config`.
|
|
419
|
+
|
|
420
|
+
---
|
|
421
|
+
|
|
391
422
|
## Related Documentation
|
|
392
423
|
|
|
393
424
|
- [Standards Overview](./0-standards-overview.md) - Standards system overview
|
|
@@ -10,6 +10,25 @@ This standard defines error handling patterns, performance optimization strategi
|
|
|
10
10
|
|
|
11
11
|
---
|
|
12
12
|
|
|
13
|
+
## How each layer enforces this standard
|
|
14
|
+
|
|
15
|
+
- **Standards (this doc):** Source of truth; defines error handling patterns (ApiResult, type guards, user-facing vs logging messages), performance optimization (memoization, code splitting, caching), and CI/CD integration (pipeline stages, required checks, package.json scripts).
|
|
16
|
+
- **Cursor rule:** `09-operations.mdc` — AI guidance when editing `src/**`, config files, and `.github/workflows/**`; points to this doc.
|
|
17
|
+
- **ESLint:** No dedicated Standard 9 rules; error handling and performance patterns are encouraged via the Cursor rule and via overlapping [Code Quality](./4-code-quality-standards.md) / [API & Tech Stack](./7-api-tech-stack-standards.md) rules. Run `npm run lint` as part of CI.
|
|
18
|
+
- **Audit tool:** Standard 9 audit runs as part of `npm run validate`; checks error handling patterns (ApiResult usage), CI/CD configuration (.github/workflows), and error boundary usage. Report: `audit/<timestamp>-pace-core-audit.md`. For pace-core development, run `npm run validate` from the repository root.
|
|
19
|
+
|
|
20
|
+
---
|
|
21
|
+
|
|
22
|
+
## Audit issue types and where to read
|
|
23
|
+
|
|
24
|
+
| Audit issue type | See section in this doc |
|
|
25
|
+
|------------------|--------------------------|
|
|
26
|
+
| errorHandling | Error Handling Patterns; Result Types; API Errors |
|
|
27
|
+
| cicd | CI/CD Integration; Required CI Checks |
|
|
28
|
+
| errorBoundary | Error Handling Patterns (Pattern 3: Error Boundaries) |
|
|
29
|
+
|
|
30
|
+
---
|
|
31
|
+
|
|
13
32
|
## Error Handling Patterns
|
|
14
33
|
|
|
15
34
|
### Principles
|
package/docs/standards/README.md
CHANGED
|
@@ -1,203 +1,22 @@
|
|
|
1
1
|
# Pace Standards
|
|
2
2
|
|
|
3
|
-
This repository defines the **canonical development standards** for **pace-core** and **all consuming applications** in the pace-suite.
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
-
|
|
16
|
-
|
|
17
|
-
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
### AI agents (Cursor, Codex, etc.)
|
|
25
|
-
- Follow these standards **strictly**
|
|
26
|
-
- Do **not** silence rules to "make things pass"
|
|
27
|
-
- If compliance is unclear, stop and report rather than guessing
|
|
28
|
-
|
|
29
|
-
---
|
|
30
|
-
|
|
31
|
-
## The Four Layers of Quality Enforcement
|
|
32
|
-
|
|
33
|
-
The pace-suite uses **four complementary quality layers**, each with a distinct responsibility.
|
|
34
|
-
They are intentionally overlapping in *coverage*, but **not duplicative in purpose**.
|
|
35
|
-
|
|
36
|
-
Think of this as *defence in depth*, not redundancy.
|
|
37
|
-
|
|
38
|
-
---
|
|
39
|
-
|
|
40
|
-
### 1. Standards Documents (Source of Truth)
|
|
41
|
-
|
|
42
|
-
**What they are**
|
|
43
|
-
- Human-readable `.md` documents
|
|
44
|
-
- Describe *intent*, *principles*, and *expectations*
|
|
45
|
-
- Technology-agnostic where possible
|
|
46
|
-
|
|
47
|
-
**What they are used for**
|
|
48
|
-
- Defining *what "good" looks like*
|
|
49
|
-
- Onboarding humans and AI agents
|
|
50
|
-
- Resolving ambiguity when tools disagree
|
|
51
|
-
- Designing new rules, lint checks, and audits
|
|
52
|
-
|
|
53
|
-
**What they are NOT**
|
|
54
|
-
- They are not executable
|
|
55
|
-
- They do not enforce anything by themselves
|
|
56
|
-
- They should not contain implementation hacks
|
|
57
|
-
|
|
58
|
-
➡️ **If there is a conflict, the standards win.**
|
|
59
|
-
|
|
60
|
-
---
|
|
61
|
-
|
|
62
|
-
### 2. Cursor Rules (Real-time Guidance)
|
|
63
|
-
|
|
64
|
-
**What they are**
|
|
65
|
-
- AI-optimised interpretations of the standards
|
|
66
|
-
- Applied while code is being written or modified
|
|
67
|
-
- Prevent mistakes *before* they land
|
|
68
|
-
|
|
69
|
-
**What they are used for**
|
|
70
|
-
- Steering AI agents toward correct patterns
|
|
71
|
-
- Enforcing architectural intent during development
|
|
72
|
-
- Reducing rework later in linting or audits
|
|
73
|
-
|
|
74
|
-
**What they are NOT**
|
|
75
|
-
- They are not a replacement for lint or audits
|
|
76
|
-
- They should not invent new standards
|
|
77
|
-
- They should not silence problems "to move on"
|
|
78
|
-
|
|
79
|
-
➡️ Cursor rules **translate standards into behaviour**, but do not redefine them.
|
|
80
|
-
|
|
81
|
-
---
|
|
82
|
-
|
|
83
|
-
### 3. ESLint (Fast, Local Static Analysis)
|
|
84
|
-
|
|
85
|
-
**What it is**
|
|
86
|
-
- Deterministic, file-level static analysis
|
|
87
|
-
- Runs locally and in CI
|
|
88
|
-
- Focused on correctness, safety, and consistency
|
|
89
|
-
|
|
90
|
-
**What it is used for**
|
|
91
|
-
- Catching obvious issues early (types, hooks, imports, patterns)
|
|
92
|
-
- Enforcing mechanically checkable rules
|
|
93
|
-
- Preventing regressions during refactors
|
|
94
|
-
|
|
95
|
-
**What it is NOT**
|
|
96
|
-
- ESLint should not encode complex business rules
|
|
97
|
-
- It should not contain subjective or architectural debates
|
|
98
|
-
- It should not be silenced to "get green builds"
|
|
99
|
-
|
|
100
|
-
➡️ ESLint enforces *how code is written*, not *whether the system is correct*.
|
|
101
|
-
|
|
102
|
-
---
|
|
103
|
-
|
|
104
|
-
### 4. Audit Tool (Deep, System-Level Analysis)
|
|
105
|
-
|
|
106
|
-
**What it is**
|
|
107
|
-
- A custom static analysis tool
|
|
108
|
-
- Operates across files, folders, and systems
|
|
109
|
-
- Understands pace-core contracts and invariants
|
|
110
|
-
|
|
111
|
-
**What it is used for**
|
|
112
|
-
- Validating architectural compliance (RBAC, data access, boundaries)
|
|
113
|
-
- Catching issues ESLint cannot see
|
|
114
|
-
- Providing actionable remediation plans
|
|
115
|
-
|
|
116
|
-
**What it is NOT**
|
|
117
|
-
- It is not a linter replacement
|
|
118
|
-
- It should not report stylistic issues
|
|
119
|
-
- It should not contradict the standards
|
|
120
|
-
|
|
121
|
-
➡️ The audit tool answers: *"Is this system actually compliant?"*
|
|
122
|
-
|
|
123
|
-
---
|
|
124
|
-
|
|
125
|
-
## How the layers work together
|
|
126
|
-
|
|
127
|
-
| Layer | Strength | Timing |
|
|
128
|
-
|--------------|----------------------------------|-----------------|
|
|
129
|
-
| Standards | Intent & clarity | Design time |
|
|
130
|
-
| Cursor rules | Preventive guidance | Write time |
|
|
131
|
-
| ESLint | Fast mechanical enforcement | Dev / CI |
|
|
132
|
-
| Audit tool | Deep architectural verification | Review / CI |
|
|
133
|
-
|
|
134
|
-
No single layer is sufficient on its own.
|
|
135
|
-
Together, they create a **repeatable, scalable quality system** for both humans and AI.
|
|
136
|
-
|
|
137
|
-
---
|
|
138
|
-
|
|
139
|
-
## Standards Documents
|
|
140
|
-
|
|
141
|
-
The standards are organized into **10 files**, each covering a specific domain:
|
|
142
|
-
|
|
143
|
-
### 0. [Standards Overview](./0-standards-overview.md)
|
|
144
|
-
Entry point, precedence, how standards work, and the four layers of quality enforcement.
|
|
145
|
-
|
|
146
|
-
### 1. [pace-core Compliance](./1-pace-core-compliance-standards.md)
|
|
147
|
-
pace-core usage patterns, ESLint rules, secure Supabase client requirements, and compliance enforcement.
|
|
148
|
-
|
|
149
|
-
### 2. [Project Structure](./2-project-structure-standards.md)
|
|
150
|
-
Standard directory structure, file organization patterns, naming conventions, and migration guides.
|
|
151
|
-
|
|
152
|
-
### 3. [Architecture](./3-architecture-standards.md)
|
|
153
|
-
SOLID principles, component design, API design, and architectural patterns.
|
|
154
|
-
|
|
155
|
-
### 4. [Code Quality](./4-code-quality-standards.md)
|
|
156
|
-
TypeScript rules, naming conventions, code style patterns, and React patterns.
|
|
157
|
-
|
|
158
|
-
### 5. [Styling](./5-styling-standards.md)
|
|
159
|
-
**CRITICAL:** Required CSS configuration, Tailwind v4 setup, markup quality, and styling patterns.
|
|
160
|
-
|
|
161
|
-
### 6. [Security & RBAC](./6-security-rbac-standards.md)
|
|
162
|
-
RLS policy patterns, RBAC integration, helper functions, and security requirements.
|
|
163
|
-
|
|
164
|
-
### 7. [API & Tech Stack](./7-api-tech-stack-standards.md)
|
|
165
|
-
Required tech stack, API/RPC naming conventions, result shapes, and deprecation policy.
|
|
166
|
-
|
|
167
|
-
### 8. [Testing & Documentation](./8-testing-documentation-standards.md)
|
|
168
|
-
Testing strategy, documentation requirements, bug report templates, and feature request templates.
|
|
169
|
-
|
|
170
|
-
### 9. [Operations](./9-operations-standards.md)
|
|
171
|
-
Error handling patterns, performance optimization, caching strategies, and CI/CD integration.
|
|
172
|
-
|
|
173
|
-
---
|
|
174
|
-
|
|
175
|
-
## Key Principles
|
|
176
|
-
|
|
177
|
-
- **Do not silence tools** — fix the underlying issue
|
|
178
|
-
- **Do not duplicate rules** — each layer has a purpose
|
|
179
|
-
- **Do not diverge silently** — document exceptions explicitly
|
|
180
|
-
- **Standards always win** — tools must align to them
|
|
181
|
-
|
|
182
|
-
---
|
|
183
|
-
|
|
184
|
-
## Getting Started
|
|
185
|
-
|
|
186
|
-
1. **Read the Overview** - Start with [0-standards-overview.md](./0-standards-overview.md) to understand the system
|
|
187
|
-
2. **Review Critical Standards** - Pay special attention to:
|
|
188
|
-
- [5-styling-standards.md](./5-styling-standards.md) - **CRITICAL CSS configuration**
|
|
189
|
-
- [1-pace-core-compliance-standards.md](./1-pace-core-compliance-standards.md) - pace-core usage
|
|
190
|
-
- [6-security-rbac-standards.md](./6-security-rbac-standards.md) - Security and RBAC
|
|
191
|
-
3. **Set Up Quality Enforcement** - Install Cursor rules and ESLint config:
|
|
192
|
-
- `npm run setup:cursor-rules` - Install Cursor rules for AI-assisted enforcement
|
|
193
|
-
- `npm run setup:eslint` - Install ESLint config for real-time linting
|
|
194
|
-
4. **Run Audits** - Use the audit tool to validate compliance:
|
|
195
|
-
- `npm run audit:pace-core` - Run comprehensive audit organized by standards
|
|
196
|
-
5. **Follow the Standards** - Use the standards as your guide for all development work
|
|
197
|
-
6. **Reference When Needed** - Use the standards to resolve conflicts and answer questions
|
|
198
|
-
|
|
199
|
-
---
|
|
200
|
-
|
|
201
|
-
**Last Updated:** 2025-01-28
|
|
202
|
-
**Version:** 2.0.0
|
|
203
|
-
**Applies to:** All pace-core and consuming apps
|
|
3
|
+
This repository defines the **canonical development standards** for **pace-core** and **all consuming applications** in the pace-suite. They are human-readable first and enforced by Cursor rules, ESLint, and the audit tool.
|
|
4
|
+
|
|
5
|
+
**Entry point:** [0-standards-overview.md](./0-standards-overview.md) — read this first for the four-layer quality system, precedence, and how to use the standards.
|
|
6
|
+
|
|
7
|
+
## Standards documents (10 files)
|
|
8
|
+
|
|
9
|
+
| File | Purpose |
|
|
10
|
+
|------|---------|
|
|
11
|
+
| [0-standards-overview.md](./0-standards-overview.md) | Entry point, four layers, precedence, file mapping |
|
|
12
|
+
| [1-pace-core-compliance-standards.md](./1-pace-core-compliance-standards.md) | pace-core usage, ESLint, secure Supabase client |
|
|
13
|
+
| [2-project-structure-standards.md](./2-project-structure-standards.md) | Directory structure, file organization, naming |
|
|
14
|
+
| [3-architecture-standards.md](./3-architecture-standards.md) | SOLID principles, component and API design |
|
|
15
|
+
| [4-code-quality-standards.md](./4-code-quality-standards.md) | TypeScript, naming, code style, React patterns |
|
|
16
|
+
| [5-styling-standards.md](./5-styling-standards.md) | **CRITICAL:** CSS config, Tailwind v4, markup quality |
|
|
17
|
+
| [6-security-rbac-standards.md](./6-security-rbac-standards.md) | RLS, RBAC, security requirements |
|
|
18
|
+
| [7-api-tech-stack-standards.md](./7-api-tech-stack-standards.md) | Tech stack, API/RPC naming, result shapes |
|
|
19
|
+
| [8-testing-documentation-standards.md](./8-testing-documentation-standards.md) | Testing strategy, documentation, templates |
|
|
20
|
+
| [9-operations-standards.md](./9-operations-standards.md) | Error handling, performance, CI/CD |
|
|
21
|
+
|
|
22
|
+
All other quality tools align to these standards; they are the single source of truth.
|
|
@@ -18,6 +18,8 @@ This setup provides:
|
|
|
18
18
|
- **Mock utilities** for pace-core providers
|
|
19
19
|
- **Consistent test configuration** matching pace-core standards
|
|
20
20
|
|
|
21
|
+
**Test colocation:** pace-core colocates test files with source files (e.g. `Component.test.tsx` next to `Component.tsx`). Consumers should follow the same pattern per the project structure standard; do not use a dedicated `__tests__/` or `tests/` folder for unit/integration tests. Shared test helpers may live in a single location (e.g. `src/__tests__/helpers`) if needed.
|
|
22
|
+
|
|
21
23
|
## Prerequisites
|
|
22
24
|
|
|
23
25
|
- Node.js 18+ installed
|
|
@@ -321,7 +321,23 @@ export const MyComponent = ({ isOpen, data }: Props) => {
|
|
|
321
321
|
2. **Call hooks in the same order** - Every render must call the same hooks in the same order
|
|
322
322
|
3. **No early returns before hooks** - All hooks must be called before any conditional returns
|
|
323
323
|
|
|
324
|
-
### Issue 8:
|
|
324
|
+
### Issue 8: Login succeeds but redirect doesn't happen / form resets
|
|
325
|
+
|
|
326
|
+
**Symptoms:** After entering valid credentials, the login button shows "Signing in…" then the form resets and you stay on the login page.
|
|
327
|
+
|
|
328
|
+
**Root Cause:** Global auth gate or wrong routing pattern (e.g. wrapping the whole app in a component that redirects to `/login` when `!isAuthenticated`), which races with post-login context updates.
|
|
329
|
+
|
|
330
|
+
**Solution:** See [Authentication — Critical: Auth routing pattern](../implementation-guides/authentication.md#critical-auth-routing-pattern) and [Redirect not happening after login](../implementation-guides/authentication.md#1-login-not-working). Use a single public `/login` route and wrap all other routes in **ProtectedRoute**; do not wrap `<Routes>` in a component that redirects unauthenticated users to `/login`.
|
|
331
|
+
|
|
332
|
+
### Issue 9: Logout button does nothing (e.g. 403)
|
|
333
|
+
|
|
334
|
+
**Symptoms:** Clicking logout has no effect; the UI still shows the user as logged in. Network tab may show `POST .../auth/v1/logout` returning 403.
|
|
335
|
+
|
|
336
|
+
**Root Cause:** Server-side logout can fail (e.g. cookie/domain); without handling the error, local state stays "logged in".
|
|
337
|
+
|
|
338
|
+
**Solution:** pace-core clears local user/session on signOut error and falls back to `signOut({ scope: 'local' })`, so the UI should still show logged out. See [Authentication — Logout does nothing / 403 on logout](../implementation-guides/authentication.md#4-logout-does-nothing--403-on-logout). If logout still fails, check cookie domain and CORS.
|
|
339
|
+
|
|
340
|
+
### Issue 10: PagePermissionGuard UI Issues
|
|
325
341
|
|
|
326
342
|
**Symptoms:**
|
|
327
343
|
- Access Denied modal persists despite correct permissions
|
|
@@ -305,6 +305,14 @@ The key is making sure the database has the organisation context functions and y
|
|
|
305
305
|
3. **Use RLS policies correctly**: Policies should use `auth.uid()` and `organisation_id` columns directly
|
|
306
306
|
4. **No manual context setting**: The secure client handles everything automatically
|
|
307
307
|
|
|
308
|
+
### Super admin and "All Organizations"
|
|
309
|
+
|
|
310
|
+
When the user is a **super admin** and no organisation is selected (e.g. "All Organizations"), the secure client from `useSecureSupabase()` is created with `organisationId = null` and `isSuperAdmin: true`. Only in that case may RPCs such as `data_rbac_roles_list` be called without org context (e.g. to load a user's event roles across all orgs). Consuming apps must use the same secure client from the hook so that `isSuperAdmin` is correctly resolved (via `useOrganisationSecurity()`); do not create a separate client or bypass the hook.
|
|
311
|
+
|
|
312
|
+
### Org from URL (e.g. /users?org=scouts-victoria)
|
|
313
|
+
|
|
314
|
+
When the app derives "current organisation" from the URL (or another source) but does not set pace-core's `selectedOrganisation`, the secure client may have `organisationId = null`. For **org-scoped table queries** (e.g. listing users in an org), either: (1) keep `selectedOrganisation` in sync with the URL so the secure client has the correct org context, or (2) use the secure client's `withContext({ organisationId: urlOrgId })` to obtain a client scoped to that org for the request. RPCs that accept explicit `p_organisation_id` use the parameter as the source of truth and do not require the header to match.
|
|
315
|
+
|
|
308
316
|
## ♿ Accessibility
|
|
309
317
|
|
|
310
318
|
Organisation context setup doesn't directly impact accessibility, but ensure:
|