@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.
Files changed (726) hide show
  1. package/CHANGELOG.md +21 -0
  2. package/audit-tool/00-dependencies.cjs +46 -13
  3. package/audit-tool/audits/01-pace-core-compliance.cjs +96 -21
  4. package/audit-tool/audits/02-project-structure.cjs +13 -3
  5. package/audit-tool/audits/03-architecture.cjs +78 -4
  6. package/audit-tool/audits/04-code-quality.cjs +9 -2
  7. package/audit-tool/audits/05-styling.cjs +19 -7
  8. package/audit-tool/audits/06-security-rbac.cjs +105 -14
  9. package/audit-tool/audits/07-api-tech-stack.cjs +31 -15
  10. package/audit-tool/audits/08-testing-documentation.cjs +11 -3
  11. package/audit-tool/audits/09-operations.cjs +19 -7
  12. package/audit-tool/index.cjs +22 -11
  13. package/audit-tool/utils/report-utils.cjs +4 -0
  14. package/cursor-rules/01-pace-core-compliance.mdc +1 -0
  15. package/cursor-rules/02-project-structure.mdc +1 -0
  16. package/cursor-rules/03-architecture.mdc +3 -1
  17. package/cursor-rules/04-code-quality.mdc +1 -0
  18. package/cursor-rules/05-styling.mdc +41 -7
  19. package/cursor-rules/06-security-rbac.mdc +2 -1
  20. package/cursor-rules/07-api-tech-stack.mdc +1 -0
  21. package/cursor-rules/08-testing-documentation.mdc +1 -0
  22. package/cursor-rules/09-operations.mdc +1 -0
  23. package/dist/{DataTable-SAXFG4XI.js → DataTable-EFYP2QLE.js} +10 -7
  24. package/dist/{InactivityServiceProvider-DHryoh6K.d.ts → InactivityServiceProvider-BbxwwDz1.d.ts} +10 -1
  25. package/dist/{UnifiedAuthProvider-CiBAl9-s.d.ts → UnifiedAuthProvider-Bkt_tzdS.d.ts} +56 -24
  26. package/dist/{api-F47QJ7FX.js → api-BZR2CYXL.js} +3 -2
  27. package/dist/api-result-USV1Czr-.d.ts +51 -0
  28. package/dist/{audit-Z6ZZBWLU.js → audit-HI2DHUVU.js} +2 -1
  29. package/dist/{auth-BZOJqrdd.d.ts → auth-JvdRVaud.d.ts} +1 -1
  30. package/dist/{chunk-KSNLMI7N.js → chunk-2DL2WSOE.js} +1 -155
  31. package/dist/{chunk-MPY44PWB.js → chunk-2OEVOGGR.js} +4648 -3560
  32. package/dist/chunk-44CNXN4P.js +15 -0
  33. package/dist/{chunk-Y4PF6HIM.js → chunk-4R3T5ENU.js} +867 -786
  34. package/dist/{chunk-LNHFAF4X.js → chunk-7A6IMHH2.js} +289 -247
  35. package/dist/chunk-CU2BU2MQ.js +2 -0
  36. package/dist/{chunk-JJEYZ3DX.js → chunk-D6BMFMQZ.js} +37 -2
  37. package/dist/{chunk-BCTXBU6U.js → chunk-ENLXB7GP.js} +88 -71
  38. package/dist/{chunk-FBZ7U3ID.js → chunk-J2KQK6DG.js} +937 -987
  39. package/dist/{chunk-TFIPNIPE.js → chunk-KJXRL3XE.js} +3300 -2245
  40. package/dist/{chunk-3GWSPISD.js → chunk-L5LFKKLJ.js} +1 -1
  41. package/dist/{chunk-X5EAU5G7.js → chunk-PCSHBLPB.js} +132 -114
  42. package/dist/{chunk-NIU6DPQV.js → chunk-QRYSEPHB.js} +2 -0
  43. package/dist/{chunk-KYURMOQM.js → chunk-V7FTM2LU.js} +423 -320
  44. package/dist/chunk-WY6Y7KC3.js +264 -0
  45. package/dist/{chunk-FN52B75D.js → chunk-XOJME5T7.js} +176 -15
  46. package/dist/{chunk-7YDC7LMU.js → chunk-XPFVT3GN.js} +71 -66
  47. package/dist/{chunk-66R6RLUZ.js → chunk-YFTFFJIV.js} +3 -3
  48. package/dist/{chunk-W46INAVW.js → chunk-YYTWKVHO.js} +688 -570
  49. package/dist/components.d.ts +8 -7
  50. package/dist/components.js +17 -15
  51. package/dist/{database.generated-DT8JTZiP.d.ts → database.generated-qkdoiVrJ.d.ts} +45 -10
  52. package/dist/eslint-rules/index.cjs +3 -0
  53. package/dist/eslint-rules/rules/03-architecture.cjs +74 -0
  54. package/dist/eslint-rules/rules/06-security-rbac.cjs +74 -0
  55. package/dist/{event-WTAQuGcq.d.ts → event-BfCox3N2.d.ts} +36 -10
  56. package/dist/{file-reference-BavO2eQj.d.ts → file-reference-DU1hcawx.d.ts} +29 -13
  57. package/dist/hooks.d.ts +22 -9
  58. package/dist/hooks.js +34 -25
  59. package/dist/icons/index.d.ts +1 -0
  60. package/dist/icons/index.js +1 -0
  61. package/dist/index.d.ts +66 -177
  62. package/dist/index.js +316 -340
  63. package/dist/pagination-BW1mqywp.d.ts +201 -0
  64. package/dist/providers.d.ts +6 -5
  65. package/dist/providers.js +5 -3
  66. package/dist/rbac/index.d.ts +123 -138
  67. package/dist/rbac/index.js +10 -8
  68. package/dist/theming/runtime.d.ts +19 -2
  69. package/dist/theming/runtime.js +1 -1
  70. package/dist/{timezone-K-ptz3HO.d.ts → timezone-BTWWXKVY.d.ts} +1 -1
  71. package/dist/types.d.ts +17 -10
  72. package/dist/types.js +1 -0
  73. package/dist/{usePublicPageContext-vxBlEHO9.d.ts → usePublicPageContext-B91dGYW1.d.ts} +433 -356
  74. package/dist/{usePublicRouteParams-G3Ks53mk.d.ts → usePublicRouteParams-BgV6VhMi.d.ts} +73 -4
  75. package/dist/utils.d.ts +163 -145
  76. package/dist/utils.js +42 -25
  77. package/docs/api/modules.md +782 -643
  78. package/docs/api-reference/rpc-functions.md +12 -3
  79. package/docs/core-concepts/rbac-system.md +8 -0
  80. package/docs/getting-started/cursor-rules.md +17 -20
  81. package/docs/getting-started/dependencies.md +1 -1
  82. package/docs/getting-started/setup.md +235 -0
  83. package/docs/implementation-guides/authentication.md +27 -0
  84. package/docs/implementation-guides/data-tables.md +176 -3
  85. package/docs/migration/ApiResult-migration.md +25 -0
  86. package/docs/rbac/api-reference.md +33 -31
  87. package/docs/standards/0-standards-overview.md +50 -15
  88. package/docs/standards/1-pace-core-compliance-standards.md +62 -57
  89. package/docs/standards/2-project-structure-standards.md +33 -16
  90. package/docs/standards/3-architecture-standards.md +41 -1
  91. package/docs/standards/4-code-quality-standards.md +26 -6
  92. package/docs/standards/5-styling-standards.md +35 -1
  93. package/docs/standards/6-security-rbac-standards.md +66 -0
  94. package/docs/standards/7-api-tech-stack-standards.md +25 -14
  95. package/docs/standards/8-testing-documentation-standards.md +31 -0
  96. package/docs/standards/9-operations-standards.md +19 -0
  97. package/docs/standards/README.md +20 -201
  98. package/docs/testing/test-setup-for-consumers.md +2 -0
  99. package/docs/troubleshooting/common-issues.md +17 -1
  100. package/docs/troubleshooting/organisation-context-setup.md +8 -0
  101. package/docs/troubleshooting/print-event-name-css-variable-analysis.md +217 -0
  102. package/eslint-config-pace-core.cjs +20 -0
  103. package/package.json +14 -20
  104. package/scripts/{build-docs-incremental.js → build-docs.js} +3 -2
  105. package/scripts/setup.cjs +536 -0
  106. package/scripts/validate.cjs +480 -0
  107. package/src/__tests__/helpers/{__tests__/component-test-utils.test.tsx → component-test-utils.test.tsx} +3 -3
  108. package/src/__tests__/helpers/{__tests__/optimized-test-setup.test.ts → optimized-test-setup.test.ts} +2 -2
  109. package/src/__tests__/helpers/{__tests__/supabaseMock.test.ts → supabaseMock.test.ts} +2 -2
  110. package/src/__tests__/helpers/{__tests__/test-providers.test.tsx → test-providers.test.tsx} +1 -1
  111. package/src/__tests__/helpers/test-providers.tsx +37 -39
  112. package/src/__tests__/helpers/{__tests__/test-utils.test.tsx → test-utils.test.tsx} +4 -3
  113. package/src/__tests__/helpers/{__tests__/timer-utils.test.ts → timer-utils.test.ts} +2 -2
  114. package/src/assets/app-icons/index.test.ts +304 -0
  115. package/src/components/AddressField/AddressField.test.tsx +1 -1
  116. package/src/components/AddressField/AddressField.tsx +238 -212
  117. package/src/components/Button/Button.tsx +1 -1
  118. package/src/components/Card/Card.test.tsx +172 -17
  119. package/src/components/Card/Card.tsx +19 -10
  120. package/src/components/ContextSelector/ContextSelector.internals.tsx +204 -0
  121. package/src/components/ContextSelector/{__tests__/ContextSelector.test.tsx → ContextSelector.test.tsx} +6 -6
  122. package/src/components/ContextSelector/ContextSelector.tsx +66 -280
  123. package/src/components/ContextSelector/ContextSelector.types.ts +35 -0
  124. package/src/components/ContextSelector/useContextSelectorState.tsx +195 -0
  125. package/src/components/DataTable/AUDIT_REPORT.md +59 -44
  126. package/src/components/DataTable/{__tests__/DataTable.comprehensive.test.tsx → DataTable.comprehensive.test.tsx} +6 -6
  127. package/src/components/DataTable/{__tests__/DataTable.default-state.test.tsx → DataTable.default-state.test.tsx} +5 -5
  128. package/src/components/DataTable/{__tests__/DataTable.export.test.tsx → DataTable.export.test.tsx} +10 -10
  129. package/src/components/DataTable/{__tests__/DataTable.grouping-aggregation.test.tsx → DataTable.grouping-aggregation.test.tsx} +6 -6
  130. package/src/components/DataTable/{__tests__/DataTable.hooks.test.tsx → DataTable.hooks.test.tsx} +6 -6
  131. package/src/components/DataTable/{__tests__/DataTable.select-label-display.test.tsx → DataTable.select-label-display.test.tsx} +6 -6
  132. package/src/components/DataTable/DataTable.test.tsx +787 -416
  133. package/src/components/DataTable/DataTable.tsx +12 -12
  134. package/src/components/DataTable/DataTableCore.integration.test.tsx +458 -0
  135. package/src/components/DataTable/{__tests__/DataTableCore.test-setup.ts → DataTableCore.test-setup.ts} +10 -9
  136. package/src/components/DataTable/{__tests__/DataTableCore.test.tsx → DataTableCore.test.tsx} +8 -8
  137. package/src/components/DataTable/{__tests__/README.md → README.md} +17 -7
  138. package/src/components/DataTable/TESTING.md +101 -0
  139. package/src/components/DataTable/{__tests__/a11y.basic.test.tsx → a11y.basic.test.tsx} +34 -34
  140. package/src/components/DataTable/components/DataTableCore.tsx +104 -864
  141. package/src/components/DataTable/components/{__tests__/GroupingDropdown.test.tsx → GroupingDropdown.test.tsx} +17 -8
  142. package/src/components/DataTable/components/GroupingDropdown.tsx +2 -2
  143. package/src/components/DataTable/components/ImportModal.tsx +61 -559
  144. package/src/components/DataTable/components/ImportModalFileSection.tsx +148 -0
  145. package/src/components/DataTable/context/{__tests__/DataTableContext.test.tsx → DataTableContext.test.tsx} +2 -2
  146. package/src/components/DataTable/context/DataTableContext.tsx +7 -6
  147. package/src/components/DataTable/core/{__tests__/ColumnFactory.test.ts → ColumnFactory.test.ts} +2 -2
  148. package/src/components/DataTable/hooks/{__tests__/useColumnOrderPersistence.test.ts → useColumnOrderPersistence.test.ts} +2 -2
  149. package/src/components/DataTable/hooks/{__tests__/useColumnVisibilityPersistence.test.ts → useColumnVisibilityPersistence.test.ts} +2 -2
  150. package/src/components/DataTable/hooks/{__tests__/useDataTableConfiguration.test.ts → useDataTableConfiguration.test.ts} +3 -3
  151. package/src/components/DataTable/hooks/useDataTableConfiguration.ts +14 -2
  152. package/src/components/DataTable/hooks/{__tests__/useDataTableDataPipeline.test.ts → useDataTableDataPipeline.test.ts} +6 -6
  153. package/src/components/DataTable/hooks/useDataTableDeletionBatching.test.ts +127 -0
  154. package/src/components/DataTable/hooks/useDataTableDeletionBatching.ts +106 -0
  155. package/src/components/DataTable/hooks/useDataTableEffectiveActions.test.ts +461 -0
  156. package/src/components/DataTable/hooks/useDataTableEffectiveActions.ts +238 -0
  157. package/src/components/DataTable/hooks/useDataTableLayoutHandlers.test.ts +296 -0
  158. package/src/components/DataTable/hooks/useDataTableLayoutHandlers.ts +175 -0
  159. package/src/components/DataTable/hooks/useDataTablePaginationSync.test.ts +203 -0
  160. package/src/components/DataTable/hooks/useDataTablePaginationSync.ts +109 -0
  161. package/src/components/DataTable/hooks/{__tests__/useDataTablePermissions.test.ts → useDataTablePermissions.test.ts} +11 -11
  162. package/src/components/DataTable/hooks/useDataTablePermissions.ts +79 -247
  163. package/src/components/DataTable/hooks/useDataTablePipeline.test.tsx +219 -0
  164. package/src/components/DataTable/hooks/useDataTablePipeline.tsx +239 -0
  165. package/src/components/DataTable/hooks/useDataTableRenderGuard.test.tsx +316 -0
  166. package/src/components/DataTable/hooks/useDataTableRenderGuard.tsx +195 -0
  167. package/src/components/DataTable/hooks/useDataTableScope.test.ts +110 -0
  168. package/src/components/DataTable/hooks/useDataTableScope.ts +123 -0
  169. package/src/components/DataTable/hooks/{__tests__/useDataTableState.test.ts → useDataTableState.test.ts} +47 -5
  170. package/src/components/DataTable/hooks/useDataTableState.ts +145 -94
  171. package/src/components/DataTable/hooks/useDataTableStateAndPersistence.test.ts +277 -0
  172. package/src/components/DataTable/hooks/useDataTableStateAndPersistence.ts +222 -0
  173. package/src/components/DataTable/hooks/useDataTableSuperAdmin.test.ts +93 -0
  174. package/src/components/DataTable/hooks/useDataTableSuperAdmin.ts +86 -0
  175. package/src/components/DataTable/hooks/useDataTableTableInstance.test.ts +185 -0
  176. package/src/components/DataTable/hooks/useDataTableTableInstance.ts +178 -0
  177. package/src/components/DataTable/hooks/{__tests__/useEffectiveColumnOrder.test.ts → useEffectiveColumnOrder.test.ts} +2 -2
  178. package/src/components/DataTable/hooks/{__tests__/useHierarchicalState.test.ts → useHierarchicalState.test.ts} +2 -2
  179. package/src/components/DataTable/{components/hooks → hooks}/useImportModalFocus.test.ts +3 -3
  180. package/src/components/DataTable/{components/hooks → hooks}/useImportModalFocus.ts +2 -2
  181. package/src/components/DataTable/hooks/useImportModalState.test.ts +390 -0
  182. package/src/components/DataTable/hooks/useImportModalState.ts +345 -0
  183. package/src/components/DataTable/hooks/{__tests__/useKeyboardNavigation.test.ts → useKeyboardNavigation.test.ts} +3 -3
  184. package/src/components/DataTable/hooks/useKeyboardNavigation.ts +309 -269
  185. package/src/components/DataTable/{components/hooks → hooks}/usePermissionTracking.test.ts +3 -3
  186. package/src/components/DataTable/{components/hooks → hooks}/usePermissionTracking.ts +3 -3
  187. package/src/components/DataTable/hooks/{__tests__/useServerSideDataEffect.test.ts → useServerSideDataEffect.test.ts} +2 -2
  188. package/src/components/DataTable/hooks/useServerSideDataEffect.ts +14 -3
  189. package/src/components/DataTable/hooks/{__tests__/useTableColumns.test.ts → useTableColumns.test.ts} +2 -2
  190. package/src/components/DataTable/hooks/{__tests__/useTableHandlers.test.ts → useTableHandlers.test.ts} +25 -4
  191. package/src/components/DataTable/hooks/useTableHandlers.ts +5 -2
  192. package/src/components/DataTable/index.ts +18 -17
  193. package/src/components/DataTable/{__tests__/keyboard.test.tsx → keyboard.test.tsx} +41 -63
  194. package/src/components/DataTable/{__tests__/mocks → mocks}/MockRBACProvider.tsx +1 -1
  195. package/src/components/DataTable/{__tests__/pagination.modes.test.tsx → pagination.modes.test.tsx} +6 -6
  196. package/src/components/DataTable/{__tests__/ssr.strict-mode.test.tsx → ssr.strict-mode.test.tsx} +2 -2
  197. package/src/components/DataTable/{__tests__/styles.test.ts → styles.test.ts} +1 -4
  198. package/src/components/DataTable/styles.ts +0 -1
  199. package/src/components/DataTable/test-utils/MockDataTableComponents.tsx +55 -0
  200. package/src/components/DataTable/{__tests__/test-utils → test-utils}/dataFactories.ts +2 -2
  201. package/src/components/DataTable/test-utils/featureConfig.ts +10 -0
  202. package/src/components/DataTable/{__tests__/test-utils/sharedTestUtils.tsx → test-utils/sharedTestUtils.ts} +97 -66
  203. package/src/components/DataTable/{__tests__/test-utils.ts → test-utils.ts} +1 -1
  204. package/src/components/DataTable/types/actions.ts +71 -0
  205. package/src/components/DataTable/types/base.ts +39 -0
  206. package/src/components/DataTable/types/columns.ts +125 -0
  207. package/src/components/DataTable/types/export.ts +32 -0
  208. package/src/components/DataTable/types/features.ts +81 -0
  209. package/src/components/DataTable/types/hierarchical.ts +44 -0
  210. package/src/components/DataTable/types/index.ts +43 -0
  211. package/src/components/DataTable/types/pagination.ts +85 -0
  212. package/src/components/DataTable/types/performance.ts +47 -0
  213. package/src/components/DataTable/types/props.ts +62 -0
  214. package/src/components/DataTable/types/rbac.ts +45 -0
  215. package/src/components/DataTable/{components/__tests__ → ui/layout}/DataTableCore.test.tsx +430 -28
  216. package/src/components/DataTable/ui/layout/DataTableCore.tsx +345 -0
  217. package/src/components/DataTable/{components/__tests__ → ui/layout}/DataTableErrorBoundary.test.tsx +4 -4
  218. package/src/components/DataTable/{components → ui/layout}/DataTableErrorBoundary.tsx +7 -7
  219. package/src/components/DataTable/ui/layout/DataTableLayout.test.tsx +1352 -0
  220. package/src/components/DataTable/ui/layout/DataTableLayout.tsx +661 -0
  221. package/src/components/DataTable/ui/modals/BulkDeleteConfirmDialog.test.tsx +91 -0
  222. package/src/components/DataTable/ui/modals/BulkDeleteConfirmDialog.tsx +43 -0
  223. package/src/components/DataTable/ui/modals/DataTableModals.test.tsx +749 -0
  224. package/src/components/DataTable/{components → ui/modals}/DataTableModals.tsx +36 -28
  225. package/src/components/DataTable/ui/modals/ImportModal.test.tsx +1834 -0
  226. package/src/components/DataTable/ui/modals/ImportModal.tsx +197 -0
  227. package/src/components/DataTable/ui/modals/ImportModalFailedRowsSection.tsx +60 -0
  228. package/src/components/DataTable/ui/modals/ImportModalFileSection.tsx +148 -0
  229. package/src/components/DataTable/ui/modals/ImportModalPreviewSection.tsx +60 -0
  230. package/src/components/DataTable/ui/modals/ImportModalSummarySection.tsx +59 -0
  231. package/src/components/DataTable/ui/modals/importModalPersistence.ts +73 -0
  232. package/src/components/DataTable/{components/__tests__ → ui/shared}/AccessDeniedPage.test.tsx +2 -2
  233. package/src/components/DataTable/{components → ui/shared}/AccessDeniedPage.tsx +2 -2
  234. package/src/components/DataTable/{components/__tests__ → ui/shared}/ActionButtons.test.tsx +6 -4
  235. package/src/components/DataTable/{components → ui/shared}/ActionButtons.tsx +4 -4
  236. package/src/components/DataTable/{components/__tests__ → ui/shared}/ColumnFilter.test.tsx +29 -16
  237. package/src/components/DataTable/{components → ui/shared}/ColumnFilter.tsx +4 -4
  238. package/src/components/DataTable/{components/__tests__ → ui/shared}/PaginationControls.test.tsx +38 -16
  239. package/src/components/DataTable/{components → ui/shared}/PaginationControls.tsx +21 -15
  240. package/src/components/DataTable/{components/__tests__ → ui/shared}/SortIndicator.test.tsx +2 -2
  241. package/src/components/DataTable/{components → ui/shared}/SortIndicator.tsx +1 -1
  242. package/src/components/DataTable/{components/__tests__ → ui/table}/EditFields.test.tsx +3 -3
  243. package/src/components/DataTable/{components → ui/table}/EditFields.tsx +138 -69
  244. package/src/components/DataTable/{components/__tests__ → ui/table}/EditableRow.test.tsx +36 -27
  245. package/src/components/DataTable/{components → ui/table}/EditableRow.tsx +86 -104
  246. package/src/components/DataTable/{components/__tests__ → ui/table}/EmptyState.test.tsx +2 -62
  247. package/src/components/DataTable/{components → ui/table}/EmptyState.tsx +7 -15
  248. package/src/components/DataTable/{components/__tests__ → ui/table}/FilterRow.test.tsx +5 -4
  249. package/src/components/DataTable/{components → ui/table}/FilterRow.tsx +3 -3
  250. package/src/components/DataTable/{components/__tests__ → ui/table}/LoadingState.test.tsx +6 -10
  251. package/src/components/DataTable/{components → ui/table}/LoadingState.tsx +4 -4
  252. package/src/components/DataTable/{components/__tests__ → ui/table}/RowComponent.test.tsx +412 -17
  253. package/src/components/DataTable/{components → ui/table}/RowComponent.tsx +183 -177
  254. package/src/components/DataTable/{components/__tests__ → ui/table}/UnifiedTableBody.test.tsx +425 -16
  255. package/src/components/DataTable/ui/table/UnifiedTableBody.tsx +440 -0
  256. package/src/components/DataTable/{components/__tests__ → ui/table}/cellValueUtils.test.ts +2 -2
  257. package/src/components/DataTable/{components → ui/table}/cellValueUtils.ts +1 -1
  258. package/src/components/DataTable/{components/__tests__ → ui/toolbar}/BulkOperationsDropdown.test.tsx +12 -5
  259. package/src/components/DataTable/{components → ui/toolbar}/BulkOperationsDropdown.tsx +3 -3
  260. package/src/components/DataTable/{components/__tests__ → ui/toolbar}/ColumnVisibilityDropdown.test.tsx +7 -4
  261. package/src/components/DataTable/{components → ui/toolbar}/ColumnVisibilityDropdown.tsx +7 -7
  262. package/src/components/DataTable/{components/__tests__ → ui/toolbar}/DataTableToolbar.test.tsx +4 -4
  263. package/src/components/DataTable/{components → ui/toolbar}/DataTableToolbar.tsx +4 -4
  264. package/src/components/DataTable/ui/toolbar/GroupingDropdown.test.tsx +621 -0
  265. package/src/components/DataTable/ui/toolbar/GroupingDropdown.tsx +107 -0
  266. package/src/components/DataTable/utils/{__tests__/a11yUtils.test.ts → a11yUtils.test.ts} +2 -2
  267. package/src/components/DataTable/utils/{__tests__/aggregationUtils.test.ts → aggregationUtils.test.ts} +3 -3
  268. package/src/components/DataTable/utils/{__tests__/columnUtils.test.ts → columnUtils.test.ts} +2 -2
  269. package/src/components/DataTable/utils/csvParse.test.ts +74 -0
  270. package/src/components/DataTable/utils/csvParse.ts +65 -0
  271. package/src/components/DataTable/utils/{__tests__/errorHandling.test.ts → errorHandling.test.ts} +2 -2
  272. package/src/components/DataTable/utils/{__tests__/exportUtils.test.ts → exportUtils.test.ts} +3 -3
  273. package/src/components/DataTable/utils/{__tests__/flexibleImport.test.ts → flexibleImport.test.ts} +2 -2
  274. package/src/components/DataTable/utils/flexibleImport.ts +3 -186
  275. package/src/components/DataTable/utils/{__tests__/hierarchicalSorting.test.ts → hierarchicalSorting.test.ts} +3 -3
  276. package/src/components/DataTable/utils/{__tests__/hierarchicalUtils.test.ts → hierarchicalUtils.test.ts} +3 -3
  277. package/src/components/DataTable/utils/importDateParser.test.ts +162 -0
  278. package/src/components/DataTable/utils/importDateParser.ts +114 -0
  279. package/src/components/DataTable/utils/importValueParser.test.ts +138 -0
  280. package/src/components/DataTable/utils/importValueParser.ts +91 -0
  281. package/src/components/DataTable/utils/{__tests__/paginationUtils.test.ts → paginationUtils.test.ts} +2 -2
  282. package/src/components/DataTable/utils/paginationUtils.ts +6 -3
  283. package/src/components/DataTable/utils/{__tests__/performanceUtils.test.ts → performanceUtils.test.ts} +3 -3
  284. package/src/components/DataTable/utils/{__tests__/rowUtils.test.ts → rowUtils.test.ts} +3 -3
  285. package/src/components/DataTable/utils/{__tests__/selectFieldUtils.test.ts → selectFieldUtils.test.ts} +66 -3
  286. package/src/components/DataTable/utils/selectFieldUtils.ts +97 -60
  287. package/src/components/DatePickerWithTimezone/DatePickerWithTimezone.test.tsx +1 -1
  288. package/src/components/DateTimeField/DateTimeField.test.tsx +1 -1
  289. package/src/components/Dialog/Dialog.test-utils.ts +49 -0
  290. package/src/components/Dialog/Dialog.test.tsx +896 -89
  291. package/src/components/Dialog/Dialog.tsx +174 -882
  292. package/src/components/Dialog/dialogLock.test.ts +238 -0
  293. package/src/components/Dialog/dialogLock.ts +98 -0
  294. package/src/components/Dialog/index.ts +2 -0
  295. package/src/components/Dialog/useDialogDimensions.test.ts +163 -0
  296. package/src/components/Dialog/useDialogDimensions.ts +140 -0
  297. package/src/components/Dialog/useDialogLifecycle.test.ts +358 -0
  298. package/src/components/Dialog/useDialogLifecycle.ts +135 -0
  299. package/src/components/Dialog/useDialogPersistence.test.ts +381 -0
  300. package/src/components/Dialog/useDialogPersistence.ts +357 -0
  301. package/src/components/FileDisplay/FileDisplay.test.tsx +40 -40
  302. package/src/components/FileDisplay/FileDisplay.tsx +24 -656
  303. package/src/components/FileDisplay/FileDisplayContent.test.tsx +395 -0
  304. package/src/components/FileDisplay/FileDisplayContent.tsx +242 -0
  305. package/src/components/FileDisplay/FileDisplayDeleteConfirmDialog.test.tsx +74 -0
  306. package/src/components/FileDisplay/FileDisplayDeleteConfirmDialog.tsx +38 -0
  307. package/src/components/FileDisplay/FileDisplayEmptyView.test.tsx +33 -0
  308. package/src/components/FileDisplay/FileDisplayEmptyView.tsx +33 -0
  309. package/src/components/FileDisplay/FileDisplayErrorView.test.tsx +71 -0
  310. package/src/components/FileDisplay/FileDisplayErrorView.tsx +50 -0
  311. package/src/components/FileDisplay/FileDisplayLoadingFallbackView.test.tsx +22 -0
  312. package/src/components/FileDisplay/FileDisplayLoadingFallbackView.tsx +22 -0
  313. package/src/components/FileDisplay/FileDisplayLoadingView.test.tsx +21 -0
  314. package/src/components/FileDisplay/FileDisplayLoadingView.tsx +23 -0
  315. package/src/components/FileDisplay/FileDisplayMultipleFilesView.test.tsx +101 -0
  316. package/src/components/FileDisplay/FileDisplayMultipleFilesView.tsx +109 -0
  317. package/src/components/FileDisplay/FileDisplaySingleDocumentLinkView.test.tsx +58 -0
  318. package/src/components/FileDisplay/FileDisplaySingleDocumentLinkView.tsx +48 -0
  319. package/src/components/FileDisplay/FileDisplaySingleFileWithActionsView.test.tsx +111 -0
  320. package/src/components/FileDisplay/FileDisplaySingleFileWithActionsView.tsx +270 -0
  321. package/src/components/FileDisplay/FileDisplaySingleImageView.test.tsx +78 -0
  322. package/src/components/FileDisplay/FileDisplaySingleImageView.tsx +67 -0
  323. package/src/components/FileDisplay/fallbackUtils.test.ts +50 -0
  324. package/src/components/FileDisplay/fallbackUtils.ts +44 -0
  325. package/src/components/FileDisplay/fetchFileDisplayData.ts +24 -0
  326. package/src/components/FileDisplay/fetchFileDisplayData.unit.test.ts +183 -0
  327. package/src/components/FileDisplay/fileDisplayUtils.test.ts +58 -0
  328. package/src/components/FileDisplay/fileDisplayUtils.ts +24 -0
  329. package/src/{hooks/__tests__ → components/FileDisplay}/useFileDisplay.test.ts +40 -42
  330. package/src/components/FileDisplay/useFileDisplay.ts +515 -0
  331. package/src/{hooks/__tests__ → components/FileDisplay}/useFileDisplay.unit.test.ts +406 -77
  332. package/src/components/FileDisplay/useFileDisplayData.ts +126 -0
  333. package/src/{hooks/public → components/FileDisplay}/usePublicFileDisplay.test.ts +94 -88
  334. package/src/components/FileDisplay/usePublicFileDisplay.ts +579 -0
  335. package/src/components/FileUpload/FileUpload.test.tsx +16 -10
  336. package/src/components/FileUpload/FileUpload.tsx +107 -525
  337. package/src/components/FileUpload/FileUploadDropZone.tsx +112 -0
  338. package/src/components/FileUpload/FileUploadProgressItem.tsx +86 -0
  339. package/src/components/FileUpload/FileUploadProgressList.tsx +40 -0
  340. package/src/components/FileUpload/useFileUploadManager.test.ts +308 -0
  341. package/src/components/FileUpload/useFileUploadManager.ts +454 -0
  342. package/src/components/FileUpload/useResolvedAppId.test.ts +102 -0
  343. package/src/components/FileUpload/useResolvedAppId.ts +77 -0
  344. package/src/components/Footer/Footer.test.tsx +6 -292
  345. package/src/components/Footer/Footer.tsx +8 -125
  346. package/src/components/Form/Form.test.tsx +44 -27
  347. package/src/components/Form/Form.tsx +64 -287
  348. package/src/components/Form/useFormPersistence.ts +257 -0
  349. package/src/components/Header/Header.test.tsx +17 -18
  350. package/src/components/Header/Header.tsx +10 -1
  351. package/src/components/Input/Input.tsx +1 -1
  352. package/src/components/Label/Label.test.tsx +1 -1
  353. package/src/components/LoadingSpinner/LoadingSpinner.test.tsx +1 -1
  354. package/src/components/NavigationMenu/HierarchicalNavItem.tsx +104 -0
  355. package/src/components/NavigationMenu/NavigationMenu.test.tsx +1029 -26
  356. package/src/components/NavigationMenu/NavigationMenu.tsx +61 -361
  357. package/src/components/NavigationMenu/index.ts +6 -1
  358. package/src/components/NavigationMenu/navigationPermissionHelper.ts +188 -0
  359. package/src/components/NavigationMenu/{__tests__/useNavigationFiltering.test.ts → useNavigationFiltering.test.ts} +68 -53
  360. package/src/components/NavigationMenu/useNavigationFiltering.ts +197 -296
  361. package/src/components/NavigationMenu/useNavigationScope.ts +125 -0
  362. package/src/components/PaceAppLayout/PaceAppLayout.edge-cases.test.tsx +77 -62
  363. package/src/components/PaceAppLayout/PaceAppLayout.integration.test.tsx +3 -3
  364. package/src/components/PaceAppLayout/PaceAppLayout.security.test.tsx +16 -19
  365. package/src/components/PaceAppLayout/PaceAppLayout.test.tsx +529 -5
  366. package/src/components/PaceAppLayout/PaceAppLayout.tsx +280 -756
  367. package/src/components/PaceAppLayout/useFilteredNavItems.ts +304 -0
  368. package/src/components/PaceAppLayout/usePaceAppLayoutConfig.ts +142 -0
  369. package/src/components/PaceAppLayout/usePaceAppLayoutGate.tsx +150 -0
  370. package/src/components/PaceAppLayout/usePaceAppLayoutPermissions.ts +162 -0
  371. package/src/components/PaceAppLayout/usePaceAppLayoutScope.ts +79 -0
  372. package/src/components/PaceAppLayout/useRoleBasedRouteAccess.ts +157 -0
  373. package/src/components/PaceAppLayout/useSuperAdminFallback.ts +58 -0
  374. package/src/components/PaceLoginPage/PaceLoginPage.test.tsx +31 -25
  375. package/src/components/PaceLoginPage/PaceLoginPage.tsx +31 -122
  376. package/src/components/PaceLoginPage/useLoginAppAccess.ts +153 -0
  377. package/src/components/Progress/Progress.tsx +1 -2
  378. package/src/components/ProtectedRoute/ProtectedRoute.tsx +29 -235
  379. package/src/components/ProtectedRoute/useProtectedRouteState.ts +128 -0
  380. package/src/components/ProtectedRoute/useVisibilityRedirectGrace.ts +89 -0
  381. package/src/components/PublicLayout/PublicLayout.test.tsx +217 -36
  382. package/src/components/PublicLayout/PublicPageLayout.tsx +132 -73
  383. package/src/components/PublicLayout/PublicPageProvider.tsx +5 -1
  384. package/src/components/Select/Select.test.tsx +1 -1
  385. package/src/components/Select/Select.tsx +28 -18
  386. package/src/components/Select/{__tests__/context.test.tsx → context.test.tsx} +3 -3
  387. package/src/components/Select/{utils/__tests__/text.test.tsx → text.test.tsx} +2 -2
  388. package/src/components/Select/{utils/text.ts → text.ts} +1 -1
  389. package/src/components/Select/{hooks/__tests__/useSelectEvents.test.ts → useSelectEvents.test.ts} +5 -5
  390. package/src/components/Select/{hooks/useSelectEvents.ts → useSelectEvents.ts} +2 -2
  391. package/src/components/Select/{hooks/__tests__/useSelectSearch.test.tsx → useSelectSearch.test.tsx} +7 -7
  392. package/src/components/Select/{hooks/useSelectSearch.ts → useSelectSearch.ts} +2 -2
  393. package/src/components/Select/{hooks/__tests__/useSelectState.test.ts → useSelectState.test.ts} +16 -2
  394. package/src/components/Select/{hooks/useSelectState.ts → useSelectState.ts} +3 -3
  395. package/src/components/Table/Table.test.tsx +348 -0
  396. package/src/components/Tabs/Tabs.test.tsx +270 -0
  397. package/src/components/Tabs/Tabs.tsx +1 -1
  398. package/src/components/Toast/Toast.test.tsx +420 -0
  399. package/src/components/{__tests__/index.test.ts → index.test.ts} +2 -2
  400. package/src/constants/{__tests__/performance.test.ts → performance.test.ts} +2 -2
  401. package/src/hooks/{__tests__/ServiceHooks.test.tsx → ServiceHooks.test.tsx} +8 -8
  402. package/src/hooks/{__tests__/hooks.integration.test.tsx → hooks.integration.test.tsx} +11 -11
  403. package/src/hooks/index.ts +7 -4
  404. package/src/hooks/{__tests__/index.unit.test.ts → index.unit.test.ts} +2 -2
  405. package/src/hooks/public/usePublicEvent.test.ts +1 -1
  406. package/src/hooks/public/usePublicEventLogo.test.ts +1 -1
  407. package/src/hooks/public/usePublicRouteParams.test.ts +1 -1
  408. package/src/hooks/services/useAuth.ts +9 -7
  409. package/src/hooks/useAddressAutocomplete.test.ts +22 -22
  410. package/src/hooks/useAddressAutocomplete.ts +90 -75
  411. package/src/hooks/{__tests__/useAppConfig.unit.test.ts → useAppConfig.unit.test.ts} +328 -22
  412. package/src/hooks/{__tests__/useComponentPerformance.unit.test.tsx → useComponentPerformance.unit.test.tsx} +27 -41
  413. package/src/hooks/useDataTablePerformance.ts +100 -120
  414. package/src/hooks/{__tests__/useDataTablePerformance.unit.test.ts → useDataTablePerformance.unit.test.ts} +5 -5
  415. package/src/hooks/{__tests__/useDataTableState.test.ts → useDataTableState.test.ts} +2 -2
  416. package/src/hooks/{__tests__/useDebounce.unit.test.ts → useDebounce.unit.test.ts} +2 -2
  417. package/src/hooks/useEventTheme.test.ts +4 -1
  418. package/src/hooks/useEventTheme.ts +49 -21
  419. package/src/hooks/useEvents.ts +41 -1
  420. package/src/hooks/{__tests__/useEvents.unit.test.ts → useEvents.unit.test.ts} +5 -5
  421. package/src/hooks/useFileReference.test.ts +44 -41
  422. package/src/hooks/useFileReference.ts +182 -173
  423. package/src/hooks/useFileUrl.ts +1 -1
  424. package/src/hooks/{__tests__/useFileUrl.unit.test.ts → useFileUrl.unit.test.ts} +26 -36
  425. package/src/hooks/{__tests__/useFileUrlCache.test.ts → useFileUrlCache.test.ts} +8 -8
  426. package/src/hooks/useFileUrlCache.ts +1 -1
  427. package/src/hooks/{__tests__/useFocusManagement.unit.test.ts → useFocusManagement.unit.test.ts} +2 -2
  428. package/src/hooks/{__tests__/useFocusTrap.unit.test.tsx → useFocusTrap.unit.test.tsx} +2 -2
  429. package/src/hooks/{__tests__/useFormDialog.test.ts → useFormDialog.test.ts} +2 -2
  430. package/src/hooks/useInactivityTracker.ts +138 -131
  431. package/src/hooks/{__tests__/useInactivityTracker.unit.test.ts → useInactivityTracker.unit.test.ts} +3 -3
  432. package/src/hooks/{__tests__/useIsMobile.unit.test.ts → useIsMobile.unit.test.ts} +2 -2
  433. package/src/hooks/useIsPrint.ts +62 -0
  434. package/src/hooks/useIsPrint.unit.test.ts +545 -0
  435. package/src/hooks/{__tests__/useKeyboardShortcuts.unit.test.ts → useKeyboardShortcuts.unit.test.ts} +2 -2
  436. package/src/hooks/{__tests__/useOrganisationPermissions.unit.test.tsx → useOrganisationPermissions.unit.test.tsx} +4 -4
  437. package/src/hooks/useOrganisationSecurity.test.ts +3 -3
  438. package/src/hooks/useOrganisationSecurity.ts +190 -201
  439. package/src/hooks/{__tests__/useOrganisationSecurity.unit.test.tsx → useOrganisationSecurity.unit.test.tsx} +61 -63
  440. package/src/hooks/{__tests__/useOrganisations.unit.test.ts → useOrganisations.unit.test.ts} +5 -5
  441. package/src/hooks/{__tests__/usePerformanceMonitor.unit.test.ts → usePerformanceMonitor.unit.test.ts} +13 -14
  442. package/src/hooks/{__tests__/usePermissionCache.test.ts → usePermissionCache.test.ts} +26 -27
  443. package/src/hooks/usePermissionCache.ts +276 -271
  444. package/src/hooks/{__tests__/usePreventTabReload.test.ts → usePreventTabReload.test.ts} +2 -2
  445. package/src/hooks/{__tests__/usePublicEvent.simple.test.ts → usePublicEvent.simple.test.ts} +4 -4
  446. package/src/hooks/{__tests__/usePublicEvent.test.ts → usePublicEvent.test.ts} +4 -4
  447. package/src/hooks/{__tests__/usePublicEvent.unit.test.ts → usePublicEvent.unit.test.ts} +4 -4
  448. package/src/hooks/{__tests__/usePublicFileDisplay.test.ts → usePublicFileDisplay.test.ts} +12 -12
  449. package/src/hooks/{__tests__/usePublicRouteParams.unit.test.ts → usePublicRouteParams.unit.test.ts} +3 -3
  450. package/src/hooks/{__tests__/useQueryCache.test.ts → useQueryCache.test.ts} +2 -2
  451. package/src/hooks/useQueryCache.ts +0 -2
  452. package/src/hooks/{__tests__/useRBAC.unit.test.ts → useRBAC.unit.test.ts} +55 -38
  453. package/src/hooks/{__tests__/useSessionDraft.test.ts → useSessionDraft.test.ts} +2 -2
  454. package/src/hooks/{__tests__/useSessionRestoration.unit.test.tsx → useSessionRestoration.unit.test.tsx} +10 -19
  455. package/src/hooks/useStorage.ts +21 -16
  456. package/src/hooks/{__tests__/useStorage.unit.test.ts → useStorage.unit.test.ts} +38 -75
  457. package/src/hooks/{__tests__/useToast.test.ts → useToast.test.ts} +2 -2
  458. package/src/hooks/{__tests__/useToast.unit.test.tsx → useToast.unit.test.tsx} +2 -2
  459. package/src/hooks/{__tests__/useZodForm.unit.test.tsx → useZodForm.unit.test.tsx} +2 -2
  460. package/src/icons/{__tests__/index.test.ts → index.test.ts} +2 -2
  461. package/src/icons/index.ts +2 -0
  462. package/src/{__tests__/index.test.ts → index.test.ts} +3 -7
  463. package/src/index.ts +15 -7
  464. package/src/providers/{__tests__/AuthProvider.test.tsx → AuthProvider.test.tsx} +3 -3
  465. package/src/providers/{__tests__/EventProvider.test.tsx → EventProvider.test.tsx} +3 -3
  466. package/src/providers/InactivityProvider.test-helper.tsx +40 -0
  467. package/src/providers/{__tests__/InactivityProvider.test.tsx → InactivityProvider.test.tsx} +14 -21
  468. package/src/providers/{__tests__/ProviderLifecycle.test.tsx → ProviderLifecycle.test.tsx} +4 -4
  469. package/src/providers/{__tests__/UnifiedAuthProvider.test.tsx → UnifiedAuthProvider.test.tsx} +1 -1
  470. package/src/providers/{__tests__/index.test.ts → index.test.ts} +2 -2
  471. package/src/providers/services/{__tests__/AuthServiceProvider.integration.test.tsx → AuthServiceProvider.integration.test.tsx} +4 -4
  472. package/src/providers/services/{__tests__/AuthServiceProvider.test.tsx → AuthServiceProvider.test.tsx} +7 -7
  473. package/src/providers/services/{__tests__/EventServiceProvider.test.tsx → EventServiceProvider.test.tsx} +7 -7
  474. package/src/providers/services/{__tests__/InactivityServiceProvider.test.tsx → InactivityServiceProvider.test.tsx} +5 -5
  475. package/src/providers/services/{__tests__/OrganisationServiceProvider.test.tsx → OrganisationServiceProvider.test.tsx} +6 -6
  476. package/src/providers/services/UnifiedAuthContext.ts +30 -27
  477. package/src/providers/services/{__tests__/UnifiedAuthProvider.advanced.test.tsx → UnifiedAuthProvider.advanced.test.tsx} +8 -9
  478. package/src/providers/services/{__tests__/UnifiedAuthProvider.appId.test.tsx → UnifiedAuthProvider.appId.test.tsx} +25 -25
  479. package/src/providers/services/{__tests__/UnifiedAuthProvider.integration.test.tsx → UnifiedAuthProvider.integration.test.tsx} +14 -11
  480. package/src/providers/services/UnifiedAuthProvider.tsx +115 -360
  481. package/src/providers/services/{__tests__/contexts.test.tsx → contexts.test.tsx} +6 -6
  482. package/src/providers/services/{__tests__/useUnifiedAuth.test.tsx → useUnifiedAuth.test.tsx} +6 -6
  483. package/src/providers/services/useUnifiedAuthContextValue.ts +279 -0
  484. package/src/providers/useInactivity.test-helper.ts +27 -0
  485. package/src/rbac/{__tests__/adapters.comprehensive.test.tsx → adapters.comprehensive.test.tsx} +24 -24
  486. package/src/rbac/adapters.test.tsx +22 -22
  487. package/src/rbac/adapters.tsx +29 -29
  488. package/src/rbac/api.test.ts +973 -42
  489. package/src/rbac/api.ts +228 -253
  490. package/src/rbac/{__tests__/audit-batched.test.ts → audit-batched.test.ts} +6 -6
  491. package/src/rbac/audit.ts +4 -1
  492. package/src/rbac/{__tests__/auth-rbac-security.integration.test.tsx → auth-rbac-security.integration.test.tsx} +1 -1
  493. package/src/rbac/{__tests__/auth-rbac.e2e.test.tsx → auth-rbac.e2e.test.tsx} +27 -34
  494. package/src/rbac/cache-invalidation.test.ts +715 -0
  495. package/src/rbac/components/{__tests__/AccessDenied.test.tsx → AccessDenied.test.tsx} +3 -3
  496. package/src/rbac/components/{__tests__/NavigationGuard.test.tsx → NavigationGuard.test.tsx} +13 -11
  497. package/src/{__tests__/rbac/PagePermissionGuard.test.tsx → rbac/components/PagePermissionGuard.guard.test.tsx} +33 -19
  498. package/src/rbac/components/{__tests__/PagePermissionGuard.performance.test.tsx → PagePermissionGuard.performance.test.tsx} +30 -9
  499. package/src/rbac/components/{__tests__/PagePermissionGuard.race-condition.test.tsx → PagePermissionGuard.race-condition.test.tsx} +7 -7
  500. package/src/rbac/components/{__tests__/PagePermissionGuard.test.tsx → PagePermissionGuard.test.tsx} +10 -10
  501. package/src/rbac/components/PagePermissionGuard.tsx +177 -372
  502. package/src/rbac/components/{__tests__/PagePermissionGuard.verification.test.tsx → PagePermissionGuard.verification.test.tsx} +7 -7
  503. package/src/rbac/config.ts +58 -18
  504. package/src/rbac/{__tests__/engine.comprehensive.test.ts → engine.comprehensive.test.ts} +3 -3
  505. package/src/rbac/engine.test.ts +494 -0
  506. package/src/rbac/errors.ts +89 -55
  507. package/src/rbac/hooks/permissions/runPermissionCheck.ts +77 -0
  508. package/src/rbac/hooks/permissions/{__tests__/useAccessLevel.test.ts → useAccessLevel.test.ts} +40 -40
  509. package/src/rbac/hooks/permissions/useAccessLevel.ts +16 -6
  510. package/src/rbac/hooks/permissions/{__tests__/useCan.test.ts → useCan.test.ts} +41 -41
  511. package/src/rbac/hooks/permissions/useCan.ts +170 -252
  512. package/src/rbac/hooks/permissions/{__tests__/useMultiplePermissions.test.ts → useMultiplePermissions.test.ts} +49 -49
  513. package/src/rbac/hooks/permissions/useMultiplePermissions.ts +6 -2
  514. package/src/rbac/hooks/permissions/{__tests__/usePermissions.test.ts → usePermissions.test.ts} +10 -12
  515. package/src/rbac/hooks/permissions/usePermissions.ts +36 -65
  516. package/src/rbac/hooks/useCan.test.ts +42 -42
  517. package/src/rbac/hooks/usePageAccessLogging.ts +160 -0
  518. package/src/rbac/hooks/usePageGuardScope.ts +117 -0
  519. package/src/rbac/hooks/usePagePermissionCheck.ts +67 -0
  520. package/src/rbac/hooks/{__tests__/usePermissions.integration.test.ts → usePermissions.integration.test.ts} +9 -9
  521. package/src/{__tests__/hooks/usePermissions.test.ts → rbac/hooks/usePermissions.stability.test.ts} +18 -18
  522. package/src/rbac/hooks/usePermissions.test.ts +54 -54
  523. package/src/rbac/hooks/useRBAC.test.ts +313 -217
  524. package/src/rbac/hooks/useRBAC.ts +145 -81
  525. package/src/rbac/hooks/useResourcePermissions.test.ts +25 -25
  526. package/src/rbac/hooks/useResourcePermissions.ts +68 -134
  527. package/src/rbac/hooks/useResourcePermissionsSuperAdmin.ts +67 -0
  528. package/src/rbac/hooks/useRoleManagement.test.ts +27 -112
  529. package/src/rbac/hooks/useRoleManagement.ts +153 -585
  530. package/src/rbac/hooks/{__tests__/useSecureSupabase.test.ts → useSecureSupabase.test.ts} +17 -17
  531. package/src/rbac/hooks/useSecureSupabase.ts +10 -2
  532. package/src/rbac/hooks/useSuperAdminCheck.ts +80 -0
  533. package/src/rbac/{__tests__/performance.test.ts → performance.test.ts} +1 -1
  534. package/src/rbac/{__tests__/rbac-core.test.tsx → rbac-core.test.tsx} +3 -3
  535. package/src/rbac/{__tests__/rbac-engine-core-logic.test.ts → rbac-engine-core-logic.test.ts} +2 -2
  536. package/src/rbac/{__tests__/rbac-engine-simplified.test.ts → rbac-engine-simplified.test.ts} +3 -3
  537. package/src/rbac/{__tests__/rbac-functions.test.ts → rbac-functions.test.ts} +57 -0
  538. package/src/rbac/{__tests__/rbac-role-isolation.test.ts → rbac-role-isolation.test.ts} +2 -2
  539. package/src/rbac/request-deduplication.test.ts +14 -9
  540. package/src/rbac/request-deduplication.ts +5 -4
  541. package/src/rbac/{__tests__/scenarios.user-role.test.tsx → scenarios.user-role.test.tsx} +23 -23
  542. package/src/rbac/secureClient.test.ts +514 -83
  543. package/src/rbac/secureClient.ts +8 -2
  544. package/src/rbac/security.test.ts +323 -0
  545. package/src/rbac/types/roleManagement.ts +66 -0
  546. package/src/rbac/utils/{__tests__/clientSecurity.test.ts → clientSecurity.test.ts} +4 -4
  547. package/src/rbac/utils/{__tests__/contextValidator.test.ts → contextValidator.test.ts} +4 -4
  548. package/src/rbac/utils/contextValidator.ts +5 -1
  549. package/src/rbac/utils/{__tests__/deep-equal.test.ts → deep-equal.test.ts} +1 -1
  550. package/src/rbac/utils/{__tests__/eventContext.test.ts → eventContext.test.ts} +36 -21
  551. package/src/rbac/utils/eventContext.ts +37 -33
  552. package/src/rbac/utils/fetchPermissionMap.ts +13 -0
  553. package/src/rbac/utils/permissionMapHelpers.ts +34 -0
  554. package/src/rbac/utils/roleManagementRpc.ts +303 -0
  555. package/src/services/{__tests__/AuthService.edge-cases.test.ts → AuthService.edge-cases.test.ts} +19 -19
  556. package/src/services/{__tests__/AuthService.restoreSession.test.ts → AuthService.restoreSession.test.ts} +2 -2
  557. package/src/services/{__tests__/AuthService.test.ts → AuthService.test.ts} +89 -55
  558. package/src/services/AuthService.ts +184 -205
  559. package/src/services/{__tests__/BaseService.edge-cases.test.ts → BaseService.edge-cases.test.ts} +3 -3
  560. package/src/services/{__tests__/BaseService.test.ts → BaseService.test.ts} +2 -2
  561. package/src/services/{__tests__/EventService.edge-cases.test.ts → EventService.edge-cases.test.ts} +27 -24
  562. package/src/services/{__tests__/EventService.eventColours.test.ts → EventService.eventColours.test.ts} +1 -1
  563. package/src/services/{__tests__/EventService.test.ts → EventService.test.ts} +256 -24
  564. package/src/services/EventService.ts +242 -312
  565. package/src/services/{__tests__/InactivityService.edge-cases.test.ts → InactivityService.edge-cases.test.ts} +3 -3
  566. package/src/services/{__tests__/InactivityService.lifecycle.test.ts → InactivityService.lifecycle.test.ts} +2 -2
  567. package/src/services/{__tests__/InactivityService.test.ts → InactivityService.test.ts} +179 -4
  568. package/src/services/InactivityService.ts +172 -213
  569. package/src/services/{__tests__/OrganisationService.edge-cases.test.ts → OrganisationService.edge-cases.test.ts} +5 -5
  570. package/src/services/{__tests__/OrganisationService.pagination.test.ts → OrganisationService.pagination.test.ts} +4 -4
  571. package/src/services/{__tests__/OrganisationService.test.ts → OrganisationService.test.ts} +410 -7
  572. package/src/services/OrganisationService.ts +184 -238
  573. package/src/services/base/BaseService.test.ts +1 -1
  574. package/src/services/interfaces/{__tests__/IAuthService.test.ts → IAuthService.test.ts} +21 -27
  575. package/src/services/interfaces/IAuthService.ts +10 -9
  576. package/src/services/interfaces/{__tests__/IEventService.test.ts → IEventService.test.ts} +4 -4
  577. package/src/services/interfaces/{__tests__/IInactivityService.test.ts → IInactivityService.test.ts} +3 -3
  578. package/src/services/interfaces/{__tests__/IOrganisationService.test.ts → IOrganisationService.test.ts} +3 -3
  579. package/src/styles/core.css +243 -12
  580. package/src/theming/{__tests__/parseEventColours.test.ts → parseEventColours.test.ts} +1 -1
  581. package/src/theming/{__tests__/runtime.test.ts → runtime.test.ts} +8 -17
  582. package/src/theming/runtime.ts +71 -2
  583. package/src/types/api-result.ts +53 -0
  584. package/src/types/{__tests__/core.test.ts → core.test.ts} +2 -2
  585. package/src/types/{__tests__/database-generated.test.ts → database-generated.test.ts} +3 -3
  586. package/src/types/database.generated.ts +45 -10
  587. package/src/types/event.ts +38 -18
  588. package/src/types/{__tests__/file-reference.test.ts → file-reference.test.ts} +13 -13
  589. package/src/types/file-reference.ts +37 -12
  590. package/src/types/{__tests__/guards.test.ts → guards.test.ts} +2 -2
  591. package/src/types/{__tests__/index.test.ts → index.test.ts} +2 -2
  592. package/src/types/index.ts +3 -0
  593. package/src/types/{__tests__/organisation.roles.test.ts → organisation.roles.test.ts} +1 -1
  594. package/src/types/{__tests__/organisation.test.ts → organisation.test.ts} +3 -31
  595. package/src/types/organisation.ts +15 -15
  596. package/src/types/supabase.ts +13 -4
  597. package/src/types/{__tests__/theme.test.ts → theme.test.ts} +1 -1
  598. package/src/types/{__tests__/type-validation.test.ts → type-validation.test.ts} +1 -1
  599. package/src/types/{__tests__/validation.test.ts → validation.test.ts} +2 -2
  600. package/src/utils/app/appIdResolver.test.ts +98 -71
  601. package/src/utils/app/appIdResolver.ts +31 -20
  602. package/src/utils/{__tests__/appConfig.unit.test.ts → appConfig.unit.test.ts} +1 -1
  603. package/src/utils/{__tests__/audit.unit.test.ts → audit.unit.test.ts} +1 -1
  604. package/src/utils/{__tests__/auth-utils.unit.test.ts → auth-utils.unit.test.ts} +16 -17
  605. package/src/utils/{__tests__/bundleAnalysis.unit.test.ts → bundleAnalysis.unit.test.ts} +35 -35
  606. package/src/utils/{__tests__/cn.unit.test.ts → cn.unit.test.ts} +1 -1
  607. package/src/utils/context/organisationContext.test.ts +105 -91
  608. package/src/utils/context/organisationContext.ts +29 -40
  609. package/src/utils/core/{__tests__/cn.test.ts → cn.test.ts} +3 -3
  610. package/src/utils/core/{__tests__/debugLogger.test.ts → debugLogger.test.ts} +2 -2
  611. package/src/utils/core/{__tests__/logger.test.ts → logger.test.ts} +2 -2
  612. package/src/utils/core/mergeRefs.ts +24 -0
  613. package/src/utils/{__tests__/debugLogger.test.ts → debugLogger.test.ts} +1 -1
  614. package/src/utils/{__tests__/deviceFingerprint.unit.test.ts → deviceFingerprint.unit.test.ts} +1 -1
  615. package/src/utils/dynamic/createLazyComponent.tsx +9 -1
  616. package/src/utils/dynamic/{__tests__/dynamicUtils.test.ts → dynamicUtils.test.ts} +2 -2
  617. package/src/utils/dynamic/{__tests__/lazyLoad.test.tsx → lazyLoad.test.tsx} +2 -2
  618. package/src/utils/{__tests__/dynamicUtils.unit.test.ts → dynamicUtils.unit.test.ts} +1 -1
  619. package/src/utils/file-reference/{__tests__/file-reference.test.ts → file-reference.test.ts} +214 -289
  620. package/src/utils/file-reference/index.ts +330 -347
  621. package/src/utils/{__tests__/formatDate.unit.test.ts → formatDate.unit.test.ts} +2 -2
  622. package/src/utils/formatting/formatDateTimeTimezone.test.ts +1 -1
  623. package/src/utils/formatting/formatNumber.test.ts +1 -1
  624. package/src/utils/{__tests__/formatting.unit.test.ts → formatting.unit.test.ts} +1 -1
  625. package/src/utils/google-places/googlePlacesUtils.test.ts +70 -48
  626. package/src/utils/google-places/googlePlacesUtils.ts +67 -99
  627. package/src/utils/google-places/loadGoogleMapsScript.test.ts +25 -22
  628. package/src/utils/google-places/loadGoogleMapsScript.ts +138 -117
  629. package/src/utils/{__tests__/index.unit.test.ts → index.unit.test.ts} +1 -1
  630. package/src/utils/{__tests__/lazyLoad.unit.test.tsx → lazyLoad.unit.test.tsx} +13 -14
  631. package/src/utils/location/location.test.ts +1 -1
  632. package/src/utils/{__tests__/logger.unit.test.ts → logger.unit.test.ts} +1 -1
  633. package/src/utils/{__tests__/organisationContext.unit.test.ts → organisationContext.unit.test.ts} +37 -48
  634. package/src/utils/performance/{__tests__/bundleAnalysis.test.ts → bundleAnalysis.test.ts} +2 -2
  635. package/src/utils/performance/{__tests__/performanceBenchmark.test.ts → performanceBenchmark.test.ts} +2 -2
  636. package/src/utils/performance/{__tests__/performanceBudgets.test.ts → performanceBudgets.test.ts} +2 -2
  637. package/src/utils/{__tests__/performanceBenchmark.test.ts → performanceBenchmark.test.ts} +2 -2
  638. package/src/utils/{__tests__/performanceBudgets.unit.test.ts → performanceBudgets.unit.test.ts} +2 -2
  639. package/src/utils/{__tests__/permissionTypes.unit.test.ts → permissionTypes.unit.test.ts} +1 -1
  640. package/src/utils/{__tests__/permissionUtils.unit.test.ts → permissionUtils.unit.test.ts} +1 -1
  641. package/src/utils/permissions/{__tests__/permissionTypes.test.ts → permissionTypes.test.ts} +2 -2
  642. package/src/utils/persistence/{__tests__/keyDerivation.test.ts → keyDerivation.test.ts} +2 -2
  643. package/src/utils/persistence/{__tests__/sensitiveFieldDetection.test.ts → sensitiveFieldDetection.test.ts} +2 -2
  644. package/src/utils/{__tests__/request-deduplication.test.ts → request-deduplication.test.ts} +2 -2
  645. package/src/utils/{__tests__/sanitization.unit.test.ts → sanitization.unit.test.ts} +1 -1
  646. package/src/utils/{__tests__/schemaUtils.unit.test.ts → schemaUtils.unit.test.ts} +1 -1
  647. package/src/utils/{__tests__/secureDataAccess.unit.test.ts → secureDataAccess.unit.test.ts} +2 -2
  648. package/src/utils/{__tests__/secureErrors.unit.test.ts → secureErrors.unit.test.ts} +4 -4
  649. package/src/utils/{__tests__/secureStorage.unit.test.ts → secureStorage.unit.test.ts} +1 -1
  650. package/src/utils/security/auth-utils.ts +34 -23
  651. package/src/utils/security/secureDataAccess.ts +241 -281
  652. package/src/utils/security/secureErrors.test.ts +1 -1
  653. package/src/utils/security/secureStorage.test.ts +1 -1
  654. package/src/utils/security/security.test.ts +25 -17
  655. package/src/utils/security/security.ts +15 -18
  656. package/src/utils/security/securityMonitor.test.ts +1 -1
  657. package/src/utils/{__tests__/security.unit.test.ts → security.unit.test.ts} +21 -15
  658. package/src/utils/{__tests__/securityMonitor.unit.test.ts → securityMonitor.unit.test.ts} +1 -1
  659. package/src/utils/{__tests__/sessionTracking.unit.test.ts → sessionTracking.unit.test.ts} +12 -12
  660. package/src/utils/storage/{__tests__/config.unit.test.ts → config.unit.test.ts} +2 -2
  661. package/src/utils/storage/helpers.test.ts +88 -102
  662. package/src/utils/storage/helpers.ts +173 -251
  663. package/src/utils/storage/{__tests__/index.unit.test.ts → index.unit.test.ts} +3 -3
  664. package/src/utils/storage/types.ts +7 -0
  665. package/src/utils/supabase/createBaseClient.test.ts +1 -1
  666. package/src/utils/timezone/timezone.test.ts +1 -1
  667. package/src/utils/{__tests__/timezone.test.ts → timezone.test.ts} +2 -2
  668. package/src/utils/validation/{__tests__/common.test.ts → common.test.ts} +2 -2
  669. package/src/utils/validation/{__tests__/csrf.test.ts → csrf.test.ts} +56 -28
  670. package/src/utils/validation/csrf.ts +42 -41
  671. package/src/utils/validation/{__tests__/htmlSanitization.unit.test.ts → htmlSanitization.unit.test.ts} +2 -2
  672. package/src/utils/validation/{__tests__/passwordSchema.test.ts → passwordSchema.test.ts} +2 -2
  673. package/src/utils/validation/{__tests__/schema.test.ts → schema.test.ts} +2 -2
  674. package/src/utils/validation/{__tests__/sqlInjectionProtection.test.ts → sqlInjectionProtection.test.ts} +2 -2
  675. package/src/utils/validation/{__tests__/user.test.ts → user.test.ts} +2 -2
  676. package/src/utils/validation/{__tests__/validation.test.ts → validation.test.ts} +2 -2
  677. package/src/utils/validation/{__tests__/validationUtils.test.ts → validationUtils.test.ts} +2 -2
  678. package/src/utils/{__tests__/validation.unit.test.ts → validation.unit.test.ts} +1 -1
  679. package/src/utils/{__tests__/validationUtils.unit.test.ts → validationUtils.unit.test.ts} +5 -2
  680. package/dist/UnifiedAuthProvider-BBD2PS3Q.js +0 -7
  681. package/dist/chunk-KPYQWGFQ.js +0 -183
  682. package/dist/types-D05dCGma.d.ts +0 -521
  683. package/scripts/eslint-audit.cjs +0 -222
  684. package/scripts/generate-docs.js +0 -157
  685. package/scripts/install-cursor-rules.cjs +0 -255
  686. package/scripts/install-eslint-config.cjs +0 -349
  687. package/scripts/setup-build-cache.js +0 -73
  688. package/scripts/validate-pre-publish.js +0 -145
  689. package/src/__tests__/integration/UserProfile.test.tsx +0 -124
  690. package/src/__tests__/public-recipe-view.test.ts +0 -228
  691. package/src/__tests__/rls-policies.test.ts +0 -472
  692. package/src/components/DataTable/__tests__/DataTable.test.tsx +0 -876
  693. package/src/components/DataTable/components/DataTableLayout.tsx +0 -584
  694. package/src/components/DataTable/components/UnifiedTableBody.tsx +0 -395
  695. package/src/components/DataTable/components/__tests__/DataTableLayout.test.tsx +0 -467
  696. package/src/components/DataTable/components/__tests__/DataTableModals.test.tsx +0 -358
  697. package/src/components/DataTable/components/__tests__/ImportModal.test.tsx +0 -957
  698. package/src/components/DataTable/core/ActionManager.ts +0 -235
  699. package/src/components/DataTable/core/ColumnManager.ts +0 -204
  700. package/src/components/DataTable/core/DataManager.ts +0 -190
  701. package/src/components/DataTable/core/LocalDataAdapter.ts +0 -274
  702. package/src/components/DataTable/core/PluginRegistry.ts +0 -229
  703. package/src/components/DataTable/core/StateManager.ts +0 -312
  704. package/src/components/DataTable/core/__tests__/ActionManager.test.ts +0 -235
  705. package/src/components/DataTable/core/__tests__/ColumnManager.test.ts +0 -141
  706. package/src/components/DataTable/core/__tests__/DataManager.test.ts +0 -178
  707. package/src/components/DataTable/core/__tests__/LocalDataAdapter.test.ts +0 -133
  708. package/src/components/DataTable/core/__tests__/PluginRegistry.test.ts +0 -142
  709. package/src/components/DataTable/core/__tests__/StateManager.test.ts +0 -158
  710. package/src/components/DataTable/core/interfaces.ts +0 -338
  711. package/src/components/DataTable/types.ts +0 -764
  712. package/src/hooks/public/usePublicFileDisplay.ts +0 -534
  713. package/src/hooks/useFileDisplay.ts +0 -748
  714. package/src/providers/OrganisationProvider.test.tsx +0 -40
  715. package/src/providers/OrganisationProvider.tsx +0 -92
  716. package/src/providers/__tests__/InactivityProvider.test-helper.tsx +0 -65
  717. package/src/providers/__tests__/OrganisationProvider.test.tsx +0 -616
  718. package/src/providers/__tests__/OrganisationProvider.wrapper.test.tsx +0 -591
  719. package/src/rbac/__tests__/cache-invalidation.test.ts +0 -393
  720. /package/src/components/DataTable/{components/__tests__ → ui}/COVERAGE_NOTE.md +0 -0
  721. /package/src/components/DataTable/utils/{__tests__/COVERAGE_NOTE.md → COVERAGE_NOTE.md} +0 -0
  722. /package/src/hooks/{__tests__/useApiFetch.unit.test.ts → useApiFetch.unit.test.ts} +0 -0
  723. /package/src/providers/{__tests__/README.md → README.md} +0 -0
  724. /package/src/rbac/{__tests__/index.test.ts → index.test.ts} +0 -0
  725. /package/src/rbac/{__tests__/rbac-integration.test.ts → rbac-integration.test.ts} +0 -0
  726. /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, e as FileUploadResult, U as UploadProgress, c as FileUploadOptions, a as FileReference } from './file-reference-BavO2eQj.js';
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 { c as DataRecord, D as DataTableColumn, j as DataTableRBACConfig, h as DataTableFeatureConfig, H as HierarchicalConfig, P as PerformanceConfig, S as ServerSideConfig, e as PaginationMode, C as ChunkingConfig, d as SearchIndexConfig, i as ExportOptions, G as GetRowId, E as EmptyStateConfig, A as AggregateConfig, a as DataTableAction } from './types-D05dCGma.js';
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, E as Event } from './event-WTAQuGcq.js';
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<HTMLElement>>;
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[]) => void | Promise<void>;
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
- * A flexible navigation menu component that supports both dropdown and hierarchical modes.
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' } // No href for actions
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 flexible footer component for application layouts with copyright information,
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
- * Props for the PaceAppLayout component.
3095
- * Configures the application layout including navigation, header, and footer.
3096
- */
3097
- interface PaceAppLayoutProps {
3098
- /** The name of the application to be displayed in the header. */
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
- /** Enable layout-level permission enforcement */
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
- /** Enable role-based routing (default: false) */
3213
+ }
3214
+ /** Routing props for PaceAppLayout (ISP). */
3215
+ interface PaceAppLayoutPropsRouting {
3216
+ routingConfig?: PaceAppLayoutRoutingConfig;
3141
3217
  roleBasedRouting?: boolean;
3142
- /** Route configuration for role-based routing */
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 | true | 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;
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
- * Props for the FileUpload component.
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
- * Return value of the useFileReference hook.
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
- clearError: () => void;
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, NavigationMenu 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, Form as aH, FormField as aI, type FormProps as aJ, type FormFieldProps as aK, LoginForm as aL, type LoginFormProps as aM, Header as aN, Footer as aO, type FooterProps as aP, PublicPageLayout as aQ, PublicPageHeader as aR, PublicPageFooter as aS, PublicPageProvider as aT, usePublicPageContext as aU, useIsPublicPage as aV, type PublicPageLayoutProps as aW, type PublicPageHeaderProps as aX, type PublicPageFooterProps as aY, ProtectedRoute as aZ, type ProtectedRouteProps 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, ContextSelector as b0, type ContextSelectorProps as b1, UserMenu as b2, ErrorBoundary as b3, ErrorBoundaryProvider as b4, type ErrorBoundaryProps as b5, type ErrorBoundaryState as b6, type ErrorBoundaryProviderProps as b7, type GlobalErrorHandler as b8, LoadingSpinner as b9, SessionRestorationLoader as ba, type SessionRestorationLoaderProps as bb, FileUpload as bc, type FileUploadProps as bd, FileDisplay as be, type FileDisplayProps as bf, useFileReference as bg, useFileReferenceForRecord as bh, useFileReferenceById as bi, useFilesByCategory as bj, type UseFileReferenceOptions as bk, type UseFileReferenceReturn as bl, type UseFileReferenceForRecordReturn as bm, type PaceAppLayoutProps as bn, PaceAppLayout as bo, type PaceLoginPageProps as bp, PaceLoginPage as bq, type UserMenuProps as br, PasswordChangeForm as bs, 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 };
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 };