@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,363 +0,0 @@
1
- # Print Components Quick Start
2
-
3
- > **⚡ Get up and running with print components in 5 minutes**
4
-
5
- This guide will walk you through creating your first print-optimized document using pace-core print components.
6
-
7
- ## 🚀 Installation
8
-
9
- ```bash
10
- npm install @jmruthers/pace-core
11
- ```
12
-
13
- ## 📦 Basic Setup
14
-
15
- ### 1. Import Components
16
-
17
- ```tsx
18
- import {
19
- PrintLayout,
20
- PrintHeader,
21
- PrintDataTable,
22
- PrintText,
23
- PrintButton
24
- } from '@jmruthers/pace-core';
25
-
26
- // Import the core CSS file
27
- import '@jmruthers/pace-core/styles/core.css';
28
- ```
29
-
30
- ### 2. Create Your First Print Document
31
-
32
- ```tsx
33
- function MyReport() {
34
- const data = [
35
- { id: 1, name: 'John Doe', department: 'Engineering', salary: 80000 },
36
- { id: 2, name: 'Jane Smith', department: 'Marketing', salary: 75000 },
37
- { id: 3, name: 'Bob Johnson', department: 'Sales', salary: 70000 },
38
- ];
39
-
40
- const columns = [
41
- { key: 'name', header: 'Name', align: 'left' as const },
42
- { key: 'department', header: 'Department', align: 'center' as const },
43
- { key: 'salary', header: 'Salary', align: 'right' as const, render: (value: number) => `$${value.toLocaleString()}` },
44
- ];
45
-
46
- return (
47
- <div>
48
- {/* Print Button */}
49
- <PrintButton
50
- variant="primary"
51
- printSelector=".report-content"
52
- beforePrint={() => console.log('Preparing to print...')}
53
- afterPrint={() => console.log('Print completed!')}
54
- >
55
- Print Report
56
- </PrintButton>
57
-
58
- {/* Print Content */}
59
- <div className="report-content">
60
- <PrintLayout orientation="portrait" pageSize="A4">
61
- <PrintHeader
62
- title="Employee Report"
63
- subtitle="Department Overview"
64
- branding={{
65
- companyName: "Your Company",
66
- projectName: "HR Analytics",
67
- version: "v1.0"
68
- }}
69
- metadata={[
70
- { label: "Generated", value: new Date().toLocaleDateString() },
71
- { label: "Total Employees", value: data.length.toString() }
72
- ]}
73
- />
74
-
75
- <PrintDataTable
76
- data={data}
77
- columns={columns}
78
- title="Employee Directory"
79
- grouping={{
80
- enabled: true,
81
- groupBy: 'department'
82
- }}
83
- />
84
- </PrintLayout>
85
- </div>
86
- </div>
87
- );
88
- }
89
- ```
90
-
91
- ## 🎨 Advanced Layout
92
-
93
- ### Cover Page + Content Pages
94
-
95
- ```tsx
96
- function AdvancedReport() {
97
- return (
98
- <PrintLayout
99
- orientation="portrait"
100
- pageSize="A4"
101
- firstPageHeader={
102
- <PrintCoverHeader
103
- title="Annual Report 2024"
104
- subtitle="Financial Performance & Strategic Overview"
105
- branding={{
106
- logo: "/logo.png",
107
- companyName: "Acme Corporation",
108
- tagline: "Innovation Through Excellence"
109
- }}
110
- logoSize="large"
111
- titleSize="xl"
112
- showDivider={true}
113
- backgroundColor="#f8f9fa"
114
- />
115
- }
116
- subsequentPageHeader={
117
- <PrintHeader
118
- title="Annual Report 2024"
119
- branding={{
120
- logo: "/logo-small.png",
121
- companyName: "Acme Corp"
122
- }}
123
- />
124
- }
125
- >
126
- <PrintSection title="Executive Summary">
127
- <PrintText variant="heading">Overview</PrintText>
128
- <PrintText variant="body">
129
- This report provides a comprehensive analysis of our performance...
130
- </PrintText>
131
- </PrintSection>
132
-
133
- <PrintPageBreak type="before" />
134
-
135
- <PrintSection title="Financial Performance">
136
- <PrintDataTable
137
- data={financialData}
138
- columns={financialColumns}
139
- title="Quarterly Results"
140
- />
141
- </PrintSection>
142
- </PrintLayout>
143
- );
144
- }
145
- ```
146
-
147
- ## 📊 Data Tables
148
-
149
- ### Basic Table
150
-
151
- ```tsx
152
- <PrintDataTable
153
- data={data}
154
- columns={columns}
155
- title="Sales Data"
156
- />
157
- ```
158
-
159
- ### Grouped Table
160
-
161
- ```tsx
162
- <PrintDataTable
163
- data={data}
164
- columns={columns}
165
- title="Sales by Region"
166
- grouping={{
167
- enabled: true,
168
- groupBy: 'region',
169
- groupHeader: (group) => (
170
- <div className="font-bold text-lg bg-gray-100 p-2">
171
- {group} Region
172
- </div>
173
- )
174
- }}
175
- styling={{
176
- headerStyle: 'solid',
177
- rowStyle: 'striped',
178
- cellPadding: 'normal'
179
- }}
180
- />
181
- ```
182
-
183
- ## 🎴 Card Layouts
184
-
185
- ### Basic Card
186
-
187
- ```tsx
188
- <PrintCard
189
- title="Product Information"
190
- subtitle="Widget Pro"
191
- image={{
192
- src: "/product-image.jpg",
193
- alt: "Widget Pro",
194
- aspectRatio: "square"
195
- }}
196
- metadata={[
197
- { label: "Price", value: "$99.99" },
198
- { label: "SKU", value: "WP-001" },
199
- { label: "Stock", value: "In Stock" }
200
- ]}
201
- layout="vertical"
202
- size="medium"
203
- />
204
- ```
205
-
206
- ### Card Grid
207
-
208
- ```tsx
209
- <PrintGrid columns={3} printColumns={2}>
210
- {products.map(product => (
211
- <PrintCard
212
- key={product.id}
213
- title={product.name}
214
- subtitle={product.category}
215
- image={{ src: product.image, alt: product.name }}
216
- metadata={[
217
- { label: "Price", value: product.price },
218
- { label: "Stock", value: product.stock }
219
- ]}
220
- />
221
- ))}
222
- </PrintGrid>
223
- ```
224
-
225
- ## 📝 Typography
226
-
227
- ### Text Variants
228
-
229
- ```tsx
230
- <PrintText variant="heading" weight="bold">
231
- Main Heading
232
- </PrintText>
233
-
234
- <PrintText variant="subheading" weight="semibold">
235
- Section Heading
236
- </PrintText>
237
-
238
- <PrintText variant="body">
239
- Regular paragraph text with proper line spacing and readability.
240
- </PrintText>
241
-
242
- <PrintText variant="caption" color="muted">
243
- Small caption text for metadata
244
- </PrintText>
245
- ```
246
-
247
- ## 🎯 Print Testing
248
-
249
- ### 1. Browser Print Preview
250
- - Press `Ctrl+P` (Windows) or `Cmd+P` (Mac)
251
- - Use print preview to test your layout
252
- - Check page breaks and margins
253
-
254
- ### 2. Print Optimization
255
- ```tsx
256
- // Enable print optimization (default: true)
257
- <PrintDataTable
258
- data={data}
259
- columns={columns}
260
- printOptimized={true}
261
- />
262
-
263
- // Disable for screen-only content
264
- <PrintCard printOptimized={false}>
265
- Interactive content
266
- </PrintCard>
267
- ```
268
-
269
- ### 3. Page Breaks
270
- ```tsx
271
- // Force page break before element
272
- <PrintPageBreak type="before" />
273
-
274
- // Force page break after element
275
- <PrintPageBreak type="after" />
276
-
277
- // Avoid page breaks within element
278
- <PrintPageBreak type="avoid" />
279
- ```
280
-
281
- ## 🔧 Common Patterns
282
-
283
- ### 1. Report with Cover Page
284
- ```tsx
285
- <PrintLayout
286
- firstPageHeader={<PrintCoverHeader title="Report" />}
287
- subsequentPageHeader={<PrintHeader title="Report" />}
288
- >
289
- {/* Content */}
290
- </PrintLayout>
291
- ```
292
-
293
- ### 2. Multi-Section Document
294
- ```tsx
295
- <PrintLayout>
296
- <PrintSection title="Introduction">
297
- <PrintText variant="body">Content...</PrintText>
298
- </PrintSection>
299
-
300
- <PrintPageBreak type="before" />
301
-
302
- <PrintSection title="Data Analysis">
303
- <PrintDataTable data={data} columns={columns} />
304
- </PrintSection>
305
- </PrintLayout>
306
- ```
307
-
308
- ### 3. Card-Based Catalog
309
- ```tsx
310
- <PrintGrid columns={3} printColumns={2}>
311
- {items.map(item => (
312
- <PrintCard
313
- key={item.id}
314
- title={item.name}
315
- image={{ src: item.image, alt: item.name }}
316
- metadata={[
317
- { label: "Price", value: item.price },
318
- { label: "Description", value: item.description }
319
- ]}
320
- />
321
- ))}
322
- </PrintGrid>
323
- ```
324
-
325
- ## 🎨 Styling
326
-
327
- ### Custom Classes
328
- ```tsx
329
- <PrintCard
330
- className="custom-card-style"
331
- title="Custom Styled Card"
332
- >
333
- Content
334
- </PrintCard>
335
- ```
336
-
337
- ### Print-Specific Styles
338
- ```css
339
- /* Custom print styles */
340
- @media print {
341
- .custom-print-style {
342
- color: #000;
343
- background: #fff;
344
- }
345
- }
346
- ```
347
-
348
- ## 🚀 Next Steps
349
-
350
- 1. **Explore Examples** - Check out the [Examples](./examples/) directory
351
- 2. **Read API Reference** - See [API Reference](./api-reference.md) for complete documentation
352
- 3. **Customize Styling** - Learn about [Customization](./customization.md)
353
- 4. **Advanced Features** - Discover [Advanced Usage](./advanced-usage.md)
354
-
355
- ## 🆘 Need Help?
356
-
357
- - **Documentation**: [Full Documentation](./README.md)
358
- - **Issues**: [GitHub Issues](https://github.com/jmruthers/pace-core/issues)
359
- - **Examples**: [Complete Examples](./examples/)
360
-
361
- ---
362
-
363
- **Ready for more?** Check out the [API Reference](./api-reference.md) to explore all available components and props! 🚀
@@ -1,321 +0,0 @@
1
- /**
2
- * @file PrintButton Component
3
- * @package @jmruthers/pace-core
4
- * @module PrintButton
5
- * @since 0.4.38
6
- *
7
- * Print-optimized button component with print functionality.
8
- */
9
-
10
- import React, { useState } from 'react';
11
- import { cn } from '../../utils/cn';
12
- import { PrintButtonProps, PrintOptions } from './types';
13
-
14
- export function PrintButton({
15
- children,
16
- variant = 'primary',
17
- size = 'md',
18
- shape = 'default',
19
- state = 'default',
20
- printFunction = 'print',
21
- printSelector,
22
- printOptions = {},
23
- onClick,
24
- onPrint,
25
- onPrintStart,
26
- onPrintEnd,
27
- showIcon = true,
28
- icon,
29
- iconPosition = 'left',
30
- fullWidth = false,
31
- printOptimized = true,
32
- className,
33
- ...props
34
- }: PrintButtonProps) {
35
- const [isPrinting, setIsPrinting] = useState(false);
36
-
37
- const getVariantClasses = (variant: string): string => {
38
- switch (variant) {
39
- case 'secondary':
40
- return 'bg-secondary text-secondary-foreground hover:bg-secondary/80';
41
- case 'outline':
42
- return 'border border-input bg-background hover:bg-accent hover:text-accent-foreground';
43
- case 'ghost':
44
- return 'hover:bg-accent hover:text-accent-foreground';
45
- case 'destructive':
46
- return 'bg-destructive text-destructive-foreground hover:bg-destructive/90';
47
- default:
48
- return 'bg-primary text-primary-foreground hover:bg-primary/90';
49
- }
50
- };
51
-
52
- const getSizeClasses = (size: string): string => {
53
- switch (size) {
54
- case 'sm':
55
- return 'h-8 px-3 text-xs';
56
- case 'lg':
57
- return 'h-12 px-8 text-base';
58
- case 'xl':
59
- return 'h-14 px-10 text-lg';
60
- default:
61
- return 'h-10 px-4 text-sm';
62
- }
63
- };
64
-
65
- const getShapeClasses = (shape: string): string => {
66
- switch (shape) {
67
- case 'rounded':
68
- return 'rounded-lg';
69
- case 'pill':
70
- return 'rounded-full';
71
- case 'square':
72
- return 'rounded-none';
73
- default:
74
- return 'rounded-md';
75
- }
76
- };
77
-
78
- const getStateClasses = (state: string): string => {
79
- switch (state) {
80
- case 'loading':
81
- return 'opacity-50 cursor-not-allowed';
82
- case 'disabled':
83
- return 'opacity-50 cursor-not-allowed pointer-events-none';
84
- default:
85
- return 'cursor-pointer';
86
- }
87
- };
88
-
89
- const getPrintOptimizedClasses = (): string => {
90
- if (!printOptimized) return '';
91
- return cn(
92
- 'print:hidden',
93
- 'print:opacity-0',
94
- 'print:pointer-events-none'
95
- );
96
- };
97
-
98
- const getDefaultIcon = () => {
99
- if (icon) return icon;
100
-
101
- switch (printFunction) {
102
- case 'printSelection':
103
- return '📄';
104
- case 'printPage':
105
- return '📃';
106
- case 'printElement':
107
- return '🎯';
108
- default:
109
- return '🖨️';
110
- }
111
- };
112
-
113
- const handlePrint = async () => {
114
- if (isPrinting || state === 'disabled' || state === 'loading') return;
115
-
116
- setIsPrinting(true);
117
- onPrintStart?.();
118
-
119
- try {
120
- switch (printFunction) {
121
- case 'print':
122
- await printDocument(printOptions);
123
- break;
124
- case 'printSelection':
125
- if (printSelector) {
126
- await printSelection(printSelector, printOptions);
127
- }
128
- break;
129
- case 'printPage':
130
- await printPage(printOptions);
131
- break;
132
- case 'printElement':
133
- if (printSelector) {
134
- await printElement(printSelector, printOptions);
135
- }
136
- break;
137
- }
138
- onPrint?.(true);
139
- } catch (error) {
140
- onPrint?.(false, error as Error);
141
- } finally {
142
- setIsPrinting(false);
143
- onPrintEnd?.();
144
- }
145
- };
146
-
147
- const handleClick = (event: React.MouseEvent<HTMLButtonElement>) => {
148
- if (printFunction) {
149
- event.preventDefault();
150
- handlePrint();
151
- }
152
- onClick?.(event);
153
- };
154
-
155
- const isDisabled = state === 'disabled' || state === 'loading' || isPrinting;
156
-
157
- return (
158
- <button
159
- type="button"
160
- className={cn(
161
- 'print-button',
162
- 'inline-flex',
163
- 'items-center',
164
- 'justify-center',
165
- 'whitespace-nowrap',
166
- 'font-medium',
167
- 'ring-offset-background',
168
- 'transition-colors',
169
- 'focus-visible:outline-none',
170
- 'focus-visible:ring-2',
171
- 'focus-visible:ring-ring',
172
- 'focus-visible:ring-offset-2',
173
- 'disabled:pointer-events-none',
174
- 'disabled:opacity-50',
175
- getVariantClasses(variant),
176
- getSizeClasses(size),
177
- getShapeClasses(shape),
178
- getStateClasses(state),
179
- fullWidth && 'w-full',
180
- getPrintOptimizedClasses(),
181
- className
182
- )}
183
- disabled={isDisabled}
184
- onClick={handleClick}
185
- {...props}
186
- >
187
- {showIcon && iconPosition === 'left' && (
188
- <span className="mr-2">
189
- {getDefaultIcon()}
190
- </span>
191
- )}
192
- {children}
193
- {showIcon && iconPosition === 'right' && (
194
- <span className="ml-2">
195
- {getDefaultIcon()}
196
- </span>
197
- )}
198
- </button>
199
- );
200
- }
201
-
202
- // Print utility functions
203
- async function printDocument(options: PrintOptions): Promise<void> {
204
- return new Promise((resolve, reject) => {
205
- try {
206
- // Apply print styles if provided
207
- if (options.stylesheetUrl) {
208
- const link = document.createElement('link');
209
- link.rel = 'stylesheet';
210
- link.href = options.stylesheetUrl;
211
- link.media = options.mediaQuery || 'print';
212
- document.head.appendChild(link);
213
- }
214
-
215
- // Set print options
216
- const printWindow = window.open('', '_blank');
217
- if (!printWindow) {
218
- reject(new Error('Unable to open print window'));
219
- return;
220
- }
221
-
222
- printWindow.document.write(`
223
- <html>
224
- <head>
225
- <title>${options.title || 'Print Document'}</title>
226
- <style>
227
- @page {
228
- margin: ${options.margins?.top || '0.5in'} ${options.margins?.right || '0.5in'} ${options.margins?.bottom || '0.5in'} ${options.margins?.left || '0.5in'};
229
- size: ${options.orientation === 'landscape' ? 'A4 landscape' : 'A4 portrait'};
230
- }
231
- body {
232
- font-family: Arial, sans-serif;
233
- line-height: 1.4;
234
- color: #000;
235
- background: #fff;
236
- }
237
- @media print {
238
- * { -webkit-print-color-adjust: ${options.colorAdjust || 'exact'}; }
239
- }
240
- </style>
241
- </head>
242
- <body>
243
- ${document.documentElement.outerHTML}
244
- </body>
245
- </html>
246
- `);
247
-
248
- printWindow.document.close();
249
- printWindow.focus();
250
- printWindow.print();
251
- printWindow.close();
252
- resolve();
253
- } catch (error) {
254
- reject(error);
255
- }
256
- });
257
- }
258
-
259
- async function printSelection(selector: string, options: PrintOptions): Promise<void> {
260
- const element = document.querySelector(selector);
261
- if (!element) {
262
- throw new Error(`Element with selector "${selector}" not found`);
263
- }
264
-
265
- return printElement(selector, options);
266
- }
267
-
268
- async function printPage(options: PrintOptions): Promise<void> {
269
- return printDocument(options);
270
- }
271
-
272
- async function printElement(selector: string, options: PrintOptions): Promise<void> {
273
- const element = document.querySelector(selector);
274
- if (!element) {
275
- throw new Error(`Element with selector "${selector}" not found`);
276
- }
277
-
278
- return new Promise((resolve, reject) => {
279
- try {
280
- const printWindow = window.open('', '_blank');
281
- if (!printWindow) {
282
- reject(new Error('Unable to open print window'));
283
- return;
284
- }
285
-
286
- printWindow.document.write(`
287
- <html>
288
- <head>
289
- <title>${options.title || 'Print Element'}</title>
290
- <style>
291
- @page {
292
- margin: ${options.margins?.top || '0.5in'} ${options.margins?.right || '0.5in'} ${options.margins?.bottom || '0.5in'} ${options.margins?.left || '0.5in'};
293
- size: ${options.orientation === 'landscape' ? 'A4 landscape' : 'A4 portrait'};
294
- }
295
- body {
296
- font-family: Arial, sans-serif;
297
- line-height: 1.4;
298
- color: #000;
299
- background: #fff;
300
- }
301
- @media print {
302
- * { -webkit-print-color-adjust: ${options.colorAdjust || 'exact'}; }
303
- }
304
- </style>
305
- </head>
306
- <body>
307
- ${element.outerHTML}
308
- </body>
309
- </html>
310
- `);
311
-
312
- printWindow.document.close();
313
- printWindow.focus();
314
- printWindow.print();
315
- printWindow.close();
316
- resolve();
317
- } catch (error) {
318
- reject(error);
319
- }
320
- });
321
- }