@jmruthers/pace-core 0.5.193 → 0.6.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +62 -0
- package/README.md +7 -1
- package/cursor-rules/00-pace-core-compliance.mdc +299 -0
- package/cursor-rules/01-standards-compliance.mdc +244 -0
- package/cursor-rules/02-project-structure.mdc +200 -0
- package/cursor-rules/03-solid-principles.mdc +222 -0
- package/cursor-rules/04-testing-standards.mdc +268 -0
- package/cursor-rules/05-bug-reports-and-features.mdc +246 -0
- package/cursor-rules/06-code-quality.mdc +309 -0
- package/cursor-rules/07-tech-stack-compliance.mdc +214 -0
- package/cursor-rules/08-markup-quality.mdc +452 -0
- package/cursor-rules/CHANGELOG.md +119 -0
- package/cursor-rules/README.md +192 -0
- package/dist/{AuthService-DjnJHDtC.d.ts → AuthService-BPvc3Ka0.d.ts} +54 -0
- package/dist/{DataTable-Be6dH_dR.d.ts → DataTable-BMRU8a1j.d.ts} +34 -2
- package/dist/{DataTable-5FU7IESH.js → DataTable-TPTKCX4D.js} +10 -9
- package/dist/{PublicPageProvider-C0Sm_e5k.d.ts → PublicPageProvider-DC6kCaqf.d.ts} +385 -261
- package/dist/{UnifiedAuthProvider-RGJTDE2C.js → UnifiedAuthProvider-CH6Z342H.js} +3 -3
- package/dist/{UnifiedAuthProvider-185Ih4dj.d.ts → UnifiedAuthProvider-CVcTjx-d.d.ts} +29 -0
- package/dist/{api-N774RPUA.js → api-MVVQZLJI.js} +2 -2
- package/dist/{chunk-KNC55RTG.js → chunk-24UVZUZG.js} +90 -54
- package/dist/chunk-24UVZUZG.js.map +1 -0
- package/dist/{chunk-HWIIPPNI.js → chunk-2UOI2FG5.js} +20 -20
- package/dist/chunk-2UOI2FG5.js.map +1 -0
- package/dist/{chunk-E3SPN4VZ 5.js → chunk-3XC4CPTD.js} +4345 -3986
- package/dist/chunk-3XC4CPTD.js.map +1 -0
- package/dist/{chunk-7EQTDTTJ.js → chunk-6J4GEEJR.js} +172 -45
- package/dist/chunk-6J4GEEJR.js.map +1 -0
- package/dist/{chunk-6C4YBBJM 5.js → chunk-6SOIHG6Z.js} +1 -1
- package/dist/chunk-6SOIHG6Z.js.map +1 -0
- package/dist/{chunk-7FLMSG37.js → chunk-EHMR7VYL.js} +25 -25
- package/dist/chunk-EHMR7VYL.js.map +1 -0
- package/dist/{chunk-I7PSE6JW.js → chunk-F2IMUDXZ.js} +2 -75
- package/dist/chunk-F2IMUDXZ.js.map +1 -0
- package/dist/{chunk-QWWZ5CAQ.js → chunk-FFQEQTNW.js} +7 -9
- package/dist/chunk-FFQEQTNW.js.map +1 -0
- package/dist/chunk-FMUCXFII.js +76 -0
- package/dist/chunk-FMUCXFII.js.map +1 -0
- package/dist/{chunk-HW3OVDUF.js → chunk-J36DSWQK.js} +1 -1
- package/dist/{chunk-HW3OVDUF.js.map → chunk-J36DSWQK.js.map} +1 -1
- package/dist/{chunk-SQGMNID3.js → chunk-L4OXEN46.js} +4 -5
- package/dist/chunk-L4OXEN46.js.map +1 -0
- package/dist/{chunk-R77UEZ4E 3.js → chunk-M43Y4SSO.js} +1 -1
- package/dist/chunk-M43Y4SSO.js.map +1 -0
- package/dist/{chunk-IIELH4DL.js → chunk-MMZ7JXPU.js} +60 -223
- package/dist/chunk-MMZ7JXPU.js.map +1 -0
- package/dist/{chunk-NOAYCWCX 5.js → chunk-NECFR5MM.js} +394 -312
- package/dist/chunk-NECFR5MM.js.map +1 -0
- package/dist/{chunk-BC4IJKSL.js → chunk-SFZUDBL5.js} +40 -4
- package/dist/chunk-SFZUDBL5.js.map +1 -0
- package/dist/{chunk-XNXXZ43G.js → chunk-XWQCNGTQ.js} +748 -364
- package/dist/chunk-XWQCNGTQ.js.map +1 -0
- package/dist/components.d.ts +6 -6
- package/dist/components.js +15 -12
- package/dist/components.js.map +1 -1
- package/dist/{functions-D_kgHktt.d.ts → functions-DHebl8-F.d.ts} +1 -1
- package/dist/hooks.d.ts +59 -126
- package/dist/hooks.js +19 -28
- package/dist/hooks.js.map +1 -1
- package/dist/index.d.ts +63 -16
- package/dist/index.js +23 -24
- package/dist/index.js.map +1 -1
- package/dist/providers.d.ts +21 -3
- package/dist/providers.js +2 -2
- package/dist/rbac/index.d.ts +146 -115
- package/dist/rbac/index.js +8 -11
- package/dist/theming/runtime.d.ts +1 -13
- package/dist/theming/runtime.js +1 -1
- package/dist/{timezone-_pgH8qrY.d.ts → timezone-CHhWg6b4.d.ts} +3 -10
- package/dist/{types-UU913iLA.d.ts → types-BeoeWV5I.d.ts} +8 -0
- package/dist/{types-CEpcvwwF.d.ts → types-CkbwOr4Y.d.ts} +6 -0
- package/dist/types.d.ts +2 -2
- package/dist/{usePublicRouteParams-TZe0gy-4.d.ts → usePublicRouteParams-1oMokgLF.d.ts} +34 -4
- package/dist/{useToast-C8gR5ir4.d.ts → useToast-AyaT-x7p.d.ts} +2 -2
- package/dist/utils.d.ts +4 -5
- package/dist/utils.js +15 -15
- package/dist/utils.js.map +1 -1
- package/docs/api/README.md +7 -1
- package/docs/api/classes/ColumnFactory.md +8 -8
- package/docs/api/classes/InvalidScopeError.md +4 -4
- package/docs/api/classes/Logger.md +1 -1
- package/docs/api/classes/MissingUserContextError.md +4 -4
- package/docs/api/classes/OrganisationContextRequiredError.md +4 -4
- package/docs/api/classes/PermissionDeniedError.md +4 -4
- package/docs/api/classes/RBACAuditManager.md +1 -1
- package/docs/api/classes/RBACCache.md +1 -1
- package/docs/api/classes/RBACEngine.md +1 -1
- package/docs/api/classes/RBACError.md +4 -4
- package/docs/api/classes/RBACNotInitializedError.md +4 -4
- package/docs/api/classes/SecureSupabaseClient.md +18 -15
- package/docs/api/classes/StorageUtils.md +1 -1
- package/docs/api/enums/FileCategory.md +1 -1
- package/docs/api/enums/LogLevel.md +1 -1
- package/docs/api/enums/RBACErrorCode.md +1 -1
- package/docs/api/enums/RPCFunction.md +1 -1
- package/docs/api/interfaces/AddressFieldProps.md +1 -1
- package/docs/api/interfaces/AddressFieldRef.md +1 -1
- package/docs/api/interfaces/AggregateConfig.md +4 -4
- package/docs/api/interfaces/AutocompleteOptions.md +1 -1
- package/docs/api/interfaces/AvatarProps.md +1 -1
- package/docs/api/interfaces/BadgeProps.md +9 -2
- package/docs/api/interfaces/ButtonProps.md +7 -4
- package/docs/api/interfaces/CalendarProps.md +8 -5
- package/docs/api/interfaces/CardProps.md +8 -5
- package/docs/api/interfaces/ColorPalette.md +1 -1
- package/docs/api/interfaces/ColorShade.md +1 -1
- package/docs/api/interfaces/ComplianceResult.md +1 -1
- package/docs/api/interfaces/DataAccessRecord.md +9 -9
- package/docs/api/interfaces/DataRecord.md +1 -1
- package/docs/api/interfaces/DataTableAction.md +24 -21
- package/docs/api/interfaces/DataTableColumn.md +31 -31
- package/docs/api/interfaces/DataTableProps.md +1 -1
- package/docs/api/interfaces/DataTableToolbarButton.md +7 -7
- package/docs/api/interfaces/DatabaseComplianceResult.md +1 -1
- package/docs/api/interfaces/DatabaseIssue.md +1 -1
- package/docs/api/interfaces/EmptyStateConfig.md +5 -5
- package/docs/api/interfaces/EnhancedNavigationMenuProps.md +1 -1
- package/docs/api/interfaces/ErrorBoundaryProps.md +147 -0
- package/docs/api/interfaces/ErrorBoundaryProviderProps.md +36 -0
- package/docs/api/interfaces/ErrorBoundaryState.md +75 -0
- package/docs/api/interfaces/EventAppRoleData.md +1 -1
- package/docs/api/interfaces/ExportColumn.md +1 -1
- package/docs/api/interfaces/ExportOptions.md +8 -8
- package/docs/api/interfaces/FileDisplayProps.md +1 -1
- package/docs/api/interfaces/FileMetadata.md +1 -1
- package/docs/api/interfaces/FileReference.md +1 -1
- package/docs/api/interfaces/FileSizeLimits.md +1 -1
- package/docs/api/interfaces/FileUploadOptions.md +1 -1
- package/docs/api/interfaces/FileUploadProps.md +26 -23
- package/docs/api/interfaces/FooterProps.md +10 -8
- package/docs/api/interfaces/FormFieldProps.md +10 -10
- package/docs/api/interfaces/FormProps.md +1 -1
- package/docs/api/interfaces/GrantEventAppRoleParams.md +1 -1
- package/docs/api/interfaces/InactivityWarningModalProps.md +1 -1
- package/docs/api/interfaces/InputProps.md +7 -4
- package/docs/api/interfaces/LabelProps.md +1 -1
- package/docs/api/interfaces/LoggerConfig.md +1 -1
- package/docs/api/interfaces/LoginFormProps.md +14 -11
- package/docs/api/interfaces/NavigationAccessRecord.md +1 -1
- package/docs/api/interfaces/NavigationContextType.md +1 -1
- package/docs/api/interfaces/NavigationGuardProps.md +1 -1
- package/docs/api/interfaces/NavigationItem.md +11 -11
- package/docs/api/interfaces/NavigationMenuProps.md +15 -15
- package/docs/api/interfaces/NavigationProviderProps.md +1 -1
- package/docs/api/interfaces/Organisation.md +1 -1
- package/docs/api/interfaces/OrganisationContextType.md +1 -1
- package/docs/api/interfaces/OrganisationMembership.md +1 -1
- package/docs/api/interfaces/OrganisationProviderProps.md +1 -1
- package/docs/api/interfaces/OrganisationSecurityError.md +1 -1
- package/docs/api/interfaces/PaceAppLayoutProps.md +30 -27
- package/docs/api/interfaces/PaceLoginPageProps.md +6 -4
- package/docs/api/interfaces/PageAccessRecord.md +1 -1
- package/docs/api/interfaces/PagePermissionContextType.md +1 -1
- package/docs/api/interfaces/PagePermissionGuardProps.md +1 -1
- package/docs/api/interfaces/PagePermissionProviderProps.md +1 -1
- package/docs/api/interfaces/PaletteData.md +1 -1
- package/docs/api/interfaces/ParsedAddress.md +1 -1
- package/docs/api/interfaces/PermissionEnforcerProps.md +1 -1
- package/docs/api/interfaces/ProgressProps.md +1 -1
- package/docs/api/interfaces/ProtectedRouteProps.md +7 -26
- package/docs/api/interfaces/PublicPageFooterProps.md +9 -9
- package/docs/api/interfaces/PublicPageHeaderProps.md +10 -10
- package/docs/api/interfaces/PublicPageLayoutProps.md +7 -20
- package/docs/api/interfaces/QuickFix.md +1 -1
- package/docs/api/interfaces/RBACAccessValidateParams.md +1 -1
- package/docs/api/interfaces/RBACAccessValidateResult.md +1 -1
- package/docs/api/interfaces/RBACAuditLogParams.md +1 -1
- package/docs/api/interfaces/RBACAuditLogResult.md +1 -1
- package/docs/api/interfaces/RBACConfig.md +1 -1
- package/docs/api/interfaces/RBACContext.md +1 -1
- package/docs/api/interfaces/RBACLogger.md +1 -1
- package/docs/api/interfaces/RBACPageAccessCheckParams.md +1 -1
- package/docs/api/interfaces/RBACPerformanceMetrics.md +1 -1
- package/docs/api/interfaces/RBACPermissionCheckParams.md +1 -1
- package/docs/api/interfaces/RBACPermissionCheckResult.md +1 -1
- package/docs/api/interfaces/RBACPermissionsGetParams.md +1 -1
- package/docs/api/interfaces/RBACPermissionsGetResult.md +1 -1
- package/docs/api/interfaces/RBACResult.md +1 -1
- package/docs/api/interfaces/RBACRoleGrantParams.md +1 -1
- package/docs/api/interfaces/RBACRoleGrantResult.md +1 -1
- package/docs/api/interfaces/RBACRoleRevokeParams.md +1 -1
- package/docs/api/interfaces/RBACRoleRevokeResult.md +1 -1
- package/docs/api/interfaces/RBACRoleValidateParams.md +1 -1
- package/docs/api/interfaces/RBACRoleValidateResult.md +1 -1
- package/docs/api/interfaces/RBACRolesListParams.md +1 -1
- package/docs/api/interfaces/RBACRolesListResult.md +1 -1
- package/docs/api/interfaces/RBACSessionTrackParams.md +1 -1
- package/docs/api/interfaces/RBACSessionTrackResult.md +1 -1
- package/docs/api/interfaces/ResourcePermissions.md +1 -1
- package/docs/api/interfaces/RevokeEventAppRoleParams.md +1 -1
- package/docs/api/interfaces/RoleBasedRouterContextType.md +1 -1
- package/docs/api/interfaces/RoleBasedRouterProps.md +1 -1
- package/docs/api/interfaces/RoleManagementResult.md +1 -1
- package/docs/api/interfaces/RouteAccessRecord.md +1 -1
- package/docs/api/interfaces/RouteConfig.md +1 -1
- package/docs/api/interfaces/RuntimeComplianceResult.md +1 -1
- package/docs/api/interfaces/SecureDataContextType.md +9 -9
- package/docs/api/interfaces/SecureDataProviderProps.md +8 -8
- package/docs/api/interfaces/SessionRestorationLoaderProps.md +3 -3
- package/docs/api/interfaces/SetupIssue.md +1 -1
- package/docs/api/interfaces/StorageConfig.md +1 -1
- package/docs/api/interfaces/StorageFileInfo.md +1 -1
- package/docs/api/interfaces/StorageFileMetadata.md +1 -1
- package/docs/api/interfaces/StorageListOptions.md +1 -1
- package/docs/api/interfaces/StorageListResult.md +1 -1
- package/docs/api/interfaces/StorageUploadOptions.md +1 -1
- package/docs/api/interfaces/StorageUploadResult.md +1 -1
- package/docs/api/interfaces/StorageUrlOptions.md +1 -1
- package/docs/api/interfaces/StyleImport.md +1 -1
- package/docs/api/interfaces/SwitchProps.md +1 -1
- package/docs/api/interfaces/TabsContentProps.md +1 -1
- package/docs/api/interfaces/TabsListProps.md +1 -1
- package/docs/api/interfaces/TabsProps.md +1 -1
- package/docs/api/interfaces/TabsTriggerProps.md +3 -3
- package/docs/api/interfaces/TextareaProps.md +1 -1
- package/docs/api/interfaces/ToastActionElement.md +4 -1
- package/docs/api/interfaces/ToastProps.md +1 -1
- package/docs/api/interfaces/UnifiedAuthContextType.md +58 -55
- package/docs/api/interfaces/UnifiedAuthProviderProps.md +15 -13
- package/docs/api/interfaces/UseFormDialogOptions.md +1 -1
- package/docs/api/interfaces/UseFormDialogReturn.md +1 -1
- package/docs/api/interfaces/UseInactivityTrackerOptions.md +11 -9
- package/docs/api/interfaces/UseInactivityTrackerReturn.md +8 -8
- package/docs/api/interfaces/UsePublicEventLogoOptions.md +6 -6
- package/docs/api/interfaces/UsePublicEventLogoReturn.md +9 -6
- package/docs/api/interfaces/UsePublicEventOptions.md +3 -3
- package/docs/api/interfaces/UsePublicEventReturn.md +8 -5
- package/docs/api/interfaces/UsePublicFileDisplayOptions.md +4 -4
- package/docs/api/interfaces/UsePublicFileDisplayReturn.md +12 -9
- package/docs/api/interfaces/UsePublicRouteParamsReturn.md +10 -7
- package/docs/api/interfaces/UseResolvedScopeOptions.md +1 -1
- package/docs/api/interfaces/UseResolvedScopeReturn.md +1 -1
- package/docs/api/interfaces/UseResourcePermissionsOptions.md +1 -1
- package/docs/api/interfaces/UserEventAccess.md +14 -11
- package/docs/api/interfaces/UserMenuProps.md +8 -6
- package/docs/api/interfaces/UserProfile.md +1 -1
- package/docs/api/modules.md +575 -634
- package/docs/architecture/database-schema-requirements.md +161 -0
- package/docs/core-concepts/rbac-system.md +3 -3
- package/docs/documentation-index.md +2 -4
- package/docs/getting-started/cursor-rules.md +263 -0
- package/docs/getting-started/installation-guide.md +6 -1
- package/docs/getting-started/quick-start.md +6 -1
- package/docs/migration/DOCUMENTATION_STRUCTURE.md +441 -0
- package/docs/migration/MIGRATION_GUIDE.md +6 -28
- package/docs/migration/README.md +52 -6
- package/docs/migration/V0.5.190_TO_V0.6.1_MIGRATION.md +1153 -0
- package/docs/migration/V0.6.0_REACT_19_MIGRATION.md +227 -0
- package/docs/migration/database-changes-december-2025.md +3 -3
- package/docs/rbac/event-based-apps.md +1 -1
- package/docs/rbac/getting-started.md +1 -1
- package/docs/rbac/quick-start.md +1 -1
- package/docs/standards/README.md +40 -0
- package/docs/troubleshooting/migration.md +4 -4
- package/examples/PublicPages/PublicEventPage.tsx +1 -1
- package/package.json +12 -6
- package/scripts/audit/core/checks/accessibility.cjs +197 -0
- package/scripts/audit/core/checks/api-usage.cjs +191 -0
- package/scripts/audit/core/checks/bundle.cjs +142 -0
- package/scripts/{check-pace-core-compliance.cjs → audit/core/checks/compliance.cjs} +737 -691
- package/scripts/audit/core/checks/config.cjs +54 -0
- package/scripts/audit/core/checks/coverage.cjs +84 -0
- package/scripts/audit/core/checks/dependencies.cjs +454 -0
- package/scripts/audit/core/checks/documentation.cjs +203 -0
- package/scripts/audit/core/checks/environment.cjs +128 -0
- package/scripts/audit/core/checks/error-handling.cjs +299 -0
- package/scripts/audit/core/checks/forms.cjs +172 -0
- package/scripts/audit/core/checks/heuristics.cjs +68 -0
- package/scripts/audit/core/checks/hooks.cjs +334 -0
- package/scripts/audit/core/checks/imports.cjs +244 -0
- package/scripts/audit/core/checks/performance.cjs +325 -0
- package/scripts/audit/core/checks/routes.cjs +117 -0
- package/scripts/audit/core/checks/state.cjs +130 -0
- package/scripts/audit/core/checks/structure.cjs +65 -0
- package/scripts/audit/core/checks/style.cjs +584 -0
- package/scripts/audit/core/checks/testing.cjs +122 -0
- package/scripts/audit/core/checks/typescript.cjs +61 -0
- package/scripts/audit/core/scanner.cjs +199 -0
- package/scripts/audit/core/utils.cjs +137 -0
- package/scripts/audit/index.cjs +223 -0
- package/scripts/audit/reporters/console.cjs +151 -0
- package/scripts/audit/reporters/json.cjs +54 -0
- package/scripts/audit/reporters/markdown.cjs +124 -0
- package/scripts/audit-consuming-app.cjs +86 -0
- package/scripts/build-docs/build-decision.js +240 -0
- package/scripts/build-docs/cache-utils.js +105 -0
- package/scripts/build-docs/content-normalization.js +150 -0
- package/scripts/build-docs/file-utils.js +105 -0
- package/scripts/build-docs/git-utils.js +86 -0
- package/scripts/build-docs/hash-utils.js +116 -0
- package/scripts/build-docs/typedoc-runner.js +220 -0
- package/scripts/build-docs-incremental.js +77 -913
- package/scripts/install-cursor-rules.cjs +236 -0
- package/scripts/utils/command-runner.js +16 -11
- package/scripts/validate-formats.js +61 -56
- package/scripts/validate-master.js +74 -69
- package/scripts/validate-pre-publish.js +70 -65
- package/src/__tests__/helpers/test-providers.tsx +1 -1
- package/src/__tests__/helpers/test-utils.tsx +1 -1
- package/src/__tests__/hooks/usePermissions.test.ts +2 -2
- package/src/components/Alert/Alert.test.tsx +12 -18
- package/src/components/Alert/Alert.tsx +5 -7
- package/src/components/Avatar/Avatar.test.tsx +4 -4
- package/src/components/Badge/Badge.tsx +16 -4
- package/src/components/Button/Button.tsx +27 -4
- package/src/components/Calendar/Calendar.tsx +9 -3
- package/src/components/Card/Card.tsx +4 -0
- package/src/components/Checkbox/Checkbox.test.tsx +12 -12
- package/src/components/Checkbox/Checkbox.tsx +2 -2
- package/src/components/DataTable/DataTable.test.tsx +57 -93
- package/src/components/DataTable/DataTable.tsx +40 -6
- package/src/components/DataTable/__tests__/DataTableCore.test-setup.ts +5 -6
- package/src/components/DataTable/__tests__/pagination.modes.test.tsx +29 -7
- package/src/components/DataTable/__tests__/ssr.strict-mode.test.tsx +12 -12
- package/src/components/DataTable/__tests__/test-utils/sharedTestUtils.tsx +2 -3
- package/src/components/DataTable/components/AccessDeniedPage.tsx +17 -26
- package/src/components/DataTable/components/ActionButtons.tsx +10 -7
- package/src/components/DataTable/components/BulkOperationsDropdown.tsx +2 -2
- package/src/components/DataTable/components/ColumnFilter.tsx +10 -0
- package/src/components/DataTable/components/ColumnVisibilityDropdown.tsx +12 -0
- package/src/components/DataTable/components/DataTableBody.tsx +8 -0
- package/src/components/DataTable/components/DataTableCore.tsx +200 -561
- package/src/components/DataTable/components/DataTableErrorBoundary.tsx +11 -0
- package/src/components/DataTable/components/DataTableLayout.tsx +559 -0
- package/src/components/DataTable/components/DataTableModals.tsx +9 -1
- package/src/components/DataTable/components/DataTableToolbar.tsx +8 -0
- package/src/components/DataTable/components/DraggableColumnHeader.tsx +12 -0
- package/src/components/DataTable/components/EditFields.tsx +307 -0
- package/src/components/DataTable/components/EditableRow.tsx +9 -1
- package/src/components/DataTable/components/EmptyState.tsx +10 -0
- package/src/components/DataTable/components/FilterRow.tsx +12 -0
- package/src/components/DataTable/components/GroupHeader.tsx +12 -0
- package/src/components/DataTable/components/GroupingDropdown.tsx +12 -0
- package/src/components/DataTable/components/ImportModal.tsx +7 -0
- package/src/components/DataTable/components/LoadingState.tsx +6 -0
- package/src/components/DataTable/components/PaginationControls.tsx +16 -1
- package/src/components/DataTable/components/RowComponent.tsx +391 -0
- package/src/components/DataTable/components/UnifiedTableBody.tsx +62 -852
- package/src/components/DataTable/components/VirtualizedDataTable.tsx +16 -4
- package/src/components/DataTable/components/__tests__/AccessDeniedPage.test.tsx +4 -2
- package/src/components/DataTable/components/__tests__/DataTableModals.test.tsx +23 -23
- package/src/components/DataTable/components/__tests__/EditableRow.test.tsx +11 -11
- package/src/components/DataTable/components/__tests__/ExpandButton.test.tsx +36 -36
- package/src/components/DataTable/components/__tests__/GroupHeader.test.tsx +27 -27
- package/src/components/DataTable/components/__tests__/ImportModal.test.tsx +39 -39
- package/src/components/DataTable/components/__tests__/UnifiedTableBody.test.tsx +33 -33
- package/src/components/DataTable/components/__tests__/ViewRowModal.test.tsx +29 -29
- package/src/components/DataTable/components/cellValueUtils.ts +40 -0
- package/src/components/DataTable/components/hooks/useImportModalFocus.ts +53 -0
- package/src/components/DataTable/components/hooks/usePermissionTracking.ts +126 -0
- package/src/components/DataTable/context/DataTableContext.tsx +50 -0
- package/src/components/DataTable/core/ColumnFactory.ts +31 -0
- package/src/components/DataTable/core/DataTableContext.tsx +32 -1
- package/src/components/DataTable/hooks/useColumnOrderPersistence.ts +10 -0
- package/src/components/DataTable/hooks/useColumnReordering.ts +14 -2
- package/src/components/DataTable/hooks/useColumnVisibilityPersistence.ts +10 -0
- package/src/components/DataTable/hooks/useDataTableDataPipeline.ts +16 -0
- package/src/components/DataTable/hooks/useDataTablePermissions.ts +124 -32
- package/src/components/DataTable/hooks/useDataTableState.ts +35 -1
- package/src/components/DataTable/hooks/useEffectiveColumnOrder.ts +12 -0
- package/src/components/DataTable/hooks/useKeyboardNavigation.ts +2 -2
- package/src/components/DataTable/hooks/useServerSideDataEffect.ts +11 -0
- package/src/components/DataTable/hooks/useTableColumns.ts +8 -0
- package/src/components/DataTable/hooks/useTableHandlers.ts +14 -0
- package/src/components/DataTable/styles.ts +6 -6
- package/src/components/DataTable/types.ts +6 -10
- package/src/components/DataTable/utils/a11yUtils.ts +7 -0
- package/src/components/DataTable/utils/debugTools.ts +18 -113
- package/src/components/DataTable/utils/errorHandling.ts +12 -0
- package/src/components/DataTable/utils/exportUtils.ts +9 -0
- package/src/components/DataTable/utils/flexibleImport.ts +12 -48
- package/src/components/DataTable/utils/paginationUtils.ts +8 -0
- package/src/components/DataTable/utils/performanceUtils.ts +5 -1
- package/src/components/DatePickerWithTimezone/DatePickerWithTimezone.test.tsx +8 -14
- package/src/components/Dialog/Dialog.tsx +8 -7
- package/src/components/ErrorBoundary/ErrorBoundary.test.tsx +180 -1
- package/src/components/ErrorBoundary/ErrorBoundary.tsx +46 -6
- package/src/components/ErrorBoundary/ErrorBoundaryContext.tsx +129 -0
- package/src/components/ErrorBoundary/index.ts +27 -2
- package/src/components/EventSelector/EventSelector.tsx +4 -1
- package/src/components/FileDisplay/FileDisplay.test.tsx +2 -2
- package/src/components/FileDisplay/FileDisplay.tsx +32 -18
- package/src/components/FileUpload/FileUpload.tsx +22 -2
- package/src/components/Footer/Footer.test.tsx +16 -16
- package/src/components/Footer/Footer.tsx +15 -12
- package/src/components/Form/Form.test.tsx +36 -15
- package/src/components/Form/Form.tsx +31 -26
- package/src/components/Header/Header.tsx +22 -11
- package/src/components/InactivityWarningModal/InactivityWarningModal.test.tsx +40 -40
- package/src/components/InactivityWarningModal/InactivityWarningModal.tsx +1 -1
- package/src/components/Input/Input.test.tsx +2 -2
- package/src/components/Input/Input.tsx +36 -34
- package/src/components/Label/Label.tsx +1 -1
- package/src/components/LoadingSpinner/LoadingSpinner.test.tsx +4 -4
- package/src/components/LoadingSpinner/LoadingSpinner.tsx +1 -1
- package/src/components/LoginForm/LoginForm.test.tsx +42 -42
- package/src/components/LoginForm/LoginForm.tsx +12 -8
- package/src/components/NavigationMenu/NavigationMenu.tsx +15 -514
- package/src/components/NavigationMenu/types.ts +56 -0
- package/src/components/NavigationMenu/useNavigationFiltering.ts +390 -0
- package/src/components/OrganisationSelector/OrganisationSelector.tsx +3 -0
- package/src/components/PaceAppLayout/PaceAppLayout.performance.test.tsx +1 -1
- package/src/components/PaceAppLayout/PaceAppLayout.test.tsx +54 -52
- package/src/components/PaceAppLayout/PaceAppLayout.tsx +33 -12
- package/src/components/PaceAppLayout/README.md +1 -1
- package/src/components/PaceAppLayout/test-setup.tsx +1 -2
- package/src/components/PaceLoginPage/PaceLoginPage.tsx +4 -1
- package/src/components/PasswordChange/PasswordChangeForm.test.tsx +33 -33
- package/src/components/PasswordChange/PasswordChangeForm.tsx +10 -1
- package/src/components/Progress/Progress.tsx +1 -1
- package/src/components/ProtectedRoute/ProtectedRoute.tsx +3 -9
- package/src/components/PublicLayout/PublicPageLayout.tsx +3 -6
- package/src/components/PublicLayout/PublicPageProvider.tsx +4 -0
- package/src/components/Select/Select.tsx +95 -438
- package/src/components/Select/context.ts +23 -0
- package/src/components/Select/hooks/useSelectEvents.ts +87 -0
- package/src/components/Select/hooks/useSelectSearch.ts +91 -0
- package/src/components/Select/hooks/useSelectState.ts +104 -0
- package/src/components/Select/index.ts +9 -1
- package/src/components/Select/types.ts +123 -0
- package/src/components/Select/utils/text.ts +26 -0
- package/src/components/SessionRestorationLoader/SessionRestorationLoader.tsx +5 -6
- package/src/components/Switch/Switch.tsx +4 -4
- package/src/components/Table/Table.tsx +1 -1
- package/src/components/Tabs/Tabs.tsx +1 -1
- package/src/components/Textarea/Textarea.tsx +27 -29
- package/src/components/Toast/Toast.tsx +5 -1
- package/src/components/Tooltip/Tooltip.tsx +3 -3
- package/src/components/UserMenu/UserMenu.test.tsx +24 -11
- package/src/components/UserMenu/UserMenu.tsx +22 -19
- package/src/components/index.ts +2 -2
- package/src/hooks/__tests__/hooks.integration.test.tsx +80 -55
- package/src/hooks/__tests__/index.unit.test.ts +2 -5
- package/src/hooks/__tests__/useStorage.unit.test.ts +36 -36
- package/src/hooks/index.ts +1 -2
- package/src/hooks/public/usePublicEvent.ts +5 -1
- package/src/hooks/public/usePublicEventLogo.ts +5 -1
- package/src/hooks/public/usePublicFileDisplay.ts +4 -0
- package/src/hooks/public/usePublicRouteParams.ts +5 -1
- package/src/hooks/services/useAuth.ts +32 -0
- package/src/hooks/services/useCurrentEvent.ts +6 -0
- package/src/hooks/services/useCurrentOrganisation.ts +6 -0
- package/src/hooks/useDataTableState.ts +8 -18
- package/src/hooks/useDebounce.ts +9 -0
- package/src/hooks/useEventTheme.ts +6 -0
- package/src/hooks/useFileDisplay.ts +4 -0
- package/src/hooks/useFileReference.ts +25 -7
- package/src/hooks/useFileUrl.ts +11 -1
- package/src/hooks/useFocusManagement.ts +16 -2
- package/src/hooks/useFocusTrap.ts +7 -4
- package/src/hooks/useFormDialog.ts +8 -7
- package/src/hooks/useInactivityTracker.ts +4 -1
- package/src/hooks/useKeyboardShortcuts.ts +4 -0
- package/src/hooks/useOrganisationPermissions.ts +4 -0
- package/src/hooks/useOrganisationSecurity.ts +4 -0
- package/src/hooks/usePerformanceMonitor.ts +4 -0
- package/src/hooks/usePermissionCache.ts +8 -1
- package/src/hooks/useQueryCache.ts +12 -1
- package/src/hooks/useSessionRestoration.ts +4 -0
- package/src/hooks/useStorage.ts +4 -0
- package/src/hooks/useToast.ts +3 -3
- package/src/index.ts +2 -1
- package/src/providers/__tests__/OrganisationProvider.test.tsx +115 -49
- package/src/providers/__tests__/ProviderLifecycle.test.tsx +21 -6
- package/src/providers/__tests__/UnifiedAuthProvider.test.tsx +10 -10
- package/src/providers/services/AuthServiceProvider.tsx +18 -0
- package/src/providers/services/EventServiceProvider.tsx +18 -0
- package/src/providers/services/InactivityServiceProvider.tsx +18 -0
- package/src/providers/services/OrganisationServiceProvider.tsx +18 -0
- package/src/providers/services/UnifiedAuthProvider.tsx +58 -22
- package/src/providers/services/__tests__/AuthServiceProvider.integration.test.tsx +33 -7
- package/src/rbac/README.md +1 -1
- package/src/rbac/__tests__/adapters.comprehensive.test.tsx +26 -26
- package/src/rbac/__tests__/scenarios.user-role.test.tsx +4 -5
- package/src/rbac/adapters.tsx +14 -5
- package/src/rbac/api.ts +100 -67
- package/src/rbac/components/EnhancedNavigationMenu.tsx +1 -1
- package/src/rbac/components/NavigationGuard.tsx +1 -1
- package/src/rbac/components/NavigationProvider.tsx +5 -2
- package/src/rbac/components/PagePermissionGuard.tsx +158 -18
- package/src/rbac/components/PagePermissionProvider.tsx +1 -1
- package/src/rbac/components/PermissionEnforcer.tsx +1 -1
- package/src/rbac/components/RoleBasedRouter.tsx +6 -2
- package/src/rbac/components/SecureDataProvider.test.tsx +84 -49
- package/src/rbac/components/SecureDataProvider.tsx +21 -6
- package/src/rbac/components/__tests__/PagePermissionGuard.race-condition.test.tsx +24 -14
- package/src/rbac/components/__tests__/PagePermissionGuard.test.tsx +7 -0
- package/src/rbac/components/__tests__/PagePermissionGuard.verification.test.tsx +14 -6
- package/src/rbac/components/__tests__/RoleBasedRouter.test.tsx +15 -4
- package/src/rbac/components/__tests__/SecureDataProvider.fixed.test.tsx +148 -24
- package/src/rbac/components/__tests__/SecureDataProvider.test.tsx +81 -15
- package/src/rbac/engine.ts +38 -14
- package/src/rbac/hooks/permissions/index.ts +7 -0
- package/src/rbac/hooks/permissions/useAccessLevel.ts +105 -0
- package/src/rbac/hooks/permissions/useCachedPermissions.ts +79 -0
- package/src/rbac/hooks/permissions/useCan.ts +347 -0
- package/src/rbac/hooks/permissions/useHasAllPermissions.ts +90 -0
- package/src/rbac/hooks/permissions/useHasAnyPermission.ts +90 -0
- package/src/rbac/hooks/permissions/useMultiplePermissions.ts +93 -0
- package/src/rbac/hooks/permissions/usePermissions.ts +253 -0
- package/src/rbac/hooks/useCan.test.ts +71 -64
- package/src/rbac/hooks/usePermissions.ts +14 -995
- package/src/rbac/hooks/useResourcePermissions.test.ts +54 -18
- package/src/rbac/hooks/useResourcePermissions.ts +14 -4
- package/src/rbac/hooks/useSecureSupabase.ts +33 -13
- package/src/rbac/permissions.ts +0 -30
- package/src/rbac/secureClient.ts +212 -61
- package/src/rbac/types.ts +8 -0
- package/src/theming/__tests__/parseEventColours.test.ts +6 -9
- package/src/theming/parseEventColours.ts +5 -19
- package/src/types/vitest-globals.d.ts +51 -26
- package/src/utils/__mocks__/supabaseMock.ts +1 -3
- package/src/utils/__tests__/formatting.unit.test.ts +4 -4
- package/src/utils/__tests__/index.unit.test.ts +2 -2
- package/src/utils/audit/audit.ts +0 -3
- package/src/utils/core/cn.ts +1 -1
- package/src/utils/file-reference/index.ts +53 -1
- package/src/utils/formatting/formatting.ts +8 -18
- package/src/utils/index.ts +0 -1
- package/src/utils/security/secureDataAccess.test.ts +31 -20
- package/src/utils/security/secureDataAccess.ts +4 -3
- package/dist/chunk-6C4YBBJM.js +0 -628
- package/dist/chunk-6C4YBBJM.js.map +0 -1
- package/dist/chunk-7D4SUZUM.js 2.map +0 -1
- package/dist/chunk-7EQTDTTJ.js 2.map +0 -1
- package/dist/chunk-7EQTDTTJ.js.map +0 -1
- package/dist/chunk-7FLMSG37.js 2.map +0 -1
- package/dist/chunk-7FLMSG37.js.map +0 -1
- package/dist/chunk-BC4IJKSL.js.map +0 -1
- package/dist/chunk-E3SPN4VZ.js +0 -12917
- package/dist/chunk-E3SPN4VZ.js.map +0 -1
- package/dist/chunk-E66EQZE6 5.js +0 -37
- package/dist/chunk-E66EQZE6.js 2.map +0 -1
- package/dist/chunk-HWIIPPNI.js.map +0 -1
- package/dist/chunk-I7PSE6JW 5.js +0 -191
- package/dist/chunk-I7PSE6JW.js 2.map +0 -1
- package/dist/chunk-I7PSE6JW.js.map +0 -1
- package/dist/chunk-IIELH4DL.js.map +0 -1
- package/dist/chunk-KNC55RTG.js 5.map +0 -1
- package/dist/chunk-KNC55RTG.js.map +0 -1
- package/dist/chunk-KQCRWDSA.js 5.map +0 -1
- package/dist/chunk-LFNCN2SP.js +0 -412
- package/dist/chunk-LFNCN2SP.js 2.map +0 -1
- package/dist/chunk-LFNCN2SP.js.map +0 -1
- package/dist/chunk-LMC26NLJ 2.js +0 -84
- package/dist/chunk-NOAYCWCX.js +0 -4993
- package/dist/chunk-NOAYCWCX.js.map +0 -1
- package/dist/chunk-QWWZ5CAQ.js 3.map +0 -1
- package/dist/chunk-QWWZ5CAQ.js.map +0 -1
- package/dist/chunk-QXHPKYJV 3.js +0 -113
- package/dist/chunk-R77UEZ4E.js +0 -68
- package/dist/chunk-R77UEZ4E.js.map +0 -1
- package/dist/chunk-SQGMNID3.js.map +0 -1
- package/dist/chunk-VBXEHIUJ.js 6.map +0 -1
- package/dist/chunk-XNXXZ43G.js.map +0 -1
- package/dist/chunk-ZSAAAMVR 6.js +0 -25
- package/dist/components.js 5.map +0 -1
- package/dist/styles/index 2.js +0 -12
- package/dist/styles/index.js 5.map +0 -1
- package/dist/theming/runtime 5.js +0 -19
- package/dist/theming/runtime.js 5.map +0 -1
- package/docs/api/classes/ErrorBoundary.md +0 -144
- package/docs/migration/quick-migration-guide.md +0 -356
- package/docs/migration/service-architecture.md +0 -281
- package/src/hooks/__tests__/useSecureDataAccess.unit.test.tsx +0 -680
- package/src/hooks/useSecureDataAccess.test.ts +0 -559
- package/src/hooks/useSecureDataAccess.ts +0 -666
- /package/dist/{DataTable-5FU7IESH.js.map → DataTable-TPTKCX4D.js.map} +0 -0
- /package/dist/{UnifiedAuthProvider-RGJTDE2C.js.map → UnifiedAuthProvider-CH6Z342H.js.map} +0 -0
- /package/dist/{api-N774RPUA.js.map → api-MVVQZLJI.js.map} +0 -0
- /package/docs/migration/{organisation-context-timing-fix.md → V0.3.44_organisation-context-timing-fix.md} +0 -0
- /package/docs/migration/{rbac-migration.md → V0.4.0_rbac-migration.md} +0 -0
- /package/docs/migration/{person-scoped-profiles-migration-guide.md → V0.5.190_person-scoped-profiles-migration-guide.md} +0 -0
- /package/examples/{rbac → RBAC}/CompleteRBACExample.tsx +0 -0
- /package/examples/{rbac → RBAC}/EventBasedApp.tsx +0 -0
- /package/examples/{rbac → RBAC}/PermissionExample.tsx +0 -0
- /package/examples/{rbac → RBAC}/index.ts +0 -0
package/dist/hooks.d.ts
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
export { u as useToast } from './useToast-
|
|
2
|
-
import {
|
|
3
|
-
export { O as OrganisationSecurityHook,
|
|
1
|
+
export { u as useToast } from './useToast-AyaT-x7p.js';
|
|
2
|
+
import { S as StorageUploadOptions, a as StorageUploadResult, b as StorageListOptions, c as StorageListResult, d as StorageFileInfo } from './usePublicRouteParams-1oMokgLF.js';
|
|
3
|
+
export { O as OrganisationSecurityHook, l as UseAppConfigReturn, i as UseFormDialogOptions, j as UseFormDialogReturn, U as UseOrganisationPermissionsReturn, F as UsePublicEventLogoOptions, E as UsePublicEventLogoReturn, B as UsePublicEventOptions, A as UsePublicEventReturn, D as UsePublicFileDisplayOptions, C as UsePublicFileDisplayReturn, G as UsePublicRouteParamsReturn, n as clearPublicEventCache, q as clearPublicFileDisplayCache, t as clearPublicLogoCache, z as extractEventCodeFromPath, y as generatePublicRoutePath, o as getPublicEventCacheStats, r as getPublicFileDisplayCacheStats, v as getPublicLogoCacheStats, k as useAppConfig, u as useEventTheme, h as useFormDialog, e as useOrganisationPermissions, f as useOrganisationSecurity, m as usePublicEvent, x as usePublicEventCode, s as usePublicEventLogo, p as usePublicFileDisplay, w as usePublicRouteParams, g as useZodForm } from './usePublicRouteParams-1oMokgLF.js';
|
|
4
4
|
import * as React$1 from 'react';
|
|
5
5
|
import { SortingState, ColumnFiltersState, ExpandedState } from '@tanstack/react-table';
|
|
6
|
-
import { d as DataRecord, g as PerformanceConfig, S as ServerSideConfig, C as ChunkingConfig, i as SearchIndexConfig, h as PaginationMode, k as ServerSideParams, l as ServerSideResponse, A as AutocompleteOptions, m as GooglePlaceAutocompletePrediction, P as ParsedAddress } from './types-
|
|
6
|
+
import { d as DataRecord, g as PerformanceConfig, S as ServerSideConfig, C as ChunkingConfig, i as SearchIndexConfig, h as PaginationMode, k as ServerSideParams, l as ServerSideResponse, A as AutocompleteOptions, m as GooglePlaceAutocompletePrediction, P as ParsedAddress } from './types-CkbwOr4Y.js';
|
|
7
7
|
export { u as useComponentPerformance } from './useComponentPerformance-DE9l5RkL.js';
|
|
8
8
|
import { SupabaseClient } from '@supabase/supabase-js';
|
|
9
9
|
import { D as Database } from './database.generated-CzIvgcPu.js';
|
|
@@ -31,6 +31,10 @@ declare enum DataTableErrorType {
|
|
|
31
31
|
SERVER_FETCH = "server_fetch",
|
|
32
32
|
MEMORY = "memory"
|
|
33
33
|
}
|
|
34
|
+
/**
|
|
35
|
+
* Custom error class for DataTable operations.
|
|
36
|
+
* Provides error type and recoverability information.
|
|
37
|
+
*/
|
|
34
38
|
declare class DataTableError extends Error {
|
|
35
39
|
type: DataTableErrorType;
|
|
36
40
|
recoverable: boolean;
|
|
@@ -82,6 +86,9 @@ interface UseDataTablePerformanceReturn<TData extends DataRecord> {
|
|
|
82
86
|
*/
|
|
83
87
|
declare function useDataTablePerformance<TData extends DataRecord>({ data, performance, serverSide, chunking, searchIndex, fallbackConfig, onError, enableErrorRecovery }: UseDataTablePerformanceOptions<TData>): UseDataTablePerformanceReturn<TData>;
|
|
84
88
|
|
|
89
|
+
/**
|
|
90
|
+
* Options for the useFocusManagement hook.
|
|
91
|
+
*/
|
|
85
92
|
interface FocusManagementOptions {
|
|
86
93
|
trapFocus?: boolean;
|
|
87
94
|
autoFocus?: boolean;
|
|
@@ -90,9 +97,13 @@ interface FocusManagementOptions {
|
|
|
90
97
|
onFocusFirst?: () => void;
|
|
91
98
|
onFocusLast?: () => void;
|
|
92
99
|
}
|
|
100
|
+
/**
|
|
101
|
+
* Return value of the useFocusManagement hook.
|
|
102
|
+
* Provides focus management utilities for accessible components.
|
|
103
|
+
*/
|
|
93
104
|
interface FocusManagementReturn {
|
|
94
|
-
containerRef: React.RefObject<HTMLDivElement>;
|
|
95
|
-
focusRef: React.RefObject<HTMLElement>;
|
|
105
|
+
containerRef: React.RefObject<HTMLDivElement | null>;
|
|
106
|
+
focusRef: React.RefObject<HTMLElement | null>;
|
|
96
107
|
setFocus: (element: HTMLElement | null) => void;
|
|
97
108
|
focusFirst: () => void;
|
|
98
109
|
focusLast: () => void;
|
|
@@ -101,8 +112,18 @@ interface FocusManagementReturn {
|
|
|
101
112
|
getFocusableElements: () => HTMLElement[];
|
|
102
113
|
handleEscape: (callback: () => void) => () => void;
|
|
103
114
|
}
|
|
115
|
+
/**
|
|
116
|
+
* Hook for managing focus in accessible components.
|
|
117
|
+
* Provides focus trapping, restoration, and navigation utilities.
|
|
118
|
+
*
|
|
119
|
+
* @param options - Focus management configuration
|
|
120
|
+
* @returns Focus management utilities and refs
|
|
121
|
+
*/
|
|
104
122
|
declare function useFocusManagement(options?: FocusManagementOptions): FocusManagementReturn;
|
|
105
123
|
|
|
124
|
+
/**
|
|
125
|
+
* Options for the useFocusTrap hook.
|
|
126
|
+
*/
|
|
106
127
|
interface FocusTrapOptions {
|
|
107
128
|
/** Whether the focus trap is active */
|
|
108
129
|
isActive?: boolean;
|
|
@@ -117,7 +138,7 @@ interface FocusTrapOptions {
|
|
|
117
138
|
}
|
|
118
139
|
interface FocusTrapReturn {
|
|
119
140
|
/** Ref to attach to the container element */
|
|
120
|
-
containerRef: React.RefObject<HTMLElement>;
|
|
141
|
+
containerRef: React.RefObject<HTMLElement | null>;
|
|
121
142
|
/** Focus the first focusable element */
|
|
122
143
|
focusFirst: () => void;
|
|
123
144
|
/** Focus the last focusable element */
|
|
@@ -131,6 +152,10 @@ interface FocusTrapReturn {
|
|
|
131
152
|
*/
|
|
132
153
|
declare function useFocusTrap(options?: FocusTrapOptions): FocusTrapReturn;
|
|
133
154
|
|
|
155
|
+
/**
|
|
156
|
+
* Keyboard shortcut definition.
|
|
157
|
+
* Defines a key combination and its handler function.
|
|
158
|
+
*/
|
|
134
159
|
interface KeyboardShortcut {
|
|
135
160
|
/** Key combination (e.g., 'Escape', 'Enter', 'ArrowDown', 'ctrl+s') */
|
|
136
161
|
key: string;
|
|
@@ -190,6 +215,15 @@ declare function useKeyboardShortcuts(shortcuts: KeyboardShortcut[], options?: K
|
|
|
190
215
|
*/
|
|
191
216
|
declare function useIsMobile(): boolean;
|
|
192
217
|
|
|
218
|
+
/**
|
|
219
|
+
* Hook for debouncing a value.
|
|
220
|
+
* Returns a debounced version of the value that only updates after the specified delay.
|
|
221
|
+
*
|
|
222
|
+
* @template T - The type of the value to debounce
|
|
223
|
+
* @param value - The value to debounce
|
|
224
|
+
* @param delay - The delay in milliseconds
|
|
225
|
+
* @returns The debounced value
|
|
226
|
+
*/
|
|
193
227
|
declare function useDebounce<T>(value: T, delay: number): T;
|
|
194
228
|
|
|
195
229
|
interface UseDataTableStateOptions {
|
|
@@ -286,113 +320,9 @@ interface UseAddressAutocompleteReturn {
|
|
|
286
320
|
declare function useAddressAutocomplete(apiKey: string, inputValue: string, options?: UseAddressAutocompleteOptions): UseAddressAutocompleteReturn;
|
|
287
321
|
|
|
288
322
|
/**
|
|
289
|
-
*
|
|
290
|
-
*
|
|
291
|
-
* @module Hooks/useSecureDataAccess
|
|
292
|
-
* @since 0.4.0
|
|
293
|
-
*
|
|
294
|
-
* Hook for secure database operations with mandatory organisation context.
|
|
295
|
-
* Ensures all data access is properly scoped to the user's current organisation.
|
|
296
|
-
*
|
|
297
|
-
* @example
|
|
298
|
-
* ```tsx
|
|
299
|
-
* function DataComponent() {
|
|
300
|
-
* const { secureQuery, secureInsert, secureUpdate, secureDelete } = useSecureDataAccess();
|
|
301
|
-
*
|
|
302
|
-
* const loadData = async () => {
|
|
303
|
-
* try {
|
|
304
|
-
* // Automatically includes organisation_id filter
|
|
305
|
-
* const events = await secureQuery('core_events', '*', { is_visible: true });
|
|
306
|
-
* console.log('Organisation events:', events);
|
|
307
|
-
* } catch (error) {
|
|
308
|
-
* console.error('Failed to load data:', error);
|
|
309
|
-
* }
|
|
310
|
-
* };
|
|
311
|
-
*
|
|
312
|
-
* const createEvent = async (eventData) => {
|
|
313
|
-
* try {
|
|
314
|
-
* // Automatically sets organisation_id
|
|
315
|
-
* const newEvent = await secureInsert('core_events', eventData);
|
|
316
|
-
* console.log('Created event:', newEvent);
|
|
317
|
-
* } catch (error) {
|
|
318
|
-
* console.error('Failed to create event:', error);
|
|
319
|
-
* }
|
|
320
|
-
* };
|
|
321
|
-
*
|
|
322
|
-
* return (
|
|
323
|
-
* <div>
|
|
324
|
-
* <button onClick={loadData}>Load Data</button>
|
|
325
|
-
* <button onClick={() => createEvent({ event_name: 'New Event' })}>
|
|
326
|
-
* Create Event
|
|
327
|
-
* </button>
|
|
328
|
-
* </div>
|
|
329
|
-
* );
|
|
330
|
-
* }
|
|
331
|
-
* ```
|
|
332
|
-
*
|
|
333
|
-
* @security
|
|
334
|
-
* - All queries automatically include organisation_id filter
|
|
335
|
-
* - Validates organisation context before any operation
|
|
336
|
-
* - Prevents data leaks between organisations
|
|
337
|
-
* - Error handling for security violations
|
|
338
|
-
* - Type-safe database operations
|
|
339
|
-
*/
|
|
340
|
-
interface SecureDataAccessReturn {
|
|
341
|
-
/** Execute a secure query with organisation filtering */
|
|
342
|
-
secureQuery: <T = any>(table: string, columns: string, filters?: Record<string, any>, options?: {
|
|
343
|
-
orderBy?: string;
|
|
344
|
-
ascending?: boolean;
|
|
345
|
-
limit?: number;
|
|
346
|
-
offset?: number;
|
|
347
|
-
}) => Promise<T[]>;
|
|
348
|
-
/** Execute a secure insert with organisation context */
|
|
349
|
-
secureInsert: <T = any>(table: string, data: Record<string, any>) => Promise<T>;
|
|
350
|
-
/** Execute a secure update with organisation filtering */
|
|
351
|
-
secureUpdate: <T = any>(table: string, data: Record<string, any>, filters: Record<string, any>) => Promise<T[]>;
|
|
352
|
-
/** Execute a secure delete with organisation filtering */
|
|
353
|
-
secureDelete: (table: string, filters: Record<string, any>) => Promise<void>;
|
|
354
|
-
/** Execute a secure RPC call with organisation context */
|
|
355
|
-
secureRpc: <T = any>(functionName: string, params?: Record<string, any>) => Promise<T>;
|
|
356
|
-
/** Get current organisation ID */
|
|
357
|
-
getCurrentOrganisationId: () => string;
|
|
358
|
-
/** Validate organisation context */
|
|
359
|
-
validateContext: () => void;
|
|
360
|
-
/** Check if data access is allowed for a table and operation */
|
|
361
|
-
isDataAccessAllowed: (table: string, operation: string) => boolean;
|
|
362
|
-
/** Get all data access permissions for current user */
|
|
363
|
-
getDataAccessPermissions: () => Record<string, string[]>;
|
|
364
|
-
/** Check if strict mode is enabled */
|
|
365
|
-
isStrictMode: boolean;
|
|
366
|
-
/** Check if audit logging is enabled */
|
|
367
|
-
isAuditLogEnabled: boolean;
|
|
368
|
-
/** Get data access history */
|
|
369
|
-
getDataAccessHistory: () => DataAccessRecord[];
|
|
370
|
-
/** Clear data access history */
|
|
371
|
-
clearDataAccessHistory: () => void;
|
|
372
|
-
/** Validate data access attempt */
|
|
373
|
-
validateDataAccess: (table: string, operation: string) => boolean;
|
|
374
|
-
}
|
|
375
|
-
interface DataAccessRecord {
|
|
376
|
-
table: string;
|
|
377
|
-
operation: string;
|
|
378
|
-
userId: string;
|
|
379
|
-
organisationId: string;
|
|
380
|
-
allowed: boolean;
|
|
381
|
-
timestamp: string;
|
|
382
|
-
query?: string;
|
|
383
|
-
filters?: Record<string, any>;
|
|
384
|
-
}
|
|
385
|
-
/**
|
|
386
|
-
* Hook for secure data access with automatic organisation filtering
|
|
387
|
-
*
|
|
388
|
-
* All database operations automatically include organisation context:
|
|
389
|
-
* - Queries filter by organisation_id
|
|
390
|
-
* - Inserts include organisation_id
|
|
391
|
-
* - Updates/deletes are scoped to organisation
|
|
392
|
-
* - RPC calls include organisation_id parameter
|
|
323
|
+
* Performance metrics interface.
|
|
324
|
+
* Represents performance measurement data for components or operations.
|
|
393
325
|
*/
|
|
394
|
-
declare function useSecureDataAccess(): SecureDataAccessReturn;
|
|
395
|
-
|
|
396
326
|
interface PerformanceMetrics {
|
|
397
327
|
renderTime: number;
|
|
398
328
|
componentName: string;
|
|
@@ -480,25 +410,20 @@ interface UseQueryCacheReturn {
|
|
|
480
410
|
* );
|
|
481
411
|
* ```
|
|
482
412
|
*/
|
|
413
|
+
/**
|
|
414
|
+
* Hook for in-memory query result caching.
|
|
415
|
+
* Provides caching for frequently accessed data to eliminate duplicate queries.
|
|
416
|
+
*
|
|
417
|
+
* @param supabase - Optional Supabase client instance
|
|
418
|
+
* @returns Query cache utilities including get, invalidate, and clear functions
|
|
419
|
+
*/
|
|
483
420
|
declare function useQueryCache(supabase?: SupabaseClient<Database>): UseQueryCacheReturn;
|
|
484
421
|
/**
|
|
485
422
|
* Pre-configured cache helpers for common queries
|
|
486
423
|
*/
|
|
487
424
|
declare const queryCacheHelpers: {
|
|
488
|
-
/**
|
|
489
|
-
* Cache core_person queries by user_id
|
|
490
|
-
* TTL: 5 minutes
|
|
491
|
-
*/
|
|
492
425
|
pacePersonByUserId: <T>(supabase: SupabaseClient<Database>, userId: string, fetchFn: () => Promise<T>) => Promise<T>;
|
|
493
|
-
/**
|
|
494
|
-
* Cache core_member queries by person_id
|
|
495
|
-
* TTL: 5 minutes
|
|
496
|
-
*/
|
|
497
426
|
paceMemberByPersonId: <T>(supabase: SupabaseClient<Database>, personId: string, fetchFn: () => Promise<T>) => Promise<T>;
|
|
498
|
-
/**
|
|
499
|
-
* Cache rbac_app_pages queries by app_id
|
|
500
|
-
* TTL: 15 minutes (app pages are relatively static)
|
|
501
|
-
*/
|
|
502
427
|
rbacAppPagesByAppId: <T>(supabase: SupabaseClient<Database>, appId: string, fetchFn: () => Promise<T>) => Promise<T>;
|
|
503
428
|
};
|
|
504
429
|
|
|
@@ -538,6 +463,10 @@ declare const queryCacheHelpers: {
|
|
|
538
463
|
* ```
|
|
539
464
|
*/
|
|
540
465
|
|
|
466
|
+
/**
|
|
467
|
+
* Return value of the useFileDisplay hook.
|
|
468
|
+
* Provides file URLs, references, loading state, error, and refetch function.
|
|
469
|
+
*/
|
|
541
470
|
interface UseFileDisplayReturn {
|
|
542
471
|
/** Single file URL if category is provided and file found, null otherwise */
|
|
543
472
|
fileUrl: string | null;
|
|
@@ -688,6 +617,10 @@ interface UseStorageOptions {
|
|
|
688
617
|
appName: string;
|
|
689
618
|
orgId: string;
|
|
690
619
|
}
|
|
620
|
+
/**
|
|
621
|
+
* Return value of the useStorage hook.
|
|
622
|
+
* Provides storage operations including upload, URL generation, file management, and listing.
|
|
623
|
+
*/
|
|
691
624
|
interface UseStorageReturn {
|
|
692
625
|
uploadFile: (file: File, options?: Partial<StorageUploadOptions>) => Promise<StorageUploadResult>;
|
|
693
626
|
isUploading: boolean;
|
|
@@ -769,4 +702,4 @@ interface UsePreventTabReloadOptions {
|
|
|
769
702
|
*/
|
|
770
703
|
declare function usePreventTabReload(options?: UsePreventTabReloadOptions): void;
|
|
771
704
|
|
|
772
|
-
export { type
|
|
705
|
+
export { type UseAddressAutocompleteOptions, type UseAddressAutocompleteReturn, type UseDataTablePerformanceOptions, type UseDataTablePerformanceReturn, type UseFileDisplayOptions, type UseFileDisplayReturn, type UseFileUrlCacheReturn, type UsePreventTabReloadOptions, type UseQueryCacheOptions, type UseQueryCacheReturn, type UseStorageOptions, type UseStorageReturn, cleanupQueryCache, clearFileDisplayCache, getFileDisplayCacheStats, invalidateFileDisplayCache, queryCacheHelpers, useAddressAutocomplete, useDataTablePerformance, useDataTableState, useDebounce, useFileDisplay, useFileUpload, useFileUrlCache, useFocusManagement, useFocusTrap, useIsMobile, useKeyboardShortcuts, usePerformanceMonitor, usePreventTabReload, useQueryCache, useStorage };
|
package/dist/hooks.js
CHANGED
|
@@ -12,10 +12,7 @@ import {
|
|
|
12
12
|
usePublicEventLogo,
|
|
13
13
|
usePublicRouteParams,
|
|
14
14
|
useZodForm
|
|
15
|
-
} from "./chunk-
|
|
16
|
-
import {
|
|
17
|
-
useSecureDataAccess
|
|
18
|
-
} from "./chunk-LFNCN2SP.js";
|
|
15
|
+
} from "./chunk-2UOI2FG5.js";
|
|
19
16
|
import {
|
|
20
17
|
archiveFile,
|
|
21
18
|
cleanupQueryCache,
|
|
@@ -37,18 +34,18 @@ import {
|
|
|
37
34
|
usePreventTabReload,
|
|
38
35
|
usePublicFileDisplay,
|
|
39
36
|
useQueryCache
|
|
40
|
-
} from "./chunk-
|
|
37
|
+
} from "./chunk-SFZUDBL5.js";
|
|
41
38
|
import {
|
|
42
39
|
useDataTablePerformance,
|
|
43
40
|
useToast
|
|
44
|
-
} from "./chunk-
|
|
41
|
+
} from "./chunk-6SOIHG6Z.js";
|
|
45
42
|
import {
|
|
46
43
|
useAppConfig,
|
|
47
44
|
useOrganisationSecurity
|
|
48
|
-
} from "./chunk-
|
|
45
|
+
} from "./chunk-MMZ7JXPU.js";
|
|
49
46
|
import "./chunk-KQCRWDSA.js";
|
|
50
|
-
import "./chunk-
|
|
51
|
-
import "./chunk-
|
|
47
|
+
import "./chunk-EHMR7VYL.js";
|
|
48
|
+
import "./chunk-24UVZUZG.js";
|
|
52
49
|
import "./chunk-63FOKYGO.js";
|
|
53
50
|
import "./chunk-ZSAAAMVR.js";
|
|
54
51
|
import "./chunk-QXHPKYJV.js";
|
|
@@ -59,9 +56,9 @@ import "./chunk-G37KK66H.js";
|
|
|
59
56
|
import {
|
|
60
57
|
PERFORMANCE_BUDGETS,
|
|
61
58
|
performanceBudgetMonitor
|
|
62
|
-
} from "./chunk-
|
|
59
|
+
} from "./chunk-FMUCXFII.js";
|
|
63
60
|
import "./chunk-VBXEHIUJ.js";
|
|
64
|
-
import "./chunk-
|
|
61
|
+
import "./chunk-L4OXEN46.js";
|
|
65
62
|
import {
|
|
66
63
|
createLogger
|
|
67
64
|
} from "./chunk-PWLANIRT.js";
|
|
@@ -208,7 +205,10 @@ function useFocusTrap(options = {}) {
|
|
|
208
205
|
return Array.from(
|
|
209
206
|
containerRef.current.querySelectorAll(focusableSelector)
|
|
210
207
|
).filter((element) => {
|
|
211
|
-
return
|
|
208
|
+
return (
|
|
209
|
+
// visible check
|
|
210
|
+
!element.hasAttribute("disabled") && !element.hasAttribute("hidden") && element.offsetParent !== null
|
|
211
|
+
);
|
|
212
212
|
});
|
|
213
213
|
}, [focusableSelector]);
|
|
214
214
|
const focusFirst = useCallback2(() => {
|
|
@@ -347,7 +347,7 @@ function useIsMobile() {
|
|
|
347
347
|
}
|
|
348
348
|
|
|
349
349
|
// src/hooks/useDataTableState.ts
|
|
350
|
-
import { useState as useState2, useCallback as useCallback4
|
|
350
|
+
import { useState as useState2, useCallback as useCallback4 } from "react";
|
|
351
351
|
function useDataTableState(options) {
|
|
352
352
|
const { initialPageSize = 10, data } = options;
|
|
353
353
|
const [sorting, setSorting] = useState2([]);
|
|
@@ -364,20 +364,12 @@ function useDataTableState(options) {
|
|
|
364
364
|
setPageIndex(0);
|
|
365
365
|
setSelectedRows([]);
|
|
366
366
|
}, [initialPageSize]);
|
|
367
|
-
const
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
const
|
|
373
|
-
return Math.ceil(data.length / pageSize);
|
|
374
|
-
}, [data.length, pageSize]);
|
|
375
|
-
const hasNextPage = useMemo(() => {
|
|
376
|
-
return pageIndex < totalPages - 1;
|
|
377
|
-
}, [pageIndex, totalPages]);
|
|
378
|
-
const hasPreviousPage = useMemo(() => {
|
|
379
|
-
return pageIndex > 0;
|
|
380
|
-
}, [pageIndex]);
|
|
367
|
+
const start = pageIndex * pageSize;
|
|
368
|
+
const end = start + pageSize;
|
|
369
|
+
const paginatedData = data.slice(start, end);
|
|
370
|
+
const totalPages = Math.ceil(data.length / pageSize);
|
|
371
|
+
const hasNextPage = pageIndex < totalPages - 1;
|
|
372
|
+
const hasPreviousPage = pageIndex > 0;
|
|
381
373
|
return {
|
|
382
374
|
state: {
|
|
383
375
|
sorting,
|
|
@@ -787,7 +779,6 @@ export {
|
|
|
787
779
|
usePublicFileDisplay,
|
|
788
780
|
usePublicRouteParams,
|
|
789
781
|
useQueryCache,
|
|
790
|
-
useSecureDataAccess,
|
|
791
782
|
useStorage,
|
|
792
783
|
useToast,
|
|
793
784
|
useZodForm
|