@jmruthers/pace-core 0.5.184 → 0.5.186

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 (319) hide show
  1. package/CHANGELOG.md +38 -0
  2. package/README.md +60 -1
  3. package/core-usage-manifest.json +312 -0
  4. package/dist/{DataTable-QAB34V6K.js → DataTable-IX2NBUTP.js} +6 -6
  5. package/dist/{DataTable-Bz8ffqyA.d.ts → DataTable-Z9NLVJh0.d.ts} +1 -1
  6. package/dist/{index-Bl--n7-T.d.ts → PublicPageProvider-DIzEzwKl.d.ts} +23 -10
  7. package/dist/{UnifiedAuthProvider-7F6T4B6K.js → UnifiedAuthProvider-A4BCQRJY.js} +4 -2
  8. package/dist/{UnifiedAuthProvider-F86d7dSi.d.ts → UnifiedAuthProvider-BG0AL5eE.d.ts} +2 -1
  9. package/dist/{api-ROMBCNKU.js → api-BMFCXVQX.js} +2 -2
  10. package/dist/{chunk-RA3JUFMW.js → chunk-445GEP27.js} +154 -4
  11. package/dist/{chunk-RA3JUFMW.js.map → chunk-445GEP27.js.map} +1 -1
  12. package/dist/{chunk-W22JP75J.js → chunk-DAGICKHT.js} +9 -7
  13. package/dist/chunk-DAGICKHT.js.map +1 -0
  14. package/dist/{chunk-FUEYYMX5.js → chunk-FXFJRTKI.js} +24 -3
  15. package/dist/chunk-FXFJRTKI.js.map +1 -0
  16. package/dist/{chunk-CSOFYHAG.js → chunk-GRIQLQ52.js} +374 -60
  17. package/dist/chunk-GRIQLQ52.js.map +1 -0
  18. package/dist/{chunk-NQPMQGS2.js → chunk-HDCUMOOI.js} +497 -399
  19. package/dist/chunk-HDCUMOOI.js.map +1 -0
  20. package/dist/chunk-HESYZWZW.js +388 -0
  21. package/dist/chunk-HESYZWZW.js.map +1 -0
  22. package/dist/{chunk-QUVSNGIP.js → chunk-HGPQUCBC.js} +34 -9
  23. package/dist/{chunk-QUVSNGIP.js.map → chunk-HGPQUCBC.js.map} +1 -1
  24. package/dist/{chunk-PWAHJW4G.js → chunk-OALXJH4Y.js} +86 -33
  25. package/dist/chunk-OALXJH4Y.js.map +1 -0
  26. package/dist/{chunk-MI7HBHN3.js → chunk-TC7D3CR3.js} +89 -9
  27. package/dist/chunk-TC7D3CR3.js.map +1 -0
  28. package/dist/chunk-THRPYOFK.js +215 -0
  29. package/dist/chunk-THRPYOFK.js.map +1 -0
  30. package/dist/{chunk-M7W4CP3M.js → chunk-U6WNSFX5.js} +2 -1
  31. package/dist/chunk-U6WNSFX5.js.map +1 -0
  32. package/dist/{chunk-UHNYIBXL.js → chunk-UQWSHFVX.js} +1 -1
  33. package/dist/chunk-UQWSHFVX.js.map +1 -0
  34. package/dist/{chunk-QCDXODCA.js → chunk-XAUHJD3L.js} +2 -2
  35. package/dist/components.d.ts +182 -6
  36. package/dist/components.js +157 -11
  37. package/dist/components.js.map +1 -1
  38. package/dist/{database.generated-CBmg2950.d.ts → database.generated-DI89OQeI.d.ts} +63 -9
  39. package/dist/eslint-rules/pace-core-compliance.cjs +406 -0
  40. package/dist/{file-reference-D06mEEWW.d.ts → file-reference-PRTSLxKx.d.ts} +10 -1
  41. package/dist/hooks.d.ts +52 -15
  42. package/dist/hooks.js +12 -22
  43. package/dist/hooks.js.map +1 -1
  44. package/dist/index.d.ts +12 -12
  45. package/dist/index.js +82 -18
  46. package/dist/index.js.map +1 -1
  47. package/dist/providers.d.ts +1 -1
  48. package/dist/providers.js +3 -1
  49. package/dist/rbac/index.d.ts +206 -15
  50. package/dist/rbac/index.js +28 -6
  51. package/dist/timezone-_pgH8qrY.d.ts +530 -0
  52. package/dist/{types-_x1f4QBF.d.ts → types-DUyCRSTj.d.ts} +1 -1
  53. package/dist/types.d.ts +2 -2
  54. package/dist/types.js +1 -1
  55. package/dist/{usePublicRouteParams-JJczomYq.d.ts → usePublicRouteParams-D71QLlg4.d.ts} +114 -3
  56. package/dist/utils.d.ts +110 -152
  57. package/dist/utils.js +128 -138
  58. package/dist/utils.js.map +1 -1
  59. package/docs/api/README.md +60 -1
  60. package/docs/api/classes/ColumnFactory.md +1 -1
  61. package/docs/api/classes/ErrorBoundary.md +1 -1
  62. package/docs/api/classes/InvalidScopeError.md +1 -1
  63. package/docs/api/classes/Logger.md +178 -0
  64. package/docs/api/classes/MissingUserContextError.md +1 -1
  65. package/docs/api/classes/OrganisationContextRequiredError.md +1 -1
  66. package/docs/api/classes/PermissionDeniedError.md +1 -1
  67. package/docs/api/classes/RBACAuditManager.md +2 -2
  68. package/docs/api/classes/RBACCache.md +1 -1
  69. package/docs/api/classes/RBACEngine.md +2 -2
  70. package/docs/api/classes/RBACError.md +1 -1
  71. package/docs/api/classes/RBACNotInitializedError.md +1 -1
  72. package/docs/api/classes/SecureSupabaseClient.md +5 -5
  73. package/docs/api/classes/StorageUtils.md +1 -1
  74. package/docs/api/enums/FileCategory.md +1 -1
  75. package/docs/api/enums/LogLevel.md +54 -0
  76. package/docs/api/enums/RBACErrorCode.md +1 -1
  77. package/docs/api/enums/RPCFunction.md +1 -1
  78. package/docs/api/interfaces/AggregateConfig.md +1 -1
  79. package/docs/api/interfaces/BadgeProps.md +1 -1
  80. package/docs/api/interfaces/ButtonProps.md +1 -1
  81. package/docs/api/interfaces/CalendarProps.md +18 -2
  82. package/docs/api/interfaces/CardProps.md +1 -1
  83. package/docs/api/interfaces/ColorPalette.md +1 -1
  84. package/docs/api/interfaces/ColorShade.md +1 -1
  85. package/docs/api/interfaces/ComplianceResult.md +30 -0
  86. package/docs/api/interfaces/DataAccessRecord.md +1 -1
  87. package/docs/api/interfaces/DataRecord.md +1 -1
  88. package/docs/api/interfaces/DataTableAction.md +1 -1
  89. package/docs/api/interfaces/DataTableColumn.md +1 -1
  90. package/docs/api/interfaces/DataTableProps.md +1 -1
  91. package/docs/api/interfaces/DataTableToolbarButton.md +1 -1
  92. package/docs/api/interfaces/DatabaseComplianceResult.md +85 -0
  93. package/docs/api/interfaces/DatabaseIssue.md +41 -0
  94. package/docs/api/interfaces/EmptyStateConfig.md +1 -1
  95. package/docs/api/interfaces/EnhancedNavigationMenuProps.md +1 -1
  96. package/docs/api/interfaces/EventAppRoleData.md +6 -6
  97. package/docs/api/interfaces/ExportColumn.md +1 -1
  98. package/docs/api/interfaces/ExportOptions.md +1 -1
  99. package/docs/api/interfaces/FileDisplayProps.md +1 -1
  100. package/docs/api/interfaces/FileMetadata.md +1 -1
  101. package/docs/api/interfaces/FileReference.md +1 -1
  102. package/docs/api/interfaces/FileSizeLimits.md +1 -1
  103. package/docs/api/interfaces/FileUploadOptions.md +48 -8
  104. package/docs/api/interfaces/FileUploadProps.md +46 -13
  105. package/docs/api/interfaces/FooterProps.md +1 -1
  106. package/docs/api/interfaces/FormFieldProps.md +1 -1
  107. package/docs/api/interfaces/FormProps.md +1 -1
  108. package/docs/api/interfaces/GrantEventAppRoleParams.md +9 -9
  109. package/docs/api/interfaces/InactivityWarningModalProps.md +1 -1
  110. package/docs/api/interfaces/InputProps.md +1 -1
  111. package/docs/api/interfaces/LabelProps.md +1 -1
  112. package/docs/api/interfaces/LoggerConfig.md +62 -0
  113. package/docs/api/interfaces/LoginFormProps.md +1 -1
  114. package/docs/api/interfaces/NavigationAccessRecord.md +1 -1
  115. package/docs/api/interfaces/NavigationContextType.md +1 -1
  116. package/docs/api/interfaces/NavigationGuardProps.md +1 -1
  117. package/docs/api/interfaces/NavigationItem.md +1 -1
  118. package/docs/api/interfaces/NavigationMenuProps.md +1 -1
  119. package/docs/api/interfaces/NavigationProviderProps.md +1 -1
  120. package/docs/api/interfaces/Organisation.md +1 -1
  121. package/docs/api/interfaces/OrganisationContextType.md +1 -1
  122. package/docs/api/interfaces/OrganisationMembership.md +1 -1
  123. package/docs/api/interfaces/OrganisationProviderProps.md +1 -1
  124. package/docs/api/interfaces/OrganisationSecurityError.md +1 -1
  125. package/docs/api/interfaces/PaceAppLayoutProps.md +36 -23
  126. package/docs/api/interfaces/PaceLoginPageProps.md +1 -1
  127. package/docs/api/interfaces/PageAccessRecord.md +1 -1
  128. package/docs/api/interfaces/PagePermissionContextType.md +1 -1
  129. package/docs/api/interfaces/PagePermissionGuardProps.md +11 -11
  130. package/docs/api/interfaces/PagePermissionProviderProps.md +1 -1
  131. package/docs/api/interfaces/PaletteData.md +1 -1
  132. package/docs/api/interfaces/PermissionEnforcerProps.md +1 -1
  133. package/docs/api/interfaces/ProgressProps.md +1 -1
  134. package/docs/api/interfaces/ProtectedRouteProps.md +6 -6
  135. package/docs/api/interfaces/PublicPageFooterProps.md +1 -1
  136. package/docs/api/interfaces/PublicPageHeaderProps.md +1 -1
  137. package/docs/api/interfaces/PublicPageLayoutProps.md +1 -1
  138. package/docs/api/interfaces/QuickFix.md +52 -0
  139. package/docs/api/interfaces/RBACAccessValidateParams.md +1 -1
  140. package/docs/api/interfaces/RBACAccessValidateResult.md +1 -1
  141. package/docs/api/interfaces/RBACAuditLogParams.md +1 -1
  142. package/docs/api/interfaces/RBACAuditLogResult.md +1 -1
  143. package/docs/api/interfaces/RBACConfig.md +4 -4
  144. package/docs/api/interfaces/RBACContext.md +1 -1
  145. package/docs/api/interfaces/RBACLogger.md +1 -1
  146. package/docs/api/interfaces/RBACPageAccessCheckParams.md +1 -1
  147. package/docs/api/interfaces/RBACPermissionCheckParams.md +1 -1
  148. package/docs/api/interfaces/RBACPermissionCheckResult.md +1 -1
  149. package/docs/api/interfaces/RBACPermissionsGetParams.md +1 -1
  150. package/docs/api/interfaces/RBACPermissionsGetResult.md +1 -1
  151. package/docs/api/interfaces/RBACResult.md +1 -1
  152. package/docs/api/interfaces/RBACRoleGrantParams.md +1 -1
  153. package/docs/api/interfaces/RBACRoleGrantResult.md +1 -1
  154. package/docs/api/interfaces/RBACRoleRevokeParams.md +1 -1
  155. package/docs/api/interfaces/RBACRoleRevokeResult.md +1 -1
  156. package/docs/api/interfaces/RBACRoleValidateParams.md +1 -1
  157. package/docs/api/interfaces/RBACRoleValidateResult.md +1 -1
  158. package/docs/api/interfaces/RBACRolesListParams.md +1 -1
  159. package/docs/api/interfaces/RBACRolesListResult.md +1 -1
  160. package/docs/api/interfaces/RBACSessionTrackParams.md +1 -1
  161. package/docs/api/interfaces/RBACSessionTrackResult.md +1 -1
  162. package/docs/api/interfaces/ResourcePermissions.md +1 -1
  163. package/docs/api/interfaces/RevokeEventAppRoleParams.md +7 -7
  164. package/docs/api/interfaces/RoleBasedRouterContextType.md +1 -1
  165. package/docs/api/interfaces/RoleBasedRouterProps.md +1 -1
  166. package/docs/api/interfaces/RoleManagementResult.md +5 -5
  167. package/docs/api/interfaces/RouteAccessRecord.md +1 -1
  168. package/docs/api/interfaces/RouteConfig.md +1 -1
  169. package/docs/api/interfaces/RuntimeComplianceResult.md +55 -0
  170. package/docs/api/interfaces/SecureDataContextType.md +1 -1
  171. package/docs/api/interfaces/SecureDataProviderProps.md +1 -1
  172. package/docs/api/interfaces/SessionRestorationLoaderProps.md +1 -1
  173. package/docs/api/interfaces/SetupIssue.md +41 -0
  174. package/docs/api/interfaces/StorageConfig.md +1 -1
  175. package/docs/api/interfaces/StorageFileInfo.md +1 -1
  176. package/docs/api/interfaces/StorageFileMetadata.md +1 -1
  177. package/docs/api/interfaces/StorageListOptions.md +1 -1
  178. package/docs/api/interfaces/StorageListResult.md +1 -1
  179. package/docs/api/interfaces/StorageUploadOptions.md +1 -1
  180. package/docs/api/interfaces/StorageUploadResult.md +1 -1
  181. package/docs/api/interfaces/StorageUrlOptions.md +1 -1
  182. package/docs/api/interfaces/StyleImport.md +1 -1
  183. package/docs/api/interfaces/SwitchProps.md +1 -1
  184. package/docs/api/interfaces/TabsContentProps.md +1 -1
  185. package/docs/api/interfaces/TabsListProps.md +1 -1
  186. package/docs/api/interfaces/TabsProps.md +1 -1
  187. package/docs/api/interfaces/TabsTriggerProps.md +1 -1
  188. package/docs/api/interfaces/TextareaProps.md +1 -1
  189. package/docs/api/interfaces/ToastActionElement.md +1 -1
  190. package/docs/api/interfaces/ToastProps.md +1 -1
  191. package/docs/api/interfaces/UnifiedAuthContextType.md +1 -1
  192. package/docs/api/interfaces/UnifiedAuthProviderProps.md +1 -1
  193. package/docs/api/interfaces/UseFormDialogOptions.md +62 -0
  194. package/docs/api/interfaces/UseFormDialogReturn.md +117 -0
  195. package/docs/api/interfaces/UseInactivityTrackerOptions.md +1 -1
  196. package/docs/api/interfaces/UseInactivityTrackerReturn.md +1 -1
  197. package/docs/api/interfaces/UsePublicEventLogoOptions.md +2 -2
  198. package/docs/api/interfaces/UsePublicEventLogoReturn.md +1 -1
  199. package/docs/api/interfaces/UsePublicEventOptions.md +1 -1
  200. package/docs/api/interfaces/UsePublicEventReturn.md +1 -1
  201. package/docs/api/interfaces/UsePublicFileDisplayOptions.md +2 -2
  202. package/docs/api/interfaces/UsePublicFileDisplayReturn.md +1 -1
  203. package/docs/api/interfaces/UsePublicRouteParamsReturn.md +1 -1
  204. package/docs/api/interfaces/UseResolvedScopeOptions.md +2 -2
  205. package/docs/api/interfaces/UseResolvedScopeReturn.md +1 -1
  206. package/docs/api/interfaces/UseResourcePermissionsOptions.md +1 -1
  207. package/docs/api/interfaces/UserEventAccess.md +1 -1
  208. package/docs/api/interfaces/UserMenuProps.md +1 -1
  209. package/docs/api/interfaces/UserProfile.md +1 -1
  210. package/docs/api/modules.md +746 -50
  211. package/docs/api-reference/components.md +26 -12
  212. package/docs/api-reference/hooks.md +111 -0
  213. package/docs/api-reference/rpc-functions.md +1 -1
  214. package/docs/api-reference/utilities.md +184 -0
  215. package/docs/getting-started/installation-guide.md +75 -16
  216. package/docs/getting-started/quick-start.md +61 -11
  217. package/docs/implementation-guides/authentication.md +88 -12
  218. package/docs/implementation-guides/file-reference-system.md +26 -3
  219. package/docs/implementation-guides/file-upload-storage.md +30 -1
  220. package/docs/rbac/README.md +1 -0
  221. package/docs/rbac/compliance/compliance-guide.md +544 -0
  222. package/docs/rbac/getting-started.md +158 -33
  223. package/docs/standards/pace-core-compliance.md +432 -0
  224. package/eslint-config-pace-core.cjs +93 -0
  225. package/package.json +15 -3
  226. package/scripts/analyze-bundle.js +232 -0
  227. package/scripts/build-css.js +56 -0
  228. package/scripts/build-docs-incremental.js +1015 -0
  229. package/scripts/check-pace-core-compliance.cjs +2353 -0
  230. package/scripts/check-pace-core-compliance.js +512 -0
  231. package/scripts/generate-docs.js +157 -0
  232. package/scripts/setup-build-cache.js +73 -0
  233. package/scripts/utils/command-runner.js +131 -0
  234. package/scripts/utils/env.js +33 -0
  235. package/scripts/utils/index.js +10 -0
  236. package/scripts/utils/logger.js +88 -0
  237. package/scripts/utils/path-helpers.js +37 -0
  238. package/scripts/validate-formats.js +133 -0
  239. package/scripts/validate-master.js +155 -0
  240. package/scripts/validate-pre-publish.js +140 -0
  241. package/scripts/validate-theme.js +142 -0
  242. package/src/components/Calendar/Calendar.tsx +8 -1
  243. package/src/components/Card/Card.tsx +47 -8
  244. package/src/components/DatePickerWithTimezone/DatePickerWithTimezone.test.tsx +314 -0
  245. package/src/components/DatePickerWithTimezone/DatePickerWithTimezone.tsx +126 -0
  246. package/src/components/DatePickerWithTimezone/README.md +135 -0
  247. package/src/components/DatePickerWithTimezone/index.ts +10 -0
  248. package/src/components/DateTimeField/DateTimeField.test.tsx +358 -0
  249. package/src/components/DateTimeField/DateTimeField.tsx +232 -0
  250. package/src/components/DateTimeField/README.md +148 -0
  251. package/src/components/DateTimeField/index.ts +10 -0
  252. package/src/components/FileUpload/FileUpload.test.tsx +2 -0
  253. package/src/components/FileUpload/FileUpload.tsx +10 -1
  254. package/src/components/Header/Header.test.tsx +47 -18
  255. package/src/components/Header/Header.tsx +22 -7
  256. package/src/components/PaceAppLayout/PaceAppLayout.tsx +29 -20
  257. package/src/components/PaceAppLayout/README.md +9 -0
  258. package/src/components/ProtectedRoute/ProtectedRoute.test.tsx +37 -8
  259. package/src/components/ProtectedRoute/ProtectedRoute.tsx +146 -5
  260. package/src/components/index.ts +8 -0
  261. package/src/eslint-rules/pace-core-compliance.cjs +406 -0
  262. package/src/eslint-rules/pace-core-compliance.js +640 -0
  263. package/src/hooks/__tests__/useFormDialog.test.ts +478 -0
  264. package/src/hooks/index.ts +5 -0
  265. package/src/hooks/useFileReference.test.ts +2 -0
  266. package/src/hooks/useFormDialog.ts +147 -0
  267. package/src/hooks/usePreventTabReload.ts +106 -0
  268. package/src/hooks/useSecureDataAccess.ts +2 -2
  269. package/src/index.ts +27 -0
  270. package/src/providers/services/OrganisationServiceProvider.tsx +6 -5
  271. package/src/providers/services/UnifiedAuthProvider.tsx +24 -3
  272. package/src/rbac/__tests__/rbac-role-isolation.test.ts +456 -0
  273. package/src/rbac/__tests__/scenarios.user-role.test.tsx +3 -0
  274. package/src/rbac/compliance/database-validator.ts +165 -0
  275. package/src/rbac/compliance/index.ts +38 -0
  276. package/src/rbac/compliance/quick-fix-suggestions.ts +209 -0
  277. package/src/rbac/compliance/runtime-compliance.ts +77 -0
  278. package/src/rbac/compliance/setup-validator.ts +131 -0
  279. package/src/rbac/components/PagePermissionGuard.tsx +8 -64
  280. package/src/rbac/components/__tests__/PagePermissionGuard.test.tsx +35 -21
  281. package/src/rbac/docs/event-based-apps.md +285 -0
  282. package/src/rbac/errors.ts +11 -0
  283. package/src/rbac/hooks/useRoleManagement.ts +292 -12
  284. package/src/rbac/index.ts +30 -0
  285. package/src/services/OrganisationService.ts +4 -0
  286. package/src/styles/core.css +5 -5
  287. package/src/types/database.generated.ts +63 -9
  288. package/src/types/file-reference.ts +9 -0
  289. package/src/utils/__tests__/timezone.test.ts +345 -0
  290. package/src/utils/file-reference/__tests__/file-reference.test.ts +60 -4
  291. package/src/utils/file-reference/index.ts +13 -2
  292. package/src/utils/formatting/formatDateTimeTimezone.test.ts +167 -0
  293. package/src/utils/formatting/formatting.ts +179 -0
  294. package/src/utils/index.ts +27 -1
  295. package/src/utils/location/index.ts +16 -0
  296. package/src/utils/location/location.test.ts +286 -0
  297. package/src/utils/location/location.ts +175 -0
  298. package/src/utils/security/secureDataAccess.ts +1 -1
  299. package/src/utils/storage/helpers.ts +68 -0
  300. package/src/utils/timezone/index.ts +17 -0
  301. package/src/utils/timezone/timezone.test.ts +349 -0
  302. package/src/utils/timezone/timezone.ts +281 -0
  303. package/dist/chunk-CSOFYHAG.js.map +0 -1
  304. package/dist/chunk-FUEYYMX5.js.map +0 -1
  305. package/dist/chunk-HKIT6O7W.js +0 -198
  306. package/dist/chunk-HKIT6O7W.js.map +0 -1
  307. package/dist/chunk-KUEN3HFB.js +0 -94
  308. package/dist/chunk-KUEN3HFB.js.map +0 -1
  309. package/dist/chunk-M7W4CP3M.js.map +0 -1
  310. package/dist/chunk-MI7HBHN3.js.map +0 -1
  311. package/dist/chunk-NQPMQGS2.js.map +0 -1
  312. package/dist/chunk-PWAHJW4G.js.map +0 -1
  313. package/dist/chunk-UHNYIBXL.js.map +0 -1
  314. package/dist/chunk-W22JP75J.js.map +0 -1
  315. package/dist/formatting-5wETwiGF.d.ts +0 -162
  316. /package/dist/{DataTable-QAB34V6K.js.map → DataTable-IX2NBUTP.js.map} +0 -0
  317. /package/dist/{UnifiedAuthProvider-7F6T4B6K.js.map → UnifiedAuthProvider-A4BCQRJY.js.map} +0 -0
  318. /package/dist/{api-ROMBCNKU.js.map → api-BMFCXVQX.js.map} +0 -0
  319. /package/dist/{chunk-QCDXODCA.js.map → chunk-XAUHJD3L.js.map} +0 -0
package/dist/utils.js CHANGED
@@ -1,24 +1,43 @@
1
1
  import {
2
+ calculatePasswordStrength,
3
+ dateSchema,
4
+ emailSchema,
2
5
  formatCompactNumber,
3
6
  formatCurrency,
4
7
  formatDate,
8
+ formatDateOnlyForDisplay,
5
9
  formatDateTime,
10
+ formatDateTimeForDisplay,
11
+ formatDateTimeForMap,
12
+ formatDateTimeForTable,
6
13
  formatFileSize,
7
14
  formatNumber,
8
15
  formatPercent,
9
16
  formatTime,
10
17
  getAppConfig,
11
18
  getCurrentAppId,
19
+ nameSchema,
20
+ passwordSchema,
21
+ phoneSchema,
12
22
  setAppConfig,
23
+ urlSchema,
13
24
  useSessionTracking
14
- } from "./chunk-HKIT6O7W.js";
25
+ } from "./chunk-HESYZWZW.js";
15
26
  import {
16
27
  CachedAppIdResolver,
17
28
  LoadingSpinner,
18
29
  cachedAppIdResolver,
30
+ formatInTimeZone,
31
+ formatTimeInTimeZone,
32
+ fromZonedTime,
19
33
  getAppId,
20
- getAppIds
21
- } from "./chunk-KUEN3HFB.js";
34
+ getAppIds,
35
+ getTimeZoneDifference,
36
+ getTimezoneAbbreviation,
37
+ getUserTimeZone,
38
+ roundToNearestMinutes,
39
+ toZonedTime
40
+ } from "./chunk-THRPYOFK.js";
22
41
  import {
23
42
  cn,
24
43
  renderSafeHtml,
@@ -255,11 +274,11 @@ var secureEmailSchema = z.string().min(1, "Email is required").email("Invalid em
255
274
  },
256
275
  "Invalid email domain"
257
276
  ).transform((email) => sanitizeEmail(email));
258
- var emailSchema = z.string().min(1, "Email is required").email("Invalid email format");
259
- var nameSchema = z.string().min(1, "Name is required").max(100, "Name too long").regex(/^[a-zA-Z\s'-]+$/, "Name contains invalid characters");
260
- var phoneSchema = z.string().regex(/^[\+]?[1-9][\d]{0,15}$/, "Invalid phone number format");
261
- var urlSchema = z.string().url("Invalid URL format");
262
- var dateSchema = z.string().regex(/^\d{4}-\d{2}-\d{2}$/, "Invalid date format (YYYY-MM-DD)");
277
+ var emailSchema2 = z.string().min(1, "Email is required").email("Invalid email format");
278
+ var nameSchema2 = z.string().min(1, "Name is required").max(100, "Name too long").regex(/^[a-zA-Z\s'-]+$/, "Name contains invalid characters");
279
+ var phoneSchema2 = z.string().regex(/^[\+]?[1-9][\d]{0,15}$/, "Invalid phone number format");
280
+ var urlSchema2 = z.string().url("Invalid URL format");
281
+ var dateSchema2 = z.string().regex(/^\d{4}-\d{2}-\d{2}$/, "Invalid date format (YYYY-MM-DD)");
263
282
  var secureLoginSchema2 = z.object({
264
283
  email: secureEmailSchema,
265
284
  password: z.string().min(1, "Password is required")
@@ -269,10 +288,10 @@ var secureLoginSchema2 = z.object({
269
288
  function validateUserInput(schema, data, sanitizationRules) {
270
289
  return sanitizeFormData(data, schema, sanitizationRules);
271
290
  }
272
- 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"));
273
- 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");
291
+ var emailSchema3 = z2.string().transform((email) => email.toLowerCase().trim()).pipe(z2.string().min(1, "Email is required").email("Invalid email format").max(254, "Email too long"));
292
+ var passwordSchema2 = 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");
274
293
  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"));
275
- var nameSchema2 = z2.string().min(1, "Name is required").max(100, "Name too long").refine((name) => {
294
+ var nameSchema3 = z2.string().min(1, "Name is required").max(100, "Name too long").refine((name) => {
276
295
  const dangerousPatterns = [
277
296
  /<script/i,
278
297
  /<img/i,
@@ -287,11 +306,11 @@ var nameSchema2 = z2.string().min(1, "Name is required").max(100, "Name too long
287
306
  maxLength: 100,
288
307
  trim: true
289
308
  }));
290
- 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) => {
309
+ var phoneSchema3 = 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) => {
291
310
  const digitsOnly = phone.replace(/\D/g, "");
292
311
  return digitsOnly.length >= 10 && digitsOnly.length <= 15;
293
312
  }, "Phone number must be between 10 and 15 digits");
294
- var urlSchema2 = z2.string().min(1, "URL is required").max(2048, "URL too long").refine((url) => {
313
+ var urlSchema3 = z2.string().min(1, "URL is required").max(2048, "URL too long").refine((url) => {
295
314
  try {
296
315
  const parsed = new URL(url);
297
316
  return ["http:", "https:"].includes(parsed.protocol);
@@ -309,17 +328,6 @@ var urlSchema2 = z2.string().min(1, "URL is required").max(2048, "URL too long")
309
328
  return !dangerousPatterns.some((pattern) => pattern.test(url));
310
329
  }, "URL contains invalid protocol");
311
330
 
312
- // src/utils/validation/common.ts
313
- import { z as z3 } from "zod";
314
- var emailSchema3 = z3.string().min(1, "Email is required").email("Invalid email format").max(254, "Email too long");
315
- var nameSchema3 = z3.string().min(1, "Name is required").max(100, "Name too long").regex(/^[a-zA-Z\s'-]+$/, "Name contains invalid characters");
316
- var phoneSchema3 = z3.string().regex(/^\+?[\d\s\-\(\)]+$/, "Invalid phone number format").min(10, "Phone number too short").max(20, "Phone number too long");
317
- var urlSchema3 = z3.string().url("Invalid URL format").max(2048, "URL too long");
318
- var dateSchema2 = z3.string().regex(/^\d{4}-\d{2}-\d{2}$/, "Date must be in YYYY-MM-DD format").refine((date) => {
319
- const parsed = new Date(date);
320
- return !isNaN(parsed.getTime());
321
- }, "Invalid date");
322
-
323
331
  // src/utils/validation/csrf.ts
324
332
  var CSRFManager = class {
325
333
  constructor() {
@@ -474,7 +482,7 @@ async function getCSRFToken(sessionId) {
474
482
  }
475
483
 
476
484
  // src/utils/validation/sqlInjectionProtection.ts
477
- import { z as z4 } from "zod";
485
+ import { z as z3 } from "zod";
478
486
  var SQL_INJECTION_PATTERNS = [
479
487
  /(\b(SELECT|INSERT|UPDATE|DELETE|DROP|CREATE|ALTER|EXEC|EXECUTE|UNION|SCRIPT|JAVASCRIPT)\b)/i,
480
488
  /(\'|(\\\')|(\'\')|(\"|(\\\")|(\\")))|(\\x)|(\\u)/i,
@@ -496,13 +504,13 @@ var SQL_INJECTION_PATTERNS = [
496
504
  /(%3B|;).+?(%44|%64|d)(%52|%72|r)(%4F|%6F|o)(%50|%70|p)/i
497
505
  ];
498
506
  var DANGEROUS_CHARS = /[';\"\\%]/g;
499
- var searchQuerySchema = z4.string().max(500, "Search query too long").refine(
507
+ var searchQuerySchema = z3.string().max(500, "Search query too long").refine(
500
508
  (query) => {
501
509
  return !SQL_INJECTION_PATTERNS.some((pattern) => pattern.test(query));
502
510
  },
503
511
  "Invalid characters detected in search query"
504
512
  ).transform((query) => sanitizeSearchQuery(query));
505
- var sqlIdentifierSchema = z4.string().min(1, "Identifier cannot be empty").max(63, "Identifier too long").regex(/^[a-zA-Z_][a-zA-Z0-9_]*$/, "Invalid identifier format").refine(
513
+ var sqlIdentifierSchema = z3.string().min(1, "Identifier cannot be empty").max(63, "Identifier too long").regex(/^[a-zA-Z_][a-zA-Z0-9_]*$/, "Invalid identifier format").refine(
506
514
  (identifier) => {
507
515
  const reservedWords = [
508
516
  "SELECT",
@@ -524,8 +532,8 @@ var sqlIdentifierSchema = z4.string().min(1, "Identifier cannot be empty").max(6
524
532
  },
525
533
  "Identifier cannot be a reserved SQL keyword"
526
534
  );
527
- var orderBySchema = z4.string().regex(/^[a-zA-Z_][a-zA-Z0-9_]*(\s+(ASC|DESC|asc|desc))?$/, "Invalid order by format");
528
- var limitOffsetSchema = z4.number().int("Must be an integer").min(0, "Must be non-negative").max(1e3, "Limit too large");
535
+ var orderBySchema = z3.string().regex(/^[a-zA-Z_][a-zA-Z0-9_]*(\s+(ASC|DESC|asc|desc))?$/, "Invalid order by format");
536
+ var limitOffsetSchema = z3.number().int("Must be an integer").min(0, "Must be non-negative").max(1e3, "Limit too large");
529
537
  function sanitizeSearchQuery(query) {
530
538
  return query.replace(DANGEROUS_CHARS, "").replace(/\s+/g, " ").trim().slice(0, 500);
531
539
  }
@@ -622,112 +630,27 @@ function detectSQLInjection(input) {
622
630
  };
623
631
  }
624
632
 
625
- // src/utils/validation/passwordSchema.ts
626
- import { z as z5 } from "zod";
627
- var COMMON_PASSWORDS = /* @__PURE__ */ new Set([
628
- "password",
629
- "123456",
630
- "123456789",
631
- "qwerty",
632
- "abc123",
633
- "password123",
634
- "admin",
635
- "letmein",
636
- "welcome",
637
- "monkey",
638
- "1234567890",
639
- "password1"
640
- ]);
641
- var WEAK_PATTERNS = [
642
- /^(.)\1+$/,
643
- // All same character
644
- /^(012|123|234|345|456|567|678|789|890|987|876|765|654|543|432|321|210)+/,
645
- // Sequential numbers
646
- /^(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
647
- // Sequential letters
648
- ];
649
- var securePasswordSchema2 = z5.string().min(8, "Password must be at least 8 characters long").max(128, "Password must not exceed 128 characters").refine(
650
- (password) => /[a-z]/.test(password),
651
- "Password must contain at least one lowercase letter"
652
- ).refine(
653
- (password) => /[A-Z]/.test(password),
654
- "Password must contain at least one uppercase letter"
655
- ).refine(
656
- (password) => /\d/.test(password),
657
- "Password must contain at least one number"
658
- ).refine(
659
- (password) => /[!@#$%^&*()_+\-=\[\]{};':"\\|,.<>\/?]/.test(password),
660
- "Password must contain at least one special character"
661
- ).refine(
662
- (password) => !COMMON_PASSWORDS.has(password.toLowerCase()),
663
- "Password is too common. Please choose a stronger password"
664
- ).refine(
665
- (password) => !WEAK_PATTERNS.some((pattern) => pattern.test(password)),
666
- "Password contains weak patterns. Please choose a more complex password"
667
- ).refine(
668
- (password) => {
669
- const keyboardPatterns = ["qwerty", "asdfgh", "zxcvbn", "1234567890"];
670
- return !keyboardPatterns.some(
671
- (pattern) => password.toLowerCase().includes(pattern)
672
- );
673
- },
674
- "Password contains keyboard patterns. Please choose a more secure password"
675
- );
676
- var passwordSchema2 = z5.string().min(6, "Password must be at least 6 characters long").max(128, "Password must not exceed 128 characters");
677
- function calculatePasswordStrength(password) {
678
- let score = 0;
679
- const feedback = [];
680
- if (password.length >= 8) score += 20;
681
- else if (password.length >= 6) score += 10;
682
- else feedback.push("Use at least 8 characters");
683
- if (/[a-z]/.test(password)) score += 15;
684
- else feedback.push("Add lowercase letters");
685
- if (/[A-Z]/.test(password)) score += 15;
686
- else feedback.push("Add uppercase letters");
687
- if (/\d/.test(password)) score += 15;
688
- else feedback.push("Add numbers");
689
- if (/[!@#$%^&*()_+\-=\[\]{};':"\\|,.<>\/?]/.test(password)) score += 15;
690
- else feedback.push("Add special characters");
691
- if (password.length >= 12) score += 10;
692
- if (/[^a-zA-Z0-9]/.test(password)) score += 10;
693
- if (COMMON_PASSWORDS.has(password.toLowerCase())) {
694
- score -= 30;
695
- feedback.push("Avoid common passwords");
696
- }
697
- if (WEAK_PATTERNS.some((pattern) => pattern.test(password))) {
698
- score -= 20;
699
- feedback.push("Avoid predictable patterns");
700
- }
701
- let level;
702
- if (score < 30) level = "very-weak";
703
- else if (score < 50) level = "weak";
704
- else if (score < 70) level = "fair";
705
- else if (score < 90) level = "good";
706
- else level = "strong";
707
- return { score: Math.max(0, Math.min(100, score)), feedback, level };
708
- }
709
-
710
633
  // src/utils/validation/user.ts
711
- import { z as z6 } from "zod";
712
- var userProfileSchema2 = z6.object({
713
- name: nameSchema3,
714
- email: emailSchema3,
715
- phone: z6.string().optional(),
716
- website: z6.string().url().optional(),
717
- bio: z6.string().max(500).optional()
634
+ import { z as z4 } from "zod";
635
+ var userProfileSchema2 = z4.object({
636
+ name: nameSchema,
637
+ email: emailSchema,
638
+ phone: z4.string().optional(),
639
+ website: z4.string().url().optional(),
640
+ bio: z4.string().max(500).optional()
718
641
  });
719
- var userSettingsSchema = z6.object({
720
- notifications: z6.object({
721
- email: z6.boolean(),
722
- push: z6.boolean()
642
+ var userSettingsSchema = z4.object({
643
+ notifications: z4.object({
644
+ email: z4.boolean(),
645
+ push: z4.boolean()
723
646
  }),
724
- language: z6.string()
647
+ language: z4.string()
725
648
  });
726
- var userPreferencesSchema = z6.object({
727
- displayName: nameSchema3,
728
- timezone: z6.string(),
729
- dateFormat: z6.string(),
730
- currency: z6.string()
649
+ var userPreferencesSchema = z4.object({
650
+ displayName: nameSchema,
651
+ timezone: z4.string(),
652
+ dateFormat: z4.string(),
653
+ currency: z4.string()
731
654
  });
732
655
 
733
656
  // src/utils/security/security.ts
@@ -1018,7 +941,7 @@ function createLazyComponent(importFn, componentName, options = {}) {
1018
941
  return WrappedComponent;
1019
942
  }
1020
943
  var LazyDataTable = createLazyComponent(
1021
- () => import("./DataTable-QAB34V6K.js").then((module) => ({ default: module.DataTable })),
944
+ () => import("./DataTable-IX2NBUTP.js").then((module) => ({ default: module.DataTable })),
1022
945
  "DataTable"
1023
946
  );
1024
947
 
@@ -1280,6 +1203,57 @@ function generateFallbackFingerprint() {
1280
1203
  // Low entropy for fallback
1281
1204
  };
1282
1205
  }
1206
+
1207
+ // src/utils/location/location.ts
1208
+ function formatCoordinates(coords) {
1209
+ if (!coords || typeof coords.lat !== "number" || typeof coords.lng !== "number") {
1210
+ return "N/A";
1211
+ }
1212
+ if (!isFinite(coords.lat) || !isFinite(coords.lng)) {
1213
+ return "N/A";
1214
+ }
1215
+ return `${coords.lat.toFixed(6)}, ${coords.lng.toFixed(6)}`;
1216
+ }
1217
+ function hasValidCoordinates(coords) {
1218
+ if (!coords) {
1219
+ return false;
1220
+ }
1221
+ const { lat, lng } = coords;
1222
+ if (typeof lat !== "number" || typeof lng !== "number") {
1223
+ return false;
1224
+ }
1225
+ if (!isFinite(lat) || !isFinite(lng)) {
1226
+ return false;
1227
+ }
1228
+ if (lat < -90 || lat > 90) {
1229
+ return false;
1230
+ }
1231
+ if (lng < -180 || lng > 180) {
1232
+ return false;
1233
+ }
1234
+ return true;
1235
+ }
1236
+ function areCoordinatesEqual(coords1, coords2, tolerance = 1e-4) {
1237
+ if (!coords1 && !coords2) {
1238
+ return true;
1239
+ }
1240
+ if (!coords1 || !coords2) {
1241
+ return false;
1242
+ }
1243
+ if (!hasValidCoordinates(coords1) || !hasValidCoordinates(coords2)) {
1244
+ return false;
1245
+ }
1246
+ const epsilon = 1e-10;
1247
+ const latDiff = Math.abs(coords1.lat - coords2.lat);
1248
+ const lngDiff = Math.abs(coords1.lng - coords2.lng);
1249
+ return latDiff <= tolerance + epsilon && lngDiff <= tolerance + epsilon;
1250
+ }
1251
+ function getGoogleMapsUrl(coords) {
1252
+ if (!coords || !hasValidCoordinates(coords)) {
1253
+ return "";
1254
+ }
1255
+ return `https://www.google.com/maps/search/?api=1&query=${coords.lat},${coords.lng}`;
1256
+ }
1283
1257
  export {
1284
1258
  CachedAppIdResolver,
1285
1259
  DebugLogger,
@@ -1289,6 +1263,7 @@ export {
1289
1263
  PERFORMANCE_BUDGETS,
1290
1264
  PERFORMANCE_THRESHOLDS,
1291
1265
  PermissionType,
1266
+ areCoordinatesEqual,
1292
1267
  auditLog,
1293
1268
  auditLogger,
1294
1269
  buildSafeQueryParams,
@@ -1305,19 +1280,27 @@ export {
1305
1280
  createLogger,
1306
1281
  createPerformanceBenchmark,
1307
1282
  csrfManager,
1308
- dateSchema2 as dateSchema,
1283
+ dateSchema,
1309
1284
  deepMerge,
1310
1285
  detectSQLInjection,
1311
- emailSchema3 as emailSchema,
1286
+ emailSchema,
1312
1287
  escapeLikeQuery,
1313
1288
  formatCompactNumber,
1289
+ formatCoordinates,
1314
1290
  formatCurrency,
1315
1291
  formatDate,
1292
+ formatDateOnlyForDisplay,
1316
1293
  formatDateTime,
1294
+ formatDateTimeForDisplay,
1295
+ formatDateTimeForMap,
1296
+ formatDateTimeForTable,
1317
1297
  formatFileSize,
1298
+ formatInTimeZone,
1318
1299
  formatNumber,
1319
1300
  formatPercent,
1320
1301
  formatTime,
1302
+ formatTimeInTimeZone,
1303
+ fromZonedTime,
1321
1304
  generateCSRFToken,
1322
1305
  generateDeviceFingerprint,
1323
1306
  getAppConfig,
@@ -1331,11 +1314,16 @@ export {
1331
1314
  getCurrentAppId,
1332
1315
  getCurrentAppName,
1333
1316
  getCurrentAppNameWithFallback,
1317
+ getGoogleMapsUrl,
1334
1318
  getOrganisationContext,
1335
1319
  getSecurityHeaders,
1320
+ getTimeZoneDifference,
1321
+ getTimezoneAbbreviation,
1322
+ getUserTimeZone,
1336
1323
  hasAllPermissions,
1337
1324
  hasAnyPermission,
1338
1325
  hasPermission,
1326
+ hasValidCoordinates,
1339
1327
  isEmpty,
1340
1328
  isObject,
1341
1329
  isOrganisationContextAvailable,
@@ -1363,16 +1351,17 @@ export {
1363
1351
  loginSchema,
1364
1352
  matchesPattern,
1365
1353
  measureRenderPerformance,
1366
- nameSchema3 as nameSchema,
1354
+ nameSchema,
1367
1355
  orderBySchema,
1368
1356
  parsePermission,
1369
1357
  passwordResetSchema,
1370
- passwordSchema2 as passwordSchema,
1358
+ passwordSchema,
1371
1359
  performanceBudgetMonitor,
1372
- phoneSchema3 as phoneSchema,
1360
+ phoneSchema,
1373
1361
  pickSchema,
1374
1362
  registrationSchema,
1375
1363
  renderSafeHtml,
1364
+ roundToNearestMinutes,
1376
1365
  sanitizeFilters,
1377
1366
  sanitizeFormData,
1378
1367
  sanitizeHtml,
@@ -1386,9 +1375,10 @@ export {
1386
1375
  setOrganisationContext,
1387
1376
  setRBACAppName,
1388
1377
  sqlIdentifierSchema,
1378
+ toZonedTime,
1389
1379
  trackDynamicImport,
1390
1380
  transformPermissionMapToBoolean,
1391
- urlSchema3 as urlSchema,
1381
+ urlSchema,
1392
1382
  useComponentPerformance,
1393
1383
  useSessionTracking,
1394
1384
  userPreferencesSchema,