@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
|
@@ -42,6 +42,17 @@ They are intentionally overlapping in *coverage*, but **not duplicative in purpo
|
|
|
42
42
|
|
|
43
43
|
Think of this as *defence in depth*, not redundancy.
|
|
44
44
|
|
|
45
|
+
```mermaid
|
|
46
|
+
flowchart LR
|
|
47
|
+
Standards[Standards]
|
|
48
|
+
CursorRules[Cursor Rules]
|
|
49
|
+
ESLint[ESLint]
|
|
50
|
+
AuditTool[Audit Tool]
|
|
51
|
+
Standards -->|"Write time"| CursorRules
|
|
52
|
+
Standards -->|"Dev / CI"| ESLint
|
|
53
|
+
Standards -->|"Review / CI"| AuditTool
|
|
54
|
+
```
|
|
55
|
+
|
|
45
56
|
### 1. Standards Documents (Source of Truth)
|
|
46
57
|
|
|
47
58
|
**What they are**
|
|
@@ -64,6 +75,8 @@ Think of this as *defence in depth*, not redundancy.
|
|
|
64
75
|
|
|
65
76
|
### 2. Cursor Rules (Real-time Guidance)
|
|
66
77
|
|
|
78
|
+
Cursor rules live in the package under `cursor-rules/`. Consuming apps copy them into `.cursor/rules/` via `npm run setup` (see [pace-core Compliance](./1-pace-core-compliance-standards.md) for setup steps).
|
|
79
|
+
|
|
67
80
|
**What they are**
|
|
68
81
|
- AI-optimised interpretations of the standards
|
|
69
82
|
- Applied while code is being written or modified
|
|
@@ -122,7 +135,7 @@ Think of this as *defence in depth*, not redundancy.
|
|
|
122
135
|
|
|
123
136
|
➡️ The audit tool answers: *"Is this system actually compliant?"*
|
|
124
137
|
|
|
125
|
-
**Usage
|
|
138
|
+
**Usage:** In a consuming app (or from the repo root with pace-core available), run `npm run validate`. This runs type-check, lint, build, tests, and the pace-core audit. The pace-core audit report is written to `audit/<timestamp>-pace-core-audit.md`; ESLint output is written to `audit/<timestamp>-eslint-report.md` when the lint step runs.
|
|
126
139
|
|
|
127
140
|
---
|
|
128
141
|
|
|
@@ -135,9 +148,22 @@ Think of this as *defence in depth*, not redundancy.
|
|
|
135
148
|
| ESLint | Fast mechanical enforcement | Dev / CI |
|
|
136
149
|
| Audit tool | Deep architectural verification | Review / CI |
|
|
137
150
|
|
|
151
|
+
| Layer | Out of scope |
|
|
152
|
+
|--------------|--------------|
|
|
153
|
+
| Standards | Not executable; do not enforce by themselves |
|
|
154
|
+
| Cursor rules | Not a replacement for lint or audits |
|
|
155
|
+
| ESLint | Not system-level correctness; not complex business rules |
|
|
156
|
+
| Audit tool | Not stylistic issues; not file-level AST duplication |
|
|
157
|
+
|
|
138
158
|
No single layer is sufficient on its own.
|
|
139
159
|
Together, they create a **repeatable, scalable quality system** for both humans and AI.
|
|
140
160
|
|
|
161
|
+
### Traceability
|
|
162
|
+
|
|
163
|
+
- **From audit report to standard:** Each audit section links to the corresponding standard doc (via the report; links are generated in the audit tool).
|
|
164
|
+
- **From ESLint rule to standard:** ESLint rules are grouped by standard (e.g. `01-pace-core-compliance`, `06-security-rbac`); rule names or plugin metadata map to the standard doc.
|
|
165
|
+
- **Principle:** When fixing a finding, open the referenced standard for intent and examples; fix the cause, do not silence the tool.
|
|
166
|
+
|
|
141
167
|
---
|
|
142
168
|
|
|
143
169
|
## Precedence Order
|
|
@@ -153,24 +179,31 @@ When standards conflict, apply this precedence order:
|
|
|
153
179
|
|
|
154
180
|
**Example:** If a component pattern conflicts with a security requirement, security wins.
|
|
155
181
|
|
|
182
|
+
### When tools disagree
|
|
183
|
+
|
|
184
|
+
- Treat the **standards document** as the arbiter. If the standard is clear, the tool that matches it is correct; fix the other or fix the code.
|
|
185
|
+
- If the standard is ambiguous, **update the standard first** (with rationale), then align the tool(s).
|
|
186
|
+
- Do not silence a tool to get a green build; fix the underlying issue or document an explicit, approved exception in the standard.
|
|
187
|
+
- **Remediation:** When the audit (or lint) fails in CI, use the generated report and the linked standard doc to fix issues, then re-run `npm run validate`.
|
|
188
|
+
|
|
156
189
|
---
|
|
157
190
|
|
|
158
191
|
## Standards File Mapping
|
|
159
192
|
|
|
160
|
-
The standards are organized into 10 files, each covering a specific domain
|
|
161
|
-
|
|
162
|
-
| File | Standard | Cursor Rule | Purpose |
|
|
163
|
-
|
|
164
|
-
| `0-standards-overview.md` | Overview | `00-standards-overview.mdc` | This file - entry point and system overview |
|
|
165
|
-
| `1-pace-core-compliance-standards.md` | pace-core Compliance | `01-pace-core-compliance.mdc` | Enforce pace-core usage patterns |
|
|
166
|
-
| `2-project-structure-standards.md` | Project Structure | `02-project-structure.mdc` | Define standard folder structure |
|
|
167
|
-
| `3-architecture-standards.md` | Architecture | `03-architecture.mdc` | Enforce SOLID architecture principles |
|
|
168
|
-
| `4-code-quality-standards.md` | Code Quality | `04-code-quality.mdc` | Enforce code quality standards |
|
|
169
|
-
| `5-styling-standards.md` | Styling | `05-styling.mdc` | Enforce clean markup and styling standards |
|
|
170
|
-
| `6-security-rbac-standards.md` | Security & RBAC | `06-security-rbac.mdc` | Enforce RBAC contract and security |
|
|
171
|
-
| `7-api-tech-stack-standards.md` | API & Tech Stack | `07-api-tech-stack.mdc` | Enforce tech stack versions and API standards |
|
|
172
|
-
| `8-testing-documentation-standards.md` | Testing & Documentation | `08-testing-documentation.mdc` | Enforce testing and documentation standards |
|
|
173
|
-
| `9-operations-standards.md` | Operations | `09-operations.mdc` | Enforce error handling, performance, and CI/CD |
|
|
193
|
+
The standards are organized into 10 files, each covering a specific domain. ESLint rule files are prefixed by standard (e.g. `01-pace-core-compliance`, `06-security-rbac`).
|
|
194
|
+
|
|
195
|
+
| File | Standard | Cursor Rule | ESLint | Audit | Purpose |
|
|
196
|
+
|------|----------|------------|--------|-------|---------|
|
|
197
|
+
| `0-standards-overview.md` | Overview | `00-standards-overview.mdc` | — | — | This file - entry point and system overview |
|
|
198
|
+
| `1-pace-core-compliance-standards.md` | pace-core Compliance | `01-pace-core-compliance.mdc` | Yes | Yes | Enforce pace-core usage patterns |
|
|
199
|
+
| `2-project-structure-standards.md` | Project Structure | `02-project-structure.mdc` | — | Yes | Define standard folder structure |
|
|
200
|
+
| `3-architecture-standards.md` | Architecture | `03-architecture.mdc` | — | Yes | Enforce SOLID architecture principles |
|
|
201
|
+
| `4-code-quality-standards.md` | Code Quality | `04-code-quality.mdc` | Yes | Yes | Enforce code quality standards |
|
|
202
|
+
| `5-styling-standards.md` | Styling | `05-styling.mdc` | Yes | Yes | Enforce clean markup and styling standards |
|
|
203
|
+
| `6-security-rbac-standards.md` | Security & RBAC | `06-security-rbac.mdc` | Yes | Yes | Enforce RBAC contract and security |
|
|
204
|
+
| `7-api-tech-stack-standards.md` | API & Tech Stack | `07-api-tech-stack.mdc` | Yes | Yes | Enforce tech stack versions and API standards |
|
|
205
|
+
| `8-testing-documentation-standards.md` | Testing & Documentation | `08-testing-documentation.mdc` | Yes | Yes | Enforce testing and documentation standards |
|
|
206
|
+
| `9-operations-standards.md` | Operations | `09-operations.mdc` | — | Yes | Enforce error handling, performance, and CI/CD |
|
|
174
207
|
|
|
175
208
|
---
|
|
176
209
|
|
|
@@ -218,3 +251,5 @@ The standards are organized into 10 files, each covering a specific domain:
|
|
|
218
251
|
**Last Updated:** 2025-01-28
|
|
219
252
|
**Version:** 2.0.0
|
|
220
253
|
**Applies to:** All pace-core and consuming apps
|
|
254
|
+
|
|
255
|
+
The standards version (e.g. 2.0.0) is updated when the standards system, precedence, or four-layer model changes; it is independent of the pace-core package version.
|
|
@@ -65,12 +65,12 @@ npm install @jmruthers/pace-core
|
|
|
65
65
|
|
|
66
66
|
**Automated Setup (Easiest)**
|
|
67
67
|
|
|
68
|
-
Use the
|
|
68
|
+
Use the combined setup script to set up ESLint (and other pace-core tools):
|
|
69
69
|
|
|
70
70
|
```bash
|
|
71
|
-
npm run setup
|
|
72
|
-
# or
|
|
73
|
-
|
|
71
|
+
npm run setup
|
|
72
|
+
# or to force update existing configs
|
|
73
|
+
npm run setup -- --force
|
|
74
74
|
```
|
|
75
75
|
|
|
76
76
|
This script will:
|
|
@@ -147,12 +147,12 @@ export default tseslint.config(
|
|
|
147
147
|
|
|
148
148
|
**Automated Setup (Easiest)**
|
|
149
149
|
|
|
150
|
-
Use the
|
|
150
|
+
Use the combined setup script to set up Cursor rules (and other pace-core tools):
|
|
151
151
|
|
|
152
152
|
```bash
|
|
153
|
-
npm run setup
|
|
154
|
-
# or
|
|
155
|
-
|
|
153
|
+
npm run setup
|
|
154
|
+
# or to force update existing configs
|
|
155
|
+
npm run setup -- --force
|
|
156
156
|
```
|
|
157
157
|
|
|
158
158
|
This script will:
|
|
@@ -233,6 +233,8 @@ Rules are organized in `packages/core/eslint-rules/rules/`:
|
|
|
233
233
|
- `07-api-tech-stack.cjs` - RPC naming, React 19+, import.meta.env
|
|
234
234
|
- `08-testing.cjs` - Test file naming
|
|
235
235
|
|
|
236
|
+
Rule IDs are under the plugin prefix `pace-core-compliance/` (e.g. `pace-core-compliance/prefer-pace-core-components`). Use this prefix when configuring overrides or looking up rules in IDE/CI output.
|
|
237
|
+
|
|
236
238
|
### Detailed Rule Descriptions
|
|
237
239
|
|
|
238
240
|
#### Import Rules
|
|
@@ -565,43 +567,21 @@ function YourComponent() {
|
|
|
565
567
|
}
|
|
566
568
|
```
|
|
567
569
|
|
|
568
|
-
##
|
|
569
|
-
|
|
570
|
-
The static analysis script provides a comprehensive scan of your codebase and generates a detailed compliance report.
|
|
571
|
-
|
|
572
|
-
### Running the Script
|
|
573
|
-
|
|
574
|
-
```bash
|
|
575
|
-
# From your consuming app root
|
|
576
|
-
node node_modules/@jmruthers/pace-core/scripts/check-pace-core-compliance.cjs
|
|
577
|
-
```
|
|
578
|
-
|
|
579
|
-
Or add it to your `package.json`:
|
|
580
|
-
|
|
581
|
-
```json
|
|
582
|
-
{
|
|
583
|
-
"scripts": {
|
|
584
|
-
"check:pace-core": "node node_modules/@jmruthers/pace-core/scripts/check-pace-core-compliance.cjs"
|
|
585
|
-
}
|
|
586
|
-
}
|
|
587
|
-
```
|
|
588
|
-
|
|
589
|
-
### What It Checks
|
|
570
|
+
## Compliance validation
|
|
590
571
|
|
|
591
|
-
|
|
592
|
-
2. **Duplicate Components** - Finds local components matching pace-core names
|
|
593
|
-
3. **Duplicate Hooks** - Finds local hooks matching pace-core hooks
|
|
594
|
-
4. **Duplicate Utils** - Finds local utils matching pace-core utils
|
|
595
|
-
5. **Suggestions** - Recommends pace-core alternatives for native HTML elements
|
|
572
|
+
Compliance is validated by **ESLint** (during development) and the **pace-core Audit** step (when you run `npm run validate`).
|
|
596
573
|
|
|
597
|
-
|
|
574
|
+
**Run validation:** From the consuming app root (or repository root for pace-core development), run `npm run validate`. The pace-core audit report is written to `audit/<timestamp>-pace-core-audit.md`. For pace-core development, run `npm run validate` from the repository root; the audit runs against the current directory.
|
|
598
575
|
|
|
599
|
-
|
|
576
|
+
**What the Standard 1 audit checks:**
|
|
600
577
|
|
|
601
|
-
-
|
|
602
|
-
-
|
|
603
|
-
-
|
|
604
|
-
-
|
|
578
|
+
- Provider nesting order in `main.tsx` (QueryClientProvider → BrowserRouter → UnifiedAuthProvider → OrganisationProvider)
|
|
579
|
+
- Core styles import chain (app.css: tailwindcss, pace-core core.css, @source directives)
|
|
580
|
+
- RBAC setup (`setupRBAC()` called before rendering)
|
|
581
|
+
- Vite aliases (no aliases that bypass pace-core exports)
|
|
582
|
+
- Secure Supabase client location (`createClient()` only in main.tsx or lib/supabase.ts)
|
|
583
|
+
- Cursor rules present (`.cursor/rules/` with pace-core rules)
|
|
584
|
+
- ESLint config includes pace-core config
|
|
605
585
|
|
|
606
586
|
## Best Practices
|
|
607
587
|
|
|
@@ -707,6 +687,16 @@ createRoot(document.getElementById("root")!).render(
|
|
|
707
687
|
- ❌ `UnifiedAuthProvider` wrapping `BrowserRouter` (causes context errors)
|
|
708
688
|
- ❌ Missing `BrowserRouter` (causes `useNavigate` errors)
|
|
709
689
|
|
|
690
|
+
## MUST: Auth routing
|
|
691
|
+
|
|
692
|
+
**MUST** protect routes with pace-core **ProtectedRoute**. Use a single public `/login` route and wrap all other routes in `<Route element={<ProtectedRoute />}>` (or `requireEvent={false}` variant for apps that do not require an event).
|
|
693
|
+
|
|
694
|
+
**MUST NOT** implement a global auth gate that wraps the entire route tree and redirects unauthenticated users to `/login` when `!isAuthenticated`. That pattern races with post-login context updates and can cause "login succeeds but redirect doesn't happen" or the login form to reset.
|
|
695
|
+
|
|
696
|
+
**SHOULD NOT** use React Router `BrowserRouter` `future` flags (e.g. `v7_startTransition`, `v7_relativeSplatPath`) unless login and logout have been verified with that configuration; use plain `<BrowserRouter>` by default.
|
|
697
|
+
|
|
698
|
+
See [Authentication implementation guide](../../implementation-guides/authentication.md#critical-auth-routing-pattern) for the full auth routing pattern and checklist.
|
|
699
|
+
|
|
710
700
|
## MUST: Vite Configuration
|
|
711
701
|
|
|
712
702
|
**⚠️ CRITICAL: Vite configuration prevents React context mismatches!**
|
|
@@ -844,7 +834,7 @@ function useSecureSupabase(
|
|
|
844
834
|
|
|
845
835
|
### Acceptable Exceptions
|
|
846
836
|
|
|
847
|
-
**The ONLY acceptable
|
|
837
|
+
**The ONLY acceptable uses of `createClient()` in consuming app code are:**
|
|
848
838
|
|
|
849
839
|
1. **Creating the base client for `UnifiedAuthProvider`** - This MUST be in one of these files:
|
|
850
840
|
- `src/main.tsx` (or `main.jsx`)
|
|
@@ -862,13 +852,15 @@ function useSecureSupabase(
|
|
|
862
852
|
const supabase = createClient(...);
|
|
863
853
|
```
|
|
864
854
|
|
|
855
|
+
2. **PublicPageProvider (pace-core)** - `PublicPageProvider` may create a client for unauthenticated public pages only; that client must not be used for authenticated or organisation-scoped data.
|
|
856
|
+
|
|
865
857
|
**NO OTHER EXCEPTIONS ARE PERMITTED** - All other uses of `createClient()` are security violations and MUST be fixed.
|
|
866
858
|
|
|
867
859
|
### Detection / Audit Tool
|
|
868
860
|
|
|
869
|
-
The
|
|
861
|
+
The pace-core Audit step (run via `npm run validate`) performs comprehensive system-level analysis organized by standards:
|
|
870
862
|
|
|
871
|
-
- **Standard 1 (pace-core Compliance)**: Provider nesting, core styles import, RBAC setup, Vite aliases, secure Supabase client location, Cursor rules, ESLint config
|
|
863
|
+
- **Standard 1 (pace-core Compliance)**: Provider nesting, core styles import, RBAC setup, Vite aliases, secure Supabase client location, **auth routing (no global auth gate)**, Cursor rules, ESLint config
|
|
872
864
|
- **Standard 2 (Project Structure)**: Directory structure, config files, import paths, test colocation, Supabase structure
|
|
873
865
|
- **Standard 3 (Architecture)**: Component boundaries, ApiResult usage
|
|
874
866
|
- **Standard 4 (Code Quality)**: TypeScript config, test coverage config
|
|
@@ -880,6 +872,26 @@ The audit tool (`npm run audit:pace-core`) performs comprehensive system-level a
|
|
|
880
872
|
|
|
881
873
|
**Reference**: See [packages/core/audit-tool/](../../audit-tool/) for audit tool implementation.
|
|
882
874
|
|
|
875
|
+
### How each layer enforces this standard
|
|
876
|
+
|
|
877
|
+
- **Standards (this doc):** Source of truth; defines MUST/SHOULD and exceptions.
|
|
878
|
+
- **Cursor rule:** `01-pace-core-compliance.mdc` — AI guidance when editing `src/**/*.{ts,tsx,js,jsx}`; points to this doc and ESLint.
|
|
879
|
+
- **ESLint:** Rules in `01-pace-core-compliance.cjs` (plugin prefix `pace-core-compliance/`): prefer-pace-core-components, prefer-pace-core-hooks, prefer-pace-core-utils, no-local-component-duplication, no-inline-styles, prefer-pace-core-form; plus no-restricted-imports and RBAC rules from Standard 6. Run via lint step in CI and locally.
|
|
880
|
+
- **Audit tool:** Standard 1 audit runs as part of `npm run validate`; checks provider nesting, core styles import, RBAC setup, Vite aliases, secure Supabase client location, **auth routing pattern (flags files that redirect to `/login` when `!isAuthenticated`, which indicates a global auth gate)**, Cursor rules presence, ESLint config. Report: `audit/<timestamp>-pace-core-audit.md`. ESLint does not currently enforce auth routing; use the audit and the [Authentication implementation guide](../../implementation-guides/authentication.md#critical-auth-routing-pattern) to avoid the global auth gate pattern.
|
|
881
|
+
|
|
882
|
+
### Audit issue types and where to read
|
|
883
|
+
|
|
884
|
+
| Audit issue type | See section in this doc |
|
|
885
|
+
|------------------|--------------------------|
|
|
886
|
+
| providerNesting | MUST: Provider Nesting Order |
|
|
887
|
+
| coreStyles | (Styling standard) / app.css |
|
|
888
|
+
| rbacSetup | MUST: Setup RBAC Before Use (Cursor rule); Detection / Audit Tool |
|
|
889
|
+
| viteAlias | MUST: Vite Configuration |
|
|
890
|
+
| supabaseClient | MUST: Use Secure Supabase Client |
|
|
891
|
+
| authRouting | MUST: Auth routing (no global auth gate); [Authentication guide](../../implementation-guides/authentication.md#critical-auth-routing-pattern) |
|
|
892
|
+
| cursorRules | Step 3: Setup Cursor Rules |
|
|
893
|
+
| eslintConfig | Step 2: Setup ESLint |
|
|
894
|
+
|
|
883
895
|
### Detection / Audit (Legacy)
|
|
884
896
|
|
|
885
897
|
- `rg "createClient\(" src` must return **exactly ONE match** in the file that creates the base client for `UnifiedAuthProvider`.
|
|
@@ -934,17 +946,19 @@ During audits, documented exceptions will be:
|
|
|
934
946
|
|
|
935
947
|
**Invalid exceptions** (undocumented, unnecessary, or security-related) will be flagged as violations requiring remediation.
|
|
936
948
|
|
|
949
|
+
Documented exceptions are not yet detected automatically by the audit tool; they are tracked manually or via review. Future versions may report them as informational.
|
|
950
|
+
|
|
937
951
|
## Troubleshooting
|
|
938
952
|
|
|
939
953
|
### ESLint Setup Issues
|
|
940
954
|
|
|
941
955
|
**Error: "Could not find 'no-restricted-imports' in plugin 'pace-core-compliance'"**
|
|
942
956
|
- **Cause**: This rule was removed from the plugin (it's now handled by standard ESLint `no-restricted-imports`)
|
|
943
|
-
- **Fix**: Update to the latest version of `@jmruthers/pace-core` and run `npm run setup
|
|
957
|
+
- **Fix**: Update to the latest version of `@jmruthers/pace-core` and run `npm run setup -- --force`
|
|
944
958
|
|
|
945
959
|
**Error: "TypeError: Unexpected array" when using `tseslint.config()`**
|
|
946
960
|
- **Cause**: Incorrect spreading of `paceCoreConfig` in `tseslint.config()` wrapper
|
|
947
|
-
- **Fix**: Run `npm run setup
|
|
961
|
+
- **Fix**: Run `npm run setup -- --force` to fix the config structure, or manually ensure `paceCoreConfig` is spread correctly:
|
|
948
962
|
```javascript
|
|
949
963
|
import paceCoreConfig from '@jmruthers/pace-core/eslint-config';
|
|
950
964
|
|
|
@@ -959,7 +973,7 @@ During audits, documented exceptions will be:
|
|
|
959
973
|
- **Fix**:
|
|
960
974
|
1. Ensure `@jmruthers/pace-core` is built: `npm run build` in pace-core
|
|
961
975
|
2. Check that `node_modules/@jmruthers/pace-core/dist/eslint-rules/` exists
|
|
962
|
-
3. Run `npm run setup
|
|
976
|
+
3. Run `npm run setup -- --force` to regenerate config
|
|
963
977
|
|
|
964
978
|
### ESLint Rules Not Working
|
|
965
979
|
|
|
@@ -970,12 +984,6 @@ During audits, documented exceptions will be:
|
|
|
970
984
|
5. **Verify rules are available**: Check that the rules file exists
|
|
971
985
|
6. **Check rule count**: Verify all rules are loaded
|
|
972
986
|
|
|
973
|
-
### Static Analysis Script Errors
|
|
974
|
-
|
|
975
|
-
1. **Manifest not found**: Ensure `core-usage-manifest.json` exists in pace-core package
|
|
976
|
-
2. **No files scanned**: Check that you're running from the project root
|
|
977
|
-
3. **Permission errors**: Ensure script has read access to source files
|
|
978
|
-
|
|
979
987
|
### False Positives
|
|
980
988
|
|
|
981
989
|
If you encounter false positives:
|
|
@@ -1004,10 +1012,7 @@ After setting up the ESLint config, verify it's working:
|
|
|
1004
1012
|
```
|
|
1005
1013
|
Run ESLint and verify it reports the violation.
|
|
1006
1014
|
|
|
1007
|
-
3. **Run
|
|
1008
|
-
```bash
|
|
1009
|
-
npm run check:pace-core
|
|
1010
|
-
```
|
|
1015
|
+
3. **Run full validation**: Run `npm run validate` and review `audit/<timestamp>-pace-core-audit.md` for Standard 1 issues.
|
|
1011
1016
|
|
|
1012
1017
|
## Related Documentation
|
|
1013
1018
|
|
|
@@ -25,6 +25,23 @@ This guide defines the standard project structure and file organization patterns
|
|
|
25
25
|
9. [Migration from Existing Projects](#migration-from-existing-projects)
|
|
26
26
|
10. [Structure Checklist](#structure-checklist)
|
|
27
27
|
|
|
28
|
+
### How each layer enforces this standard
|
|
29
|
+
|
|
30
|
+
- **Standards (this doc):** Source of truth; defines MUST/SHOULD for structure, naming, imports, and config.
|
|
31
|
+
- **Cursor rule:** `02-project-structure.mdc` — AI guidance when creating or organizing files (`**/*.{ts,tsx,js,jsx,md}`, `src/**`); points to this doc.
|
|
32
|
+
- **ESLint:** No project-structure rules; structure is enforced by the Cursor rule and the audit tool only.
|
|
33
|
+
- **Audit tool:** Standard 2 audit runs as part of `npm run validate`; checks directory structure, config files, import paths (tsconfig), test colocation, feature-based organization (no type-based or domain-based). Report: `audit/<timestamp>-pace-core-audit.md`. For pace-core development, run `npm run validate` from the repository root.
|
|
34
|
+
|
|
35
|
+
### Audit issue types and where to read
|
|
36
|
+
|
|
37
|
+
| Audit issue type | See section in this doc |
|
|
38
|
+
|---------------------|------------------------------------------------|
|
|
39
|
+
| directoryStructure | Standard Directory Structure |
|
|
40
|
+
| configFiles | Configuration Files |
|
|
41
|
+
| importPaths | Import Path Configuration |
|
|
42
|
+
| testColocation | Testing Structure (Test Colocation) |
|
|
43
|
+
| organizationPattern | Component Organization / File Organization Standard |
|
|
44
|
+
|
|
28
45
|
---
|
|
29
46
|
|
|
30
47
|
## Standard Directory Structure
|
|
@@ -95,7 +112,7 @@ your-app/
|
|
|
95
112
|
│ └── audit-*.md
|
|
96
113
|
│
|
|
97
114
|
├── .gitignore
|
|
98
|
-
├── .
|
|
115
|
+
├── eslint.config.js # ESLint config (flat config; or .eslintrc.js / eslint.config.cjs)
|
|
99
116
|
├── package.json
|
|
100
117
|
├── tsconfig.json # TypeScript config
|
|
101
118
|
├── tsconfig.app.json # App-specific TS config (if needed)
|
|
@@ -409,7 +426,7 @@ describe('EventCard', () => {
|
|
|
409
426
|
|
|
410
427
|
### Migration Files
|
|
411
428
|
|
|
412
|
-
**
|
|
429
|
+
**If the app has app-owned migrations:** they **MUST** be in `supabase/migrations/` with the naming convention `YYYYMMDDHHMMSS_description.sql`:
|
|
413
430
|
|
|
414
431
|
```
|
|
415
432
|
supabase/
|
|
@@ -419,7 +436,7 @@ supabase/
|
|
|
419
436
|
└── 20250117150000_add_rls_policies.sql
|
|
420
437
|
```
|
|
421
438
|
|
|
422
|
-
**
|
|
439
|
+
**If the app has no app-owned migrations** (e.g. shared DB managed elsewhere): **MUST** add `supabase/README.md` explaining where migrations/RLS are managed and whether the app will add migrations in the future.
|
|
423
440
|
|
|
424
441
|
### Edge Functions (if used)
|
|
425
442
|
|
|
@@ -436,20 +453,18 @@ supabase/
|
|
|
436
453
|
|
|
437
454
|
### Supabase Client Setup
|
|
438
455
|
|
|
439
|
-
**MUST** place Supabase client in `src/lib/supabase.ts
|
|
456
|
+
**MUST** place the base Supabase client in `main.tsx`, `App.tsx`, or (if in a separate file) `src/lib/supabase.ts`. If in a separate file, the base client **MUST NOT** be exported for general use; it must only be passed to `UnifiedAuthProvider`. Components **MUST** use `useSecureSupabase()` from pace-core for queries. See [pace-core Compliance](./1-pace-core-compliance-standards.md) for security requirements.
|
|
440
457
|
|
|
441
458
|
```typescript
|
|
442
|
-
// src/lib/supabase.ts
|
|
459
|
+
// src/lib/supabase.ts — base client for UnifiedAuthProvider only; DO NOT import elsewhere
|
|
443
460
|
import { createClient } from '@supabase/supabase-js';
|
|
444
461
|
import type { Database } from '@/types/database';
|
|
445
462
|
|
|
446
463
|
const supabaseUrl = import.meta.env.VITE_SUPABASE_URL;
|
|
447
464
|
const supabaseAnonKey = import.meta.env.VITE_SUPABASE_ANON_KEY;
|
|
448
465
|
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
supabaseAnonKey
|
|
452
|
-
);
|
|
466
|
+
// Used only by main.tsx/App.tsx for UnifiedAuthProvider; components use useSecureSupabase()
|
|
467
|
+
export const supabaseClient = createClient<Database>(supabaseUrl, supabaseAnonKey);
|
|
453
468
|
```
|
|
454
469
|
|
|
455
470
|
---
|
|
@@ -467,7 +482,7 @@ export const supabaseClient = createClient<Database>(
|
|
|
467
482
|
| `vite.config.ts` | Vite build configuration | ✅ Yes |
|
|
468
483
|
| `vitest.config.ts` | Vitest test configuration | ✅ Yes |
|
|
469
484
|
| `.gitignore` | Git ignore patterns | ✅ Yes |
|
|
470
|
-
| `.eslintrc.js`
|
|
485
|
+
| `eslint.config.js` (or `.eslintrc.js` / `eslint.config.cjs`) | ESLint configuration | ✅ Yes |
|
|
471
486
|
|
|
472
487
|
### Root Directory Rules
|
|
473
488
|
|
|
@@ -704,9 +719,10 @@ your-app/
|
|
|
704
719
|
|
|
705
720
|
1. **Remove Duplicate pace-core Components**
|
|
706
721
|
```bash
|
|
707
|
-
#
|
|
708
|
-
|
|
722
|
+
# Run full validation (includes pace-core audit)
|
|
723
|
+
npm run validate
|
|
709
724
|
```
|
|
725
|
+
Review `audit/<timestamp>-pace-core-audit.md` for Standard 1 and project structure issues.
|
|
710
726
|
|
|
711
727
|
2. **Remove Empty Directories**
|
|
712
728
|
```bash
|
|
@@ -719,16 +735,17 @@ your-app/
|
|
|
719
735
|
|
|
720
736
|
#### Phase 5: Verification
|
|
721
737
|
|
|
722
|
-
1. **
|
|
738
|
+
1. **Run Setup**
|
|
723
739
|
```bash
|
|
724
|
-
|
|
740
|
+
npm run setup
|
|
725
741
|
```
|
|
726
742
|
|
|
727
743
|
2. **Run Compliance Checks**
|
|
728
744
|
```bash
|
|
729
|
-
#
|
|
730
|
-
|
|
745
|
+
# Run full validation (includes pace-core audit)
|
|
746
|
+
npm run validate
|
|
731
747
|
```
|
|
748
|
+
Review `audit/<timestamp>-pace-core-audit.md` for compliance and structure issues.
|
|
732
749
|
|
|
733
750
|
3. **Verify Build**
|
|
734
751
|
```bash
|
|
@@ -6,6 +6,20 @@
|
|
|
6
6
|
|
|
7
7
|
Define the core architectural principles and SOLID expectations for pace-core and consuming apps so components, APIs, and utilities evolve consistently and sustainably.
|
|
8
8
|
|
|
9
|
+
### How each layer enforces this standard
|
|
10
|
+
|
|
11
|
+
- **Standards (this doc):** Source of truth; defines SOLID, component design, API design, and boundaries.
|
|
12
|
+
- **Cursor rule:** `03-architecture.mdc` — AI guidance when editing `src/**/*.{ts,tsx}`; points to this doc.
|
|
13
|
+
- **ESLint:** SRP proxies only: `max-lines-per-function`, `complexity`, `max-lines` (on `src/**` and, in the monorepo, `packages/core/src/**`). Other architecture enforcement is via the Cursor rule and the audit tool.
|
|
14
|
+
- **Audit tool:** Standard 3 audit runs as part of `npm run validate`; checks component boundaries (data fetching in components, complex business logic in components) and ApiResult shape usage. Report: `audit/<timestamp>-pace-core-audit.md`. For pace-core development, run `npm run validate` from the repository root.
|
|
15
|
+
|
|
16
|
+
### Audit issue types and where to read
|
|
17
|
+
|
|
18
|
+
| Audit issue type | See section in this doc |
|
|
19
|
+
|--------------------|----------------------------------------------------------------|
|
|
20
|
+
| componentBoundary | Component Design Principles / SOLID (Single Responsibility) |
|
|
21
|
+
| apiResult | API Design Principles (Type-Safe Results) |
|
|
22
|
+
|
|
9
23
|
---
|
|
10
24
|
|
|
11
25
|
## Architectural Principles
|
|
@@ -164,6 +178,32 @@ const supabaseService: DataService = { /* ... */ };
|
|
|
164
178
|
const mockService: DataService = { /* ... */ };
|
|
165
179
|
```
|
|
166
180
|
|
|
181
|
+
### How we check SOLID
|
|
182
|
+
|
|
183
|
+
Each principle is enforced by one or more layers. The table below shows which layer(s) check what.
|
|
184
|
+
|
|
185
|
+
| Principle | Standards | Cursor rule | ESLint | Audit tool |
|
|
186
|
+
|-----------|-----------|-------------|--------|------------|
|
|
187
|
+
| **SRP** | Defined (this doc) | Guidance: extract logic to hooks/services | Proxies: `max-lines-per-function`, `max-lines` (1000), `complexity` (on `src/**`, `packages/core/src/**`) | componentBoundary: data fetching in components, complex business logic (no line or named-export checks; those are in ESLint) |
|
|
188
|
+
| **OCP** | Defined (this doc) | Guidance: composition over modification | — | — |
|
|
189
|
+
| **LSP** | Defined (this doc) | Guidance: maintain interface contracts | — | — |
|
|
190
|
+
| **ISP** | Defined (this doc) | Guidance: focused interfaces | — | Optional: large interface/props count heuristic |
|
|
191
|
+
| **DIP** | Defined (this doc) | Guidance: depend on abstractions | — | Partly covered by componentBoundary (data in components) |
|
|
192
|
+
|
|
193
|
+
**Limitations:** OCP, LSP, ISP, and DIP are enforced by standards and cursor rules only; there are no mechanical checks for them. SRP is partially checked: the audit flags component-boundary violations (data/business logic in components), and ESLint uses length/complexity as proxies for “single reason to change.” Full SRP adherence is not mechanically decidable.
|
|
194
|
+
|
|
195
|
+
### Size limits (SRP proxies)
|
|
196
|
+
|
|
197
|
+
**Line-related limits** are enforced only by **ESLint** (single source; audit does not report line counts):
|
|
198
|
+
|
|
199
|
+
| What | Limit | Enforced by | Why |
|
|
200
|
+
|------|-------|--------------|-----|
|
|
201
|
+
| **Lines per function** | 400 | ESLint `max-lines-per-function` | Same. |
|
|
202
|
+
| **Lines per file** | 1000 | ESLint `max-lines` | Same. |
|
|
203
|
+
| **Named exports per file** | 10 | ESLint `pace-core-compliance/max-named-exports` | Same. |
|
|
204
|
+
|
|
205
|
+
All SRP size limits (lines and named exports) are enforced only by ESLint; the audit does not report them.
|
|
206
|
+
|
|
167
207
|
---
|
|
168
208
|
|
|
169
209
|
## Component Design Principles
|
|
@@ -194,7 +234,7 @@ function Counter() {
|
|
|
194
234
|
|
|
195
235
|
### Accessible by Default
|
|
196
236
|
|
|
197
|
-
**Components must be accessible with correct roles, keyboard support, and visible focus.**
|
|
237
|
+
**Components must be accessible with correct roles, keyboard support, and visible focus.** Prefer pace-core `Button` when available; it provides built-in accessibility. This example illustrates accessibility attributes when building a custom primitive.
|
|
198
238
|
|
|
199
239
|
```tsx
|
|
200
240
|
// ✅ CORRECT - Accessible component
|
|
@@ -10,6 +10,26 @@ This standard defines TypeScript rules, naming conventions, and code style patte
|
|
|
10
10
|
|
|
11
11
|
---
|
|
12
12
|
|
|
13
|
+
## How each layer enforces this standard
|
|
14
|
+
|
|
15
|
+
- **Standards (this doc):** Source of truth; defines TypeScript rules, naming conventions, patterns, and accessibility (WCAG 2.1 AA).
|
|
16
|
+
- **Cursor rule:** `04-code-quality.mdc` — AI guidance when editing `src/**/*.{ts,tsx,js,jsx}`; points to this doc.
|
|
17
|
+
- **ESLint:** Rules in `04-code-quality.cjs` (plugin prefix `pace-core-compliance/`): `naming-convention`, `component-naming`, `type-naming`. Run via lint step in CI and locally.
|
|
18
|
+
- **Audit tool:** Standard 4 audit runs as part of `npm run validate`; checks TypeScript config (strict mode), test coverage config (vitest), and excessive/debug console logging. 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
|
+
| typescriptConfig | TypeScript Rules (Avoid Implicit any / tsconfig) |
|
|
27
|
+
| testCoverage | (Testing standard) / vitest coverage |
|
|
28
|
+
| excessiveConsoleLogging | Forbidden Patterns / code hygiene |
|
|
29
|
+
| debugConsoleLogging | Forbidden Patterns / code hygiene |
|
|
30
|
+
|
|
31
|
+
---
|
|
32
|
+
|
|
13
33
|
## TypeScript Rules
|
|
14
34
|
|
|
15
35
|
### No `any` Type
|
|
@@ -456,7 +476,7 @@ function EventPage({ eventId }: { eventId: string }) {
|
|
|
456
476
|
// 50+ lines of logic
|
|
457
477
|
}, [eventId]);
|
|
458
478
|
|
|
459
|
-
//
|
|
479
|
+
// 400+ lines of JSX
|
|
460
480
|
return <div>...</div>;
|
|
461
481
|
}
|
|
462
482
|
|
|
@@ -704,15 +724,15 @@ Before committing code, verify:
|
|
|
704
724
|
|
|
705
725
|
## ESLint Rules
|
|
706
726
|
|
|
707
|
-
The following
|
|
708
|
-
|
|
709
|
-
### Naming Conventions
|
|
727
|
+
Rule IDs use the plugin prefix **`pace-core-compliance/`**. The following rules enforce code quality standards:
|
|
710
728
|
|
|
711
|
-
- **`naming-convention`**
|
|
729
|
+
- **`pace-core-compliance/naming-convention`** — Enforces hook naming (`use*`) and provider naming (`*Provider`).
|
|
730
|
+
- **`pace-core-compliance/component-naming`** — Enforces component PascalCase.
|
|
731
|
+
- **`pace-core-compliance/type-naming`** — Enforces types and interfaces PascalCase.
|
|
712
732
|
|
|
713
733
|
These rules are part of the `pace-core-compliance` plugin and are automatically enabled when you extend `@jmruthers/pace-core/eslint-config`.
|
|
714
734
|
|
|
715
|
-
**Setup**: Run `
|
|
735
|
+
**Setup**: Run `npm run setup` to configure ESLint (and other pace-core tools) in your consuming app.
|
|
716
736
|
|
|
717
737
|
## Related Documentation
|
|
718
738
|
|
|
@@ -2,6 +2,8 @@
|
|
|
2
2
|
|
|
3
3
|
**🤖 Cursor Rule**: See [05-styling.mdc](../../cursor-rules/05-styling.mdc) for AI-optimized directives that automatically enforce markup quality (this rule is ALWAYS APPLIED).
|
|
4
4
|
|
|
5
|
+
**🔧 ESLint Rules**: See [05-styling.cjs](../../eslint-rules/rules/05-styling.cjs) for mechanically checkable styling/markup rules.
|
|
6
|
+
|
|
5
7
|
## Purpose
|
|
6
8
|
|
|
7
9
|
This standard defines the **REQUIRED** configuration for consuming apps to properly use pace-core styling. Adhering to this standard ensures:
|
|
@@ -11,6 +13,26 @@ This standard defines the **REQUIRED** configuration for consuming apps to prope
|
|
|
11
13
|
- ✅ Tailwind v4 content scanning works properly
|
|
12
14
|
- ✅ Consistent styling across all PACE suite applications
|
|
13
15
|
|
|
16
|
+
---
|
|
17
|
+
|
|
18
|
+
## How each layer enforces this standard
|
|
19
|
+
|
|
20
|
+
- **Standards (this doc):** Source of truth; defines required CSS setup (app.css, @source, @theme, color palettes), markup/styling rules, and Tailwind v4 usage.
|
|
21
|
+
- **Cursor rule:** `05-styling.mdc` — ALWAYS APPLIED; AI guidance when editing `src/**/*.{ts,tsx,js,jsx}`; points to this doc and CSS checklist.
|
|
22
|
+
- **ESLint:** Rules in `05-styling.cjs` (plugin prefix `pace-core-compliance/`): see ESLint Rules section below. Run via lint step in CI and locally.
|
|
23
|
+
- **Audit tool:** Standard 5 audit runs as part of `npm run validate`; checks app.css existence/structure, required imports, @source directives, @theme and color palettes, and Tailwind v4 plugin in vite.config. Report: `audit/<timestamp>-pace-core-audit.md`. For pace-core development, run `npm run validate` from the repository root.
|
|
24
|
+
|
|
25
|
+
---
|
|
26
|
+
|
|
27
|
+
## Audit issue types and where to read
|
|
28
|
+
|
|
29
|
+
| Audit issue type | See section in this doc |
|
|
30
|
+
|------------------|--------------------------|
|
|
31
|
+
| appCss | Required File: src/app.css; CRITICAL: @source paths; CSS Import Path; Required Color Palettes; Verification Checklist |
|
|
32
|
+
| tailwindConfig | Verification Checklist / Troubleshooting (Tailwind v4) |
|
|
33
|
+
|
|
34
|
+
---
|
|
35
|
+
|
|
14
36
|
## Component & Markup Guidance
|
|
15
37
|
|
|
16
38
|
- Components should be stateless when possible, fully typed, and accessibility-first.
|
|
@@ -215,7 +237,7 @@ When you have additional entry points (storybook, tests, preview servers):
|
|
|
215
237
|
## Styling & Markup Rules
|
|
216
238
|
|
|
217
239
|
- **No inline styles**: Do not use `style={{ ... }}` except when a third-party library strictly requires it. Prefer pace-core variants + Tailwind utilities.
|
|
218
|
-
- **Use theme tokens only**: Avoid arbitrary Tailwind colors (
|
|
240
|
+
- **Use theme tokens only**: Avoid arbitrary Tailwind colors (e.g. standard-named colors) and bracket syntax (`bg-[oklch(...)]`). Use `main-*`, `sec-*`, `acc-*`, or semantic tokens like `text-foreground`.
|
|
219
241
|
- **Semantic-first markup**: Prefer semantic HTML elements. Use `<div>` only when no semantic element fits or when required by a library; otherwise use semantic tags or React fragments.
|
|
220
242
|
- **Minimal wrappers**: Avoid extra wrapper elements just for styling—apply layout classes to existing semantic parents or use pace-core layout components.
|
|
221
243
|
- **Typography**: Rely on pace-core typography defaults; only add utilities when they reference approved theme tokens (e.g., `text-main-700`).
|
|
@@ -335,6 +357,18 @@ import './app.css';
|
|
|
335
357
|
2. **Check build output:** Look for warnings about missing classes
|
|
336
358
|
3. **Verify package version:** Ensure you're using a recent version of pace-core
|
|
337
359
|
|
|
360
|
+
## ESLint Rules
|
|
361
|
+
|
|
362
|
+
Rule IDs use the plugin prefix **`pace-core-compliance/`**. The following rules enforce styling and markup standards:
|
|
363
|
+
|
|
364
|
+
- **`pace-core-compliance/no-inline-styles`** — Disallow `style={{...}}`; use pace-core or Tailwind.
|
|
365
|
+
- **`pace-core-compliance/no-typography-styling`** — Disallow typography/color/spacing classes on typography elements (per standard).
|
|
366
|
+
- **`pace-core-compliance/no-pace-core-style-override`** — Disallow overriding className on pace-core components.
|
|
367
|
+
- **`pace-core-compliance/prefer-semantic-html`** — Prefer semantic elements over `<div>`/`<span>`.
|
|
368
|
+
- **`pace-core-compliance/no-nested-same-type-tags`** — Disallow redundant nesting of same semantic type.
|
|
369
|
+
|
|
370
|
+
These rules are part of the `pace-core-compliance` plugin and are enabled when extending `@jmruthers/pace-core/eslint-config`.
|
|
371
|
+
|
|
338
372
|
## Related Documentation
|
|
339
373
|
|
|
340
374
|
- [Standards Overview](./0-standards-overview.md) - Standards system overview
|