@jmruthers/pace-core 0.5.53 → 0.5.55

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 (398) hide show
  1. package/README.md +0 -4
  2. package/dist/{DataTable-7FMFXA7A.js → DataTable-4T627QFJ.js} +11 -11
  3. package/dist/{PublicLoadingSpinner-Bq_-BeK-.d.ts → PublicLoadingSpinner-SL8WaQN7.d.ts} +2 -21
  4. package/dist/{api-H5A3H4IR.js → api-LUNF5O6M.js} +3 -3
  5. package/dist/{appConfig-BVGyuvI7.d.ts → appConfig-DjpeG6P-.d.ts} +9 -1
  6. package/dist/{appNameResolver-7GHF5ED2.js → appNameResolver-UURKN7NF.js} +2 -2
  7. package/dist/{audit-BUW3LMJB.js → audit-6TOCAMKO.js} +2 -2
  8. package/dist/{chunk-MZBUOP4P.js → chunk-5BSLGBYI.js} +4 -3
  9. package/dist/chunk-5BSLGBYI.js.map +1 -0
  10. package/dist/{chunk-I5Z3QH5X.js → chunk-66C4BSAY.js} +2 -2
  11. package/dist/{chunk-I5Z3QH5X.js.map → chunk-66C4BSAY.js.map} +1 -1
  12. package/dist/{chunk-MYP2EGHX.js → chunk-AJ2KMES7.js} +21 -14
  13. package/dist/chunk-AJ2KMES7.js.map +1 -0
  14. package/dist/{chunk-EL2O4IUX.js → chunk-AQFRLC7K.js} +16 -24
  15. package/dist/{chunk-EL2O4IUX.js.map → chunk-AQFRLC7K.js.map} +1 -1
  16. package/dist/{chunk-7BNPOCLL.js → chunk-B2WTCLCV.js} +6 -2
  17. package/dist/chunk-B2WTCLCV.js.map +1 -0
  18. package/dist/{chunk-WJARTBCT.js → chunk-D7ARGIA3.js} +16 -7
  19. package/dist/chunk-D7ARGIA3.js.map +1 -0
  20. package/dist/{chunk-NRK4AIHQ.js → chunk-KBRACSJI.js} +3 -3
  21. package/dist/{chunk-NYUJ4FJR.js → chunk-KJDPSM64.js} +7 -7
  22. package/dist/chunk-KJDPSM64.js.map +1 -0
  23. package/dist/{chunk-GWSBHC4J.js → chunk-KLPVOPRI.js} +261 -38
  24. package/dist/chunk-KLPVOPRI.js.map +1 -0
  25. package/dist/{chunk-TRIZ7IB7.js → chunk-MPQDF75X.js} +148 -288
  26. package/dist/chunk-MPQDF75X.js.map +1 -0
  27. package/dist/{chunk-MSFACPQQ.js → chunk-PAEM3OWN.js} +11 -11
  28. package/dist/{chunk-MSFACPQQ.js.map → chunk-PAEM3OWN.js.map} +1 -1
  29. package/dist/{chunk-GIO7BFE7.js → chunk-RQD3D2CO.js} +66 -169
  30. package/dist/{chunk-GIO7BFE7.js.map → chunk-RQD3D2CO.js.map} +1 -1
  31. package/dist/{chunk-YDJW5XTN.js → chunk-STT7INZR.js} +25 -1
  32. package/dist/chunk-STT7INZR.js.map +1 -0
  33. package/dist/{chunk-6MTY77WU.js → chunk-TNMXZLDR.js} +3 -3
  34. package/dist/{chunk-BC3S53OZ.js → chunk-UQE2Y64H.js} +30 -14
  35. package/dist/chunk-UQE2Y64H.js.map +1 -0
  36. package/dist/{chunk-22KLBHPS.js → chunk-W66AZIOH.js} +2 -2
  37. package/dist/chunk-W66AZIOH.js.map +1 -0
  38. package/dist/{chunk-SS3E6QLB.js → chunk-YNUBMSMV.js} +2 -2
  39. package/dist/chunk-YNUBMSMV.js.map +1 -0
  40. package/dist/{chunk-NZ655MWE.js → chunk-ZOD2ZY6X.js} +5 -4
  41. package/dist/chunk-ZOD2ZY6X.js.map +1 -0
  42. package/dist/{chunk-74C6SNEC.js → chunk-ZPK5656W.js} +3 -3
  43. package/dist/{chunk-74C6SNEC.js.map → chunk-ZPK5656W.js.map} +1 -1
  44. package/dist/components.d.ts +22 -899
  45. package/dist/components.js +436 -3118
  46. package/dist/components.js.map +1 -1
  47. package/dist/file-reference-9xUOnwyt.d.ts +70 -0
  48. package/dist/hooks.d.ts +2 -2
  49. package/dist/hooks.js +10 -10
  50. package/dist/hooks.js.map +1 -1
  51. package/dist/index.d.ts +49 -9
  52. package/dist/index.js +190 -25
  53. package/dist/index.js.map +1 -1
  54. package/dist/{organisation-CO3Sh3_D.d.ts → organisation-t-vvQC3g.d.ts} +1 -8
  55. package/dist/providers.d.ts +2 -2
  56. package/dist/providers.js +5 -5
  57. package/dist/rbac/index.d.ts +65 -46
  58. package/dist/rbac/index.js +10 -12
  59. package/dist/styles/core.css +0 -125
  60. package/dist/types.d.ts +2 -1
  61. package/dist/types.js +3 -1
  62. package/dist/types.js.map +1 -1
  63. package/dist/{usePublicRouteParams-B2OcAsur.d.ts → usePublicRouteParams-CdoFxnJK.d.ts} +1 -1
  64. package/dist/utils.d.ts +3 -4
  65. package/dist/utils.js +44 -13
  66. package/dist/utils.js.map +1 -1
  67. package/docs/FILE_REFERENCE_SYSTEM.md +440 -0
  68. package/docs/INDEX.md +7 -5
  69. package/docs/README.md +0 -1
  70. package/docs/api/README.md +0 -4
  71. package/docs/api/classes/ErrorBoundary.md +1 -1
  72. package/docs/api/classes/InvalidScopeError.md +1 -1
  73. package/docs/api/classes/MissingUserContextError.md +1 -1
  74. package/docs/api/classes/OrganisationContextRequiredError.md +1 -1
  75. package/docs/api/classes/PermissionDeniedError.md +2 -2
  76. package/docs/api/classes/PublicErrorBoundary.md +1 -1
  77. package/docs/api/classes/RBACAuditManager.md +12 -12
  78. package/docs/api/classes/RBACCache.md +1 -1
  79. package/docs/api/classes/RBACEngine.md +6 -6
  80. package/docs/api/classes/RBACError.md +1 -1
  81. package/docs/api/classes/RBACNotInitializedError.md +1 -1
  82. package/docs/api/classes/SecureSupabaseClient.md +1 -1
  83. package/docs/api/classes/StorageUtils.md +281 -0
  84. package/docs/api/interfaces/AggregateConfig.md +1 -1
  85. package/docs/api/interfaces/ButtonProps.md +1 -1
  86. package/docs/api/interfaces/CardProps.md +1 -1
  87. package/docs/api/interfaces/ColorPalette.md +1 -1
  88. package/docs/api/interfaces/ColorShade.md +1 -1
  89. package/docs/api/interfaces/DataAccessRecord.md +1 -1
  90. package/docs/api/interfaces/DataTableAction.md +1 -1
  91. package/docs/api/interfaces/DataTableColumn.md +1 -1
  92. package/docs/api/interfaces/DataTableProps.md +1 -1
  93. package/docs/api/interfaces/DataTableToolbarButton.md +1 -1
  94. package/docs/api/interfaces/EmptyStateConfig.md +1 -1
  95. package/docs/api/interfaces/EnhancedNavigationMenuProps.md +1 -1
  96. package/docs/api/interfaces/EventContextType.md +1 -1
  97. package/docs/api/interfaces/EventLogoProps.md +1 -1
  98. package/docs/api/interfaces/EventProviderProps.md +1 -1
  99. package/docs/api/interfaces/FileSizeLimits.md +1 -1
  100. package/docs/api/interfaces/FileUploadProps.md +1 -1
  101. package/docs/api/interfaces/FooterProps.md +1 -1
  102. package/docs/api/interfaces/InactivityWarningModalProps.md +1 -1
  103. package/docs/api/interfaces/InputProps.md +1 -1
  104. package/docs/api/interfaces/LabelProps.md +1 -1
  105. package/docs/api/interfaces/LoginFormProps.md +1 -1
  106. package/docs/api/interfaces/NavigationAccessRecord.md +2 -2
  107. package/docs/api/interfaces/NavigationContextType.md +1 -1
  108. package/docs/api/interfaces/NavigationGuardProps.md +1 -1
  109. package/docs/api/interfaces/NavigationItem.md +1 -1
  110. package/docs/api/interfaces/NavigationMenuProps.md +1 -1
  111. package/docs/api/interfaces/NavigationProviderProps.md +1 -1
  112. package/docs/api/interfaces/Organisation.md +1 -1
  113. package/docs/api/interfaces/OrganisationContextType.md +1 -1
  114. package/docs/api/interfaces/OrganisationMembership.md +1 -1
  115. package/docs/api/interfaces/OrganisationProviderProps.md +1 -1
  116. package/docs/api/interfaces/OrganisationSecurityError.md +1 -1
  117. package/docs/api/interfaces/PaceAppLayoutProps.md +1 -1
  118. package/docs/api/interfaces/PaceLoginPageProps.md +1 -1
  119. package/docs/api/interfaces/PageAccessRecord.md +1 -1
  120. package/docs/api/interfaces/PagePermissionContextType.md +1 -1
  121. package/docs/api/interfaces/PagePermissionGuardProps.md +1 -1
  122. package/docs/api/interfaces/PagePermissionProviderProps.md +1 -1
  123. package/docs/api/interfaces/PaletteData.md +1 -1
  124. package/docs/api/interfaces/PermissionEnforcerProps.md +4 -4
  125. package/docs/api/interfaces/PublicErrorBoundaryProps.md +1 -1
  126. package/docs/api/interfaces/PublicErrorBoundaryState.md +1 -1
  127. package/docs/api/interfaces/PublicLoadingSpinnerProps.md +1 -1
  128. package/docs/api/interfaces/PublicPageFooterProps.md +1 -1
  129. package/docs/api/interfaces/PublicPageHeaderProps.md +1 -1
  130. package/docs/api/interfaces/PublicPageLayoutProps.md +1 -1
  131. package/docs/api/interfaces/RBACConfig.md +1 -1
  132. package/docs/api/interfaces/RBACContextType.md +1 -1
  133. package/docs/api/interfaces/RBACLogger.md +1 -1
  134. package/docs/api/interfaces/RBACProviderProps.md +1 -1
  135. package/docs/api/interfaces/RoleBasedRouterContextType.md +1 -1
  136. package/docs/api/interfaces/RoleBasedRouterProps.md +1 -1
  137. package/docs/api/interfaces/RouteAccessRecord.md +2 -2
  138. package/docs/api/interfaces/RouteConfig.md +2 -2
  139. package/docs/api/interfaces/SecureDataContextType.md +1 -1
  140. package/docs/api/interfaces/SecureDataProviderProps.md +1 -1
  141. package/docs/api/interfaces/StorageConfig.md +1 -1
  142. package/docs/api/interfaces/StorageFileInfo.md +1 -1
  143. package/docs/api/interfaces/StorageFileMetadata.md +1 -1
  144. package/docs/api/interfaces/StorageListOptions.md +1 -1
  145. package/docs/api/interfaces/StorageListResult.md +1 -1
  146. package/docs/api/interfaces/StorageUploadOptions.md +1 -1
  147. package/docs/api/interfaces/StorageUploadResult.md +1 -1
  148. package/docs/api/interfaces/StorageUrlOptions.md +1 -1
  149. package/docs/api/interfaces/StyleImport.md +1 -1
  150. package/docs/api/interfaces/ToastActionElement.md +1 -1
  151. package/docs/api/interfaces/ToastProps.md +1 -1
  152. package/docs/api/interfaces/UnifiedAuthContextType.md +1 -1
  153. package/docs/api/interfaces/UnifiedAuthProviderProps.md +1 -1
  154. package/docs/api/interfaces/UseInactivityTrackerOptions.md +1 -1
  155. package/docs/api/interfaces/UseInactivityTrackerReturn.md +1 -1
  156. package/docs/api/interfaces/UsePublicEventLogoOptions.md +1 -1
  157. package/docs/api/interfaces/UsePublicEventLogoReturn.md +1 -1
  158. package/docs/api/interfaces/UsePublicEventOptions.md +1 -1
  159. package/docs/api/interfaces/UsePublicEventReturn.md +1 -1
  160. package/docs/api/interfaces/UsePublicRouteParamsReturn.md +1 -1
  161. package/docs/api/interfaces/UserEventAccess.md +1 -1
  162. package/docs/api/interfaces/UserMenuProps.md +1 -1
  163. package/docs/api/interfaces/UserProfile.md +1 -1
  164. package/docs/api/modules.md +204 -200
  165. package/docs/api-reference/components.md +141 -163
  166. package/docs/api-reference/hooks.md +347 -0
  167. package/docs/core-concepts/rbac-system.md +69 -16
  168. package/docs/getting-started/examples/basic-auth-app.md +0 -1
  169. package/docs/implementation-guides/datatable-rbac-usage.md +12 -11
  170. package/docs/implementation-guides/file-upload-storage.md +733 -0
  171. package/docs/implementation-guides/inactivity-tracking.md +779 -0
  172. package/docs/implementation-guides/organisation-security.md +748 -0
  173. package/docs/implementation-guides/public-pages-advanced.md +1022 -0
  174. package/docs/migration/MIGRATION_GUIDE.md +684 -0
  175. package/docs/migration/README.md +13 -2
  176. package/docs/migration/rbac-migration.md +73 -0
  177. package/docs/rbac/examples/rbac-rls-integration-example.md +11 -13
  178. package/docs/style-guide.md +269 -1
  179. package/package.json +1 -1
  180. package/src/__tests__/TESTING_GUIDELINES.md +331 -18
  181. package/src/__tests__/helpers/supabaseMock.ts +99 -0
  182. package/src/__tests__/rbac/PagePermissionGuard.test.tsx +10 -7
  183. package/src/__tests__/shared.ts +6 -0
  184. package/src/components/DataTable/components/ActionButtons.tsx +2 -2
  185. package/src/components/DataTable/components/DataTableCore.tsx +2 -2
  186. package/src/components/DataTable/components/UnifiedTableBody.tsx +1 -1
  187. package/src/components/DataTable/utils/debugTools.ts +2 -2
  188. package/src/components/Dialog/Dialog.test.tsx +12 -2
  189. package/src/components/ErrorBoundary/ErrorBoundary.test.tsx +6 -6
  190. package/src/components/ErrorBoundary/ErrorBoundary.tsx +2 -2
  191. package/src/components/FileDisplay.tsx +233 -0
  192. package/src/components/FileUpload.tsx +176 -0
  193. package/src/components/Footer/Footer.test.tsx +7 -7
  194. package/src/components/NavigationMenu/NavigationMenu.test.tsx +13 -6
  195. package/src/components/OrganisationSelector/OrganisationSelector.test.tsx +30 -3
  196. package/src/components/OrganisationSelector/OrganisationSelector.tsx +1 -1
  197. package/src/components/PaceAppLayout/__tests__/PaceAppLayout.rbac.test.tsx +558 -0
  198. package/src/components/PublicLayout/PublicErrorBoundary.tsx +1 -1
  199. package/src/components/PublicLayout/PublicPageDebugger.tsx +2 -2
  200. package/src/components/PublicLayout/PublicPageDiagnostic.tsx +2 -2
  201. package/src/components/PublicLayout/PublicPageProvider.tsx +2 -2
  202. package/src/components/Select/Select.test.tsx +50 -15
  203. package/src/components/SuperAdminGuard.tsx +2 -2
  204. package/src/components/__tests__/SuperAdminGuard.test.tsx +559 -0
  205. package/src/components/index.ts +0 -183
  206. package/src/hooks/__tests__/useOrganisationPermissions.unit.test.tsx +2 -2
  207. package/src/hooks/__tests__/usePermissionCache.unit.test.ts +1 -1
  208. package/src/hooks/__tests__/useRBAC.unit.test.ts +191 -138
  209. package/src/hooks/public/usePublicEvent.ts +2 -2
  210. package/src/hooks/useAppConfig.ts +3 -3
  211. package/src/hooks/useComponentPerformance.ts +1 -1
  212. package/src/hooks/useDataTablePerformance.ts +1 -1
  213. package/src/hooks/useFileReference.ts +232 -0
  214. package/src/hooks/useOrganisationPermissions.test.ts +254 -344
  215. package/src/hooks/useOrganisationPermissions.ts +15 -7
  216. package/src/hooks/useOrganisationSecurity.test.ts +390 -402
  217. package/src/hooks/usePerformanceMonitor.ts +1 -1
  218. package/src/hooks/usePermissionCache.test.ts +264 -395
  219. package/src/hooks/usePermissionCache.ts +34 -4
  220. package/src/hooks/useSecureDataAccess.test.ts +486 -0
  221. package/src/hooks/useSecureDataAccess.ts +4 -1
  222. package/src/providers/InactivityProvider.tsx +2 -2
  223. package/src/providers/OrganisationProvider.test.simple.tsx +168 -0
  224. package/src/providers/OrganisationProvider.test.tsx +168 -0
  225. package/src/providers/OrganisationProvider.tsx +18 -31
  226. package/src/providers/UnifiedAuthProvider.test.simple.tsx +205 -0
  227. package/src/providers/UnifiedAuthProvider.test.tsx +128 -0
  228. package/src/providers/__tests__/InactivityProvider.test.tsx +3 -4
  229. package/src/providers/__tests__/OrganisationProvider.test.tsx +19 -14
  230. package/src/rbac/__tests__/integration.authflow.test.tsx +123 -0
  231. package/src/rbac/__tests__/integration.navigation.test.tsx +72 -0
  232. package/src/rbac/__tests__/integration.securedata.test.tsx +92 -0
  233. package/src/rbac/__tests__/integration.smoke.test.tsx +73 -0
  234. package/src/rbac/__tests__/rbac-core.test.tsx +26 -22
  235. package/src/rbac/__tests__/rbac-engine-core-logic.test.ts +411 -0
  236. package/src/rbac/__tests__/rbac-engine-simplified.test.ts +285 -0
  237. package/src/rbac/__tests__/rbac-functions.test.ts +655 -0
  238. package/src/rbac/__tests__/rbac-integration.test.ts +532 -0
  239. package/src/rbac/__tests__/scenarios.user-role.test.tsx +196 -0
  240. package/src/rbac/api.test.ts +6 -6
  241. package/src/rbac/api.ts +2 -2
  242. package/src/rbac/audit.test.ts +485 -0
  243. package/src/rbac/audit.ts +7 -1
  244. package/src/rbac/cache-invalidation.ts +318 -0
  245. package/src/rbac/cache.test.ts +286 -0
  246. package/src/rbac/components/EnhancedNavigationMenu.test.tsx +559 -0
  247. package/src/rbac/components/EnhancedNavigationMenu.tsx +29 -23
  248. package/src/rbac/components/NavigationProvider.test.tsx +449 -0
  249. package/src/rbac/components/PagePermissionGuard.tsx +4 -4
  250. package/src/rbac/components/PagePermissionProvider.test.tsx +479 -0
  251. package/src/rbac/components/SecureDataProvider.test.tsx +511 -0
  252. package/src/rbac/components/__tests__/PagePermissionGuard.race-condition.test.tsx +159 -430
  253. package/src/rbac/components/__tests__/PagePermissionGuard.test.tsx +4 -5
  254. package/src/rbac/components/__tests__/PagePermissionGuard.verification.test.tsx +112 -118
  255. package/src/rbac/config.test.ts +410 -0
  256. package/src/rbac/engine.test.simple.ts +237 -0
  257. package/src/rbac/engine.test.ts +233 -0
  258. package/src/rbac/engine.ts +37 -41
  259. package/src/rbac/examples/CompleteRBACExample.tsx +3 -3
  260. package/src/rbac/examples/EventBasedApp.tsx +4 -4
  261. package/src/rbac/hooks/useRBAC.simple.test.ts +16 -0
  262. package/src/rbac/hooks/useRBAC.test.ts +207 -455
  263. package/src/rbac/hooks/useRBAC.ts +30 -22
  264. package/src/rbac/permissions.test.ts +128 -0
  265. package/src/rbac/permissions.ts +56 -141
  266. package/src/rbac/providers/RBACProvider.tsx +1 -1
  267. package/src/rbac/secureClient.test.ts +444 -0
  268. package/src/rbac/security.test.ts +390 -0
  269. package/src/rbac/security.ts +1 -1
  270. package/src/rbac/types.test.ts +382 -0
  271. package/src/rbac/types.ts +2 -2
  272. package/src/styles/base.css +208 -0
  273. package/src/styles/core.css +0 -125
  274. package/src/styles/semantic.css +24 -0
  275. package/src/types/file-reference.ts +77 -0
  276. package/src/types/rbac-functions.ts +290 -0
  277. package/src/types/supabase.ts +10 -28
  278. package/src/types/unified.ts +4 -1
  279. package/src/utils/__tests__/bundleAnalysis.unit.test.ts +81 -55
  280. package/src/utils/__tests__/lazyLoad.unit.test.tsx +21 -12
  281. package/src/utils/__tests__/organisationContext.unit.test.ts +13 -7
  282. package/src/utils/__tests__/performanceBudgets.unit.test.ts +3 -3
  283. package/src/utils/__tests__/sessionTracking.unit.test.ts +32 -12
  284. package/src/utils/appConfig.ts +1 -1
  285. package/src/utils/appIdResolver.test.ts +503 -0
  286. package/src/utils/appIdResolver.ts +1 -1
  287. package/src/utils/appNameResolver.test.ts +494 -0
  288. package/src/utils/appNameResolver.ts +3 -2
  289. package/src/utils/bundleAnalysis.ts +3 -3
  290. package/src/utils/debugLogger.ts +1 -1
  291. package/src/utils/file-reference.ts +263 -0
  292. package/src/utils/formatDate.test.ts +2 -2
  293. package/src/utils/organisationContext.test.ts +340 -0
  294. package/src/utils/organisationContext.ts +19 -6
  295. package/src/utils/performanceBudgets.ts +2 -2
  296. package/src/utils/permissionUtils.test.ts +393 -0
  297. package/src/utils/permissionUtils.ts +5 -2
  298. package/src/utils/secureDataAccess.test.ts +715 -0
  299. package/src/utils/secureDataAccess.ts +21 -5
  300. package/src/utils/sessionTracking.ts +34 -4
  301. package/src/utils/storage/__tests__/helpers.unit.test.ts +328 -0
  302. package/src/utils/storage/__tests__/index.unit.test.ts +16 -0
  303. package/src/utils/storage/helpers.ts +20 -25
  304. package/src/utils/storage/index.ts +29 -1
  305. package/src/vite-env.d.ts +17 -0
  306. package/dist/chunk-22KLBHPS.js.map +0 -1
  307. package/dist/chunk-7BNPOCLL.js.map +0 -1
  308. package/dist/chunk-BC3S53OZ.js.map +0 -1
  309. package/dist/chunk-GWSBHC4J.js.map +0 -1
  310. package/dist/chunk-MYP2EGHX.js.map +0 -1
  311. package/dist/chunk-MZBUOP4P.js.map +0 -1
  312. package/dist/chunk-NYUJ4FJR.js.map +0 -1
  313. package/dist/chunk-NZ655MWE.js.map +0 -1
  314. package/dist/chunk-SS3E6QLB.js.map +0 -1
  315. package/dist/chunk-TRIZ7IB7.js.map +0 -1
  316. package/dist/chunk-WJARTBCT.js.map +0 -1
  317. package/dist/chunk-YDJW5XTN.js.map +0 -1
  318. package/docs/print-components/README.md +0 -258
  319. package/docs/print-components/api-reference.md +0 -636
  320. package/docs/print-components/examples/README.md +0 -204
  321. package/docs/print-components/examples/basic-report.tsx +0 -92
  322. package/docs/print-components/examples/card-catalog.tsx +0 -149
  323. package/docs/print-components/examples/cover-page-report.tsx +0 -163
  324. package/docs/print-components/quick-start.md +0 -363
  325. package/src/components/PrintButton/PrintButton.tsx +0 -321
  326. package/src/components/PrintButton/PrintButtonGroup.tsx +0 -84
  327. package/src/components/PrintButton/PrintToolbar.tsx +0 -94
  328. package/src/components/PrintButton/__tests__/PrintButton.test.tsx +0 -271
  329. package/src/components/PrintButton/examples/PrintButtonShowcase.tsx +0 -438
  330. package/src/components/PrintButton/index.ts +0 -33
  331. package/src/components/PrintButton/types.ts +0 -173
  332. package/src/components/PrintCard/PrintCard.tsx +0 -154
  333. package/src/components/PrintCard/PrintCardContent.tsx +0 -57
  334. package/src/components/PrintCard/PrintCardFooter.tsx +0 -60
  335. package/src/components/PrintCard/PrintCardGrid.tsx +0 -91
  336. package/src/components/PrintCard/PrintCardHeader.tsx +0 -78
  337. package/src/components/PrintCard/PrintCardImage.tsx +0 -81
  338. package/src/components/PrintCard/examples/PrintCardShowcase.tsx +0 -239
  339. package/src/components/PrintCard/index.ts +0 -34
  340. package/src/components/PrintCard/types.ts +0 -171
  341. package/src/components/PrintDataTable/PrintDataTable.tsx +0 -215
  342. package/src/components/PrintDataTable/PrintTableGroup.tsx +0 -90
  343. package/src/components/PrintDataTable/PrintTableRow.tsx +0 -76
  344. package/src/components/PrintDataTable/index.ts +0 -25
  345. package/src/components/PrintDataTable/types.ts +0 -67
  346. package/src/components/PrintFooter/PrintFooter.tsx +0 -183
  347. package/src/components/PrintFooter/PrintFooterContent.tsx +0 -71
  348. package/src/components/PrintFooter/PrintFooterInfo.tsx +0 -86
  349. package/src/components/PrintFooter/PrintPageNumber.tsx +0 -90
  350. package/src/components/PrintFooter/examples/PrintFooterShowcase.tsx +0 -390
  351. package/src/components/PrintFooter/index.ts +0 -30
  352. package/src/components/PrintFooter/types.ts +0 -149
  353. package/src/components/PrintGrid/PrintGrid.tsx +0 -180
  354. package/src/components/PrintGrid/PrintGridBreakpoint.tsx +0 -109
  355. package/src/components/PrintGrid/PrintGridContainer.tsx +0 -128
  356. package/src/components/PrintGrid/PrintGridItem.tsx +0 -220
  357. package/src/components/PrintGrid/examples/PrintGridShowcase.tsx +0 -359
  358. package/src/components/PrintGrid/index.ts +0 -31
  359. package/src/components/PrintGrid/types.ts +0 -159
  360. package/src/components/PrintHeader/PrintCoverHeader.tsx +0 -230
  361. package/src/components/PrintHeader/PrintHeader.tsx +0 -150
  362. package/src/components/PrintHeader/index.ts +0 -17
  363. package/src/components/PrintHeader/types.ts +0 -42
  364. package/src/components/PrintLayout/PrintLayout.tsx +0 -122
  365. package/src/components/PrintLayout/PrintLayoutContext.tsx +0 -66
  366. package/src/components/PrintLayout/PrintPageBreak.tsx +0 -52
  367. package/src/components/PrintLayout/examples/PrintShowcase.tsx +0 -230
  368. package/src/components/PrintLayout/index.ts +0 -19
  369. package/src/components/PrintLayout/types.ts +0 -37
  370. package/src/components/PrintPageBreak/PrintPageBreak.tsx +0 -120
  371. package/src/components/PrintPageBreak/PrintPageBreakGroup.tsx +0 -90
  372. package/src/components/PrintPageBreak/PrintPageBreakIndicator.tsx +0 -112
  373. package/src/components/PrintPageBreak/examples/PrintPageBreakShowcase.tsx +0 -279
  374. package/src/components/PrintPageBreak/index.ts +0 -23
  375. package/src/components/PrintPageBreak/types.ts +0 -94
  376. package/src/components/PrintSection/PrintColumn.tsx +0 -104
  377. package/src/components/PrintSection/PrintDivider.tsx +0 -101
  378. package/src/components/PrintSection/PrintSection.tsx +0 -129
  379. package/src/components/PrintSection/PrintSectionContent.tsx +0 -75
  380. package/src/components/PrintSection/PrintSectionHeader.tsx +0 -97
  381. package/src/components/PrintSection/examples/PrintSectionShowcase.tsx +0 -258
  382. package/src/components/PrintSection/index.ts +0 -33
  383. package/src/components/PrintSection/types.ts +0 -155
  384. package/src/components/PrintText/PrintText.tsx +0 -116
  385. package/src/components/PrintText/index.ts +0 -16
  386. package/src/components/PrintText/types.ts +0 -24
  387. package/src/rbac/__tests__/integration.test.tsx +0 -218
  388. package/src/utils/print/PrintDataProcessor.ts +0 -390
  389. package/src/utils/print/examples/PrintUtilitiesShowcase.tsx +0 -397
  390. package/src/utils/print/index.ts +0 -29
  391. package/src/utils/print/types.ts +0 -196
  392. package/src/utils/print/usePrintOptimization.ts +0 -272
  393. /package/dist/{DataTable-7FMFXA7A.js.map → DataTable-4T627QFJ.js.map} +0 -0
  394. /package/dist/{api-H5A3H4IR.js.map → api-LUNF5O6M.js.map} +0 -0
  395. /package/dist/{appNameResolver-7GHF5ED2.js.map → appNameResolver-UURKN7NF.js.map} +0 -0
  396. /package/dist/{audit-BUW3LMJB.js.map → audit-6TOCAMKO.js.map} +0 -0
  397. /package/dist/{chunk-NRK4AIHQ.js.map → chunk-KBRACSJI.js.map} +0 -0
  398. /package/dist/{chunk-6MTY77WU.js.map → chunk-TNMXZLDR.js.map} +0 -0
@@ -1,390 +0,0 @@
1
- /**
2
- * @file Print Data Processor
3
- * @package @jmruthers/pace-core
4
- * @module PrintDataProcessor
5
- * @since 0.4.38
6
- *
7
- * Data processing utilities for print optimization.
8
- */
9
-
10
- import {
11
- PrintDataProcessorOptions,
12
- PrintDataProcessorResult,
13
- PrintDataProcessorConfig,
14
- PrintDataProcessor
15
- } from './types';
16
-
17
- export class PrintDataProcessorImpl implements PrintDataProcessor {
18
- private config: PrintDataProcessorConfig;
19
-
20
- constructor(config?: Partial<PrintDataProcessorConfig>) {
21
- this.config = {
22
- defaultOptions: {
23
- maxItemsPerPage: 50,
24
- maxCharactersPerLine: 80,
25
- maxLinesPerPage: 60,
26
- pageBreakStrategy: 'auto',
27
- groupingStrategy: 'auto',
28
- truncationStrategy: 'word',
29
- optimizationLevel: 'basic',
30
- pageSize: 'A4',
31
- orientation: 'portrait',
32
- fontSize: 12,
33
- lineHeight: 1.4,
34
- margins: {
35
- top: 0.5,
36
- right: 0.5,
37
- bottom: 0.5,
38
- left: 0.5
39
- }
40
- },
41
- pageSizes: {
42
- A4: {
43
- width: 8.27,
44
- height: 11.69,
45
- margin: { top: 0.5, right: 0.5, bottom: 0.5, left: 0.5 }
46
- },
47
- A3: {
48
- width: 11.69,
49
- height: 16.53,
50
- margin: { top: 0.5, right: 0.5, bottom: 0.5, left: 0.5 }
51
- },
52
- A5: {
53
- width: 5.83,
54
- height: 8.27,
55
- margin: { top: 0.5, right: 0.5, bottom: 0.5, left: 0.5 }
56
- },
57
- Letter: {
58
- width: 8.5,
59
- height: 11,
60
- margin: { top: 0.5, right: 0.5, bottom: 0.5, left: 0.5 }
61
- },
62
- Legal: {
63
- width: 8.5,
64
- height: 14,
65
- margin: { top: 0.5, right: 0.5, bottom: 0.5, left: 0.5 }
66
- }
67
- },
68
- fonts: {
69
- small: { size: 10, lineHeight: 1.2, charactersPerLine: 100 },
70
- medium: { size: 12, lineHeight: 1.4, charactersPerLine: 80 },
71
- large: { size: 14, lineHeight: 1.6, charactersPerLine: 60 }
72
- },
73
- presets: {
74
- basic: {
75
- maxItemsPerPage: 50,
76
- maxCharactersPerLine: 80,
77
- maxLinesPerPage: 60,
78
- pageBreakStrategy: 'auto',
79
- groupingStrategy: 'auto',
80
- truncationStrategy: 'word',
81
- optimizationLevel: 'basic'
82
- },
83
- compact: {
84
- maxItemsPerPage: 100,
85
- maxCharactersPerLine: 100,
86
- maxLinesPerPage: 80,
87
- pageBreakStrategy: 'force',
88
- groupingStrategy: 'auto',
89
- truncationStrategy: 'character',
90
- optimizationLevel: 'advanced'
91
- },
92
- readable: {
93
- maxItemsPerPage: 30,
94
- maxCharactersPerLine: 60,
95
- maxLinesPerPage: 40,
96
- pageBreakStrategy: 'avoid',
97
- groupingStrategy: 'smart',
98
- truncationStrategy: 'word',
99
- optimizationLevel: 'maximum'
100
- }
101
- },
102
- ...config
103
- };
104
- }
105
-
106
- process<T>(data: T[], options: Partial<PrintDataProcessorOptions> = {}): PrintDataProcessorResult<T> {
107
- const mergedOptions = { ...this.config.defaultOptions, ...options };
108
- const warnings: string[] = [];
109
- const suggestions: string[] = [];
110
-
111
- // Validate data
112
- const validation = this.validate(data, mergedOptions);
113
- if (!validation.isValid) {
114
- warnings.push(...validation.errors);
115
- }
116
- warnings.push(...validation.warnings);
117
-
118
- // Process data based on options
119
- let processedData = [...data];
120
-
121
- // Apply optimization
122
- if (mergedOptions.optimizationLevel !== 'none') {
123
- processedData = this.optimize(processedData, mergedOptions);
124
- }
125
-
126
- // Calculate pagination
127
- const pagination = this.getPagination(processedData, mergedOptions);
128
-
129
- // Calculate grouping
130
- const grouping = this.getGrouping(processedData, 'id' as keyof T, mergedOptions);
131
-
132
- // Calculate optimization metrics
133
- const optimization = this.getPreview(processedData, mergedOptions);
134
-
135
- // Generate suggestions
136
- if (optimization.estimatedPages > 10) {
137
- suggestions.push('Consider using a more compact layout or smaller font size');
138
- }
139
- if (optimization.readabilityScore < 0.7) {
140
- suggestions.push('Consider improving text formatting for better readability');
141
- }
142
- if (optimization.compressionRatio < 0.8) {
143
- suggestions.push('Consider optimizing content to reduce page count');
144
- }
145
-
146
- return {
147
- data: processedData,
148
- pagination,
149
- grouping,
150
- optimization,
151
- warnings,
152
- suggestions
153
- };
154
- }
155
-
156
- getPagination<T>(data: T[], options: Partial<PrintDataProcessorOptions> = {}): {
157
- totalPages: number;
158
- currentPage: number;
159
- itemsPerPage: number;
160
- totalItems: number;
161
- } {
162
- const mergedOptions = { ...this.config.defaultOptions, ...options };
163
- const itemsPerPage = mergedOptions.maxItemsPerPage || 50;
164
- const totalItems = data.length;
165
- const totalPages = Math.ceil(totalItems / itemsPerPage);
166
-
167
- return {
168
- totalPages,
169
- currentPage: 1,
170
- itemsPerPage,
171
- totalItems
172
- };
173
- }
174
-
175
- getGrouping<T>(data: T[], groupBy: keyof T, options: Partial<PrintDataProcessorOptions> = {}): {
176
- groups: Array<{
177
- key: string;
178
- items: T[];
179
- startPage: number;
180
- endPage: number;
181
- }>;
182
- totalGroups: number;
183
- } {
184
- const mergedOptions = { ...this.config.defaultOptions, ...options };
185
- const itemsPerPage = mergedOptions.maxItemsPerPage || 50;
186
-
187
- // Group data by the specified key
188
- const groups = new Map<string, T[]>();
189
- data.forEach(item => {
190
- const key = String(item[groupBy] || 'Unknown');
191
- if (!groups.has(key)) {
192
- groups.set(key, []);
193
- }
194
- groups.get(key)!.push(item);
195
- });
196
-
197
- // Calculate page information for each group
198
- const groupArray = Array.from(groups.entries()).map(([key, items]) => {
199
- const startPage = Math.floor(data.indexOf(items[0]) / itemsPerPage) + 1;
200
- const endPage = Math.floor(data.indexOf(items[items.length - 1]) / itemsPerPage) + 1;
201
-
202
- return {
203
- key,
204
- items,
205
- startPage,
206
- endPage
207
- };
208
- });
209
-
210
- return {
211
- groups: groupArray,
212
- totalGroups: groupArray.length
213
- };
214
- }
215
-
216
- optimize<T>(data: T[], options: Partial<PrintDataProcessorOptions> = {}): T[] {
217
- const mergedOptions = { ...this.config.defaultOptions, ...options };
218
- let optimizedData = [...data];
219
-
220
- // Apply text truncation if needed
221
- if (mergedOptions.truncationStrategy !== 'none') {
222
- optimizedData = this.applyTextTruncation(optimizedData, mergedOptions);
223
- }
224
-
225
- // Apply grouping optimization
226
- if (mergedOptions.groupingStrategy !== 'none') {
227
- optimizedData = this.applyGroupingOptimization(optimizedData, mergedOptions);
228
- }
229
-
230
- // Apply page break optimization
231
- if (mergedOptions.pageBreakStrategy !== 'auto') {
232
- optimizedData = this.applyPageBreakOptimization(optimizedData, mergedOptions);
233
- }
234
-
235
- return optimizedData;
236
- }
237
-
238
- validate<T>(data: T[], options: Partial<PrintDataProcessorOptions> = {}): {
239
- isValid: boolean;
240
- errors: string[];
241
- warnings: string[];
242
- } {
243
- const errors: string[] = [];
244
- const warnings: string[] = [];
245
-
246
- // Check if data is empty
247
- if (!data || data.length === 0) {
248
- errors.push('Data array is empty');
249
- }
250
-
251
- // Check data types
252
- if (data.some(item => typeof item !== 'object' || item === null)) {
253
- warnings.push('Some items in data array are not objects or are null');
254
- }
255
-
256
- // Check for very large datasets
257
- if (data.length > 10000) {
258
- warnings.push('Large dataset detected. Consider pagination or filtering.');
259
- }
260
-
261
- // Check for very long text content
262
- const longTextItems = data.filter(item =>
263
- typeof item === 'object' &&
264
- item !== null &&
265
- Object.values(item).some(value =>
266
- typeof value === 'string' && value.length > 1000
267
- )
268
- );
269
-
270
- if (longTextItems.length > 0) {
271
- warnings.push('Some items contain very long text. Consider truncation.');
272
- }
273
-
274
- return {
275
- isValid: errors.length === 0,
276
- errors,
277
- warnings
278
- };
279
- }
280
-
281
- getPreview<T>(data: T[], options: Partial<PrintDataProcessorOptions> = {}): {
282
- estimatedPages: number;
283
- estimatedPrintTime: number;
284
- compressionRatio: number;
285
- readabilityScore: number;
286
- } {
287
- const mergedOptions = { ...this.config.defaultOptions, ...options };
288
- const pagination = this.getPagination(data, mergedOptions);
289
-
290
- // Calculate estimated print time (in minutes)
291
- const estimatedPrintTime = pagination.totalPages * 0.5; // 30 seconds per page
292
-
293
- // Calculate compression ratio
294
- const originalSize = JSON.stringify(data).length;
295
- const optimizedData = this.optimize(data, mergedOptions);
296
- const optimizedSize = JSON.stringify(optimizedData).length;
297
- const compressionRatio = optimizedSize / originalSize;
298
-
299
- // Calculate readability score (0-1)
300
- const readabilityScore = this.calculateReadabilityScore(data, mergedOptions);
301
-
302
- return {
303
- estimatedPages: pagination.totalPages,
304
- estimatedPrintTime,
305
- compressionRatio,
306
- readabilityScore
307
- };
308
- }
309
-
310
- private applyTextTruncation<T>(data: T[], options: PrintDataProcessorOptions): T[] {
311
- const maxLength = options.maxCharactersPerLine || 80;
312
-
313
- return data.map(item => {
314
- if (typeof item === 'object' && item !== null) {
315
- const truncatedItem = { ...item } as Record<string, any>;
316
-
317
- Object.keys(truncatedItem).forEach(key => {
318
- const value = truncatedItem[key];
319
- if (typeof value === 'string' && value.length > maxLength) {
320
- switch (options.truncationStrategy) {
321
- case 'ellipsis':
322
- truncatedItem[key] = value.substring(0, maxLength - 3) + '...';
323
- break;
324
- case 'word':
325
- const words = value.split(' ');
326
- let truncated = '';
327
- for (const word of words) {
328
- const testLength = truncated ? truncated.length + 1 + word.length : word.length;
329
- if (testLength > maxLength) {
330
- if (truncated.length + 3 <= maxLength) {
331
- truncated += '...';
332
- }
333
- break;
334
- }
335
- truncated += (truncated ? ' ' : '') + word;
336
- }
337
- truncatedItem[key] = truncated;
338
- break;
339
- case 'character':
340
- truncatedItem[key] = value.substring(0, maxLength);
341
- break;
342
- }
343
- }
344
- });
345
-
346
- return truncatedItem as T;
347
- }
348
-
349
- return item;
350
- });
351
- }
352
-
353
- private applyGroupingOptimization<T>(data: T[], options: PrintDataProcessorOptions): T[] {
354
- // This is a simplified grouping optimization
355
- // In a real implementation, this would be more sophisticated
356
- return data;
357
- }
358
-
359
- private applyPageBreakOptimization<T>(data: T[], options: PrintDataProcessorOptions): T[] {
360
- // This is a simplified page break optimization
361
- // In a real implementation, this would analyze content and add page breaks
362
- return data;
363
- }
364
-
365
- private calculateReadabilityScore<T>(data: T[], options: PrintDataProcessorOptions): number {
366
- // Simplified readability score calculation
367
- // In a real implementation, this would use more sophisticated algorithms
368
- let score = 1.0;
369
-
370
- // Penalize very long lines
371
- if (options.maxCharactersPerLine && options.maxCharactersPerLine > 100) {
372
- score -= 0.1;
373
- }
374
-
375
- // Penalize very dense layouts
376
- if (options.maxLinesPerPage && options.maxLinesPerPage > 80) {
377
- score -= 0.1;
378
- }
379
-
380
- // Reward good font sizes
381
- if (options.fontSize && options.fontSize >= 12) {
382
- score += 0.1;
383
- }
384
-
385
- return Math.max(0, Math.min(1, score));
386
- }
387
- }
388
-
389
- // Export singleton instance
390
- export const printDataProcessor = new PrintDataProcessorImpl();