@jmruthers/pace-core 0.6.10 → 0.6.11
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +21 -0
- package/audit-tool/00-dependencies.cjs +46 -13
- package/audit-tool/audits/01-pace-core-compliance.cjs +96 -21
- package/audit-tool/audits/02-project-structure.cjs +13 -3
- package/audit-tool/audits/03-architecture.cjs +78 -4
- package/audit-tool/audits/04-code-quality.cjs +9 -2
- package/audit-tool/audits/05-styling.cjs +19 -7
- package/audit-tool/audits/06-security-rbac.cjs +105 -14
- package/audit-tool/audits/07-api-tech-stack.cjs +31 -15
- package/audit-tool/audits/08-testing-documentation.cjs +11 -3
- package/audit-tool/audits/09-operations.cjs +19 -7
- package/audit-tool/index.cjs +22 -11
- package/audit-tool/utils/report-utils.cjs +4 -0
- package/cursor-rules/01-pace-core-compliance.mdc +1 -0
- package/cursor-rules/02-project-structure.mdc +1 -0
- package/cursor-rules/03-architecture.mdc +3 -1
- package/cursor-rules/04-code-quality.mdc +1 -0
- package/cursor-rules/05-styling.mdc +41 -7
- package/cursor-rules/06-security-rbac.mdc +2 -1
- package/cursor-rules/07-api-tech-stack.mdc +1 -0
- package/cursor-rules/08-testing-documentation.mdc +1 -0
- package/cursor-rules/09-operations.mdc +1 -0
- package/dist/{DataTable-SAXFG4XI.js → DataTable-EFYP2QLE.js} +10 -7
- package/dist/{InactivityServiceProvider-DHryoh6K.d.ts → InactivityServiceProvider-BbxwwDz1.d.ts} +10 -1
- package/dist/{UnifiedAuthProvider-CiBAl9-s.d.ts → UnifiedAuthProvider-Bkt_tzdS.d.ts} +56 -24
- package/dist/{api-F47QJ7FX.js → api-BZR2CYXL.js} +3 -2
- package/dist/api-result-USV1Czr-.d.ts +51 -0
- package/dist/{audit-Z6ZZBWLU.js → audit-HI2DHUVU.js} +2 -1
- package/dist/{auth-BZOJqrdd.d.ts → auth-JvdRVaud.d.ts} +1 -1
- package/dist/{chunk-KSNLMI7N.js → chunk-2DL2WSOE.js} +1 -155
- package/dist/{chunk-MPY44PWB.js → chunk-2OEVOGGR.js} +4648 -3560
- package/dist/chunk-44CNXN4P.js +15 -0
- package/dist/{chunk-Y4PF6HIM.js → chunk-4R3T5ENU.js} +867 -786
- package/dist/{chunk-LNHFAF4X.js → chunk-7A6IMHH2.js} +289 -247
- package/dist/chunk-CU2BU2MQ.js +2 -0
- package/dist/{chunk-JJEYZ3DX.js → chunk-D6BMFMQZ.js} +37 -2
- package/dist/{chunk-BCTXBU6U.js → chunk-ENLXB7GP.js} +88 -71
- package/dist/{chunk-FBZ7U3ID.js → chunk-J2KQK6DG.js} +937 -987
- package/dist/{chunk-TFIPNIPE.js → chunk-KJXRL3XE.js} +3300 -2245
- package/dist/{chunk-3GWSPISD.js → chunk-L5LFKKLJ.js} +1 -1
- package/dist/{chunk-X5EAU5G7.js → chunk-PCSHBLPB.js} +132 -114
- package/dist/{chunk-NIU6DPQV.js → chunk-QRYSEPHB.js} +2 -0
- package/dist/{chunk-KYURMOQM.js → chunk-V7FTM2LU.js} +423 -320
- package/dist/chunk-WY6Y7KC3.js +264 -0
- package/dist/{chunk-FN52B75D.js → chunk-XOJME5T7.js} +176 -15
- package/dist/{chunk-7YDC7LMU.js → chunk-XPFVT3GN.js} +71 -66
- package/dist/{chunk-66R6RLUZ.js → chunk-YFTFFJIV.js} +3 -3
- package/dist/{chunk-W46INAVW.js → chunk-YYTWKVHO.js} +688 -570
- package/dist/components.d.ts +8 -7
- package/dist/components.js +17 -15
- package/dist/{database.generated-DT8JTZiP.d.ts → database.generated-qkdoiVrJ.d.ts} +45 -10
- package/dist/eslint-rules/index.cjs +3 -0
- package/dist/eslint-rules/rules/03-architecture.cjs +74 -0
- package/dist/eslint-rules/rules/06-security-rbac.cjs +74 -0
- package/dist/{event-WTAQuGcq.d.ts → event-BfCox3N2.d.ts} +36 -10
- package/dist/{file-reference-BavO2eQj.d.ts → file-reference-DU1hcawx.d.ts} +29 -13
- package/dist/hooks.d.ts +22 -9
- package/dist/hooks.js +34 -25
- package/dist/icons/index.d.ts +1 -0
- package/dist/icons/index.js +1 -0
- package/dist/index.d.ts +66 -177
- package/dist/index.js +316 -340
- package/dist/pagination-BW1mqywp.d.ts +201 -0
- package/dist/providers.d.ts +6 -5
- package/dist/providers.js +5 -3
- package/dist/rbac/index.d.ts +123 -138
- package/dist/rbac/index.js +10 -8
- package/dist/theming/runtime.d.ts +19 -2
- package/dist/theming/runtime.js +1 -1
- package/dist/{timezone-K-ptz3HO.d.ts → timezone-BTWWXKVY.d.ts} +1 -1
- package/dist/types.d.ts +17 -10
- package/dist/types.js +1 -0
- package/dist/{usePublicPageContext-vxBlEHO9.d.ts → usePublicPageContext-B91dGYW1.d.ts} +433 -356
- package/dist/{usePublicRouteParams-G3Ks53mk.d.ts → usePublicRouteParams-BgV6VhMi.d.ts} +73 -4
- package/dist/utils.d.ts +163 -145
- package/dist/utils.js +42 -25
- package/docs/api/modules.md +782 -643
- package/docs/api-reference/rpc-functions.md +12 -3
- package/docs/core-concepts/rbac-system.md +8 -0
- package/docs/getting-started/cursor-rules.md +17 -20
- package/docs/getting-started/dependencies.md +1 -1
- package/docs/getting-started/setup.md +235 -0
- package/docs/implementation-guides/authentication.md +27 -0
- package/docs/implementation-guides/data-tables.md +176 -3
- package/docs/migration/ApiResult-migration.md +25 -0
- package/docs/rbac/api-reference.md +33 -31
- package/docs/standards/0-standards-overview.md +50 -15
- package/docs/standards/1-pace-core-compliance-standards.md +62 -57
- package/docs/standards/2-project-structure-standards.md +33 -16
- package/docs/standards/3-architecture-standards.md +41 -1
- package/docs/standards/4-code-quality-standards.md +26 -6
- package/docs/standards/5-styling-standards.md +35 -1
- package/docs/standards/6-security-rbac-standards.md +66 -0
- package/docs/standards/7-api-tech-stack-standards.md +25 -14
- package/docs/standards/8-testing-documentation-standards.md +31 -0
- package/docs/standards/9-operations-standards.md +19 -0
- package/docs/standards/README.md +20 -201
- package/docs/testing/test-setup-for-consumers.md +2 -0
- package/docs/troubleshooting/common-issues.md +17 -1
- package/docs/troubleshooting/organisation-context-setup.md +8 -0
- package/docs/troubleshooting/print-event-name-css-variable-analysis.md +217 -0
- package/eslint-config-pace-core.cjs +20 -0
- package/package.json +14 -20
- package/scripts/{build-docs-incremental.js → build-docs.js} +3 -2
- package/scripts/setup.cjs +536 -0
- package/scripts/validate.cjs +480 -0
- package/src/__tests__/helpers/{__tests__/component-test-utils.test.tsx → component-test-utils.test.tsx} +3 -3
- package/src/__tests__/helpers/{__tests__/optimized-test-setup.test.ts → optimized-test-setup.test.ts} +2 -2
- package/src/__tests__/helpers/{__tests__/supabaseMock.test.ts → supabaseMock.test.ts} +2 -2
- package/src/__tests__/helpers/{__tests__/test-providers.test.tsx → test-providers.test.tsx} +1 -1
- package/src/__tests__/helpers/test-providers.tsx +37 -39
- package/src/__tests__/helpers/{__tests__/test-utils.test.tsx → test-utils.test.tsx} +4 -3
- package/src/__tests__/helpers/{__tests__/timer-utils.test.ts → timer-utils.test.ts} +2 -2
- package/src/assets/app-icons/index.test.ts +304 -0
- package/src/components/AddressField/AddressField.test.tsx +1 -1
- package/src/components/AddressField/AddressField.tsx +238 -212
- package/src/components/Button/Button.tsx +1 -1
- package/src/components/Card/Card.test.tsx +172 -17
- package/src/components/Card/Card.tsx +19 -10
- package/src/components/ContextSelector/ContextSelector.internals.tsx +204 -0
- package/src/components/ContextSelector/{__tests__/ContextSelector.test.tsx → ContextSelector.test.tsx} +6 -6
- package/src/components/ContextSelector/ContextSelector.tsx +66 -280
- package/src/components/ContextSelector/ContextSelector.types.ts +35 -0
- package/src/components/ContextSelector/useContextSelectorState.tsx +195 -0
- package/src/components/DataTable/AUDIT_REPORT.md +59 -44
- package/src/components/DataTable/{__tests__/DataTable.comprehensive.test.tsx → DataTable.comprehensive.test.tsx} +6 -6
- package/src/components/DataTable/{__tests__/DataTable.default-state.test.tsx → DataTable.default-state.test.tsx} +5 -5
- package/src/components/DataTable/{__tests__/DataTable.export.test.tsx → DataTable.export.test.tsx} +10 -10
- package/src/components/DataTable/{__tests__/DataTable.grouping-aggregation.test.tsx → DataTable.grouping-aggregation.test.tsx} +6 -6
- package/src/components/DataTable/{__tests__/DataTable.hooks.test.tsx → DataTable.hooks.test.tsx} +6 -6
- package/src/components/DataTable/{__tests__/DataTable.select-label-display.test.tsx → DataTable.select-label-display.test.tsx} +6 -6
- package/src/components/DataTable/DataTable.test.tsx +787 -416
- package/src/components/DataTable/DataTable.tsx +12 -12
- package/src/components/DataTable/DataTableCore.integration.test.tsx +458 -0
- package/src/components/DataTable/{__tests__/DataTableCore.test-setup.ts → DataTableCore.test-setup.ts} +10 -9
- package/src/components/DataTable/{__tests__/DataTableCore.test.tsx → DataTableCore.test.tsx} +8 -8
- package/src/components/DataTable/{__tests__/README.md → README.md} +17 -7
- package/src/components/DataTable/TESTING.md +101 -0
- package/src/components/DataTable/{__tests__/a11y.basic.test.tsx → a11y.basic.test.tsx} +34 -34
- package/src/components/DataTable/components/DataTableCore.tsx +104 -864
- package/src/components/DataTable/components/{__tests__/GroupingDropdown.test.tsx → GroupingDropdown.test.tsx} +17 -8
- package/src/components/DataTable/components/GroupingDropdown.tsx +2 -2
- package/src/components/DataTable/components/ImportModal.tsx +61 -559
- package/src/components/DataTable/components/ImportModalFileSection.tsx +148 -0
- package/src/components/DataTable/context/{__tests__/DataTableContext.test.tsx → DataTableContext.test.tsx} +2 -2
- package/src/components/DataTable/context/DataTableContext.tsx +7 -6
- package/src/components/DataTable/core/{__tests__/ColumnFactory.test.ts → ColumnFactory.test.ts} +2 -2
- package/src/components/DataTable/hooks/{__tests__/useColumnOrderPersistence.test.ts → useColumnOrderPersistence.test.ts} +2 -2
- package/src/components/DataTable/hooks/{__tests__/useColumnVisibilityPersistence.test.ts → useColumnVisibilityPersistence.test.ts} +2 -2
- package/src/components/DataTable/hooks/{__tests__/useDataTableConfiguration.test.ts → useDataTableConfiguration.test.ts} +3 -3
- package/src/components/DataTable/hooks/useDataTableConfiguration.ts +14 -2
- package/src/components/DataTable/hooks/{__tests__/useDataTableDataPipeline.test.ts → useDataTableDataPipeline.test.ts} +6 -6
- package/src/components/DataTable/hooks/useDataTableDeletionBatching.test.ts +127 -0
- package/src/components/DataTable/hooks/useDataTableDeletionBatching.ts +106 -0
- package/src/components/DataTable/hooks/useDataTableEffectiveActions.test.ts +461 -0
- package/src/components/DataTable/hooks/useDataTableEffectiveActions.ts +238 -0
- package/src/components/DataTable/hooks/useDataTableLayoutHandlers.test.ts +296 -0
- package/src/components/DataTable/hooks/useDataTableLayoutHandlers.ts +175 -0
- package/src/components/DataTable/hooks/useDataTablePaginationSync.test.ts +203 -0
- package/src/components/DataTable/hooks/useDataTablePaginationSync.ts +109 -0
- package/src/components/DataTable/hooks/{__tests__/useDataTablePermissions.test.ts → useDataTablePermissions.test.ts} +11 -11
- package/src/components/DataTable/hooks/useDataTablePermissions.ts +79 -247
- package/src/components/DataTable/hooks/useDataTablePipeline.test.tsx +219 -0
- package/src/components/DataTable/hooks/useDataTablePipeline.tsx +239 -0
- package/src/components/DataTable/hooks/useDataTableRenderGuard.test.tsx +316 -0
- package/src/components/DataTable/hooks/useDataTableRenderGuard.tsx +195 -0
- package/src/components/DataTable/hooks/useDataTableScope.test.ts +110 -0
- package/src/components/DataTable/hooks/useDataTableScope.ts +123 -0
- package/src/components/DataTable/hooks/{__tests__/useDataTableState.test.ts → useDataTableState.test.ts} +47 -5
- package/src/components/DataTable/hooks/useDataTableState.ts +145 -94
- package/src/components/DataTable/hooks/useDataTableStateAndPersistence.test.ts +277 -0
- package/src/components/DataTable/hooks/useDataTableStateAndPersistence.ts +222 -0
- package/src/components/DataTable/hooks/useDataTableSuperAdmin.test.ts +93 -0
- package/src/components/DataTable/hooks/useDataTableSuperAdmin.ts +86 -0
- package/src/components/DataTable/hooks/useDataTableTableInstance.test.ts +185 -0
- package/src/components/DataTable/hooks/useDataTableTableInstance.ts +178 -0
- package/src/components/DataTable/hooks/{__tests__/useEffectiveColumnOrder.test.ts → useEffectiveColumnOrder.test.ts} +2 -2
- package/src/components/DataTable/hooks/{__tests__/useHierarchicalState.test.ts → useHierarchicalState.test.ts} +2 -2
- package/src/components/DataTable/{components/hooks → hooks}/useImportModalFocus.test.ts +3 -3
- package/src/components/DataTable/{components/hooks → hooks}/useImportModalFocus.ts +2 -2
- package/src/components/DataTable/hooks/useImportModalState.test.ts +390 -0
- package/src/components/DataTable/hooks/useImportModalState.ts +345 -0
- package/src/components/DataTable/hooks/{__tests__/useKeyboardNavigation.test.ts → useKeyboardNavigation.test.ts} +3 -3
- package/src/components/DataTable/hooks/useKeyboardNavigation.ts +309 -269
- package/src/components/DataTable/{components/hooks → hooks}/usePermissionTracking.test.ts +3 -3
- package/src/components/DataTable/{components/hooks → hooks}/usePermissionTracking.ts +3 -3
- package/src/components/DataTable/hooks/{__tests__/useServerSideDataEffect.test.ts → useServerSideDataEffect.test.ts} +2 -2
- package/src/components/DataTable/hooks/useServerSideDataEffect.ts +14 -3
- package/src/components/DataTable/hooks/{__tests__/useTableColumns.test.ts → useTableColumns.test.ts} +2 -2
- package/src/components/DataTable/hooks/{__tests__/useTableHandlers.test.ts → useTableHandlers.test.ts} +25 -4
- package/src/components/DataTable/hooks/useTableHandlers.ts +5 -2
- package/src/components/DataTable/index.ts +18 -17
- package/src/components/DataTable/{__tests__/keyboard.test.tsx → keyboard.test.tsx} +41 -63
- package/src/components/DataTable/{__tests__/mocks → mocks}/MockRBACProvider.tsx +1 -1
- package/src/components/DataTable/{__tests__/pagination.modes.test.tsx → pagination.modes.test.tsx} +6 -6
- package/src/components/DataTable/{__tests__/ssr.strict-mode.test.tsx → ssr.strict-mode.test.tsx} +2 -2
- package/src/components/DataTable/{__tests__/styles.test.ts → styles.test.ts} +1 -4
- package/src/components/DataTable/styles.ts +0 -1
- package/src/components/DataTable/test-utils/MockDataTableComponents.tsx +55 -0
- package/src/components/DataTable/{__tests__/test-utils → test-utils}/dataFactories.ts +2 -2
- package/src/components/DataTable/test-utils/featureConfig.ts +10 -0
- package/src/components/DataTable/{__tests__/test-utils/sharedTestUtils.tsx → test-utils/sharedTestUtils.ts} +97 -66
- package/src/components/DataTable/{__tests__/test-utils.ts → test-utils.ts} +1 -1
- package/src/components/DataTable/types/actions.ts +71 -0
- package/src/components/DataTable/types/base.ts +39 -0
- package/src/components/DataTable/types/columns.ts +125 -0
- package/src/components/DataTable/types/export.ts +32 -0
- package/src/components/DataTable/types/features.ts +81 -0
- package/src/components/DataTable/types/hierarchical.ts +44 -0
- package/src/components/DataTable/types/index.ts +43 -0
- package/src/components/DataTable/types/pagination.ts +85 -0
- package/src/components/DataTable/types/performance.ts +47 -0
- package/src/components/DataTable/types/props.ts +62 -0
- package/src/components/DataTable/types/rbac.ts +45 -0
- package/src/components/DataTable/{components/__tests__ → ui/layout}/DataTableCore.test.tsx +430 -28
- package/src/components/DataTable/ui/layout/DataTableCore.tsx +345 -0
- package/src/components/DataTable/{components/__tests__ → ui/layout}/DataTableErrorBoundary.test.tsx +4 -4
- package/src/components/DataTable/{components → ui/layout}/DataTableErrorBoundary.tsx +7 -7
- package/src/components/DataTable/ui/layout/DataTableLayout.test.tsx +1352 -0
- package/src/components/DataTable/ui/layout/DataTableLayout.tsx +661 -0
- package/src/components/DataTable/ui/modals/BulkDeleteConfirmDialog.test.tsx +91 -0
- package/src/components/DataTable/ui/modals/BulkDeleteConfirmDialog.tsx +43 -0
- package/src/components/DataTable/ui/modals/DataTableModals.test.tsx +749 -0
- package/src/components/DataTable/{components → ui/modals}/DataTableModals.tsx +36 -28
- package/src/components/DataTable/ui/modals/ImportModal.test.tsx +1834 -0
- package/src/components/DataTable/ui/modals/ImportModal.tsx +197 -0
- package/src/components/DataTable/ui/modals/ImportModalFailedRowsSection.tsx +60 -0
- package/src/components/DataTable/ui/modals/ImportModalFileSection.tsx +148 -0
- package/src/components/DataTable/ui/modals/ImportModalPreviewSection.tsx +60 -0
- package/src/components/DataTable/ui/modals/ImportModalSummarySection.tsx +59 -0
- package/src/components/DataTable/ui/modals/importModalPersistence.ts +73 -0
- package/src/components/DataTable/{components/__tests__ → ui/shared}/AccessDeniedPage.test.tsx +2 -2
- package/src/components/DataTable/{components → ui/shared}/AccessDeniedPage.tsx +2 -2
- package/src/components/DataTable/{components/__tests__ → ui/shared}/ActionButtons.test.tsx +6 -4
- package/src/components/DataTable/{components → ui/shared}/ActionButtons.tsx +4 -4
- package/src/components/DataTable/{components/__tests__ → ui/shared}/ColumnFilter.test.tsx +29 -16
- package/src/components/DataTable/{components → ui/shared}/ColumnFilter.tsx +4 -4
- package/src/components/DataTable/{components/__tests__ → ui/shared}/PaginationControls.test.tsx +38 -16
- package/src/components/DataTable/{components → ui/shared}/PaginationControls.tsx +21 -15
- package/src/components/DataTable/{components/__tests__ → ui/shared}/SortIndicator.test.tsx +2 -2
- package/src/components/DataTable/{components → ui/shared}/SortIndicator.tsx +1 -1
- package/src/components/DataTable/{components/__tests__ → ui/table}/EditFields.test.tsx +3 -3
- package/src/components/DataTable/{components → ui/table}/EditFields.tsx +138 -69
- package/src/components/DataTable/{components/__tests__ → ui/table}/EditableRow.test.tsx +36 -27
- package/src/components/DataTable/{components → ui/table}/EditableRow.tsx +86 -104
- package/src/components/DataTable/{components/__tests__ → ui/table}/EmptyState.test.tsx +2 -62
- package/src/components/DataTable/{components → ui/table}/EmptyState.tsx +7 -15
- package/src/components/DataTable/{components/__tests__ → ui/table}/FilterRow.test.tsx +5 -4
- package/src/components/DataTable/{components → ui/table}/FilterRow.tsx +3 -3
- package/src/components/DataTable/{components/__tests__ → ui/table}/LoadingState.test.tsx +6 -10
- package/src/components/DataTable/{components → ui/table}/LoadingState.tsx +4 -4
- package/src/components/DataTable/{components/__tests__ → ui/table}/RowComponent.test.tsx +412 -17
- package/src/components/DataTable/{components → ui/table}/RowComponent.tsx +183 -177
- package/src/components/DataTable/{components/__tests__ → ui/table}/UnifiedTableBody.test.tsx +425 -16
- package/src/components/DataTable/ui/table/UnifiedTableBody.tsx +440 -0
- package/src/components/DataTable/{components/__tests__ → ui/table}/cellValueUtils.test.ts +2 -2
- package/src/components/DataTable/{components → ui/table}/cellValueUtils.ts +1 -1
- package/src/components/DataTable/{components/__tests__ → ui/toolbar}/BulkOperationsDropdown.test.tsx +12 -5
- package/src/components/DataTable/{components → ui/toolbar}/BulkOperationsDropdown.tsx +3 -3
- package/src/components/DataTable/{components/__tests__ → ui/toolbar}/ColumnVisibilityDropdown.test.tsx +7 -4
- package/src/components/DataTable/{components → ui/toolbar}/ColumnVisibilityDropdown.tsx +7 -7
- package/src/components/DataTable/{components/__tests__ → ui/toolbar}/DataTableToolbar.test.tsx +4 -4
- package/src/components/DataTable/{components → ui/toolbar}/DataTableToolbar.tsx +4 -4
- package/src/components/DataTable/ui/toolbar/GroupingDropdown.test.tsx +621 -0
- package/src/components/DataTable/ui/toolbar/GroupingDropdown.tsx +107 -0
- package/src/components/DataTable/utils/{__tests__/a11yUtils.test.ts → a11yUtils.test.ts} +2 -2
- package/src/components/DataTable/utils/{__tests__/aggregationUtils.test.ts → aggregationUtils.test.ts} +3 -3
- package/src/components/DataTable/utils/{__tests__/columnUtils.test.ts → columnUtils.test.ts} +2 -2
- package/src/components/DataTable/utils/csvParse.test.ts +74 -0
- package/src/components/DataTable/utils/csvParse.ts +65 -0
- package/src/components/DataTable/utils/{__tests__/errorHandling.test.ts → errorHandling.test.ts} +2 -2
- package/src/components/DataTable/utils/{__tests__/exportUtils.test.ts → exportUtils.test.ts} +3 -3
- package/src/components/DataTable/utils/{__tests__/flexibleImport.test.ts → flexibleImport.test.ts} +2 -2
- package/src/components/DataTable/utils/flexibleImport.ts +3 -186
- package/src/components/DataTable/utils/{__tests__/hierarchicalSorting.test.ts → hierarchicalSorting.test.ts} +3 -3
- package/src/components/DataTable/utils/{__tests__/hierarchicalUtils.test.ts → hierarchicalUtils.test.ts} +3 -3
- package/src/components/DataTable/utils/importDateParser.test.ts +162 -0
- package/src/components/DataTable/utils/importDateParser.ts +114 -0
- package/src/components/DataTable/utils/importValueParser.test.ts +138 -0
- package/src/components/DataTable/utils/importValueParser.ts +91 -0
- package/src/components/DataTable/utils/{__tests__/paginationUtils.test.ts → paginationUtils.test.ts} +2 -2
- package/src/components/DataTable/utils/paginationUtils.ts +6 -3
- package/src/components/DataTable/utils/{__tests__/performanceUtils.test.ts → performanceUtils.test.ts} +3 -3
- package/src/components/DataTable/utils/{__tests__/rowUtils.test.ts → rowUtils.test.ts} +3 -3
- package/src/components/DataTable/utils/{__tests__/selectFieldUtils.test.ts → selectFieldUtils.test.ts} +66 -3
- package/src/components/DataTable/utils/selectFieldUtils.ts +97 -60
- package/src/components/DatePickerWithTimezone/DatePickerWithTimezone.test.tsx +1 -1
- package/src/components/DateTimeField/DateTimeField.test.tsx +1 -1
- package/src/components/Dialog/Dialog.test-utils.ts +49 -0
- package/src/components/Dialog/Dialog.test.tsx +896 -89
- package/src/components/Dialog/Dialog.tsx +174 -882
- package/src/components/Dialog/dialogLock.test.ts +238 -0
- package/src/components/Dialog/dialogLock.ts +98 -0
- package/src/components/Dialog/index.ts +2 -0
- package/src/components/Dialog/useDialogDimensions.test.ts +163 -0
- package/src/components/Dialog/useDialogDimensions.ts +140 -0
- package/src/components/Dialog/useDialogLifecycle.test.ts +358 -0
- package/src/components/Dialog/useDialogLifecycle.ts +135 -0
- package/src/components/Dialog/useDialogPersistence.test.ts +381 -0
- package/src/components/Dialog/useDialogPersistence.ts +357 -0
- package/src/components/FileDisplay/FileDisplay.test.tsx +40 -40
- package/src/components/FileDisplay/FileDisplay.tsx +24 -656
- package/src/components/FileDisplay/FileDisplayContent.test.tsx +395 -0
- package/src/components/FileDisplay/FileDisplayContent.tsx +242 -0
- package/src/components/FileDisplay/FileDisplayDeleteConfirmDialog.test.tsx +74 -0
- package/src/components/FileDisplay/FileDisplayDeleteConfirmDialog.tsx +38 -0
- package/src/components/FileDisplay/FileDisplayEmptyView.test.tsx +33 -0
- package/src/components/FileDisplay/FileDisplayEmptyView.tsx +33 -0
- package/src/components/FileDisplay/FileDisplayErrorView.test.tsx +71 -0
- package/src/components/FileDisplay/FileDisplayErrorView.tsx +50 -0
- package/src/components/FileDisplay/FileDisplayLoadingFallbackView.test.tsx +22 -0
- package/src/components/FileDisplay/FileDisplayLoadingFallbackView.tsx +22 -0
- package/src/components/FileDisplay/FileDisplayLoadingView.test.tsx +21 -0
- package/src/components/FileDisplay/FileDisplayLoadingView.tsx +23 -0
- package/src/components/FileDisplay/FileDisplayMultipleFilesView.test.tsx +101 -0
- package/src/components/FileDisplay/FileDisplayMultipleFilesView.tsx +109 -0
- package/src/components/FileDisplay/FileDisplaySingleDocumentLinkView.test.tsx +58 -0
- package/src/components/FileDisplay/FileDisplaySingleDocumentLinkView.tsx +48 -0
- package/src/components/FileDisplay/FileDisplaySingleFileWithActionsView.test.tsx +111 -0
- package/src/components/FileDisplay/FileDisplaySingleFileWithActionsView.tsx +270 -0
- package/src/components/FileDisplay/FileDisplaySingleImageView.test.tsx +78 -0
- package/src/components/FileDisplay/FileDisplaySingleImageView.tsx +67 -0
- package/src/components/FileDisplay/fallbackUtils.test.ts +50 -0
- package/src/components/FileDisplay/fallbackUtils.ts +44 -0
- package/src/components/FileDisplay/fetchFileDisplayData.ts +24 -0
- package/src/components/FileDisplay/fetchFileDisplayData.unit.test.ts +183 -0
- package/src/components/FileDisplay/fileDisplayUtils.test.ts +58 -0
- package/src/components/FileDisplay/fileDisplayUtils.ts +24 -0
- package/src/{hooks/__tests__ → components/FileDisplay}/useFileDisplay.test.ts +40 -42
- package/src/components/FileDisplay/useFileDisplay.ts +515 -0
- package/src/{hooks/__tests__ → components/FileDisplay}/useFileDisplay.unit.test.ts +406 -77
- package/src/components/FileDisplay/useFileDisplayData.ts +126 -0
- package/src/{hooks/public → components/FileDisplay}/usePublicFileDisplay.test.ts +94 -88
- package/src/components/FileDisplay/usePublicFileDisplay.ts +579 -0
- package/src/components/FileUpload/FileUpload.test.tsx +16 -10
- package/src/components/FileUpload/FileUpload.tsx +107 -525
- package/src/components/FileUpload/FileUploadDropZone.tsx +112 -0
- package/src/components/FileUpload/FileUploadProgressItem.tsx +86 -0
- package/src/components/FileUpload/FileUploadProgressList.tsx +40 -0
- package/src/components/FileUpload/useFileUploadManager.test.ts +308 -0
- package/src/components/FileUpload/useFileUploadManager.ts +454 -0
- package/src/components/FileUpload/useResolvedAppId.test.ts +102 -0
- package/src/components/FileUpload/useResolvedAppId.ts +77 -0
- package/src/components/Footer/Footer.test.tsx +6 -292
- package/src/components/Footer/Footer.tsx +8 -125
- package/src/components/Form/Form.test.tsx +44 -27
- package/src/components/Form/Form.tsx +64 -287
- package/src/components/Form/useFormPersistence.ts +257 -0
- package/src/components/Header/Header.test.tsx +17 -18
- package/src/components/Header/Header.tsx +10 -1
- package/src/components/Input/Input.tsx +1 -1
- package/src/components/Label/Label.test.tsx +1 -1
- package/src/components/LoadingSpinner/LoadingSpinner.test.tsx +1 -1
- package/src/components/NavigationMenu/HierarchicalNavItem.tsx +104 -0
- package/src/components/NavigationMenu/NavigationMenu.test.tsx +1029 -26
- package/src/components/NavigationMenu/NavigationMenu.tsx +61 -361
- package/src/components/NavigationMenu/index.ts +6 -1
- package/src/components/NavigationMenu/navigationPermissionHelper.ts +188 -0
- package/src/components/NavigationMenu/{__tests__/useNavigationFiltering.test.ts → useNavigationFiltering.test.ts} +68 -53
- package/src/components/NavigationMenu/useNavigationFiltering.ts +197 -296
- package/src/components/NavigationMenu/useNavigationScope.ts +125 -0
- package/src/components/PaceAppLayout/PaceAppLayout.edge-cases.test.tsx +77 -62
- package/src/components/PaceAppLayout/PaceAppLayout.integration.test.tsx +3 -3
- package/src/components/PaceAppLayout/PaceAppLayout.security.test.tsx +16 -19
- package/src/components/PaceAppLayout/PaceAppLayout.test.tsx +529 -5
- package/src/components/PaceAppLayout/PaceAppLayout.tsx +280 -756
- package/src/components/PaceAppLayout/useFilteredNavItems.ts +304 -0
- package/src/components/PaceAppLayout/usePaceAppLayoutConfig.ts +142 -0
- package/src/components/PaceAppLayout/usePaceAppLayoutGate.tsx +150 -0
- package/src/components/PaceAppLayout/usePaceAppLayoutPermissions.ts +162 -0
- package/src/components/PaceAppLayout/usePaceAppLayoutScope.ts +79 -0
- package/src/components/PaceAppLayout/useRoleBasedRouteAccess.ts +157 -0
- package/src/components/PaceAppLayout/useSuperAdminFallback.ts +58 -0
- package/src/components/PaceLoginPage/PaceLoginPage.test.tsx +31 -25
- package/src/components/PaceLoginPage/PaceLoginPage.tsx +31 -122
- package/src/components/PaceLoginPage/useLoginAppAccess.ts +153 -0
- package/src/components/Progress/Progress.tsx +1 -2
- package/src/components/ProtectedRoute/ProtectedRoute.tsx +29 -235
- package/src/components/ProtectedRoute/useProtectedRouteState.ts +128 -0
- package/src/components/ProtectedRoute/useVisibilityRedirectGrace.ts +89 -0
- package/src/components/PublicLayout/PublicLayout.test.tsx +217 -36
- package/src/components/PublicLayout/PublicPageLayout.tsx +132 -73
- package/src/components/PublicLayout/PublicPageProvider.tsx +5 -1
- package/src/components/Select/Select.test.tsx +1 -1
- package/src/components/Select/Select.tsx +28 -18
- package/src/components/Select/{__tests__/context.test.tsx → context.test.tsx} +3 -3
- package/src/components/Select/{utils/__tests__/text.test.tsx → text.test.tsx} +2 -2
- package/src/components/Select/{utils/text.ts → text.ts} +1 -1
- package/src/components/Select/{hooks/__tests__/useSelectEvents.test.ts → useSelectEvents.test.ts} +5 -5
- package/src/components/Select/{hooks/useSelectEvents.ts → useSelectEvents.ts} +2 -2
- package/src/components/Select/{hooks/__tests__/useSelectSearch.test.tsx → useSelectSearch.test.tsx} +7 -7
- package/src/components/Select/{hooks/useSelectSearch.ts → useSelectSearch.ts} +2 -2
- package/src/components/Select/{hooks/__tests__/useSelectState.test.ts → useSelectState.test.ts} +16 -2
- package/src/components/Select/{hooks/useSelectState.ts → useSelectState.ts} +3 -3
- package/src/components/Table/Table.test.tsx +348 -0
- package/src/components/Tabs/Tabs.test.tsx +270 -0
- package/src/components/Tabs/Tabs.tsx +1 -1
- package/src/components/Toast/Toast.test.tsx +420 -0
- package/src/components/{__tests__/index.test.ts → index.test.ts} +2 -2
- package/src/constants/{__tests__/performance.test.ts → performance.test.ts} +2 -2
- package/src/hooks/{__tests__/ServiceHooks.test.tsx → ServiceHooks.test.tsx} +8 -8
- package/src/hooks/{__tests__/hooks.integration.test.tsx → hooks.integration.test.tsx} +11 -11
- package/src/hooks/index.ts +7 -4
- package/src/hooks/{__tests__/index.unit.test.ts → index.unit.test.ts} +2 -2
- package/src/hooks/public/usePublicEvent.test.ts +1 -1
- package/src/hooks/public/usePublicEventLogo.test.ts +1 -1
- package/src/hooks/public/usePublicRouteParams.test.ts +1 -1
- package/src/hooks/services/useAuth.ts +9 -7
- package/src/hooks/useAddressAutocomplete.test.ts +22 -22
- package/src/hooks/useAddressAutocomplete.ts +90 -75
- package/src/hooks/{__tests__/useAppConfig.unit.test.ts → useAppConfig.unit.test.ts} +328 -22
- package/src/hooks/{__tests__/useComponentPerformance.unit.test.tsx → useComponentPerformance.unit.test.tsx} +27 -41
- package/src/hooks/useDataTablePerformance.ts +100 -120
- package/src/hooks/{__tests__/useDataTablePerformance.unit.test.ts → useDataTablePerformance.unit.test.ts} +5 -5
- package/src/hooks/{__tests__/useDataTableState.test.ts → useDataTableState.test.ts} +2 -2
- package/src/hooks/{__tests__/useDebounce.unit.test.ts → useDebounce.unit.test.ts} +2 -2
- package/src/hooks/useEventTheme.test.ts +4 -1
- package/src/hooks/useEventTheme.ts +49 -21
- package/src/hooks/useEvents.ts +41 -1
- package/src/hooks/{__tests__/useEvents.unit.test.ts → useEvents.unit.test.ts} +5 -5
- package/src/hooks/useFileReference.test.ts +44 -41
- package/src/hooks/useFileReference.ts +182 -173
- package/src/hooks/useFileUrl.ts +1 -1
- package/src/hooks/{__tests__/useFileUrl.unit.test.ts → useFileUrl.unit.test.ts} +26 -36
- package/src/hooks/{__tests__/useFileUrlCache.test.ts → useFileUrlCache.test.ts} +8 -8
- package/src/hooks/useFileUrlCache.ts +1 -1
- package/src/hooks/{__tests__/useFocusManagement.unit.test.ts → useFocusManagement.unit.test.ts} +2 -2
- package/src/hooks/{__tests__/useFocusTrap.unit.test.tsx → useFocusTrap.unit.test.tsx} +2 -2
- package/src/hooks/{__tests__/useFormDialog.test.ts → useFormDialog.test.ts} +2 -2
- package/src/hooks/useInactivityTracker.ts +138 -131
- package/src/hooks/{__tests__/useInactivityTracker.unit.test.ts → useInactivityTracker.unit.test.ts} +3 -3
- package/src/hooks/{__tests__/useIsMobile.unit.test.ts → useIsMobile.unit.test.ts} +2 -2
- package/src/hooks/useIsPrint.ts +62 -0
- package/src/hooks/useIsPrint.unit.test.ts +545 -0
- package/src/hooks/{__tests__/useKeyboardShortcuts.unit.test.ts → useKeyboardShortcuts.unit.test.ts} +2 -2
- package/src/hooks/{__tests__/useOrganisationPermissions.unit.test.tsx → useOrganisationPermissions.unit.test.tsx} +4 -4
- package/src/hooks/useOrganisationSecurity.test.ts +3 -3
- package/src/hooks/useOrganisationSecurity.ts +190 -201
- package/src/hooks/{__tests__/useOrganisationSecurity.unit.test.tsx → useOrganisationSecurity.unit.test.tsx} +61 -63
- package/src/hooks/{__tests__/useOrganisations.unit.test.ts → useOrganisations.unit.test.ts} +5 -5
- package/src/hooks/{__tests__/usePerformanceMonitor.unit.test.ts → usePerformanceMonitor.unit.test.ts} +13 -14
- package/src/hooks/{__tests__/usePermissionCache.test.ts → usePermissionCache.test.ts} +26 -27
- package/src/hooks/usePermissionCache.ts +276 -271
- package/src/hooks/{__tests__/usePreventTabReload.test.ts → usePreventTabReload.test.ts} +2 -2
- package/src/hooks/{__tests__/usePublicEvent.simple.test.ts → usePublicEvent.simple.test.ts} +4 -4
- package/src/hooks/{__tests__/usePublicEvent.test.ts → usePublicEvent.test.ts} +4 -4
- package/src/hooks/{__tests__/usePublicEvent.unit.test.ts → usePublicEvent.unit.test.ts} +4 -4
- package/src/hooks/{__tests__/usePublicFileDisplay.test.ts → usePublicFileDisplay.test.ts} +12 -12
- package/src/hooks/{__tests__/usePublicRouteParams.unit.test.ts → usePublicRouteParams.unit.test.ts} +3 -3
- package/src/hooks/{__tests__/useQueryCache.test.ts → useQueryCache.test.ts} +2 -2
- package/src/hooks/useQueryCache.ts +0 -2
- package/src/hooks/{__tests__/useRBAC.unit.test.ts → useRBAC.unit.test.ts} +55 -38
- package/src/hooks/{__tests__/useSessionDraft.test.ts → useSessionDraft.test.ts} +2 -2
- package/src/hooks/{__tests__/useSessionRestoration.unit.test.tsx → useSessionRestoration.unit.test.tsx} +10 -19
- package/src/hooks/useStorage.ts +21 -16
- package/src/hooks/{__tests__/useStorage.unit.test.ts → useStorage.unit.test.ts} +38 -75
- package/src/hooks/{__tests__/useToast.test.ts → useToast.test.ts} +2 -2
- package/src/hooks/{__tests__/useToast.unit.test.tsx → useToast.unit.test.tsx} +2 -2
- package/src/hooks/{__tests__/useZodForm.unit.test.tsx → useZodForm.unit.test.tsx} +2 -2
- package/src/icons/{__tests__/index.test.ts → index.test.ts} +2 -2
- package/src/icons/index.ts +2 -0
- package/src/{__tests__/index.test.ts → index.test.ts} +3 -7
- package/src/index.ts +15 -7
- package/src/providers/{__tests__/AuthProvider.test.tsx → AuthProvider.test.tsx} +3 -3
- package/src/providers/{__tests__/EventProvider.test.tsx → EventProvider.test.tsx} +3 -3
- package/src/providers/InactivityProvider.test-helper.tsx +40 -0
- package/src/providers/{__tests__/InactivityProvider.test.tsx → InactivityProvider.test.tsx} +14 -21
- package/src/providers/{__tests__/ProviderLifecycle.test.tsx → ProviderLifecycle.test.tsx} +4 -4
- package/src/providers/{__tests__/UnifiedAuthProvider.test.tsx → UnifiedAuthProvider.test.tsx} +1 -1
- package/src/providers/{__tests__/index.test.ts → index.test.ts} +2 -2
- package/src/providers/services/{__tests__/AuthServiceProvider.integration.test.tsx → AuthServiceProvider.integration.test.tsx} +4 -4
- package/src/providers/services/{__tests__/AuthServiceProvider.test.tsx → AuthServiceProvider.test.tsx} +7 -7
- package/src/providers/services/{__tests__/EventServiceProvider.test.tsx → EventServiceProvider.test.tsx} +7 -7
- package/src/providers/services/{__tests__/InactivityServiceProvider.test.tsx → InactivityServiceProvider.test.tsx} +5 -5
- package/src/providers/services/{__tests__/OrganisationServiceProvider.test.tsx → OrganisationServiceProvider.test.tsx} +6 -6
- package/src/providers/services/UnifiedAuthContext.ts +30 -27
- package/src/providers/services/{__tests__/UnifiedAuthProvider.advanced.test.tsx → UnifiedAuthProvider.advanced.test.tsx} +8 -9
- package/src/providers/services/{__tests__/UnifiedAuthProvider.appId.test.tsx → UnifiedAuthProvider.appId.test.tsx} +25 -25
- package/src/providers/services/{__tests__/UnifiedAuthProvider.integration.test.tsx → UnifiedAuthProvider.integration.test.tsx} +14 -11
- package/src/providers/services/UnifiedAuthProvider.tsx +115 -360
- package/src/providers/services/{__tests__/contexts.test.tsx → contexts.test.tsx} +6 -6
- package/src/providers/services/{__tests__/useUnifiedAuth.test.tsx → useUnifiedAuth.test.tsx} +6 -6
- package/src/providers/services/useUnifiedAuthContextValue.ts +279 -0
- package/src/providers/useInactivity.test-helper.ts +27 -0
- package/src/rbac/{__tests__/adapters.comprehensive.test.tsx → adapters.comprehensive.test.tsx} +24 -24
- package/src/rbac/adapters.test.tsx +22 -22
- package/src/rbac/adapters.tsx +29 -29
- package/src/rbac/api.test.ts +973 -42
- package/src/rbac/api.ts +228 -253
- package/src/rbac/{__tests__/audit-batched.test.ts → audit-batched.test.ts} +6 -6
- package/src/rbac/audit.ts +4 -1
- package/src/rbac/{__tests__/auth-rbac-security.integration.test.tsx → auth-rbac-security.integration.test.tsx} +1 -1
- package/src/rbac/{__tests__/auth-rbac.e2e.test.tsx → auth-rbac.e2e.test.tsx} +27 -34
- package/src/rbac/cache-invalidation.test.ts +715 -0
- package/src/rbac/components/{__tests__/AccessDenied.test.tsx → AccessDenied.test.tsx} +3 -3
- package/src/rbac/components/{__tests__/NavigationGuard.test.tsx → NavigationGuard.test.tsx} +13 -11
- package/src/{__tests__/rbac/PagePermissionGuard.test.tsx → rbac/components/PagePermissionGuard.guard.test.tsx} +33 -19
- package/src/rbac/components/{__tests__/PagePermissionGuard.performance.test.tsx → PagePermissionGuard.performance.test.tsx} +30 -9
- package/src/rbac/components/{__tests__/PagePermissionGuard.race-condition.test.tsx → PagePermissionGuard.race-condition.test.tsx} +7 -7
- package/src/rbac/components/{__tests__/PagePermissionGuard.test.tsx → PagePermissionGuard.test.tsx} +10 -10
- package/src/rbac/components/PagePermissionGuard.tsx +177 -372
- package/src/rbac/components/{__tests__/PagePermissionGuard.verification.test.tsx → PagePermissionGuard.verification.test.tsx} +7 -7
- package/src/rbac/config.ts +58 -18
- package/src/rbac/{__tests__/engine.comprehensive.test.ts → engine.comprehensive.test.ts} +3 -3
- package/src/rbac/engine.test.ts +494 -0
- package/src/rbac/errors.ts +89 -55
- package/src/rbac/hooks/permissions/runPermissionCheck.ts +77 -0
- package/src/rbac/hooks/permissions/{__tests__/useAccessLevel.test.ts → useAccessLevel.test.ts} +40 -40
- package/src/rbac/hooks/permissions/useAccessLevel.ts +16 -6
- package/src/rbac/hooks/permissions/{__tests__/useCan.test.ts → useCan.test.ts} +41 -41
- package/src/rbac/hooks/permissions/useCan.ts +170 -252
- package/src/rbac/hooks/permissions/{__tests__/useMultiplePermissions.test.ts → useMultiplePermissions.test.ts} +49 -49
- package/src/rbac/hooks/permissions/useMultiplePermissions.ts +6 -2
- package/src/rbac/hooks/permissions/{__tests__/usePermissions.test.ts → usePermissions.test.ts} +10 -12
- package/src/rbac/hooks/permissions/usePermissions.ts +36 -65
- package/src/rbac/hooks/useCan.test.ts +42 -42
- package/src/rbac/hooks/usePageAccessLogging.ts +160 -0
- package/src/rbac/hooks/usePageGuardScope.ts +117 -0
- package/src/rbac/hooks/usePagePermissionCheck.ts +67 -0
- package/src/rbac/hooks/{__tests__/usePermissions.integration.test.ts → usePermissions.integration.test.ts} +9 -9
- package/src/{__tests__/hooks/usePermissions.test.ts → rbac/hooks/usePermissions.stability.test.ts} +18 -18
- package/src/rbac/hooks/usePermissions.test.ts +54 -54
- package/src/rbac/hooks/useRBAC.test.ts +313 -217
- package/src/rbac/hooks/useRBAC.ts +145 -81
- package/src/rbac/hooks/useResourcePermissions.test.ts +25 -25
- package/src/rbac/hooks/useResourcePermissions.ts +68 -134
- package/src/rbac/hooks/useResourcePermissionsSuperAdmin.ts +67 -0
- package/src/rbac/hooks/useRoleManagement.test.ts +27 -112
- package/src/rbac/hooks/useRoleManagement.ts +153 -585
- package/src/rbac/hooks/{__tests__/useSecureSupabase.test.ts → useSecureSupabase.test.ts} +17 -17
- package/src/rbac/hooks/useSecureSupabase.ts +10 -2
- package/src/rbac/hooks/useSuperAdminCheck.ts +80 -0
- package/src/rbac/{__tests__/performance.test.ts → performance.test.ts} +1 -1
- package/src/rbac/{__tests__/rbac-core.test.tsx → rbac-core.test.tsx} +3 -3
- package/src/rbac/{__tests__/rbac-engine-core-logic.test.ts → rbac-engine-core-logic.test.ts} +2 -2
- package/src/rbac/{__tests__/rbac-engine-simplified.test.ts → rbac-engine-simplified.test.ts} +3 -3
- package/src/rbac/{__tests__/rbac-functions.test.ts → rbac-functions.test.ts} +57 -0
- package/src/rbac/{__tests__/rbac-role-isolation.test.ts → rbac-role-isolation.test.ts} +2 -2
- package/src/rbac/request-deduplication.test.ts +14 -9
- package/src/rbac/request-deduplication.ts +5 -4
- package/src/rbac/{__tests__/scenarios.user-role.test.tsx → scenarios.user-role.test.tsx} +23 -23
- package/src/rbac/secureClient.test.ts +514 -83
- package/src/rbac/secureClient.ts +8 -2
- package/src/rbac/security.test.ts +323 -0
- package/src/rbac/types/roleManagement.ts +66 -0
- package/src/rbac/utils/{__tests__/clientSecurity.test.ts → clientSecurity.test.ts} +4 -4
- package/src/rbac/utils/{__tests__/contextValidator.test.ts → contextValidator.test.ts} +4 -4
- package/src/rbac/utils/contextValidator.ts +5 -1
- package/src/rbac/utils/{__tests__/deep-equal.test.ts → deep-equal.test.ts} +1 -1
- package/src/rbac/utils/{__tests__/eventContext.test.ts → eventContext.test.ts} +36 -21
- package/src/rbac/utils/eventContext.ts +37 -33
- package/src/rbac/utils/fetchPermissionMap.ts +13 -0
- package/src/rbac/utils/permissionMapHelpers.ts +34 -0
- package/src/rbac/utils/roleManagementRpc.ts +303 -0
- package/src/services/{__tests__/AuthService.edge-cases.test.ts → AuthService.edge-cases.test.ts} +19 -19
- package/src/services/{__tests__/AuthService.restoreSession.test.ts → AuthService.restoreSession.test.ts} +2 -2
- package/src/services/{__tests__/AuthService.test.ts → AuthService.test.ts} +89 -55
- package/src/services/AuthService.ts +184 -205
- package/src/services/{__tests__/BaseService.edge-cases.test.ts → BaseService.edge-cases.test.ts} +3 -3
- package/src/services/{__tests__/BaseService.test.ts → BaseService.test.ts} +2 -2
- package/src/services/{__tests__/EventService.edge-cases.test.ts → EventService.edge-cases.test.ts} +27 -24
- package/src/services/{__tests__/EventService.eventColours.test.ts → EventService.eventColours.test.ts} +1 -1
- package/src/services/{__tests__/EventService.test.ts → EventService.test.ts} +256 -24
- package/src/services/EventService.ts +242 -312
- package/src/services/{__tests__/InactivityService.edge-cases.test.ts → InactivityService.edge-cases.test.ts} +3 -3
- package/src/services/{__tests__/InactivityService.lifecycle.test.ts → InactivityService.lifecycle.test.ts} +2 -2
- package/src/services/{__tests__/InactivityService.test.ts → InactivityService.test.ts} +179 -4
- package/src/services/InactivityService.ts +172 -213
- package/src/services/{__tests__/OrganisationService.edge-cases.test.ts → OrganisationService.edge-cases.test.ts} +5 -5
- package/src/services/{__tests__/OrganisationService.pagination.test.ts → OrganisationService.pagination.test.ts} +4 -4
- package/src/services/{__tests__/OrganisationService.test.ts → OrganisationService.test.ts} +410 -7
- package/src/services/OrganisationService.ts +184 -238
- package/src/services/base/BaseService.test.ts +1 -1
- package/src/services/interfaces/{__tests__/IAuthService.test.ts → IAuthService.test.ts} +21 -27
- package/src/services/interfaces/IAuthService.ts +10 -9
- package/src/services/interfaces/{__tests__/IEventService.test.ts → IEventService.test.ts} +4 -4
- package/src/services/interfaces/{__tests__/IInactivityService.test.ts → IInactivityService.test.ts} +3 -3
- package/src/services/interfaces/{__tests__/IOrganisationService.test.ts → IOrganisationService.test.ts} +3 -3
- package/src/styles/core.css +243 -12
- package/src/theming/{__tests__/parseEventColours.test.ts → parseEventColours.test.ts} +1 -1
- package/src/theming/{__tests__/runtime.test.ts → runtime.test.ts} +8 -17
- package/src/theming/runtime.ts +71 -2
- package/src/types/api-result.ts +53 -0
- package/src/types/{__tests__/core.test.ts → core.test.ts} +2 -2
- package/src/types/{__tests__/database-generated.test.ts → database-generated.test.ts} +3 -3
- package/src/types/database.generated.ts +45 -10
- package/src/types/event.ts +38 -18
- package/src/types/{__tests__/file-reference.test.ts → file-reference.test.ts} +13 -13
- package/src/types/file-reference.ts +37 -12
- package/src/types/{__tests__/guards.test.ts → guards.test.ts} +2 -2
- package/src/types/{__tests__/index.test.ts → index.test.ts} +2 -2
- package/src/types/index.ts +3 -0
- package/src/types/{__tests__/organisation.roles.test.ts → organisation.roles.test.ts} +1 -1
- package/src/types/{__tests__/organisation.test.ts → organisation.test.ts} +3 -31
- package/src/types/organisation.ts +15 -15
- package/src/types/supabase.ts +13 -4
- package/src/types/{__tests__/theme.test.ts → theme.test.ts} +1 -1
- package/src/types/{__tests__/type-validation.test.ts → type-validation.test.ts} +1 -1
- package/src/types/{__tests__/validation.test.ts → validation.test.ts} +2 -2
- package/src/utils/app/appIdResolver.test.ts +98 -71
- package/src/utils/app/appIdResolver.ts +31 -20
- package/src/utils/{__tests__/appConfig.unit.test.ts → appConfig.unit.test.ts} +1 -1
- package/src/utils/{__tests__/audit.unit.test.ts → audit.unit.test.ts} +1 -1
- package/src/utils/{__tests__/auth-utils.unit.test.ts → auth-utils.unit.test.ts} +16 -17
- package/src/utils/{__tests__/bundleAnalysis.unit.test.ts → bundleAnalysis.unit.test.ts} +35 -35
- package/src/utils/{__tests__/cn.unit.test.ts → cn.unit.test.ts} +1 -1
- package/src/utils/context/organisationContext.test.ts +105 -91
- package/src/utils/context/organisationContext.ts +29 -40
- package/src/utils/core/{__tests__/cn.test.ts → cn.test.ts} +3 -3
- package/src/utils/core/{__tests__/debugLogger.test.ts → debugLogger.test.ts} +2 -2
- package/src/utils/core/{__tests__/logger.test.ts → logger.test.ts} +2 -2
- package/src/utils/core/mergeRefs.ts +24 -0
- package/src/utils/{__tests__/debugLogger.test.ts → debugLogger.test.ts} +1 -1
- package/src/utils/{__tests__/deviceFingerprint.unit.test.ts → deviceFingerprint.unit.test.ts} +1 -1
- package/src/utils/dynamic/createLazyComponent.tsx +9 -1
- package/src/utils/dynamic/{__tests__/dynamicUtils.test.ts → dynamicUtils.test.ts} +2 -2
- package/src/utils/dynamic/{__tests__/lazyLoad.test.tsx → lazyLoad.test.tsx} +2 -2
- package/src/utils/{__tests__/dynamicUtils.unit.test.ts → dynamicUtils.unit.test.ts} +1 -1
- package/src/utils/file-reference/{__tests__/file-reference.test.ts → file-reference.test.ts} +214 -289
- package/src/utils/file-reference/index.ts +330 -347
- package/src/utils/{__tests__/formatDate.unit.test.ts → formatDate.unit.test.ts} +2 -2
- package/src/utils/formatting/formatDateTimeTimezone.test.ts +1 -1
- package/src/utils/formatting/formatNumber.test.ts +1 -1
- package/src/utils/{__tests__/formatting.unit.test.ts → formatting.unit.test.ts} +1 -1
- package/src/utils/google-places/googlePlacesUtils.test.ts +70 -48
- package/src/utils/google-places/googlePlacesUtils.ts +67 -99
- package/src/utils/google-places/loadGoogleMapsScript.test.ts +25 -22
- package/src/utils/google-places/loadGoogleMapsScript.ts +138 -117
- package/src/utils/{__tests__/index.unit.test.ts → index.unit.test.ts} +1 -1
- package/src/utils/{__tests__/lazyLoad.unit.test.tsx → lazyLoad.unit.test.tsx} +13 -14
- package/src/utils/location/location.test.ts +1 -1
- package/src/utils/{__tests__/logger.unit.test.ts → logger.unit.test.ts} +1 -1
- package/src/utils/{__tests__/organisationContext.unit.test.ts → organisationContext.unit.test.ts} +37 -48
- package/src/utils/performance/{__tests__/bundleAnalysis.test.ts → bundleAnalysis.test.ts} +2 -2
- package/src/utils/performance/{__tests__/performanceBenchmark.test.ts → performanceBenchmark.test.ts} +2 -2
- package/src/utils/performance/{__tests__/performanceBudgets.test.ts → performanceBudgets.test.ts} +2 -2
- package/src/utils/{__tests__/performanceBenchmark.test.ts → performanceBenchmark.test.ts} +2 -2
- package/src/utils/{__tests__/performanceBudgets.unit.test.ts → performanceBudgets.unit.test.ts} +2 -2
- package/src/utils/{__tests__/permissionTypes.unit.test.ts → permissionTypes.unit.test.ts} +1 -1
- package/src/utils/{__tests__/permissionUtils.unit.test.ts → permissionUtils.unit.test.ts} +1 -1
- package/src/utils/permissions/{__tests__/permissionTypes.test.ts → permissionTypes.test.ts} +2 -2
- package/src/utils/persistence/{__tests__/keyDerivation.test.ts → keyDerivation.test.ts} +2 -2
- package/src/utils/persistence/{__tests__/sensitiveFieldDetection.test.ts → sensitiveFieldDetection.test.ts} +2 -2
- package/src/utils/{__tests__/request-deduplication.test.ts → request-deduplication.test.ts} +2 -2
- package/src/utils/{__tests__/sanitization.unit.test.ts → sanitization.unit.test.ts} +1 -1
- package/src/utils/{__tests__/schemaUtils.unit.test.ts → schemaUtils.unit.test.ts} +1 -1
- package/src/utils/{__tests__/secureDataAccess.unit.test.ts → secureDataAccess.unit.test.ts} +2 -2
- package/src/utils/{__tests__/secureErrors.unit.test.ts → secureErrors.unit.test.ts} +4 -4
- package/src/utils/{__tests__/secureStorage.unit.test.ts → secureStorage.unit.test.ts} +1 -1
- package/src/utils/security/auth-utils.ts +34 -23
- package/src/utils/security/secureDataAccess.ts +241 -281
- package/src/utils/security/secureErrors.test.ts +1 -1
- package/src/utils/security/secureStorage.test.ts +1 -1
- package/src/utils/security/security.test.ts +25 -17
- package/src/utils/security/security.ts +15 -18
- package/src/utils/security/securityMonitor.test.ts +1 -1
- package/src/utils/{__tests__/security.unit.test.ts → security.unit.test.ts} +21 -15
- package/src/utils/{__tests__/securityMonitor.unit.test.ts → securityMonitor.unit.test.ts} +1 -1
- package/src/utils/{__tests__/sessionTracking.unit.test.ts → sessionTracking.unit.test.ts} +12 -12
- package/src/utils/storage/{__tests__/config.unit.test.ts → config.unit.test.ts} +2 -2
- package/src/utils/storage/helpers.test.ts +88 -102
- package/src/utils/storage/helpers.ts +173 -251
- package/src/utils/storage/{__tests__/index.unit.test.ts → index.unit.test.ts} +3 -3
- package/src/utils/storage/types.ts +7 -0
- package/src/utils/supabase/createBaseClient.test.ts +1 -1
- package/src/utils/timezone/timezone.test.ts +1 -1
- package/src/utils/{__tests__/timezone.test.ts → timezone.test.ts} +2 -2
- package/src/utils/validation/{__tests__/common.test.ts → common.test.ts} +2 -2
- package/src/utils/validation/{__tests__/csrf.test.ts → csrf.test.ts} +56 -28
- package/src/utils/validation/csrf.ts +42 -41
- package/src/utils/validation/{__tests__/htmlSanitization.unit.test.ts → htmlSanitization.unit.test.ts} +2 -2
- package/src/utils/validation/{__tests__/passwordSchema.test.ts → passwordSchema.test.ts} +2 -2
- package/src/utils/validation/{__tests__/schema.test.ts → schema.test.ts} +2 -2
- package/src/utils/validation/{__tests__/sqlInjectionProtection.test.ts → sqlInjectionProtection.test.ts} +2 -2
- package/src/utils/validation/{__tests__/user.test.ts → user.test.ts} +2 -2
- package/src/utils/validation/{__tests__/validation.test.ts → validation.test.ts} +2 -2
- package/src/utils/validation/{__tests__/validationUtils.test.ts → validationUtils.test.ts} +2 -2
- package/src/utils/{__tests__/validation.unit.test.ts → validation.unit.test.ts} +1 -1
- package/src/utils/{__tests__/validationUtils.unit.test.ts → validationUtils.unit.test.ts} +5 -2
- package/dist/UnifiedAuthProvider-BBD2PS3Q.js +0 -7
- package/dist/chunk-KPYQWGFQ.js +0 -183
- package/dist/types-D05dCGma.d.ts +0 -521
- package/scripts/eslint-audit.cjs +0 -222
- package/scripts/generate-docs.js +0 -157
- package/scripts/install-cursor-rules.cjs +0 -255
- package/scripts/install-eslint-config.cjs +0 -349
- package/scripts/setup-build-cache.js +0 -73
- package/scripts/validate-pre-publish.js +0 -145
- package/src/__tests__/integration/UserProfile.test.tsx +0 -124
- package/src/__tests__/public-recipe-view.test.ts +0 -228
- package/src/__tests__/rls-policies.test.ts +0 -472
- package/src/components/DataTable/__tests__/DataTable.test.tsx +0 -876
- package/src/components/DataTable/components/DataTableLayout.tsx +0 -584
- package/src/components/DataTable/components/UnifiedTableBody.tsx +0 -395
- package/src/components/DataTable/components/__tests__/DataTableLayout.test.tsx +0 -467
- package/src/components/DataTable/components/__tests__/DataTableModals.test.tsx +0 -358
- package/src/components/DataTable/components/__tests__/ImportModal.test.tsx +0 -957
- package/src/components/DataTable/core/ActionManager.ts +0 -235
- package/src/components/DataTable/core/ColumnManager.ts +0 -204
- package/src/components/DataTable/core/DataManager.ts +0 -190
- package/src/components/DataTable/core/LocalDataAdapter.ts +0 -274
- package/src/components/DataTable/core/PluginRegistry.ts +0 -229
- package/src/components/DataTable/core/StateManager.ts +0 -312
- package/src/components/DataTable/core/__tests__/ActionManager.test.ts +0 -235
- package/src/components/DataTable/core/__tests__/ColumnManager.test.ts +0 -141
- package/src/components/DataTable/core/__tests__/DataManager.test.ts +0 -178
- package/src/components/DataTable/core/__tests__/LocalDataAdapter.test.ts +0 -133
- package/src/components/DataTable/core/__tests__/PluginRegistry.test.ts +0 -142
- package/src/components/DataTable/core/__tests__/StateManager.test.ts +0 -158
- package/src/components/DataTable/core/interfaces.ts +0 -338
- package/src/components/DataTable/types.ts +0 -764
- package/src/hooks/public/usePublicFileDisplay.ts +0 -534
- package/src/hooks/useFileDisplay.ts +0 -748
- package/src/providers/OrganisationProvider.test.tsx +0 -40
- package/src/providers/OrganisationProvider.tsx +0 -92
- package/src/providers/__tests__/InactivityProvider.test-helper.tsx +0 -65
- package/src/providers/__tests__/OrganisationProvider.test.tsx +0 -616
- package/src/providers/__tests__/OrganisationProvider.wrapper.test.tsx +0 -591
- package/src/rbac/__tests__/cache-invalidation.test.ts +0 -393
- /package/src/components/DataTable/{components/__tests__ → ui}/COVERAGE_NOTE.md +0 -0
- /package/src/components/DataTable/utils/{__tests__/COVERAGE_NOTE.md → COVERAGE_NOTE.md} +0 -0
- /package/src/hooks/{__tests__/useApiFetch.unit.test.ts → useApiFetch.unit.test.ts} +0 -0
- /package/src/providers/{__tests__/README.md → README.md} +0 -0
- /package/src/rbac/{__tests__/index.test.ts → index.test.ts} +0 -0
- /package/src/rbac/{__tests__/rbac-integration.test.ts → rbac-integration.test.ts} +0 -0
- /package/src/types/{__tests__/README.md → README.md} +0 -0
package/dist/chunk-KPYQWGFQ.js
DELETED
|
@@ -1,183 +0,0 @@
|
|
|
1
|
-
import { useUnifiedAuth, useOrganisations } from './chunk-Y4PF6HIM.js';
|
|
2
|
-
import { logger } from './chunk-BTHN5MKC.js';
|
|
3
|
-
import { useState, useEffect, useMemo, useCallback } from 'react';
|
|
4
|
-
|
|
5
|
-
var useOrganisationSecurity = () => {
|
|
6
|
-
const { user, session, supabase } = useUnifiedAuth();
|
|
7
|
-
const { selectedOrganisation, getUserRole } = useOrganisations();
|
|
8
|
-
const [isSuperAdmin, setIsSuperAdmin] = useState(false);
|
|
9
|
-
const [_isCheckingSuperAdmin, setIsCheckingSuperAdmin] = useState(false);
|
|
10
|
-
useEffect(() => {
|
|
11
|
-
if (!user || !session || !supabase) {
|
|
12
|
-
setIsSuperAdmin(false);
|
|
13
|
-
return;
|
|
14
|
-
}
|
|
15
|
-
const checkSuperAdmin = async () => {
|
|
16
|
-
setIsCheckingSuperAdmin(true);
|
|
17
|
-
try {
|
|
18
|
-
const now = (/* @__PURE__ */ new Date()).toISOString();
|
|
19
|
-
const { data, error } = await supabase.from("rbac_global_roles").select("role").eq("user_id", user.id).eq("role", "super_admin").lte("valid_from", now).or(`valid_to.is.null,valid_to.gte.${now}`).limit(1);
|
|
20
|
-
setIsSuperAdmin(!error && data && data.length > 0);
|
|
21
|
-
} catch (error) {
|
|
22
|
-
logger.error("useOrganisationSecurity", "Error checking super admin status:", error);
|
|
23
|
-
setIsSuperAdmin(false);
|
|
24
|
-
} finally {
|
|
25
|
-
setIsCheckingSuperAdmin(false);
|
|
26
|
-
}
|
|
27
|
-
};
|
|
28
|
-
checkSuperAdmin();
|
|
29
|
-
}, [user, session, supabase]);
|
|
30
|
-
const superAdminContext = useMemo(() => {
|
|
31
|
-
return {
|
|
32
|
-
isSuperAdmin,
|
|
33
|
-
hasGlobalAccess: isSuperAdmin,
|
|
34
|
-
canManageAllOrganisations: isSuperAdmin
|
|
35
|
-
};
|
|
36
|
-
}, [isSuperAdmin]);
|
|
37
|
-
const validateOrganisationAccess = useCallback(async (orgId) => {
|
|
38
|
-
if (!user || !session || !supabase) return false;
|
|
39
|
-
try {
|
|
40
|
-
if (superAdminContext.isSuperAdmin) {
|
|
41
|
-
return true;
|
|
42
|
-
}
|
|
43
|
-
const { data, error } = await supabase.from("rbac_organisation_roles").select("id").eq("user_id", user.id).eq("organisation_id", orgId).eq("status", "active").is("revoked_at", null).in("role", ["org_admin", "leader", "member"]).single();
|
|
44
|
-
if (error) {
|
|
45
|
-
logger.error("useOrganisationSecurity", "Error validating organisation access:", error);
|
|
46
|
-
return false;
|
|
47
|
-
}
|
|
48
|
-
return !!data;
|
|
49
|
-
} catch (error) {
|
|
50
|
-
logger.error("useOrganisationSecurity", "Exception validating organisation access:", error);
|
|
51
|
-
return false;
|
|
52
|
-
}
|
|
53
|
-
}, [user, session, supabase, superAdminContext.isSuperAdmin]);
|
|
54
|
-
const hasMinimumRole = useCallback((minRole, orgId) => {
|
|
55
|
-
if (superAdminContext.isSuperAdmin) {
|
|
56
|
-
return true;
|
|
57
|
-
}
|
|
58
|
-
const targetOrgId = orgId || selectedOrganisation?.id;
|
|
59
|
-
if (!targetOrgId) return false;
|
|
60
|
-
const userRole = getUserRole(targetOrgId);
|
|
61
|
-
const roleHierarchy = ["supporter", "member", "leader", "org_admin"];
|
|
62
|
-
const userRoleIndex = roleHierarchy.indexOf(userRole);
|
|
63
|
-
const minRoleIndex = roleHierarchy.indexOf(minRole);
|
|
64
|
-
return userRoleIndex >= minRoleIndex;
|
|
65
|
-
}, [selectedOrganisation, getUserRole, superAdminContext.isSuperAdmin]);
|
|
66
|
-
const canAccessChildOrganisations = useCallback((orgId) => {
|
|
67
|
-
if (superAdminContext.isSuperAdmin) {
|
|
68
|
-
return true;
|
|
69
|
-
}
|
|
70
|
-
const targetOrgId = orgId || selectedOrganisation?.id;
|
|
71
|
-
if (!targetOrgId) return false;
|
|
72
|
-
const userRole = getUserRole(targetOrgId);
|
|
73
|
-
return userRole === "org_admin";
|
|
74
|
-
}, [selectedOrganisation, getUserRole, superAdminContext.isSuperAdmin]);
|
|
75
|
-
const hasPermission = useCallback(async (permission, orgId) => {
|
|
76
|
-
if (superAdminContext.isSuperAdmin) {
|
|
77
|
-
return true;
|
|
78
|
-
}
|
|
79
|
-
const targetOrgId = orgId || selectedOrganisation?.id;
|
|
80
|
-
if (!targetOrgId || !user) return false;
|
|
81
|
-
try {
|
|
82
|
-
const { isPermittedCached } = await import('./api-F47QJ7FX.js');
|
|
83
|
-
const scope = {
|
|
84
|
-
organisationId: targetOrgId,
|
|
85
|
-
eventId: user.user_metadata?.eventId || user.app_metadata?.eventId,
|
|
86
|
-
appId: user.user_metadata?.appId || user.app_metadata?.appId
|
|
87
|
-
};
|
|
88
|
-
return await isPermittedCached({
|
|
89
|
-
userId: user.id,
|
|
90
|
-
scope,
|
|
91
|
-
permission
|
|
92
|
-
});
|
|
93
|
-
} catch (error) {
|
|
94
|
-
logger.error("useOrganisationSecurity", "Exception checking permission:", error);
|
|
95
|
-
return false;
|
|
96
|
-
}
|
|
97
|
-
}, [selectedOrganisation, user, superAdminContext.isSuperAdmin]);
|
|
98
|
-
const getUserPermissions = useCallback(async (orgId) => {
|
|
99
|
-
if (superAdminContext.isSuperAdmin) {
|
|
100
|
-
return ["*"];
|
|
101
|
-
}
|
|
102
|
-
const targetOrgId = orgId || selectedOrganisation?.id;
|
|
103
|
-
if (!targetOrgId || !user) return [];
|
|
104
|
-
try {
|
|
105
|
-
const { getPermissionMap } = await import('./api-F47QJ7FX.js');
|
|
106
|
-
const scope = {
|
|
107
|
-
organisationId: targetOrgId,
|
|
108
|
-
eventId: user.user_metadata?.eventId || user.app_metadata?.eventId,
|
|
109
|
-
appId: user.user_metadata?.appId || user.app_metadata?.appId
|
|
110
|
-
};
|
|
111
|
-
const permissionMap = await getPermissionMap({
|
|
112
|
-
userId: user.id,
|
|
113
|
-
scope
|
|
114
|
-
});
|
|
115
|
-
const allPermissions = Object.entries(permissionMap).filter(([, allowed]) => allowed).map(([permission]) => permission);
|
|
116
|
-
return [...new Set(allPermissions)];
|
|
117
|
-
} catch (error) {
|
|
118
|
-
logger.error("useOrganisationSecurity", "Exception getting user permissions:", error);
|
|
119
|
-
return [];
|
|
120
|
-
}
|
|
121
|
-
}, [selectedOrganisation, user, superAdminContext.isSuperAdmin]);
|
|
122
|
-
const logOrganisationAccess = useCallback(async (action, details) => {
|
|
123
|
-
if (!user || !selectedOrganisation) return;
|
|
124
|
-
try {
|
|
125
|
-
if (selectedOrganisation.id) {
|
|
126
|
-
const { emitAuditEvent } = await import('./audit-Z6ZZBWLU.js');
|
|
127
|
-
await emitAuditEvent({
|
|
128
|
-
type: "permission_check",
|
|
129
|
-
userId: user.id,
|
|
130
|
-
organisationId: selectedOrganisation.id,
|
|
131
|
-
permission: action,
|
|
132
|
-
decision: true,
|
|
133
|
-
// Assume access was granted if we're logging it
|
|
134
|
-
source: "api",
|
|
135
|
-
duration_ms: 0,
|
|
136
|
-
// No actual permission check performed here
|
|
137
|
-
metadata: details || {}
|
|
138
|
-
});
|
|
139
|
-
}
|
|
140
|
-
} catch (error) {
|
|
141
|
-
logger.error("useOrganisationSecurity", "Error logging organisation access:", error);
|
|
142
|
-
}
|
|
143
|
-
}, [user, selectedOrganisation]);
|
|
144
|
-
const ensureOrganisationAccess = useCallback(async (orgId) => {
|
|
145
|
-
const hasAccess = await validateOrganisationAccess(orgId);
|
|
146
|
-
if (!hasAccess) {
|
|
147
|
-
const error = new Error(`User does not have access to organisation ${orgId}`);
|
|
148
|
-
error.name = "OrganisationSecurityError";
|
|
149
|
-
error.code = "ACCESS_DENIED";
|
|
150
|
-
error.organisationId = orgId;
|
|
151
|
-
error.userId = user?.id;
|
|
152
|
-
throw error;
|
|
153
|
-
}
|
|
154
|
-
}, [validateOrganisationAccess, user]);
|
|
155
|
-
const validateUserAccess = useCallback(async (userId, orgId) => {
|
|
156
|
-
if (!supabase) return false;
|
|
157
|
-
try {
|
|
158
|
-
if (superAdminContext.isSuperAdmin) {
|
|
159
|
-
return true;
|
|
160
|
-
}
|
|
161
|
-
if (userId !== user?.id) {
|
|
162
|
-
return false;
|
|
163
|
-
}
|
|
164
|
-
return await validateOrganisationAccess(orgId);
|
|
165
|
-
} catch (error) {
|
|
166
|
-
logger.error("useOrganisationSecurity", "Exception validating user access:", error);
|
|
167
|
-
return false;
|
|
168
|
-
}
|
|
169
|
-
}, [supabase, superAdminContext.isSuperAdmin, user, validateOrganisationAccess]);
|
|
170
|
-
return {
|
|
171
|
-
superAdminContext,
|
|
172
|
-
validateOrganisationAccess,
|
|
173
|
-
hasMinimumRole,
|
|
174
|
-
canAccessChildOrganisations,
|
|
175
|
-
hasPermission,
|
|
176
|
-
getUserPermissions,
|
|
177
|
-
logOrganisationAccess,
|
|
178
|
-
ensureOrganisationAccess,
|
|
179
|
-
validateUserAccess
|
|
180
|
-
};
|
|
181
|
-
};
|
|
182
|
-
|
|
183
|
-
export { useOrganisationSecurity };
|
package/dist/types-D05dCGma.d.ts
DELETED
|
@@ -1,521 +0,0 @@
|
|
|
1
|
-
import * as React from 'react';
|
|
2
|
-
import React__default from 'react';
|
|
3
|
-
import { ColumnDef, SortingState, ColumnFiltersState, GroupingState } from '@tanstack/react-table';
|
|
4
|
-
|
|
5
|
-
/**
|
|
6
|
-
* @file Toast hook for managing toast notifications
|
|
7
|
-
* @package @jmruthers/pace-core
|
|
8
|
-
* @module Hooks
|
|
9
|
-
* @since 0.1.0
|
|
10
|
-
*
|
|
11
|
-
* Toast notifications automatically dismiss after 5 seconds by default.
|
|
12
|
-
* The duration is fixed to the pace-core default to ensure consistent behaviour.
|
|
13
|
-
*/
|
|
14
|
-
|
|
15
|
-
interface ToastProps {
|
|
16
|
-
title?: React.ReactNode;
|
|
17
|
-
description?: React.ReactNode;
|
|
18
|
-
variant?: 'default' | 'destructive' | 'success';
|
|
19
|
-
onClose?: () => void;
|
|
20
|
-
action?: React.ReactElement;
|
|
21
|
-
}
|
|
22
|
-
/**
|
|
23
|
-
* Extended toast props with additional properties
|
|
24
|
-
* @interface ToasterToast
|
|
25
|
-
*/
|
|
26
|
-
type ToasterToast = ToastProps & {
|
|
27
|
-
/** Unique identifier for the toast */
|
|
28
|
-
id: string;
|
|
29
|
-
/** Duration before automatic dismissal in milliseconds */
|
|
30
|
-
duration?: number;
|
|
31
|
-
/** Optional title content */
|
|
32
|
-
title?: React.ReactNode;
|
|
33
|
-
/** Optional description content */
|
|
34
|
-
description?: React.ReactNode;
|
|
35
|
-
/** Optional action button */
|
|
36
|
-
action?: React.ReactElement<unknown>;
|
|
37
|
-
/** Open state */
|
|
38
|
-
open?: boolean;
|
|
39
|
-
/** Open change handler */
|
|
40
|
-
onOpenChange?: (open: boolean) => void;
|
|
41
|
-
/** Dismiss function */
|
|
42
|
-
dismiss?: () => void;
|
|
43
|
-
};
|
|
44
|
-
/**
|
|
45
|
-
* Toast configuration without ID
|
|
46
|
-
* Duration is fixed to DEFAULT_TOAST_DURATION and cannot be overridden
|
|
47
|
-
*/
|
|
48
|
-
type Toast = Omit<ToasterToast, "id" | "duration">;
|
|
49
|
-
/**
|
|
50
|
-
* Creates a new toast notification
|
|
51
|
-
* @param props - Toast configuration. Duration is automatically set to 5 seconds (5000ms) and cannot be customized.
|
|
52
|
-
* @returns Object with toast ID and control methods
|
|
53
|
-
*/
|
|
54
|
-
declare function toast(props: Toast): {
|
|
55
|
-
id: string;
|
|
56
|
-
dismiss: () => void;
|
|
57
|
-
update: (props: Partial<Omit<ToasterToast, "id" | "duration">>) => void;
|
|
58
|
-
};
|
|
59
|
-
/**
|
|
60
|
-
* Hook for managing toast notifications
|
|
61
|
-
* @returns Object with toast state and control methods
|
|
62
|
-
*/
|
|
63
|
-
declare function useToast(): {
|
|
64
|
-
toast: typeof toast;
|
|
65
|
-
dismiss: (toastId?: string) => void;
|
|
66
|
-
/** Array of active toasts */
|
|
67
|
-
toasts: ToasterToast[];
|
|
68
|
-
};
|
|
69
|
-
|
|
70
|
-
/**
|
|
71
|
-
* @file DataTable Type Definitions
|
|
72
|
-
* @package @jmruthers/pace-core
|
|
73
|
-
* @module Components/DataTable/Types
|
|
74
|
-
* @since 0.2.0
|
|
75
|
-
*/
|
|
76
|
-
|
|
77
|
-
declare module '@tanstack/react-table' {
|
|
78
|
-
interface ColumnMeta<TData, TValue> {
|
|
79
|
-
/** Text alignment for the column content */
|
|
80
|
-
align?: 'left' | 'right' | 'center';
|
|
81
|
-
/** Column type for styling purposes */
|
|
82
|
-
type?: 'text' | 'number' | 'date' | 'boolean' | 'custom';
|
|
83
|
-
}
|
|
84
|
-
interface ColumnDefBase<TData, TValue> {
|
|
85
|
-
/** Alternative accessor key used while editing */
|
|
86
|
-
editAccessorKey?: string;
|
|
87
|
-
}
|
|
88
|
-
}
|
|
89
|
-
/**
|
|
90
|
-
* Base data record type - all DataTable data must extend this
|
|
91
|
-
* This is a marker type that allows any object to be used as a data record
|
|
92
|
-
* Individual implementations should define more specific types
|
|
93
|
-
*/
|
|
94
|
-
interface DataRecord {
|
|
95
|
-
[key: string]: unknown;
|
|
96
|
-
}
|
|
97
|
-
/**
|
|
98
|
-
* Row ID type - always a string
|
|
99
|
-
*/
|
|
100
|
-
type RowId = string;
|
|
101
|
-
/**
|
|
102
|
-
* Row identifier function type
|
|
103
|
-
*/
|
|
104
|
-
type GetRowId<TData extends DataRecord> = (row: TData, index: number) => RowId;
|
|
105
|
-
/**
|
|
106
|
-
* Hierarchical configuration for DataTable
|
|
107
|
-
*/
|
|
108
|
-
interface HierarchicalConfig {
|
|
109
|
-
/** Enable hierarchical functionality */
|
|
110
|
-
enabled: boolean;
|
|
111
|
-
/** Default expanded state - true = all expanded, false = all collapsed, array = specific IDs */
|
|
112
|
-
defaultExpanded?: boolean | string[];
|
|
113
|
-
/** Callback when expanded state changes */
|
|
114
|
-
onExpandedChange?: (expandedIds: string[]) => void;
|
|
115
|
-
/** Visual indentation for child rows (in pixels) */
|
|
116
|
-
indentSize?: number;
|
|
117
|
-
/** Custom styling for parent rows */
|
|
118
|
-
parentRowClassName?: string;
|
|
119
|
-
/** Custom styling for child rows */
|
|
120
|
-
childRowClassName?: string;
|
|
121
|
-
}
|
|
122
|
-
/**
|
|
123
|
-
* Pagination mode determines how data is handled
|
|
124
|
-
*/
|
|
125
|
-
type PaginationMode = 'client' | 'server' | 'hybrid';
|
|
126
|
-
/**
|
|
127
|
-
* Performance configuration for large datasets
|
|
128
|
-
*/
|
|
129
|
-
interface PerformanceConfig {
|
|
130
|
-
/** Enable virtual scrolling */
|
|
131
|
-
virtualScrolling?: boolean;
|
|
132
|
-
/** Virtual scrolling overscan count */
|
|
133
|
-
overscan?: number;
|
|
134
|
-
/** Enable memoization of cell renderers */
|
|
135
|
-
memoizeCells?: boolean;
|
|
136
|
-
/** Enable debounced search */
|
|
137
|
-
debounceSearch?: number;
|
|
138
|
-
/** Enable data chunking for memory management */
|
|
139
|
-
enableChunking?: boolean;
|
|
140
|
-
/** Chunk size for data processing */
|
|
141
|
-
chunkSize?: number;
|
|
142
|
-
/** Enable Web Workers for heavy operations */
|
|
143
|
-
enableWebWorkers?: boolean;
|
|
144
|
-
/** Threshold for switching to server-side mode */
|
|
145
|
-
serverSideThreshold?: number;
|
|
146
|
-
}
|
|
147
|
-
/**
|
|
148
|
-
* Server-side data fetching configuration
|
|
149
|
-
*/
|
|
150
|
-
interface ServerSideConfig<TData extends DataRecord> {
|
|
151
|
-
/** Function to fetch data from server */
|
|
152
|
-
fetchData: (params: ServerSideParams) => Promise<ServerSideResponse<TData>>;
|
|
153
|
-
/** Enable server-side sorting */
|
|
154
|
-
enableServerSorting?: boolean;
|
|
155
|
-
/** Enable server-side filtering */
|
|
156
|
-
enableServerFiltering?: boolean;
|
|
157
|
-
/** Enable server-side search */
|
|
158
|
-
enableServerSearch?: boolean;
|
|
159
|
-
/** Enable server-side pagination */
|
|
160
|
-
enableServerPagination?: boolean;
|
|
161
|
-
/** Debounce delay for server requests */
|
|
162
|
-
debounceMs?: number;
|
|
163
|
-
/** Cache duration for server responses */
|
|
164
|
-
cacheMs?: number;
|
|
165
|
-
}
|
|
166
|
-
/**
|
|
167
|
-
* Parameters sent to server for data fetching
|
|
168
|
-
*/
|
|
169
|
-
interface ServerSideParams {
|
|
170
|
-
/** Current page index */
|
|
171
|
-
pageIndex: number;
|
|
172
|
-
/** Page size */
|
|
173
|
-
pageSize: number;
|
|
174
|
-
/** Sorting configuration */
|
|
175
|
-
sorting: SortingState;
|
|
176
|
-
/** Column filters */
|
|
177
|
-
columnFilters: ColumnFiltersState;
|
|
178
|
-
/** Global filter/search term */
|
|
179
|
-
globalFilter: string;
|
|
180
|
-
/** Grouping configuration */
|
|
181
|
-
grouping: GroupingState;
|
|
182
|
-
}
|
|
183
|
-
/**
|
|
184
|
-
* Response from server for data fetching
|
|
185
|
-
*/
|
|
186
|
-
interface ServerSideResponse<TData extends DataRecord> {
|
|
187
|
-
/** Array of data records */
|
|
188
|
-
data: TData[];
|
|
189
|
-
/** Total number of records (for pagination) */
|
|
190
|
-
totalCount: number;
|
|
191
|
-
/** Current page index */
|
|
192
|
-
pageIndex: number;
|
|
193
|
-
/** Page size */
|
|
194
|
-
pageSize: number;
|
|
195
|
-
/** Total number of pages */
|
|
196
|
-
pageCount: number;
|
|
197
|
-
/** Whether there are more pages */
|
|
198
|
-
hasNextPage: boolean;
|
|
199
|
-
/** Whether there are previous pages */
|
|
200
|
-
hasPreviousPage: boolean;
|
|
201
|
-
}
|
|
202
|
-
/**
|
|
203
|
-
* Data chunking configuration
|
|
204
|
-
*/
|
|
205
|
-
interface ChunkingConfig {
|
|
206
|
-
/** Size of each data chunk */
|
|
207
|
-
chunkSize: number;
|
|
208
|
-
/** Number of chunks to keep in memory */
|
|
209
|
-
maxChunksInMemory: number;
|
|
210
|
-
/** Enable progressive loading */
|
|
211
|
-
progressiveLoading?: boolean;
|
|
212
|
-
}
|
|
213
|
-
/**
|
|
214
|
-
* Search index configuration for performance
|
|
215
|
-
*/
|
|
216
|
-
interface SearchIndexConfig {
|
|
217
|
-
/** Fields to index for search */
|
|
218
|
-
indexedFields: string[];
|
|
219
|
-
/** Enable fuzzy search */
|
|
220
|
-
fuzzySearch?: boolean;
|
|
221
|
-
/** Fuzzy search threshold */
|
|
222
|
-
fuzzyThreshold?: number;
|
|
223
|
-
/** Enable search highlighting */
|
|
224
|
-
enableHighlighting?: boolean;
|
|
225
|
-
}
|
|
226
|
-
/**
|
|
227
|
-
* Enhanced column definition that extends TanStack's ColumnDef
|
|
228
|
-
*/
|
|
229
|
-
interface DataTableColumn<TData extends DataRecord = DataRecord> extends Omit<ColumnDef<TData>, 'id' | 'accessorKey'> {
|
|
230
|
-
/** Column identifier */
|
|
231
|
-
id?: string;
|
|
232
|
-
/** Accessor key for data */
|
|
233
|
-
accessorKey?: string;
|
|
234
|
-
/** Alternative accessor key used while editing */
|
|
235
|
-
editAccessorKey?: string;
|
|
236
|
-
/** Custom header label for the column */
|
|
237
|
-
header: string;
|
|
238
|
-
/** Whether this column should be searchable in global filter */
|
|
239
|
-
searchable?: boolean;
|
|
240
|
-
/** Enable sorting */
|
|
241
|
-
sortable?: boolean;
|
|
242
|
-
/** Enable column filter (inherits from ColumnDef) */
|
|
243
|
-
enableColumnFilter?: boolean;
|
|
244
|
-
/** Enable grouping (inherits from ColumnDef) */
|
|
245
|
-
enableGrouping?: boolean;
|
|
246
|
-
/** Enable hiding (inherits from ColumnDef) */
|
|
247
|
-
enableHiding?: boolean;
|
|
248
|
-
/** Aggregate configuration for this column */
|
|
249
|
-
aggregate?: AggregateConfig;
|
|
250
|
-
/** Enable virtual scrolling for this column */
|
|
251
|
-
virtualizable?: boolean;
|
|
252
|
-
/** Custom cell renderer with memoization */
|
|
253
|
-
memoizedCell?: React__default.ComponentType<{
|
|
254
|
-
row: TData;
|
|
255
|
-
}>;
|
|
256
|
-
/** Field type for editing (text, select, date, etc.) */
|
|
257
|
-
fieldType?: 'text' | 'select' | 'date' | 'number' | 'boolean';
|
|
258
|
-
/** Options for select fields - can be simple items or grouped with labels and separators */
|
|
259
|
-
fieldOptions?: Array<{
|
|
260
|
-
value: string | number;
|
|
261
|
-
label: string;
|
|
262
|
-
} | {
|
|
263
|
-
type: 'group';
|
|
264
|
-
label: string;
|
|
265
|
-
items: Array<{
|
|
266
|
-
value: string | number;
|
|
267
|
-
label: string;
|
|
268
|
-
}>;
|
|
269
|
-
} | {
|
|
270
|
-
type: 'separator';
|
|
271
|
-
}>;
|
|
272
|
-
/** Enable keyboard search/filtering in select dropdowns within editable columns (default: true). When fieldType is 'select', this controls dropdown searchability, not global search. */
|
|
273
|
-
selectSearchable?: boolean;
|
|
274
|
-
/** Enable creating new items in select dropdowns (default: false) */
|
|
275
|
-
creatable?: boolean;
|
|
276
|
-
/** Callback to create a new item when user types non-matching text in select dropdown */
|
|
277
|
-
onCreateNew?: (inputValue: string) => Promise<string | number> | string | number;
|
|
278
|
-
/** Maximum height for select dropdown content (default: "20rem") */
|
|
279
|
-
selectMaxHeight?: string;
|
|
280
|
-
/** Custom className for select content dropdown */
|
|
281
|
-
selectContentClassName?: string;
|
|
282
|
-
/** Custom style for select content dropdown */
|
|
283
|
-
selectContentStyle?: React__default.CSSProperties;
|
|
284
|
-
/** Hide spinner arrows on number input fields (default: true for DataTable) */
|
|
285
|
-
hideNumberSpinners?: boolean;
|
|
286
|
-
/** Filter type for column filtering (text, select, number, date) */
|
|
287
|
-
filterType?: 'text' | 'select' | 'number' | 'date';
|
|
288
|
-
/** Options for select filters (alternative to fieldOptions) */
|
|
289
|
-
filterSelectOptions?: Array<{
|
|
290
|
-
value: string | number;
|
|
291
|
-
label: string;
|
|
292
|
-
}>;
|
|
293
|
-
/** Whether this column is editable in edit mode (default: true) */
|
|
294
|
-
editable?: boolean;
|
|
295
|
-
/** Alternative CSV headers that should map to this column during import */
|
|
296
|
-
importAliases?: string[];
|
|
297
|
-
/** Custom renderer for parent rows */
|
|
298
|
-
renderForParent?: (row: TData) => React__default.ReactNode;
|
|
299
|
-
/** Custom renderer for child rows */
|
|
300
|
-
renderForChild?: (row: TData) => React__default.ReactNode;
|
|
301
|
-
/** Hide this column for parent rows */
|
|
302
|
-
hideForParent?: boolean;
|
|
303
|
-
/** Hide this column for child rows */
|
|
304
|
-
hideForChild?: boolean;
|
|
305
|
-
/**
|
|
306
|
-
* Aggregation function for grouped rows.
|
|
307
|
-
* Receives all rows in the group and returns the aggregated value.
|
|
308
|
-
* If not provided, grouped rows will show empty/undefined for this column.
|
|
309
|
-
*/
|
|
310
|
-
aggregateFn?: (rows: TData[], column: DataTableColumn<TData>) => unknown;
|
|
311
|
-
/**
|
|
312
|
-
* Optional: Custom cell renderer for aggregated values in grouped rows.
|
|
313
|
-
* If not provided, uses the column's regular cell renderer.
|
|
314
|
-
*/
|
|
315
|
-
aggregateCell?: (value: unknown, rows: TData[], column: DataTableColumn<TData>) => React__default.ReactNode;
|
|
316
|
-
}
|
|
317
|
-
/**
|
|
318
|
-
* Action definition for row-level operations
|
|
319
|
-
*/
|
|
320
|
-
/**
|
|
321
|
-
* Boolean condition or predicate evaluated against a row
|
|
322
|
-
*/
|
|
323
|
-
type ActionCondition<TData extends DataRecord> = boolean | ((row: TData) => boolean);
|
|
324
|
-
/**
|
|
325
|
-
* Action definition for DataTable rows.
|
|
326
|
-
* Defines custom actions that can be performed on table rows.
|
|
327
|
-
*
|
|
328
|
-
* @template TData - The type of data records in the table
|
|
329
|
-
*/
|
|
330
|
-
interface DataTableAction<TData extends DataRecord> {
|
|
331
|
-
/** Display label for the action */
|
|
332
|
-
label: string;
|
|
333
|
-
/** Icon component */
|
|
334
|
-
icon?: React__default.ComponentType<{
|
|
335
|
-
className?: string;
|
|
336
|
-
}>;
|
|
337
|
-
/** Action handler */
|
|
338
|
-
onClick: (row: TData) => void;
|
|
339
|
-
/** Visual variant */
|
|
340
|
-
variant?: 'default' | 'destructive' | 'outline' | 'secondary' | 'ghost';
|
|
341
|
-
/** Whether action is disabled */
|
|
342
|
-
disabled?: ActionCondition<TData>;
|
|
343
|
-
/** Whether action is hidden (for RBAC) */
|
|
344
|
-
hidden?: boolean;
|
|
345
|
-
/** Explicit visibility override */
|
|
346
|
-
visible?: ActionCondition<TData>;
|
|
347
|
-
/** Test ID for testing */
|
|
348
|
-
testId?: string;
|
|
349
|
-
/** Whether this action should only show for parent rows (hierarchical mode) */
|
|
350
|
-
showForParent?: boolean;
|
|
351
|
-
/** Whether this action should only show for child rows (hierarchical mode) */
|
|
352
|
-
showForChild?: boolean;
|
|
353
|
-
/** Icon component for parent rows (overrides icon when showForParent is true) */
|
|
354
|
-
parentIcon?: React__default.ComponentType<{
|
|
355
|
-
className?: string;
|
|
356
|
-
}>;
|
|
357
|
-
/** Icon component for child rows (overrides icon when showForChild is true) */
|
|
358
|
-
childIcon?: React__default.ComponentType<{
|
|
359
|
-
className?: string;
|
|
360
|
-
}>;
|
|
361
|
-
/** Label for parent rows (overrides label when showForParent is true) */
|
|
362
|
-
parentLabel?: string;
|
|
363
|
-
/** Label for child rows (overrides label when showForChild is true) */
|
|
364
|
-
childLabel?: string;
|
|
365
|
-
/** Whether the action should be shown while the row is in edit mode */
|
|
366
|
-
showInEditMode?: boolean;
|
|
367
|
-
/** Whether the action should be hidden while the row is in view mode */
|
|
368
|
-
hideInViewMode?: boolean;
|
|
369
|
-
/** Whether the action should explicitly render while in view mode */
|
|
370
|
-
showInViewMode?: boolean;
|
|
371
|
-
}
|
|
372
|
-
/**
|
|
373
|
-
* Toolbar button definition
|
|
374
|
-
*/
|
|
375
|
-
interface DataTableToolbarButton {
|
|
376
|
-
/** Display label */
|
|
377
|
-
label: string;
|
|
378
|
-
/** Icon component */
|
|
379
|
-
icon?: React__default.ComponentType<{
|
|
380
|
-
className?: string;
|
|
381
|
-
}>;
|
|
382
|
-
/** Click handler */
|
|
383
|
-
onClick: () => void;
|
|
384
|
-
/** Visual variant */
|
|
385
|
-
variant?: 'default' | 'destructive' | 'outline' | 'secondary' | 'ghost';
|
|
386
|
-
/** Whether button is disabled */
|
|
387
|
-
disabled?: boolean;
|
|
388
|
-
/** Test ID for testing */
|
|
389
|
-
testId?: string;
|
|
390
|
-
}
|
|
391
|
-
/**
|
|
392
|
-
* Aggregate configuration
|
|
393
|
-
*/
|
|
394
|
-
interface AggregateConfig {
|
|
395
|
-
field: string;
|
|
396
|
-
function: 'sum' | 'avg' | 'count' | 'min' | 'max';
|
|
397
|
-
label: string;
|
|
398
|
-
}
|
|
399
|
-
/**
|
|
400
|
-
* Empty state configuration
|
|
401
|
-
*/
|
|
402
|
-
interface EmptyStateConfig {
|
|
403
|
-
title?: string;
|
|
404
|
-
description?: string;
|
|
405
|
-
icon?: React__default.ComponentType<{
|
|
406
|
-
className?: string;
|
|
407
|
-
}>;
|
|
408
|
-
action?: {
|
|
409
|
-
label: string;
|
|
410
|
-
onClick: () => void;
|
|
411
|
-
};
|
|
412
|
-
}
|
|
413
|
-
/**
|
|
414
|
-
* Unified feature configuration for DataTable
|
|
415
|
-
* All features are disabled by default and must be explicitly enabled
|
|
416
|
-
*/
|
|
417
|
-
interface DataTableFeatureFlags {
|
|
418
|
-
/** Enable global search functionality */
|
|
419
|
-
search: boolean;
|
|
420
|
-
/** Enable pagination controls */
|
|
421
|
-
pagination: boolean;
|
|
422
|
-
/** Enable column sorting */
|
|
423
|
-
sorting: boolean;
|
|
424
|
-
/** Enable column filtering */
|
|
425
|
-
filtering: boolean;
|
|
426
|
-
/** Enable data import functionality */
|
|
427
|
-
import: boolean;
|
|
428
|
-
/** Enable data export functionality */
|
|
429
|
-
export: boolean;
|
|
430
|
-
/** Enable row selection for bulk operations */
|
|
431
|
-
selection: boolean;
|
|
432
|
-
/** Enable row creation */
|
|
433
|
-
creation: boolean;
|
|
434
|
-
/** Enable row editing */
|
|
435
|
-
editing: boolean;
|
|
436
|
-
/** Enable row deletion */
|
|
437
|
-
deletion: boolean;
|
|
438
|
-
/** Enable bulk deletion of selected rows */
|
|
439
|
-
deleteSelected: boolean;
|
|
440
|
-
/** Enable data grouping */
|
|
441
|
-
grouping: boolean;
|
|
442
|
-
/** Enable column visibility controls */
|
|
443
|
-
columnVisibility: boolean;
|
|
444
|
-
/** Enable column reordering */
|
|
445
|
-
columnReordering: boolean;
|
|
446
|
-
/** Enable hierarchical parent/child rows */
|
|
447
|
-
hierarchical: boolean;
|
|
448
|
-
}
|
|
449
|
-
/**
|
|
450
|
-
* Consumer-facing feature configuration. All properties are optional and will be
|
|
451
|
-
* merged with {@link defaultDataTableFeatures} at runtime to keep the public API
|
|
452
|
-
* ergonomic while maintaining strict internal guarantees.
|
|
453
|
-
*/
|
|
454
|
-
type DataTableFeatureConfig = Partial<DataTableFeatureFlags>;
|
|
455
|
-
/**
|
|
456
|
-
* RBAC configuration for DataTable - MANDATORY for all DataTables
|
|
457
|
-
*
|
|
458
|
-
* @example
|
|
459
|
-
* ```tsx
|
|
460
|
-
* <DataTable
|
|
461
|
-
* data={dishes}
|
|
462
|
-
* rbac={{ pageName: 'dishes' }} // Use page name (recommended)
|
|
463
|
-
* features={features}
|
|
464
|
-
* />
|
|
465
|
-
*
|
|
466
|
-
* <DataTable
|
|
467
|
-
* data={dishes}
|
|
468
|
-
* rbac={{ pageId: 'uuid-here' }} // Use page ID directly
|
|
469
|
-
* features={features}
|
|
470
|
-
* />
|
|
471
|
-
* ```
|
|
472
|
-
*/
|
|
473
|
-
interface DataTableRBACConfig {
|
|
474
|
-
/** Page name for page-based permissions - will be resolved to page ID */
|
|
475
|
-
pageName?: string;
|
|
476
|
-
/** Page ID for page-based permissions - used directly if provided */
|
|
477
|
-
pageId?: string;
|
|
478
|
-
}
|
|
479
|
-
/**
|
|
480
|
-
* Options provided to the onExport handler for custom export functionality
|
|
481
|
-
*
|
|
482
|
-
* @example
|
|
483
|
-
* ```tsx
|
|
484
|
-
* <DataTable
|
|
485
|
-
* onExport={async (options) => {
|
|
486
|
-
* // Export only specific columns
|
|
487
|
-
* const customColumns = options.allColumns.filter(col =>
|
|
488
|
-
* ['name', 'email', 'role'].includes(col.accessorKey || '')
|
|
489
|
-
* );
|
|
490
|
-
* await exportToCSVWithTableRows(
|
|
491
|
-
* options.tableRows,
|
|
492
|
-
* customColumns,
|
|
493
|
-
* options.columnIdToTableColumn,
|
|
494
|
-
* 'custom-export.csv'
|
|
495
|
-
* );
|
|
496
|
-
* }}
|
|
497
|
-
* />
|
|
498
|
-
* ```
|
|
499
|
-
*/
|
|
500
|
-
interface ExportOptions<TData extends DataRecord> {
|
|
501
|
-
/** Filtered table rows with getValue() method for proper accessorFn evaluation */
|
|
502
|
-
tableRows: Array<{
|
|
503
|
-
original: TData;
|
|
504
|
-
getValue: (columnId: string) => unknown;
|
|
505
|
-
id: string;
|
|
506
|
-
}>;
|
|
507
|
-
/** All column definitions passed to the DataTable */
|
|
508
|
-
allColumns: DataTableColumn<TData>[];
|
|
509
|
-
/** Currently visible columns in the table */
|
|
510
|
-
visibleColumns: DataTableColumn<TData>[];
|
|
511
|
-
/** Mapping of column IDs to TanStack table column instances (for getValue() calls) */
|
|
512
|
-
columnIdToTableColumn: Map<string, unknown>;
|
|
513
|
-
/** Raw data array (unfiltered) */
|
|
514
|
-
data: TData[];
|
|
515
|
-
/** Default filename generated from table title */
|
|
516
|
-
filename: string;
|
|
517
|
-
/** TanStack table instance for advanced operations */
|
|
518
|
-
table: unknown;
|
|
519
|
-
}
|
|
520
|
-
|
|
521
|
-
export { type AggregateConfig as A, type ChunkingConfig as C, type DataTableColumn as D, type EmptyStateConfig as E, type GetRowId as G, type HierarchicalConfig as H, type PerformanceConfig as P, type ServerSideConfig as S, type DataTableAction as a, type DataTableToolbarButton as b, type DataRecord as c, type SearchIndexConfig as d, type PaginationMode as e, type ServerSideParams as f, type ServerSideResponse as g, type DataTableFeatureConfig as h, type ExportOptions as i, type DataTableRBACConfig as j, useToast as u };
|