@jmruthers/pace-core 0.5.135 → 0.5.137

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 (544) hide show
  1. package/dist/{DataTable-A36PJG6N.js → DataTable-6M4L6BI2.js} +26 -13
  2. package/dist/{DataTable-C7GaRZye.d.ts → DataTable-CWAZZcXC.d.ts} +1 -1
  3. package/dist/{PublicLoadingSpinner-CUAnTvcg.d.ts → EventLogo-rFL_kRjk.d.ts} +123 -135
  4. package/dist/{UnifiedAuthProvider-BVKmQd9u.d.ts → UnifiedAuthProvider-DJxGTftH.d.ts} +1 -1
  5. package/dist/{UnifiedAuthProvider-CQDZRJIS.js → UnifiedAuthProvider-XIQQ7LVU.js} +5 -5
  6. package/dist/{api-TNIBJWLM.js → api-45XYYO2A.js} +4 -3
  7. package/dist/{audit-T36HM7IM.js → audit-64X3VJXB.js} +3 -2
  8. package/dist/{chunk-F64FFPOZ.js → chunk-22WKWKRX.js} +26 -20
  9. package/dist/chunk-22WKWKRX.js.map +1 -0
  10. package/dist/{chunk-VZ5OR6HD.js → chunk-4C7EXCAR.js} +62 -150
  11. package/dist/chunk-4C7EXCAR.js.map +1 -0
  12. package/dist/{chunk-PYUXFQJ3.js → chunk-56XJ3TU6.js} +2 -2
  13. package/dist/chunk-56XJ3TU6.js.map +1 -0
  14. package/dist/{chunk-CTJRBUX2.js → chunk-6LAAY47Q.js} +2 -2
  15. package/dist/{chunk-UJI6WSMD.js → chunk-7QCC6MCP.js} +90 -3
  16. package/dist/chunk-7QCC6MCP.js.map +1 -0
  17. package/dist/{chunk-66C4BSAY.js → chunk-ANBQRTPX.js} +9 -2
  18. package/dist/chunk-ANBQRTPX.js.map +1 -0
  19. package/dist/{chunk-CQZU6TFE.js → chunk-BCIBECNB.js} +100 -62
  20. package/dist/chunk-BCIBECNB.js.map +1 -0
  21. package/dist/{chunk-GKHF54DI.js → chunk-BESYRHQM.js} +10 -4
  22. package/dist/chunk-BESYRHQM.js.map +1 -0
  23. package/dist/chunk-BJPBT3CU.js +21 -0
  24. package/dist/chunk-BJPBT3CU.js.map +1 -0
  25. package/dist/{chunk-BYXRHAIF.js → chunk-BLCXZEYF.js} +23 -14
  26. package/dist/chunk-BLCXZEYF.js.map +1 -0
  27. package/dist/{chunk-WP5I5GLN.js → chunk-BVYWGZVV.js} +112 -97
  28. package/dist/chunk-BVYWGZVV.js.map +1 -0
  29. package/dist/{chunk-GEVIB2UB.js → chunk-ERISIBYU.js} +14 -5
  30. package/dist/chunk-ERISIBYU.js.map +1 -0
  31. package/dist/{chunk-O3NWNXDY.js → chunk-FMUCXFII.js} +2 -2
  32. package/dist/chunk-FMUCXFII.js.map +1 -0
  33. package/dist/{chunk-GVDR7WNV.js → chunk-HAWZXGR2.js} +334 -614
  34. package/dist/chunk-HAWZXGR2.js.map +1 -0
  35. package/dist/{chunk-ZV77RZMU.js → chunk-INQLMHPF.js} +2 -2
  36. package/dist/chunk-JISYG63F.js +70 -0
  37. package/dist/chunk-JISYG63F.js.map +1 -0
  38. package/dist/{chunk-HMNOSGVA.js → chunk-KYRHUBIU.js} +576 -767
  39. package/dist/chunk-KYRHUBIU.js.map +1 -0
  40. package/dist/{chunk-M6DDYFUD.js → chunk-LS353YLY.js} +19 -16
  41. package/dist/chunk-LS353YLY.js.map +1 -0
  42. package/dist/{chunk-TGIY2AR2.js → chunk-MA6EPSGZ.js} +4 -3
  43. package/dist/{chunk-TGIY2AR2.js.map → chunk-MA6EPSGZ.js.map} +1 -1
  44. package/dist/chunk-OWAG3GSU.js +58 -0
  45. package/dist/chunk-OWAG3GSU.js.map +1 -0
  46. package/dist/{chunk-JCQZ6LA7.js → chunk-Q5QRDWKI.js} +9 -3
  47. package/dist/chunk-Q5QRDWKI.js.map +1 -0
  48. package/dist/chunk-S5OFRT4M.js +94 -0
  49. package/dist/chunk-S5OFRT4M.js.map +1 -0
  50. package/dist/{chunk-3DBFLLLU.js → chunk-SBVILCCA.js} +14 -9
  51. package/dist/chunk-SBVILCCA.js.map +1 -0
  52. package/dist/{chunk-ZYZCRSBD.js → chunk-T6JN6LH6.js} +16 -11
  53. package/dist/chunk-T6JN6LH6.js.map +1 -0
  54. package/dist/chunk-XDNLUEXI.js +138 -0
  55. package/dist/chunk-XDNLUEXI.js.map +1 -0
  56. package/dist/{chunk-3CG5L6RN.js → chunk-YCWDTTUK.js} +90 -75
  57. package/dist/chunk-YCWDTTUK.js.map +1 -0
  58. package/dist/{chunk-5F3NDPJV.js → chunk-ZZ2SS7NI.js} +10 -5
  59. package/dist/chunk-ZZ2SS7NI.js.map +1 -0
  60. package/dist/components.d.ts +7 -287
  61. package/dist/components.js +27 -157
  62. package/dist/components.js.map +1 -1
  63. package/dist/{file-reference-C9isKNPn.d.ts → file-reference-C6Gkn77H.d.ts} +1 -1
  64. package/dist/{formatting-DFcCxUEk.d.ts → formatting-CvUXy2mF.d.ts} +1 -1
  65. package/dist/hooks.d.ts +3 -3
  66. package/dist/hooks.js +21 -16
  67. package/dist/hooks.js.map +1 -1
  68. package/dist/index.d.ts +101 -9
  69. package/dist/index.js +44 -31
  70. package/dist/index.js.map +1 -1
  71. package/dist/providers.d.ts +1 -1
  72. package/dist/providers.js +4 -4
  73. package/dist/rbac/index.js +12 -12
  74. package/dist/schema-DTDZQe2u.d.ts +28 -0
  75. package/dist/styles/index.js +2 -1
  76. package/dist/theming/runtime.d.ts +2 -19
  77. package/dist/theming/runtime.js +2 -1
  78. package/dist/{types-D5rqZQXk.d.ts → types-Dfz9dmVH.d.ts} +12 -1
  79. package/dist/types.d.ts +153 -4
  80. package/dist/types.js +51 -16
  81. package/dist/types.js.map +1 -1
  82. package/dist/{useInactivityTracker-MRUU55XI.js → useInactivityTracker-TO6ZOF35.js} +3 -2
  83. package/dist/{usePublicRouteParams-Dyt1tzI9.d.ts → usePublicRouteParams-B7PabvuH.d.ts} +1 -1
  84. package/dist/utils.d.ts +221 -173
  85. package/dist/utils.js +185 -225
  86. package/dist/utils.js.map +1 -1
  87. package/dist/validation.d.ts +24 -115
  88. package/dist/validation.js +19 -474
  89. package/dist/validation.js.map +1 -1
  90. package/docs/api/classes/ColumnFactory.md +1 -1
  91. package/docs/api/classes/ErrorBoundary.md +6 -6
  92. package/docs/api/classes/InvalidScopeError.md +1 -1
  93. package/docs/api/classes/MissingUserContextError.md +1 -1
  94. package/docs/api/classes/OrganisationContextRequiredError.md +1 -1
  95. package/docs/api/classes/PermissionDeniedError.md +1 -1
  96. package/docs/api/classes/PublicErrorBoundary.md +1 -1
  97. package/docs/api/classes/RBACAuditManager.md +6 -6
  98. package/docs/api/classes/RBACCache.md +1 -1
  99. package/docs/api/classes/RBACEngine.md +7 -7
  100. package/docs/api/classes/RBACError.md +1 -1
  101. package/docs/api/classes/RBACNotInitializedError.md +1 -1
  102. package/docs/api/classes/SecureSupabaseClient.md +1 -1
  103. package/docs/api/classes/StorageUtils.md +1 -1
  104. package/docs/api/enums/FileCategory.md +1 -1
  105. package/docs/api/interfaces/AggregateConfig.md +4 -4
  106. package/docs/api/interfaces/BadgeProps.md +27 -0
  107. package/docs/api/interfaces/ButtonProps.md +1 -1
  108. package/docs/api/interfaces/CardProps.md +1 -1
  109. package/docs/api/interfaces/ColorPalette.md +1 -1
  110. package/docs/api/interfaces/ColorShade.md +29 -4
  111. package/docs/api/interfaces/DataAccessRecord.md +9 -9
  112. package/docs/api/interfaces/DataRecord.md +1 -1
  113. package/docs/api/interfaces/DataTableAction.md +18 -18
  114. package/docs/api/interfaces/DataTableColumn.md +61 -1
  115. package/docs/api/interfaces/DataTableProps.md +1 -1
  116. package/docs/api/interfaces/DataTableToolbarButton.md +7 -7
  117. package/docs/api/interfaces/EmptyStateConfig.md +5 -5
  118. package/docs/api/interfaces/EnhancedNavigationMenuProps.md +14 -14
  119. package/docs/api/interfaces/EventAppRoleData.md +1 -1
  120. package/docs/api/interfaces/EventLogoProps.md +152 -0
  121. package/docs/api/interfaces/ExportColumn.md +1 -1
  122. package/docs/api/interfaces/ExportOptions.md +8 -8
  123. package/docs/api/interfaces/FileDisplayProps.md +15 -15
  124. package/docs/api/interfaces/FileMetadata.md +1 -1
  125. package/docs/api/interfaces/FileReference.md +1 -1
  126. package/docs/api/interfaces/FileSizeLimits.md +1 -1
  127. package/docs/api/interfaces/FileUploadOptions.md +1 -1
  128. package/docs/api/interfaces/FileUploadProps.md +1 -1
  129. package/docs/api/interfaces/FooterProps.md +1 -1
  130. package/docs/api/interfaces/GrantEventAppRoleParams.md +1 -1
  131. package/docs/api/interfaces/InactivityWarningModalProps.md +1 -1
  132. package/docs/api/interfaces/InputProps.md +1 -1
  133. package/docs/api/interfaces/LabelProps.md +1 -1
  134. package/docs/api/interfaces/LoginFormProps.md +1 -1
  135. package/docs/api/interfaces/NavigationAccessRecord.md +10 -10
  136. package/docs/api/interfaces/NavigationContextType.md +9 -9
  137. package/docs/api/interfaces/NavigationGuardProps.md +10 -10
  138. package/docs/api/interfaces/NavigationItem.md +1 -1
  139. package/docs/api/interfaces/NavigationMenuProps.md +1 -1
  140. package/docs/api/interfaces/NavigationProviderProps.md +7 -7
  141. package/docs/api/interfaces/Organisation.md +1 -1
  142. package/docs/api/interfaces/OrganisationContextType.md +1 -1
  143. package/docs/api/interfaces/OrganisationMembership.md +1 -1
  144. package/docs/api/interfaces/OrganisationProviderProps.md +1 -1
  145. package/docs/api/interfaces/OrganisationSecurityError.md +1 -1
  146. package/docs/api/interfaces/PaceAppLayoutProps.md +27 -27
  147. package/docs/api/interfaces/PaceLoginPageProps.md +4 -4
  148. package/docs/api/interfaces/PageAccessRecord.md +8 -8
  149. package/docs/api/interfaces/PagePermissionContextType.md +8 -8
  150. package/docs/api/interfaces/PagePermissionGuardProps.md +11 -11
  151. package/docs/api/interfaces/PagePermissionProviderProps.md +7 -7
  152. package/docs/api/interfaces/PaletteData.md +4 -4
  153. package/docs/api/interfaces/PermissionEnforcerProps.md +11 -11
  154. package/docs/api/interfaces/ProtectedRouteProps.md +6 -6
  155. package/docs/api/interfaces/PublicErrorBoundaryProps.md +1 -1
  156. package/docs/api/interfaces/PublicErrorBoundaryState.md +1 -1
  157. package/docs/api/interfaces/PublicLoadingSpinnerProps.md +1 -1
  158. package/docs/api/interfaces/PublicPageFooterProps.md +1 -1
  159. package/docs/api/interfaces/PublicPageHeaderProps.md +1 -1
  160. package/docs/api/interfaces/PublicPageLayoutProps.md +1 -1
  161. package/docs/api/interfaces/RBACConfig.md +1 -1
  162. package/docs/api/interfaces/RBACLogger.md +1 -1
  163. package/docs/api/interfaces/RevokeEventAppRoleParams.md +1 -1
  164. package/docs/api/interfaces/RoleBasedRouterContextType.md +8 -8
  165. package/docs/api/interfaces/RoleBasedRouterProps.md +10 -10
  166. package/docs/api/interfaces/RoleManagementResult.md +1 -1
  167. package/docs/api/interfaces/RouteAccessRecord.md +10 -10
  168. package/docs/api/interfaces/RouteConfig.md +10 -10
  169. package/docs/api/interfaces/SecureDataContextType.md +9 -9
  170. package/docs/api/interfaces/SecureDataProviderProps.md +8 -8
  171. package/docs/api/interfaces/SessionRestorationLoaderProps.md +21 -0
  172. package/docs/api/interfaces/StorageConfig.md +1 -1
  173. package/docs/api/interfaces/StorageFileInfo.md +1 -1
  174. package/docs/api/interfaces/StorageFileMetadata.md +1 -1
  175. package/docs/api/interfaces/StorageListOptions.md +1 -1
  176. package/docs/api/interfaces/StorageListResult.md +1 -1
  177. package/docs/api/interfaces/StorageUploadOptions.md +1 -1
  178. package/docs/api/interfaces/StorageUploadResult.md +1 -1
  179. package/docs/api/interfaces/StorageUrlOptions.md +1 -1
  180. package/docs/api/interfaces/StyleImport.md +1 -1
  181. package/docs/api/interfaces/SwitchProps.md +1 -1
  182. package/docs/api/interfaces/ToastActionElement.md +1 -1
  183. package/docs/api/interfaces/ToastProps.md +1 -1
  184. package/docs/api/interfaces/UnifiedAuthContextType.md +53 -53
  185. package/docs/api/interfaces/UnifiedAuthProviderProps.md +13 -13
  186. package/docs/api/interfaces/UseInactivityTrackerOptions.md +9 -9
  187. package/docs/api/interfaces/UseInactivityTrackerReturn.md +8 -8
  188. package/docs/api/interfaces/UsePublicEventOptions.md +3 -3
  189. package/docs/api/interfaces/UsePublicEventReturn.md +5 -5
  190. package/docs/api/interfaces/UsePublicFileDisplayOptions.md +4 -4
  191. package/docs/api/interfaces/UsePublicFileDisplayReturn.md +9 -9
  192. package/docs/api/interfaces/UsePublicRouteParamsReturn.md +1 -1
  193. package/docs/api/interfaces/UseResolvedScopeOptions.md +4 -4
  194. package/docs/api/interfaces/UseResolvedScopeReturn.md +4 -4
  195. package/docs/api/interfaces/UserEventAccess.md +11 -11
  196. package/docs/api/interfaces/UserMenuProps.md +1 -1
  197. package/docs/api/interfaces/UserProfile.md +1 -1
  198. package/docs/api/modules.md +591 -220
  199. package/docs/api-reference/components.md +106 -26
  200. package/docs/architecture/README.md +0 -3
  201. package/docs/implementation-guides/data-tables.md +277 -13
  202. package/docs/implementation-guides/forms.md +1 -16
  203. package/docs/implementation-guides/permission-enforcement.md +8 -2
  204. package/docs/styles/README.md +0 -2
  205. package/examples/README.md +30 -14
  206. package/examples/STRUCTURE.md +125 -0
  207. package/examples/components 2/DataTable/HierarchicalActionsExample.tsx +421 -0
  208. package/examples/components 2/DataTable/HierarchicalExample.tsx +475 -0
  209. package/examples/components 2/DataTable/InitialPageSizeExample.tsx +177 -0
  210. package/examples/components 2/DataTable/PerformanceExample.tsx +506 -0
  211. package/examples/components 2/DataTable/index.ts +13 -0
  212. package/examples/components 2/Dialog/BasicHtmlTest.tsx +55 -0
  213. package/examples/components 2/Dialog/DebugHtmlExample.tsx +68 -0
  214. package/examples/components 2/Dialog/HtmlDialogExample.tsx +202 -0
  215. package/examples/components 2/Dialog/ScrollableDialogExample.tsx +290 -0
  216. package/examples/components 2/Dialog/SimpleHtmlTest.tsx +61 -0
  217. package/examples/components 2/Dialog/SmartDialogExample.tsx +322 -0
  218. package/examples/components 2/Dialog/index.ts +15 -0
  219. package/examples/components 2/index.ts +11 -0
  220. package/examples/features/index.ts +12 -0
  221. package/{src/examples → examples/features/public-pages}/CorrectPublicPageImplementation.tsx +14 -17
  222. package/{src/examples → examples/features/public-pages}/PublicEventPage.tsx +14 -27
  223. package/{src/examples → examples/features/public-pages}/PublicPageApp.tsx +15 -28
  224. package/{src/examples → examples/features/public-pages}/PublicPageUsageExample.tsx +8 -10
  225. package/examples/features/public-pages/index.ts +14 -0
  226. package/examples/features/rbac/CompleteRBACExample.tsx +324 -0
  227. package/examples/features/rbac/EventBasedApp.tsx +239 -0
  228. package/examples/features/rbac/PermissionExample.tsx +151 -0
  229. package/examples/features/rbac/index.ts +13 -0
  230. package/examples/index.ts +11 -3
  231. package/package.json +30 -19
  232. package/src/__tests__/TEST_STANDARD.md +92 -0
  233. package/src/components/Alert/Alert.tsx +1 -1
  234. package/src/components/Avatar/Avatar.tsx +1 -1
  235. package/src/components/Badge/Badge.test.tsx +314 -0
  236. package/src/components/Badge/Badge.tsx +304 -0
  237. package/src/components/Badge/index.ts +3 -0
  238. package/src/components/Button/Button.tsx +1 -1
  239. package/src/components/Card/Card.tsx +1 -1
  240. package/src/components/Checkbox/Checkbox.tsx +1 -1
  241. package/src/components/DataTable/DataTable.test.tsx +1 -1
  242. package/src/components/DataTable/DataTable.tsx +1 -30
  243. package/src/components/DataTable/__tests__/DataTable.grouping-aggregation.test.tsx +562 -0
  244. package/src/components/DataTable/__tests__/DataTableCore.test-setup.ts +217 -0
  245. package/src/components/DataTable/__tests__/styles.test.ts +3 -3
  246. package/src/components/DataTable/components/ActionButtons.tsx +0 -15
  247. package/src/components/DataTable/components/ColumnFilter.tsx +8 -4
  248. package/src/components/DataTable/components/DataTableBody.tsx +461 -0
  249. package/src/components/DataTable/components/DataTableCore.tsx +4 -185
  250. package/src/components/DataTable/components/DataTableErrorBoundary.tsx +1 -1
  251. package/src/components/DataTable/components/DataTableModals.tsx +1 -27
  252. package/src/components/DataTable/components/DraggableColumnHeader.tsx +144 -0
  253. package/src/components/DataTable/components/EditableRow.tsx +1 -1
  254. package/src/components/DataTable/components/FilterRow.tsx +9 -3
  255. package/src/components/DataTable/components/ImportModal.tsx +2 -14
  256. package/src/components/DataTable/components/PaginationControls.tsx +2 -1
  257. package/src/components/DataTable/components/UnifiedTableBody.tsx +109 -82
  258. package/src/components/DataTable/components/VirtualizedDataTable.tsx +513 -0
  259. package/src/components/DataTable/components/__tests__/AccessDeniedPage.test.tsx +14 -68
  260. package/src/components/DataTable/components/__tests__/ActionButtons.test.tsx +1 -1
  261. package/src/components/DataTable/components/__tests__/ColumnFilter.test.tsx +62 -0
  262. package/src/components/DataTable/components/__tests__/DataTableErrorBoundary.test.tsx +1 -1
  263. package/src/components/DataTable/components/__tests__/DataTableModals.test.tsx +1 -1
  264. package/src/components/DataTable/components/__tests__/FilterRow.test.tsx +43 -0
  265. package/src/components/DataTable/components/__tests__/ImportModal.test.tsx +1 -1
  266. package/src/components/DataTable/core/ActionManager.ts +235 -0
  267. package/src/components/DataTable/core/ColumnManager.ts +205 -0
  268. package/src/components/DataTable/core/DataManager.ts +188 -0
  269. package/src/components/DataTable/core/DataTableContext.tsx +181 -0
  270. package/src/components/DataTable/core/LocalDataAdapter.ts +273 -0
  271. package/src/components/DataTable/core/PluginRegistry.ts +229 -0
  272. package/src/components/DataTable/core/StateManager.ts +311 -0
  273. package/src/components/DataTable/core/interfaces.ts +338 -0
  274. package/src/components/DataTable/examples/GroupingAggregationExample.tsx +273 -0
  275. package/src/components/DataTable/examples/HierarchicalActionsExample.tsx +1 -1
  276. package/src/components/DataTable/examples/__tests__/HierarchicalActionsExample.test.tsx +1 -1
  277. package/src/components/DataTable/hooks/useColumnOrderPersistence.ts +1 -1
  278. package/src/components/DataTable/hooks/useColumnVisibilityPersistence.ts +1 -1
  279. package/src/components/DataTable/hooks/useDataTablePermissions.ts +2 -23
  280. package/src/components/DataTable/index.ts +4 -0
  281. package/src/components/DataTable/styles.ts +28 -7
  282. package/src/components/DataTable/types.ts +13 -0
  283. package/src/components/DataTable/utils/__tests__/columnUtils.test.ts +94 -0
  284. package/src/components/DataTable/utils/__tests__/exportUtils.test.ts +1 -1
  285. package/src/components/DataTable/utils/aggregationUtils.ts +161 -0
  286. package/src/components/DataTable/utils/columnUtils.ts +40 -0
  287. package/src/components/DataTable/utils/debugTools.ts +609 -0
  288. package/src/components/DataTable/utils/exportUtils.ts +1 -1
  289. package/src/components/DataTable/utils/flexibleImport.ts +1 -11
  290. package/src/components/DataTable/utils/index.ts +2 -0
  291. package/src/components/DataTable/utils/paginationUtils.ts +1 -1
  292. package/src/components/Dialog/Dialog.tsx +2 -2
  293. package/src/components/Dialog/utils/__tests__/safeHtml.unit.test.ts +8 -1
  294. package/src/components/ErrorBoundary/ErrorBoundary.test.tsx +35 -7
  295. package/src/components/ErrorBoundary/ErrorBoundary.tsx +5 -4
  296. package/src/components/EventSelector/EventSelector.tsx +3 -2
  297. package/src/components/FileDisplay/FileDisplay.tsx +2 -36
  298. package/src/components/FileUpload/FileUpload.test.tsx +2 -2
  299. package/src/components/FileUpload/FileUpload.tsx +2 -2
  300. package/src/components/Footer/Footer.test.tsx +1 -1
  301. package/src/components/Footer/Footer.tsx +1 -1
  302. package/src/components/Form/Form.test.tsx +5 -510
  303. package/src/components/Form/Form.tsx +1 -1
  304. package/src/components/Form/FormField.tsx +1 -1
  305. package/src/components/Form/index.ts +0 -12
  306. package/src/components/Header/Header.tsx +1 -1
  307. package/src/components/Input/Input.tsx +1 -1
  308. package/src/components/Label/Label.tsx +1 -1
  309. package/src/components/LoginForm/LoginForm.test.tsx +1 -1
  310. package/src/components/LoginForm/LoginForm.tsx +1 -1
  311. package/src/components/NavigationMenu/NavigationMenu.test.tsx +19 -3
  312. package/src/components/NavigationMenu/NavigationMenu.tsx +9 -8
  313. package/src/components/OrganisationSelector/OrganisationSelector.tsx +4 -3
  314. package/src/components/PaceAppLayout/PaceAppLayout.tsx +14 -12
  315. package/src/components/PaceAppLayout/__tests__/PaceAppLayout.integration.test.tsx +0 -16
  316. package/src/components/PaceAppLayout/__tests__/PaceAppLayout.performance.test.tsx +76 -10
  317. package/src/components/PaceAppLayout/__tests__/PaceAppLayout.security.test.tsx +0 -1
  318. package/src/components/PaceAppLayout/__tests__/PaceAppLayout.unit.test.tsx +0 -9
  319. package/src/components/PaceLoginPage/PaceLoginPage.test.tsx +35 -3
  320. package/src/components/PaceLoginPage/PaceLoginPage.tsx +14 -13
  321. package/src/components/PasswordReset/PasswordChangeForm.tsx +1 -1
  322. package/src/components/PasswordReset/index.ts +0 -2
  323. package/src/components/Progress/Progress.tsx +1 -1
  324. package/src/components/ProtectedRoute/ProtectedRoute.test.tsx +35 -8
  325. package/src/components/ProtectedRoute/ProtectedRoute.tsx +3 -2
  326. package/src/components/PublicLayout/PublicErrorBoundary.tsx +1 -1
  327. package/src/components/PublicLayout/PublicLoadingSpinner.tsx +1 -1
  328. package/src/components/PublicLayout/PublicPageContextChecker.tsx +44 -43
  329. package/src/components/PublicLayout/PublicPageFooter.tsx +1 -1
  330. package/src/components/PublicLayout/PublicPageHeader.tsx +1 -15
  331. package/src/components/PublicLayout/PublicPageProvider.tsx +3 -2
  332. package/src/components/PublicLayout/__tests__/PublicPageContextChecker.test.tsx +2 -0
  333. package/src/components/PublicLayout/__tests__/PublicPageFooter.test.tsx +1 -1
  334. package/src/components/PublicLayout/index.ts +4 -2
  335. package/src/components/Select/Select.test.tsx +1 -1
  336. package/src/components/Select/Select.tsx +21 -9
  337. package/src/components/{SessionRestorationLoader.tsx → SessionRestorationLoader/SessionRestorationLoader.tsx} +3 -2
  338. package/src/components/SessionRestorationLoader/index.ts +3 -0
  339. package/src/components/Switch/Switch.tsx +1 -1
  340. package/src/components/Table/Table.tsx +1 -1
  341. package/src/components/Table/__tests__/Table.test.tsx +1 -1
  342. package/src/components/Toast/Toast.tsx +1 -1
  343. package/src/components/Tooltip/Tooltip.tsx +1 -1
  344. package/src/components/index.ts +7 -10
  345. package/src/hooks/__tests__/hooks.integration.test.tsx +37 -22
  346. package/src/hooks/__tests__/useComponentPerformance.unit.test.tsx +33 -17
  347. package/src/hooks/__tests__/useDataTablePerformance.unit.test.ts +28 -3
  348. package/src/hooks/__tests__/useFileDisplay.unit.test.ts +36 -9
  349. package/src/hooks/__tests__/useFileUrl.unit.test.ts +83 -85
  350. package/src/hooks/__tests__/useInactivityTracker.unit.test.ts +26 -2
  351. package/src/hooks/__tests__/usePerformanceMonitor.unit.test.ts +19 -6
  352. package/src/hooks/__tests__/usePermissionCache.simple.test.ts +17 -4
  353. package/src/hooks/__tests__/usePermissionCache.unit.test.ts +17 -4
  354. package/src/hooks/__tests__/usePublicEvent.simple.test.ts +26 -6
  355. package/src/hooks/__tests__/usePublicFileDisplay.test.ts +16 -6
  356. package/src/hooks/__tests__/useSecureDataAccess.unit.test.tsx +3 -3
  357. package/src/hooks/__tests__/useSessionRestoration.unit.test.tsx +17 -3
  358. package/src/hooks/public/usePublicEvent.ts +7 -6
  359. package/src/hooks/public/usePublicEventLogo.ts +7 -4
  360. package/src/hooks/public/usePublicFileDisplay.ts +6 -150
  361. package/src/hooks/useComponentPerformance.ts +4 -1
  362. package/src/hooks/useDataTablePerformance.ts +4 -3
  363. package/src/hooks/useEventTheme.test.ts +18 -5
  364. package/src/hooks/useEventTheme.ts +4 -1
  365. package/src/hooks/useEvents.ts +2 -0
  366. package/src/hooks/useFileDisplay.ts +9 -8
  367. package/src/hooks/useFileReference.ts +4 -1
  368. package/src/hooks/useFileUrl.ts +4 -1
  369. package/src/hooks/useInactivityTracker.ts +5 -4
  370. package/src/hooks/useOrganisationSecurity.test.ts +33 -12
  371. package/src/hooks/useOrganisationSecurity.ts +8 -7
  372. package/src/hooks/usePerformanceMonitor.ts +6 -3
  373. package/src/hooks/usePermissionCache.ts +13 -6
  374. package/src/hooks/useSecureDataAccess.test.ts +2 -2
  375. package/src/hooks/useSecureDataAccess.ts +9 -8
  376. package/src/hooks/useSessionRestoration.ts +4 -1
  377. package/src/hooks/useStorage.ts +4 -1
  378. package/src/index.ts +20 -7
  379. package/src/providers/services/AuthServiceProvider.tsx +3 -2
  380. package/src/providers/services/EventServiceProvider.tsx +2 -1
  381. package/src/providers/services/InactivityServiceProvider.tsx +2 -1
  382. package/src/providers/services/OrganisationServiceProvider.tsx +2 -1
  383. package/src/providers/services/UnifiedAuthProvider.tsx +4 -3
  384. package/src/providers/services/__tests__/AuthServiceProvider.integration.test.tsx +22 -2
  385. package/src/providers/services/__tests__/UnifiedAuthProvider.integration.test.tsx +24 -2
  386. package/src/rbac/__tests__/cache-invalidation.test.ts +20 -6
  387. package/src/rbac/api.ts +5 -2
  388. package/src/rbac/audit-enhanced.ts +6 -6
  389. package/src/rbac/audit.test.ts +60 -38
  390. package/src/rbac/audit.ts +8 -8
  391. package/src/rbac/cache-invalidation.ts +7 -4
  392. package/src/rbac/components/EnhancedNavigationMenu.tsx +11 -5
  393. package/src/rbac/components/NavigationGuard.tsx +7 -3
  394. package/src/rbac/components/NavigationProvider.tsx +6 -3
  395. package/src/rbac/components/PagePermissionGuard.tsx +28 -16
  396. package/src/rbac/components/PagePermissionProvider.tsx +4 -1
  397. package/src/rbac/components/PermissionEnforcer.tsx +9 -3
  398. package/src/rbac/components/RoleBasedRouter.tsx +3 -1
  399. package/src/rbac/components/SecureDataProvider.tsx +7 -3
  400. package/src/rbac/components/__tests__/EnhancedNavigationMenu.test.tsx +87 -61
  401. package/src/rbac/components/__tests__/NavigationGuard.test.tsx +83 -33
  402. package/src/rbac/components/__tests__/NavigationProvider.test.tsx +36 -13
  403. package/src/rbac/components/__tests__/PagePermissionGuard.test.tsx +2 -2
  404. package/src/rbac/components/__tests__/PagePermissionProvider.test.tsx +22 -8
  405. package/src/rbac/components/__tests__/PermissionEnforcer.test.tsx +19 -6
  406. package/src/rbac/components/__tests__/SecureDataProvider.fixed.test.tsx +43 -17
  407. package/src/rbac/components/__tests__/SecureDataProvider.test.tsx +42 -17
  408. package/src/rbac/engine.ts +15 -7
  409. package/src/rbac/hooks/usePermissions.ts +7 -3
  410. package/src/rbac/hooks/useResolvedScope.test.ts +2 -2
  411. package/src/rbac/hooks/useResolvedScope.ts +10 -7
  412. package/src/rbac/permissions.ts +5 -2
  413. package/src/rbac/security.test.ts +27 -16
  414. package/src/rbac/security.ts +5 -4
  415. package/src/services/AuthService.ts +22 -21
  416. package/src/services/EventService.ts +12 -12
  417. package/src/services/InactivityService.ts +5 -4
  418. package/src/services/OrganisationService.ts +26 -25
  419. package/src/services/__tests__/AuthService.test.ts +51 -19
  420. package/src/services/__tests__/EventService.test.ts +37 -5
  421. package/src/services/__tests__/InactivityService.test.ts +38 -4
  422. package/src/services/__tests__/OrganisationService.test.ts +3 -8
  423. package/src/services/base/BaseService.ts +3 -1
  424. package/src/styles/core.css +3 -0
  425. package/src/theming/__tests__/runtime.test.ts +21 -12
  426. package/src/theming/parseEventColours.ts +5 -19
  427. package/src/theming/runtime.ts +8 -4
  428. package/src/types/validation.ts +2 -29
  429. package/src/utils/__tests__/appConfig.unit.test.ts +1 -1
  430. package/src/utils/__tests__/audit.unit.test.ts +1 -1
  431. package/src/utils/__tests__/auth-utils.unit.test.ts +1 -1
  432. package/src/utils/__tests__/bundleAnalysis.unit.test.ts +19 -19
  433. package/src/utils/__tests__/cn.unit.test.ts +1 -1
  434. package/src/utils/__tests__/debugLogger.test.ts +1 -1
  435. package/src/utils/__tests__/deviceFingerprint.unit.test.ts +1 -1
  436. package/src/utils/__tests__/dynamicUtils.unit.test.ts +1 -1
  437. package/src/utils/__tests__/formatting.unit.test.ts +1 -1
  438. package/src/utils/__tests__/lazyLoad.unit.test.tsx +1 -1
  439. package/src/utils/__tests__/logger.unit.test.ts +1 -1
  440. package/src/utils/__tests__/organisationContext.unit.test.ts +1 -1
  441. package/src/utils/__tests__/performanceBenchmark.test.ts +1 -1
  442. package/src/utils/__tests__/performanceBudgets.unit.test.ts +1 -1
  443. package/src/utils/__tests__/permissionTypes.unit.test.ts +1 -1
  444. package/src/utils/__tests__/permissionUtils.unit.test.ts +1 -1
  445. package/src/utils/__tests__/sanitization.unit.test.ts +1 -1
  446. package/src/utils/__tests__/schemaUtils.unit.test.ts +1 -1
  447. package/src/utils/__tests__/secureDataAccess.unit.test.ts +1 -1
  448. package/src/utils/__tests__/secureErrors.unit.test.ts +33 -15
  449. package/src/utils/__tests__/secureStorage.unit.test.ts +1 -1
  450. package/src/utils/__tests__/security.unit.test.ts +40 -18
  451. package/src/utils/__tests__/securityMonitor.unit.test.ts +1 -1
  452. package/src/utils/__tests__/sessionTracking.unit.test.ts +40 -29
  453. package/src/utils/__tests__/validationUtils.unit.test.ts +19 -6
  454. package/src/utils/app/appConfig.ts +47 -0
  455. package/src/utils/app/appIdResolver.test.ts +497 -0
  456. package/src/utils/app/appIdResolver.ts +133 -0
  457. package/src/utils/app/appNameResolver.simple.test.ts +212 -0
  458. package/src/utils/app/appNameResolver.test.ts +121 -0
  459. package/src/utils/app/appNameResolver.ts +195 -0
  460. package/src/utils/audit/audit.ts +127 -0
  461. package/src/utils/context/organisationContext.test.ts +322 -0
  462. package/src/utils/context/organisationContext.ts +156 -0
  463. package/src/utils/context/sessionTracking.ts +125 -0
  464. package/src/utils/core/cn.ts +7 -0
  465. package/src/utils/core/debugLogger.ts +67 -0
  466. package/src/utils/core/logger.ts +181 -0
  467. package/src/utils/device/deviceFingerprint.ts +215 -0
  468. package/src/utils/dynamic/dynamicUtils.ts +105 -0
  469. package/src/utils/dynamic/lazyLoad.tsx +44 -0
  470. package/src/utils/file-reference/__tests__/file-reference.test.ts +788 -0
  471. package/src/utils/file-reference/index.ts +501 -0
  472. package/src/utils/formatting/formatDate.test.ts +237 -0
  473. package/src/utils/formatting/formatting.ts +133 -0
  474. package/src/utils/index.ts +39 -54
  475. package/src/utils/performance/bundleAnalysis.ts +129 -0
  476. package/src/utils/performance/performanceBenchmark.ts +64 -0
  477. package/src/utils/performance/performanceBudgets.ts +110 -0
  478. package/src/utils/permissions/permissionTypes.ts +37 -0
  479. package/src/utils/permissions/permissionUtils.test.ts +393 -0
  480. package/src/utils/permissions/permissionUtils.ts +34 -0
  481. package/src/utils/security/auth-utils.ts +96 -0
  482. package/src/utils/security/secureDataAccess.test.ts +711 -0
  483. package/src/utils/security/secureDataAccess.ts +377 -0
  484. package/src/utils/security/secureErrors.ts +82 -0
  485. package/src/utils/security/secureStorage.ts +244 -0
  486. package/src/utils/security/security.ts +159 -0
  487. package/src/utils/security/securityMonitor.ts +45 -0
  488. package/src/utils/storage/__tests__/helpers.unit.test.ts +1 -4
  489. package/src/utils/storage/helpers.ts +15 -8
  490. package/src/utils/validation/__tests__/htmlSanitization.unit.test.ts +598 -0
  491. package/src/{validation → utils/validation}/csrf.ts +1 -1
  492. package/src/utils/validation/htmlSanitization.ts +184 -0
  493. package/src/utils/validation/index.ts +79 -0
  494. package/src/utils/validation/sanitization.ts +333 -0
  495. package/src/{validation/schemaUtils.ts → utils/validation/schema.ts} +11 -6
  496. package/src/{validation → utils/validation}/sqlInjectionProtection.ts +2 -0
  497. package/src/utils/validation/validation.ts +111 -0
  498. package/src/utils/validation/validationUtils.ts +123 -0
  499. package/src/validation/index.ts +3 -34
  500. package/dist/chunk-24MKLB7U.js +0 -81
  501. package/dist/chunk-24MKLB7U.js.map +0 -1
  502. package/dist/chunk-3CG5L6RN.js.map +0 -1
  503. package/dist/chunk-3DBFLLLU.js.map +0 -1
  504. package/dist/chunk-5F3NDPJV.js.map +0 -1
  505. package/dist/chunk-66C4BSAY.js.map +0 -1
  506. package/dist/chunk-BDZUMRBD.js +0 -87
  507. package/dist/chunk-BDZUMRBD.js.map +0 -1
  508. package/dist/chunk-BYXRHAIF.js.map +0 -1
  509. package/dist/chunk-CDQ3PX7L.js +0 -18
  510. package/dist/chunk-CDQ3PX7L.js.map +0 -1
  511. package/dist/chunk-CQZU6TFE.js.map +0 -1
  512. package/dist/chunk-F64FFPOZ.js.map +0 -1
  513. package/dist/chunk-GEVIB2UB.js.map +0 -1
  514. package/dist/chunk-GKHF54DI.js.map +0 -1
  515. package/dist/chunk-GVDR7WNV.js.map +0 -1
  516. package/dist/chunk-HMNOSGVA.js.map +0 -1
  517. package/dist/chunk-JCQZ6LA7.js.map +0 -1
  518. package/dist/chunk-M6DDYFUD.js.map +0 -1
  519. package/dist/chunk-O3NWNXDY.js.map +0 -1
  520. package/dist/chunk-PYUXFQJ3.js.map +0 -1
  521. package/dist/chunk-UJI6WSMD.js.map +0 -1
  522. package/dist/chunk-VZ5OR6HD.js.map +0 -1
  523. package/dist/chunk-WP5I5GLN.js.map +0 -1
  524. package/dist/chunk-ZYZCRSBD.js.map +0 -1
  525. package/dist/validation-DnhrNMju.d.ts +0 -159
  526. package/src/components/PublicLayout/__tests__/PublicPageDebugger.test.tsx +0 -185
  527. package/src/validation/__tests__/common.unit.test.ts +0 -101
  528. package/src/validation/__tests__/csrf.unit.test.ts +0 -365
  529. package/src/validation/__tests__/passwordSchema.unit.test.ts +0 -203
  530. package/src/validation/__tests__/sanitization.unit.test.ts +0 -250
  531. package/src/validation/__tests__/schemaUtils.unit.test.ts +0 -451
  532. package/src/validation/__tests__/sqlInjectionProtection.unit.test.ts +0 -462
  533. package/src/validation/__tests__/user.unit.test.ts +0 -440
  534. package/src/validation/sanitization.ts +0 -96
  535. /package/dist/{DataTable-A36PJG6N.js.map → DataTable-6M4L6BI2.js.map} +0 -0
  536. /package/dist/{UnifiedAuthProvider-CQDZRJIS.js.map → UnifiedAuthProvider-XIQQ7LVU.js.map} +0 -0
  537. /package/dist/{api-TNIBJWLM.js.map → api-45XYYO2A.js.map} +0 -0
  538. /package/dist/{audit-T36HM7IM.js.map → audit-64X3VJXB.js.map} +0 -0
  539. /package/dist/{chunk-CTJRBUX2.js.map → chunk-6LAAY47Q.js.map} +0 -0
  540. /package/dist/{chunk-ZV77RZMU.js.map → chunk-INQLMHPF.js.map} +0 -0
  541. /package/dist/{useInactivityTracker-MRUU55XI.js.map → useInactivityTracker-TO6ZOF35.js.map} +0 -0
  542. /package/src/{validation → utils/validation}/common.ts +0 -0
  543. /package/src/{validation → utils/validation}/passwordSchema.ts +0 -0
  544. /package/src/{validation → utils/validation}/user.ts +0 -0
package/dist/utils.js CHANGED
@@ -7,45 +7,70 @@ import {
7
7
  formatPercent,
8
8
  getAppConfig,
9
9
  getCurrentAppId,
10
- getCurrentAppName,
11
10
  setAppConfig,
12
11
  useSessionTracking
13
- } from "./chunk-M6DDYFUD.js";
12
+ } from "./chunk-LS353YLY.js";
14
13
  import {
15
- LoadingSpinner
16
- } from "./chunk-CDQ3PX7L.js";
14
+ CachedAppIdResolver,
15
+ LoadingSpinner,
16
+ cachedAppIdResolver,
17
+ getAppId,
18
+ getAppIds
19
+ } from "./chunk-S5OFRT4M.js";
20
+ import "./chunk-OWAG3GSU.js";
17
21
  import {
18
22
  getAppNameFromBuildTime,
19
23
  getAppNameFromEnvironment,
20
24
  getAppNameFromGlobal,
21
25
  getAppNameFromPackageJson,
26
+ getCurrentAppName,
22
27
  getCurrentAppNameWithFallback,
23
28
  setRBACAppName
24
- } from "./chunk-JCQZ6LA7.js";
29
+ } from "./chunk-Q5QRDWKI.js";
30
+ import {
31
+ deepMerge,
32
+ isEmpty,
33
+ isObject,
34
+ isStrongPassword,
35
+ isValidDate,
36
+ isValidEmail,
37
+ isValidUrl,
38
+ isWithinRange,
39
+ matchesPattern
40
+ } from "./chunk-JISYG63F.js";
25
41
  import {
26
42
  useComponentPerformance
27
- } from "./chunk-66C4BSAY.js";
43
+ } from "./chunk-ANBQRTPX.js";
28
44
  import {
29
45
  PERFORMANCE_BUDGETS,
30
46
  performanceBudgetMonitor
31
- } from "./chunk-O3NWNXDY.js";
47
+ } from "./chunk-FMUCXFII.js";
32
48
  import {
33
49
  cn
34
- } from "./chunk-PYUXFQJ3.js";
50
+ } from "./chunk-56XJ3TU6.js";
35
51
  import {
36
52
  clearOrganisationContext,
37
53
  getOrganisationContext,
38
54
  init_organisationContext,
55
+ init_secureStorage,
39
56
  isOrganisationContextAvailable,
57
+ secureStorage,
40
58
  setOrganisationContext
41
- } from "./chunk-BDZUMRBD.js";
59
+ } from "./chunk-7QCC6MCP.js";
42
60
  import {
43
- init_secureStorage,
44
- secureStorage
45
- } from "./chunk-UJI6WSMD.js";
61
+ combineSchemas,
62
+ pickSchema
63
+ } from "./chunk-BJPBT3CU.js";
64
+ import {
65
+ LogLevel,
66
+ Logger,
67
+ createLogger,
68
+ init_logger,
69
+ logger
70
+ } from "./chunk-XDNLUEXI.js";
46
71
  import "./chunk-PLDDJCW6.js";
47
72
 
48
- // src/utils/debugLogger.ts
73
+ // src/utils/core/debugLogger.ts
49
74
  var DebugLogger = class {
50
75
  /**
51
76
  * Check if we're in development mode
@@ -95,68 +120,13 @@ var DebugLogger = class {
95
120
  }
96
121
  };
97
122
 
98
- // src/utils/validation.ts
99
- function isValidEmail(email) {
100
- const emailPattern = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
101
- return emailPattern.test(email);
102
- }
103
- function isEmpty(value) {
104
- return value === null || value === void 0 || value.trim() === "";
105
- }
106
- function isStrongPassword(password) {
107
- const passwordPattern = /^(?=.*[a-z])(?=.*[A-Z])(?=.*\d).{8,}$/;
108
- return passwordPattern.test(password);
109
- }
110
- function isValidUrl(url) {
111
- try {
112
- new URL(url);
113
- return true;
114
- } catch {
115
- return false;
116
- }
117
- }
118
- function isValidDate(dateStr) {
119
- const date = new Date(dateStr);
120
- return !isNaN(date.getTime());
121
- }
122
- function isWithinRange(value, min, max) {
123
- return value >= min && value <= max;
124
- }
125
- function matchesPattern(value, pattern) {
126
- return pattern.test(value);
127
- }
128
- function deepMerge(target, source) {
129
- const output = { ...target };
130
- if (isObject(target) && isObject(source)) {
131
- Object.keys(source).forEach((key) => {
132
- if (isObject(source[key])) {
133
- if (!(key in target)) {
134
- Object.assign(output, { [key]: source[key] });
135
- } else {
136
- const targetKey = key;
137
- const targetValue = target[targetKey];
138
- if (isObject(targetValue)) {
139
- output[targetKey] = deepMerge(
140
- targetValue,
141
- source[key]
142
- );
143
- }
144
- }
145
- } else {
146
- Object.assign(output, { [key]: source[key] });
147
- }
148
- });
149
- }
150
- return output;
151
- }
152
- function isObject(item) {
153
- return item !== null && typeof item === "object" && !Array.isArray(item);
154
- }
123
+ // src/utils/index.ts
124
+ init_logger();
155
125
 
156
- // src/utils/validationUtils.ts
126
+ // src/utils/validation/validationUtils.ts
157
127
  import { z as z2 } from "zod";
158
128
 
159
- // src/utils/sanitization.ts
129
+ // src/utils/validation/sanitization.ts
160
130
  import { z } from "zod";
161
131
  var DEFAULT_OPTIONS = {
162
132
  allowHtml: false,
@@ -198,37 +168,6 @@ function sanitizeEmail(email) {
198
168
  }
199
169
  return email.trim().toLowerCase().replace(/[^\w@.-]/g, "");
200
170
  }
201
- function sanitizePhoneNumber(phone) {
202
- if (typeof phone !== "string") {
203
- return "";
204
- }
205
- return phone.replace(/[^\d+\-\s()]/g, "").trim();
206
- }
207
- function sanitizeUrl(url) {
208
- if (typeof url !== "string") {
209
- return "";
210
- }
211
- const sanitized = url.trim();
212
- if (!/^https?:\/\/|^ftp:\/\//i.test(sanitized)) {
213
- return "";
214
- }
215
- if (/javascript:|data:|vbscript:/i.test(sanitized)) {
216
- return "";
217
- }
218
- return sanitized;
219
- }
220
- function sanitizeFileName(fileName) {
221
- if (typeof fileName !== "string") {
222
- return "";
223
- }
224
- return fileName.trim().replace(/[<>:"/\\|?*]/g, "").replace(/\.\./g, "").substring(0, 255);
225
- }
226
- function sanitizeSqlInput(input) {
227
- if (typeof input !== "string") {
228
- return "";
229
- }
230
- return input.replace(/['";\\]/g, "").replace(/--.*$/gm, "").replace(/\/\*.*?\*\//g, "").trim();
231
- }
232
171
  function sanitizeFormData(data, schema, sanitizationRules) {
233
172
  try {
234
173
  if (sanitizationRules && typeof data === "object" && data !== null) {
@@ -255,62 +194,34 @@ function sanitizeFormData(data, schema, sanitizationRules) {
255
194
  };
256
195
  }
257
196
  }
258
- var CSP_DIRECTIVES = {
259
- default: "default-src 'self'",
260
- script: "script-src 'self' 'unsafe-inline'",
261
- style: "style-src 'self' 'unsafe-inline'",
262
- img: "img-src 'self' data: https:",
263
- font: "font-src 'self'",
264
- connect: "connect-src 'self'",
265
- frame: "frame-src 'none'"
266
- };
267
- function generateCSPHeader(customDirectives) {
268
- const directives = { ...CSP_DIRECTIVES, ...customDirectives };
269
- return Object.values(directives).join("; ");
270
- }
271
- var RateLimiter = class {
272
- constructor(maxAttempts = 5, windowMs = 15 * 60 * 1e3) {
273
- this.maxAttempts = maxAttempts;
274
- this.windowMs = windowMs;
275
- this.attempts = /* @__PURE__ */ new Map();
276
- }
277
- isAllowed(identifier) {
278
- const now = Date.now();
279
- const record = this.attempts.get(identifier);
280
- if (!record || now > record.resetTime) {
281
- this.attempts.set(identifier, { count: 1, resetTime: now + this.windowMs });
282
- return true;
283
- }
284
- if (record.count >= this.maxAttempts) {
285
- return false;
286
- }
287
- record.count++;
288
- return true;
289
- }
290
- getRemainingAttempts(identifier) {
291
- const record = this.attempts.get(identifier);
292
- if (!record || Date.now() > record.resetTime) {
293
- return this.maxAttempts;
294
- }
295
- return Math.max(0, this.maxAttempts - record.count);
296
- }
297
- reset(identifier) {
298
- this.attempts.delete(identifier);
299
- }
300
- };
197
+ var secureEmailSchema = z.string().min(1, "Email is required").email("Invalid email format").max(254, "Email too long").refine(
198
+ (email) => {
199
+ if (!email || typeof email !== "string") return false;
200
+ const domain = email.split("@")[1];
201
+ return domain && domain.includes(".") && domain.length > 3;
202
+ },
203
+ "Invalid email domain"
204
+ ).transform((email) => sanitizeEmail(email));
205
+ var emailSchema = z.string().min(1, "Email is required").email("Invalid email format");
206
+ var nameSchema = z.string().min(1, "Name is required").max(100, "Name too long").regex(/^[a-zA-Z\s'-]+$/, "Name contains invalid characters");
207
+ var phoneSchema = z.string().regex(/^[\+]?[1-9][\d]{0,15}$/, "Invalid phone number format");
208
+ var urlSchema = z.string().url("Invalid URL format");
209
+ var dateSchema = z.string().regex(/^\d{4}-\d{2}-\d{2}$/, "Invalid date format (YYYY-MM-DD)");
210
+ var secureLoginSchema = z.object({
211
+ email: secureEmailSchema,
212
+ password: z.string().min(1, "Password is required")
213
+ });
301
214
 
302
- // src/utils/validationUtils.ts
215
+ // src/utils/validation/validationUtils.ts
216
+ init_logger();
217
+ var log = createLogger("ValidationUtils");
303
218
  function validateUserInput(schema, data, sanitizationRules) {
304
219
  return sanitizeFormData(data, schema, sanitizationRules);
305
220
  }
306
- function sanitizeUserInput_deprecated(input) {
307
- console.warn("sanitizeUserInput is deprecated. Use sanitizeUserInput from lib/sanitization instead.");
308
- return sanitizeUserInput(input);
309
- }
310
- var emailSchema = z2.string().transform((email) => email.toLowerCase().trim()).pipe(z2.string().min(1, "Email is required").email("Invalid email format").max(254, "Email too long"));
221
+ var emailSchema2 = z2.string().transform((email) => email.toLowerCase().trim()).pipe(z2.string().min(1, "Email is required").email("Invalid email format").max(254, "Email too long"));
311
222
  var passwordSchema = z2.string().min(8, "Password must be at least 8 characters").max(128, "Password too long").regex(/[A-Z]/, "Password must contain at least one uppercase letter").regex(/[a-z]/, "Password must contain at least one lowercase letter").regex(/[0-9]/, "Password must contain at least one number").regex(/[^A-Za-z0-9]/, "Password must contain at least one special character");
312
223
  var usernameSchema = z2.string().transform((username) => username.toLowerCase().trim()).pipe(z2.string().min(3, "Username must be at least 3 characters").max(30, "Username too long").regex(/^[a-zA-Z0-9_-]+$/, "Username can only contain letters, numbers, hyphens, and underscores"));
313
- var nameSchema = z2.string().min(1, "Name is required").max(100, "Name too long").refine((name) => {
224
+ var nameSchema2 = z2.string().min(1, "Name is required").max(100, "Name too long").refine((name) => {
314
225
  const dangerousPatterns = [
315
226
  /<script/i,
316
227
  /<img/i,
@@ -325,11 +236,11 @@ var nameSchema = z2.string().min(1, "Name is required").max(100, "Name too long"
325
236
  maxLength: 100,
326
237
  trim: true
327
238
  }));
328
- var phoneSchema = z2.string().min(10, "Phone number must be at least 10 digits").max(20, "Phone number too long").regex(/^[\+]?[0-9\s\-\(\)\.]+$/, "Invalid phone number format").refine((phone) => {
239
+ var phoneSchema2 = z2.string().min(10, "Phone number must be at least 10 digits").max(20, "Phone number too long").regex(/^[\+]?[0-9\s\-\(\)\.]+$/, "Invalid phone number format").refine((phone) => {
329
240
  const digitsOnly = phone.replace(/\D/g, "");
330
241
  return digitsOnly.length >= 10 && digitsOnly.length <= 15;
331
242
  }, "Phone number must be between 10 and 15 digits");
332
- var urlSchema = z2.string().min(1, "URL is required").max(2048, "URL too long").refine((url) => {
243
+ var urlSchema2 = z2.string().min(1, "URL is required").max(2048, "URL too long").refine((url) => {
333
244
  try {
334
245
  const parsed = new URL(url);
335
246
  return ["http:", "https:"].includes(parsed.protocol);
@@ -347,9 +258,75 @@ var urlSchema = z2.string().min(1, "URL is required").max(2048, "URL too long").
347
258
  return !dangerousPatterns.some((pattern) => pattern.test(url));
348
259
  }, "URL contains invalid protocol");
349
260
 
350
- // src/utils/security.ts
261
+ // src/utils/validation/common.ts
262
+ import { z as z3 } from "zod";
263
+ var emailSchema3 = z3.string().min(1, "Email is required").email("Invalid email format").max(254, "Email too long");
264
+ var nameSchema3 = z3.string().min(1, "Name is required").max(100, "Name too long").regex(/^[a-zA-Z\s'-]+$/, "Name contains invalid characters");
265
+ var phoneSchema3 = z3.string().regex(/^\+?[\d\s\-\(\)]+$/, "Invalid phone number format").min(10, "Phone number too short").max(20, "Phone number too long");
266
+ var urlSchema3 = z3.string().url("Invalid URL format").max(2048, "URL too long");
267
+ var dateSchema2 = z3.string().regex(/^\d{4}-\d{2}-\d{2}$/, "Date must be in YYYY-MM-DD format").refine((date) => {
268
+ const parsed = new Date(date);
269
+ return !isNaN(parsed.getTime());
270
+ }, "Invalid date");
271
+
272
+ // src/utils/validation/passwordSchema.ts
273
+ import { z as z4 } from "zod";
274
+ var COMMON_PASSWORDS = /* @__PURE__ */ new Set([
275
+ "password",
276
+ "123456",
277
+ "123456789",
278
+ "qwerty",
279
+ "abc123",
280
+ "password123",
281
+ "admin",
282
+ "letmein",
283
+ "welcome",
284
+ "monkey",
285
+ "1234567890",
286
+ "password1"
287
+ ]);
288
+ var WEAK_PATTERNS = [
289
+ /^(.)\1+$/,
290
+ // All same character
291
+ /^(012|123|234|345|456|567|678|789|890|987|876|765|654|543|432|321|210)+/,
292
+ // Sequential numbers
293
+ /^(abc|bcd|cde|def|efg|fgh|ghi|hij|ijk|jkl|klm|lmn|mno|nop|opq|pqr|qrs|rst|stu|tuv|uvw|vwx|wxy|xyz)+/i
294
+ // Sequential letters
295
+ ];
296
+ var securePasswordSchema = z4.string().min(8, "Password must be at least 8 characters long").max(128, "Password must not exceed 128 characters").refine(
297
+ (password) => /[a-z]/.test(password),
298
+ "Password must contain at least one lowercase letter"
299
+ ).refine(
300
+ (password) => /[A-Z]/.test(password),
301
+ "Password must contain at least one uppercase letter"
302
+ ).refine(
303
+ (password) => /\d/.test(password),
304
+ "Password must contain at least one number"
305
+ ).refine(
306
+ (password) => /[!@#$%^&*()_+\-=\[\]{};':"\\|,.<>\/?]/.test(password),
307
+ "Password must contain at least one special character"
308
+ ).refine(
309
+ (password) => !COMMON_PASSWORDS.has(password.toLowerCase()),
310
+ "Password is too common. Please choose a stronger password"
311
+ ).refine(
312
+ (password) => !WEAK_PATTERNS.some((pattern) => pattern.test(password)),
313
+ "Password contains weak patterns. Please choose a more complex password"
314
+ ).refine(
315
+ (password) => {
316
+ const keyboardPatterns = ["qwerty", "asdfgh", "zxcvbn", "1234567890"];
317
+ return !keyboardPatterns.some(
318
+ (pattern) => password.toLowerCase().includes(pattern)
319
+ );
320
+ },
321
+ "Password contains keyboard patterns. Please choose a more secure password"
322
+ );
323
+ var passwordSchema2 = z4.string().min(6, "Password must be at least 6 characters long").max(128, "Password must not exceed 128 characters");
324
+
325
+ // src/utils/security/security.ts
326
+ init_logger();
327
+ var log2 = createLogger("Security");
351
328
  function logSecurityEvent(event) {
352
- console.warn("[SECURITY EVENT]", {
329
+ log2.warn("Security event:", {
353
330
  ...event,
354
331
  timestamp: event.timestamp.toISOString()
355
332
  });
@@ -377,6 +354,35 @@ function validateSecurityHeaders(headers) {
377
354
  return true;
378
355
  }
379
356
 
357
+ // src/utils/security/securityMonitor.ts
358
+ var SecurityMonitor = class {
359
+ constructor() {
360
+ this.events = [];
361
+ }
362
+ logEvent(event) {
363
+ const eventWithId = {
364
+ ...event,
365
+ id: Math.random().toString(36).substr(2, 9),
366
+ timestamp: Date.now()
367
+ };
368
+ this.events.push(eventWithId);
369
+ }
370
+ getEvents() {
371
+ return [...this.events];
372
+ }
373
+ clearEvents() {
374
+ this.events = [];
375
+ }
376
+ createAlert(alert) {
377
+ return {
378
+ ...alert,
379
+ id: Math.random().toString(36).substr(2, 9),
380
+ timestamp: /* @__PURE__ */ new Date()
381
+ };
382
+ }
383
+ };
384
+ var securityMonitor = new SecurityMonitor();
385
+
380
386
  // src/constants/performance.ts
381
387
  var PERFORMANCE_THRESHOLDS = {
382
388
  RENDER_TIME: 16,
@@ -393,7 +399,7 @@ var PERFORMANCE_THRESHOLDS = {
393
399
  // 250KB bundle size limit
394
400
  };
395
401
 
396
- // src/utils/performanceBenchmark.ts
402
+ // src/utils/performance/performanceBenchmark.ts
397
403
  function createPerformanceBenchmark(name) {
398
404
  const startTime = performance.now();
399
405
  const startMemory = performance.memory?.usedJSHeapSize || 0;
@@ -436,7 +442,7 @@ function measureRenderPerformance(componentName, renderFn) {
436
442
  return metrics;
437
443
  }
438
444
 
439
- // src/utils/bundleAnalysis.ts
445
+ // src/utils/performance/bundleAnalysis.ts
440
446
  var BundleAnalyzer = class {
441
447
  constructor() {
442
448
  this.enabled = import.meta.env.MODE === "development";
@@ -522,7 +528,7 @@ function trackDynamicImport(moduleName) {
522
528
  console.log("Dynamic import: " + moduleName + " - Good for code splitting!");
523
529
  }
524
530
 
525
- // src/utils/dynamicUtils.ts
531
+ // src/utils/dynamic/dynamicUtils.ts
526
532
  var loadLodash = async () => {
527
533
  const [debounceModule, throttleModule] = await Promise.all([
528
534
  import("lodash.debounce"),
@@ -579,7 +585,7 @@ var lazyChartUtils = createLazyUtility(loadChartUtils);
579
585
  var lazyFormUtils = createLazyUtility(loadFormUtils);
580
586
  var lazyCSVUtils = createLazyUtility(loadCSVUtils);
581
587
 
582
- // src/utils/lazyLoad.tsx
588
+ // src/utils/dynamic/lazyLoad.tsx
583
589
  import { Suspense, lazy } from "react";
584
590
  import { jsx } from "react/jsx-runtime";
585
591
  function createLazyComponent(importFn, componentName, options = {}) {
@@ -596,11 +602,11 @@ function createLazyComponent(importFn, componentName, options = {}) {
596
602
  return WrappedComponent;
597
603
  }
598
604
  var LazyDataTable = createLazyComponent(
599
- () => import("./DataTable-A36PJG6N.js").then((module) => ({ default: module.DataTable })),
605
+ () => import("./DataTable-6M4L6BI2.js").then((module) => ({ default: module.DataTable })),
600
606
  "DataTable"
601
607
  );
602
608
 
603
- // src/utils/permissionUtils.ts
609
+ // src/utils/permissions/permissionUtils.ts
604
610
  function transformPermissionMapToBoolean(permissions) {
605
611
  const result = {};
606
612
  Object.entries(permissions).forEach(([key, value]) => {
@@ -625,7 +631,7 @@ function hasAllPermissions(permissions, permissionList) {
625
631
  return permissionList.every((permission) => hasPermission(permissions, permission));
626
632
  }
627
633
 
628
- // src/utils/permissionTypes.ts
634
+ // src/utils/permissions/permissionTypes.ts
629
635
  var PermissionType = /* @__PURE__ */ ((PermissionType2) => {
630
636
  PermissionType2["READ"] = "read";
631
637
  PermissionType2["WRITE"] = "write";
@@ -651,52 +657,7 @@ function parsePermission(permission) {
651
657
  };
652
658
  }
653
659
 
654
- // src/utils/schemaUtils.ts
655
- import { z as z3 } from "zod";
656
- function pickSchema(schema, keys) {
657
- const shape = Object.entries(schema.shape).filter(([key]) => keys.includes(key)).reduce((acc, [key, value]) => {
658
- acc[key] = value;
659
- return acc;
660
- }, {});
661
- return z3.object(shape);
662
- }
663
- function combineSchemas(schemas) {
664
- return schemas.reduce(
665
- (merged, schema) => merged.merge(schema),
666
- z3.object({})
667
- );
668
- }
669
-
670
- // src/utils/securityMonitor.ts
671
- var SecurityMonitor = class {
672
- constructor() {
673
- this.events = [];
674
- }
675
- logEvent(event) {
676
- const eventWithId = {
677
- ...event,
678
- id: Math.random().toString(36).substr(2, 9),
679
- timestamp: Date.now()
680
- };
681
- this.events.push(eventWithId);
682
- }
683
- getEvents() {
684
- return [...this.events];
685
- }
686
- clearEvents() {
687
- this.events = [];
688
- }
689
- createAlert(alert) {
690
- return {
691
- ...alert,
692
- id: Math.random().toString(36).substr(2, 9),
693
- timestamp: /* @__PURE__ */ new Date()
694
- };
695
- }
696
- };
697
- var securityMonitor = new SecurityMonitor();
698
-
699
- // src/utils/audit.ts
660
+ // src/utils/audit/audit.ts
700
661
  var AuditLogger = class {
701
662
  constructor() {
702
663
  this.events = [];
@@ -777,7 +738,7 @@ function logAuditEvent(action, user, details) {
777
738
  });
778
739
  }
779
740
 
780
- // src/utils/deviceFingerprint.ts
741
+ // src/utils/device/deviceFingerprint.ts
781
742
  init_secureStorage();
782
743
  function generateDeviceFingerprint() {
783
744
  try {
@@ -908,33 +869,37 @@ function generateFallbackFingerprint() {
908
869
  // src/utils/index.ts
909
870
  init_organisationContext();
910
871
  export {
911
- CSP_DIRECTIVES,
872
+ CachedAppIdResolver,
912
873
  DebugLogger,
913
874
  LazyDataTable,
875
+ LogLevel,
876
+ Logger,
914
877
  PERFORMANCE_BUDGETS,
915
878
  PERFORMANCE_THRESHOLDS,
916
879
  PermissionType,
917
- RateLimiter,
918
880
  auditLog,
919
881
  auditLogger,
920
882
  bundleAnalyzer,
883
+ cachedAppIdResolver,
921
884
  clearOrganisationContext,
922
885
  cn,
923
886
  combineSchemas,
924
887
  createLazyComponent,
925
888
  createLazyUtility,
889
+ createLogger,
926
890
  createPerformanceBenchmark,
927
891
  deepMerge,
928
- emailSchema,
892
+ emailSchema3 as emailSchema,
929
893
  formatCompactNumber,
930
894
  formatCurrency,
931
895
  formatDate,
932
896
  formatFileSize,
933
897
  formatNumber,
934
898
  formatPercent,
935
- generateCSPHeader,
936
899
  generateDeviceFingerprint,
937
900
  getAppConfig,
901
+ getAppId,
902
+ getAppIds,
938
903
  getAppNameFromBuildTime,
939
904
  getAppNameFromEnvironment,
940
905
  getAppNameFromGlobal,
@@ -969,29 +934,24 @@ export {
969
934
  logAuthEvent,
970
935
  logPermissionEvent,
971
936
  logSecurityEvent2 as logSecurityEvent,
937
+ logger,
972
938
  matchesPattern,
973
939
  measureRenderPerformance,
974
- nameSchema,
940
+ nameSchema3 as nameSchema,
975
941
  parsePermission,
976
- passwordSchema,
942
+ passwordSchema2 as passwordSchema,
977
943
  performanceBudgetMonitor,
978
- phoneSchema,
944
+ phoneSchema3 as phoneSchema,
979
945
  pickSchema,
980
- sanitizeEmail,
981
- sanitizeFileName,
982
946
  sanitizeFormData,
983
- sanitizePhoneNumber,
984
- sanitizeSqlInput,
985
- sanitizeUrl,
986
947
  sanitizeUserInput,
987
- sanitizeUserInput_deprecated,
988
948
  securityMonitor,
989
949
  setAppConfig,
990
950
  setOrganisationContext,
991
951
  setRBACAppName,
992
952
  trackDynamicImport,
993
953
  transformPermissionMapToBoolean,
994
- urlSchema,
954
+ urlSchema3 as urlSchema,
995
955
  useComponentPerformance,
996
956
  useSessionTracking,
997
957
  usernameSchema,