@jmruthers/pace-core 0.6.1 → 0.6.3
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 +88 -10
- package/cursor-rules/00-pace-core-compliance.mdc +46 -87
- package/cursor-rules/01-standards-compliance.mdc +16 -47
- package/cursor-rules/02-project-structure.mdc +4 -4
- package/cursor-rules/03-solid-principles.mdc +45 -164
- package/cursor-rules/04-testing-standards.mdc +22 -69
- package/cursor-rules/05-bug-reports-and-features.mdc +2 -2
- package/cursor-rules/06-code-quality.mdc +42 -125
- package/cursor-rules/07-tech-stack-compliance.mdc +33 -128
- package/cursor-rules/08-markup-quality.mdc +452 -0
- package/cursor-rules/CHANGELOG.md +18 -0
- package/cursor-rules/README.md +2 -1
- package/dist/{AuthService-DjnJHDtC.d.ts → AuthService-Cb34EQs3.d.ts} +63 -1
- package/dist/{DataTable-CH1U5Tpy.d.ts → DataTable-BMRU8a1j.d.ts} +33 -1
- package/dist/{DataTable-DQ7RSOHE.js → DataTable-THFPBKTP.js} +12 -10
- package/dist/{PublicPageProvider-ce4xlHYA.d.ts → PublicPageProvider-DEMpysFR.d.ts} +394 -171
- package/dist/{UnifiedAuthProvider-185Ih4dj.d.ts → UnifiedAuthProvider-CKvHP1MK.d.ts} +30 -8
- package/dist/{UnifiedAuthProvider-ATAP5UTR.js → UnifiedAuthProvider-KAGUYQ4J.js} +5 -4
- package/dist/{api-N774RPUA.js → api-IAGWF3ZG.js} +10 -10
- package/dist/{audit-B5P6FFIR.js → audit-V53FV5AG.js} +2 -2
- package/dist/{chunk-JBKQ3SAO.js → chunk-2T2IG7T7.js} +107 -57
- package/dist/chunk-2T2IG7T7.js.map +1 -0
- package/dist/{chunk-3QRJFVBR.js → chunk-6SOIHG6Z.js} +1 -1
- package/dist/chunk-6SOIHG6Z.js.map +1 -0
- package/dist/{chunk-3XTALGJF.js → chunk-6Z7LTB3D.js} +69 -240
- package/dist/chunk-6Z7LTB3D.js.map +1 -0
- package/dist/{chunk-4ZC4GX36.js → chunk-CNCQDFLN.js} +199 -46
- package/dist/chunk-CNCQDFLN.js.map +1 -0
- package/dist/chunk-DGUM43GV.js +11 -0
- package/dist/{chunk-BYFSK72L.js → chunk-DWUBLJJM.js} +361 -187
- package/dist/chunk-DWUBLJJM.js.map +1 -0
- package/dist/{chunk-LXQLPRQ2.js → chunk-FFQEQTNW.js} +6 -8
- 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-4N5C5XZU.js → chunk-HFZBI76P.js} +4 -4
- package/dist/chunk-HFZBI76P.js.map +1 -0
- package/dist/{chunk-SQGMNID3.js → chunk-L4OXEN46.js} +4 -5
- package/dist/chunk-L4OXEN46.js.map +1 -0
- package/dist/{chunk-R77UEZ4E.js → chunk-M43Y4SSO.js} +1 -1
- package/dist/chunk-M43Y4SSO.js.map +1 -0
- package/dist/{chunk-I7PSE6JW.js → chunk-M7MPQISP.js} +3 -76
- package/dist/chunk-M7MPQISP.js.map +1 -0
- package/dist/chunk-PQBSKX33.js +7793 -0
- package/dist/chunk-PQBSKX33.js.map +1 -0
- package/dist/chunk-QRPVRXYT.js +226 -0
- package/dist/chunk-QRPVRXYT.js.map +1 -0
- package/dist/{chunk-KNC55RTG.js → chunk-RWEBCB47.js} +194 -416
- package/dist/chunk-RWEBCB47.js.map +1 -0
- package/dist/{chunk-XM25TVIE.js → chunk-YDQHOZNA.js} +843 -388
- package/dist/chunk-YDQHOZNA.js.map +1 -0
- package/dist/{chunk-GLK6VM3F.js → chunk-ZNIWI3UC.js} +739 -737
- package/dist/chunk-ZNIWI3UC.js.map +1 -0
- package/dist/components.d.ts +5 -5
- package/dist/components.js +18 -16
- package/dist/components.js.map +1 -1
- package/dist/contextValidator-3JNZKUTX.js +9 -0
- package/dist/contextValidator-3JNZKUTX.js.map +1 -0
- package/dist/eslint-rules/pace-core-compliance.cjs +106 -0
- package/dist/{functions-D_kgHktt.d.ts → functions-DHebl8-F.d.ts} +1 -1
- package/dist/hooks.d.ts +55 -122
- package/dist/hooks.js +10 -13
- package/dist/hooks.js.map +1 -1
- package/dist/index.d.ts +60 -13
- package/dist/index.js +30 -25
- package/dist/index.js.map +1 -1
- package/dist/providers.d.ts +21 -3
- package/dist/providers.js +4 -3
- package/dist/rbac/index.d.ts +210 -139
- package/dist/rbac/index.js +17 -13
- package/dist/styles/index.js +1 -1
- package/dist/theming/runtime.d.ts +1 -13
- package/dist/theming/runtime.js +2 -2
- 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/types.js +1 -1
- package/dist/{usePublicRouteParams-BJAlWfuJ.d.ts → usePublicRouteParams-i3qtoBgg.d.ts} +38 -17
- package/dist/utils.d.ts +4 -5
- package/dist/utils.js +17 -19
- package/dist/utils.js.map +1 -1
- package/docs/api/README.md +21 -17
- package/docs/api/modules.md +4191 -2967
- package/docs/architecture/database-schema-requirements.md +161 -0
- package/docs/components/context-selector.md +126 -0
- package/docs/core-concepts/rbac-system.md +3 -3
- package/docs/documentation-index.md +2 -4
- package/docs/getting-started/cursor-rules.md +2 -1
- package/docs/migration/DOCUMENTATION_STRUCTURE.md +441 -0
- package/docs/migration/MIGRATION_GUIDE.md +2 -24
- package/docs/migration/RBAC_SCOPE_MIGRATION.md +385 -0
- package/docs/migration/README.md +52 -6
- package/docs/migration/V0.5.190_TO_V0.6.1_MIGRATION.md +1153 -0
- package/docs/migration/database-changes-december-2025.md +3 -3
- package/docs/pace-mint-fix-auto-selection.md +218 -0
- package/docs/pace-mint-rbac-setup.md +391 -0
- 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/rbac/secure-client-protection.md +330 -0
- package/docs/standards/README.md +1 -0
- package/package.json +4 -3
- 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} +784 -685
- 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 +985 -0
- package/scripts/audit/core/checks/documentation.cjs +268 -0
- package/scripts/audit/core/checks/environment.cjs +116 -0
- package/scripts/audit/core/checks/error-handling.cjs +340 -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 +61 -936
- 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/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__/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 +14 -0
- package/src/components/Button/Button.tsx +22 -0
- package/src/components/Calendar/Calendar.tsx +8 -2
- 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/ContextSelector/ContextSelector.tsx +384 -0
- package/src/components/ContextSelector/index.ts +3 -0
- package/src/components/DataTable/DataTable.tsx +38 -4
- package/src/components/DataTable/__tests__/DataTableCore.test-setup.ts +5 -6
- package/src/components/DataTable/__tests__/pagination.modes.test.tsx +18 -4
- package/src/components/DataTable/__tests__/test-utils/sharedTestUtils.tsx +2 -3
- package/src/components/DataTable/components/AccessDeniedPage.tsx +16 -25
- package/src/components/DataTable/components/ActionButtons.tsx +10 -7
- package/src/components/DataTable/components/BulkOperationsDropdown.tsx +1 -1
- 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 +196 -554
- 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 +8 -0
- 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 +8 -0
- 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 +63 -851
- 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/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 +12 -0
- 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 +127 -33
- package/src/components/DataTable/hooks/useDataTableState.ts +35 -1
- package/src/components/DataTable/hooks/useEffectiveColumnOrder.ts +12 -0
- 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/Dialog/Dialog.tsx +31 -3
- package/src/components/ErrorBoundary/ErrorBoundary.test.tsx +180 -1
- package/src/components/ErrorBoundary/ErrorBoundary.tsx +45 -5
- package/src/components/ErrorBoundary/ErrorBoundaryContext.tsx +129 -0
- package/src/components/ErrorBoundary/index.ts +27 -2
- package/src/components/FileDisplay/FileDisplay.tsx +74 -28
- package/src/components/FileUpload/FileUpload.tsx +22 -2
- package/src/components/Footer/Footer.test.tsx +16 -16
- package/src/components/Footer/Footer.tsx +14 -11
- package/src/components/Form/Form.tsx +1 -0
- package/src/components/Header/Header.test.tsx +43 -73
- package/src/components/Header/Header.tsx +59 -49
- package/src/components/Input/Input.test.tsx +2 -2
- package/src/components/Input/Input.tsx +8 -4
- package/src/components/LoadingSpinner/LoadingSpinner.test.tsx +4 -4
- package/src/components/LoginForm/LoginForm.tsx +4 -0
- package/src/components/NavigationMenu/NavigationMenu.tsx +14 -513
- package/src/components/NavigationMenu/types.ts +56 -0
- package/src/components/NavigationMenu/useNavigationFiltering.ts +390 -0
- package/src/components/PaceAppLayout/PaceAppLayout.integration.test.tsx +10 -19
- package/src/components/PaceAppLayout/PaceAppLayout.performance.test.tsx +2 -2
- package/src/components/PaceAppLayout/PaceAppLayout.security.test.tsx +5 -5
- package/src/components/PaceAppLayout/PaceAppLayout.test.tsx +13 -11
- package/src/components/PaceAppLayout/PaceAppLayout.tsx +167 -44
- package/src/components/PaceAppLayout/README.md +14 -17
- package/src/components/PaceAppLayout/test-setup.tsx +3 -4
- package/src/components/PaceLoginPage/PaceLoginPage.tsx +3 -0
- package/src/components/PasswordChange/PasswordChangeForm.tsx +9 -0
- package/src/components/ProtectedRoute/ProtectedRoute.tsx +3 -9
- package/src/components/PublicLayout/PublicPageLayout.tsx +2 -5
- package/src/components/PublicLayout/PublicPageProvider.tsx +4 -0
- package/src/components/Select/Select.tsx +80 -434
- 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 +4 -5
- package/src/components/Switch/Switch.tsx +4 -4
- package/src/components/Tabs/Tabs.tsx +1 -1
- package/src/components/Toast/Toast.tsx +4 -0
- package/src/components/Tooltip/Tooltip.tsx +2 -2
- package/src/components/UserMenu/UserMenu.test.tsx +24 -11
- package/src/components/UserMenu/UserMenu.tsx +21 -18
- package/src/components/index.ts +7 -7
- package/src/eslint-rules/pace-core-compliance.cjs +106 -0
- package/src/hooks/__tests__/index.unit.test.ts +2 -5
- package/src/hooks/__tests__/useAppConfig.unit.test.ts +4 -98
- package/src/hooks/index.ts +1 -2
- package/src/hooks/public/usePublicEvent.ts +4 -0
- package/src/hooks/public/usePublicEventLogo.ts +4 -0
- package/src/hooks/public/usePublicFileDisplay.ts +4 -0
- package/src/hooks/public/usePublicRouteParams.ts +4 -0
- 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/useAppConfig.ts +15 -30
- package/src/hooks/useDebounce.ts +9 -0
- package/src/hooks/useEventTheme.ts +6 -0
- package/src/hooks/useFileDisplay.ts +81 -50
- package/src/hooks/useFileReference.ts +25 -7
- package/src/hooks/useFileUrl.ts +11 -1
- package/src/hooks/useFocusManagement.ts +14 -0
- package/src/hooks/useFocusTrap.ts +3 -0
- package/src/hooks/useInactivityTracker.ts +3 -0
- 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 +7 -0
- 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 +1 -1
- package/src/index.ts +6 -6
- package/src/providers/__tests__/OrganisationProvider.test.tsx +92 -70
- package/src/providers/services/AuthServiceProvider.tsx +35 -7
- package/src/providers/services/EventServiceProvider.tsx +51 -5
- package/src/providers/services/InactivityServiceProvider.tsx +18 -0
- package/src/providers/services/OrganisationServiceProvider.tsx +18 -0
- package/src/providers/services/UnifiedAuthProvider.tsx +126 -134
- package/src/providers/services/__tests__/AuthServiceProvider.integration.test.tsx +29 -13
- package/src/rbac/README.md +1 -1
- package/src/rbac/__tests__/adapters.comprehensive.test.tsx +1 -1
- package/src/rbac/__tests__/scenarios.user-role.test.tsx +4 -5
- package/src/rbac/adapters.tsx +12 -3
- package/src/rbac/api.test.ts +59 -51
- package/src/rbac/api.ts +246 -167
- package/src/rbac/components/NavigationProvider.tsx +4 -1
- package/src/rbac/components/PagePermissionGuard.tsx +185 -17
- package/src/rbac/components/RoleBasedRouter.tsx +5 -1
- package/src/rbac/components/SecureDataProvider.test.tsx +84 -49
- package/src/rbac/components/SecureDataProvider.tsx +20 -5
- 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/__tests__/useSecureSupabase.test.ts +32 -21
- 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 +377 -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 +64 -66
- package/src/rbac/hooks/usePermissions.ts +14 -995
- package/src/rbac/hooks/useRBAC.test.ts +1 -5
- package/src/rbac/hooks/useRBAC.ts +36 -37
- package/src/rbac/hooks/useResolvedScope.test.ts +120 -35
- package/src/rbac/hooks/useResolvedScope.ts +35 -40
- package/src/rbac/hooks/useResourcePermissions.test.ts +54 -18
- package/src/rbac/hooks/useResourcePermissions.ts +14 -4
- package/src/rbac/hooks/useSecureSupabase.ts +27 -7
- package/src/rbac/index.ts +7 -0
- package/src/rbac/permissions.ts +0 -30
- package/src/rbac/secureClient.test.ts +22 -18
- package/src/rbac/secureClient.ts +294 -68
- package/src/rbac/security.ts +0 -17
- package/src/rbac/types.ts +9 -0
- package/src/rbac/utils/__tests__/contextValidator.test.ts +64 -86
- package/src/rbac/utils/clientSecurity.ts +93 -0
- package/src/rbac/utils/contextValidator.ts +77 -168
- package/src/services/AuthService.ts +39 -7
- package/src/services/EventService.ts +186 -54
- package/src/services/OrganisationService.ts +81 -14
- package/src/services/__tests__/EventService.test.ts +1 -2
- package/src/services/base/BaseService.ts +3 -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/dynamic/dynamicUtils.ts +7 -4
- 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/dist/chunk-3QRJFVBR.js.map +0 -1
- package/dist/chunk-3XTALGJF.js.map +0 -1
- package/dist/chunk-4N5C5XZU.js.map +0 -1
- package/dist/chunk-4ZC4GX36.js.map +0 -1
- package/dist/chunk-7D4SUZUM.js +0 -38
- package/dist/chunk-BYFSK72L.js.map +0 -1
- package/dist/chunk-EXUD6RNJ.js +0 -451
- package/dist/chunk-EXUD6RNJ.js.map +0 -1
- package/dist/chunk-GLK6VM3F.js.map +0 -1
- package/dist/chunk-I7PSE6JW.js.map +0 -1
- package/dist/chunk-JBKQ3SAO.js.map +0 -1
- package/dist/chunk-KNC55RTG.js.map +0 -1
- package/dist/chunk-LXQLPRQ2.js.map +0 -1
- package/dist/chunk-R77UEZ4E.js.map +0 -1
- package/dist/chunk-SQGMNID3.js.map +0 -1
- package/dist/chunk-T33XF5ZC.js +0 -12922
- package/dist/chunk-T33XF5ZC.js.map +0 -1
- package/dist/chunk-XM25TVIE.js.map +0 -1
- package/docs/api/classes/ColumnFactory.md +0 -243
- package/docs/api/classes/ErrorBoundary.md +0 -144
- package/docs/api/classes/InvalidScopeError.md +0 -73
- package/docs/api/classes/Logger.md +0 -178
- package/docs/api/classes/MissingUserContextError.md +0 -66
- package/docs/api/classes/OrganisationContextRequiredError.md +0 -66
- package/docs/api/classes/PermissionDeniedError.md +0 -73
- package/docs/api/classes/RBACAuditManager.md +0 -297
- package/docs/api/classes/RBACCache.md +0 -322
- package/docs/api/classes/RBACEngine.md +0 -171
- package/docs/api/classes/RBACError.md +0 -76
- package/docs/api/classes/RBACNotInitializedError.md +0 -66
- package/docs/api/classes/SecureSupabaseClient.md +0 -160
- package/docs/api/classes/StorageUtils.md +0 -328
- package/docs/api/enums/FileCategory.md +0 -184
- package/docs/api/enums/LogLevel.md +0 -54
- package/docs/api/enums/RBACErrorCode.md +0 -228
- package/docs/api/enums/RPCFunction.md +0 -118
- package/docs/api/interfaces/AddressFieldProps.md +0 -241
- package/docs/api/interfaces/AddressFieldRef.md +0 -94
- package/docs/api/interfaces/AggregateConfig.md +0 -43
- package/docs/api/interfaces/AutocompleteOptions.md +0 -75
- package/docs/api/interfaces/AvatarProps.md +0 -128
- package/docs/api/interfaces/BadgeProps.md +0 -27
- package/docs/api/interfaces/ButtonProps.md +0 -53
- package/docs/api/interfaces/CalendarProps.md +0 -70
- package/docs/api/interfaces/CardProps.md +0 -66
- package/docs/api/interfaces/ColorPalette.md +0 -7
- package/docs/api/interfaces/ColorShade.md +0 -66
- package/docs/api/interfaces/ComplianceResult.md +0 -30
- package/docs/api/interfaces/DataAccessRecord.md +0 -96
- package/docs/api/interfaces/DataRecord.md +0 -11
- package/docs/api/interfaces/DataTableAction.md +0 -249
- package/docs/api/interfaces/DataTableColumn.md +0 -504
- package/docs/api/interfaces/DataTableProps.md +0 -625
- package/docs/api/interfaces/DataTableToolbarButton.md +0 -96
- package/docs/api/interfaces/DatabaseComplianceResult.md +0 -85
- package/docs/api/interfaces/DatabaseIssue.md +0 -41
- package/docs/api/interfaces/EmptyStateConfig.md +0 -61
- package/docs/api/interfaces/EnhancedNavigationMenuProps.md +0 -235
- package/docs/api/interfaces/EventAppRoleData.md +0 -71
- package/docs/api/interfaces/ExportColumn.md +0 -90
- package/docs/api/interfaces/ExportOptions.md +0 -126
- package/docs/api/interfaces/FileDisplayProps.md +0 -249
- package/docs/api/interfaces/FileMetadata.md +0 -129
- package/docs/api/interfaces/FileReference.md +0 -118
- package/docs/api/interfaces/FileSizeLimits.md +0 -7
- package/docs/api/interfaces/FileUploadOptions.md +0 -139
- package/docs/api/interfaces/FileUploadProps.md +0 -293
- package/docs/api/interfaces/FooterProps.md +0 -105
- package/docs/api/interfaces/FormFieldProps.md +0 -166
- package/docs/api/interfaces/FormProps.md +0 -113
- package/docs/api/interfaces/GrantEventAppRoleParams.md +0 -122
- package/docs/api/interfaces/InactivityWarningModalProps.md +0 -115
- package/docs/api/interfaces/InputProps.md +0 -53
- package/docs/api/interfaces/LabelProps.md +0 -107
- package/docs/api/interfaces/LoggerConfig.md +0 -62
- package/docs/api/interfaces/LoginFormProps.md +0 -184
- package/docs/api/interfaces/NavigationAccessRecord.md +0 -107
- package/docs/api/interfaces/NavigationContextType.md +0 -164
- package/docs/api/interfaces/NavigationGuardProps.md +0 -139
- package/docs/api/interfaces/NavigationItem.md +0 -120
- package/docs/api/interfaces/NavigationMenuProps.md +0 -221
- package/docs/api/interfaces/NavigationProviderProps.md +0 -117
- package/docs/api/interfaces/Organisation.md +0 -140
- package/docs/api/interfaces/OrganisationContextType.md +0 -388
- package/docs/api/interfaces/OrganisationMembership.md +0 -140
- package/docs/api/interfaces/OrganisationProviderProps.md +0 -76
- package/docs/api/interfaces/OrganisationSecurityError.md +0 -62
- package/docs/api/interfaces/PaceAppLayoutProps.md +0 -406
- package/docs/api/interfaces/PaceLoginPageProps.md +0 -47
- package/docs/api/interfaces/PageAccessRecord.md +0 -85
- package/docs/api/interfaces/PagePermissionContextType.md +0 -140
- package/docs/api/interfaces/PagePermissionGuardProps.md +0 -153
- package/docs/api/interfaces/PagePermissionProviderProps.md +0 -119
- package/docs/api/interfaces/PaletteData.md +0 -41
- package/docs/api/interfaces/ParsedAddress.md +0 -120
- package/docs/api/interfaces/PermissionEnforcerProps.md +0 -153
- package/docs/api/interfaces/ProgressProps.md +0 -42
- package/docs/api/interfaces/ProtectedRouteProps.md +0 -97
- package/docs/api/interfaces/PublicPageFooterProps.md +0 -112
- package/docs/api/interfaces/PublicPageHeaderProps.md +0 -125
- package/docs/api/interfaces/PublicPageLayoutProps.md +0 -198
- package/docs/api/interfaces/QuickFix.md +0 -52
- package/docs/api/interfaces/RBACAccessValidateParams.md +0 -52
- package/docs/api/interfaces/RBACAccessValidateResult.md +0 -41
- package/docs/api/interfaces/RBACAuditLogParams.md +0 -85
- package/docs/api/interfaces/RBACAuditLogResult.md +0 -52
- package/docs/api/interfaces/RBACConfig.md +0 -133
- package/docs/api/interfaces/RBACContext.md +0 -52
- package/docs/api/interfaces/RBACLogger.md +0 -112
- package/docs/api/interfaces/RBACPageAccessCheckParams.md +0 -74
- package/docs/api/interfaces/RBACPerformanceMetrics.md +0 -138
- package/docs/api/interfaces/RBACPermissionCheckParams.md +0 -74
- package/docs/api/interfaces/RBACPermissionCheckResult.md +0 -52
- package/docs/api/interfaces/RBACPermissionsGetParams.md +0 -63
- package/docs/api/interfaces/RBACPermissionsGetResult.md +0 -63
- package/docs/api/interfaces/RBACResult.md +0 -58
- package/docs/api/interfaces/RBACRoleGrantParams.md +0 -63
- package/docs/api/interfaces/RBACRoleGrantResult.md +0 -52
- package/docs/api/interfaces/RBACRoleRevokeParams.md +0 -63
- package/docs/api/interfaces/RBACRoleRevokeResult.md +0 -52
- package/docs/api/interfaces/RBACRoleValidateParams.md +0 -52
- package/docs/api/interfaces/RBACRoleValidateResult.md +0 -63
- package/docs/api/interfaces/RBACRolesListParams.md +0 -52
- package/docs/api/interfaces/RBACRolesListResult.md +0 -74
- package/docs/api/interfaces/RBACSessionTrackParams.md +0 -74
- package/docs/api/interfaces/RBACSessionTrackResult.md +0 -52
- package/docs/api/interfaces/ResourcePermissions.md +0 -155
- package/docs/api/interfaces/RevokeEventAppRoleParams.md +0 -100
- package/docs/api/interfaces/RoleBasedRouterContextType.md +0 -151
- package/docs/api/interfaces/RoleBasedRouterProps.md +0 -156
- package/docs/api/interfaces/RoleManagementResult.md +0 -52
- package/docs/api/interfaces/RouteAccessRecord.md +0 -107
- package/docs/api/interfaces/RouteConfig.md +0 -134
- package/docs/api/interfaces/RuntimeComplianceResult.md +0 -55
- package/docs/api/interfaces/SecureDataContextType.md +0 -168
- package/docs/api/interfaces/SecureDataProviderProps.md +0 -132
- package/docs/api/interfaces/SessionRestorationLoaderProps.md +0 -34
- package/docs/api/interfaces/SetupIssue.md +0 -41
- package/docs/api/interfaces/StorageConfig.md +0 -41
- package/docs/api/interfaces/StorageFileInfo.md +0 -74
- package/docs/api/interfaces/StorageFileMetadata.md +0 -151
- package/docs/api/interfaces/StorageListOptions.md +0 -99
- package/docs/api/interfaces/StorageListResult.md +0 -41
- package/docs/api/interfaces/StorageUploadOptions.md +0 -101
- package/docs/api/interfaces/StorageUploadResult.md +0 -63
- package/docs/api/interfaces/StorageUrlOptions.md +0 -60
- package/docs/api/interfaces/StyleImport.md +0 -19
- package/docs/api/interfaces/SwitchProps.md +0 -34
- package/docs/api/interfaces/TabsContentProps.md +0 -9
- package/docs/api/interfaces/TabsListProps.md +0 -9
- package/docs/api/interfaces/TabsProps.md +0 -9
- package/docs/api/interfaces/TabsTriggerProps.md +0 -50
- package/docs/api/interfaces/TextareaProps.md +0 -53
- package/docs/api/interfaces/ToastActionElement.md +0 -9
- package/docs/api/interfaces/ToastProps.md +0 -9
- package/docs/api/interfaces/UnifiedAuthContextType.md +0 -820
- package/docs/api/interfaces/UnifiedAuthProviderProps.md +0 -171
- package/docs/api/interfaces/UseFormDialogOptions.md +0 -62
- package/docs/api/interfaces/UseFormDialogReturn.md +0 -117
- package/docs/api/interfaces/UseInactivityTrackerOptions.md +0 -136
- package/docs/api/interfaces/UseInactivityTrackerReturn.md +0 -123
- package/docs/api/interfaces/UsePublicEventLogoOptions.md +0 -87
- package/docs/api/interfaces/UsePublicEventLogoReturn.md +0 -81
- package/docs/api/interfaces/UsePublicEventOptions.md +0 -34
- package/docs/api/interfaces/UsePublicEventReturn.md +0 -68
- package/docs/api/interfaces/UsePublicFileDisplayOptions.md +0 -47
- package/docs/api/interfaces/UsePublicFileDisplayReturn.md +0 -120
- package/docs/api/interfaces/UsePublicRouteParamsReturn.md +0 -94
- package/docs/api/interfaces/UseResolvedScopeOptions.md +0 -47
- package/docs/api/interfaces/UseResolvedScopeReturn.md +0 -47
- package/docs/api/interfaces/UseResourcePermissionsOptions.md +0 -34
- package/docs/api/interfaces/UserEventAccess.md +0 -118
- package/docs/api/interfaces/UserMenuProps.md +0 -86
- package/docs/api/interfaces/UserProfile.md +0 -63
- package/docs/migration/quick-migration-guide.md +0 -356
- package/docs/migration/service-architecture.md +0 -281
- package/src/components/EventSelector/EventSelector.test.tsx +0 -720
- package/src/components/EventSelector/EventSelector.tsx +0 -420
- package/src/components/EventSelector/index.ts +0 -3
- package/src/components/OrganisationSelector/OrganisationSelector.test.tsx +0 -784
- package/src/components/OrganisationSelector/OrganisationSelector.tsx +0 -324
- package/src/components/OrganisationSelector/index.ts +0 -9
- package/src/hooks/__tests__/useSecureDataAccess.unit.test.tsx +0 -680
- package/src/hooks/useSecureDataAccess.test.ts +0 -559
- package/src/hooks/useSecureDataAccess.ts +0 -681
- /package/dist/{DataTable-DQ7RSOHE.js.map → DataTable-THFPBKTP.js.map} +0 -0
- /package/dist/{UnifiedAuthProvider-ATAP5UTR.js.map → UnifiedAuthProvider-KAGUYQ4J.js.map} +0 -0
- /package/dist/{api-N774RPUA.js.map → api-IAGWF3ZG.js.map} +0 -0
- /package/dist/{audit-B5P6FFIR.js.map → audit-V53FV5AG.js.map} +0 -0
- /package/dist/{chunk-7D4SUZUM.js.map → chunk-DGUM43GV.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/docs/migration/{REACT_19_MIGRATION.md → V0.6.0_REACT_19_MIGRATION.md} +0 -0
|
@@ -0,0 +1,452 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Enforce clean markup standards, semantic HTML usage, and pace-core component patterns
|
|
3
|
+
globs: ["src/**/*.{ts,tsx,js,jsx}"]
|
|
4
|
+
alwaysApply: true
|
|
5
|
+
paceCoreVersion: "0.6.x"
|
|
6
|
+
rulesVersion: "2025-01-28"
|
|
7
|
+
---
|
|
8
|
+
# Markup Quality Guide
|
|
9
|
+
|
|
10
|
+
This guide enforces clean markup standards, semantic HTML usage, and proper pace-core component patterns to ensure maintainable, accessible, and consistent code.
|
|
11
|
+
|
|
12
|
+
## pace-core First
|
|
13
|
+
|
|
14
|
+
### MUST: Use pace-core Components
|
|
15
|
+
|
|
16
|
+
**MUST use pace-core components wherever possible:**
|
|
17
|
+
|
|
18
|
+
```tsx
|
|
19
|
+
// ❌ WRONG: Custom button or native HTML element
|
|
20
|
+
<button className="btn-primary">Click me</button>
|
|
21
|
+
<input type="text" className="form-input" />
|
|
22
|
+
|
|
23
|
+
// ✅ CORRECT: Use pace-core components
|
|
24
|
+
import { Button, Input } from '@jmruthers/pace-core';
|
|
25
|
+
<Button>Click me</Button>
|
|
26
|
+
<Input type="text" />
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
### MUST NOT: Add Custom Styles to pace-core Components
|
|
30
|
+
|
|
31
|
+
**MUST NOT add custom styles when pace-core components already provide styling:**
|
|
32
|
+
|
|
33
|
+
```tsx
|
|
34
|
+
// ❌ WRONG: Overriding pace-core component styles
|
|
35
|
+
<Button className="custom-button-style">Click me</Button>
|
|
36
|
+
<Card className="custom-card-layout">Content</Card>
|
|
37
|
+
|
|
38
|
+
// ✅ CORRECT: Use pace-core component variants/props
|
|
39
|
+
<Button variant="default">Click me</Button>
|
|
40
|
+
<Card>Content</Card>
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
### MUST: Rely on pace-core core.css
|
|
44
|
+
|
|
45
|
+
**MUST rely on pace-core `core.css` for typography, spacing, and visual presentation:**
|
|
46
|
+
|
|
47
|
+
```tsx
|
|
48
|
+
// ❌ WRONG: Custom typography classes
|
|
49
|
+
<h1 className="text-2xl font-bold">Title</h1>
|
|
50
|
+
<p className="text-gray-500 mb-4">Description</p>
|
|
51
|
+
|
|
52
|
+
// ✅ CORRECT: Typography defined in pace-core core.css
|
|
53
|
+
<h1>Title</h1>
|
|
54
|
+
<p>Description</p>
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
### SHOULD: Fall Back to Semantic HTML
|
|
58
|
+
|
|
59
|
+
**SHOULD only use plain semantic HTML when no suitable pace-core component exists:**
|
|
60
|
+
|
|
61
|
+
```tsx
|
|
62
|
+
// ✅ CORRECT: Use semantic HTML when pace-core doesn't provide component
|
|
63
|
+
<main>
|
|
64
|
+
<section>
|
|
65
|
+
<article>
|
|
66
|
+
<h2>Article Title</h2>
|
|
67
|
+
<p>Article content</p>
|
|
68
|
+
</article>
|
|
69
|
+
</section>
|
|
70
|
+
</main>
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
## Semantic HTML Only
|
|
74
|
+
|
|
75
|
+
### MUST: Use Semantic HTML Elements
|
|
76
|
+
|
|
77
|
+
**MUST use semantic HTML elements for their intended purpose:**
|
|
78
|
+
|
|
79
|
+
```tsx
|
|
80
|
+
// ❌ WRONG: Non-semantic elements
|
|
81
|
+
<div onClick={handleClick}>Click me</div>
|
|
82
|
+
<div className="header">Header</div>
|
|
83
|
+
<div className="footer">Footer</div>
|
|
84
|
+
|
|
85
|
+
// ✅ CORRECT: Semantic HTML elements
|
|
86
|
+
<button onClick={handleClick}>Click me</button>
|
|
87
|
+
<header>Header</header>
|
|
88
|
+
<footer>Footer</footer>
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
### MUST NOT: Use `<div>` Elements
|
|
92
|
+
|
|
93
|
+
**MUST NOT use `<div>` elements (except for the first child of `<body>` in `index.html`, React portals, or when required by third-party libraries that mandate specific DOM structure):**
|
|
94
|
+
|
|
95
|
+
```tsx
|
|
96
|
+
// ❌ WRONG: Using div elements
|
|
97
|
+
<div className="container">
|
|
98
|
+
<div className="content">Content</div>
|
|
99
|
+
</div>
|
|
100
|
+
|
|
101
|
+
// ✅ CORRECT: Use semantic elements or React Fragments
|
|
102
|
+
<main>
|
|
103
|
+
<section>Content</section>
|
|
104
|
+
</main>
|
|
105
|
+
// Or for grouping without semantic meaning:
|
|
106
|
+
<>
|
|
107
|
+
<Component1 />
|
|
108
|
+
<Component2 />
|
|
109
|
+
</>
|
|
110
|
+
```
|
|
111
|
+
|
|
112
|
+
### MUST: Choose Most Semantic Element
|
|
113
|
+
|
|
114
|
+
**MUST choose the most semantically accurate element for the content:**
|
|
115
|
+
|
|
116
|
+
```tsx
|
|
117
|
+
// ✅ CORRECT: Choose appropriate semantic elements
|
|
118
|
+
<main>Main content</main>
|
|
119
|
+
<section>Section of content</section>
|
|
120
|
+
<article>Article content</article>
|
|
121
|
+
<header>Header content</header>
|
|
122
|
+
<footer>Footer content</footer>
|
|
123
|
+
<nav>Navigation</nav>
|
|
124
|
+
<ul><li>List items</li></ul>
|
|
125
|
+
<p>Paragraph text</p>
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
## Typography & Styling
|
|
129
|
+
|
|
130
|
+
### MUST NOT: Apply Typography Styles Directly
|
|
131
|
+
|
|
132
|
+
**MUST NOT apply typography styles directly to elements:**
|
|
133
|
+
|
|
134
|
+
```tsx
|
|
135
|
+
// ❌ WRONG: Direct typography styling
|
|
136
|
+
<h1 className="text-2xl font-bold">Title</h1>
|
|
137
|
+
<p className="text-gray-500 leading-relaxed">Description</p>
|
|
138
|
+
<label className="text-sm uppercase">Label</label>
|
|
139
|
+
|
|
140
|
+
// ✅ CORRECT: Typography defined in pace-core core.css
|
|
141
|
+
<h1>Title</h1>
|
|
142
|
+
<p>Description</p>
|
|
143
|
+
<label>Label</label>
|
|
144
|
+
```
|
|
145
|
+
|
|
146
|
+
### MUST: Use pace-core Typography
|
|
147
|
+
|
|
148
|
+
**MUST rely on typography defined exclusively in `pace-core core.css`:**
|
|
149
|
+
|
|
150
|
+
```tsx
|
|
151
|
+
// ✅ CORRECT: Typography comes from pace-core core.css
|
|
152
|
+
<h1>Heading 1</h1>
|
|
153
|
+
<h2>Heading 2</h2>
|
|
154
|
+
<h3>Heading 3</h3>
|
|
155
|
+
<p>Paragraph text</p>
|
|
156
|
+
<label>Form label</label>
|
|
157
|
+
```
|
|
158
|
+
|
|
159
|
+
### MUST NOT: Add Typography Utilities
|
|
160
|
+
|
|
161
|
+
**MUST NOT add utility classes, inline styles, or custom CSS for typography:**
|
|
162
|
+
|
|
163
|
+
```tsx
|
|
164
|
+
// ❌ WRONG: Typography utilities or inline styles
|
|
165
|
+
<h1 className="text-3xl font-bold mb-4">Title</h1>
|
|
166
|
+
<p style={{ fontSize: '14px', color: 'gray' }}>Text</p>
|
|
167
|
+
<label className="uppercase tracking-wide">Label</label>
|
|
168
|
+
|
|
169
|
+
// ✅ CORRECT: No typography styling - pace-core handles it
|
|
170
|
+
<h1>Title</h1>
|
|
171
|
+
<p>Text</p>
|
|
172
|
+
<label>Label</label>
|
|
173
|
+
```
|
|
174
|
+
|
|
175
|
+
## React Structure Rules
|
|
176
|
+
|
|
177
|
+
### MUST NOT: Add Wrapper Elements for Single Root
|
|
178
|
+
|
|
179
|
+
**MUST NOT add wrapper elements solely to satisfy React's single-root requirement:**
|
|
180
|
+
|
|
181
|
+
```tsx
|
|
182
|
+
// ❌ WRONG: Unnecessary wrapper for single root
|
|
183
|
+
function Component() {
|
|
184
|
+
return (
|
|
185
|
+
<div>
|
|
186
|
+
<Header />
|
|
187
|
+
<Main />
|
|
188
|
+
<Footer />
|
|
189
|
+
</div>
|
|
190
|
+
);
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
// ✅ CORRECT: Use React Fragment
|
|
194
|
+
function Component() {
|
|
195
|
+
return (
|
|
196
|
+
<>
|
|
197
|
+
<Header />
|
|
198
|
+
<Main />
|
|
199
|
+
<Footer />
|
|
200
|
+
</>
|
|
201
|
+
);
|
|
202
|
+
}
|
|
203
|
+
```
|
|
204
|
+
|
|
205
|
+
### MUST: Use React Fragments
|
|
206
|
+
|
|
207
|
+
**MUST use React Fragments for grouping without adding DOM elements:**
|
|
208
|
+
|
|
209
|
+
```tsx
|
|
210
|
+
// ✅ CORRECT: Use React Fragments
|
|
211
|
+
function Component() {
|
|
212
|
+
return (
|
|
213
|
+
<>
|
|
214
|
+
<Component1 />
|
|
215
|
+
<Component2 />
|
|
216
|
+
<Component3 />
|
|
217
|
+
</>
|
|
218
|
+
);
|
|
219
|
+
}
|
|
220
|
+
```
|
|
221
|
+
|
|
222
|
+
### MUST NOT: Add Extra Elements
|
|
223
|
+
|
|
224
|
+
**MUST NOT introduce extra elements that provide no semantic or functional value:**
|
|
225
|
+
|
|
226
|
+
```tsx
|
|
227
|
+
// ❌ WRONG: Extra wrapper with no purpose
|
|
228
|
+
<article>
|
|
229
|
+
<div>
|
|
230
|
+
<h2>Title</h2>
|
|
231
|
+
<p>Content</p>
|
|
232
|
+
</div>
|
|
233
|
+
</article>
|
|
234
|
+
|
|
235
|
+
// ✅ CORRECT: Direct semantic structure
|
|
236
|
+
<article>
|
|
237
|
+
<h2>Title</h2>
|
|
238
|
+
<p>Content</p>
|
|
239
|
+
</article>
|
|
240
|
+
```
|
|
241
|
+
|
|
242
|
+
## Styling & Layout Discipline
|
|
243
|
+
|
|
244
|
+
### MUST NOT: Add Wrappers for Styling
|
|
245
|
+
|
|
246
|
+
**MUST NOT add wrapper elements just to apply styles:**
|
|
247
|
+
|
|
248
|
+
```tsx
|
|
249
|
+
// ❌ WRONG: Wrapper element for styling only
|
|
250
|
+
<div className="flex gap-4">
|
|
251
|
+
<Button>Button 1</Button>
|
|
252
|
+
<Button>Button 2</Button>
|
|
253
|
+
</div>
|
|
254
|
+
|
|
255
|
+
// ✅ CORRECT: Apply styles to existing parent or use pace-core components
|
|
256
|
+
<section className="flex gap-4">
|
|
257
|
+
<Button>Button 1</Button>
|
|
258
|
+
<Button>Button 2</Button>
|
|
259
|
+
</section>
|
|
260
|
+
// Or if no semantic parent exists, leave unstyled or use pace-core layout components
|
|
261
|
+
```
|
|
262
|
+
|
|
263
|
+
### SHOULD: Apply Styles to Existing Elements
|
|
264
|
+
|
|
265
|
+
**SHOULD apply styles to existing parent components:**
|
|
266
|
+
|
|
267
|
+
```tsx
|
|
268
|
+
// ✅ CORRECT: Apply styles to semantic parent
|
|
269
|
+
<main className="flex flex-col gap-4">
|
|
270
|
+
<section>Content 1</section>
|
|
271
|
+
<section>Content 2</section>
|
|
272
|
+
</main>
|
|
273
|
+
```
|
|
274
|
+
|
|
275
|
+
### SHOULD: Leave Unstyled When Appropriate
|
|
276
|
+
|
|
277
|
+
**SHOULD leave elements unstyled if styles aren't necessary:**
|
|
278
|
+
|
|
279
|
+
```tsx
|
|
280
|
+
// ✅ CORRECT: Unstyled semantic structure
|
|
281
|
+
<article>
|
|
282
|
+
<h2>Title</h2>
|
|
283
|
+
<p>Content</p>
|
|
284
|
+
</article>
|
|
285
|
+
```
|
|
286
|
+
|
|
287
|
+
### MUST: Use pace-core for Layout
|
|
288
|
+
|
|
289
|
+
**MUST assume most layout and styling will be handled by pace-core, not ad-hoc wrappers:**
|
|
290
|
+
|
|
291
|
+
```tsx
|
|
292
|
+
// ❌ WRONG: Custom layout wrapper
|
|
293
|
+
<div className="grid grid-cols-2 gap-4">
|
|
294
|
+
<Card>Card 1</Card>
|
|
295
|
+
<Card>Card 2</Card>
|
|
296
|
+
</div>
|
|
297
|
+
|
|
298
|
+
// ✅ CORRECT: Use pace-core layout components or apply to semantic parent
|
|
299
|
+
<section className="grid grid-cols-2 gap-4">
|
|
300
|
+
<Card>Card 1</Card>
|
|
301
|
+
<Card>Card 2</Card>
|
|
302
|
+
</section>
|
|
303
|
+
```
|
|
304
|
+
|
|
305
|
+
## Element Minimisation
|
|
306
|
+
|
|
307
|
+
### MUST: Use Fewest Elements Possible
|
|
308
|
+
|
|
309
|
+
**MUST use the fewest elements possible to achieve the desired structure:**
|
|
310
|
+
|
|
311
|
+
```tsx
|
|
312
|
+
// ❌ WRONG: Unnecessary nesting
|
|
313
|
+
<main>
|
|
314
|
+
<div>
|
|
315
|
+
<section>
|
|
316
|
+
<div>
|
|
317
|
+
<article>Content</article>
|
|
318
|
+
</div>
|
|
319
|
+
</section>
|
|
320
|
+
</div>
|
|
321
|
+
</main>
|
|
322
|
+
|
|
323
|
+
// ✅ CORRECT: Minimal structure
|
|
324
|
+
<main>
|
|
325
|
+
<section>
|
|
326
|
+
<article>Content</article>
|
|
327
|
+
</section>
|
|
328
|
+
</main>
|
|
329
|
+
```
|
|
330
|
+
|
|
331
|
+
### MUST NOT: Create Redundant Nesting
|
|
332
|
+
|
|
333
|
+
**MUST NOT create redundant nesting:**
|
|
334
|
+
|
|
335
|
+
```tsx
|
|
336
|
+
// ❌ WRONG: Redundant wrapper
|
|
337
|
+
<article>
|
|
338
|
+
<div>
|
|
339
|
+
<h2>Title</h2>
|
|
340
|
+
</div>
|
|
341
|
+
<div>
|
|
342
|
+
<p>Content</p>
|
|
343
|
+
</div>
|
|
344
|
+
</article>
|
|
345
|
+
|
|
346
|
+
// ✅ CORRECT: Direct structure
|
|
347
|
+
<article>
|
|
348
|
+
<h2>Title</h2>
|
|
349
|
+
<p>Content</p>
|
|
350
|
+
</article>
|
|
351
|
+
```
|
|
352
|
+
|
|
353
|
+
### MUST: Clear Semantic Purpose
|
|
354
|
+
|
|
355
|
+
**MUST ensure every element has a clear semantic purpose:**
|
|
356
|
+
|
|
357
|
+
```tsx
|
|
358
|
+
// ❌ WRONG: Element without semantic purpose
|
|
359
|
+
<div>
|
|
360
|
+
<Component1 />
|
|
361
|
+
<Component2 />
|
|
362
|
+
</div>
|
|
363
|
+
|
|
364
|
+
// ✅ CORRECT: Semantic purpose or Fragment
|
|
365
|
+
<section>
|
|
366
|
+
<Component1 />
|
|
367
|
+
<Component2 />
|
|
368
|
+
</section>
|
|
369
|
+
// Or if no semantic grouping needed:
|
|
370
|
+
<>
|
|
371
|
+
<Component1 />
|
|
372
|
+
<Component2 />
|
|
373
|
+
</>
|
|
374
|
+
```
|
|
375
|
+
|
|
376
|
+
## Prohibited Patterns
|
|
377
|
+
|
|
378
|
+
### MUST NOT: Use These Patterns
|
|
379
|
+
|
|
380
|
+
**MUST NOT use the following patterns:**
|
|
381
|
+
|
|
382
|
+
1. **`<div>` elements** - Use semantic HTML or React Fragments instead
|
|
383
|
+
2. **Wrapper elements for styling only** - Apply styles to existing elements or use pace-core components
|
|
384
|
+
3. **Wrapper elements as sole child** - Use React Fragments instead
|
|
385
|
+
4. **Custom typography classes** - Typography is defined in pace-core core.css
|
|
386
|
+
5. **Inline styles for typography** - Use pace-core typography
|
|
387
|
+
6. **Duplicating pace-core layout/visuals** - Use pace-core components instead
|
|
388
|
+
|
|
389
|
+
```tsx
|
|
390
|
+
// ❌ WRONG: All prohibited patterns
|
|
391
|
+
<div className="wrapper">
|
|
392
|
+
<div className="content">
|
|
393
|
+
<h1 className="text-2xl font-bold">Title</h1>
|
|
394
|
+
<p style={{ color: 'gray' }}>Text</p>
|
|
395
|
+
</div>
|
|
396
|
+
</div>
|
|
397
|
+
|
|
398
|
+
// ✅ CORRECT: Clean, semantic markup
|
|
399
|
+
<main>
|
|
400
|
+
<section>
|
|
401
|
+
<h1>Title</h1>
|
|
402
|
+
<p>Text</p>
|
|
403
|
+
</section>
|
|
404
|
+
</main>
|
|
405
|
+
```
|
|
406
|
+
|
|
407
|
+
## Expected Outcome
|
|
408
|
+
|
|
409
|
+
### Code Quality Goals
|
|
410
|
+
|
|
411
|
+
Code produced under these rules SHOULD:
|
|
412
|
+
|
|
413
|
+
- **Be semantically correct** - Use appropriate HTML elements for their purpose
|
|
414
|
+
- **Be visually consistent** - Rely on pace-core for styling and typography
|
|
415
|
+
- **Contain minimal markup** - Use fewest elements necessary
|
|
416
|
+
- **Avoid unnecessary abstraction** - No wrappers without purpose
|
|
417
|
+
- **Remain easy to reason about** - Clear structure and purpose
|
|
418
|
+
- **Be easy to refactor** - Minimal coupling and dependencies
|
|
419
|
+
|
|
420
|
+
### Decision Tree
|
|
421
|
+
|
|
422
|
+
**When in doubt, follow this decision tree:**
|
|
423
|
+
|
|
424
|
+
1. **Does pace-core provide a component?** → Use pace-core component
|
|
425
|
+
2. **Is a semantic HTML element appropriate?** → Use semantic element (`<main>`, `<section>`, `<article>`, etc.)
|
|
426
|
+
3. **Do I need to group elements without semantic meaning?** → Use React Fragment (`<>...</>`)
|
|
427
|
+
4. **Do I need styling?** → Apply to existing semantic parent or use pace-core layout components
|
|
428
|
+
5. **Still unsure?** → Remove the element, remove the style, and rely on pace-core or semantic HTML
|
|
429
|
+
|
|
430
|
+
## Markup Quality Checklist
|
|
431
|
+
|
|
432
|
+
Before committing code, verify:
|
|
433
|
+
|
|
434
|
+
- [ ] No `<div>` elements (except first child of `<body>` in `index.html`)
|
|
435
|
+
- [ ] pace-core components used where available
|
|
436
|
+
- [ ] Semantic HTML elements used appropriately
|
|
437
|
+
- [ ] No typography styling applied directly
|
|
438
|
+
- [ ] No wrapper elements for styling only
|
|
439
|
+
- [ ] React Fragments used instead of unnecessary wrappers
|
|
440
|
+
- [ ] Minimal element nesting
|
|
441
|
+
- [ ] Every element has clear semantic purpose
|
|
442
|
+
- [ ] No custom styles overriding pace-core components
|
|
443
|
+
- [ ] Layout handled by pace-core or semantic parents
|
|
444
|
+
- [ ] Code is semantically correct and accessible
|
|
445
|
+
|
|
446
|
+
## Reference
|
|
447
|
+
|
|
448
|
+
- **pace-core Components**: See `00-pace-core-compliance.mdc` for component usage
|
|
449
|
+
- **Semantic HTML**: https://developer.mozilla.org/en-US/docs/Glossary/Semantics
|
|
450
|
+
- **React Fragments**: https://react.dev/reference/react/Fragment
|
|
451
|
+
- **Accessibility**: See `06-code-quality.mdc` for accessibility requirements
|
|
452
|
+
- **When in doubt**: Remove the element, remove the style, and rely on pace-core or semantic HTML
|
|
@@ -7,6 +7,23 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
7
7
|
|
|
8
8
|
## [Unreleased]
|
|
9
9
|
|
|
10
|
+
### Added
|
|
11
|
+
- **08-markup-quality.mdc** - Enforces clean markup standards, semantic HTML usage, and pace-core component patterns
|
|
12
|
+
|
|
13
|
+
## [1.1.0] - 2025-01-28
|
|
14
|
+
|
|
15
|
+
### Added
|
|
16
|
+
- **08-markup-quality.mdc** - Comprehensive guide for markup quality, semantic HTML, and pace-core component usage patterns
|
|
17
|
+
- Enforces pace-core component usage over custom solutions
|
|
18
|
+
- Prohibits `<div>` elements (except first child of `<body>` in `index.html`)
|
|
19
|
+
- Requires semantic HTML elements (`<main>`, `<section>`, `<article>`, etc.)
|
|
20
|
+
- Prohibits typography styling (relies on pace-core core.css)
|
|
21
|
+
- Requires React Fragments for grouping without semantic meaning
|
|
22
|
+
- Enforces minimal element nesting and clear semantic purpose
|
|
23
|
+
- Includes decision tree and comprehensive checklist
|
|
24
|
+
|
|
25
|
+
## [1.0.0] - 2025-01-15
|
|
26
|
+
|
|
10
27
|
### Added
|
|
11
28
|
- Initial release of cursor rules system
|
|
12
29
|
- 8 comprehensive rule files covering compliance, standards, structure, SOLID, testing, bug reports, code quality, and tech stack
|
|
@@ -89,6 +106,7 @@ This ensures pace-core rules (00-09) load first.
|
|
|
89
106
|
|
|
90
107
|
## Version History
|
|
91
108
|
|
|
109
|
+
- **1.1.0** (2025-01-28) - Added markup quality rule (08-markup-quality.mdc)
|
|
92
110
|
- **1.0.0** (2025-01-15) - Initial release
|
|
93
111
|
|
|
94
112
|
## Future Enhancements
|
package/cursor-rules/README.md
CHANGED
|
@@ -38,7 +38,7 @@ Copy all `.mdc` files from `node_modules/@jmruthers/pace-core/cursor-rules/` to
|
|
|
38
38
|
|
|
39
39
|
## Rule Files
|
|
40
40
|
|
|
41
|
-
The rules are numbered for ordering (00-
|
|
41
|
+
The rules are numbered for ordering (00-08):
|
|
42
42
|
|
|
43
43
|
- **00-pace-core-compliance.mdc** - Enforce pace-core usage patterns
|
|
44
44
|
- **01-standards-compliance.mdc** - Enforce all pace-core standards
|
|
@@ -48,6 +48,7 @@ The rules are numbered for ordering (00-07):
|
|
|
48
48
|
- **05-bug-reports-and-features.mdc** - Templates for bug reports and feature requests (guidance-only)
|
|
49
49
|
- **06-code-quality.mdc** - Enforce code quality standards
|
|
50
50
|
- **07-tech-stack-compliance.mdc** - Enforce tech stack versions and patterns
|
|
51
|
+
- **08-markup-quality.mdc** - Enforce clean markup standards, semantic HTML usage, and pace-core component patterns
|
|
51
52
|
|
|
52
53
|
## Rule Numbering System
|
|
53
54
|
|
|
@@ -93,6 +93,8 @@ interface IEventService {
|
|
|
93
93
|
*/
|
|
94
94
|
|
|
95
95
|
declare class EventService extends BaseService implements IEventService {
|
|
96
|
+
private static instanceCount;
|
|
97
|
+
private instanceId;
|
|
96
98
|
private events;
|
|
97
99
|
private selectedEvent;
|
|
98
100
|
private _isLoading;
|
|
@@ -104,12 +106,12 @@ declare class EventService extends BaseService implements IEventService {
|
|
|
104
106
|
private selectedOrganisation;
|
|
105
107
|
private setSelectedEventId;
|
|
106
108
|
private isSuperAdmin;
|
|
107
|
-
private appConfig;
|
|
108
109
|
private isInitializedRef;
|
|
109
110
|
private isFetchingRef;
|
|
110
111
|
private hasAutoSelectedRef;
|
|
111
112
|
private userClearedEventRef;
|
|
112
113
|
constructor(supabaseClient: SupabaseClient, user: User | null, session: Session | null, appName: string, selectedOrganisation: Organisation | null, setSelectedEventId: (eventId: string | null) => void);
|
|
114
|
+
getInstanceId(): number;
|
|
113
115
|
private getStorageKey;
|
|
114
116
|
updateDependencies(supabaseClient: SupabaseClient, user: User | null, session: Session | null, appName: string, selectedOrganisation: Organisation | null, setSelectedEventId: (eventId: string | null) => void): Promise<void>;
|
|
115
117
|
getEvents(): Event[];
|
|
@@ -141,10 +143,21 @@ declare class EventService extends BaseService implements IEventService {
|
|
|
141
143
|
getNextEventByDate(events?: Event[]): Event | null;
|
|
142
144
|
}
|
|
143
145
|
|
|
146
|
+
/**
|
|
147
|
+
* Event service context type.
|
|
148
|
+
* Provides event service instance to React components.
|
|
149
|
+
*/
|
|
144
150
|
interface EventServiceContextType {
|
|
145
151
|
eventService: EventService;
|
|
146
152
|
}
|
|
153
|
+
/**
|
|
154
|
+
* Context for EventService.
|
|
155
|
+
* Provides event service instance to React components.
|
|
156
|
+
*/
|
|
147
157
|
declare const EventServiceContext: React__default.Context<EventServiceContextType | null>;
|
|
158
|
+
/**
|
|
159
|
+
* Props for the EventServiceProvider component.
|
|
160
|
+
*/
|
|
148
161
|
interface EventServiceProviderProps {
|
|
149
162
|
children: React__default.ReactNode;
|
|
150
163
|
supabaseClient: SupabaseClient;
|
|
@@ -154,6 +167,13 @@ interface EventServiceProviderProps {
|
|
|
154
167
|
selectedOrganisation: Organisation | null;
|
|
155
168
|
setSelectedEventId: (eventId: string | null) => void;
|
|
156
169
|
}
|
|
170
|
+
/**
|
|
171
|
+
* React provider for EventService.
|
|
172
|
+
* Provides event service instance to React components.
|
|
173
|
+
*
|
|
174
|
+
* @param props - Event service provider configuration
|
|
175
|
+
* @returns The event service provider
|
|
176
|
+
*/
|
|
157
177
|
declare function EventServiceProvider({ children, supabaseClient, user, session, appName, selectedOrganisation, setSelectedEventId }: EventServiceProviderProps): react_jsx_runtime.JSX.Element;
|
|
158
178
|
|
|
159
179
|
/**
|
|
@@ -197,6 +217,8 @@ interface IOrganisationService {
|
|
|
197
217
|
*/
|
|
198
218
|
|
|
199
219
|
declare class OrganisationService extends BaseService implements IOrganisationService {
|
|
220
|
+
private static instanceCount;
|
|
221
|
+
private instanceId;
|
|
200
222
|
private _selectedOrganisation;
|
|
201
223
|
private _organisations;
|
|
202
224
|
private _userMemberships;
|
|
@@ -214,6 +236,7 @@ declare class OrganisationService extends BaseService implements IOrganisationSe
|
|
|
214
236
|
private hasFailedRef;
|
|
215
237
|
private abortControllerRef;
|
|
216
238
|
constructor(supabaseClient: SupabaseClient, user: User | null, session: Session | null);
|
|
239
|
+
getInstanceId(): number;
|
|
217
240
|
getSelectedOrganisation(): Organisation | null;
|
|
218
241
|
getOrganisations(): Organisation[];
|
|
219
242
|
getUserMemberships(): OrganisationMembership[];
|
|
@@ -246,16 +269,34 @@ declare class OrganisationService extends BaseService implements IOrganisationSe
|
|
|
246
269
|
private clearAllCachedData;
|
|
247
270
|
}
|
|
248
271
|
|
|
272
|
+
/**
|
|
273
|
+
* Organisation service context type.
|
|
274
|
+
* Provides organisation service instance to React components.
|
|
275
|
+
*/
|
|
249
276
|
interface OrganisationServiceContextType {
|
|
250
277
|
organisationService: OrganisationService;
|
|
251
278
|
}
|
|
279
|
+
/**
|
|
280
|
+
* Context for OrganisationService.
|
|
281
|
+
* Provides organisation service instance to React components.
|
|
282
|
+
*/
|
|
252
283
|
declare const OrganisationServiceContext: React__default.Context<OrganisationServiceContextType | null>;
|
|
284
|
+
/**
|
|
285
|
+
* Props for the OrganisationServiceProvider component.
|
|
286
|
+
*/
|
|
253
287
|
interface OrganisationServiceProviderProps {
|
|
254
288
|
children: React__default.ReactNode;
|
|
255
289
|
supabaseClient: SupabaseClient;
|
|
256
290
|
user: User | null;
|
|
257
291
|
session: Session | null;
|
|
258
292
|
}
|
|
293
|
+
/**
|
|
294
|
+
* React provider for OrganisationService.
|
|
295
|
+
* Provides organisation service instance to React components.
|
|
296
|
+
*
|
|
297
|
+
* @param props - Organisation service provider configuration
|
|
298
|
+
* @returns The organisation service provider
|
|
299
|
+
*/
|
|
259
300
|
declare function OrganisationServiceProvider({ children, supabaseClient, user, session }: OrganisationServiceProviderProps): react_jsx_runtime.JSX.Element;
|
|
260
301
|
|
|
261
302
|
/**
|
|
@@ -343,10 +384,21 @@ declare class InactivityService extends BaseService implements IInactivityServic
|
|
|
343
384
|
private setupEventHandlers;
|
|
344
385
|
}
|
|
345
386
|
|
|
387
|
+
/**
|
|
388
|
+
* Inactivity service context type.
|
|
389
|
+
* Provides inactivity service instance to React components.
|
|
390
|
+
*/
|
|
346
391
|
interface InactivityServiceContextType {
|
|
347
392
|
inactivityService: InactivityService;
|
|
348
393
|
}
|
|
394
|
+
/**
|
|
395
|
+
* Context for InactivityService.
|
|
396
|
+
* Provides inactivity service instance to React components.
|
|
397
|
+
*/
|
|
349
398
|
declare const InactivityServiceContext: React__default.Context<InactivityServiceContextType | null>;
|
|
399
|
+
/**
|
|
400
|
+
* Props for the InactivityServiceProvider component.
|
|
401
|
+
*/
|
|
350
402
|
interface InactivityServiceProviderProps {
|
|
351
403
|
children: React__default.ReactNode;
|
|
352
404
|
supabaseClient: SupabaseClient;
|
|
@@ -356,6 +408,13 @@ interface InactivityServiceProviderProps {
|
|
|
356
408
|
warnBeforeMs: number;
|
|
357
409
|
onIdleLogout: (reason: 'inactivity') => void;
|
|
358
410
|
}
|
|
411
|
+
/**
|
|
412
|
+
* React provider for InactivityService.
|
|
413
|
+
* Provides inactivity service instance to React components.
|
|
414
|
+
*
|
|
415
|
+
* @param props - Inactivity service provider configuration
|
|
416
|
+
* @returns The inactivity service provider
|
|
417
|
+
*/
|
|
359
418
|
declare function InactivityServiceProvider({ children, supabaseClient, user, session, idleTimeoutMs, // REQUIRED: No default - must be explicitly provided
|
|
360
419
|
warnBeforeMs, // REQUIRED: No default - must be explicitly provided
|
|
361
420
|
onIdleLogout }: InactivityServiceProviderProps): react_jsx_runtime.JSX.Element;
|
|
@@ -403,6 +462,8 @@ interface IAuthService {
|
|
|
403
462
|
*/
|
|
404
463
|
|
|
405
464
|
declare class AuthService extends BaseService implements IAuthService {
|
|
465
|
+
private static instanceCount;
|
|
466
|
+
private instanceId;
|
|
406
467
|
private user;
|
|
407
468
|
private session;
|
|
408
469
|
private authLoading;
|
|
@@ -417,6 +478,7 @@ declare class AuthService extends BaseService implements IAuthService {
|
|
|
417
478
|
private errorHandler;
|
|
418
479
|
private unhandledRejectionHandler;
|
|
419
480
|
constructor(supabaseClient: SupabaseClient, appName?: string);
|
|
481
|
+
getInstanceId(): number;
|
|
420
482
|
getUser(): User | null;
|
|
421
483
|
getSession(): Session | null;
|
|
422
484
|
isAuthenticated(): boolean;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
2
|
-
import { d as DataRecord, D as DataTableColumn, e as DataTableRBACConfig, f as DataTableFeatureConfig, H as HierarchicalConfig, g as PerformanceConfig, S as ServerSideConfig, h as PaginationMode, C as ChunkingConfig, i as SearchIndexConfig, j as ExportOptions, G as GetRowId, E as EmptyStateConfig, c as AggregateConfig, a as DataTableAction } from './types-
|
|
2
|
+
import { d as DataRecord, D as DataTableColumn, e as DataTableRBACConfig, f as DataTableFeatureConfig, H as HierarchicalConfig, g as PerformanceConfig, S as ServerSideConfig, h as PaginationMode, C as ChunkingConfig, i as SearchIndexConfig, j as ExportOptions, G as GetRowId, E as EmptyStateConfig, c as AggregateConfig, a as DataTableAction } from './types-CkbwOr4Y.js';
|
|
3
3
|
import React__default from 'react';
|
|
4
4
|
|
|
5
5
|
/**
|
|
@@ -129,6 +129,38 @@ interface DataTableProps<TData extends DataRecord> {
|
|
|
129
129
|
*
|
|
130
130
|
* Features are configured through the unified `features` prop for maximum flexibility.
|
|
131
131
|
*/
|
|
132
|
+
/**
|
|
133
|
+
* Enhanced DataTable component with performance optimizations and comprehensive features.
|
|
134
|
+
*
|
|
135
|
+
* This is the main entry point for the DataTable component. It wraps DataTableCore
|
|
136
|
+
* and provides feature normalization and validation.
|
|
137
|
+
*
|
|
138
|
+
* @template TData - The type of data records in the table
|
|
139
|
+
* @param props - DataTable configuration including data, columns, features, and RBAC
|
|
140
|
+
* @returns The rendered DataTable component
|
|
141
|
+
*
|
|
142
|
+
* @example
|
|
143
|
+
* ```tsx
|
|
144
|
+
* <DataTable
|
|
145
|
+
* data={users}
|
|
146
|
+
* columns={userColumns}
|
|
147
|
+
* rbac={{ pageId: 'user-management' }}
|
|
148
|
+
* features={{
|
|
149
|
+
* search: true,
|
|
150
|
+
* pagination: true,
|
|
151
|
+
* sorting: true
|
|
152
|
+
* }}
|
|
153
|
+
* />
|
|
154
|
+
* ```
|
|
155
|
+
*/
|
|
156
|
+
/**
|
|
157
|
+
* Comprehensive, feature-rich data table component built on top of TanStack Table.
|
|
158
|
+
* Provides advanced data management capabilities with a clean, accessible interface.
|
|
159
|
+
*
|
|
160
|
+
* @template TData - The type of data records in the table
|
|
161
|
+
* @param props - DataTable configuration and props
|
|
162
|
+
* @returns The rendered DataTable component
|
|
163
|
+
*/
|
|
132
164
|
declare function DataTable<TData extends DataRecord>(props: DataTableProps<TData>): react_jsx_runtime.JSX.Element;
|
|
133
165
|
|
|
134
166
|
export { DataTable as D, type DataTableProps as a };
|