@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
|
@@ -4,36 +4,45 @@
|
|
|
4
4
|
* @package @jmruthers/pace-core
|
|
5
5
|
* @module Components/DataTable/Tests/Utilities
|
|
6
6
|
* @since 0.3.0
|
|
7
|
-
*
|
|
7
|
+
*
|
|
8
8
|
* Shared utilities and helpers for DataTable tests to reduce duplication
|
|
9
9
|
* and provide consistent testing patterns across the test suite.
|
|
10
10
|
*/
|
|
11
|
-
|
|
12
|
-
|
|
11
|
+
|
|
12
|
+
import type { DataTableAction, DataTableFeatureConfig, DataRecord } from '../types';
|
|
13
13
|
import '@testing-library/jest-dom';
|
|
14
|
-
import
|
|
14
|
+
import {
|
|
15
|
+
MockDataTableContext,
|
|
16
|
+
MockDataTableErrorBoundary,
|
|
17
|
+
MockDataTableModals,
|
|
18
|
+
MockDataTableToolbar,
|
|
19
|
+
MockDeleteIcon,
|
|
20
|
+
MockEditIcon,
|
|
21
|
+
MockLoadingState,
|
|
22
|
+
MockPaginationControls,
|
|
23
|
+
MockUnifiedTableBody,
|
|
24
|
+
} from './MockDataTableComponents';
|
|
15
25
|
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
const MockDeleteIcon = ({ className }: { className?: string }) => <span className={className} data-testid="delete-icon">Delete</span>;
|
|
26
|
+
/** Overrides for TanStack table mock (partial shape). */
|
|
27
|
+
type TanStackTableMockOverrides = Record<string, unknown>;
|
|
19
28
|
|
|
20
29
|
/**
|
|
21
30
|
* Common mock implementations for DataTable components
|
|
22
31
|
*/
|
|
23
32
|
export const mockComponents = {
|
|
24
|
-
DataTableContext: vi.fn(
|
|
25
|
-
DataTableToolbar: vi.fn(
|
|
26
|
-
UnifiedTableBody: vi.fn(
|
|
27
|
-
DataTableModals: vi.fn(
|
|
28
|
-
PaginationControls: vi.fn(
|
|
29
|
-
LoadingState: vi.fn(
|
|
30
|
-
DataTableErrorBoundary: vi.fn(
|
|
33
|
+
DataTableContext: vi.fn(MockDataTableContext),
|
|
34
|
+
DataTableToolbar: vi.fn(MockDataTableToolbar),
|
|
35
|
+
UnifiedTableBody: vi.fn(MockUnifiedTableBody),
|
|
36
|
+
DataTableModals: vi.fn(MockDataTableModals),
|
|
37
|
+
PaginationControls: vi.fn(MockPaginationControls),
|
|
38
|
+
LoadingState: vi.fn(MockLoadingState),
|
|
39
|
+
DataTableErrorBoundary: vi.fn(MockDataTableErrorBoundary),
|
|
31
40
|
};
|
|
32
41
|
|
|
33
42
|
/**
|
|
34
43
|
* Common TanStack Table mock configuration
|
|
35
44
|
*/
|
|
36
|
-
export const createTanStackTableMock = (overrides:
|
|
45
|
+
export const createTanStackTableMock = (overrides: TanStackTableMockOverrides = {}) => ({
|
|
37
46
|
getHeaderGroups: vi.fn(() => [
|
|
38
47
|
{
|
|
39
48
|
id: 'header-group-1',
|
|
@@ -45,7 +54,7 @@ export const createTanStackTableMock = (overrides: any = {}) => ({
|
|
|
45
54
|
getContext: vi.fn(() => ({})),
|
|
46
55
|
},
|
|
47
56
|
{
|
|
48
|
-
id: 'email',
|
|
57
|
+
id: 'email',
|
|
49
58
|
isPlaceholder: false,
|
|
50
59
|
column: { columnDef: { header: 'Email' } },
|
|
51
60
|
getContext: vi.fn(() => ({})),
|
|
@@ -59,7 +68,7 @@ export const createTanStackTableMock = (overrides: any = {}) => ({
|
|
|
59
68
|
],
|
|
60
69
|
},
|
|
61
70
|
]),
|
|
62
|
-
getRowModel: vi.fn(() => ({
|
|
71
|
+
getRowModel: vi.fn(() => ({
|
|
63
72
|
rows: [
|
|
64
73
|
{
|
|
65
74
|
id: '1',
|
|
@@ -96,7 +105,7 @@ export const createTanStackTableMock = (overrides: any = {}) => ({
|
|
|
96
105
|
globalFilter: '',
|
|
97
106
|
pagination: { pageIndex: 0, pageSize: 10 },
|
|
98
107
|
grouping: [],
|
|
99
|
-
expanded: {}
|
|
108
|
+
expanded: {},
|
|
100
109
|
})),
|
|
101
110
|
setGlobalFilter: vi.fn(),
|
|
102
111
|
setColumnVisibility: vi.fn(),
|
|
@@ -115,7 +124,7 @@ export const createTanStackTableMock = (overrides: any = {}) => ({
|
|
|
115
124
|
/**
|
|
116
125
|
* Common mock for TanStack Table module
|
|
117
126
|
*/
|
|
118
|
-
export const createTanStackTableModuleMock = (tableMock:
|
|
127
|
+
export const createTanStackTableModuleMock = (tableMock: TanStackTableMockOverrides = {}) => ({
|
|
119
128
|
useReactTable: vi.fn(() => createTanStackTableMock(tableMock)),
|
|
120
129
|
getCoreRowModel: vi.fn(),
|
|
121
130
|
getFilteredRowModel: vi.fn(),
|
|
@@ -135,33 +144,33 @@ export const createPerformanceUtilsMock = () => ({
|
|
|
135
144
|
constructor(_config: unknown) {
|
|
136
145
|
// Mock constructor - config parameter kept for API compatibility
|
|
137
146
|
}
|
|
138
|
-
getChunk = vi.fn(() => [])
|
|
139
|
-
getMemoryUsage = vi.fn(() => 5)
|
|
140
|
-
clear = vi.fn()
|
|
147
|
+
getChunk = vi.fn(() => []);
|
|
148
|
+
getMemoryUsage = vi.fn(() => 5);
|
|
149
|
+
clear = vi.fn();
|
|
141
150
|
},
|
|
142
151
|
SearchIndex: class MockSearchIndex {
|
|
143
152
|
constructor(_config: unknown) {
|
|
144
153
|
// Mock constructor - config parameter kept for API compatibility
|
|
145
154
|
}
|
|
146
|
-
buildIndex = vi.fn()
|
|
147
|
-
search = vi.fn(() => [{ id: '1', name: 'Test User' }])
|
|
155
|
+
buildIndex = vi.fn();
|
|
156
|
+
search = vi.fn(() => [{ id: '1', name: 'Test User' }]);
|
|
148
157
|
},
|
|
149
158
|
PerformanceMonitor: class MockPerformanceMonitor {
|
|
150
159
|
constructor() {
|
|
151
160
|
// Mock constructor - no initialization needed
|
|
152
161
|
}
|
|
153
|
-
startRender = vi.fn()
|
|
154
|
-
endRender = vi.fn()
|
|
162
|
+
startRender = vi.fn();
|
|
163
|
+
endRender = vi.fn();
|
|
155
164
|
},
|
|
156
165
|
VisibilityTracker: class MockVisibilityTracker {
|
|
157
166
|
constructor() {
|
|
158
167
|
// Mock constructor - no initialization needed
|
|
159
168
|
}
|
|
160
|
-
observe = vi.fn()
|
|
161
|
-
unobserve = vi.fn()
|
|
162
|
-
disconnect = vi.fn()
|
|
163
|
-
destroy = vi.fn()
|
|
164
|
-
onVisibilityChange = vi.fn(() => vi.fn())
|
|
169
|
+
observe = vi.fn();
|
|
170
|
+
unobserve = vi.fn();
|
|
171
|
+
disconnect = vi.fn();
|
|
172
|
+
destroy = vi.fn();
|
|
173
|
+
onVisibilityChange = vi.fn(() => vi.fn());
|
|
165
174
|
},
|
|
166
175
|
determinePaginationMode: vi.fn((size: number) => {
|
|
167
176
|
if (size < 1000) return 'client';
|
|
@@ -170,40 +179,55 @@ export const createPerformanceUtilsMock = () => ({
|
|
|
170
179
|
return 'server';
|
|
171
180
|
}),
|
|
172
181
|
getOptimalPageSizeOptions: vi.fn(() => [10, 25, 50, 100]),
|
|
173
|
-
debounce: vi.fn((fn:
|
|
182
|
+
debounce: vi.fn((fn: (() => void) | (() => Promise<void>)) => fn),
|
|
174
183
|
});
|
|
175
184
|
|
|
176
185
|
/**
|
|
177
186
|
* Common mock for utils
|
|
178
187
|
*/
|
|
179
188
|
export const createUtilsMock = () => ({
|
|
180
|
-
cn: vi.fn((...classes:
|
|
189
|
+
cn: vi.fn((...classes: Array<string | undefined | null | false>) => classes.filter(Boolean).join(' ')),
|
|
181
190
|
});
|
|
182
191
|
|
|
192
|
+
/** User-like record for test data generators */
|
|
193
|
+
interface TestUserRecord extends DataRecord {
|
|
194
|
+
id: string;
|
|
195
|
+
name: string;
|
|
196
|
+
email: string;
|
|
197
|
+
role: string;
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
/** Column-like shape for test data generators */
|
|
201
|
+
interface TestColumnShape extends DataRecord {
|
|
202
|
+
id: string;
|
|
203
|
+
header: string;
|
|
204
|
+
accessorKey: string;
|
|
205
|
+
}
|
|
206
|
+
|
|
183
207
|
/**
|
|
184
208
|
* Common test data generators
|
|
185
209
|
*/
|
|
186
210
|
export const testDataGenerators = {
|
|
187
|
-
createUser: (id: number, overrides:
|
|
211
|
+
createUser: (id: number, overrides: Partial<TestUserRecord> = {}): TestUserRecord => ({
|
|
188
212
|
id: `user-${id}`,
|
|
189
213
|
name: `User ${id}`,
|
|
190
214
|
email: `user${id}@example.com`,
|
|
191
215
|
role: 'user',
|
|
192
216
|
...overrides,
|
|
193
217
|
}),
|
|
194
|
-
|
|
195
|
-
createUsers: (count: number) =>
|
|
218
|
+
|
|
219
|
+
createUsers: (count: number): TestUserRecord[] =>
|
|
196
220
|
Array.from({ length: count }, (_, i) => testDataGenerators.createUser(i + 1)),
|
|
197
|
-
|
|
198
|
-
createColumn: (id: string, overrides:
|
|
221
|
+
|
|
222
|
+
createColumn: (id: string, overrides: Partial<TestColumnShape> = {}): TestColumnShape => ({
|
|
199
223
|
id,
|
|
200
224
|
header: id.charAt(0).toUpperCase() + id.slice(1),
|
|
201
225
|
accessorKey: id,
|
|
202
226
|
...overrides,
|
|
203
227
|
}),
|
|
204
|
-
|
|
205
|
-
createColumns: (fields: string[] = ['name', 'email', 'role']) =>
|
|
206
|
-
fields.map(field => testDataGenerators.createColumn(field)),
|
|
228
|
+
|
|
229
|
+
createColumns: (fields: string[] = ['name', 'email', 'role']): TestColumnShape[] =>
|
|
230
|
+
fields.map((field) => testDataGenerators.createColumn(field)),
|
|
207
231
|
};
|
|
208
232
|
|
|
209
233
|
/**
|
|
@@ -227,12 +251,13 @@ export const testFeatures = {
|
|
|
227
251
|
columnReordering: false,
|
|
228
252
|
hierarchical: false,
|
|
229
253
|
}),
|
|
230
|
-
|
|
254
|
+
|
|
231
255
|
createWithEnabled: (features: string[]): DataTableFeatureConfig => {
|
|
232
256
|
const defaultFeatures = testFeatures.createDefault();
|
|
233
|
-
features.forEach(feature => {
|
|
234
|
-
|
|
235
|
-
|
|
257
|
+
features.forEach((feature) => {
|
|
258
|
+
const key = feature as keyof DataTableFeatureConfig;
|
|
259
|
+
if (key in defaultFeatures) {
|
|
260
|
+
(defaultFeatures as Record<keyof DataTableFeatureConfig, boolean>)[key] = true;
|
|
236
261
|
}
|
|
237
262
|
});
|
|
238
263
|
return defaultFeatures;
|
|
@@ -242,7 +267,7 @@ export const testFeatures = {
|
|
|
242
267
|
/**
|
|
243
268
|
* Common test actions
|
|
244
269
|
*/
|
|
245
|
-
export const testActions: DataTableAction<
|
|
270
|
+
export const testActions: DataTableAction<DataRecord>[] = [
|
|
246
271
|
{
|
|
247
272
|
label: 'Edit',
|
|
248
273
|
icon: MockEditIcon,
|
|
@@ -271,12 +296,12 @@ export const testPermissions = {
|
|
|
271
296
|
* Common test scenarios
|
|
272
297
|
*/
|
|
273
298
|
export const testScenarios = {
|
|
274
|
-
emptyData: [],
|
|
299
|
+
emptyData: [] as DataRecord[],
|
|
275
300
|
singleRow: [testDataGenerators.createUser(1)],
|
|
276
301
|
multipleRows: testDataGenerators.createUsers(5),
|
|
277
302
|
largeDataset: testDataGenerators.createUsers(1000),
|
|
278
|
-
invalidData: null as
|
|
279
|
-
malformedData: [{ invalid: 'data' }],
|
|
303
|
+
invalidData: null as unknown as DataRecord[],
|
|
304
|
+
malformedData: [{ invalid: 'data' }] as DataRecord[],
|
|
280
305
|
};
|
|
281
306
|
|
|
282
307
|
/**
|
|
@@ -287,12 +312,12 @@ export const testAssertions = {
|
|
|
287
312
|
const table = document.querySelector('table');
|
|
288
313
|
expect(table).toBeInTheDocument();
|
|
289
314
|
},
|
|
290
|
-
|
|
315
|
+
|
|
291
316
|
rendersMockedCells: (expectedCount: number) => {
|
|
292
317
|
const cells = document.querySelectorAll('text:contains("Mocked Cell")');
|
|
293
318
|
expect(cells).toHaveLength(expectedCount);
|
|
294
319
|
},
|
|
295
|
-
|
|
320
|
+
|
|
296
321
|
hasCorrectStructure: () => {
|
|
297
322
|
expect(document.querySelector('[data-testid="data-table-context"]')).toBeInTheDocument();
|
|
298
323
|
expect(document.querySelector('[data-testid="data-table-toolbar"]')).toBeInTheDocument();
|
|
@@ -307,19 +332,21 @@ export const testCleanup = {
|
|
|
307
332
|
clearAllMocks: () => {
|
|
308
333
|
vi.clearAllMocks();
|
|
309
334
|
},
|
|
310
|
-
|
|
335
|
+
|
|
311
336
|
resetModules: () => {
|
|
312
337
|
vi.resetModules();
|
|
313
338
|
},
|
|
314
|
-
|
|
339
|
+
|
|
315
340
|
restoreAllMocks: () => {
|
|
316
341
|
vi.restoreAllMocks();
|
|
317
342
|
},
|
|
318
343
|
};
|
|
319
344
|
|
|
320
345
|
/**
|
|
321
|
-
* Common test error handling
|
|
346
|
+
* Common test error handling.
|
|
347
|
+
* Test utility: intentionally mocks console for suppressed error/warning/log output in tests.
|
|
322
348
|
*/
|
|
349
|
+
/* eslint-disable no-console */
|
|
323
350
|
export const testErrorHandling = {
|
|
324
351
|
suppressConsoleErrors: () => {
|
|
325
352
|
const originalError = console.error;
|
|
@@ -328,7 +355,7 @@ export const testErrorHandling = {
|
|
|
328
355
|
console.error = originalError;
|
|
329
356
|
};
|
|
330
357
|
},
|
|
331
|
-
|
|
358
|
+
|
|
332
359
|
suppressConsoleWarnings: () => {
|
|
333
360
|
const originalWarn = console.warn;
|
|
334
361
|
console.warn = vi.fn();
|
|
@@ -336,16 +363,16 @@ export const testErrorHandling = {
|
|
|
336
363
|
console.warn = originalWarn;
|
|
337
364
|
};
|
|
338
365
|
},
|
|
339
|
-
|
|
366
|
+
|
|
340
367
|
suppressAllConsole: () => {
|
|
341
368
|
const originalError = console.error;
|
|
342
369
|
const originalWarn = console.warn;
|
|
343
370
|
const originalLog = console.log;
|
|
344
|
-
|
|
371
|
+
|
|
345
372
|
console.error = vi.fn();
|
|
346
373
|
console.warn = vi.fn();
|
|
347
374
|
console.log = vi.fn();
|
|
348
|
-
|
|
375
|
+
|
|
349
376
|
return () => {
|
|
350
377
|
console.error = originalError;
|
|
351
378
|
console.warn = originalWarn;
|
|
@@ -353,6 +380,12 @@ export const testErrorHandling = {
|
|
|
353
380
|
};
|
|
354
381
|
},
|
|
355
382
|
};
|
|
383
|
+
/* eslint-enable no-console */
|
|
384
|
+
|
|
385
|
+
/** Non-standard Performance with memory (Chrome DevTools). */
|
|
386
|
+
interface PerformanceWithMemory extends Performance {
|
|
387
|
+
memory?: { usedJSHeapSize: number };
|
|
388
|
+
}
|
|
356
389
|
|
|
357
390
|
/**
|
|
358
391
|
* Common test performance utilities
|
|
@@ -364,20 +397,18 @@ export const testPerformance = {
|
|
|
364
397
|
const end = performance.now();
|
|
365
398
|
return end - start;
|
|
366
399
|
},
|
|
367
|
-
|
|
400
|
+
|
|
368
401
|
measureMemoryUsage: () => {
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
}
|
|
372
|
-
return 0;
|
|
402
|
+
const perf = performance as PerformanceWithMemory;
|
|
403
|
+
return perf.memory?.usedJSHeapSize ?? 0;
|
|
373
404
|
},
|
|
374
|
-
|
|
405
|
+
|
|
375
406
|
waitForStableRender: async (maxWait = 1000) => {
|
|
376
|
-
return new Promise(resolve => {
|
|
407
|
+
return new Promise<void>((resolve) => {
|
|
377
408
|
const start = performance.now();
|
|
378
409
|
const check = () => {
|
|
379
410
|
if (performance.now() - start > maxWait) {
|
|
380
|
-
resolve(
|
|
411
|
+
resolve();
|
|
381
412
|
} else {
|
|
382
413
|
requestAnimationFrame(check);
|
|
383
414
|
}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @file DataTable action type definitions
|
|
3
|
+
* @package @jmruthers/pace-core
|
|
4
|
+
* @module Components/DataTable/Types
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
import React from 'react';
|
|
8
|
+
import type { DataRecord } from './base';
|
|
9
|
+
|
|
10
|
+
/** Boolean condition or predicate evaluated against a row */
|
|
11
|
+
export type ActionCondition<TData extends DataRecord> = boolean | ((row: TData) => boolean);
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* Action definition for DataTable rows.
|
|
15
|
+
* Defines custom actions that can be performed on table rows.
|
|
16
|
+
*/
|
|
17
|
+
export interface DataTableAction<TData extends DataRecord> {
|
|
18
|
+
/** Display label for the action */
|
|
19
|
+
label: string;
|
|
20
|
+
/** Icon component */
|
|
21
|
+
icon?: React.ComponentType<{ className?: string }>;
|
|
22
|
+
/** Action handler */
|
|
23
|
+
onClick: (row: TData) => void;
|
|
24
|
+
/** Visual variant */
|
|
25
|
+
variant?: 'default' | 'destructive' | 'outline' | 'secondary' | 'ghost';
|
|
26
|
+
/** Whether action is disabled */
|
|
27
|
+
disabled?: ActionCondition<TData>;
|
|
28
|
+
/** Whether action is hidden (for RBAC) */
|
|
29
|
+
hidden?: boolean;
|
|
30
|
+
/** Explicit visibility override */
|
|
31
|
+
visible?: ActionCondition<TData>;
|
|
32
|
+
/** Test ID for testing */
|
|
33
|
+
testId?: string;
|
|
34
|
+
/** Whether this action should only show for parent rows (hierarchical mode) */
|
|
35
|
+
showForParent?: boolean;
|
|
36
|
+
/** Whether this action should only show for child rows (hierarchical mode) */
|
|
37
|
+
showForChild?: boolean;
|
|
38
|
+
/** Icon component for parent rows (overrides icon when showForParent is true) */
|
|
39
|
+
parentIcon?: React.ComponentType<{ className?: string }>;
|
|
40
|
+
/** Icon component for child rows (overrides icon when showForChild is true) */
|
|
41
|
+
childIcon?: React.ComponentType<{ className?: string }>;
|
|
42
|
+
/** Label for parent rows (overrides label when showForParent is true) */
|
|
43
|
+
parentLabel?: string;
|
|
44
|
+
/** Label for child rows (overrides label when showForChild is true) */
|
|
45
|
+
childLabel?: string;
|
|
46
|
+
/** Whether the action should be shown while the row is in edit mode */
|
|
47
|
+
showInEditMode?: boolean;
|
|
48
|
+
/** Whether the action should be hidden while the row is in view mode */
|
|
49
|
+
hideInViewMode?: boolean;
|
|
50
|
+
/** Whether the action should explicitly render while in view mode */
|
|
51
|
+
showInViewMode?: boolean;
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
/** Actions prop for row components (MemoizedRow, etc.). */
|
|
55
|
+
export type RowActionsProp<TData extends DataRecord = DataRecord> = DataTableAction<TData>[];
|
|
56
|
+
|
|
57
|
+
/** Toolbar button definition */
|
|
58
|
+
export interface DataTableToolbarButton {
|
|
59
|
+
/** Display label */
|
|
60
|
+
label: string;
|
|
61
|
+
/** Icon component */
|
|
62
|
+
icon?: React.ComponentType<{ className?: string }>;
|
|
63
|
+
/** Click handler */
|
|
64
|
+
onClick: () => void;
|
|
65
|
+
/** Visual variant */
|
|
66
|
+
variant?: 'default' | 'destructive' | 'outline' | 'secondary' | 'ghost';
|
|
67
|
+
/** Whether button is disabled */
|
|
68
|
+
disabled?: boolean;
|
|
69
|
+
/** Test ID for testing */
|
|
70
|
+
testId?: string;
|
|
71
|
+
}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @file DataTable base type definitions
|
|
3
|
+
* @package @jmruthers/pace-core
|
|
4
|
+
* @module Components/DataTable/Types
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
// Extend TanStack Table types to include custom meta properties (must be in a loaded file)
|
|
8
|
+
declare module '@tanstack/react-table' {
|
|
9
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
10
|
+
interface ColumnMeta<TData, TValue> {
|
|
11
|
+
/** Text alignment for the column content */
|
|
12
|
+
align?: 'left' | 'right' | 'center';
|
|
13
|
+
/** Column type for styling purposes */
|
|
14
|
+
type?: 'text' | 'number' | 'date' | 'boolean' | 'custom';
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
18
|
+
interface ColumnDefBase<TData, TValue> {
|
|
19
|
+
/** Alternative accessor key used while editing */
|
|
20
|
+
editAccessorKey?: string;
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
/** Core value types that can exist in a data record */
|
|
25
|
+
export type CellValue = string | number | boolean | null | undefined | Date;
|
|
26
|
+
|
|
27
|
+
/**
|
|
28
|
+
* Base data record type - all DataTable data must extend this.
|
|
29
|
+
* Individual implementations should define more specific types.
|
|
30
|
+
*/
|
|
31
|
+
export interface DataRecord {
|
|
32
|
+
[key: string]: unknown;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
/** Row ID type - always a string */
|
|
36
|
+
export type RowId = string;
|
|
37
|
+
|
|
38
|
+
/** Row identifier function type */
|
|
39
|
+
export type GetRowId<TData extends DataRecord> = (row: TData, index: number) => RowId;
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @file DataTable column type definitions
|
|
3
|
+
* @package @jmruthers/pace-core
|
|
4
|
+
* @module Components/DataTable/Types
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
import React from 'react';
|
|
8
|
+
import type { ColumnDef } from '@tanstack/react-table';
|
|
9
|
+
import type { DataRecord } from './base';
|
|
10
|
+
|
|
11
|
+
/** Aggregate configuration */
|
|
12
|
+
export interface AggregateConfig {
|
|
13
|
+
field: string;
|
|
14
|
+
function: 'sum' | 'avg' | 'count' | 'min' | 'max';
|
|
15
|
+
label: string;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* Enhanced column definition that extends TanStack's ColumnDef
|
|
20
|
+
*/
|
|
21
|
+
export interface DataTableColumn<TData extends DataRecord = DataRecord> extends Omit<ColumnDef<TData>, 'id' | 'accessorKey'> {
|
|
22
|
+
/** Column identifier */
|
|
23
|
+
id?: string;
|
|
24
|
+
/** Accessor key for data */
|
|
25
|
+
accessorKey?: string;
|
|
26
|
+
/** Alternative accessor key used while editing */
|
|
27
|
+
editAccessorKey?: string;
|
|
28
|
+
/** Custom header label for the column */
|
|
29
|
+
header: string;
|
|
30
|
+
/** Whether this column should be searchable in global filter */
|
|
31
|
+
searchable?: boolean;
|
|
32
|
+
/** Enable sorting */
|
|
33
|
+
sortable?: boolean;
|
|
34
|
+
/** Enable column filter (inherits from ColumnDef) */
|
|
35
|
+
enableColumnFilter?: boolean;
|
|
36
|
+
/** Enable grouping (inherits from ColumnDef) */
|
|
37
|
+
enableGrouping?: boolean;
|
|
38
|
+
/** Enable hiding (inherits from ColumnDef) */
|
|
39
|
+
enableHiding?: boolean;
|
|
40
|
+
/** Aggregate configuration for this column */
|
|
41
|
+
aggregate?: AggregateConfig;
|
|
42
|
+
/** Enable virtual scrolling for this column */
|
|
43
|
+
virtualizable?: boolean;
|
|
44
|
+
/** Custom cell renderer with memoization */
|
|
45
|
+
memoizedCell?: React.ComponentType<{ row: TData }>;
|
|
46
|
+
/** Field type for editing (text, select, date, checkbox, etc.) */
|
|
47
|
+
fieldType?: 'text' | 'select' | 'date' | 'number' | 'boolean' | 'checkbox';
|
|
48
|
+
/** Options for select fields - can be simple items or grouped with labels and separators */
|
|
49
|
+
fieldOptions?: Array<
|
|
50
|
+
| { value: string | number; label: string }
|
|
51
|
+
| { type: 'group'; label: string; items: Array<{ value: string | number; label: string }> }
|
|
52
|
+
| { type: 'separator' }
|
|
53
|
+
>;
|
|
54
|
+
/** Enable keyboard search/filtering in select dropdowns within editable columns (default: true). */
|
|
55
|
+
selectSearchable?: boolean;
|
|
56
|
+
/** Enable creating new items in select dropdowns (default: false) */
|
|
57
|
+
creatable?: boolean;
|
|
58
|
+
/** Callback to create a new item when user types non-matching text in select dropdown */
|
|
59
|
+
onCreateNew?: (inputValue: string) => Promise<string | number> | string | number;
|
|
60
|
+
/** Maximum height for select dropdown content (default: "20rem") */
|
|
61
|
+
selectMaxHeight?: string;
|
|
62
|
+
/** Custom className for select content dropdown */
|
|
63
|
+
selectContentClassName?: string;
|
|
64
|
+
/** Custom style for select content dropdown */
|
|
65
|
+
selectContentStyle?: React.CSSProperties;
|
|
66
|
+
/** Hide spinner arrows on number input fields (default: true for DataTable) */
|
|
67
|
+
hideNumberSpinners?: boolean;
|
|
68
|
+
/** Filter type for column filtering (text, select, number, date) */
|
|
69
|
+
filterType?: 'text' | 'select' | 'number' | 'date';
|
|
70
|
+
/** Options for select filters (alternative to fieldOptions) */
|
|
71
|
+
filterSelectOptions?: Array<{ value: string | number; label: string }>;
|
|
72
|
+
/** Whether this column is editable in edit mode (default: true) */
|
|
73
|
+
editable?: boolean;
|
|
74
|
+
/** Alternative CSV headers that should map to this column during import */
|
|
75
|
+
importAliases?: string[];
|
|
76
|
+
|
|
77
|
+
/** Custom renderer for parent rows */
|
|
78
|
+
renderForParent?: (row: TData) => React.ReactNode;
|
|
79
|
+
/** Custom renderer for child rows */
|
|
80
|
+
renderForChild?: (row: TData) => React.ReactNode;
|
|
81
|
+
/** Hide this column for parent rows */
|
|
82
|
+
hideForParent?: boolean;
|
|
83
|
+
/** Hide this column for child rows */
|
|
84
|
+
hideForChild?: boolean;
|
|
85
|
+
|
|
86
|
+
/**
|
|
87
|
+
* Aggregation function for grouped rows.
|
|
88
|
+
* If not provided, grouped rows will show empty/undefined for this column.
|
|
89
|
+
*/
|
|
90
|
+
aggregateFn?: (rows: TData[], column: DataTableColumn<TData>) => unknown;
|
|
91
|
+
/** Optional: Custom cell renderer for aggregated values in grouped rows. */
|
|
92
|
+
aggregateCell?: (value: unknown, rows: TData[], column: DataTableColumn<TData>) => React.ReactNode;
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
/**
|
|
96
|
+
* Extended column definition used when rendering editable rows
|
|
97
|
+
*/
|
|
98
|
+
export interface EditableColumnDef<TData extends DataRecord = DataRecord> extends DataTableColumn<TData> {
|
|
99
|
+
/** Whether the column can be edited */
|
|
100
|
+
editable?: boolean;
|
|
101
|
+
/** Field type used to determine edit control */
|
|
102
|
+
fieldType?: 'text' | 'select' | 'date' | 'number' | 'boolean' | 'checkbox';
|
|
103
|
+
/** Options for select based editors */
|
|
104
|
+
fieldOptions?: Array<
|
|
105
|
+
| { value: string | number; label: string }
|
|
106
|
+
| { type: 'group'; label: string; items: Array<{ value: string | number; label: string }> }
|
|
107
|
+
| { type: 'separator' }
|
|
108
|
+
>;
|
|
109
|
+
selectSearchable?: boolean;
|
|
110
|
+
creatable?: boolean;
|
|
111
|
+
onCreateNew?: (inputValue: string) => Promise<string | number> | string | number;
|
|
112
|
+
hideNumberSpinners?: boolean;
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
/** Simple column interface for basic use cases */
|
|
116
|
+
export interface SimpleColumn<TData extends DataRecord = DataRecord> {
|
|
117
|
+
/** Data accessor key */
|
|
118
|
+
key: keyof TData | string;
|
|
119
|
+
/** Display label */
|
|
120
|
+
label: string;
|
|
121
|
+
/** Enable sorting */
|
|
122
|
+
sortable?: boolean;
|
|
123
|
+
/** Enable filtering */
|
|
124
|
+
filterable?: boolean;
|
|
125
|
+
}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @file DataTable export type definitions
|
|
3
|
+
* @package @jmruthers/pace-core
|
|
4
|
+
* @module Components/DataTable/Types
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
import type { DataRecord } from './base';
|
|
8
|
+
import type { DataTableColumn } from './columns';
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* Options provided to the onExport handler for custom export functionality
|
|
12
|
+
*/
|
|
13
|
+
export interface ExportOptions<TData extends DataRecord> {
|
|
14
|
+
/** Filtered table rows with getValue() method for proper accessorFn evaluation */
|
|
15
|
+
tableRows: Array<{
|
|
16
|
+
original: TData;
|
|
17
|
+
getValue: (columnId: string) => unknown;
|
|
18
|
+
id: string;
|
|
19
|
+
}>;
|
|
20
|
+
/** All column definitions passed to the DataTable */
|
|
21
|
+
allColumns: DataTableColumn<TData>[];
|
|
22
|
+
/** Currently visible columns in the table */
|
|
23
|
+
visibleColumns: DataTableColumn<TData>[];
|
|
24
|
+
/** Mapping of column IDs to TanStack table column instances (for getValue() calls) */
|
|
25
|
+
columnIdToTableColumn: Map<string, unknown>;
|
|
26
|
+
/** Raw data array (unfiltered) */
|
|
27
|
+
data: TData[];
|
|
28
|
+
/** Default filename generated from table title */
|
|
29
|
+
filename: string;
|
|
30
|
+
/** TanStack table instance for advanced operations */
|
|
31
|
+
table: unknown;
|
|
32
|
+
}
|