@jmruthers/pace-core 0.4.1 → 0.5.1

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 (601) hide show
  1. package/CHANGELOG.md +26 -1
  2. package/README.md +231 -229
  3. package/dist/{DataTable-2LB6HI6V.js → DataTable-GX3XERFJ.js} +14 -17
  4. package/dist/{DataTable-BDBqkU-i.d.ts → DataTable-ltTFXHS3.d.ts} +25 -51
  5. package/dist/{Table-CIm9IWqk.d.ts → PublicLoadingSpinner-DztrzuJr.d.ts} +635 -122
  6. package/dist/UnifiedAuthProvider-w66zSCUf.d.ts +160 -0
  7. package/dist/{api-AIJ3IJX3.js → api-ETQ6YJ3C.js} +6 -4
  8. package/dist/{appConfig-fB1pP_v3.d.ts → appConfig-BVGyuvI7.d.ts} +1 -1
  9. package/dist/appNameResolver-7GHF5ED2.js +22 -0
  10. package/dist/{audit-PD5L5ZSC.js → audit-BUW3LMJB.js} +3 -3
  11. package/dist/chunk-5EL3KHOQ.js +388 -0
  12. package/dist/chunk-5EL3KHOQ.js.map +1 -0
  13. package/dist/{chunk-4MCJAK7J.js → chunk-6CR3MRZN.js} +1827 -4886
  14. package/dist/chunk-6CR3MRZN.js.map +1 -0
  15. package/dist/{chunk-YNU5QJ4S.js → chunk-7BNPOCLL.js} +22 -5
  16. package/dist/chunk-7BNPOCLL.js.map +1 -0
  17. package/dist/chunk-AUE24LVR.js +268 -0
  18. package/dist/chunk-AUE24LVR.js.map +1 -0
  19. package/dist/chunk-C5G2A4PO.js +1349 -0
  20. package/dist/chunk-C5G2A4PO.js.map +1 -0
  21. package/dist/{chunk-4ZTIEYU2.js → chunk-CDQ3PX7L.js} +1 -1
  22. package/dist/chunk-CDQ3PX7L.js.map +1 -0
  23. package/dist/chunk-COBPIXXQ.js +379 -0
  24. package/dist/chunk-COBPIXXQ.js.map +1 -0
  25. package/dist/chunk-GSNM5D6H.js +5441 -0
  26. package/dist/chunk-GSNM5D6H.js.map +1 -0
  27. package/dist/chunk-MZBUOP4P.js +119 -0
  28. package/dist/chunk-MZBUOP4P.js.map +1 -0
  29. package/dist/chunk-N2EUGZRW.js +98 -0
  30. package/dist/chunk-N2EUGZRW.js.map +1 -0
  31. package/dist/chunk-NQ4TOOO6.js +20 -0
  32. package/dist/chunk-NQ4TOOO6.js.map +1 -0
  33. package/dist/{chunk-KK6WIDK6.js → chunk-OEGRKULD.js} +12 -2
  34. package/dist/{chunk-KK6WIDK6.js.map → chunk-OEGRKULD.js.map} +1 -1
  35. package/dist/chunk-OYRY44Q2.js +62 -0
  36. package/dist/chunk-OYRY44Q2.js.map +1 -0
  37. package/dist/{chunk-DC5AMYBS.js → chunk-PLDDJCW6.js} +15 -5
  38. package/dist/chunk-PLDDJCW6.js.map +1 -0
  39. package/dist/{chunk-WHLSWC6W.js → chunk-SS3E6QLB.js} +16 -61
  40. package/dist/chunk-SS3E6QLB.js.map +1 -0
  41. package/dist/chunk-T3XIA4AJ.js +3295 -0
  42. package/dist/chunk-T3XIA4AJ.js.map +1 -0
  43. package/dist/{chunk-H4PZ4B3Y.js → chunk-TGDCLPP2.js} +129 -28
  44. package/dist/chunk-TGDCLPP2.js.map +1 -0
  45. package/dist/{chunk-IOX76PSM.js → chunk-U6JDHVC2.js} +273 -29
  46. package/dist/chunk-U6JDHVC2.js.map +1 -0
  47. package/dist/{chunk-JUUNUW3O.js → chunk-XJK2J4N6.js} +17 -6
  48. package/dist/chunk-XJK2J4N6.js.map +1 -0
  49. package/dist/chunk-YDJW5XTN.js +84 -0
  50. package/dist/chunk-YDJW5XTN.js.map +1 -0
  51. package/dist/components.d.ts +906 -10
  52. package/dist/components.js +3263 -84
  53. package/dist/components.js.map +1 -1
  54. package/dist/{database-CAMsquLm.d.ts → database-C3Szpi5J.d.ts} +28 -11
  55. package/dist/hooks.d.ts +7 -6
  56. package/dist/hooks.js +35 -11
  57. package/dist/hooks.js.map +1 -1
  58. package/dist/index.d.ts +245 -111
  59. package/dist/index.js +195 -185
  60. package/dist/index.js.map +1 -1
  61. package/dist/{organisation-DLNNQhPB.d.ts → organisation-CO3Sh3_D.d.ts} +1 -1
  62. package/dist/providers.d.ts +4 -4
  63. package/dist/providers.js +21 -6
  64. package/dist/rbac/index.d.ts +862 -806
  65. package/dist/rbac/index.js +953 -1032
  66. package/dist/rbac/index.js.map +1 -1
  67. package/dist/styles/core.css +422 -0
  68. package/dist/styles/fonts/georama-italic.woff2 +0 -0
  69. package/dist/styles/fonts/georama.woff2 +0 -0
  70. package/dist/styles/fonts/open-sans-italic.woff2 +0 -0
  71. package/dist/styles/fonts/open-sans.woff2 +0 -0
  72. package/dist/styles/fonts/reddit-mono.woff2 +0 -0
  73. package/dist/styles/index.d.ts +36 -0
  74. package/dist/styles/index.js +24 -0
  75. package/dist/styles/index.js.map +1 -0
  76. package/dist/theming/runtime.d.ts +73 -0
  77. package/dist/theming/runtime.js +16 -0
  78. package/dist/theming/runtime.js.map +1 -0
  79. package/dist/{types-Bavn44NW.d.ts → types-BRDU7N6w.d.ts} +79 -33
  80. package/dist/types.d.ts +5 -5
  81. package/dist/types.js +7 -2
  82. package/dist/types.js.map +1 -1
  83. package/dist/{unified-BtRpPbmp.d.ts → unified-CM7T0aTK.d.ts} +1 -2
  84. package/dist/usePublicRouteParams-B6i0KtXW.d.ts +477 -0
  85. package/dist/utils.d.ts +83 -60
  86. package/dist/utils.js +301 -55657
  87. package/dist/utils.js.map +1 -1
  88. package/dist/validation.d.ts +1 -1
  89. package/dist/validation.js +1 -1
  90. package/docs/INDEX.md +192 -0
  91. package/docs/README.md +46 -32
  92. package/docs/api/README.md +231 -229
  93. package/docs/api/classes/ErrorBoundary.md +1 -1
  94. package/docs/api/classes/PublicErrorBoundary.md +132 -0
  95. package/docs/api/interfaces/AggregateConfig.md +4 -4
  96. package/docs/api/interfaces/ButtonProps.md +2 -2
  97. package/docs/api/interfaces/CardProps.md +2 -2
  98. package/docs/api/interfaces/ColorPalette.md +1 -1
  99. package/docs/api/interfaces/ColorShade.md +1 -1
  100. package/docs/api/interfaces/DataTableAction.md +98 -7
  101. package/docs/api/interfaces/DataTableColumn.md +131 -12
  102. package/docs/api/interfaces/DataTableProps.md +77 -274
  103. package/docs/api/interfaces/DataTableToolbarButton.md +7 -7
  104. package/docs/api/interfaces/EmptyStateConfig.md +5 -5
  105. package/docs/api/interfaces/EventContextType.md +7 -7
  106. package/docs/api/interfaces/EventLogoProps.md +152 -0
  107. package/docs/api/interfaces/EventProviderProps.md +2 -2
  108. package/docs/api/interfaces/FileSizeLimits.md +7 -0
  109. package/docs/api/interfaces/FileUploadProps.md +154 -0
  110. package/docs/api/interfaces/FooterProps.md +1 -1
  111. package/docs/api/interfaces/InactivityWarningModalProps.md +115 -0
  112. package/docs/api/interfaces/InputProps.md +2 -2
  113. package/docs/api/interfaces/LabelProps.md +1 -1
  114. package/docs/api/interfaces/LoginFormProps.md +1 -1
  115. package/docs/api/interfaces/NavigationItem.md +1 -1
  116. package/docs/api/interfaces/NavigationMenuProps.md +1 -1
  117. package/docs/api/interfaces/Organisation.md +1 -1
  118. package/docs/api/interfaces/OrganisationContextType.md +1 -1
  119. package/docs/api/interfaces/OrganisationMembership.md +2 -2
  120. package/docs/api/interfaces/OrganisationProviderProps.md +1 -1
  121. package/docs/api/interfaces/OrganisationSecurityError.md +1 -1
  122. package/docs/api/interfaces/PaceAppLayoutProps.md +26 -26
  123. package/docs/api/interfaces/PaceLoginPageProps.md +1 -1
  124. package/docs/api/interfaces/PaletteData.md +1 -1
  125. package/docs/api/interfaces/PublicErrorBoundaryProps.md +94 -0
  126. package/docs/api/interfaces/PublicErrorBoundaryState.md +68 -0
  127. package/docs/api/interfaces/PublicLoadingSpinnerProps.md +86 -0
  128. package/docs/api/interfaces/PublicPageFooterProps.md +112 -0
  129. package/docs/api/interfaces/PublicPageHeaderProps.md +138 -0
  130. package/docs/api/interfaces/PublicPageLayoutProps.md +138 -0
  131. package/docs/api/interfaces/StorageConfig.md +41 -0
  132. package/docs/api/interfaces/StorageFileInfo.md +74 -0
  133. package/docs/api/interfaces/StorageFileMetadata.md +140 -0
  134. package/docs/api/interfaces/StorageListOptions.md +86 -0
  135. package/docs/api/interfaces/StorageListResult.md +41 -0
  136. package/docs/api/interfaces/StorageUploadOptions.md +88 -0
  137. package/docs/api/interfaces/StorageUploadResult.md +63 -0
  138. package/docs/api/interfaces/StorageUrlOptions.md +47 -0
  139. package/docs/api/interfaces/StyleImport.md +2 -2
  140. package/docs/api/interfaces/ToastActionElement.md +1 -1
  141. package/docs/api/interfaces/ToastProps.md +1 -1
  142. package/docs/api/interfaces/UnifiedAuthContextType.md +447 -46
  143. package/docs/api/interfaces/UnifiedAuthProviderProps.md +95 -9
  144. package/docs/api/interfaces/UseInactivityTrackerOptions.md +136 -0
  145. package/docs/api/interfaces/UseInactivityTrackerReturn.md +123 -0
  146. package/docs/api/interfaces/UsePublicEventLogoOptions.md +87 -0
  147. package/docs/api/interfaces/UsePublicEventLogoReturn.md +81 -0
  148. package/docs/api/interfaces/UsePublicEventOptions.md +34 -0
  149. package/docs/api/interfaces/UsePublicEventReturn.md +68 -0
  150. package/docs/api/interfaces/UsePublicRouteParamsReturn.md +94 -0
  151. package/docs/api/interfaces/UserEventAccess.md +14 -14
  152. package/docs/api/interfaces/UserMenuProps.md +6 -6
  153. package/docs/api/interfaces/UserProfile.md +1 -1
  154. package/docs/api/modules.md +1626 -768
  155. package/docs/api-reference/components.md +761 -43
  156. package/docs/api-reference/hooks.md +126 -0
  157. package/docs/api-reference/providers.md +141 -65
  158. package/docs/api-reference/types.md +66 -36
  159. package/docs/api-reference/utilities.md +1 -1
  160. package/docs/architecture/README.md +1 -2
  161. package/docs/best-practices/README.md +400 -0
  162. package/docs/consuming-app-example.md +42 -96
  163. package/docs/consuming-app-vite-config.md +233 -0
  164. package/docs/core-concepts/events.md +3 -3
  165. package/docs/core-concepts/organisations.md +0 -1
  166. package/docs/core-concepts/rbac-system.md +23 -10
  167. package/docs/documentation-style-checklist.md +8 -2
  168. package/docs/examples/navigation-menu-auth-fix.md +344 -0
  169. package/docs/getting-started/examples/README.md +15 -1
  170. package/docs/getting-started/examples/basic-auth-app.md +444 -119
  171. package/docs/getting-started/examples/full-featured-app.md +6 -6
  172. package/docs/getting-started/installation.md +231 -52
  173. package/docs/getting-started/quick-start.md +121 -24
  174. package/docs/implementation-guides/app-layout.md +133 -108
  175. package/docs/implementation-guides/data-tables.md +1011 -29
  176. package/docs/implementation-guides/forms.md +3 -3
  177. package/docs/implementation-guides/hierarchical-datatable.md +850 -0
  178. package/docs/implementation-guides/large-datasets.md +2 -2
  179. package/docs/implementation-guides/navigation.md +1 -1
  180. package/docs/implementation-guides/permission-enforcement.md +4 -4
  181. package/docs/implementation-guides/public-pages.md +752 -0
  182. package/docs/migration/README.md +18 -8
  183. package/docs/migration/quick-migration-guide.md +320 -0
  184. package/docs/migration/rbac-migration.md +50 -0
  185. package/docs/migration/v0.4.15-tailwind-scanning.md +272 -0
  186. package/docs/migration/v0.4.16-css-first-approach.md +306 -0
  187. package/docs/migration/v0.4.17-source-path-fix.md +229 -0
  188. package/docs/migration-guide.md +51 -104
  189. package/docs/performance/README.md +1 -4
  190. package/docs/print-components/README.md +258 -0
  191. package/docs/print-components/api-reference.md +636 -0
  192. package/docs/print-components/examples/README.md +204 -0
  193. package/docs/print-components/examples/basic-report.tsx +92 -0
  194. package/docs/print-components/examples/card-catalog.tsx +149 -0
  195. package/docs/print-components/examples/cover-page-report.tsx +163 -0
  196. package/docs/print-components/quick-start.md +363 -0
  197. package/docs/quick-reference.md +53 -36
  198. package/docs/rbac/README.md +136 -69
  199. package/docs/rbac/api-reference.md +39 -8
  200. package/docs/rbac/examples.md +237 -66
  201. package/docs/rbac/getting-started.md +131 -16
  202. package/docs/rbac/quick-start.md +499 -323
  203. package/docs/rbac/troubleshooting.md +240 -262
  204. package/docs/security/README.md +50 -1
  205. package/docs/styles/README.md +143 -117
  206. package/docs/testing/README.md +6 -10
  207. package/docs/troubleshooting/README.md +497 -0
  208. package/docs/troubleshooting/common-issues.md +604 -14
  209. package/docs/troubleshooting/styling-issues.md +219 -0
  210. package/docs/troubleshooting/tailwind-content-scanning.md +213 -0
  211. package/docs/usage.md +28 -90
  212. package/docs/visual-testing.md +0 -7
  213. package/package.json +46 -24
  214. package/src/__mocks__/lucide-react.ts +181 -0
  215. package/src/__tests__/REBUILD_PLAN.md +223 -0
  216. package/src/__tests__/TESTING_GUIDELINES.md +341 -0
  217. package/src/__tests__/fixtures/mocks.ts +93 -0
  218. package/src/__tests__/helpers/component-test-utils.tsx +145 -0
  219. package/src/__tests__/helpers/test-utils.tsx +117 -0
  220. package/src/__tests__/integration/UserProfile.test.tsx +128 -0
  221. package/src/__tests__/setup.ts +71 -0
  222. package/src/__tests__/templates/accessibility.test.template.tsx +279 -0
  223. package/src/__tests__/templates/component.test.template.tsx +144 -0
  224. package/src/__tests__/templates/hook.test.template.ts +173 -0
  225. package/src/__tests__/templates/integration.test.template.tsx +199 -0
  226. package/src/__tests__/types/test.types.ts +106 -0
  227. package/src/components/Alert/Alert.test.tsx +496 -0
  228. package/src/components/Alert/Alert.tsx +134 -0
  229. package/src/components/Alert/index.ts +2 -0
  230. package/src/components/Avatar/Avatar.test.tsx +484 -0
  231. package/src/components/Avatar/Avatar.tsx +84 -0
  232. package/src/components/Avatar/index.ts +2 -0
  233. package/src/components/Button/Button.test.tsx +662 -0
  234. package/src/components/Button/Button.tsx +270 -0
  235. package/src/components/Button/index.ts +2 -0
  236. package/src/components/Card/Card.test.tsx +593 -0
  237. package/src/components/Card/Card.tsx +271 -0
  238. package/src/components/Card/index.ts +1 -0
  239. package/src/components/Checkbox/Checkbox.test.tsx +461 -0
  240. package/src/components/Checkbox/Checkbox.tsx +75 -0
  241. package/src/components/Checkbox/__mocks__/Checkbox.tsx +2 -0
  242. package/src/components/Checkbox/index.ts +2 -0
  243. package/src/components/DataTable/DataTable.tsx +446 -0
  244. package/src/components/DataTable/__tests__/README.md +145 -0
  245. package/src/components/DataTable/__tests__/mocks/MockRBACProvider.tsx +66 -0
  246. package/src/components/DataTable/__tests__/test-utils/dataFactories.ts +103 -0
  247. package/src/components/DataTable/__tests__/test-utils/sharedTestUtils.tsx +381 -0
  248. package/src/components/DataTable/__tests__/test-utils.ts +94 -0
  249. package/src/components/DataTable/components/AccessDeniedPage.tsx +168 -0
  250. package/src/components/DataTable/components/ActionButtons.tsx +194 -0
  251. package/src/components/DataTable/components/BulkOperationsDropdown.tsx +160 -0
  252. package/src/components/DataTable/components/ColumnFilter.tsx +114 -0
  253. package/src/components/DataTable/components/ColumnVisibilityDropdown.tsx +100 -0
  254. package/src/components/DataTable/components/DataTableBody.tsx +461 -0
  255. package/src/components/DataTable/components/DataTableCore.tsx +1027 -0
  256. package/src/components/DataTable/components/DataTableErrorBoundary.tsx +214 -0
  257. package/src/components/DataTable/components/DataTableModals.tsx +87 -0
  258. package/src/components/DataTable/components/DataTableToolbar.tsx +262 -0
  259. package/src/components/DataTable/components/DraggableColumnHeader.tsx +144 -0
  260. package/src/components/DataTable/components/EditableRow.tsx +159 -0
  261. package/src/components/DataTable/components/EmptyState.tsx +64 -0
  262. package/src/components/DataTable/components/ExpandButton.tsx +113 -0
  263. package/src/components/DataTable/components/FilterRow.tsx +100 -0
  264. package/src/components/DataTable/components/GroupHeader.tsx +42 -0
  265. package/src/components/DataTable/components/GroupingDropdown.tsx +96 -0
  266. package/src/components/DataTable/components/ImportModal.tsx +345 -0
  267. package/src/components/DataTable/components/LoadingState.tsx +12 -0
  268. package/src/components/DataTable/components/PaginationControls.tsx +332 -0
  269. package/src/components/DataTable/components/UnifiedTableBody.tsx +742 -0
  270. package/src/components/DataTable/components/ViewRowModal.tsx +68 -0
  271. package/src/components/DataTable/components/VirtualizedDataTable.tsx +513 -0
  272. package/src/components/DataTable/components/index.ts +16 -0
  273. package/src/components/DataTable/context/DataTableContext.tsx +97 -0
  274. package/src/components/DataTable/core/ActionManager.ts +235 -0
  275. package/src/components/DataTable/core/ColumnFactory.ts +268 -0
  276. package/src/components/DataTable/core/ColumnManager.ts +205 -0
  277. package/src/components/DataTable/core/DataManager.ts +188 -0
  278. package/src/components/DataTable/core/DataTableContext.tsx +181 -0
  279. package/src/components/DataTable/core/LocalDataAdapter.ts +264 -0
  280. package/src/components/DataTable/core/PluginRegistry.ts +229 -0
  281. package/src/components/DataTable/core/StateManager.ts +311 -0
  282. package/src/components/DataTable/core/index.ts +8 -0
  283. package/src/components/DataTable/core/interfaces.ts +338 -0
  284. package/src/components/DataTable/examples/HierarchicalActionsExample.tsx +419 -0
  285. package/src/components/DataTable/examples/HierarchicalExample.tsx +475 -0
  286. package/src/components/DataTable/examples/InitialPageSizeExample.tsx +176 -0
  287. package/src/components/DataTable/examples/PerformanceExample.tsx +505 -0
  288. package/src/components/DataTable/hooks/useColumnOrderPersistence.ts +95 -0
  289. package/src/components/DataTable/hooks/useColumnReordering.ts +110 -0
  290. package/src/components/DataTable/hooks/useDataTableState.ts +325 -0
  291. package/src/components/DataTable/hooks/useHierarchicalState.ts +174 -0
  292. package/src/components/DataTable/index.ts +68 -0
  293. package/src/components/DataTable/styles.ts +171 -0
  294. package/src/components/DataTable/types.ts +511 -0
  295. package/src/components/DataTable/utils/debugTools.ts +583 -0
  296. package/src/components/DataTable/utils/errorHandling.ts +494 -0
  297. package/src/components/DataTable/utils/exportUtils.ts +126 -0
  298. package/src/components/DataTable/utils/flexibleImport.ts +510 -0
  299. package/src/components/DataTable/utils/hierarchicalSorting.ts +151 -0
  300. package/src/components/DataTable/utils/hierarchicalUtils.ts +218 -0
  301. package/src/components/DataTable/utils/index.ts +1 -0
  302. package/src/components/DataTable/utils/performanceUtils.ts +351 -0
  303. package/src/components/Dialog/Dialog.test.tsx +1139 -0
  304. package/src/components/Dialog/Dialog.tsx +782 -0
  305. package/src/components/Dialog/README.md +804 -0
  306. package/src/components/Dialog/examples/BasicHtmlTest.tsx +55 -0
  307. package/src/components/Dialog/examples/DebugHtmlExample.tsx +68 -0
  308. package/src/components/Dialog/examples/HtmlDialogExample.tsx +202 -0
  309. package/src/components/Dialog/examples/SimpleHtmlTest.tsx +61 -0
  310. package/src/components/Dialog/examples/SmartDialogExample.tsx +322 -0
  311. package/src/components/Dialog/index.ts +12 -0
  312. package/src/components/Dialog/utils/safeHtml.ts +185 -0
  313. package/src/components/ErrorBoundary/ErrorBoundary.test.tsx +752 -0
  314. package/src/components/ErrorBoundary/ErrorBoundary.tsx +312 -0
  315. package/src/components/ErrorBoundary/index.ts +8 -0
  316. package/src/components/EventSelector/EventSelector.tsx +360 -0
  317. package/src/components/EventSelector/index.ts +3 -0
  318. package/src/components/EventSelector/types.ts +79 -0
  319. package/src/components/FileUpload/FileUpload.example.tsx +218 -0
  320. package/src/components/FileUpload/FileUpload.test.tsx +665 -0
  321. package/src/components/FileUpload/FileUpload.tsx +237 -0
  322. package/src/components/FileUpload/index.ts +6 -0
  323. package/src/components/Footer/Footer.tsx +197 -0
  324. package/src/components/Footer/index.ts +17 -0
  325. package/src/components/Form/Form.tsx +166 -0
  326. package/src/components/Form/FormErrorSummary.tsx +113 -0
  327. package/src/components/Form/FormField.tsx +249 -0
  328. package/src/components/Form/FormFieldset.tsx +127 -0
  329. package/src/components/Form/FormLiveRegion.tsx +198 -0
  330. package/src/components/Form/index.ts +26 -0
  331. package/src/components/Header/Header.tsx +301 -0
  332. package/src/components/Header/index.ts +4 -0
  333. package/src/components/InactivityWarningModal/InactivityWarningModal.tsx +164 -0
  334. package/src/components/InactivityWarningModal/index.ts +9 -0
  335. package/src/components/Input/Input.tsx +201 -0
  336. package/src/components/Input/__mocks__/Input.tsx +2 -0
  337. package/src/components/Input/index.ts +9 -0
  338. package/src/components/Label/Label.tsx +186 -0
  339. package/src/components/Label/index.ts +2 -0
  340. package/src/components/LoadingSpinner/LoadingSpinner.tsx +98 -0
  341. package/src/components/LoadingSpinner/index.ts +3 -0
  342. package/src/components/LoginForm/LoginForm.tsx +273 -0
  343. package/src/components/LoginForm/index.ts +3 -0
  344. package/src/components/NavigationMenu/NavigationMenu.tsx +698 -0
  345. package/src/components/NavigationMenu/index.ts +10 -0
  346. package/src/components/NavigationMenu/types.ts +85 -0
  347. package/src/components/OrganisationSelector/OrganisationSelector.tsx +304 -0
  348. package/src/components/OrganisationSelector/index.ts +9 -0
  349. package/src/components/PaceAppLayout/PaceAppLayout.tsx +699 -0
  350. package/src/components/PaceAppLayout/README.md +278 -0
  351. package/src/components/PaceAppLayout/index.ts +1 -0
  352. package/src/components/PaceLoginPage/PaceLoginPage.tsx +221 -0
  353. package/src/components/PaceLoginPage/index.ts +1 -0
  354. package/src/components/PasswordReset/PasswordChangeForm.tsx +186 -0
  355. package/src/components/PasswordReset/PasswordResetForm.tsx +201 -0
  356. package/src/components/PasswordReset/index.ts +4 -0
  357. package/src/components/PrintButton/PrintButton.tsx +321 -0
  358. package/src/components/PrintButton/PrintButtonGroup.tsx +84 -0
  359. package/src/components/PrintButton/PrintToolbar.tsx +94 -0
  360. package/src/components/PrintButton/examples/PrintButtonShowcase.tsx +438 -0
  361. package/src/components/PrintButton/index.ts +33 -0
  362. package/src/components/PrintButton/types.ts +173 -0
  363. package/src/components/PrintCard/PrintCard.tsx +154 -0
  364. package/src/components/PrintCard/PrintCardContent.tsx +57 -0
  365. package/src/components/PrintCard/PrintCardFooter.tsx +60 -0
  366. package/src/components/PrintCard/PrintCardGrid.tsx +91 -0
  367. package/src/components/PrintCard/PrintCardHeader.tsx +78 -0
  368. package/src/components/PrintCard/PrintCardImage.tsx +81 -0
  369. package/src/components/PrintCard/examples/PrintCardShowcase.tsx +239 -0
  370. package/src/components/PrintCard/index.ts +34 -0
  371. package/src/components/PrintCard/types.ts +171 -0
  372. package/src/components/PrintDataTable/PrintDataTable.tsx +215 -0
  373. package/src/components/PrintDataTable/PrintTableGroup.tsx +90 -0
  374. package/src/components/PrintDataTable/PrintTableRow.tsx +76 -0
  375. package/src/components/PrintDataTable/index.ts +25 -0
  376. package/src/components/PrintDataTable/types.ts +67 -0
  377. package/src/components/PrintFooter/PrintFooter.tsx +183 -0
  378. package/src/components/PrintFooter/PrintFooterContent.tsx +71 -0
  379. package/src/components/PrintFooter/PrintFooterInfo.tsx +86 -0
  380. package/src/components/PrintFooter/PrintPageNumber.tsx +90 -0
  381. package/src/components/PrintFooter/examples/PrintFooterShowcase.tsx +390 -0
  382. package/src/components/PrintFooter/index.ts +30 -0
  383. package/src/components/PrintFooter/types.ts +149 -0
  384. package/src/components/PrintGrid/PrintGrid.tsx +180 -0
  385. package/src/components/PrintGrid/PrintGridBreakpoint.tsx +109 -0
  386. package/src/components/PrintGrid/PrintGridContainer.tsx +128 -0
  387. package/src/components/PrintGrid/PrintGridItem.tsx +220 -0
  388. package/src/components/PrintGrid/examples/PrintGridShowcase.tsx +359 -0
  389. package/src/components/PrintGrid/index.ts +31 -0
  390. package/src/components/PrintGrid/types.ts +159 -0
  391. package/src/components/PrintHeader/PrintCoverHeader.tsx +230 -0
  392. package/src/components/PrintHeader/PrintHeader.tsx +150 -0
  393. package/src/components/PrintHeader/index.ts +17 -0
  394. package/src/components/PrintHeader/types.ts +42 -0
  395. package/src/components/PrintLayout/PrintLayout.tsx +122 -0
  396. package/src/components/PrintLayout/PrintLayoutContext.tsx +66 -0
  397. package/src/components/PrintLayout/PrintPageBreak.tsx +52 -0
  398. package/src/components/PrintLayout/examples/PrintShowcase.tsx +230 -0
  399. package/src/components/PrintLayout/index.ts +19 -0
  400. package/src/components/PrintLayout/types.ts +37 -0
  401. package/src/components/PrintPageBreak/PrintPageBreak.tsx +120 -0
  402. package/src/components/PrintPageBreak/PrintPageBreakGroup.tsx +90 -0
  403. package/src/components/PrintPageBreak/PrintPageBreakIndicator.tsx +112 -0
  404. package/src/components/PrintPageBreak/examples/PrintPageBreakShowcase.tsx +279 -0
  405. package/src/components/PrintPageBreak/index.ts +23 -0
  406. package/src/components/PrintPageBreak/types.ts +94 -0
  407. package/src/components/PrintSection/PrintColumn.tsx +104 -0
  408. package/src/components/PrintSection/PrintDivider.tsx +101 -0
  409. package/src/components/PrintSection/PrintSection.tsx +129 -0
  410. package/src/components/PrintSection/PrintSectionContent.tsx +75 -0
  411. package/src/components/PrintSection/PrintSectionHeader.tsx +97 -0
  412. package/src/components/PrintSection/examples/PrintSectionShowcase.tsx +258 -0
  413. package/src/components/PrintSection/index.ts +33 -0
  414. package/src/components/PrintSection/types.ts +155 -0
  415. package/src/components/PrintText/PrintText.tsx +116 -0
  416. package/src/components/PrintText/index.ts +16 -0
  417. package/src/components/PrintText/types.ts +24 -0
  418. package/src/components/Progress/Progress.tsx +116 -0
  419. package/src/components/Progress/index.ts +3 -0
  420. package/src/components/PublicLayout/EventLogo.tsx +287 -0
  421. package/src/components/PublicLayout/PublicErrorBoundary.tsx +279 -0
  422. package/src/components/PublicLayout/PublicLoadingSpinner.tsx +208 -0
  423. package/src/components/PublicLayout/PublicPageContextChecker.tsx +130 -0
  424. package/src/components/PublicLayout/PublicPageDebugger.tsx +104 -0
  425. package/src/components/PublicLayout/PublicPageDiagnostic.tsx +162 -0
  426. package/src/components/PublicLayout/PublicPageFooter.tsx +124 -0
  427. package/src/components/PublicLayout/PublicPageHeader.tsx +178 -0
  428. package/src/components/PublicLayout/PublicPageLayout.tsx +232 -0
  429. package/src/components/PublicLayout/PublicPageProvider.tsx +137 -0
  430. package/src/components/PublicLayout/index.ts +51 -0
  431. package/src/components/RBAC/PagePermissionGuard.tsx +287 -0
  432. package/src/components/RBAC/RBACGuard.tsx +143 -0
  433. package/src/components/RBAC/RBACProvider.tsx +186 -0
  434. package/src/components/RBAC/RoleBasedContent.tsx +129 -0
  435. package/src/components/RBAC/index.ts +23 -0
  436. package/src/components/Select/Select.tsx +660 -0
  437. package/src/components/Select/index.ts +1 -0
  438. package/src/components/SuperAdminGuard.tsx +116 -0
  439. package/src/components/Table/Table.tsx +222 -0
  440. package/src/components/Table/index.ts +11 -0
  441. package/src/components/Toast/Toast.tsx +339 -0
  442. package/src/components/Toast/index.ts +14 -0
  443. package/src/components/Tooltip/Tooltip.tsx +167 -0
  444. package/src/components/Tooltip/index.ts +7 -0
  445. package/src/components/UserMenu/UserMenu.tsx +243 -0
  446. package/src/components/UserMenu/index.ts +3 -0
  447. package/src/components/examples/PermissionExample.tsx +150 -0
  448. package/src/components/index.ts +434 -0
  449. package/src/components.ts +19 -0
  450. package/src/constants/performance.ts +14 -0
  451. package/src/examples/CorrectPublicPageImplementation.tsx +301 -0
  452. package/src/examples/PublicEventPage.tsx +274 -0
  453. package/src/examples/PublicPageApp.tsx +308 -0
  454. package/src/examples/PublicPageUsageExample.tsx +216 -0
  455. package/src/hooks/index.ts +56 -0
  456. package/src/hooks/public/index.ts +34 -0
  457. package/src/hooks/public/usePublicEvent.ts +261 -0
  458. package/src/hooks/public/usePublicEventLogo.ts +285 -0
  459. package/src/hooks/public/usePublicRouteParams.ts +259 -0
  460. package/src/hooks/useAppConfig.ts +94 -0
  461. package/src/hooks/useComponentPerformance.ts +39 -0
  462. package/src/hooks/useCounter.test.ts +135 -0
  463. package/src/hooks/useDataTablePerformance.ts +387 -0
  464. package/src/hooks/useDataTableState.ts +110 -0
  465. package/src/hooks/useDebounce.ts +18 -0
  466. package/src/hooks/useFocusManagement.ts +161 -0
  467. package/src/hooks/useFocusTrap.ts +155 -0
  468. package/src/hooks/useInactivityTracker.ts +372 -0
  469. package/src/hooks/useIsMobile.ts +42 -0
  470. package/src/hooks/useKeyboardShortcuts.ts +237 -0
  471. package/src/hooks/useOrganisationPermissions.ts +208 -0
  472. package/src/hooks/useOrganisationSecurity.ts +262 -0
  473. package/src/hooks/usePerformanceMonitor.ts +128 -0
  474. package/src/hooks/usePermissionCache.ts +455 -0
  475. package/src/hooks/useRBAC.ts +262 -0
  476. package/src/hooks/useSecureDataAccess.ts +586 -0
  477. package/src/hooks/useStorage.ts +274 -0
  478. package/src/hooks/useToast.ts +242 -0
  479. package/src/hooks/useZodForm.ts +28 -0
  480. package/src/index.ts +200 -0
  481. package/src/providers/AuthProvider.tsx +369 -0
  482. package/src/providers/EventProvider.tsx +324 -0
  483. package/src/providers/InactivityProvider.tsx +238 -0
  484. package/src/providers/OrganisationProvider.tsx +588 -0
  485. package/src/providers/RBACProvider.tsx +634 -0
  486. package/src/providers/UnifiedAuthProvider.tsx +327 -0
  487. package/src/providers/index.ts +15 -0
  488. package/src/rbac/README.md +885 -0
  489. package/src/rbac/adapters.tsx +726 -0
  490. package/src/rbac/api.ts +339 -0
  491. package/src/rbac/audit-enhanced.ts +339 -0
  492. package/src/rbac/audit.ts +338 -0
  493. package/src/rbac/cache.ts +215 -0
  494. package/src/rbac/components/EnhancedNavigationMenu.tsx +294 -0
  495. package/src/rbac/components/NavigationGuard.tsx +294 -0
  496. package/src/rbac/components/NavigationProvider.tsx +314 -0
  497. package/src/rbac/components/PagePermissionGuard.tsx +430 -0
  498. package/src/rbac/components/PagePermissionProvider.tsx +274 -0
  499. package/src/rbac/components/PermissionEnforcer.tsx +307 -0
  500. package/src/rbac/components/RoleBasedRouter.tsx +425 -0
  501. package/src/rbac/components/SecureDataProvider.tsx +319 -0
  502. package/src/rbac/components/index.ts +64 -0
  503. package/src/rbac/config.ts +133 -0
  504. package/src/rbac/docs/event-based-apps.md +285 -0
  505. package/src/rbac/engine.ts +1026 -0
  506. package/src/rbac/eslint-rules.js +285 -0
  507. package/src/rbac/examples/CompleteRBACExample.tsx +323 -0
  508. package/src/rbac/examples/EventBasedApp.tsx +238 -0
  509. package/src/rbac/hooks.ts +570 -0
  510. package/src/rbac/index.ts +114 -0
  511. package/src/rbac/permissions.ts +293 -0
  512. package/src/rbac/secureClient.ts +244 -0
  513. package/src/rbac/security.ts +346 -0
  514. package/src/rbac/testing/index.tsx +340 -0
  515. package/src/rbac/types.ts +343 -0
  516. package/src/rbac/utils/eventContext.ts +83 -0
  517. package/src/styles/core.css +422 -0
  518. package/src/styles/index.ts +51 -0
  519. package/src/theming/runtime.ts +187 -0
  520. package/src/types/database.ts +472 -0
  521. package/src/types/guards.ts +30 -0
  522. package/src/types/index.ts +25 -0
  523. package/src/types/organisation.ts +184 -0
  524. package/src/types/security.ts +70 -0
  525. package/src/types/supabase.ts +166 -0
  526. package/src/types/theme.ts +6 -0
  527. package/src/types/unified.ts +262 -0
  528. package/src/types/validation.ts +164 -0
  529. package/src/types/vitest-globals.d.ts +43 -0
  530. package/src/utils/__mocks__/supabaseMock.ts +75 -0
  531. package/src/utils/__mocks__/supabaseMock.tsx +198 -0
  532. package/src/utils/appConfig.ts +47 -0
  533. package/src/utils/appIdResolver.ts +130 -0
  534. package/src/utils/appNameResolver.ts +190 -0
  535. package/src/utils/audit.ts +127 -0
  536. package/src/utils/auth-utils.ts +96 -0
  537. package/src/utils/bundleAnalysis.ts +129 -0
  538. package/src/utils/cn.ts +7 -0
  539. package/src/utils/debugLogger.ts +46 -0
  540. package/src/utils/deviceFingerprint.ts +215 -0
  541. package/src/utils/dynamicUtils.ts +105 -0
  542. package/src/utils/formatting.ts +77 -0
  543. package/src/utils/index.ts +145 -0
  544. package/src/utils/lazyLoad.tsx +44 -0
  545. package/src/utils/organisationContext.ts +135 -0
  546. package/src/utils/performanceBenchmark.ts +64 -0
  547. package/src/utils/performanceBudgets.ts +111 -0
  548. package/src/utils/permissionTypes.ts +37 -0
  549. package/src/utils/permissionUtils.ts +31 -0
  550. package/src/utils/print/PrintDataProcessor.ts +390 -0
  551. package/src/utils/print/examples/PrintUtilitiesShowcase.tsx +397 -0
  552. package/src/utils/print/index.ts +29 -0
  553. package/src/utils/print/types.ts +196 -0
  554. package/src/utils/print/usePrintOptimization.ts +272 -0
  555. package/src/utils/sanitization.ts +264 -0
  556. package/src/utils/schemaUtils.ts +37 -0
  557. package/src/utils/secureDataAccess.ts +361 -0
  558. package/src/utils/secureErrors.ts +79 -0
  559. package/src/utils/secureStorage.ts +244 -0
  560. package/src/utils/security.ts +156 -0
  561. package/src/utils/securityMonitor.ts +45 -0
  562. package/src/utils/sessionTracking.ts +170 -0
  563. package/src/utils/storage/README.md +348 -0
  564. package/src/utils/storage/config.ts +100 -0
  565. package/src/utils/storage/helpers.ts +359 -0
  566. package/src/utils/storage/index.ts +36 -0
  567. package/src/utils/storage/types.ts +90 -0
  568. package/src/utils/validation.ts +111 -0
  569. package/src/utils/validationUtils.ts +120 -0
  570. package/src/validation/common.ts +53 -0
  571. package/src/validation/csrf.ts +214 -0
  572. package/src/validation/index.ts +43 -0
  573. package/src/validation/passwordSchema.ts +125 -0
  574. package/src/validation/sanitization.ts +96 -0
  575. package/src/validation/schemaUtils.ts +42 -0
  576. package/src/validation/sqlInjectionProtection.ts +242 -0
  577. package/src/validation/user.ts +34 -0
  578. package/dist/UnifiedAuthProvider-V7y63NjT.d.ts +0 -88
  579. package/dist/chunk-4MCJAK7J.js.map +0 -1
  580. package/dist/chunk-4ZTIEYU2.js.map +0 -1
  581. package/dist/chunk-H4PZ4B3Y.js.map +0 -1
  582. package/dist/chunk-IOX76PSM.js.map +0 -1
  583. package/dist/chunk-JUUNUW3O.js.map +0 -1
  584. package/dist/chunk-U7DY5T33.js +0 -11
  585. package/dist/chunk-U7DY5T33.js.map +0 -1
  586. package/dist/chunk-WHLSWC6W.js.map +0 -1
  587. package/dist/chunk-XI7QFSSC.js +0 -790
  588. package/dist/chunk-XI7QFSSC.js.map +0 -1
  589. package/dist/chunk-XIJMMBDD.js +0 -73
  590. package/dist/chunk-XIJMMBDD.js.map +0 -1
  591. package/dist/chunk-YNU5QJ4S.js.map +0 -1
  592. package/dist/chunk-YWYCNGWH.js +0 -2070
  593. package/dist/chunk-YWYCNGWH.js.map +0 -1
  594. package/dist/chunk-ZJ3UKPIW.js +0 -952
  595. package/dist/chunk-ZJ3UKPIW.js.map +0 -1
  596. package/dist/useAppConfig-CZNJJsT_.d.ts +0 -148
  597. package/dist/{DataTable-2LB6HI6V.js.map → DataTable-GX3XERFJ.js.map} +0 -0
  598. package/dist/{api-AIJ3IJX3.js.map → api-ETQ6YJ3C.js.map} +0 -0
  599. package/dist/{audit-PD5L5ZSC.js.map → appNameResolver-7GHF5ED2.js.map} +0 -0
  600. package/dist/{chunk-DC5AMYBS.js.map → audit-BUW3LMJB.js.map} +0 -0
  601. package/dist/{validation-D2-NNCCE.d.ts → validation-PM_iOaTI.d.ts} +6 -6
@@ -1,19 +1,18 @@
1
1
  import * as React from 'react';
2
- import React__default, { Component, ReactNode } from 'react';
2
+ import React__default, { Component, ReactNode, ErrorInfo } from 'react';
3
3
  import * as LabelPrimitive from '@radix-ui/react-label';
4
4
  import * as AvatarPrimitive from '@radix-ui/react-avatar';
5
5
  import * as CheckboxPrimitive from '@radix-ui/react-checkbox';
6
6
  import * as ProgressPrimitive from '@radix-ui/react-progress';
7
7
  import * as react_jsx_runtime from 'react/jsx-runtime';
8
8
  import * as DialogPrimitive from '@radix-ui/react-dialog';
9
- import * as DropdownMenuPrimitive from '@radix-ui/react-dropdown-menu';
10
9
  import * as ToastPrimitives from '@radix-ui/react-toast';
11
10
  import * as TooltipPrimitive from '@radix-ui/react-tooltip';
12
11
  import { FieldValues, DefaultValues, SubmitHandler, SubmitErrorHandler, UseFormReturn } from 'react-hook-form';
13
12
  import { z } from 'zod';
14
- import { User } from '@supabase/supabase-js';
15
- import { r as Event } from './unified-BtRpPbmp.js';
16
- import { O as Organisation } from './organisation-DLNNQhPB.js';
13
+ import { User, SupabaseClient, createClient } from '@supabase/supabase-js';
14
+ import { r as Event } from './unified-CM7T0aTK.js';
15
+ import { O as Organisation } from './organisation-CO3Sh3_D.js';
17
16
 
18
17
  interface ButtonProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {
19
18
  /** Visual variant of the button */
@@ -57,7 +56,7 @@ declare const Button: React.ForwardRefExoticComponent<ButtonProps & React.RefAtt
57
56
  * Features:
58
57
  * - Semantic HTML structure (article, header, main, footer, etc.)
59
58
  * - Modular card structure (header, content, footer, actions, etc.)
60
- * - CardContent uses div element for primary content (accessible when nested)
59
+ * - CardContent uses main element for primary content (accessible when nested)
61
60
  * - Consistent padding, border, and shadow
62
61
  * - Responsive and accessible
63
62
  * - HoverCard for popover-style cards
@@ -86,7 +85,7 @@ declare const Button: React.ForwardRefExoticComponent<ButtonProps & React.RefAtt
86
85
  * // Semantic HTML structure:
87
86
  * // - Card: <article> element for self-contained content
88
87
  * // - CardHeader: <header> element for card heading area
89
- * // - CardContent: <div> element for primary card content
88
+ * // - CardContent: <main> element for primary card content
90
89
  * // - CardFooter: <footer> element for card footer area
91
90
  * // - CardActions: <nav> element for action buttons
92
91
  *
@@ -117,9 +116,9 @@ declare const Card: React.ForwardRefExoticComponent<CardProps & React.RefAttribu
117
116
  declare const CardHeader: React.ForwardRefExoticComponent<React.HTMLAttributes<HTMLElement> & React.RefAttributes<HTMLElement>>;
118
117
  declare const CardTitle: React.ForwardRefExoticComponent<React.HTMLAttributes<HTMLHeadingElement> & React.RefAttributes<HTMLHeadingElement>>;
119
118
  declare const CardDescription: React.ForwardRefExoticComponent<React.HTMLAttributes<HTMLParagraphElement> & React.RefAttributes<HTMLParagraphElement>>;
120
- declare const CardContent: React.ForwardRefExoticComponent<React.HTMLAttributes<HTMLDivElement> & React.RefAttributes<HTMLDivElement>>;
119
+ declare const CardContent: React.ForwardRefExoticComponent<React.HTMLAttributes<HTMLElement> & React.RefAttributes<HTMLElement>>;
121
120
  declare const CardFooter: React.ForwardRefExoticComponent<React.HTMLAttributes<HTMLElement> & React.RefAttributes<HTMLElement>>;
122
- declare const CardActions: React.ForwardRefExoticComponent<React.HTMLAttributes<HTMLElement> & React.RefAttributes<HTMLElement>>;
121
+ declare const CardActions: React.ForwardRefExoticComponent<React.HTMLAttributes<HTMLParagraphElement> & React.RefAttributes<HTMLParagraphElement>>;
123
122
  type CardActionsProps = React.HTMLAttributes<HTMLElement>;
124
123
 
125
124
  /**
@@ -497,7 +496,7 @@ declare const Checkbox: React.ForwardRefExoticComponent<Omit<CheckboxPrimitive.C
497
496
  * // Progress with custom styling
498
497
  * <Progress
499
498
  * value={75}
500
- * className="h-4 bg-app-sec-200"
499
+ * className="h-4 bg-sec-200"
501
500
  * />
502
501
  *
503
502
  * // Animated progress (controlled)
@@ -559,7 +558,7 @@ declare const Progress: React.ForwardRefExoticComponent<ProgressProps & React.Re
559
558
  * Dialog size variants
560
559
  * @public
561
560
  */
562
- type DialogSize = 'sm' | 'md' | 'lg' | 'xl' | 'full';
561
+ type DialogSize = 'sm' | 'md' | 'lg' | 'xl' | 'full' | 'auto';
563
562
  /**
564
563
  * Props for the Dialog root component
565
564
  * @public
@@ -632,18 +631,34 @@ interface DialogFooterProps extends React.HTMLAttributes<HTMLElement> {
632
631
  interface DialogBodyProps extends React.HTMLAttributes<HTMLElement> {
633
632
  /** Custom max height for the scrollable area */
634
633
  maxHeight?: string;
634
+ /** HTML content to render (will be sanitized for security) */
635
+ htmlContent?: string;
636
+ /** Whether to allow HTML content rendering (default: true) */
637
+ allowHtml?: boolean;
638
+ /** Whether to use strict HTML sanitization (default: true) */
639
+ strictSanitization?: boolean;
640
+ /** Whether to log HTML sanitization warnings to console (default: false) */
641
+ logWarnings?: boolean;
635
642
  }
636
643
  /**
637
644
  * Props for the DialogTitle component
638
645
  * @public
639
646
  */
640
647
  interface DialogTitleProps extends React.ComponentPropsWithoutRef<typeof DialogPrimitive.Title> {
648
+ /** HTML content to render as title (will be sanitized for security) */
649
+ htmlContent?: string;
650
+ /** Whether to allow HTML content rendering (default: true) */
651
+ allowHtml?: boolean;
641
652
  }
642
653
  /**
643
654
  * Props for the DialogDescription component
644
655
  * @public
645
656
  */
646
657
  interface DialogDescriptionProps extends React.ComponentPropsWithoutRef<typeof DialogPrimitive.Description> {
658
+ /** HTML content to render as description (will be sanitized for security) */
659
+ htmlContent?: string;
660
+ /** Whether to allow HTML content rendering (default: true) */
661
+ allowHtml?: boolean;
647
662
  }
648
663
  declare const Dialog: React.FC<DialogPrimitive.DialogProps>;
649
664
  declare const DialogTrigger: React.ForwardRefExoticComponent<DialogPrimitive.DialogTriggerProps & React.RefAttributes<HTMLButtonElement>>;
@@ -698,22 +713,30 @@ declare const DialogHeader: {
698
713
  /**
699
714
  * DialogBody component
700
715
  * Semantic main content area for dialog body content with scrollable functionality
716
+ * Supports both React children and safe HTML content rendering
701
717
  *
702
718
  * @param props - Body configuration and styling
703
719
  * @returns JSX.Element - The scrollable dialog body container using semantic <main> element
704
720
  *
705
721
  * @example
706
722
  * ```tsx
723
+ * // Using React children
707
724
  * <DialogBody>
708
725
  * <section className="space-y-4">
709
726
  * <h4>Content Title</h4>
710
727
  * <p>Long content that will scroll...</p>
711
728
  * </section>
712
729
  * </DialogBody>
730
+ *
731
+ * // Using HTML content
732
+ * <DialogBody
733
+ * htmlContent="<h2>Import Instructions</h2><p>Upload a CSV file with the following format:</p><ul><li>Required columns: name, email</li><li>Optional columns: phone, address</li></ul>"
734
+ * allowHtml={true}
735
+ * />
713
736
  * ```
714
737
  */
715
738
  declare const DialogBody: {
716
- ({ className, maxHeight, style, ...props }: DialogBodyProps): react_jsx_runtime.JSX.Element;
739
+ ({ className, maxHeight, style, htmlContent, allowHtml, strictSanitization, logWarnings, children, ...props }: DialogBodyProps): react_jsx_runtime.JSX.Element;
717
740
  displayName: string;
718
741
  };
719
742
  /**
@@ -738,109 +761,39 @@ declare const DialogFooter: {
738
761
  declare const DialogTitle: React.ForwardRefExoticComponent<DialogTitleProps & React.RefAttributes<HTMLHeadingElement>>;
739
762
  declare const DialogDescription: React.ForwardRefExoticComponent<DialogDescriptionProps & React.RefAttributes<HTMLParagraphElement>>;
740
763
 
741
- declare const DropdownMenu: React.FC<DropdownMenuPrimitive.DropdownMenuProps>;
742
- declare const DropdownMenuTrigger: React.ForwardRefExoticComponent<DropdownMenuPrimitive.DropdownMenuTriggerProps & React.RefAttributes<HTMLButtonElement>>;
743
- declare const DropdownMenuGroup: React.ForwardRefExoticComponent<DropdownMenuPrimitive.DropdownMenuGroupProps & React.RefAttributes<HTMLDivElement>>;
744
- declare const DropdownMenuPortal: React.FC<DropdownMenuPrimitive.DropdownMenuPortalProps>;
745
- declare const DropdownMenuSub: React.FC<DropdownMenuPrimitive.DropdownMenuSubProps>;
746
- declare const DropdownMenuRadioGroup: React.ForwardRefExoticComponent<DropdownMenuPrimitive.DropdownMenuRadioGroupProps & React.RefAttributes<HTMLDivElement>>;
747
- declare const DropdownMenuSubTrigger: React.ForwardRefExoticComponent<Omit<DropdownMenuPrimitive.DropdownMenuSubTriggerProps & React.RefAttributes<HTMLDivElement>, "ref"> & {
748
- inset?: boolean;
749
- } & React.RefAttributes<HTMLDivElement>>;
750
- /**
751
- * DropdownMenuSubContent component
752
- * The content container for dropdown menu sub-items
753
- *
754
- * @param props - Content configuration and styling
755
- * @param ref - Forwarded ref to the content element
756
- * @returns JSX.Element - The dropdown menu sub-content container
757
- *
758
- * @example
759
- * ```tsx
760
- * <DropdownMenuSubContent>
761
- * <DropdownMenuItem>Option 1</DropdownMenuItem>
762
- * <DropdownMenuItem>Option 2</DropdownMenuItem>
763
- * </DropdownMenuSubContent>
764
- * ```
765
- */
766
- declare const DropdownMenuSubContent: React.ForwardRefExoticComponent<Omit<DropdownMenuPrimitive.DropdownMenuSubContentProps & React.RefAttributes<HTMLDivElement>, "ref"> & React.RefAttributes<HTMLDivElement>>;
767
- /**
768
- * DropdownMenuContent component
769
- * The main content container for dropdown menu items
770
- *
771
- * @param props - Content configuration and styling
772
- * @param ref - Forwarded ref to the content element
773
- * @returns JSX.Element - The dropdown menu content container
774
- *
775
- * @example
776
- * ```tsx
777
- * <DropdownMenuContent>
778
- * <DropdownMenuItem>Profile</DropdownMenuItem>
779
- * <DropdownMenuItem>Settings</DropdownMenuItem>
780
- * </DropdownMenuContent>
781
- * ```
782
- */
783
- declare const DropdownMenuContent: React.ForwardRefExoticComponent<Omit<DropdownMenuPrimitive.DropdownMenuContentProps & React.RefAttributes<HTMLDivElement>, "ref"> & React.RefAttributes<HTMLDivElement>>;
784
- /**
785
- * DropdownMenuItem component
786
- * Individual menu item within the dropdown
787
- *
788
- * @param props - Item configuration and styling
789
- * @param ref - Forwarded ref to the item element
790
- * @returns JSX.Element - The dropdown menu item
791
- *
792
- * @example
793
- * ```tsx
794
- * <DropdownMenuItem onClick={() => console.log('clicked')}>
795
- * Profile
796
- * </DropdownMenuItem>
797
- * ```
798
- */
799
- declare const DropdownMenuItem: React.ForwardRefExoticComponent<Omit<DropdownMenuPrimitive.DropdownMenuItemProps & React.RefAttributes<HTMLDivElement>, "ref"> & {
800
- inset?: boolean;
801
- } & React.RefAttributes<HTMLDivElement>>;
802
- declare const DropdownMenuCheckboxItem: React.ForwardRefExoticComponent<Omit<DropdownMenuPrimitive.DropdownMenuCheckboxItemProps & React.RefAttributes<HTMLDivElement>, "ref"> & React.RefAttributes<HTMLDivElement>>;
803
- declare const DropdownMenuRadioItem: React.ForwardRefExoticComponent<Omit<DropdownMenuPrimitive.DropdownMenuRadioItemProps & React.RefAttributes<HTMLDivElement>, "ref"> & React.RefAttributes<HTMLDivElement>>;
804
- declare const DropdownMenuLabel: React.ForwardRefExoticComponent<Omit<DropdownMenuPrimitive.DropdownMenuLabelProps & React.RefAttributes<HTMLDivElement>, "ref"> & {
805
- inset?: boolean;
806
- } & React.RefAttributes<HTMLDivElement>>;
807
- declare const DropdownMenuSeparator: React.ForwardRefExoticComponent<Omit<DropdownMenuPrimitive.DropdownMenuSeparatorProps & React.RefAttributes<HTMLDivElement>, "ref"> & React.RefAttributes<HTMLDivElement>>;
808
- declare const DropdownMenuShortcut: {
809
- ({ className, ...props }: React.HTMLAttributes<HTMLSpanElement>): react_jsx_runtime.JSX.Element;
810
- displayName: string;
811
- };
812
-
813
764
  /**
814
- * @file Custom Select Component System
765
+ * @file Select Component - Simple HTML Structure
815
766
  * @package @jmruthers/pace-core
816
767
  * @module Components/Select
817
- * @since 0.2.0
768
+ * @since 0.3.0
818
769
  *
819
- * A custom select component system built without Radix UI dependencies.
820
- * Uses pace-core Button component and eliminates unnecessary wrapper elements.
770
+ * A simple select component using semantic HTML structure
771
+ * with proper DOM nesting and accessibility.
821
772
  *
822
773
  * Features:
823
- * - Uses pace-core Button component for consistent styling
824
- * - No wrapper spans with pointer-events: none
825
- * - Advanced keyboard navigation
826
- * - Search functionality with fuzzy matching
827
- * - Accessible design
828
- * - Simple CSS positioning (no portals)
829
- * - Custom styling and theming
774
+ * - Semantic HTML with <form> + <button> + <ul> + <li>
775
+ * - Proper DOM nesting (no button inside select)
776
+ * - Built on pace-core Button component for consistency
777
+ * - Simple positioning and styling
778
+ * - Better accessibility and SEO
779
+ * - Backward compatible API
830
780
  */
831
781
 
832
- interface SelectProps {
782
+ interface SelectProps extends Omit<React.HTMLAttributes<HTMLFormElement>, 'onChange' | 'onKeyDown' | 'onFocus' | 'onBlur'> {
833
783
  value?: string;
834
784
  defaultValue?: string;
785
+ selectedText?: string;
835
786
  onValueChange?: (value: string) => void;
836
787
  open?: boolean;
837
788
  defaultOpen?: boolean;
838
789
  onOpenChange?: (open: boolean) => void;
839
790
  disabled?: boolean;
840
791
  children: React.ReactNode;
792
+ className?: string;
841
793
  }
842
794
  interface SelectTriggerProps extends Omit<ButtonProps, 'onClick' | 'onKeyDown'> {
843
795
  children: React.ReactNode;
796
+ asChild?: boolean;
844
797
  }
845
798
  interface SelectValueProps {
846
799
  placeholder?: string;
@@ -851,22 +804,21 @@ interface SelectContentProps {
851
804
  className?: string;
852
805
  searchable?: boolean;
853
806
  searchPlaceholder?: string;
854
- position?: 'top' | 'bottom' | 'auto';
855
- align?: 'start' | 'center' | 'end';
856
- sideOffset?: number;
857
807
  maxHeight?: string;
808
+ style?: React.CSSProperties;
858
809
  }
859
810
  interface SelectItemProps {
860
811
  value: string;
861
812
  children: React.ReactNode;
862
813
  disabled?: boolean;
863
814
  className?: string;
815
+ onClick?: (e: React.MouseEvent) => void;
864
816
  }
865
- declare const Select: React.ForwardRefExoticComponent<SelectProps & React.RefAttributes<HTMLDivElement>>;
817
+ declare const Select: React.ForwardRefExoticComponent<SelectProps & React.RefAttributes<HTMLFormElement>>;
866
818
  declare const SelectTrigger: React.ForwardRefExoticComponent<SelectTriggerProps & React.RefAttributes<HTMLButtonElement>>;
867
- declare const SelectValue: React.ForwardRefExoticComponent<SelectValueProps & React.RefAttributes<HTMLDivElement>>;
868
- declare const SelectContent: React.ForwardRefExoticComponent<SelectContentProps & React.RefAttributes<HTMLDivElement>>;
869
- declare const SelectItem: React.ForwardRefExoticComponent<SelectItemProps & React.RefAttributes<HTMLDivElement>>;
819
+ declare const SelectValue: React.ForwardRefExoticComponent<SelectValueProps & React.RefAttributes<HTMLSpanElement>>;
820
+ declare const SelectContent: React.ForwardRefExoticComponent<SelectContentProps & React.RefAttributes<HTMLUListElement>>;
821
+ declare const SelectItem: React.ForwardRefExoticComponent<SelectItemProps & React.RefAttributes<HTMLLIElement>>;
870
822
  declare const SelectGroup: React.ForwardRefExoticComponent<{
871
823
  children: React.ReactNode;
872
824
  className?: string;
@@ -1049,7 +1001,7 @@ declare function Toaster(): react_jsx_runtime.JSX.Element;
1049
1001
  * <TooltipTrigger asChild>
1050
1002
  * <Button>Advanced Tooltip</Button>
1051
1003
  * </TooltipTrigger>
1052
- * <TooltipContent side="top" className="bg-app-main-500 text-app-main-50">
1004
+ * <TooltipContent side="top" className="bg-main-500 text-main-50">
1053
1005
  * <div className="space-y-1">
1054
1006
  * <p className="font-semibold">Advanced Tooltip</p>
1055
1007
  * <p className="text-xs">With custom styling</p>
@@ -1098,7 +1050,7 @@ declare const TooltipTrigger: React.ForwardRefExoticComponent<TooltipPrimitive.T
1098
1050
  *
1099
1051
  * @example
1100
1052
  * ```tsx
1101
- * <TooltipContent side="top" className="bg-app-main-500">
1053
+ * <TooltipContent side="top" className="bg-main-500">
1102
1054
  * Custom tooltip content
1103
1055
  * </TooltipContent>
1104
1056
  * ```
@@ -1499,7 +1451,7 @@ interface NavigationMenuProps {
1499
1451
  * window.location.href = item.href;
1500
1452
  * }
1501
1453
  * }}
1502
- * className="w-64 bg-gray-50 p-4"
1454
+ * className="w-64 bg-sec-50 p-4"
1503
1455
  * />
1504
1456
  * );
1505
1457
  * }
@@ -1597,7 +1549,6 @@ interface NavigationMenuProps {
1597
1549
  * - Uses Tailwind CSS for consistent styling
1598
1550
  * - Supports custom className for additional styling
1599
1551
  * - Responsive design considerations
1600
- * - Dark mode compatible color schemes
1601
1552
  *
1602
1553
  * @dependencies
1603
1554
  * - React 18+ - Component framework and hooks
@@ -1692,7 +1643,7 @@ interface NavigationMenuProps {
1692
1643
  * window.location.href = item.href;
1693
1644
  * }
1694
1645
  * }}
1695
- * className="w-64 bg-gray-50 p-4"
1646
+ * className="w-64 bg-sec-50 p-4"
1696
1647
  * />
1697
1648
  * );
1698
1649
  * }
@@ -1710,16 +1661,35 @@ interface NavigationMenuProps {
1710
1661
  * const location = useLocation();
1711
1662
  * const { hasRole, hasPermission } = useUnifiedAuth();
1712
1663
  *
1713
- * // Build navigation items based on user permissions
1664
+ * // Build navigation items with permission requirements
1714
1665
  * const navItems = [
1715
- * { id: 'dashboard', label: 'Dashboard', href: '/dashboard', icon: 'LayoutDashboard' },
1716
- * ...(hasPermission('meals:read') ? [
1717
- * { id: 'meals', label: 'Meals', href: '/meals', icon: 'UtensilsCrossed' }
1718
- * ] : []),
1719
- * ...(hasRole('admin') ? [
1720
- * { id: 'admin', label: 'Admin Panel', href: '/admin', icon: 'Shield' }
1721
- * ] : []),
1722
- * { id: 'profile', label: 'Profile', href: '/profile', icon: 'User' }
1666
+ * {
1667
+ * id: 'dashboard',
1668
+ * label: 'Dashboard',
1669
+ * href: '/dashboard',
1670
+ * icon: 'LayoutDashboard',
1671
+ * permissions: ['dashboard:read']
1672
+ * },
1673
+ * {
1674
+ * id: 'meals',
1675
+ * label: 'Meals',
1676
+ * href: '/meals',
1677
+ * icon: 'UtensilsCrossed',
1678
+ * permissions: ['meals:read']
1679
+ * },
1680
+ * {
1681
+ * id: 'admin',
1682
+ * label: 'Admin Panel',
1683
+ * href: '/admin',
1684
+ * icon: 'Shield',
1685
+ * roles: ['admin', 'super_admin']
1686
+ * },
1687
+ * {
1688
+ * id: 'profile',
1689
+ * label: 'Profile',
1690
+ * href: '/profile',
1691
+ * icon: 'User'
1692
+ * }
1723
1693
  * ];
1724
1694
  *
1725
1695
  * return (
@@ -1730,6 +1700,8 @@ interface NavigationMenuProps {
1730
1700
  * onNavigate={(item) => navigate(item.href)}
1731
1701
  * buttonText="Navigation"
1732
1702
  * navigationLabel="Main application navigation"
1703
+ * filterByPermissions={true}
1704
+ * auditLog={true}
1733
1705
  * />
1734
1706
  * );
1735
1707
  * }
@@ -2238,7 +2210,7 @@ interface PaceAppLayoutProps {
2238
2210
  * - Automatic page permission validation
2239
2211
  *
2240
2212
  * @example
2241
- * Basic React Router setup with permission enforcement:
2213
+ * Basic React Router setup with permission enforcement (RECOMMENDED):
2242
2214
  * ```tsx
2243
2215
  * import { BrowserRouter as Router, Routes, Route } from 'react-router-dom';
2244
2216
  * import { UnifiedAuthProvider } from '@jmruthers/pace-core/providers';
@@ -2268,6 +2240,7 @@ interface PaceAppLayoutProps {
2268
2240
  * }
2269
2241
  * ```
2270
2242
  *
2243
+ *
2271
2244
  * @example
2272
2245
  * Custom navigation items with permission filtering:
2273
2246
  * ```tsx
@@ -2595,7 +2568,7 @@ declare class ErrorBoundary extends Component<ErrorBoundaryProps, ErrorBoundaryS
2595
2568
  * // With custom styling
2596
2569
  * <LoadingSpinner
2597
2570
  * size="lg"
2598
- * className="text-app-main-500"
2571
+ * className="text-main-500"
2599
2572
  * />
2600
2573
  *
2601
2574
  * // In a button
@@ -2641,7 +2614,7 @@ interface LoadingSpinnerProps {
2641
2614
  *
2642
2615
  * @example
2643
2616
  * ```tsx
2644
- * <LoadingSpinner size="lg" className="text-app-main-500" />
2617
+ * <LoadingSpinner size="lg" className="text-main-500" />
2645
2618
  * ```
2646
2619
  */
2647
2620
  declare const LoadingSpinner: React__default.FC<LoadingSpinnerProps>;
@@ -2747,7 +2720,7 @@ declare function OrganisationSelector({ placeholder, className, onOrganisationCh
2747
2720
  *
2748
2721
  * // Password reset form with custom styling
2749
2722
  * <PasswordResetForm
2750
- * className="max-w-md mx-auto p-6 bg-app-main-50 rounded-lg shadow-md"
2723
+ * className="max-w-md mx-auto p-6 bg-main-50 rounded-lg shadow-md"
2751
2724
  * onSuccess={() => {
2752
2725
  * console.log('Reset email sent successfully');
2753
2726
  * navigate('/check-email');
@@ -2798,6 +2771,153 @@ interface PasswordResetFormProps {
2798
2771
  }
2799
2772
  declare function PasswordResetForm({ onSuccess, onError, className }: PasswordResetFormProps): react_jsx_runtime.JSX.Element;
2800
2773
 
2774
+ interface FileUploadProps {
2775
+ supabase: SupabaseClient;
2776
+ appName: string;
2777
+ orgId: string;
2778
+ onUploadComplete?: (result: {
2779
+ success: boolean;
2780
+ path?: string;
2781
+ error?: string;
2782
+ }) => void;
2783
+ onUploadStart?: () => void;
2784
+ accept?: string;
2785
+ maxSize?: number;
2786
+ multiple?: boolean;
2787
+ disabled?: boolean;
2788
+ className?: string;
2789
+ children?: React__default.ReactNode;
2790
+ }
2791
+ declare function FileUpload({ supabase, appName, orgId, onUploadComplete, onUploadStart, accept, maxSize, multiple, disabled, className, children }: FileUploadProps): react_jsx_runtime.JSX.Element;
2792
+
2793
+ /**
2794
+ * Storage utility types for pace-core
2795
+ */
2796
+ interface StorageUploadOptions {
2797
+ /** The app name from rbac_apps */
2798
+ appName: string;
2799
+ /** Organisation ID for scoping */
2800
+ orgId: string;
2801
+ /** Whether the file should be publicly accessible */
2802
+ isPublic?: boolean;
2803
+ /** Optional tags for categorisation */
2804
+ tags?: string[];
2805
+ /** Optional custom path within the app/org structure */
2806
+ customPath?: string;
2807
+ /** Optional metadata to store with the file */
2808
+ metadata?: Record<string, any>;
2809
+ }
2810
+ interface StorageFileMetadata {
2811
+ mimeType: string;
2812
+ size: number;
2813
+ width?: number;
2814
+ height?: number;
2815
+ hash?: string;
2816
+ orgId: string;
2817
+ appName: string;
2818
+ uploadedBy: string;
2819
+ uploadedAt: string;
2820
+ tags?: string[];
2821
+ isPublic: boolean;
2822
+ customMetadata?: Record<string, any>;
2823
+ }
2824
+ interface StorageUploadResult {
2825
+ success: boolean;
2826
+ path?: string;
2827
+ publicUrl?: string;
2828
+ metadata?: StorageFileMetadata;
2829
+ error?: string;
2830
+ }
2831
+ interface StorageUrlOptions {
2832
+ /** The app name from rbac_apps */
2833
+ appName: string;
2834
+ /** Organisation ID for scoping */
2835
+ orgId: string;
2836
+ /** Expiry time in seconds for signed URLs (default: 3600) */
2837
+ expiresIn?: number;
2838
+ }
2839
+ interface StorageListOptions {
2840
+ /** The app name from rbac_apps */
2841
+ appName: string;
2842
+ /** Organisation ID for scoping */
2843
+ orgId: string;
2844
+ /** Optional path prefix to filter by */
2845
+ pathPrefix?: string;
2846
+ /** Optional tags to filter by */
2847
+ tags?: string[];
2848
+ /** Maximum number of files to return */
2849
+ limit?: number;
2850
+ /** Offset for pagination */
2851
+ offset?: number;
2852
+ }
2853
+ interface StorageFileInfo {
2854
+ name: string;
2855
+ path: string;
2856
+ size: number;
2857
+ mimeType: string;
2858
+ lastModified: string;
2859
+ metadata: StorageFileMetadata;
2860
+ }
2861
+ interface StorageListResult {
2862
+ files: StorageFileInfo[];
2863
+ totalCount: number;
2864
+ hasMore: boolean;
2865
+ }
2866
+ interface FileSizeLimits {
2867
+ [mimeType: string]: number;
2868
+ }
2869
+ interface StorageConfig {
2870
+ bucketName: string;
2871
+ fileSizeLimits: FileSizeLimits;
2872
+ defaultFileSizeLimit: number;
2873
+ }
2874
+
2875
+ /**
2876
+ * React hook for storage operations
2877
+ */
2878
+
2879
+ interface UseStorageOptions {
2880
+ supabase: SupabaseClient;
2881
+ appName: string;
2882
+ orgId: string;
2883
+ }
2884
+ interface UseStorageReturn {
2885
+ uploadFile: (file: File, options?: Partial<StorageUploadOptions>) => Promise<StorageUploadResult>;
2886
+ isUploading: boolean;
2887
+ uploadError: string | null;
2888
+ getPublicUrl: (path: string) => string;
2889
+ getSignedUrl: (path: string, expiresIn?: number) => Promise<string | null>;
2890
+ getFileUrl: (path: string) => string;
2891
+ deleteFile: (path: string) => Promise<{
2892
+ success: boolean;
2893
+ error?: string;
2894
+ }>;
2895
+ archiveFile: (path: string) => Promise<{
2896
+ success: boolean;
2897
+ error?: string;
2898
+ }>;
2899
+ listFiles: (options?: Partial<StorageListOptions>) => Promise<StorageListResult>;
2900
+ isListing: boolean;
2901
+ listError: string | null;
2902
+ isLoading: boolean;
2903
+ error: string | null;
2904
+ files: StorageFileInfo[];
2905
+ refreshFiles: () => Promise<void>;
2906
+ }
2907
+ /**
2908
+ * Hook for storage operations with app and organisation context
2909
+ */
2910
+ declare function useStorage({ supabase, appName, orgId }: UseStorageOptions): UseStorageReturn;
2911
+ /**
2912
+ * Hook for file upload with progress tracking
2913
+ */
2914
+ declare function useFileUpload({ supabase, appName, orgId }: UseStorageOptions): {
2915
+ uploadWithProgress: (file: File, options?: Partial<StorageUploadOptions>) => Promise<StorageUploadResult>;
2916
+ uploadProgress: number;
2917
+ isUploading: boolean;
2918
+ uploadError: string | null;
2919
+ };
2920
+
2801
2921
  /**
2802
2922
  * @file Table Component System
2803
2923
  * @package @jmruthers/pace-core
@@ -2914,4 +3034,397 @@ declare const TableHead: React.ForwardRefExoticComponent<React.ThHTMLAttributes<
2914
3034
  declare const TableCell: React.ForwardRefExoticComponent<React.TdHTMLAttributes<HTMLTableCellElement> & React.RefAttributes<HTMLTableCellElement>>;
2915
3035
  declare const TableCaption: React.ForwardRefExoticComponent<React.HTMLAttributes<HTMLTableCaptionElement> & React.RefAttributes<HTMLTableCaptionElement>>;
2916
3036
 
2917
- export { SelectLabel as $, Alert as A, Button as B, Card as C, Dialog as D, DropdownMenu as E, DropdownMenuTrigger as F, DropdownMenuContent as G, DropdownMenuItem as H, Input as I, DropdownMenuCheckboxItem as J, DropdownMenuRadioItem as K, Label as L, DropdownMenuLabel as M, DropdownMenuSeparator as N, DropdownMenuShortcut as O, Progress as P, DropdownMenuGroup as Q, DropdownMenuPortal as R, DropdownMenuSub as S, DropdownMenuSubContent as T, DropdownMenuSubTrigger as U, DropdownMenuRadioGroup as V, Select as W, SelectGroup as X, SelectValue as Y, SelectTrigger as Z, SelectContent as _, type ButtonProps as a, SelectItem as a0, SelectSeparator as a1, Toast as a2, Toaster as a3, ToastAction as a4, ToastProvider as a5, ToastViewport as a6, ToastTitle as a7, ToastDescription as a8, ToastClose as a9, OrganisationSelector as aA, PasswordResetForm as aB, Table as aC, TableHeader as aD, TableBody as aE, TableCaption as aF, TableCell as aG, TableFooter as aH, TableHead as aI, TableRow as aJ, type CardActionsProps as aK, type DialogProps as aL, type DialogTriggerProps as aM, type DialogContentProps as aN, type DialogOverlayProps as aO, type DialogHeaderProps as aP, type DialogFooterProps as aQ, type DialogTitleProps as aR, type DialogDescriptionProps as aS, type DialogSize as aT, type FormProps as aU, type OrganisationSelectorProps as aV, type ErrorBoundaryProps as aW, type ErrorBoundaryState as aX, useToast as aa, type ToastActionElement as ab, type ToastProps as ac, Tooltip as ad, TooltipTrigger as ae, TooltipContent as af, TooltipProvider as ag, TooltipRoot as ah, Form as ai, LoginForm as aj, type LoginFormProps as ak, Header as al, Footer as am, type FooterProps as an, NavigationMenu as ao, type NavigationMenuProps as ap, type NavigationItem as aq, UserMenu as ar, type UserMenuProps as as, PaceAppLayout as at, type PaceAppLayoutProps as au, PaceLoginPage as av, type PaceLoginPageProps as aw, ErrorBoundary as ax, LoadingSpinner as ay, EventSelector as az, CardHeader as b, CardFooter as c, CardTitle as d, CardDescription as e, CardContent as f, CardActions as g, type CardProps as h, type InputProps as i, type LabelProps as j, AlertTitle as k, AlertDescription as l, Avatar as m, AvatarImage as n, AvatarFallback as o, Checkbox as p, DialogPortal as q, DialogOverlay as r, DialogTrigger as s, DialogClose as t, DialogContent as u, DialogHeader as v, DialogBody as w, DialogFooter as x, DialogTitle as y, DialogDescription as z };
3037
+ interface PublicPageLayoutProps {
3038
+ /** The event code for this public page */
3039
+ eventCode: string;
3040
+ /** Child components to render */
3041
+ children: ReactNode;
3042
+ /** Optional event data - if not provided, will be fetched by parent component */
3043
+ event?: Event | null;
3044
+ /** Whether to show the footer (default: true) */
3045
+ showFooter?: boolean;
3046
+ /** Custom CSS classes for the layout */
3047
+ className?: string;
3048
+ /** Custom error fallback component */
3049
+ errorFallback?: React__default.ComponentType<{
3050
+ error: Error;
3051
+ retry: () => void;
3052
+ }>;
3053
+ /** Custom loading fallback component */
3054
+ loadingFallback?: React__default.ComponentType;
3055
+ /** Custom header component */
3056
+ customHeader?: ReactNode;
3057
+ /** Custom footer component */
3058
+ customFooter?: ReactNode;
3059
+ /** Whether to show event validation errors (default: true) */
3060
+ showValidationErrors?: boolean;
3061
+ }
3062
+ /**
3063
+ * Layout component for public pages that don't require authentication
3064
+ *
3065
+ * This component provides a consistent structure for public event pages
3066
+ * with event-specific branding, error handling, and loading states.
3067
+ *
3068
+ * @param props - Layout configuration and content
3069
+ * @returns React element with complete public page layout
3070
+ */
3071
+ declare function PublicPageLayout({ eventCode, children, event, showFooter, className, errorFallback: ErrorFallback, loadingFallback: LoadingFallback, customHeader, customFooter, showValidationErrors }: PublicPageLayoutProps): react_jsx_runtime.JSX.Element;
3072
+ /**
3073
+ * Hook for accessing public page context
3074
+ * Provides access to event data and layout state within public pages
3075
+ *
3076
+ * @deprecated This hook is no longer needed as PublicPageLayout no longer
3077
+ * automatically fetches event data. Use usePublicRouteParams and usePublicEvent
3078
+ * directly in your components instead.
3079
+ */
3080
+ declare function usePublicPageContext$1(): {
3081
+ eventCode: null;
3082
+ eventId: null;
3083
+ event: null;
3084
+ isLoading: boolean;
3085
+ error: null;
3086
+ refetch: () => Promise<void>;
3087
+ isPublicPage: boolean;
3088
+ };
3089
+
3090
+ interface PublicPageHeaderProps {
3091
+ /** The event data for this public page */
3092
+ event: Event;
3093
+ /** The event code for this public page */
3094
+ eventCode: string;
3095
+ /** Optional page title */
3096
+ title?: string;
3097
+ /** Optional page description */
3098
+ description?: string;
3099
+ /** Whether to show the event logo (default: true) */
3100
+ showEventLogo?: boolean;
3101
+ /** Whether to show the app logo (default: true) */
3102
+ showAppLogo?: boolean;
3103
+ /** Custom CSS classes for the header */
3104
+ className?: string;
3105
+ /** Custom content to display in the header */
3106
+ children?: ReactNode;
3107
+ /** Custom app logo component */
3108
+ customAppLogo?: ReactNode;
3109
+ /** Custom event logo component */
3110
+ customEventLogo?: ReactNode;
3111
+ }
3112
+ /**
3113
+ * Header component for public pages with event-specific branding
3114
+ *
3115
+ * This component displays the app logo, event logo, and event information
3116
+ * in a clean, accessible layout suitable for public pages.
3117
+ *
3118
+ * @param props - Header configuration and content
3119
+ * @returns React element with public page header
3120
+ */
3121
+ declare function PublicPageHeader({ event, eventCode, title, description, showEventLogo, showAppLogo, className, children, customAppLogo, customEventLogo }: PublicPageHeaderProps): react_jsx_runtime.JSX.Element;
3122
+
3123
+ interface PublicPageContextType {
3124
+ isPublicPage: true;
3125
+ supabase: ReturnType<typeof createClient<Database>> | null;
3126
+ environment: {
3127
+ supabaseUrl: string | null;
3128
+ supabaseKey: string | null;
3129
+ };
3130
+ }
3131
+ interface PublicPageProviderProps {
3132
+ children: ReactNode;
3133
+ }
3134
+ /**
3135
+ * Provider for public pages that completely isolates them from authentication context
3136
+ *
3137
+ * This provider:
3138
+ * - Does not initialize any authentication providers
3139
+ * - Provides environment variables for public data access
3140
+ * - Includes error boundary for graceful error handling
3141
+ * - Is completely separate from the main app context
3142
+ */
3143
+ declare function PublicPageProvider({ children }: PublicPageProviderProps): react_jsx_runtime.JSX.Element;
3144
+ /**
3145
+ * Hook to access public page context
3146
+ *
3147
+ * @returns Public page context with environment variables
3148
+ */
3149
+ declare function usePublicPageContext(): PublicPageContextType;
3150
+ /**
3151
+ * Hook to check if we're in a public page context
3152
+ *
3153
+ * @returns True if we're in a public page context
3154
+ */
3155
+ declare function useIsPublicPage(): boolean;
3156
+
3157
+ interface PublicPageFooterProps {
3158
+ /** The event data for this public page */
3159
+ event: Event;
3160
+ /** Company or organization name */
3161
+ companyName?: string;
3162
+ /** Current year or custom year for copyright */
3163
+ year?: number;
3164
+ /** Optional array of navigation links to display */
3165
+ links?: Array<{
3166
+ label: string;
3167
+ href: string;
3168
+ }>;
3169
+ /** Optional CSS class name */
3170
+ className?: string;
3171
+ /** Logo image URL */
3172
+ logo?: string;
3173
+ /** Copyright text */
3174
+ copyright?: string;
3175
+ /** Footer content - children to render inside footer */
3176
+ children?: React__default.ReactNode;
3177
+ }
3178
+ /**
3179
+ * Footer component for public pages that matches the normal Footer exactly
3180
+ *
3181
+ * This component uses the same styling and structure as the main Footer component
3182
+ * to ensure consistency across the application.
3183
+ *
3184
+ * @param props - Footer configuration and content
3185
+ * @returns React element with public page footer
3186
+ */
3187
+ declare function PublicPageFooter({ event, companyName, year, links, className, logo, copyright, children }: PublicPageFooterProps): react_jsx_runtime.JSX.Element;
3188
+
3189
+ /**
3190
+ * @file Public Page Debugger
3191
+ * @package @jmruthers/pace-core
3192
+ * @module Components/PublicLayout
3193
+ * @since 1.0.0
3194
+ *
3195
+ * A debugging component that helps identify why authentication context
3196
+ * is being triggered in public pages.
3197
+ */
3198
+ interface PublicPageDebuggerProps {
3199
+ /** Whether to enable debugging */
3200
+ enabled?: boolean;
3201
+ /** Custom label for this debugger instance */
3202
+ label?: string;
3203
+ }
3204
+ /**
3205
+ * Debugger component that logs context information
3206
+ *
3207
+ * This component helps identify why authentication context
3208
+ * is being triggered in public pages.
3209
+ */
3210
+ declare function PublicPageDebugger({ enabled, label }: PublicPageDebuggerProps): react_jsx_runtime.JSX.Element | null;
3211
+
3212
+ /**
3213
+ * @file Public Page Diagnostic Component
3214
+ * @package @jmruthers/pace-core
3215
+ * @module Components/PublicLayout
3216
+ * @since 1.0.0
3217
+ *
3218
+ * A diagnostic component that helps identify exactly where authentication
3219
+ * context is being triggered in public pages.
3220
+ */
3221
+ interface PublicPageDiagnosticProps {
3222
+ /** Whether to enable diagnostics */
3223
+ enabled?: boolean;
3224
+ /** Custom label for this diagnostic instance */
3225
+ label?: string;
3226
+ }
3227
+ /**
3228
+ * Diagnostic component that identifies authentication context issues
3229
+ *
3230
+ * This component will help you identify exactly where the problem is
3231
+ * in your public page implementation.
3232
+ */
3233
+ declare function PublicPageDiagnostic({ enabled, label }: PublicPageDiagnosticProps): react_jsx_runtime.JSX.Element | null;
3234
+
3235
+ /**
3236
+ * @file Public Page Context Checker
3237
+ * @package @jmruthers/pace-core
3238
+ * @module Components/PublicLayout
3239
+ * @since 1.0.0
3240
+ *
3241
+ * A simple component that immediately identifies if a public page
3242
+ * is being rendered inside authentication context.
3243
+ */
3244
+ interface PublicPageContextCheckerProps {
3245
+ /** Whether to enable checking */
3246
+ enabled?: boolean;
3247
+ /** Custom label for this checker instance */
3248
+ label?: string;
3249
+ }
3250
+ /**
3251
+ * Context checker component that immediately identifies authentication context issues
3252
+ *
3253
+ * This component will immediately log to console if authentication context
3254
+ * is being triggered in a public page.
3255
+ */
3256
+ declare function PublicPageContextChecker({ enabled, label }: PublicPageContextCheckerProps): react_jsx_runtime.JSX.Element | null;
3257
+
3258
+ interface EventLogoProps {
3259
+ /** The event ID to fetch logo for */
3260
+ eventId: string;
3261
+ /** The event name for fallback text generation */
3262
+ eventName: string;
3263
+ /** The organisation ID for storage path */
3264
+ organisationId: string;
3265
+ /** Logo size variant */
3266
+ size?: 'xs' | 'sm' | 'md' | 'lg' | 'xl' | '2xl';
3267
+ /** Custom CSS classes */
3268
+ className?: string;
3269
+ /** Whether to show fallback text when no logo is available */
3270
+ showFallback?: boolean;
3271
+ /** Custom fallback text generator */
3272
+ generateFallbackText?: (eventName: string) => string;
3273
+ /** Whether to validate image existence */
3274
+ validateImage?: boolean;
3275
+ /** Custom loading component */
3276
+ loadingComponent?: React__default.ComponentType;
3277
+ /** Custom error component */
3278
+ errorComponent?: React__default.ComponentType<{
3279
+ error: Error;
3280
+ }>;
3281
+ }
3282
+ /**
3283
+ * Component for displaying event logos with fallback to initials
3284
+ *
3285
+ * This component is context-aware and automatically detects whether it's being used
3286
+ * in a public or authenticated context. It fetches and displays event logos from storage,
3287
+ * with automatic fallback to event initials if no logo is available.
3288
+ *
3289
+ * @param props - Logo configuration and styling
3290
+ * @returns React element with event logo or fallback
3291
+ */
3292
+ declare function EventLogo({ eventId, eventName, organisationId, size, className, showFallback, generateFallbackText, validateImage, loadingComponent: LoadingComponent, errorComponent: ErrorComponent }: EventLogoProps): react_jsx_runtime.JSX.Element | null;
3293
+ /**
3294
+ * Compact event logo for small spaces
3295
+ */
3296
+ declare function EventLogoCompact(props: EventLogoProps): react_jsx_runtime.JSX.Element;
3297
+ /**
3298
+ * Large event logo for prominent display
3299
+ */
3300
+ declare function EventLogoLarge(props: EventLogoProps): react_jsx_runtime.JSX.Element;
3301
+
3302
+ interface PublicErrorBoundaryProps {
3303
+ /** Child components to wrap */
3304
+ children: ReactNode;
3305
+ /** Custom error fallback component */
3306
+ fallback?: React__default.ComponentType<PublicErrorBoundaryState>;
3307
+ /** Custom CSS classes for error display */
3308
+ className?: string;
3309
+ /** Whether to show error details in development */
3310
+ showErrorDetails?: boolean;
3311
+ /** Custom error message */
3312
+ customErrorMessage?: string;
3313
+ /** Custom recovery action */
3314
+ onRecover?: () => void;
3315
+ }
3316
+ interface PublicErrorBoundaryState {
3317
+ /** Whether an error has occurred */
3318
+ hasError: boolean;
3319
+ /** The error that occurred */
3320
+ error: Error | null;
3321
+ /** Error information */
3322
+ errorInfo: ErrorInfo | null;
3323
+ /** Function to reset the error state */
3324
+ resetError: () => void;
3325
+ }
3326
+ /**
3327
+ * Error boundary component for public pages
3328
+ *
3329
+ * This component catches JavaScript errors anywhere in the child component tree,
3330
+ * logs those errors, and displays a fallback UI instead of the component tree that crashed.
3331
+ *
3332
+ * @param props - Error boundary configuration
3333
+ * @returns React element with error boundary wrapper
3334
+ */
3335
+ declare class PublicErrorBoundary extends Component<PublicErrorBoundaryProps, PublicErrorBoundaryState> {
3336
+ constructor(props: PublicErrorBoundaryProps);
3337
+ static getDerivedStateFromError(error: Error): Partial<PublicErrorBoundaryState>;
3338
+ componentDidCatch(error: Error, errorInfo: ErrorInfo): void;
3339
+ resetError: () => void;
3340
+ render(): string | number | boolean | Iterable<React__default.ReactNode> | react_jsx_runtime.JSX.Element | null | undefined;
3341
+ }
3342
+ /**
3343
+ * Hook for accessing error boundary state
3344
+ * Useful for components that need to know if they're inside an error boundary
3345
+ */
3346
+ declare function useErrorBoundary(): {
3347
+ captureError: (error: Error) => void;
3348
+ resetError: () => void;
3349
+ };
3350
+ /**
3351
+ * Default error fallback component
3352
+ */
3353
+ declare function DefaultPublicErrorFallback({ error, resetError }: PublicErrorBoundaryState): react_jsx_runtime.JSX.Element;
3354
+
3355
+ /**
3356
+ * @file Public Loading Spinner Component
3357
+ * @package @jmruthers/pace-core
3358
+ * @module Components/PublicLayout
3359
+ * @since 1.0.0
3360
+ *
3361
+ * A loading spinner component specifically designed for public pages.
3362
+ * Provides consistent loading states with event-specific branding.
3363
+ *
3364
+ * Features:
3365
+ * - Consistent loading design
3366
+ * - Event-specific branding
3367
+ * - Multiple size options
3368
+ * - Accessibility compliant
3369
+ * - TypeScript support
3370
+ *
3371
+ * @example
3372
+ * ```tsx
3373
+ * import { PublicLoadingSpinner } from '@jmruthers/pace-core';
3374
+ *
3375
+ * function PublicEventPage() {
3376
+ * if (isLoading) {
3377
+ * return <PublicLoadingSpinner message="Loading event details..." />;
3378
+ * }
3379
+ * }
3380
+ * ```
3381
+ *
3382
+ * @accessibility
3383
+ * - WCAG 2.1 AA compliant
3384
+ * - Screen reader friendly
3385
+ * - Proper ARIA labels
3386
+ * - High contrast support
3387
+ *
3388
+ * @dependencies
3389
+ * - React 18+ - Component framework
3390
+ * - Tailwind CSS - Styling
3391
+ */
3392
+ interface PublicLoadingSpinnerProps {
3393
+ /** Loading message to display */
3394
+ message?: string;
3395
+ /** Size variant */
3396
+ size?: 'sm' | 'md' | 'lg' | 'xl';
3397
+ /** Custom CSS classes */
3398
+ className?: string;
3399
+ /** Whether to show the app logo */
3400
+ showLogo?: boolean;
3401
+ /** Custom loading message */
3402
+ customMessage?: string;
3403
+ /** Whether to center the spinner */
3404
+ centered?: boolean;
3405
+ }
3406
+ /**
3407
+ * Loading spinner component for public pages
3408
+ *
3409
+ * This component displays a consistent loading state with optional
3410
+ * branding and messaging for public pages.
3411
+ *
3412
+ * @param props - Spinner configuration and styling
3413
+ * @returns React element with loading spinner
3414
+ */
3415
+ declare function PublicLoadingSpinner({ message, size, className, showLogo, customMessage, centered }: PublicLoadingSpinnerProps): react_jsx_runtime.JSX.Element;
3416
+ /**
3417
+ * Full page loading spinner with event branding
3418
+ */
3419
+ declare function PublicLoadingSpinnerFullPage({ message, eventName, className }: Pick<PublicLoadingSpinnerProps, 'message' | 'className'> & {
3420
+ eventName?: string;
3421
+ }): react_jsx_runtime.JSX.Element;
3422
+ /**
3423
+ * Skeleton loading component for content placeholders
3424
+ */
3425
+ declare function PublicLoadingSkeleton({ lines, className }: {
3426
+ lines?: number;
3427
+ className?: string;
3428
+ }): react_jsx_runtime.JSX.Element;
3429
+
3430
+ export { ToastViewport as $, Alert as A, Button as B, Card as C, Dialog as D, DialogContent as E, type FileSizeLimits as F, DialogHeader as G, DialogBody as H, Input as I, DialogFooter as J, DialogTitle as K, Label as L, DialogDescription as M, Select as N, SelectGroup as O, Progress as P, SelectValue as Q, SelectTrigger as R, type StorageConfig as S, SelectContent as T, SelectLabel as U, SelectItem as V, SelectSeparator as W, Toast as X, Toaster as Y, ToastAction as Z, ToastProvider as _, type StorageUploadOptions as a, type PublicPageLayoutProps as a$, ToastTitle as a0, ToastDescription as a1, ToastClose as a2, useToast as a3, type ToastActionElement as a4, type ToastProps as a5, Tooltip as a6, TooltipTrigger as a7, TooltipContent as a8, TooltipProvider as a9, TableHeader as aA, TableBody as aB, TableCaption as aC, TableCell as aD, TableFooter as aE, TableHead as aF, TableRow as aG, type StorageFileInfo as aH, PublicPageLayout as aI, usePublicPageContext$1 as aJ, PublicPageHeader as aK, PublicPageProvider as aL, usePublicPageContext as aM, useIsPublicPage as aN, PublicPageFooter as aO, PublicPageDebugger as aP, PublicPageDiagnostic as aQ, PublicPageContextChecker as aR, EventLogo as aS, EventLogoCompact as aT, EventLogoLarge as aU, PublicErrorBoundary as aV, useErrorBoundary as aW, DefaultPublicErrorFallback as aX, PublicLoadingSpinner as aY, PublicLoadingSpinnerFullPage as aZ, PublicLoadingSkeleton as a_, TooltipRoot as aa, Form as ab, LoginForm as ac, type LoginFormProps as ad, Header as ae, Footer as af, type FooterProps as ag, NavigationMenu as ah, type NavigationMenuProps as ai, type NavigationItem as aj, UserMenu as ak, type UserMenuProps as al, PaceAppLayout as am, type PaceAppLayoutProps as an, PaceLoginPage as ao, type PaceLoginPageProps as ap, ErrorBoundary as aq, LoadingSpinner as ar, EventSelector as as, OrganisationSelector as at, PasswordResetForm as au, FileUpload as av, type FileUploadProps as aw, useStorage as ax, useFileUpload as ay, Table as az, type StorageUploadResult as b, type PublicPageHeaderProps as b0, type PublicPageFooterProps as b1, type EventLogoProps as b2, type PublicErrorBoundaryProps as b3, type PublicErrorBoundaryState as b4, type PublicLoadingSpinnerProps as b5, type CardActionsProps as b6, type DialogProps as b7, type DialogTriggerProps as b8, type DialogContentProps as b9, type DialogOverlayProps as ba, type DialogHeaderProps as bb, type DialogFooterProps as bc, type DialogTitleProps as bd, type DialogDescriptionProps as be, type DialogSize as bf, type FormProps as bg, type OrganisationSelectorProps as bh, type ErrorBoundaryProps as bi, type ErrorBoundaryState as bj, type UseStorageOptions as bk, type UseStorageReturn as bl, type StorageUrlOptions as c, type StorageListOptions as d, type StorageListResult as e, type StorageFileMetadata as f, type ButtonProps as g, CardHeader as h, CardFooter as i, CardTitle as j, CardDescription as k, CardContent as l, CardActions as m, type CardProps as n, type InputProps as o, type LabelProps as p, AlertTitle as q, AlertDescription as r, Avatar as s, AvatarImage as t, AvatarFallback as u, Checkbox as v, DialogPortal as w, DialogOverlay as x, DialogTrigger as y, DialogClose as z };