@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
|
@@ -3,19 +3,20 @@ import React__default, { ReactNode, Component, ErrorInfo } from 'react';
|
|
|
3
3
|
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
4
4
|
import { P as ParsedAddress, A as AutocompleteOptions } from './types-Dr8sNhER.js';
|
|
5
5
|
import * as LabelPrimitive from '@radix-ui/react-label';
|
|
6
|
-
import { F as FileCategory,
|
|
6
|
+
import { F as FileCategory, j as FileUploadResult, U as UploadProgress, c as FileUploadOptions, a as FileReference } from './file-reference-DU1hcawx.js';
|
|
7
7
|
import * as CheckboxPrimitive from '@radix-ui/react-checkbox';
|
|
8
8
|
import * as SwitchPrimitive from '@radix-ui/react-switch';
|
|
9
9
|
import * as TabsPrimitive from '@radix-ui/react-tabs';
|
|
10
10
|
import { DayPickerProps, DateRange } from 'react-day-picker';
|
|
11
11
|
import * as ToastPrimitives from '@radix-ui/react-toast';
|
|
12
12
|
import * as TooltipPrimitive from '@radix-ui/react-tooltip';
|
|
13
|
-
import {
|
|
13
|
+
import { D as DataRecord, P as PerformanceConfig, S as ServerSideConfig, b as PaginationMode, C as ChunkingConfig, a as SearchIndexConfig, G as GetRowId } from './pagination-BW1mqywp.js';
|
|
14
|
+
import { ColumnDef } from '@tanstack/react-table';
|
|
14
15
|
import { FieldValues, DefaultValues, SubmitHandler, SubmitErrorHandler, UseFormReturn, FieldPath, ControllerRenderProps, ControllerFieldState, UseFormStateReturn } from 'react-hook-form';
|
|
15
16
|
import { z } from 'zod';
|
|
16
17
|
import { N as NavigationMenuProps, a as NavigationItem } from './types-BE2sEHKd.js';
|
|
17
18
|
import { User, SupabaseClient, createClient } from '@supabase/supabase-js';
|
|
18
|
-
import { O as Organisation,
|
|
19
|
+
import { O as Organisation, h as Event } from './event-BfCox3N2.js';
|
|
19
20
|
|
|
20
21
|
/**
|
|
21
22
|
* Button component props
|
|
@@ -992,7 +993,7 @@ declare const Dialog: React$1.NamedExoticComponent<DialogProps>;
|
|
|
992
993
|
* DialogTrigger component
|
|
993
994
|
* Opens the dialog when clicked
|
|
994
995
|
*/
|
|
995
|
-
declare const DialogTrigger: React$1.ForwardRefExoticComponent<DialogTriggerProps & React$1.RefAttributes<
|
|
996
|
+
declare const DialogTrigger: React$1.ForwardRefExoticComponent<DialogTriggerProps & React$1.RefAttributes<HTMLButtonElement>>;
|
|
996
997
|
/**
|
|
997
998
|
* DialogPortal component
|
|
998
999
|
* Portals dialog content to document.body
|
|
@@ -1000,7 +1001,9 @@ declare const DialogTrigger: React$1.ForwardRefExoticComponent<DialogTriggerProp
|
|
|
1000
1001
|
declare const DialogPortal: React$1.FC<DialogPortalProps>;
|
|
1001
1002
|
/**
|
|
1002
1003
|
* DialogContent component
|
|
1003
|
-
* The main content container using semantic HTML <dialog> element with enhanced features
|
|
1004
|
+
* The main content container using semantic HTML <dialog> element with enhanced features.
|
|
1005
|
+
* Inline style exception (5-styling): viewport-based max/min dimensions from props are applied
|
|
1006
|
+
* via the style prop; they cannot be expressed with static Tailwind and are merged with optional consumer style.
|
|
1004
1007
|
*
|
|
1005
1008
|
* @param props - Content configuration and styling
|
|
1006
1009
|
* @param ref - Forwarded ref to the dialog element
|
|
@@ -1799,6 +1802,310 @@ interface TooltipProps {
|
|
|
1799
1802
|
*/
|
|
1800
1803
|
declare const Tooltip: React$1.ForwardRefExoticComponent<TooltipProps & React$1.RefAttributes<HTMLButtonElement>>;
|
|
1801
1804
|
|
|
1805
|
+
/**
|
|
1806
|
+
* @file DataTable hierarchical type definitions
|
|
1807
|
+
* @package @jmruthers/pace-core
|
|
1808
|
+
* @module Components/DataTable/Types
|
|
1809
|
+
*/
|
|
1810
|
+
|
|
1811
|
+
/** Hierarchical configuration for DataTable */
|
|
1812
|
+
interface HierarchicalConfig {
|
|
1813
|
+
/** Enable hierarchical functionality */
|
|
1814
|
+
enabled: boolean;
|
|
1815
|
+
/** Default expanded state - true = all expanded, false = all collapsed, array = specific IDs */
|
|
1816
|
+
defaultExpanded?: boolean | string[];
|
|
1817
|
+
/** Callback when expanded state changes */
|
|
1818
|
+
onExpandedChange?: (expandedIds: string[]) => void;
|
|
1819
|
+
/** Visual indentation for child rows (in pixels) */
|
|
1820
|
+
indentSize?: number;
|
|
1821
|
+
/** Custom styling for parent rows */
|
|
1822
|
+
parentRowClassName?: string;
|
|
1823
|
+
/** Custom styling for child rows */
|
|
1824
|
+
childRowClassName?: string;
|
|
1825
|
+
}
|
|
1826
|
+
|
|
1827
|
+
/**
|
|
1828
|
+
* @file DataTable column type definitions
|
|
1829
|
+
* @package @jmruthers/pace-core
|
|
1830
|
+
* @module Components/DataTable/Types
|
|
1831
|
+
*/
|
|
1832
|
+
|
|
1833
|
+
/** Aggregate configuration */
|
|
1834
|
+
interface AggregateConfig {
|
|
1835
|
+
field: string;
|
|
1836
|
+
function: 'sum' | 'avg' | 'count' | 'min' | 'max';
|
|
1837
|
+
label: string;
|
|
1838
|
+
}
|
|
1839
|
+
/**
|
|
1840
|
+
* Enhanced column definition that extends TanStack's ColumnDef
|
|
1841
|
+
*/
|
|
1842
|
+
interface DataTableColumn<TData extends DataRecord = DataRecord> extends Omit<ColumnDef<TData>, 'id' | 'accessorKey'> {
|
|
1843
|
+
/** Column identifier */
|
|
1844
|
+
id?: string;
|
|
1845
|
+
/** Accessor key for data */
|
|
1846
|
+
accessorKey?: string;
|
|
1847
|
+
/** Alternative accessor key used while editing */
|
|
1848
|
+
editAccessorKey?: string;
|
|
1849
|
+
/** Custom header label for the column */
|
|
1850
|
+
header: string;
|
|
1851
|
+
/** Whether this column should be searchable in global filter */
|
|
1852
|
+
searchable?: boolean;
|
|
1853
|
+
/** Enable sorting */
|
|
1854
|
+
sortable?: boolean;
|
|
1855
|
+
/** Enable column filter (inherits from ColumnDef) */
|
|
1856
|
+
enableColumnFilter?: boolean;
|
|
1857
|
+
/** Enable grouping (inherits from ColumnDef) */
|
|
1858
|
+
enableGrouping?: boolean;
|
|
1859
|
+
/** Enable hiding (inherits from ColumnDef) */
|
|
1860
|
+
enableHiding?: boolean;
|
|
1861
|
+
/** Aggregate configuration for this column */
|
|
1862
|
+
aggregate?: AggregateConfig;
|
|
1863
|
+
/** Enable virtual scrolling for this column */
|
|
1864
|
+
virtualizable?: boolean;
|
|
1865
|
+
/** Custom cell renderer with memoization */
|
|
1866
|
+
memoizedCell?: React__default.ComponentType<{
|
|
1867
|
+
row: TData;
|
|
1868
|
+
}>;
|
|
1869
|
+
/** Field type for editing (text, select, date, checkbox, etc.) */
|
|
1870
|
+
fieldType?: 'text' | 'select' | 'date' | 'number' | 'boolean' | 'checkbox';
|
|
1871
|
+
/** Options for select fields - can be simple items or grouped with labels and separators */
|
|
1872
|
+
fieldOptions?: Array<{
|
|
1873
|
+
value: string | number;
|
|
1874
|
+
label: string;
|
|
1875
|
+
} | {
|
|
1876
|
+
type: 'group';
|
|
1877
|
+
label: string;
|
|
1878
|
+
items: Array<{
|
|
1879
|
+
value: string | number;
|
|
1880
|
+
label: string;
|
|
1881
|
+
}>;
|
|
1882
|
+
} | {
|
|
1883
|
+
type: 'separator';
|
|
1884
|
+
}>;
|
|
1885
|
+
/** Enable keyboard search/filtering in select dropdowns within editable columns (default: true). */
|
|
1886
|
+
selectSearchable?: boolean;
|
|
1887
|
+
/** Enable creating new items in select dropdowns (default: false) */
|
|
1888
|
+
creatable?: boolean;
|
|
1889
|
+
/** Callback to create a new item when user types non-matching text in select dropdown */
|
|
1890
|
+
onCreateNew?: (inputValue: string) => Promise<string | number> | string | number;
|
|
1891
|
+
/** Maximum height for select dropdown content (default: "20rem") */
|
|
1892
|
+
selectMaxHeight?: string;
|
|
1893
|
+
/** Custom className for select content dropdown */
|
|
1894
|
+
selectContentClassName?: string;
|
|
1895
|
+
/** Custom style for select content dropdown */
|
|
1896
|
+
selectContentStyle?: React__default.CSSProperties;
|
|
1897
|
+
/** Hide spinner arrows on number input fields (default: true for DataTable) */
|
|
1898
|
+
hideNumberSpinners?: boolean;
|
|
1899
|
+
/** Filter type for column filtering (text, select, number, date) */
|
|
1900
|
+
filterType?: 'text' | 'select' | 'number' | 'date';
|
|
1901
|
+
/** Options for select filters (alternative to fieldOptions) */
|
|
1902
|
+
filterSelectOptions?: Array<{
|
|
1903
|
+
value: string | number;
|
|
1904
|
+
label: string;
|
|
1905
|
+
}>;
|
|
1906
|
+
/** Whether this column is editable in edit mode (default: true) */
|
|
1907
|
+
editable?: boolean;
|
|
1908
|
+
/** Alternative CSV headers that should map to this column during import */
|
|
1909
|
+
importAliases?: string[];
|
|
1910
|
+
/** Custom renderer for parent rows */
|
|
1911
|
+
renderForParent?: (row: TData) => React__default.ReactNode;
|
|
1912
|
+
/** Custom renderer for child rows */
|
|
1913
|
+
renderForChild?: (row: TData) => React__default.ReactNode;
|
|
1914
|
+
/** Hide this column for parent rows */
|
|
1915
|
+
hideForParent?: boolean;
|
|
1916
|
+
/** Hide this column for child rows */
|
|
1917
|
+
hideForChild?: boolean;
|
|
1918
|
+
/**
|
|
1919
|
+
* Aggregation function for grouped rows.
|
|
1920
|
+
* If not provided, grouped rows will show empty/undefined for this column.
|
|
1921
|
+
*/
|
|
1922
|
+
aggregateFn?: (rows: TData[], column: DataTableColumn<TData>) => unknown;
|
|
1923
|
+
/** Optional: Custom cell renderer for aggregated values in grouped rows. */
|
|
1924
|
+
aggregateCell?: (value: unknown, rows: TData[], column: DataTableColumn<TData>) => React__default.ReactNode;
|
|
1925
|
+
}
|
|
1926
|
+
|
|
1927
|
+
/**
|
|
1928
|
+
* @file DataTable feature configuration type definitions
|
|
1929
|
+
* @package @jmruthers/pace-core
|
|
1930
|
+
* @module Components/DataTable/Types
|
|
1931
|
+
*/
|
|
1932
|
+
|
|
1933
|
+
/**
|
|
1934
|
+
* Unified feature configuration for DataTable
|
|
1935
|
+
* All features are disabled by default and must be explicitly enabled
|
|
1936
|
+
*/
|
|
1937
|
+
interface DataTableFeatureFlags {
|
|
1938
|
+
search: boolean;
|
|
1939
|
+
pagination: boolean;
|
|
1940
|
+
sorting: boolean;
|
|
1941
|
+
filtering: boolean;
|
|
1942
|
+
import: boolean;
|
|
1943
|
+
export: boolean;
|
|
1944
|
+
selection: boolean;
|
|
1945
|
+
creation: boolean;
|
|
1946
|
+
editing: boolean;
|
|
1947
|
+
deletion: boolean;
|
|
1948
|
+
deleteSelected: boolean;
|
|
1949
|
+
grouping: boolean;
|
|
1950
|
+
columnVisibility: boolean;
|
|
1951
|
+
columnReordering: boolean;
|
|
1952
|
+
hierarchical: boolean;
|
|
1953
|
+
}
|
|
1954
|
+
/**
|
|
1955
|
+
* Consumer-facing feature configuration. All properties are optional and will be
|
|
1956
|
+
* merged with defaultDataTableFeatures at runtime.
|
|
1957
|
+
*/
|
|
1958
|
+
type DataTableFeatureConfig = Partial<DataTableFeatureFlags>;
|
|
1959
|
+
/** Empty state configuration */
|
|
1960
|
+
interface EmptyStateConfig {
|
|
1961
|
+
title?: string;
|
|
1962
|
+
description?: string;
|
|
1963
|
+
icon?: React__default.ComponentType<{
|
|
1964
|
+
className?: string;
|
|
1965
|
+
}>;
|
|
1966
|
+
action?: {
|
|
1967
|
+
label: string;
|
|
1968
|
+
onClick: () => void;
|
|
1969
|
+
};
|
|
1970
|
+
}
|
|
1971
|
+
|
|
1972
|
+
/**
|
|
1973
|
+
* @file DataTable action type definitions
|
|
1974
|
+
* @package @jmruthers/pace-core
|
|
1975
|
+
* @module Components/DataTable/Types
|
|
1976
|
+
*/
|
|
1977
|
+
|
|
1978
|
+
/** Boolean condition or predicate evaluated against a row */
|
|
1979
|
+
type ActionCondition<TData extends DataRecord> = boolean | ((row: TData) => boolean);
|
|
1980
|
+
/**
|
|
1981
|
+
* Action definition for DataTable rows.
|
|
1982
|
+
* Defines custom actions that can be performed on table rows.
|
|
1983
|
+
*/
|
|
1984
|
+
interface DataTableAction<TData extends DataRecord> {
|
|
1985
|
+
/** Display label for the action */
|
|
1986
|
+
label: string;
|
|
1987
|
+
/** Icon component */
|
|
1988
|
+
icon?: React__default.ComponentType<{
|
|
1989
|
+
className?: string;
|
|
1990
|
+
}>;
|
|
1991
|
+
/** Action handler */
|
|
1992
|
+
onClick: (row: TData) => void;
|
|
1993
|
+
/** Visual variant */
|
|
1994
|
+
variant?: 'default' | 'destructive' | 'outline' | 'secondary' | 'ghost';
|
|
1995
|
+
/** Whether action is disabled */
|
|
1996
|
+
disabled?: ActionCondition<TData>;
|
|
1997
|
+
/** Whether action is hidden (for RBAC) */
|
|
1998
|
+
hidden?: boolean;
|
|
1999
|
+
/** Explicit visibility override */
|
|
2000
|
+
visible?: ActionCondition<TData>;
|
|
2001
|
+
/** Test ID for testing */
|
|
2002
|
+
testId?: string;
|
|
2003
|
+
/** Whether this action should only show for parent rows (hierarchical mode) */
|
|
2004
|
+
showForParent?: boolean;
|
|
2005
|
+
/** Whether this action should only show for child rows (hierarchical mode) */
|
|
2006
|
+
showForChild?: boolean;
|
|
2007
|
+
/** Icon component for parent rows (overrides icon when showForParent is true) */
|
|
2008
|
+
parentIcon?: React__default.ComponentType<{
|
|
2009
|
+
className?: string;
|
|
2010
|
+
}>;
|
|
2011
|
+
/** Icon component for child rows (overrides icon when showForChild is true) */
|
|
2012
|
+
childIcon?: React__default.ComponentType<{
|
|
2013
|
+
className?: string;
|
|
2014
|
+
}>;
|
|
2015
|
+
/** Label for parent rows (overrides label when showForParent is true) */
|
|
2016
|
+
parentLabel?: string;
|
|
2017
|
+
/** Label for child rows (overrides label when showForChild is true) */
|
|
2018
|
+
childLabel?: string;
|
|
2019
|
+
/** Whether the action should be shown while the row is in edit mode */
|
|
2020
|
+
showInEditMode?: boolean;
|
|
2021
|
+
/** Whether the action should be hidden while the row is in view mode */
|
|
2022
|
+
hideInViewMode?: boolean;
|
|
2023
|
+
/** Whether the action should explicitly render while in view mode */
|
|
2024
|
+
showInViewMode?: boolean;
|
|
2025
|
+
}
|
|
2026
|
+
/** Toolbar button definition */
|
|
2027
|
+
interface DataTableToolbarButton {
|
|
2028
|
+
/** Display label */
|
|
2029
|
+
label: string;
|
|
2030
|
+
/** Icon component */
|
|
2031
|
+
icon?: React__default.ComponentType<{
|
|
2032
|
+
className?: string;
|
|
2033
|
+
}>;
|
|
2034
|
+
/** Click handler */
|
|
2035
|
+
onClick: () => void;
|
|
2036
|
+
/** Visual variant */
|
|
2037
|
+
variant?: 'default' | 'destructive' | 'outline' | 'secondary' | 'ghost';
|
|
2038
|
+
/** Whether button is disabled */
|
|
2039
|
+
disabled?: boolean;
|
|
2040
|
+
/** Test ID for testing */
|
|
2041
|
+
testId?: string;
|
|
2042
|
+
}
|
|
2043
|
+
|
|
2044
|
+
/**
|
|
2045
|
+
* RBAC configuration for DataTable - MANDATORY for all DataTables
|
|
2046
|
+
*/
|
|
2047
|
+
interface DataTableRBACConfig {
|
|
2048
|
+
/** Page name for page-based permissions - will be resolved to page ID */
|
|
2049
|
+
pageName?: string;
|
|
2050
|
+
/** Page ID for page-based permissions - used directly if provided */
|
|
2051
|
+
pageId?: string;
|
|
2052
|
+
}
|
|
2053
|
+
|
|
2054
|
+
/**
|
|
2055
|
+
* @file DataTable export type definitions
|
|
2056
|
+
* @package @jmruthers/pace-core
|
|
2057
|
+
* @module Components/DataTable/Types
|
|
2058
|
+
*/
|
|
2059
|
+
|
|
2060
|
+
/**
|
|
2061
|
+
* Options provided to the onExport handler for custom export functionality
|
|
2062
|
+
*/
|
|
2063
|
+
interface ExportOptions<TData extends DataRecord> {
|
|
2064
|
+
/** Filtered table rows with getValue() method for proper accessorFn evaluation */
|
|
2065
|
+
tableRows: Array<{
|
|
2066
|
+
original: TData;
|
|
2067
|
+
getValue: (columnId: string) => unknown;
|
|
2068
|
+
id: string;
|
|
2069
|
+
}>;
|
|
2070
|
+
/** All column definitions passed to the DataTable */
|
|
2071
|
+
allColumns: DataTableColumn<TData>[];
|
|
2072
|
+
/** Currently visible columns in the table */
|
|
2073
|
+
visibleColumns: DataTableColumn<TData>[];
|
|
2074
|
+
/** Mapping of column IDs to TanStack table column instances (for getValue() calls) */
|
|
2075
|
+
columnIdToTableColumn: Map<string, unknown>;
|
|
2076
|
+
/** Raw data array (unfiltered) */
|
|
2077
|
+
data: TData[];
|
|
2078
|
+
/** Default filename generated from table title */
|
|
2079
|
+
filename: string;
|
|
2080
|
+
/** TanStack table instance for advanced operations */
|
|
2081
|
+
table: unknown;
|
|
2082
|
+
}
|
|
2083
|
+
|
|
2084
|
+
/**
|
|
2085
|
+
* @file Import Modal Persistence
|
|
2086
|
+
* @package @jmruthers/pace-core
|
|
2087
|
+
* @module Components/DataTable/Components
|
|
2088
|
+
*
|
|
2089
|
+
* Module-level storage for ImportModal state so it survives remounts.
|
|
2090
|
+
* Only the useImportModalState hook should read/write these.
|
|
2091
|
+
*
|
|
2092
|
+
* ImportSummary is the only contract for app-returned results: when onImport
|
|
2093
|
+
* returns this shape, the modal uses it for the summary. Any other return
|
|
2094
|
+
* shape is treated as chunk failed. See implementation-guides/data-tables.md
|
|
2095
|
+
* "Import result contract" for consuming app guidance.
|
|
2096
|
+
*/
|
|
2097
|
+
interface ImportSummary {
|
|
2098
|
+
successCount: number;
|
|
2099
|
+
totalCount: number;
|
|
2100
|
+
failedCount: number;
|
|
2101
|
+
failedRows?: Array<{
|
|
2102
|
+
row: number;
|
|
2103
|
+
reason: string;
|
|
2104
|
+
}>;
|
|
2105
|
+
}
|
|
2106
|
+
/** Return type for onImport: void/Promise<void> or ImportSummary/Promise<ImportSummary>. Async handlers may return Promise<void | ImportSummary>. */
|
|
2107
|
+
type ImportHandlerResult = void | Promise<void> | ImportSummary | Promise<ImportSummary> | Promise<void | ImportSummary>;
|
|
2108
|
+
|
|
1802
2109
|
/**
|
|
1803
2110
|
* Configuration interface for customizing ImportModal text content
|
|
1804
2111
|
* @public
|
|
@@ -1822,6 +2129,11 @@ interface ImportModalConfig {
|
|
|
1822
2129
|
previewHeaderText?: string;
|
|
1823
2130
|
/** Custom text pattern for total rows display. Use {count} as placeholder for the actual count */
|
|
1824
2131
|
totalRowsText?: string;
|
|
2132
|
+
/**
|
|
2133
|
+
* When true, the entire file is sent to onImport in one chunk.
|
|
2134
|
+
* Use for imports that do delete-then-insert per unit/entity so later chunks do not overwrite earlier ones.
|
|
2135
|
+
*/
|
|
2136
|
+
singleChunk?: boolean;
|
|
1825
2137
|
}
|
|
1826
2138
|
|
|
1827
2139
|
/**
|
|
@@ -1884,7 +2196,7 @@ interface DataTableProps<TData extends DataRecord> {
|
|
|
1884
2196
|
/** Callback when a new row is created */
|
|
1885
2197
|
onCreateRow?: (data: Partial<TData>) => void;
|
|
1886
2198
|
/** Callback when data is imported */
|
|
1887
|
-
onImport?: (data: TData[]) =>
|
|
2199
|
+
onImport?: (data: TData[]) => ImportHandlerResult;
|
|
1888
2200
|
/** Callback for custom export functionality */
|
|
1889
2201
|
onExport?: (options: ExportOptions<TData>) => void | Promise<void>;
|
|
1890
2202
|
/** Callback when row selection changes */
|
|
@@ -1903,6 +2215,8 @@ interface DataTableProps<TData extends DataRecord> {
|
|
|
1903
2215
|
aggregates?: AggregateConfig[];
|
|
1904
2216
|
/** Import modal configuration */
|
|
1905
2217
|
importModalConfig?: ImportModalConfig;
|
|
2218
|
+
/** Called when the import modal is closed (e.g. to refetch table data). */
|
|
2219
|
+
onImportModalClose?: () => void;
|
|
1906
2220
|
/** Custom row actions - use this for custom action buttons */
|
|
1907
2221
|
actions?: DataTableAction<TData>[];
|
|
1908
2222
|
/** Column order configuration - array of column IDs in desired order */
|
|
@@ -2299,191 +2613,8 @@ declare const LoginForm: React__default.NamedExoticComponent<LoginFormProps>;
|
|
|
2299
2613
|
* @module Navigation
|
|
2300
2614
|
* @since 0.1.0
|
|
2301
2615
|
*
|
|
2302
|
-
*
|
|
2303
|
-
*
|
|
2304
|
-
* Features:
|
|
2305
|
-
* - Dropdown mode: Menu button that opens a dropdown list
|
|
2306
|
-
* - Hierarchical mode: Expandable tree navigation with nested items
|
|
2307
|
-
* - Icon support for navigation items
|
|
2308
|
-
* - Current page highlighting
|
|
2309
|
-
* - Keyboard navigation support
|
|
2310
|
-
* - Accessible design with proper ARIA attributes
|
|
2311
|
-
* - Click outside to close (dropdown mode)
|
|
2312
|
-
* - Recursive rendering for nested items (hierarchical mode)
|
|
2313
|
-
*
|
|
2314
|
-
* @example
|
|
2315
|
-
* Basic dropdown navigation (most common use case):
|
|
2316
|
-
* ```tsx
|
|
2317
|
-
* import { NavigationMenu } from '@jmruthers/pace-core';
|
|
2318
|
-
* import { useNavigate, useLocation } from 'react-router-dom';
|
|
2319
|
-
*
|
|
2320
|
-
* function AppNavigation() {
|
|
2321
|
-
* const navigate = useNavigate();
|
|
2322
|
-
* const location = useLocation();
|
|
2323
|
-
*
|
|
2324
|
-
* const navItems = [
|
|
2325
|
-
* { id: 'home', label: 'Home', href: '/', icon: 'Home' },
|
|
2326
|
-
* { id: 'dashboard', label: 'Dashboard', href: '/dashboard', icon: 'LayoutDashboard' },
|
|
2327
|
-
* { id: 'reports', label: 'Reports', href: '/reports', icon: 'FileText' },
|
|
2328
|
-
* { id: 'settings', label: 'Settings', href: '/settings', icon: 'Settings' }
|
|
2329
|
-
* ];
|
|
2330
|
-
*
|
|
2331
|
-
* return (
|
|
2332
|
-
* <NavigationMenu
|
|
2333
|
-
* items={navItems}
|
|
2334
|
-
* mode="dropdown"
|
|
2335
|
-
* currentPath={location.pathname}
|
|
2336
|
-
* onNavigate={(item) => navigate(item.href)}
|
|
2337
|
-
* buttonText="Main Menu"
|
|
2338
|
-
* showIcons={true}
|
|
2339
|
-
* />
|
|
2340
|
-
* );
|
|
2341
|
-
* }
|
|
2342
|
-
*
|
|
2343
|
-
* @example
|
|
2344
|
-
* Hierarchical navigation with nested items:
|
|
2345
|
-
* ```tsx
|
|
2346
|
-
* import { NavigationMenu } from '@jmruthers/pace-core';
|
|
2347
|
-
*
|
|
2348
|
-
* function SidebarNavigation() {
|
|
2349
|
-
* const hierarchicalItems = [
|
|
2350
|
-
* {
|
|
2351
|
-
* id: 'user-management',
|
|
2352
|
-
* label: 'User Management',
|
|
2353
|
-
* icon: 'Users',
|
|
2354
|
-
* children: [
|
|
2355
|
-
* { id: 'users-list', label: 'All Users', href: '/users' },
|
|
2356
|
-
* { id: 'users-create', label: 'Create User', href: '/users/create' },
|
|
2357
|
-
* { id: 'user-roles', label: 'User Roles', href: '/users/roles' }
|
|
2358
|
-
* ]
|
|
2359
|
-
* },
|
|
2360
|
-
* {
|
|
2361
|
-
* id: 'reports',
|
|
2362
|
-
* label: 'Reports',
|
|
2363
|
-
* icon: 'BarChart',
|
|
2364
|
-
* children: [
|
|
2365
|
-
* { id: 'sales-reports', label: 'Sales Reports', href: '/reports/sales' },
|
|
2366
|
-
* { id: 'user-reports', label: 'User Reports', href: '/reports/users' }
|
|
2367
|
-
* ]
|
|
2368
|
-
* },
|
|
2369
|
-
* { id: 'settings', label: 'Settings', href: '/settings', icon: 'Settings' }
|
|
2370
|
-
* ];
|
|
2371
|
-
*
|
|
2372
|
-
* return (
|
|
2373
|
-
* <NavigationMenu
|
|
2374
|
-
* items={hierarchicalItems}
|
|
2375
|
-
* mode="hierarchical"
|
|
2376
|
-
* currentPath={window.location.pathname}
|
|
2377
|
-
* onNavigate={(item) => {
|
|
2378
|
-
* if (item.href) {
|
|
2379
|
-
* window.location.href = item.href;
|
|
2380
|
-
* }
|
|
2381
|
-
* }}
|
|
2382
|
-
* className="w-64 bg-sec-50 p-4"
|
|
2383
|
-
* />
|
|
2384
|
-
* );
|
|
2385
|
-
* }
|
|
2386
|
-
* ```
|
|
2387
|
-
*
|
|
2388
|
-
* @example
|
|
2389
|
-
* Integration with React Router and authentication:
|
|
2390
|
-
* ```tsx
|
|
2391
|
-
* import { NavigationMenu } from '@jmruthers/pace-core';
|
|
2392
|
-
* import { useNavigate, useLocation } from 'react-router-dom';
|
|
2393
|
-
* import { useUnifiedAuth } from '@jmruthers/pace-core/providers';
|
|
2394
|
-
*
|
|
2395
|
-
* function AuthenticatedNavigation() {
|
|
2396
|
-
* const navigate = useNavigate();
|
|
2397
|
-
* const location = useLocation();
|
|
2398
|
-
* const { hasRole, hasPermission } = useUnifiedAuth();
|
|
2399
|
-
*
|
|
2400
|
-
* // Build navigation items based on user permissions
|
|
2401
|
-
* const navItems = [
|
|
2402
|
-
* { id: 'dashboard', label: 'Dashboard', href: '/dashboard', icon: 'LayoutDashboard' },
|
|
2403
|
-
* ...(hasPermission('meals:read') ? [
|
|
2404
|
-
* { id: 'meals', label: 'Meals', href: '/meals', icon: 'UtensilsCrossed' }
|
|
2405
|
-
* ] : []),
|
|
2406
|
-
* ...(hasRole('admin') ? [
|
|
2407
|
-
* { id: 'admin', label: 'Admin Panel', href: '/admin', icon: 'Shield' }
|
|
2408
|
-
* ] : []),
|
|
2409
|
-
* { id: 'profile', label: 'Profile', href: '/profile', icon: 'User' }
|
|
2410
|
-
* ];
|
|
2411
|
-
*
|
|
2412
|
-
* return (
|
|
2413
|
-
* <NavigationMenu
|
|
2414
|
-
* items={navItems}
|
|
2415
|
-
* mode="dropdown"
|
|
2416
|
-
* currentPath={location.pathname}
|
|
2417
|
-
* onNavigate={(item) => navigate(item.href)}
|
|
2418
|
-
* buttonText="Navigation"
|
|
2419
|
-
* navigationLabel="Main application navigation"
|
|
2420
|
-
* />
|
|
2421
|
-
* );
|
|
2422
|
-
* }
|
|
2423
|
-
* ```
|
|
2424
|
-
*
|
|
2425
|
-
* @example
|
|
2426
|
-
* ```tsx
|
|
2427
|
-
* // Custom navigation with external links and actions
|
|
2428
|
-
* import { NavigationMenu } from '@jmruthers/pace-core';
|
|
2429
|
-
*
|
|
2430
|
-
* function CustomNavigation() {
|
|
2431
|
-
* const handleNavigation = (item) => {
|
|
2432
|
-
* if (item.id === 'logout') {
|
|
2433
|
-
* // Handle logout action
|
|
2434
|
-
* handleLogout();
|
|
2435
|
-
* } else if (item.href?.startsWith('http')) {
|
|
2436
|
-
* // Handle external links
|
|
2437
|
-
* window.open(item.href, '_blank');
|
|
2438
|
-
* } else if (item.href) {
|
|
2439
|
-
* // Handle internal navigation
|
|
2440
|
-
* navigate(item.href);
|
|
2441
|
-
* }
|
|
2442
|
-
* };
|
|
2443
|
-
*
|
|
2444
|
-
* const navItems = [
|
|
2445
|
-
* { id: 'home', label: 'Home', href: '/', icon: 'Home' },
|
|
2446
|
-
* { id: 'help', label: 'Help Center', href: 'https://help.example.com', icon: 'HelpCircle' },
|
|
2447
|
-
* { id: 'logout', label: 'Sign Out', icon: 'LogOut' } // No href for actions
|
|
2448
|
-
* ];
|
|
2449
|
-
*
|
|
2450
|
-
* return (
|
|
2451
|
-
* <NavigationMenu
|
|
2452
|
-
* items={navItems}
|
|
2453
|
-
* mode="dropdown"
|
|
2454
|
-
* onNavigate={handleNavigation}
|
|
2455
|
-
* buttonText="Menu"
|
|
2456
|
-
* disabled={false}
|
|
2457
|
-
* />
|
|
2458
|
-
* );
|
|
2459
|
-
* }
|
|
2460
|
-
* ```
|
|
2461
|
-
*
|
|
2462
|
-
* @accessibility
|
|
2463
|
-
* - WCAG 2.1 AA compliant navigation structure
|
|
2464
|
-
* - Proper ARIA attributes for screen readers
|
|
2465
|
-
* - Keyboard navigation with Enter, Space, and Escape keys
|
|
2466
|
-
* - Focus management for dropdown menus
|
|
2467
|
-
* - Semantic HTML structure with nav, menu, and menuitem roles
|
|
2468
|
-
* - Clear visual indicators for active/current page
|
|
2469
|
-
*
|
|
2470
|
-
* @performance
|
|
2471
|
-
* - Lightweight component with minimal re-renders
|
|
2472
|
-
* - Efficient click outside detection
|
|
2473
|
-
* - Optimized keyboard event handling
|
|
2474
|
-
* - Memory cleanup for event listeners
|
|
2475
|
-
*
|
|
2476
|
-
* @styling
|
|
2477
|
-
* - Uses Tailwind CSS for consistent styling
|
|
2478
|
-
* - Supports custom className for additional styling
|
|
2479
|
-
* - Responsive design considerations
|
|
2480
|
-
*
|
|
2481
|
-
* @dependencies
|
|
2482
|
-
* - React 19+ - Component framework and hooks
|
|
2483
|
-
* - Lucide React - Icon components
|
|
2484
|
-
* - Radix UI - Dropdown menu primitives
|
|
2485
|
-
* - React Router (optional) - For navigation handling
|
|
2486
|
-
* - Tailwind CSS - Styling system
|
|
2616
|
+
* Navigation menu with dropdown and hierarchical modes. Items are filtered by RBAC
|
|
2617
|
+
* (permissions, roles, access level, page permission). See JSDoc on NavigationMenu below.
|
|
2487
2618
|
*/
|
|
2488
2619
|
|
|
2489
2620
|
/**
|
|
@@ -2628,7 +2759,6 @@ declare const LoginForm: React__default.NamedExoticComponent<LoginFormProps>;
|
|
|
2628
2759
|
* onNavigate={(item) => navigate(item.href)}
|
|
2629
2760
|
* buttonText="Navigation"
|
|
2630
2761
|
* navigationLabel="Main application navigation"
|
|
2631
|
-
* // Permission filtering is always enabled - no prop needed
|
|
2632
2762
|
* auditLog={true}
|
|
2633
2763
|
* />
|
|
2634
2764
|
* );
|
|
@@ -2639,17 +2769,15 @@ declare const LoginForm: React__default.NamedExoticComponent<LoginFormProps>;
|
|
|
2639
2769
|
* Custom navigation with external links and actions:
|
|
2640
2770
|
* ```tsx
|
|
2641
2771
|
* import { NavigationMenu } from '@jmruthers/pace-core';
|
|
2772
|
+
* import type { NavigationItem } from '@jmruthers/pace-core';
|
|
2642
2773
|
*
|
|
2643
2774
|
* function CustomNavigation() {
|
|
2644
|
-
* const handleNavigation = (item) => {
|
|
2775
|
+
* const handleNavigation = (item: NavigationItem) => {
|
|
2645
2776
|
* if (item.id === 'logout') {
|
|
2646
|
-
* // Handle logout action
|
|
2647
2777
|
* handleLogout();
|
|
2648
2778
|
* } else if (item.href?.startsWith('http')) {
|
|
2649
|
-
* // Handle external links
|
|
2650
2779
|
* window.open(item.href, '_blank');
|
|
2651
2780
|
* } else if (item.href) {
|
|
2652
|
-
* // Handle internal navigation
|
|
2653
2781
|
* navigate(item.href);
|
|
2654
2782
|
* }
|
|
2655
2783
|
* };
|
|
@@ -2657,7 +2785,7 @@ declare const LoginForm: React__default.NamedExoticComponent<LoginFormProps>;
|
|
|
2657
2785
|
* const navItems = [
|
|
2658
2786
|
* { id: 'home', label: 'Home', href: '/', icon: 'Home' },
|
|
2659
2787
|
* { id: 'help', label: 'Help Center', href: 'https://help.example.com', icon: 'HelpCircle' },
|
|
2660
|
-
* { id: 'logout', label: 'Sign Out', icon: 'LogOut' }
|
|
2788
|
+
* { id: 'logout', label: 'Sign Out', icon: 'LogOut' }
|
|
2661
2789
|
* ];
|
|
2662
2790
|
*
|
|
2663
2791
|
* return (
|
|
@@ -2852,18 +2980,13 @@ declare function Header({ logoUrl, logoAlt, navItems, user, onSignOut, onChangeP
|
|
|
2852
2980
|
* @module Components/Footer
|
|
2853
2981
|
* @since 0.1.0
|
|
2854
2982
|
*
|
|
2855
|
-
* A
|
|
2856
|
-
* navigation links, and customizable content.
|
|
2983
|
+
* A footer component for application layouts with copyright information.
|
|
2857
2984
|
*
|
|
2858
2985
|
* Features:
|
|
2859
2986
|
* - Copyright information with automatic year generation
|
|
2860
2987
|
* - Customizable company name and branding
|
|
2861
|
-
* - Optional navigation links
|
|
2862
|
-
* - Logo display support
|
|
2863
|
-
* - Custom footer content via children
|
|
2864
2988
|
* - Responsive design
|
|
2865
2989
|
* - Accessibility compliant
|
|
2866
|
-
* - Flexible layout options
|
|
2867
2990
|
* - Consistent styling with design system
|
|
2868
2991
|
*
|
|
2869
2992
|
* @example
|
|
@@ -2876,57 +2999,12 @@ declare function Header({ logoUrl, logoAlt, navItems, user, onSignOut, onChangeP
|
|
|
2876
2999
|
* companyName="My Company Inc."
|
|
2877
3000
|
* year={2024}
|
|
2878
3001
|
* />
|
|
2879
|
-
*
|
|
2880
|
-
* // Footer with navigation links
|
|
2881
|
-
* <Footer
|
|
2882
|
-
* companyName="My Company"
|
|
2883
|
-
* links={[
|
|
2884
|
-
* { label: 'Privacy Policy', href: '/privacy' },
|
|
2885
|
-
* { label: 'Terms of Service', href: '/terms' },
|
|
2886
|
-
* { label: 'Contact', href: '/contact' }
|
|
2887
|
-
* ]}
|
|
2888
|
-
* />
|
|
2889
|
-
*
|
|
2890
|
-
* // Footer with logo and custom copyright
|
|
2891
|
-
* <Footer
|
|
2892
|
-
* logo="/logo.svg"
|
|
2893
|
-
* copyright="© 2024 My Company. All rights reserved."
|
|
2894
|
-
* />
|
|
2895
|
-
*
|
|
2896
|
-
* // Footer with custom content
|
|
2897
|
-
* <Footer companyName="My Company">
|
|
2898
|
-
* <section className="grid grid-cols-1 md:grid-cols-3 gap-8 mb-8">
|
|
2899
|
-
* <section>
|
|
2900
|
-
* <h3 className="font-semibold mb-2">About Us</h3>
|
|
2901
|
-
* <p className="text-sm text-muted-foreground">
|
|
2902
|
-
* We provide innovative solutions for modern businesses.
|
|
2903
|
-
* </p>
|
|
2904
|
-
* </section>
|
|
2905
|
-
* <section>
|
|
2906
|
-
* <h3 className="font-semibold mb-2">Contact</h3>
|
|
2907
|
-
* <p className="text-sm text-muted-foreground">
|
|
2908
|
-
* Email: info@mycompany.com<br />
|
|
2909
|
-
* Phone: (555) 123-4567
|
|
2910
|
-
* </p>
|
|
2911
|
-
* </section>
|
|
2912
|
-
* <section>
|
|
2913
|
-
* <h3 className="font-semibold mb-2">Follow Us</h3>
|
|
2914
|
-
* <nav className="flex gap-2">
|
|
2915
|
-
* <a href="#" className="text-muted-foreground hover:text-foreground">Twitter</a>
|
|
2916
|
-
* <a href="#" className="text-muted-foreground hover:text-foreground">LinkedIn</a>
|
|
2917
|
-
* </nav>
|
|
2918
|
-
* </section>
|
|
2919
|
-
* </section>
|
|
2920
|
-
* </Footer>
|
|
2921
3002
|
* ```
|
|
2922
3003
|
*
|
|
2923
3004
|
* @accessibility
|
|
2924
3005
|
* - WCAG 2.1 AA compliant
|
|
2925
3006
|
* - Proper semantic HTML with role="contentinfo"
|
|
2926
|
-
* - Screen reader friendly navigation
|
|
2927
|
-
* - Keyboard navigation support
|
|
2928
3007
|
* - High contrast support
|
|
2929
|
-
* - Clear link identification
|
|
2930
3008
|
*
|
|
2931
3009
|
* @dependencies
|
|
2932
3010
|
* - React 19+ - Component framework
|
|
@@ -2946,29 +3024,6 @@ interface FooterProps {
|
|
|
2946
3024
|
* @default current year
|
|
2947
3025
|
*/
|
|
2948
3026
|
year?: number;
|
|
2949
|
-
/**
|
|
2950
|
-
* Optional array of navigation links to display
|
|
2951
|
-
*/
|
|
2952
|
-
links?: Array<{
|
|
2953
|
-
label: string;
|
|
2954
|
-
href: string;
|
|
2955
|
-
}>;
|
|
2956
|
-
/**
|
|
2957
|
-
* Optional CSS class name
|
|
2958
|
-
*/
|
|
2959
|
-
className?: string;
|
|
2960
|
-
/**
|
|
2961
|
-
* Logo image URL (from UI version)
|
|
2962
|
-
*/
|
|
2963
|
-
logo?: string;
|
|
2964
|
-
/**
|
|
2965
|
-
* Copyright text (from UI version)
|
|
2966
|
-
*/
|
|
2967
|
-
copyright?: string;
|
|
2968
|
-
/**
|
|
2969
|
-
* Footer content - children to render inside footer
|
|
2970
|
-
*/
|
|
2971
|
-
children?: React__default.ReactNode;
|
|
2972
3027
|
}
|
|
2973
3028
|
declare const Footer: React__default.NamedExoticComponent<FooterProps>;
|
|
2974
3029
|
|
|
@@ -3090,78 +3145,86 @@ interface UserMenuProps {
|
|
|
3090
3145
|
declare const UserMenu: React__default.NamedExoticComponent<UserMenuProps>;
|
|
3091
3146
|
|
|
3092
3147
|
type Operation = 'read' | 'create' | 'update' | 'delete' | 'manage';
|
|
3093
|
-
/**
|
|
3094
|
-
|
|
3095
|
-
|
|
3096
|
-
|
|
3097
|
-
|
|
3098
|
-
|
|
3148
|
+
/** Route config item for role-based routing. */
|
|
3149
|
+
interface PaceAppLayoutRouteConfigItem {
|
|
3150
|
+
path: string;
|
|
3151
|
+
component: React__default.ComponentType;
|
|
3152
|
+
permissions: string[];
|
|
3153
|
+
roles?: string[];
|
|
3154
|
+
accessLevel?: string;
|
|
3155
|
+
pageId?: string;
|
|
3156
|
+
strictMode?: boolean;
|
|
3157
|
+
meta?: {
|
|
3158
|
+
title?: string;
|
|
3159
|
+
description?: string;
|
|
3160
|
+
requiresAuth?: boolean;
|
|
3161
|
+
hidden?: boolean;
|
|
3162
|
+
};
|
|
3163
|
+
}
|
|
3164
|
+
/** Optional grouped permission options. When provided, overrides flat permission props. */
|
|
3165
|
+
interface PaceAppLayoutPermissionConfig {
|
|
3166
|
+
enforcePermissions?: boolean;
|
|
3167
|
+
defaultPermission?: Operation;
|
|
3168
|
+
routePermissions?: Record<string, Operation>;
|
|
3169
|
+
pageIdMapping?: Record<string, string>;
|
|
3170
|
+
permissionFallback?: React__default.ReactNode;
|
|
3171
|
+
strictMode?: boolean;
|
|
3172
|
+
enforcePagePermissions?: boolean;
|
|
3173
|
+
pagePermissionFallback?: React__default.ReactNode;
|
|
3174
|
+
auditLog?: boolean;
|
|
3175
|
+
onPageAccessDenied?: (pageName: string, operation: string) => void;
|
|
3176
|
+
onStrictModeViolation?: (pageName: string, operation: string) => void;
|
|
3177
|
+
}
|
|
3178
|
+
/** Optional grouped routing options. When provided, overrides flat routing props. */
|
|
3179
|
+
interface PaceAppLayoutRoutingConfig {
|
|
3180
|
+
roleBasedRouting?: boolean;
|
|
3181
|
+
routeConfig?: PaceAppLayoutRouteConfigItem[];
|
|
3182
|
+
fallbackRoute?: string;
|
|
3183
|
+
onRouteAccessDenied?: (route: string, reason: string) => void;
|
|
3184
|
+
onRouteStrictModeViolation?: (route: string, reason: string) => void;
|
|
3185
|
+
}
|
|
3186
|
+
/** Layout props for PaceAppLayout (ISP). */
|
|
3187
|
+
interface PaceAppLayoutPropsLayout {
|
|
3099
3188
|
appName: string;
|
|
3100
|
-
/** Optional navigation items for the header menu. If not provided, uses default navigation. */
|
|
3101
3189
|
navItems?: NavigationItem[];
|
|
3102
|
-
/** Show/hide unified context selector (shows all accessible orgs and events) - default: true */
|
|
3103
3190
|
showContextSelector?: boolean;
|
|
3104
|
-
/** Show organisations in context selector - default: true */
|
|
3105
3191
|
showOrganisations?: boolean;
|
|
3106
|
-
/** Show events in context selector - default: true */
|
|
3107
3192
|
showEvents?: boolean;
|
|
3108
|
-
/** Custom actions to display in the header (between event selector and user menu) */
|
|
3109
3193
|
headerActions?: React__default.ReactNode;
|
|
3110
|
-
/** URL to navigate to when logo is clicked (defaults to '/dashboard') */
|
|
3111
3194
|
logoHref?: string;
|
|
3112
|
-
/** Custom user menu component (overrides default user menu) */
|
|
3113
3195
|
customUserMenu?: React__default.ReactNode;
|
|
3114
|
-
/** Custom className for the header */
|
|
3115
3196
|
headerClassName?: string;
|
|
3116
|
-
/** Show/hide user menu */
|
|
3117
3197
|
showUserMenu?: boolean;
|
|
3118
|
-
|
|
3198
|
+
}
|
|
3199
|
+
/** Permission props for PaceAppLayout (ISP). */
|
|
3200
|
+
interface PaceAppLayoutPropsPermission {
|
|
3201
|
+
permissionConfig?: PaceAppLayoutPermissionConfig;
|
|
3119
3202
|
enforcePermissions?: boolean;
|
|
3120
|
-
/** Default permission to check for all routes (when enforcePermissions is true) */
|
|
3121
3203
|
defaultPermission?: Operation;
|
|
3122
|
-
/** Route-specific permissions mapping */
|
|
3123
3204
|
routePermissions?: Record<string, Operation>;
|
|
3124
|
-
/** Fallback component to show when user lacks permission */
|
|
3125
3205
|
permissionFallback?: React__default.ReactNode;
|
|
3126
|
-
/** Custom permission page ID mapping */
|
|
3127
3206
|
pageIdMapping?: Record<string, string>;
|
|
3128
|
-
/** Enable strict mode to prevent bypassing permission checks (default: true) */
|
|
3129
3207
|
strictMode?: boolean;
|
|
3130
|
-
/** Enable page-level permission enforcement (default: false) */
|
|
3131
3208
|
enforcePagePermissions?: boolean;
|
|
3132
|
-
/** Default page permission fallback component */
|
|
3133
3209
|
pagePermissionFallback?: React__default.ReactNode;
|
|
3134
|
-
/** Enable audit logging for all permission checks (default: true) */
|
|
3135
3210
|
auditLog?: boolean;
|
|
3136
|
-
/** Callback when page access is denied */
|
|
3137
3211
|
onPageAccessDenied?: (pageName: string, operation: string) => void;
|
|
3138
|
-
/** Callback when strict mode violation occurs */
|
|
3139
3212
|
onStrictModeViolation?: (pageName: string, operation: string) => void;
|
|
3140
|
-
|
|
3213
|
+
}
|
|
3214
|
+
/** Routing props for PaceAppLayout (ISP). */
|
|
3215
|
+
interface PaceAppLayoutPropsRouting {
|
|
3216
|
+
routingConfig?: PaceAppLayoutRoutingConfig;
|
|
3141
3217
|
roleBasedRouting?: boolean;
|
|
3142
|
-
|
|
3143
|
-
routeConfig?: Array<{
|
|
3144
|
-
path: string;
|
|
3145
|
-
component: React__default.ComponentType;
|
|
3146
|
-
permissions: string[];
|
|
3147
|
-
roles?: string[];
|
|
3148
|
-
accessLevel?: string;
|
|
3149
|
-
pageId?: string;
|
|
3150
|
-
strictMode?: boolean;
|
|
3151
|
-
meta?: {
|
|
3152
|
-
title?: string;
|
|
3153
|
-
description?: string;
|
|
3154
|
-
requiresAuth?: boolean;
|
|
3155
|
-
hidden?: boolean;
|
|
3156
|
-
};
|
|
3157
|
-
}>;
|
|
3158
|
-
/** Fallback route for unauthorized access */
|
|
3218
|
+
routeConfig?: PaceAppLayoutRouteConfigItem[];
|
|
3159
3219
|
fallbackRoute?: string;
|
|
3160
|
-
/** Callback when route access is denied */
|
|
3161
3220
|
onRouteAccessDenied?: (route: string, reason: string) => void;
|
|
3162
|
-
/** Callback when route strict mode violation occurs */
|
|
3163
3221
|
onRouteStrictModeViolation?: (route: string, reason: string) => void;
|
|
3164
3222
|
}
|
|
3223
|
+
/**
|
|
3224
|
+
* Props for the PaceAppLayout component (ISP: composed from focused interfaces).
|
|
3225
|
+
* Permission and routing options can be passed either as flat props or via permissionConfig / routingConfig.
|
|
3226
|
+
*/
|
|
3227
|
+
type PaceAppLayoutProps = PaceAppLayoutPropsLayout & PaceAppLayoutPropsPermission & PaceAppLayoutPropsRouting;
|
|
3165
3228
|
/**
|
|
3166
3229
|
* A consistent layout component for all PACE suite applications that provides a standard
|
|
3167
3230
|
* structure with header, main content area, and footer.
|
|
@@ -3310,7 +3373,7 @@ interface PaceAppLayoutProps {
|
|
|
3310
3373
|
*
|
|
3311
3374
|
* @since 0.1.0
|
|
3312
3375
|
*/
|
|
3313
|
-
declare function PaceAppLayout({ appName, navItems, showContextSelector, showOrganisations, showEvents, headerActions, logoHref, customUserMenu, headerClassName, showUserMenu, enforcePermissions, defaultPermission, routePermissions, permissionFallback, pageIdMapping, strictMode, enforcePagePermissions, pagePermissionFallback, auditLog, onPageAccessDenied, onStrictModeViolation, roleBasedRouting, routeConfig, fallbackRoute, onRouteAccessDenied, onRouteStrictModeViolation }: PaceAppLayoutProps): react_jsx_runtime.JSX.Element;
|
|
3376
|
+
declare function PaceAppLayout({ appName, navItems, showContextSelector, showOrganisations, showEvents, headerActions, logoHref, customUserMenu, headerClassName, showUserMenu, permissionConfig, enforcePermissions: enforcePermissionsFlat, defaultPermission: defaultPermissionFlat, routePermissions: routePermissionsFlat, permissionFallback: permissionFallbackFlat, pageIdMapping: pageIdMappingFlat, strictMode: strictModeFlat, enforcePagePermissions: enforcePagePermissionsFlat, pagePermissionFallback: pagePermissionFallbackFlat, auditLog: _auditLogFlat, onPageAccessDenied: onPageAccessDeniedFlat, onStrictModeViolation: onStrictModeViolationFlat, routingConfig, roleBasedRouting: roleBasedRoutingFlat, routeConfig: routeConfigFlat, fallbackRoute: fallbackRouteFlat, onRouteAccessDenied: onRouteAccessDeniedFlat, onRouteStrictModeViolation: onRouteStrictModeViolationFlat, }: PaceAppLayoutProps): react_jsx_runtime.JSX.Element;
|
|
3314
3377
|
|
|
3315
3378
|
/**
|
|
3316
3379
|
* @file PACE Login Page Component
|
|
@@ -3515,7 +3578,7 @@ interface ProtectedRouteProps {
|
|
|
3515
3578
|
* @param props - Configuration for route protection
|
|
3516
3579
|
* @returns React element with route protection logic
|
|
3517
3580
|
*/
|
|
3518
|
-
declare function ProtectedRoute({ requireEvent, noEventsFallback, loadingFallback, loginPath }: ProtectedRouteProps): string | number | bigint |
|
|
3581
|
+
declare function ProtectedRoute({ requireEvent, noEventsFallback, loadingFallback, loginPath, }: ProtectedRouteProps): string | number | bigint | boolean | Iterable<React__default.ReactNode> | Promise<string | number | bigint | boolean | React__default.ReactPortal | React__default.ReactElement<unknown, string | React__default.JSXElementConstructor<any>> | Iterable<React__default.ReactNode> | null | undefined> | react_jsx_runtime.JSX.Element;
|
|
3519
3582
|
|
|
3520
3583
|
/**
|
|
3521
3584
|
* State interface for the ErrorBoundary component
|
|
@@ -3778,6 +3841,13 @@ interface SessionRestorationLoaderProps {
|
|
|
3778
3841
|
}
|
|
3779
3842
|
declare const SessionRestorationLoader: React__default.FC<SessionRestorationLoaderProps>;
|
|
3780
3843
|
|
|
3844
|
+
/**
|
|
3845
|
+
* @file Context Selector Types
|
|
3846
|
+
* @package @jmruthers/pace-core
|
|
3847
|
+
* @module Components/ContextSelector
|
|
3848
|
+
* @since 0.6.4
|
|
3849
|
+
*/
|
|
3850
|
+
|
|
3781
3851
|
/**
|
|
3782
3852
|
* Props for the ContextSelector component.
|
|
3783
3853
|
*/
|
|
@@ -3803,6 +3873,7 @@ interface ContextSelectorProps {
|
|
|
3803
3873
|
/** Show events section (default: true) */
|
|
3804
3874
|
showEvents?: boolean;
|
|
3805
3875
|
}
|
|
3876
|
+
|
|
3806
3877
|
/**
|
|
3807
3878
|
* ContextSelector component for selecting organisations or events
|
|
3808
3879
|
*
|
|
@@ -3822,13 +3893,10 @@ interface ContextSelectorProps {
|
|
|
3822
3893
|
* onEventSelect={(event) => setSelectedEvent(event)}
|
|
3823
3894
|
* />
|
|
3824
3895
|
*/
|
|
3825
|
-
declare function ContextSelector({ placeholder, className, onOrganisationSelect, onEventSelect, showNoItemsMessage, showRetryButton, compact, disabled, showOrganisations, showEvents }: ContextSelectorProps): react_jsx_runtime.JSX.Element | null;
|
|
3896
|
+
declare function ContextSelector({ placeholder, className, onOrganisationSelect, onEventSelect, showNoItemsMessage, showRetryButton, compact, disabled, showOrganisations, showEvents, }: ContextSelectorProps): react_jsx_runtime.JSX.Element | null;
|
|
3826
3897
|
|
|
3827
|
-
/**
|
|
3828
|
-
|
|
3829
|
-
* Configures file upload behavior including storage location, validation, and callbacks.
|
|
3830
|
-
*/
|
|
3831
|
-
interface FileUploadProps {
|
|
3898
|
+
/** Storage/config props for FileUpload (ISP). */
|
|
3899
|
+
interface FileUploadPropsStorage {
|
|
3832
3900
|
supabase: SupabaseClient;
|
|
3833
3901
|
table_name: string;
|
|
3834
3902
|
record_id: string;
|
|
@@ -3839,19 +3907,37 @@ interface FileUploadProps {
|
|
|
3839
3907
|
folder: string;
|
|
3840
3908
|
pageContext: string;
|
|
3841
3909
|
event_id?: string;
|
|
3910
|
+
}
|
|
3911
|
+
/** Validation props for FileUpload (ISP). */
|
|
3912
|
+
interface FileUploadPropsValidation {
|
|
3842
3913
|
accept?: string;
|
|
3843
3914
|
maxSize?: number;
|
|
3844
3915
|
multiple?: boolean;
|
|
3845
3916
|
disabled?: boolean;
|
|
3846
3917
|
isPublic?: boolean;
|
|
3918
|
+
}
|
|
3919
|
+
/** UI props for FileUpload (ISP). */
|
|
3920
|
+
interface FileUploadPropsUI {
|
|
3847
3921
|
className?: string;
|
|
3848
3922
|
showPreview?: boolean;
|
|
3849
3923
|
showProgress?: boolean;
|
|
3924
|
+
}
|
|
3925
|
+
/** Callback props for FileUpload (ISP). */
|
|
3926
|
+
interface FileUploadPropsCallbacks {
|
|
3850
3927
|
onUploadSuccess?: (result: FileUploadResult) => void;
|
|
3851
3928
|
onUploadError?: (error: string, file?: File) => void;
|
|
3852
3929
|
onProgress?: (progress: UploadProgress) => void;
|
|
3930
|
+
}
|
|
3931
|
+
/** Children prop for FileUpload (ISP). */
|
|
3932
|
+
interface FileUploadPropsChildren {
|
|
3853
3933
|
children?: React__default.ReactNode;
|
|
3854
3934
|
}
|
|
3935
|
+
/**
|
|
3936
|
+
* Props for the FileUpload component (ISP: composed from focused interfaces).
|
|
3937
|
+
* Callers should pass the secure Supabase client (e.g. from useSecureSupabase()) when
|
|
3938
|
+
* used in apps with RBAC. className is for instance-specific layout only (e.g. max-w-*).
|
|
3939
|
+
*/
|
|
3940
|
+
type FileUploadProps = FileUploadPropsStorage & FileUploadPropsValidation & FileUploadPropsUI & FileUploadPropsCallbacks & FileUploadPropsChildren;
|
|
3855
3941
|
declare function FileUpload({ supabase, table_name, record_id, organisation_id, userId, app_id, category, folder, pageContext, event_id, accept, maxSize, // 10MB default
|
|
3856
3942
|
multiple, disabled, isPublic, className, showPreview, showProgress, onUploadSuccess, onUploadError, onProgress, children }: FileUploadProps): react_jsx_runtime.JSX.Element;
|
|
3857
3943
|
|
|
@@ -3899,30 +3985,10 @@ interface FileDisplayProps {
|
|
|
3899
3985
|
/** Whether to show metadata (filename, filesize, mimetype) in figcaption. Defaults to true. */
|
|
3900
3986
|
showMetadata?: boolean;
|
|
3901
3987
|
}
|
|
3902
|
-
/**
|
|
3903
|
-
* Component for displaying file references with context-awareness
|
|
3904
|
-
*
|
|
3905
|
-
* This component is context-aware and automatically detects whether it's being used
|
|
3906
|
-
* in a public or authenticated context. It fetches and displays files from storage.
|
|
3907
|
-
*
|
|
3908
|
-
* The component automatically detects context and uses:
|
|
3909
|
-
* - PublicPageProvider context for public pages
|
|
3910
|
-
* - UnifiedAuthProvider context for authenticated pages
|
|
3911
|
-
*
|
|
3912
|
-
* @param props - File display configuration
|
|
3913
|
-
* @param props.displayOnly - Display only a single file instead of all files. Uses first file (prefers images) from all files, without category filtering. When true:
|
|
3914
|
-
* - **Image files**: Renders a simplified image-only display without metadata or wrapper divs
|
|
3915
|
-
* - **Non-image files** (PDFs, Word docs, Excel files, etc.): Renders as clickable links that open in a new tab with document icon, filename, and external link icon. Links include proper security attributes (`rel="noopener noreferrer"`) and accessibility features (ARIA labels, keyboard navigation, visible focus states)
|
|
3916
|
-
* - If `showDelete={true}`, uses standard wrapper behavior instead of simplified display
|
|
3917
|
-
* @param props.category - Optional category filter. When specified, only displays files matching this category and uses single file display variant.
|
|
3918
|
-
* @returns React element with file display
|
|
3919
|
-
*/
|
|
3920
3988
|
/**
|
|
3921
3989
|
* File display component.
|
|
3922
3990
|
* Renders files from the file reference system with support for previews, downloads, and public/private access.
|
|
3923
|
-
*
|
|
3924
|
-
* @param props - File display configuration
|
|
3925
|
-
* @returns The rendered file display
|
|
3991
|
+
* Context-aware: uses PublicPageProvider for public pages and UnifiedAuthProvider for authenticated pages.
|
|
3926
3992
|
*/
|
|
3927
3993
|
declare function FileDisplay({ table_name, record_id, organisation_id, category, displayOnly, showDelete, className, imgClassName, children, loadingComponent, errorComponent, showFallback, generateFallbackText, fallbackText, fallbackSourceText, fallbackSize, enableChildren, showMetadata }: FileDisplayProps): react_jsx_runtime.JSX.Element;
|
|
3928
3994
|
|
|
@@ -3999,22 +4065,31 @@ type UseFileReferenceOptions = {
|
|
|
3999
4065
|
record_id: string;
|
|
4000
4066
|
organisation_id: string;
|
|
4001
4067
|
};
|
|
4002
|
-
/**
|
|
4003
|
-
|
|
4004
|
-
*/
|
|
4005
|
-
type UseFileReferenceReturn = {
|
|
4068
|
+
/** State slice of useFileReference return (ISP). */
|
|
4069
|
+
interface UseFileReferenceReturnState {
|
|
4006
4070
|
isLoading: boolean;
|
|
4007
4071
|
error: string | null;
|
|
4072
|
+
clearError: () => void;
|
|
4073
|
+
}
|
|
4074
|
+
/** Upload slice of useFileReference return (ISP). */
|
|
4075
|
+
interface UseFileReferenceReturnUpload {
|
|
4008
4076
|
uploadFile: (options: FileUploadOptions, file: File) => Promise<FileUploadResult | null>;
|
|
4077
|
+
}
|
|
4078
|
+
/** Query slice of useFileReference return (ISP). */
|
|
4079
|
+
interface UseFileReferenceReturnQueries {
|
|
4009
4080
|
getFileReference: (table_name: string, record_id: string, organisation_id: string) => Promise<FileReference | null>;
|
|
4010
4081
|
getFileUrl: (table_name: string, record_id: string, organisation_id: string) => Promise<string | null>;
|
|
4011
4082
|
getSignedUrl: (table_name: string, record_id: string, organisation_id: string, expires_in?: number) => Promise<string | null>;
|
|
4012
|
-
updateFileReference: (id: string, updates: Partial<FileReference>) => Promise<FileReference | null>;
|
|
4013
|
-
deleteFileReference: (table_name: string, record_id: string, organisation_id: string, delete_file?: boolean) => Promise<boolean>;
|
|
4014
4083
|
listFileReferences: (table_name: string, record_id: string, organisation_id: string) => Promise<FileReference[]>;
|
|
4015
4084
|
getFileCount: (table_name: string, record_id: string, organisation_id: string) => Promise<number>;
|
|
4016
|
-
|
|
4017
|
-
|
|
4085
|
+
}
|
|
4086
|
+
/** Mutation slice of useFileReference return (ISP). */
|
|
4087
|
+
interface UseFileReferenceReturnMutations {
|
|
4088
|
+
updateFileReference: (id: string, updates: Partial<FileReference>) => Promise<FileReference | null>;
|
|
4089
|
+
deleteFileReference: (table_name: string, record_id: string, organisation_id: string, delete_file?: boolean) => Promise<boolean>;
|
|
4090
|
+
}
|
|
4091
|
+
/** Return value of the useFileReference hook (ISP: composed from focused interfaces). */
|
|
4092
|
+
type UseFileReferenceReturn = UseFileReferenceReturnState & UseFileReferenceReturnUpload & UseFileReferenceReturnQueries & UseFileReferenceReturnMutations;
|
|
4018
4093
|
/**
|
|
4019
4094
|
* Return value of the useFileReferenceForRecord hook.
|
|
4020
4095
|
*/
|
|
@@ -4180,6 +4255,8 @@ interface PublicPageLayoutProps {
|
|
|
4180
4255
|
showValidationErrors?: boolean;
|
|
4181
4256
|
/** Custom loading message */
|
|
4182
4257
|
loadingMessage?: string;
|
|
4258
|
+
/** Print page orientation for this page (default: 'portrait') */
|
|
4259
|
+
printPageOrientation?: 'portrait' | 'landscape';
|
|
4183
4260
|
}
|
|
4184
4261
|
interface PublicPageHeaderProps {
|
|
4185
4262
|
/** The event data for this public page */
|
|
@@ -4236,7 +4313,7 @@ declare function PublicPageFooter({ event: _event, companyName, year, links, cla
|
|
|
4236
4313
|
* @param props - Layout configuration and content
|
|
4237
4314
|
* @returns React element with complete public page layout
|
|
4238
4315
|
*/
|
|
4239
|
-
declare function PublicPageLayout({ eventCode, children, event, isLoading, error, refetch, showFooter, errorFallback: ErrorFallback, loadingFallback: LoadingFallback, customHeader, customFooter, showValidationErrors, loadingMessage }: PublicPageLayoutProps): react_jsx_runtime.JSX.Element;
|
|
4316
|
+
declare function PublicPageLayout({ eventCode, children, event, isLoading, error, refetch, showFooter, errorFallback: ErrorFallback, loadingFallback: LoadingFallback, customHeader, customFooter, showValidationErrors, loadingMessage, printPageOrientation }: PublicPageLayoutProps): react_jsx_runtime.JSX.Element;
|
|
4240
4317
|
|
|
4241
4318
|
interface PublicPageProviderProps {
|
|
4242
4319
|
children: ReactNode;
|
|
@@ -4287,4 +4364,4 @@ declare function usePublicPageContext(): PublicPageContextType;
|
|
|
4287
4364
|
*/
|
|
4288
4365
|
declare function useIsPublicPage(): boolean;
|
|
4289
4366
|
|
|
4290
|
-
export { type DialogContentProps as $, AddressField as A, Button as B, Card as C, TableHeader as D, TableBody as E, TableCaption as F, TableCell as G, TableFooter as H, Input as I, TableHead as J, TableRow as K, Label as L, Dialog as M, DialogPortal as N, DialogTrigger as O, Progress as P, DialogClose as Q, DialogContent as R, Switch as S, Textarea as T, DialogHeader as U, DialogBody as V, DialogFooter as W, DialogTitle as X, DialogDescription as Y, type DialogProps as Z, type DialogTriggerProps as _, type ButtonProps as a,
|
|
4367
|
+
export { type DialogContentProps as $, AddressField as A, Button as B, Card as C, TableHeader as D, TableBody as E, TableCaption as F, TableCell as G, TableFooter as H, Input as I, TableHead as J, TableRow as K, Label as L, Dialog as M, DialogPortal as N, DialogTrigger as O, Progress as P, DialogClose as Q, DialogContent as R, Switch as S, Textarea as T, DialogHeader as U, DialogBody as V, DialogFooter as W, DialogTitle as X, DialogDescription as Y, type DialogProps as Z, type DialogTriggerProps as _, type ButtonProps as a, type PublicPageLayoutProps as a$, type DialogPortalProps as a0, type DialogCloseProps as a1, type DialogHeaderProps as a2, type DialogFooterProps as a3, type DialogBodyProps as a4, type DialogSize as a5, Select as a6, SelectGroup as a7, SelectValue as a8, SelectTrigger as a9, Tooltip as aA, TooltipTrigger as aB, TooltipContent as aC, TooltipProvider as aD, TooltipRoot as aE, DataTable as aF, type DataTableProps as aG, type DataTableColumn as aH, type DataTableAction as aI, type DataTableToolbarButton as aJ, type AggregateConfig as aK, type EmptyStateConfig as aL, Form as aM, FormField as aN, type FormProps as aO, type FormFieldProps as aP, LoginForm as aQ, type LoginFormProps as aR, Header as aS, Footer as aT, type FooterProps as aU, PublicPageLayout as aV, PublicPageHeader as aW, PublicPageFooter as aX, PublicPageProvider as aY, usePublicPageContext as aZ, useIsPublicPage as a_, SelectContent as aa, SelectLabel as ab, SelectItem as ac, SelectSeparator as ad, Tabs as ae, TabsList as af, TabsTrigger as ag, TabsContent as ah, type TabsProps as ai, type TabsListProps as aj, type TabsTriggerProps as ak, type TabsContentProps as al, Calendar as am, type CalendarProps as an, DatePickerWithTimezone as ao, type DatePickerWithTimezoneProps as ap, Toast as aq, Toaster as ar, ToastAction as as, ToastProvider as at, ToastViewport as au, ToastTitle as av, ToastDescription as aw, ToastClose as ax, type ToastActionElement as ay, type ToastProps as az, CardHeader as b, type PublicPageHeaderProps as b0, type PublicPageFooterProps as b1, ProtectedRoute as b2, type ProtectedRouteProps as b3, NavigationMenu as b4, ContextSelector as b5, type ContextSelectorProps as b6, UserMenu as b7, ErrorBoundary as b8, ErrorBoundaryProvider as b9, type PaceLoginPageProps as bA, PaceLoginPage as bB, type DataTableFeatureConfig as bC, type ExportOptions as bD, type ImportSummary as bE, type ImportHandlerResult as bF, type UserMenuProps as bG, PasswordChangeForm as bH, type ErrorBoundaryProps as ba, type ErrorBoundaryState as bb, type ErrorBoundaryProviderProps as bc, type GlobalErrorHandler as bd, LoadingSpinner as be, SessionRestorationLoader as bf, type SessionRestorationLoaderProps as bg, FileUpload as bh, type FileUploadProps as bi, FileDisplay as bj, type FileDisplayProps as bk, useFileReference as bl, useFileReferenceForRecord as bm, useFileReferenceById as bn, useFilesByCategory as bo, type UseFileReferenceOptions as bp, type UseFileReferenceReturn as bq, type UseFileReferenceForRecordReturn as br, type PaceAppLayoutRouteConfigItem as bs, type PaceAppLayoutPermissionConfig as bt, type PaceAppLayoutRoutingConfig as bu, type PaceAppLayoutPropsLayout as bv, type PaceAppLayoutPropsPermission as bw, type PaceAppLayoutPropsRouting as bx, type PaceAppLayoutProps as by, PaceAppLayout as bz, CardFooter as c, CardTitle as d, CardDescription as e, CardContent as f, CardActions as g, type CardProps as h, type CardActionsProps as i, type InputProps as j, type AddressFieldProps as k, type AddressFieldRef as l, type LabelProps as m, type TextareaProps as n, Alert as o, AlertTitle as p, AlertDescription as q, Avatar as r, type AvatarProps as s, Badge as t, type BadgeProps as u, type BadgeVariant as v, Checkbox as w, type SwitchProps as x, type ProgressProps as y, Table as z };
|