@jmruthers/pace-core 0.5.54 → 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 (396) 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/core.css +0 -125
  273. package/src/types/file-reference.ts +77 -0
  274. package/src/types/rbac-functions.ts +290 -0
  275. package/src/types/supabase.ts +10 -28
  276. package/src/types/unified.ts +4 -1
  277. package/src/utils/__tests__/bundleAnalysis.unit.test.ts +81 -55
  278. package/src/utils/__tests__/lazyLoad.unit.test.tsx +21 -12
  279. package/src/utils/__tests__/organisationContext.unit.test.ts +13 -7
  280. package/src/utils/__tests__/performanceBudgets.unit.test.ts +3 -3
  281. package/src/utils/__tests__/sessionTracking.unit.test.ts +32 -12
  282. package/src/utils/appConfig.ts +1 -1
  283. package/src/utils/appIdResolver.test.ts +503 -0
  284. package/src/utils/appIdResolver.ts +1 -1
  285. package/src/utils/appNameResolver.test.ts +494 -0
  286. package/src/utils/appNameResolver.ts +3 -2
  287. package/src/utils/bundleAnalysis.ts +3 -3
  288. package/src/utils/debugLogger.ts +1 -1
  289. package/src/utils/file-reference.ts +263 -0
  290. package/src/utils/formatDate.test.ts +2 -2
  291. package/src/utils/organisationContext.test.ts +340 -0
  292. package/src/utils/organisationContext.ts +19 -6
  293. package/src/utils/performanceBudgets.ts +2 -2
  294. package/src/utils/permissionUtils.test.ts +393 -0
  295. package/src/utils/permissionUtils.ts +5 -2
  296. package/src/utils/secureDataAccess.test.ts +715 -0
  297. package/src/utils/secureDataAccess.ts +21 -5
  298. package/src/utils/sessionTracking.ts +34 -4
  299. package/src/utils/storage/__tests__/helpers.unit.test.ts +328 -0
  300. package/src/utils/storage/__tests__/index.unit.test.ts +16 -0
  301. package/src/utils/storage/helpers.ts +20 -25
  302. package/src/utils/storage/index.ts +29 -1
  303. package/src/vite-env.d.ts +17 -0
  304. package/dist/chunk-22KLBHPS.js.map +0 -1
  305. package/dist/chunk-7BNPOCLL.js.map +0 -1
  306. package/dist/chunk-BC3S53OZ.js.map +0 -1
  307. package/dist/chunk-GWSBHC4J.js.map +0 -1
  308. package/dist/chunk-MYP2EGHX.js.map +0 -1
  309. package/dist/chunk-MZBUOP4P.js.map +0 -1
  310. package/dist/chunk-NYUJ4FJR.js.map +0 -1
  311. package/dist/chunk-NZ655MWE.js.map +0 -1
  312. package/dist/chunk-SS3E6QLB.js.map +0 -1
  313. package/dist/chunk-TRIZ7IB7.js.map +0 -1
  314. package/dist/chunk-WJARTBCT.js.map +0 -1
  315. package/dist/chunk-YDJW5XTN.js.map +0 -1
  316. package/docs/print-components/README.md +0 -258
  317. package/docs/print-components/api-reference.md +0 -636
  318. package/docs/print-components/examples/README.md +0 -204
  319. package/docs/print-components/examples/basic-report.tsx +0 -92
  320. package/docs/print-components/examples/card-catalog.tsx +0 -149
  321. package/docs/print-components/examples/cover-page-report.tsx +0 -163
  322. package/docs/print-components/quick-start.md +0 -363
  323. package/src/components/PrintButton/PrintButton.tsx +0 -321
  324. package/src/components/PrintButton/PrintButtonGroup.tsx +0 -84
  325. package/src/components/PrintButton/PrintToolbar.tsx +0 -94
  326. package/src/components/PrintButton/__tests__/PrintButton.test.tsx +0 -271
  327. package/src/components/PrintButton/examples/PrintButtonShowcase.tsx +0 -438
  328. package/src/components/PrintButton/index.ts +0 -33
  329. package/src/components/PrintButton/types.ts +0 -173
  330. package/src/components/PrintCard/PrintCard.tsx +0 -154
  331. package/src/components/PrintCard/PrintCardContent.tsx +0 -57
  332. package/src/components/PrintCard/PrintCardFooter.tsx +0 -60
  333. package/src/components/PrintCard/PrintCardGrid.tsx +0 -91
  334. package/src/components/PrintCard/PrintCardHeader.tsx +0 -78
  335. package/src/components/PrintCard/PrintCardImage.tsx +0 -81
  336. package/src/components/PrintCard/examples/PrintCardShowcase.tsx +0 -239
  337. package/src/components/PrintCard/index.ts +0 -34
  338. package/src/components/PrintCard/types.ts +0 -171
  339. package/src/components/PrintDataTable/PrintDataTable.tsx +0 -215
  340. package/src/components/PrintDataTable/PrintTableGroup.tsx +0 -90
  341. package/src/components/PrintDataTable/PrintTableRow.tsx +0 -76
  342. package/src/components/PrintDataTable/index.ts +0 -25
  343. package/src/components/PrintDataTable/types.ts +0 -67
  344. package/src/components/PrintFooter/PrintFooter.tsx +0 -183
  345. package/src/components/PrintFooter/PrintFooterContent.tsx +0 -71
  346. package/src/components/PrintFooter/PrintFooterInfo.tsx +0 -86
  347. package/src/components/PrintFooter/PrintPageNumber.tsx +0 -90
  348. package/src/components/PrintFooter/examples/PrintFooterShowcase.tsx +0 -390
  349. package/src/components/PrintFooter/index.ts +0 -30
  350. package/src/components/PrintFooter/types.ts +0 -149
  351. package/src/components/PrintGrid/PrintGrid.tsx +0 -180
  352. package/src/components/PrintGrid/PrintGridBreakpoint.tsx +0 -109
  353. package/src/components/PrintGrid/PrintGridContainer.tsx +0 -128
  354. package/src/components/PrintGrid/PrintGridItem.tsx +0 -220
  355. package/src/components/PrintGrid/examples/PrintGridShowcase.tsx +0 -359
  356. package/src/components/PrintGrid/index.ts +0 -31
  357. package/src/components/PrintGrid/types.ts +0 -159
  358. package/src/components/PrintHeader/PrintCoverHeader.tsx +0 -230
  359. package/src/components/PrintHeader/PrintHeader.tsx +0 -150
  360. package/src/components/PrintHeader/index.ts +0 -17
  361. package/src/components/PrintHeader/types.ts +0 -42
  362. package/src/components/PrintLayout/PrintLayout.tsx +0 -122
  363. package/src/components/PrintLayout/PrintLayoutContext.tsx +0 -66
  364. package/src/components/PrintLayout/PrintPageBreak.tsx +0 -52
  365. package/src/components/PrintLayout/examples/PrintShowcase.tsx +0 -230
  366. package/src/components/PrintLayout/index.ts +0 -19
  367. package/src/components/PrintLayout/types.ts +0 -37
  368. package/src/components/PrintPageBreak/PrintPageBreak.tsx +0 -120
  369. package/src/components/PrintPageBreak/PrintPageBreakGroup.tsx +0 -90
  370. package/src/components/PrintPageBreak/PrintPageBreakIndicator.tsx +0 -112
  371. package/src/components/PrintPageBreak/examples/PrintPageBreakShowcase.tsx +0 -279
  372. package/src/components/PrintPageBreak/index.ts +0 -23
  373. package/src/components/PrintPageBreak/types.ts +0 -94
  374. package/src/components/PrintSection/PrintColumn.tsx +0 -104
  375. package/src/components/PrintSection/PrintDivider.tsx +0 -101
  376. package/src/components/PrintSection/PrintSection.tsx +0 -129
  377. package/src/components/PrintSection/PrintSectionContent.tsx +0 -75
  378. package/src/components/PrintSection/PrintSectionHeader.tsx +0 -97
  379. package/src/components/PrintSection/examples/PrintSectionShowcase.tsx +0 -258
  380. package/src/components/PrintSection/index.ts +0 -33
  381. package/src/components/PrintSection/types.ts +0 -155
  382. package/src/components/PrintText/PrintText.tsx +0 -116
  383. package/src/components/PrintText/index.ts +0 -16
  384. package/src/components/PrintText/types.ts +0 -24
  385. package/src/rbac/__tests__/integration.test.tsx +0 -218
  386. package/src/utils/print/PrintDataProcessor.ts +0 -390
  387. package/src/utils/print/examples/PrintUtilitiesShowcase.tsx +0 -397
  388. package/src/utils/print/index.ts +0 -29
  389. package/src/utils/print/types.ts +0 -196
  390. package/src/utils/print/usePrintOptimization.ts +0 -272
  391. /package/dist/{DataTable-7FMFXA7A.js.map → DataTable-4T627QFJ.js.map} +0 -0
  392. /package/dist/{api-H5A3H4IR.js.map → api-LUNF5O6M.js.map} +0 -0
  393. /package/dist/{appNameResolver-7GHF5ED2.js.map → appNameResolver-UURKN7NF.js.map} +0 -0
  394. /package/dist/{audit-BUW3LMJB.js.map → audit-6TOCAMKO.js.map} +0 -0
  395. /package/dist/{chunk-NRK4AIHQ.js.map → chunk-KBRACSJI.js.map} +0 -0
  396. /package/dist/{chunk-6MTY77WU.js.map → chunk-TNMXZLDR.js.map} +0 -0
@@ -1,230 +0,0 @@
1
- /**
2
- * @file PrintCoverHeader Component
3
- * @package @jmruthers/pace-core
4
- * @module PrintHeader
5
- * @since 0.4.38
6
- *
7
- * Cover-style print header component for first pages with enhanced branding.
8
- *
9
- * Features:
10
- * - Cover-style header design
11
- * - Large logo and title support
12
- * - Background image/color customization
13
- * - Professional first page appearance
14
- * - Flexible branding integration
15
- *
16
- * @example
17
- * ```tsx
18
- * <PrintCoverHeader
19
- * title="Annual Report 2024"
20
- * subtitle="Financial Performance & Strategic Overview"
21
- * branding={{
22
- * logo: "/logo.png",
23
- * companyName: "Acme Corporation",
24
- * tagline: "Innovation Through Excellence"
25
- * }}
26
- * logoSize="large"
27
- * titleSize="xl"
28
- * showDivider={true}
29
- * backgroundColor="#f8f9fa"
30
- * metadata={[
31
- * { label: "Period", value: "Jan 1 - Dec 31, 2024", icon: CalendarIcon },
32
- * { label: "Prepared by", value: "Finance Team", icon: UserIcon }
33
- * ]}
34
- * />
35
- * ```
36
- */
37
-
38
- import React from 'react';
39
- import { cn } from '../../utils/cn';
40
- import { PrintText } from '../PrintText';
41
- import type { PrintCoverHeaderProps } from './types';
42
-
43
- /**
44
- * PrintCoverHeader component provides a cover-style header design for first pages.
45
- */
46
- export function PrintCoverHeader({
47
- title,
48
- subtitle,
49
- branding,
50
- metadata = [],
51
- printDate = true,
52
- coverStyle = true,
53
- logoSize = 'medium',
54
- titleSize = 'large',
55
- showDivider = false,
56
- backgroundImage,
57
- backgroundColor,
58
- className,
59
- }: PrintCoverHeaderProps) {
60
- const formatPrintDate = () => {
61
- return new Date().toLocaleDateString('en-AU', {
62
- year: 'numeric',
63
- month: 'long',
64
- day: 'numeric',
65
- });
66
- };
67
-
68
- const getLogoSizeClasses = (size: 'small' | 'medium' | 'large') => {
69
- switch (size) {
70
- case 'small':
71
- return 'h-16 w-auto print:h-12';
72
- case 'medium':
73
- return 'h-24 w-auto print:h-20';
74
- case 'large':
75
- return 'h-32 w-auto print:h-24';
76
- default:
77
- return 'h-24 w-auto print:h-20';
78
- }
79
- };
80
-
81
- const getTitleSizeClasses = (size: 'small' | 'medium' | 'large' | 'xl') => {
82
- switch (size) {
83
- case 'small':
84
- return 'text-3xl print:text-2xl';
85
- case 'medium':
86
- return 'text-4xl print:text-3xl';
87
- case 'large':
88
- return 'text-5xl print:text-4xl';
89
- case 'xl':
90
- return 'text-6xl print:text-5xl';
91
- default:
92
- return 'text-4xl print:text-3xl';
93
- }
94
- };
95
-
96
- const getBackgroundStyle = () => {
97
- const style: React.CSSProperties = {};
98
-
99
- if (backgroundImage) {
100
- style.backgroundImage = `url(${backgroundImage})`;
101
- style.backgroundSize = 'cover';
102
- style.backgroundPosition = 'center';
103
- style.backgroundRepeat = 'no-repeat';
104
- }
105
-
106
- if (backgroundColor) {
107
- style.backgroundColor = backgroundColor;
108
- }
109
-
110
- return style;
111
- };
112
-
113
- const renderBranding = () => {
114
- if (!branding) return null;
115
-
116
- const { logo, companyName, projectName, version, tagline } = branding;
117
-
118
- return (
119
- <div className="flex flex-col items-center text-center mb-8">
120
- {logo && (
121
- <img
122
- src={logo}
123
- alt={companyName || 'Company Logo'}
124
- className={cn(
125
- getLogoSizeClasses(logoSize),
126
- 'mb-4'
127
- )}
128
- />
129
- )}
130
-
131
- {companyName && (
132
- <PrintText variant="subheading" weight="semibold" className="mb-2">
133
- {companyName}
134
- </PrintText>
135
- )}
136
-
137
- {projectName && (
138
- <PrintText variant="body" color="muted" className="mb-2">
139
- {projectName}
140
- </PrintText>
141
- )}
142
-
143
- {version && (
144
- <PrintText variant="small" color="muted" className="mb-2">
145
- {version}
146
- </PrintText>
147
- )}
148
-
149
- {tagline && (
150
- <PrintText variant="small" color="muted" className="italic">
151
- {tagline}
152
- </PrintText>
153
- )}
154
- </div>
155
- );
156
- };
157
-
158
- const renderMetadata = () => {
159
- if (metadata.length === 0) return null;
160
-
161
- return (
162
- <div className="grid grid-cols-1 sm:grid-cols-2 gap-6 mb-8">
163
- {metadata.map((item, index) => (
164
- <div key={index} className="flex items-center space-x-3">
165
- {item.icon && (
166
- <item.icon className="h-5 w-5 text-muted-foreground print:h-4 print:w-4" />
167
- )}
168
- <div>
169
- <PrintText variant="small" color="muted" className="block">
170
- {item.label}
171
- </PrintText>
172
- <PrintText variant="body" weight="medium" className="block">
173
- {item.value}
174
- </PrintText>
175
- </div>
176
- </div>
177
- ))}
178
- </div>
179
- );
180
- };
181
-
182
- return (
183
- <header
184
- className={cn(
185
- 'print-cover-header min-h-[400px] flex flex-col justify-center px-8 py-12',
186
- 'print:min-h-[300px] print:px-6 print:py-8',
187
- className
188
- )}
189
- style={getBackgroundStyle()}
190
- >
191
- {/* Branding */}
192
- {renderBranding()}
193
-
194
- {/* Title and Subtitle */}
195
- <div className="text-center mb-8">
196
- <PrintText
197
- variant="heading"
198
- className={cn(
199
- 'mb-4',
200
- getTitleSizeClasses(titleSize)
201
- )}
202
- >
203
- {title}
204
- </PrintText>
205
- {subtitle && (
206
- <PrintText variant="subheading" color="muted" className="max-w-3xl mx-auto">
207
- {subtitle}
208
- </PrintText>
209
- )}
210
- </div>
211
-
212
- {/* Divider */}
213
- {showDivider && (
214
- <div className="w-24 h-1 bg-primary mx-auto mb-8" />
215
- )}
216
-
217
- {/* Metadata */}
218
- {renderMetadata()}
219
-
220
- {/* Print Date */}
221
- {printDate && (
222
- <div className="flex justify-center mt-auto">
223
- <PrintText variant="small" color="muted">
224
- Printed on {formatPrintDate()}
225
- </PrintText>
226
- </div>
227
- )}
228
- </header>
229
- );
230
- }
@@ -1,150 +0,0 @@
1
- /**
2
- * @file PrintHeader Component
3
- * @package @jmruthers/pace-core
4
- * @module PrintHeader
5
- * @since 0.4.38
6
- *
7
- * Flexible print header component with branding and metadata display.
8
- *
9
- * Features:
10
- * - Flexible branding integration
11
- * - Metadata display with icons
12
- * - Print date automation
13
- * - Responsive layout for screen/print
14
- * - Integration with existing theme system
15
- *
16
- * @example
17
- * ```tsx
18
- * <PrintHeader
19
- * title="Data Report"
20
- * subtitle="Q4 Analytics"
21
- * branding={{
22
- * companyName: "Acme Corp",
23
- * projectName: "Q4 Analytics",
24
- * version: "v1.2"
25
- * }}
26
- * metadata={[
27
- * { label: "Status", value: "Complete", icon: CheckIcon },
28
- * { label: "Generated", value: "2024-01-15", icon: CalendarIcon }
29
- * ]}
30
- * />
31
- * ```
32
- */
33
-
34
- import React from 'react';
35
- import { cn } from '../../utils/cn';
36
- import { PrintText } from '../PrintText';
37
- import type { PrintHeaderProps, PrintBranding, PrintMetadata } from './types';
38
-
39
- /**
40
- * PrintHeader component provides flexible branding and metadata display for print layouts.
41
- */
42
- export function PrintHeader({
43
- title,
44
- subtitle,
45
- branding,
46
- metadata = [],
47
- printDate = true,
48
- className,
49
- }: PrintHeaderProps) {
50
- const formatPrintDate = () => {
51
- return new Date().toLocaleDateString('en-AU', {
52
- year: 'numeric',
53
- month: 'long',
54
- day: 'numeric',
55
- });
56
- };
57
-
58
- const renderBranding = (branding: PrintBranding) => {
59
- const { logo, companyName, projectName, version, tagline } = branding;
60
-
61
- return (
62
- <div className="flex items-center space-x-4 mb-4">
63
- {logo && (
64
- <img
65
- src={logo}
66
- alt={companyName || 'Company Logo'}
67
- className="h-8 w-auto print:h-6"
68
- />
69
- )}
70
- <div className="flex-1">
71
- {companyName && (
72
- <PrintText variant="subheading" weight="semibold" className="mb-1">
73
- {companyName}
74
- </PrintText>
75
- )}
76
- {projectName && (
77
- <PrintText variant="body" color="muted" className="mb-1">
78
- {projectName}
79
- </PrintText>
80
- )}
81
- {version && (
82
- <PrintText variant="small" color="muted">
83
- {version}
84
- </PrintText>
85
- )}
86
- {tagline && (
87
- <PrintText variant="small" color="muted" className="italic">
88
- {tagline}
89
- </PrintText>
90
- )}
91
- </div>
92
- </div>
93
- );
94
- };
95
-
96
- const renderMetadata = (metadata: PrintMetadata[]) => {
97
- if (metadata.length === 0) return null;
98
-
99
- return (
100
- <div className="grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 gap-4 mb-4">
101
- {metadata.map((item, index) => (
102
- <div key={index} className="flex items-center space-x-2">
103
- {item.icon && (
104
- <item.icon className="h-4 w-4 text-muted-foreground print:h-3 print:w-3" />
105
- )}
106
- <div>
107
- <PrintText variant="small" color="muted" className="block">
108
- {item.label}
109
- </PrintText>
110
- <PrintText variant="body" weight="medium" className="block">
111
- {item.value}
112
- </PrintText>
113
- </div>
114
- </div>
115
- ))}
116
- </div>
117
- );
118
- };
119
-
120
- return (
121
- <header className={cn('print-header border-b border-border pb-4 mb-6', className)}>
122
- {/* Branding */}
123
- {branding && renderBranding(branding)}
124
-
125
- {/* Title and Subtitle */}
126
- <div className="mb-4">
127
- <PrintText variant="heading" className="mb-2">
128
- {title}
129
- </PrintText>
130
- {subtitle && (
131
- <PrintText variant="subheading" color="muted">
132
- {subtitle}
133
- </PrintText>
134
- )}
135
- </div>
136
-
137
- {/* Metadata */}
138
- {metadata.length > 0 && renderMetadata(metadata)}
139
-
140
- {/* Print Date */}
141
- {printDate && (
142
- <div className="flex justify-end">
143
- <PrintText variant="small" color="muted">
144
- Printed on {formatPrintDate()}
145
- </PrintText>
146
- </div>
147
- )}
148
- </header>
149
- );
150
- }
@@ -1,17 +0,0 @@
1
- /**
2
- * @file PrintHeader Component Exports
3
- * @package @jmruthers/pace-core
4
- * @module PrintHeader
5
- * @since 0.4.38
6
- *
7
- * Exports for PrintHeader and PrintCoverHeader components.
8
- */
9
-
10
- export { PrintHeader } from './PrintHeader';
11
- export { PrintCoverHeader } from './PrintCoverHeader';
12
- export type {
13
- PrintHeaderProps,
14
- PrintCoverHeaderProps,
15
- PrintBranding,
16
- PrintMetadata
17
- } from './types';
@@ -1,42 +0,0 @@
1
- /**
2
- * @file PrintHeader Types
3
- * @package @jmruthers/pace-core
4
- * @module PrintHeader
5
- * @since 0.4.38
6
- *
7
- * Type definitions for PrintHeader and PrintCoverHeader components.
8
- */
9
-
10
- import { ReactNode, ComponentType } from 'react';
11
-
12
- export interface PrintBranding {
13
- logo?: string;
14
- companyName?: string;
15
- projectName?: string;
16
- version?: string;
17
- tagline?: string;
18
- }
19
-
20
- export interface PrintMetadata {
21
- label: string;
22
- value: string;
23
- icon?: ComponentType<{ className?: string }>;
24
- }
25
-
26
- export interface PrintHeaderProps {
27
- title: string;
28
- subtitle?: string;
29
- branding?: PrintBranding;
30
- metadata?: PrintMetadata[];
31
- printDate?: boolean;
32
- className?: string;
33
- }
34
-
35
- export interface PrintCoverHeaderProps extends PrintHeaderProps {
36
- coverStyle?: boolean;
37
- logoSize?: 'small' | 'medium' | 'large';
38
- titleSize?: 'small' | 'medium' | 'large' | 'xl';
39
- showDivider?: boolean;
40
- backgroundImage?: string;
41
- backgroundColor?: string;
42
- }
@@ -1,122 +0,0 @@
1
- /**
2
- * @file PrintLayout Component
3
- * @package @jmruthers/pace-core
4
- * @module PrintLayout
5
- * @since 0.4.38
6
- *
7
- * Base print-optimized layout component with A4 support and first page header management.
8
- *
9
- * Features:
10
- * - Print-optimized base layout
11
- * - A4 page size support (portrait/landscape)
12
- * - First page vs subsequent page header management
13
- * - Print media query integration
14
- * - Page break controls
15
- *
16
- * @example
17
- * ```tsx
18
- * <PrintLayout orientation="portrait" pageSize="A4">
19
- * <PrintHeader title="Report" />
20
- * <PrintSection title="Data">
21
- * <PrintDataTable data={data} columns={columns} />
22
- * </PrintSection>
23
- * </PrintLayout>
24
- * ```
25
- *
26
- * @example
27
- * ```tsx
28
- * <PrintLayout
29
- * orientation="landscape"
30
- * pageSize="A4"
31
- * firstPageHeader={<PrintCoverHeader title="Annual Report" />}
32
- * subsequentPageHeader={<PrintHeader title="Annual Report" />}
33
- * >
34
- * <PrintSection title="Executive Summary">
35
- * Content goes here
36
- * </PrintSection>
37
- * </PrintLayout>
38
- * ```
39
- */
40
-
41
- import React from 'react';
42
- import { cn } from '../../utils/cn';
43
- import { PrintLayoutProvider } from './PrintLayoutContext';
44
- import type { PrintLayoutProps } from './types';
45
-
46
- /**
47
- * PrintLayout component provides a print-optimized base layout with support for
48
- * different page sizes, orientations, and header management.
49
- */
50
- export function PrintLayout({
51
- children,
52
- orientation = 'portrait',
53
- pageSize = 'A4',
54
- showHeader = true,
55
- showFooter = true,
56
- firstPageHeader,
57
- subsequentPageHeader,
58
- className,
59
- ...props
60
- }: PrintLayoutProps) {
61
- const hasFirstPageHeader = Boolean(firstPageHeader);
62
- const hasSubsequentPageHeader = Boolean(subsequentPageHeader);
63
-
64
- const getPageSizeClass = () => {
65
- if (pageSize === 'A4') {
66
- return orientation === 'landscape' ? 'print-a4-landscape' : 'print-a4-portrait';
67
- }
68
- // Future: Add A3, A5 support
69
- return 'print-a4-portrait';
70
- };
71
-
72
- const getHeaderClass = () => {
73
- if (hasFirstPageHeader && hasSubsequentPageHeader) {
74
- return 'print-first-page-header print-subsequent-header';
75
- }
76
- if (hasFirstPageHeader) {
77
- return 'print-first-page-header';
78
- }
79
- if (hasSubsequentPageHeader) {
80
- return 'print-subsequent-header';
81
- }
82
- return '';
83
- };
84
-
85
- return (
86
- <PrintLayoutProvider
87
- pageSize={pageSize}
88
- orientation={orientation}
89
- hasFirstPageHeader={hasFirstPageHeader}
90
- hasSubsequentPageHeader={hasSubsequentPageHeader}
91
- >
92
- <div
93
- className={cn(
94
- 'print-layout',
95
- getPageSizeClass(),
96
- getHeaderClass(),
97
- className
98
- )}
99
- {...props}
100
- >
101
- {/* First page header */}
102
- {hasFirstPageHeader && (
103
- <div className="print-first-page-only">
104
- {firstPageHeader}
105
- </div>
106
- )}
107
-
108
- {/* Subsequent page header */}
109
- {hasSubsequentPageHeader && (
110
- <div className="print-subsequent-pages-only">
111
- {subsequentPageHeader}
112
- </div>
113
- )}
114
-
115
- {/* Main content */}
116
- <div className="print-text">
117
- {children}
118
- </div>
119
- </div>
120
- </PrintLayoutProvider>
121
- );
122
- }
@@ -1,66 +0,0 @@
1
- /**
2
- * @file PrintLayout Context
3
- * @package @jmruthers/pace-core
4
- * @module PrintLayout
5
- * @since 0.4.38
6
- *
7
- * Context for managing print layout state and page detection.
8
- */
9
-
10
- import React, { createContext, useContext, useState, useEffect } from 'react';
11
- import type { PrintLayoutContextType, PageSize, Orientation } from './types';
12
-
13
- const PrintLayoutContext = createContext<PrintLayoutContextType | undefined>(undefined);
14
-
15
- export interface PrintLayoutProviderProps {
16
- children: React.ReactNode;
17
- pageSize: PageSize;
18
- orientation: Orientation;
19
- hasFirstPageHeader: boolean;
20
- hasSubsequentPageHeader: boolean;
21
- }
22
-
23
- export function PrintLayoutProvider({
24
- children,
25
- pageSize,
26
- orientation,
27
- hasFirstPageHeader,
28
- hasSubsequentPageHeader,
29
- }: PrintLayoutProviderProps) {
30
- const [isFirstPage, setIsFirstPage] = useState(true);
31
-
32
- useEffect(() => {
33
- // Simple page detection - in a real implementation, this would be more sophisticated
34
- // For now, we'll assume first page until content overflows
35
- const handleResize = () => {
36
- // This is a simplified implementation
37
- // In a real scenario, you'd measure content height vs page height
38
- setIsFirstPage(true);
39
- };
40
-
41
- window.addEventListener('resize', handleResize);
42
- return () => window.removeEventListener('resize', handleResize);
43
- }, []);
44
-
45
- const value: PrintLayoutContextType = {
46
- isFirstPage,
47
- pageSize,
48
- orientation,
49
- hasFirstPageHeader,
50
- hasSubsequentPageHeader,
51
- };
52
-
53
- return (
54
- <PrintLayoutContext.Provider value={value}>
55
- {children}
56
- </PrintLayoutContext.Provider>
57
- );
58
- }
59
-
60
- export function usePrintLayout(): PrintLayoutContextType {
61
- const context = useContext(PrintLayoutContext);
62
- if (context === undefined) {
63
- throw new Error('usePrintLayout must be used within a PrintLayoutProvider');
64
- }
65
- return context;
66
- }
@@ -1,52 +0,0 @@
1
- /**
2
- * @file PrintPageBreak Component
3
- * @package @jmruthers/pace-core
4
- * @module PrintLayout
5
- * @since 0.4.38
6
- *
7
- * Component for controlling page breaks in print layouts.
8
- */
9
-
10
- import React from 'react';
11
- import { cn } from '../../utils/cn';
12
- import type { PrintPageBreakProps } from './types';
13
-
14
- /**
15
- * PrintPageBreak component for controlling page breaks in print layouts.
16
- *
17
- * @example
18
- * ```tsx
19
- * <PrintPageBreak type="before" />
20
- * <PrintPageBreak type="after" />
21
- * <PrintPageBreak type="avoid" />
22
- * ```
23
- */
24
- export function PrintPageBreak({
25
- type = 'after',
26
- className,
27
- ...props
28
- }: PrintPageBreakProps) {
29
- const getBreakClass = () => {
30
- switch (type) {
31
- case 'before':
32
- return 'print-break-before';
33
- case 'after':
34
- return 'print-break-after';
35
- case 'avoid':
36
- return 'print-break-avoid';
37
- default:
38
- return '';
39
- }
40
- };
41
-
42
- return (
43
- <div
44
- className={cn(
45
- getBreakClass(),
46
- className
47
- )}
48
- aria-hidden="true"
49
- {...props}
50
- />
51
- );
52
- }