@jmruthers/pace-core 0.4.1 → 0.5.3
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.
- package/CHANGELOG.md +26 -1
- package/README.md +231 -229
- package/dist/{DataTable-2LB6HI6V.js → DataTable-ZQDRE46Q.js} +15 -17
- package/dist/{DataTable-BDBqkU-i.d.ts → DataTable-ltTFXHS3.d.ts} +25 -51
- package/dist/{Table-CIm9IWqk.d.ts → PublicLoadingSpinner-Bq_-BeK-.d.ts} +635 -122
- package/dist/{UnifiedAuthProvider-V7y63NjT.d.ts → RBACProvider-BO4ilsQB.d.ts} +11 -36
- package/dist/UnifiedAuthProvider-DGQsy-vY.d.ts +103 -0
- package/dist/{api-AIJ3IJX3.js → api-H5A3H4IR.js} +6 -4
- package/dist/{appConfig-fB1pP_v3.d.ts → appConfig-BVGyuvI7.d.ts} +1 -1
- package/dist/appNameResolver-7GHF5ED2.js +22 -0
- package/dist/{audit-PD5L5ZSC.js → audit-BUW3LMJB.js} +3 -3
- package/dist/chunk-5H3C2SWM.js +3293 -0
- package/dist/chunk-5H3C2SWM.js.map +1 -0
- package/dist/chunk-5SIXIV7R.js +1925 -0
- package/dist/chunk-5SIXIV7R.js.map +1 -0
- package/dist/{chunk-YNU5QJ4S.js → chunk-7BNPOCLL.js} +22 -5
- package/dist/chunk-7BNPOCLL.js.map +1 -0
- package/dist/{chunk-4ZTIEYU2.js → chunk-CDQ3PX7L.js} +1 -1
- package/dist/chunk-CDQ3PX7L.js.map +1 -0
- package/dist/chunk-GNTALZV3.js +17 -0
- package/dist/chunk-GNTALZV3.js.map +1 -0
- package/dist/chunk-GWSBHC4J.js +1349 -0
- package/dist/chunk-GWSBHC4J.js.map +1 -0
- package/dist/{chunk-JUUNUW3O.js → chunk-HD7PYDUV.js} +14 -5
- package/dist/chunk-HD7PYDUV.js.map +1 -0
- package/dist/{chunk-H4PZ4B3Y.js → chunk-HXX35Q2M.js} +113 -27
- package/dist/chunk-HXX35Q2M.js.map +1 -0
- package/dist/chunk-K6B7BLSE.js +388 -0
- package/dist/chunk-K6B7BLSE.js.map +1 -0
- package/dist/chunk-M4RW7PIP.js +5441 -0
- package/dist/chunk-M4RW7PIP.js.map +1 -0
- package/dist/chunk-MZBUOP4P.js +119 -0
- package/dist/chunk-MZBUOP4P.js.map +1 -0
- package/dist/chunk-N2EUGZRW.js +98 -0
- package/dist/chunk-N2EUGZRW.js.map +1 -0
- package/dist/chunk-NQ4TOOO6.js +20 -0
- package/dist/chunk-NQ4TOOO6.js.map +1 -0
- package/dist/{chunk-DC5AMYBS.js → chunk-PLDDJCW6.js} +15 -5
- package/dist/chunk-PLDDJCW6.js.map +1 -0
- package/dist/{chunk-IOX76PSM.js → chunk-PVMYVQSM.js} +270 -28
- package/dist/chunk-PVMYVQSM.js.map +1 -0
- package/dist/{chunk-4MCJAK7J.js → chunk-QKHFMQ5R.js} +2155 -4853
- package/dist/chunk-QKHFMQ5R.js.map +1 -0
- package/dist/chunk-QVYBYGT2.js +428 -0
- package/dist/chunk-QVYBYGT2.js.map +1 -0
- package/dist/{chunk-WHLSWC6W.js → chunk-SS3E6QLB.js} +16 -61
- package/dist/chunk-SS3E6QLB.js.map +1 -0
- package/dist/chunk-WJARTBCT.js +128 -0
- package/dist/chunk-WJARTBCT.js.map +1 -0
- package/dist/chunk-YDJW5XTN.js +84 -0
- package/dist/chunk-YDJW5XTN.js.map +1 -0
- package/dist/components.d.ts +907 -10
- package/dist/components.js +3237 -204
- package/dist/components.js.map +1 -1
- package/dist/{database-CAMsquLm.d.ts → database-C3Szpi5J.d.ts} +28 -11
- package/dist/hooks.d.ts +7 -6
- package/dist/hooks.js +33 -11
- package/dist/hooks.js.map +1 -1
- package/dist/index.d.ts +247 -111
- package/dist/index.js +330 -185
- package/dist/index.js.map +1 -1
- package/dist/{organisation-DLNNQhPB.d.ts → organisation-CO3Sh3_D.d.ts} +1 -1
- package/dist/providers.d.ts +5 -4
- package/dist/providers.js +14 -5
- package/dist/rbac/index.d.ts +964 -839
- package/dist/rbac/index.js +58 -1970
- package/dist/rbac/index.js.map +1 -1
- package/dist/styles/core.css +364 -0
- package/dist/styles/fonts/georama-italic.woff2 +0 -0
- package/dist/styles/fonts/georama.woff2 +0 -0
- package/dist/styles/fonts/open-sans-italic.woff2 +0 -0
- package/dist/styles/fonts/open-sans.woff2 +0 -0
- package/dist/styles/fonts/reddit-mono.woff2 +0 -0
- package/dist/styles/index.d.ts +36 -0
- package/dist/styles/index.js +24 -0
- package/dist/styles/index.js.map +1 -0
- package/dist/theming/runtime.d.ts +73 -0
- package/dist/theming/runtime.js +16 -0
- package/dist/theming/runtime.js.map +1 -0
- package/dist/{types-Bavn44NW.d.ts → types-BRDU7N6w.d.ts} +79 -33
- package/dist/types.d.ts +5 -5
- package/dist/types.js +7 -2
- package/dist/types.js.map +1 -1
- package/dist/{unified-BtRpPbmp.d.ts → unified-CMPjE_fv.d.ts} +0 -1
- package/dist/usePublicRouteParams-B2OcAsur.d.ts +477 -0
- package/dist/utils.d.ts +83 -60
- package/dist/utils.js +293 -55651
- package/dist/utils.js.map +1 -1
- package/dist/validation.d.ts +1 -1
- package/dist/validation.js +1 -1
- package/docs/INDEX.md +192 -0
- package/docs/README.md +46 -32
- package/docs/api/README.md +231 -229
- package/docs/api/classes/ErrorBoundary.md +1 -1
- package/docs/api/classes/InvalidScopeError.md +73 -0
- package/docs/api/classes/MissingUserContextError.md +66 -0
- package/docs/api/classes/OrganisationContextRequiredError.md +66 -0
- package/docs/api/classes/PermissionDeniedError.md +73 -0
- package/docs/api/classes/PublicErrorBoundary.md +132 -0
- package/docs/api/classes/RBACAuditManager.md +270 -0
- package/docs/api/classes/RBACCache.md +284 -0
- package/docs/api/classes/RBACEngine.md +141 -0
- package/docs/api/classes/RBACError.md +76 -0
- package/docs/api/classes/RBACNotInitializedError.md +66 -0
- package/docs/api/classes/SecureSupabaseClient.md +135 -0
- package/docs/api/interfaces/AggregateConfig.md +4 -4
- package/docs/api/interfaces/ButtonProps.md +2 -2
- package/docs/api/interfaces/CardProps.md +2 -2
- package/docs/api/interfaces/ColorPalette.md +1 -1
- package/docs/api/interfaces/ColorShade.md +1 -1
- package/docs/api/interfaces/DataAccessRecord.md +96 -0
- package/docs/api/interfaces/DataTableAction.md +98 -7
- package/docs/api/interfaces/DataTableColumn.md +131 -12
- package/docs/api/interfaces/DataTableProps.md +77 -274
- package/docs/api/interfaces/DataTableToolbarButton.md +7 -7
- package/docs/api/interfaces/EmptyStateConfig.md +5 -5
- package/docs/api/interfaces/EnhancedNavigationMenuProps.md +235 -0
- package/docs/api/interfaces/EventContextType.md +7 -7
- package/docs/api/interfaces/EventLogoProps.md +152 -0
- package/docs/api/interfaces/EventProviderProps.md +2 -2
- package/docs/api/interfaces/FileSizeLimits.md +7 -0
- package/docs/api/interfaces/FileUploadProps.md +154 -0
- package/docs/api/interfaces/FooterProps.md +1 -1
- package/docs/api/interfaces/InactivityWarningModalProps.md +115 -0
- package/docs/api/interfaces/InputProps.md +2 -2
- package/docs/api/interfaces/LabelProps.md +1 -1
- package/docs/api/interfaces/LoginFormProps.md +1 -1
- package/docs/api/interfaces/NavigationAccessRecord.md +107 -0
- package/docs/api/interfaces/NavigationContextType.md +164 -0
- package/docs/api/interfaces/NavigationGuardProps.md +139 -0
- package/docs/api/interfaces/NavigationItem.md +1 -1
- package/docs/api/interfaces/NavigationMenuProps.md +1 -1
- package/docs/api/interfaces/NavigationProviderProps.md +117 -0
- package/docs/api/interfaces/Organisation.md +1 -1
- package/docs/api/interfaces/OrganisationContextType.md +1 -1
- package/docs/api/interfaces/OrganisationMembership.md +1 -1
- package/docs/api/interfaces/OrganisationProviderProps.md +1 -1
- package/docs/api/interfaces/OrganisationSecurityError.md +1 -1
- package/docs/api/interfaces/PaceAppLayoutProps.md +26 -26
- package/docs/api/interfaces/PaceLoginPageProps.md +1 -1
- package/docs/api/interfaces/PageAccessRecord.md +85 -0
- package/docs/api/interfaces/PagePermissionContextType.md +140 -0
- package/docs/api/interfaces/PagePermissionGuardProps.md +153 -0
- package/docs/api/interfaces/PagePermissionProviderProps.md +119 -0
- package/docs/api/interfaces/PaletteData.md +1 -1
- package/docs/api/interfaces/PermissionEnforcerProps.md +153 -0
- package/docs/api/interfaces/PublicErrorBoundaryProps.md +94 -0
- package/docs/api/interfaces/PublicErrorBoundaryState.md +68 -0
- package/docs/api/interfaces/PublicLoadingSpinnerProps.md +86 -0
- package/docs/api/interfaces/PublicPageFooterProps.md +112 -0
- package/docs/api/interfaces/PublicPageHeaderProps.md +138 -0
- package/docs/api/interfaces/PublicPageLayoutProps.md +138 -0
- package/docs/api/interfaces/RBACConfig.md +99 -0
- package/docs/api/interfaces/RBACContextType.md +474 -0
- package/docs/api/interfaces/RBACLogger.md +112 -0
- package/docs/api/interfaces/RBACProviderProps.md +107 -0
- package/docs/api/interfaces/RoleBasedRouterContextType.md +151 -0
- package/docs/api/interfaces/RoleBasedRouterProps.md +156 -0
- package/docs/api/interfaces/RouteAccessRecord.md +107 -0
- package/docs/api/interfaces/RouteConfig.md +121 -0
- package/docs/api/interfaces/SecureDataContextType.md +168 -0
- package/docs/api/interfaces/SecureDataProviderProps.md +132 -0
- package/docs/api/interfaces/StorageConfig.md +41 -0
- package/docs/api/interfaces/StorageFileInfo.md +74 -0
- package/docs/api/interfaces/StorageFileMetadata.md +140 -0
- package/docs/api/interfaces/StorageListOptions.md +86 -0
- package/docs/api/interfaces/StorageListResult.md +41 -0
- package/docs/api/interfaces/StorageUploadOptions.md +88 -0
- package/docs/api/interfaces/StorageUploadResult.md +63 -0
- package/docs/api/interfaces/StorageUrlOptions.md +47 -0
- package/docs/api/interfaces/StyleImport.md +2 -2
- package/docs/api/interfaces/ToastActionElement.md +1 -1
- package/docs/api/interfaces/ToastProps.md +1 -1
- package/docs/api/interfaces/UnifiedAuthContextType.md +465 -64
- package/docs/api/interfaces/UnifiedAuthProviderProps.md +95 -9
- package/docs/api/interfaces/UseInactivityTrackerOptions.md +136 -0
- package/docs/api/interfaces/UseInactivityTrackerReturn.md +123 -0
- package/docs/api/interfaces/UsePublicEventLogoOptions.md +87 -0
- package/docs/api/interfaces/UsePublicEventLogoReturn.md +81 -0
- package/docs/api/interfaces/UsePublicEventOptions.md +34 -0
- package/docs/api/interfaces/UsePublicEventReturn.md +68 -0
- package/docs/api/interfaces/UsePublicRouteParamsReturn.md +94 -0
- package/docs/api/interfaces/UserEventAccess.md +14 -14
- package/docs/api/interfaces/UserMenuProps.md +6 -6
- package/docs/api/interfaces/UserProfile.md +1 -1
- package/docs/api/modules.md +4233 -1134
- package/docs/api-reference/components.md +761 -43
- package/docs/api-reference/hooks.md +126 -0
- package/docs/api-reference/providers.md +141 -65
- package/docs/api-reference/types.md +66 -36
- package/docs/api-reference/utilities.md +1 -1
- package/docs/architecture/README.md +1 -2
- package/docs/best-practices/README.md +400 -0
- package/docs/consuming-app-example.md +42 -96
- package/docs/consuming-app-vite-config.md +233 -0
- package/docs/core-concepts/events.md +3 -3
- package/docs/core-concepts/organisations.md +0 -1
- package/docs/core-concepts/rbac-system.md +23 -10
- package/docs/documentation-style-checklist.md +8 -2
- package/docs/examples/navigation-menu-auth-fix.md +344 -0
- package/docs/getting-started/examples/README.md +15 -1
- package/docs/getting-started/examples/basic-auth-app.md +444 -119
- package/docs/getting-started/examples/full-featured-app.md +6 -6
- package/docs/getting-started/installation.md +231 -52
- package/docs/getting-started/quick-start.md +121 -24
- package/docs/implementation-guides/app-layout.md +133 -108
- package/docs/implementation-guides/data-tables.md +1011 -29
- package/docs/implementation-guides/forms.md +3 -3
- package/docs/implementation-guides/hierarchical-datatable.md +850 -0
- package/docs/implementation-guides/large-datasets.md +2 -2
- package/docs/implementation-guides/navigation.md +1 -1
- package/docs/implementation-guides/permission-enforcement.md +4 -4
- package/docs/implementation-guides/public-pages.md +752 -0
- package/docs/migration/README.md +18 -8
- package/docs/migration/quick-migration-guide.md +320 -0
- package/docs/migration/rbac-migration.md +50 -0
- package/docs/migration/v0.4.15-tailwind-scanning.md +272 -0
- package/docs/migration/v0.4.16-css-first-approach.md +306 -0
- package/docs/migration/v0.4.17-source-path-fix.md +229 -0
- package/docs/migration-guide.md +77 -105
- package/docs/performance/README.md +1 -4
- package/docs/print-components/README.md +258 -0
- package/docs/print-components/api-reference.md +636 -0
- package/docs/print-components/examples/README.md +204 -0
- package/docs/print-components/examples/basic-report.tsx +92 -0
- package/docs/print-components/examples/card-catalog.tsx +149 -0
- package/docs/print-components/examples/cover-page-report.tsx +163 -0
- package/docs/print-components/quick-start.md +363 -0
- package/docs/quick-reference.md +53 -36
- package/docs/rbac/README.md +136 -69
- package/docs/rbac/api-reference.md +39 -8
- package/docs/rbac/examples.md +237 -66
- package/docs/rbac/getting-started.md +131 -16
- package/docs/rbac/quick-start.md +499 -323
- package/docs/rbac/troubleshooting.md +240 -262
- package/docs/security/README.md +50 -1
- package/docs/styles/README.md +226 -111
- package/docs/testing/README.md +6 -10
- package/docs/troubleshooting/README.md +497 -0
- package/docs/troubleshooting/common-issues.md +604 -14
- package/docs/troubleshooting/styling-issues.md +219 -0
- package/docs/troubleshooting/tailwind-content-scanning.md +213 -0
- package/docs/usage.md +54 -91
- package/docs/visual-testing.md +0 -7
- package/package.json +47 -25
- package/src/__mocks__/lucide-react.ts +181 -0
- package/src/__tests__/REBUILD_PLAN.md +223 -0
- package/src/__tests__/TESTING_GUIDELINES.md +341 -0
- package/src/__tests__/fixtures/mocks.ts +93 -0
- package/src/__tests__/helpers/component-test-utils.tsx +145 -0
- package/src/__tests__/helpers/test-utils.tsx +117 -0
- package/src/__tests__/integration/UserProfile.test.tsx +128 -0
- package/src/__tests__/setup.ts +71 -0
- package/src/__tests__/templates/accessibility.test.template.tsx +279 -0
- package/src/__tests__/templates/component.test.template.tsx +144 -0
- package/src/__tests__/templates/hook.test.template.ts +173 -0
- package/src/__tests__/templates/integration.test.template.tsx +199 -0
- package/src/__tests__/types/test.types.ts +106 -0
- package/src/components/Alert/Alert.test.tsx +496 -0
- package/src/components/Alert/Alert.tsx +134 -0
- package/src/components/Alert/index.ts +2 -0
- package/src/components/Avatar/Avatar.test.tsx +484 -0
- package/src/components/Avatar/Avatar.tsx +84 -0
- package/src/components/Avatar/index.ts +2 -0
- package/src/components/Button/Button.test.tsx +662 -0
- package/src/components/Button/Button.tsx +270 -0
- package/src/components/Button/index.ts +2 -0
- package/src/components/Card/Card.test.tsx +593 -0
- package/src/components/Card/Card.tsx +271 -0
- package/src/components/Card/index.ts +1 -0
- package/src/components/Checkbox/Checkbox.test.tsx +461 -0
- package/src/components/Checkbox/Checkbox.tsx +75 -0
- package/src/components/Checkbox/__mocks__/Checkbox.tsx +2 -0
- package/src/components/Checkbox/index.ts +2 -0
- package/src/components/DataTable/DataTable.tsx +446 -0
- package/src/components/DataTable/__tests__/README.md +145 -0
- package/src/components/DataTable/__tests__/mocks/MockRBACProvider.tsx +66 -0
- package/src/components/DataTable/__tests__/test-utils/dataFactories.ts +103 -0
- package/src/components/DataTable/__tests__/test-utils/sharedTestUtils.tsx +381 -0
- package/src/components/DataTable/__tests__/test-utils.ts +94 -0
- package/src/components/DataTable/components/AccessDeniedPage.tsx +168 -0
- package/src/components/DataTable/components/ActionButtons.tsx +194 -0
- package/src/components/DataTable/components/BulkOperationsDropdown.tsx +160 -0
- package/src/components/DataTable/components/ColumnFilter.tsx +114 -0
- package/src/components/DataTable/components/ColumnVisibilityDropdown.tsx +100 -0
- package/src/components/DataTable/components/DataTableBody.tsx +461 -0
- package/src/components/DataTable/components/DataTableCore.tsx +1027 -0
- package/src/components/DataTable/components/DataTableErrorBoundary.tsx +214 -0
- package/src/components/DataTable/components/DataTableModals.tsx +87 -0
- package/src/components/DataTable/components/DataTableToolbar.tsx +262 -0
- package/src/components/DataTable/components/DraggableColumnHeader.tsx +144 -0
- package/src/components/DataTable/components/EditableRow.tsx +159 -0
- package/src/components/DataTable/components/EmptyState.tsx +64 -0
- package/src/components/DataTable/components/ExpandButton.tsx +113 -0
- package/src/components/DataTable/components/FilterRow.tsx +100 -0
- package/src/components/DataTable/components/GroupHeader.tsx +42 -0
- package/src/components/DataTable/components/GroupingDropdown.tsx +96 -0
- package/src/components/DataTable/components/ImportModal.tsx +345 -0
- package/src/components/DataTable/components/LoadingState.tsx +12 -0
- package/src/components/DataTable/components/PaginationControls.tsx +332 -0
- package/src/components/DataTable/components/UnifiedTableBody.tsx +742 -0
- package/src/components/DataTable/components/ViewRowModal.tsx +68 -0
- package/src/components/DataTable/components/VirtualizedDataTable.tsx +513 -0
- package/src/components/DataTable/components/index.ts +16 -0
- package/src/components/DataTable/context/DataTableContext.tsx +97 -0
- package/src/components/DataTable/core/ActionManager.ts +235 -0
- package/src/components/DataTable/core/ColumnFactory.ts +268 -0
- package/src/components/DataTable/core/ColumnManager.ts +205 -0
- package/src/components/DataTable/core/DataManager.ts +188 -0
- package/src/components/DataTable/core/DataTableContext.tsx +181 -0
- package/src/components/DataTable/core/LocalDataAdapter.ts +264 -0
- package/src/components/DataTable/core/PluginRegistry.ts +229 -0
- package/src/components/DataTable/core/StateManager.ts +311 -0
- package/src/components/DataTable/core/index.ts +8 -0
- package/src/components/DataTable/core/interfaces.ts +338 -0
- package/src/components/DataTable/examples/HierarchicalActionsExample.tsx +419 -0
- package/src/components/DataTable/examples/HierarchicalExample.tsx +475 -0
- package/src/components/DataTable/examples/InitialPageSizeExample.tsx +176 -0
- package/src/components/DataTable/examples/PerformanceExample.tsx +505 -0
- package/src/components/DataTable/hooks/useColumnOrderPersistence.ts +95 -0
- package/src/components/DataTable/hooks/useColumnReordering.ts +110 -0
- package/src/components/DataTable/hooks/useDataTableState.ts +325 -0
- package/src/components/DataTable/hooks/useHierarchicalState.ts +174 -0
- package/src/components/DataTable/index.ts +68 -0
- package/src/components/DataTable/styles.ts +171 -0
- package/src/components/DataTable/types.ts +511 -0
- package/src/components/DataTable/utils/debugTools.ts +583 -0
- package/src/components/DataTable/utils/errorHandling.ts +494 -0
- package/src/components/DataTable/utils/exportUtils.ts +126 -0
- package/src/components/DataTable/utils/flexibleImport.ts +510 -0
- package/src/components/DataTable/utils/hierarchicalSorting.ts +151 -0
- package/src/components/DataTable/utils/hierarchicalUtils.ts +218 -0
- package/src/components/DataTable/utils/index.ts +1 -0
- package/src/components/DataTable/utils/performanceUtils.ts +351 -0
- package/src/components/Dialog/Dialog.test.tsx +1139 -0
- package/src/components/Dialog/Dialog.tsx +782 -0
- package/src/components/Dialog/README.md +804 -0
- package/src/components/Dialog/examples/BasicHtmlTest.tsx +55 -0
- package/src/components/Dialog/examples/DebugHtmlExample.tsx +68 -0
- package/src/components/Dialog/examples/HtmlDialogExample.tsx +202 -0
- package/src/components/Dialog/examples/SimpleHtmlTest.tsx +61 -0
- package/src/components/Dialog/examples/SmartDialogExample.tsx +322 -0
- package/src/components/Dialog/index.ts +12 -0
- package/src/components/Dialog/utils/safeHtml.ts +185 -0
- package/src/components/ErrorBoundary/ErrorBoundary.test.tsx +752 -0
- package/src/components/ErrorBoundary/ErrorBoundary.tsx +312 -0
- package/src/components/ErrorBoundary/index.ts +8 -0
- package/src/components/EventSelector/EventSelector.tsx +360 -0
- package/src/components/EventSelector/index.ts +3 -0
- package/src/components/EventSelector/types.ts +79 -0
- package/src/components/FileUpload/FileUpload.example.tsx +218 -0
- package/src/components/FileUpload/FileUpload.test.tsx +665 -0
- package/src/components/FileUpload/FileUpload.tsx +237 -0
- package/src/components/FileUpload/index.ts +6 -0
- package/src/components/Footer/Footer.test.tsx +482 -0
- package/src/components/Footer/Footer.tsx +197 -0
- package/src/components/Footer/index.ts +17 -0
- package/src/components/Form/Form.test.tsx +1158 -0
- package/src/components/Form/Form.tsx +166 -0
- package/src/components/Form/FormErrorSummary.tsx +113 -0
- package/src/components/Form/FormField.tsx +249 -0
- package/src/components/Form/FormFieldset.tsx +127 -0
- package/src/components/Form/FormLiveRegion.tsx +198 -0
- package/src/components/Form/index.ts +26 -0
- package/src/components/Header/Header.test.tsx +582 -0
- package/src/components/Header/Header.tsx +301 -0
- package/src/components/Header/index.ts +4 -0
- package/src/components/InactivityWarningModal/InactivityWarningModal.test.tsx +489 -0
- package/src/components/InactivityWarningModal/InactivityWarningModal.tsx +164 -0
- package/src/components/InactivityWarningModal/index.ts +9 -0
- package/src/components/Input/Input.test.tsx +466 -0
- package/src/components/Input/Input.tsx +201 -0
- package/src/components/Input/__mocks__/Input.tsx +2 -0
- package/src/components/Input/index.ts +9 -0
- package/src/components/Label/Label.tsx +186 -0
- package/src/components/Label/index.ts +2 -0
- package/src/components/LoadingSpinner/LoadingSpinner.test.tsx +450 -0
- package/src/components/LoadingSpinner/LoadingSpinner.tsx +98 -0
- package/src/components/LoadingSpinner/index.ts +3 -0
- package/src/components/LoginForm/LoginForm.test.tsx +816 -0
- package/src/components/LoginForm/LoginForm.tsx +273 -0
- package/src/components/LoginForm/index.ts +3 -0
- package/src/components/NavigationMenu/NavigationMenu.test.tsx +883 -0
- package/src/components/NavigationMenu/NavigationMenu.tsx +698 -0
- package/src/components/NavigationMenu/index.ts +10 -0
- package/src/components/NavigationMenu/types.ts +85 -0
- package/src/components/OrganisationSelector/OrganisationSelector.test.tsx +748 -0
- package/src/components/OrganisationSelector/OrganisationSelector.tsx +304 -0
- package/src/components/OrganisationSelector/index.ts +9 -0
- package/src/components/PaceAppLayout/PaceAppLayout.test.tsx +891 -0
- package/src/components/PaceAppLayout/PaceAppLayout.tsx +699 -0
- package/src/components/PaceAppLayout/README.md +278 -0
- package/src/components/PaceAppLayout/index.ts +1 -0
- package/src/components/PaceLoginPage/PaceLoginPage.test.tsx +475 -0
- package/src/components/PaceLoginPage/PaceLoginPage.tsx +221 -0
- package/src/components/PaceLoginPage/index.ts +1 -0
- package/src/components/PasswordReset/PasswordChangeForm.test.tsx +621 -0
- package/src/components/PasswordReset/PasswordChangeForm.tsx +186 -0
- package/src/components/PasswordReset/PasswordResetForm.test.tsx +605 -0
- package/src/components/PasswordReset/PasswordResetForm.tsx +201 -0
- package/src/components/PasswordReset/index.ts +4 -0
- package/src/components/PrintButton/PrintButton.tsx +321 -0
- package/src/components/PrintButton/PrintButtonGroup.tsx +84 -0
- package/src/components/PrintButton/PrintToolbar.tsx +94 -0
- package/src/components/PrintButton/examples/PrintButtonShowcase.tsx +438 -0
- package/src/components/PrintButton/index.ts +33 -0
- package/src/components/PrintButton/types.ts +173 -0
- package/src/components/PrintCard/PrintCard.tsx +154 -0
- package/src/components/PrintCard/PrintCardContent.tsx +57 -0
- package/src/components/PrintCard/PrintCardFooter.tsx +60 -0
- package/src/components/PrintCard/PrintCardGrid.tsx +91 -0
- package/src/components/PrintCard/PrintCardHeader.tsx +78 -0
- package/src/components/PrintCard/PrintCardImage.tsx +81 -0
- package/src/components/PrintCard/examples/PrintCardShowcase.tsx +239 -0
- package/src/components/PrintCard/index.ts +34 -0
- package/src/components/PrintCard/types.ts +171 -0
- package/src/components/PrintDataTable/PrintDataTable.tsx +215 -0
- package/src/components/PrintDataTable/PrintTableGroup.tsx +90 -0
- package/src/components/PrintDataTable/PrintTableRow.tsx +76 -0
- package/src/components/PrintDataTable/index.ts +25 -0
- package/src/components/PrintDataTable/types.ts +67 -0
- package/src/components/PrintFooter/PrintFooter.tsx +183 -0
- package/src/components/PrintFooter/PrintFooterContent.tsx +71 -0
- package/src/components/PrintFooter/PrintFooterInfo.tsx +86 -0
- package/src/components/PrintFooter/PrintPageNumber.tsx +90 -0
- package/src/components/PrintFooter/examples/PrintFooterShowcase.tsx +390 -0
- package/src/components/PrintFooter/index.ts +30 -0
- package/src/components/PrintFooter/types.ts +149 -0
- package/src/components/PrintGrid/PrintGrid.tsx +180 -0
- package/src/components/PrintGrid/PrintGridBreakpoint.tsx +109 -0
- package/src/components/PrintGrid/PrintGridContainer.tsx +128 -0
- package/src/components/PrintGrid/PrintGridItem.tsx +220 -0
- package/src/components/PrintGrid/examples/PrintGridShowcase.tsx +359 -0
- package/src/components/PrintGrid/index.ts +31 -0
- package/src/components/PrintGrid/types.ts +159 -0
- package/src/components/PrintHeader/PrintCoverHeader.tsx +230 -0
- package/src/components/PrintHeader/PrintHeader.tsx +150 -0
- package/src/components/PrintHeader/index.ts +17 -0
- package/src/components/PrintHeader/types.ts +42 -0
- package/src/components/PrintLayout/PrintLayout.tsx +122 -0
- package/src/components/PrintLayout/PrintLayoutContext.tsx +66 -0
- package/src/components/PrintLayout/PrintPageBreak.tsx +52 -0
- package/src/components/PrintLayout/examples/PrintShowcase.tsx +230 -0
- package/src/components/PrintLayout/index.ts +19 -0
- package/src/components/PrintLayout/types.ts +37 -0
- package/src/components/PrintPageBreak/PrintPageBreak.tsx +120 -0
- package/src/components/PrintPageBreak/PrintPageBreakGroup.tsx +90 -0
- package/src/components/PrintPageBreak/PrintPageBreakIndicator.tsx +112 -0
- package/src/components/PrintPageBreak/examples/PrintPageBreakShowcase.tsx +279 -0
- package/src/components/PrintPageBreak/index.ts +23 -0
- package/src/components/PrintPageBreak/types.ts +94 -0
- package/src/components/PrintSection/PrintColumn.tsx +104 -0
- package/src/components/PrintSection/PrintDivider.tsx +101 -0
- package/src/components/PrintSection/PrintSection.tsx +129 -0
- package/src/components/PrintSection/PrintSectionContent.tsx +75 -0
- package/src/components/PrintSection/PrintSectionHeader.tsx +97 -0
- package/src/components/PrintSection/examples/PrintSectionShowcase.tsx +258 -0
- package/src/components/PrintSection/index.ts +33 -0
- package/src/components/PrintSection/types.ts +155 -0
- package/src/components/PrintText/PrintText.tsx +116 -0
- package/src/components/PrintText/index.ts +16 -0
- package/src/components/PrintText/types.ts +24 -0
- package/src/components/Progress/Progress.tsx +116 -0
- package/src/components/Progress/index.ts +3 -0
- package/src/components/PublicLayout/EventLogo.tsx +287 -0
- package/src/components/PublicLayout/PublicErrorBoundary.tsx +279 -0
- package/src/components/PublicLayout/PublicLoadingSpinner.tsx +208 -0
- package/src/components/PublicLayout/PublicPageContextChecker.tsx +130 -0
- package/src/components/PublicLayout/PublicPageDebugger.tsx +104 -0
- package/src/components/PublicLayout/PublicPageDiagnostic.tsx +162 -0
- package/src/components/PublicLayout/PublicPageFooter.tsx +124 -0
- package/src/components/PublicLayout/PublicPageHeader.tsx +178 -0
- package/src/components/PublicLayout/PublicPageLayout.tsx +232 -0
- package/src/components/PublicLayout/PublicPageProvider.tsx +137 -0
- package/src/components/PublicLayout/index.ts +51 -0
- package/src/components/Select/Select.test.tsx +948 -0
- package/src/components/Select/Select.tsx +660 -0
- package/src/components/Select/index.ts +1 -0
- package/src/components/SuperAdminGuard.tsx +116 -0
- package/src/components/Table/Table.tsx +222 -0
- package/src/components/Table/index.ts +11 -0
- package/src/components/Toast/Toast.test.tsx +586 -0
- package/src/components/Toast/Toast.tsx +339 -0
- package/src/components/Toast/index.ts +14 -0
- package/src/components/Tooltip/Tooltip.test.tsx +852 -0
- package/src/components/Tooltip/Tooltip.tsx +167 -0
- package/src/components/Tooltip/index.ts +7 -0
- package/src/components/UserMenu/UserMenu.test.tsx +702 -0
- package/src/components/UserMenu/UserMenu.tsx +243 -0
- package/src/components/UserMenu/index.ts +3 -0
- package/src/components/examples/PermissionExample.tsx +150 -0
- package/src/components/index.ts +434 -0
- package/src/components.ts +19 -0
- package/src/constants/performance.ts +14 -0
- package/src/examples/CorrectPublicPageImplementation.tsx +301 -0
- package/src/examples/PublicEventPage.tsx +274 -0
- package/src/examples/PublicPageApp.tsx +308 -0
- package/src/examples/PublicPageUsageExample.tsx +216 -0
- package/src/hooks/index.ts +56 -0
- package/src/hooks/public/index.ts +34 -0
- package/src/hooks/public/usePublicEvent.ts +261 -0
- package/src/hooks/public/usePublicEventLogo.ts +285 -0
- package/src/hooks/public/usePublicRouteParams.ts +259 -0
- package/src/hooks/useAppConfig.ts +94 -0
- package/src/hooks/useComponentPerformance.ts +39 -0
- package/src/hooks/useCounter.test.ts +135 -0
- package/src/hooks/useDataTablePerformance.ts +387 -0
- package/src/hooks/useDataTableState.ts +110 -0
- package/src/hooks/useDebounce.test.ts +375 -0
- package/src/hooks/useDebounce.ts +18 -0
- package/src/hooks/useFocusManagement.ts +161 -0
- package/src/hooks/useFocusTrap.ts +155 -0
- package/src/hooks/useInactivityTracker.ts +372 -0
- package/src/hooks/useIsMobile.ts +42 -0
- package/src/hooks/useKeyboardShortcuts.ts +237 -0
- package/src/hooks/useOrganisationPermissions.test.ts +528 -0
- package/src/hooks/useOrganisationPermissions.ts +208 -0
- package/src/hooks/useOrganisationSecurity.test.ts +734 -0
- package/src/hooks/useOrganisationSecurity.ts +262 -0
- package/src/hooks/usePerformanceMonitor.ts +128 -0
- package/src/hooks/usePermissionCache.test.ts +542 -0
- package/src/hooks/usePermissionCache.ts +455 -0
- package/src/hooks/useSecureDataAccess.ts +586 -0
- package/src/hooks/useStorage.ts +274 -0
- package/src/hooks/useToast.ts +242 -0
- package/src/hooks/useZodForm.ts +28 -0
- package/src/index.ts +199 -0
- package/src/providers/AuthProvider.tsx +369 -0
- package/src/providers/EventProvider.tsx +324 -0
- package/src/providers/InactivityProvider.tsx +238 -0
- package/src/providers/OrganisationProvider.tsx +588 -0
- package/src/providers/UnifiedAuthProvider.tsx +327 -0
- package/src/providers/index.ts +17 -0
- package/src/rbac/README.md +885 -0
- package/src/rbac/__tests__/integration.test.tsx +218 -0
- package/src/rbac/adapters.tsx +726 -0
- package/src/rbac/api.test.ts +441 -0
- package/src/rbac/api.ts +339 -0
- package/src/rbac/audit-enhanced.ts +339 -0
- package/src/rbac/audit.ts +338 -0
- package/src/rbac/cache.ts +215 -0
- package/src/rbac/components/EnhancedNavigationMenu.tsx +294 -0
- package/src/rbac/components/NavigationGuard.tsx +294 -0
- package/src/rbac/components/NavigationProvider.tsx +314 -0
- package/src/rbac/components/PagePermissionGuard.tsx +430 -0
- package/src/rbac/components/PagePermissionProvider.tsx +274 -0
- package/src/rbac/components/PermissionEnforcer.tsx +307 -0
- package/src/rbac/components/RoleBasedRouter.tsx +425 -0
- package/src/rbac/components/SecureDataProvider.tsx +319 -0
- package/src/rbac/components/index.ts +64 -0
- package/src/rbac/config.ts +133 -0
- package/src/rbac/docs/event-based-apps.md +285 -0
- package/src/rbac/engine.ts +1026 -0
- package/src/rbac/eslint-rules.js +285 -0
- package/src/rbac/examples/CompleteRBACExample.tsx +323 -0
- package/src/rbac/examples/EventBasedApp.tsx +238 -0
- package/src/rbac/hooks/index.ts +21 -0
- package/src/rbac/hooks/useCan.test.ts +461 -0
- package/src/rbac/hooks/usePermissions.test.ts +359 -0
- package/src/rbac/hooks/usePermissions.ts +567 -0
- package/src/rbac/hooks/useRBAC.simple.test.ts +90 -0
- package/src/rbac/hooks/useRBAC.test.ts +503 -0
- package/src/rbac/hooks/useRBAC.ts +262 -0
- package/src/rbac/index.ts +109 -0
- package/src/rbac/permissions.ts +293 -0
- package/src/rbac/providers/RBACProvider.tsx +634 -0
- package/src/rbac/providers/__tests__/RBACProvider.test.tsx +687 -0
- package/src/rbac/providers/index.ts +11 -0
- package/src/rbac/secureClient.ts +244 -0
- package/src/rbac/security.ts +346 -0
- package/src/rbac/testing/index.tsx +340 -0
- package/src/rbac/types.ts +343 -0
- package/src/rbac/utils/eventContext.ts +83 -0
- package/src/styles/core.css +364 -0
- package/src/styles/index.ts +51 -0
- package/src/theming/runtime.ts +187 -0
- package/src/types/database.ts +472 -0
- package/src/types/guards.ts +30 -0
- package/src/types/index.ts +25 -0
- package/src/types/organisation.ts +184 -0
- package/src/types/security.ts +70 -0
- package/src/types/supabase.ts +166 -0
- package/src/types/theme.ts +6 -0
- package/src/types/unified.ts +262 -0
- package/src/types/validation.ts +164 -0
- package/src/types/vitest-globals.d.ts +43 -0
- package/src/utils/__mocks__/supabaseMock.ts +75 -0
- package/src/utils/__mocks__/supabaseMock.tsx +198 -0
- package/src/utils/appConfig.ts +47 -0
- package/src/utils/appIdResolver.ts +130 -0
- package/src/utils/appNameResolver.ts +190 -0
- package/src/utils/audit.ts +127 -0
- package/src/utils/auth-utils.ts +96 -0
- package/src/utils/bundleAnalysis.ts +129 -0
- package/src/utils/cn.ts +7 -0
- package/src/utils/debugLogger.ts +46 -0
- package/src/utils/deviceFingerprint.ts +215 -0
- package/src/utils/dynamicUtils.ts +105 -0
- package/src/utils/formatDate.test.ts +241 -0
- package/src/utils/formatting.ts +77 -0
- package/src/utils/index.ts +145 -0
- package/src/utils/lazyLoad.tsx +44 -0
- package/src/utils/organisationContext.ts +135 -0
- package/src/utils/performanceBenchmark.ts +64 -0
- package/src/utils/performanceBudgets.ts +111 -0
- package/src/utils/permissionTypes.ts +37 -0
- package/src/utils/permissionUtils.ts +31 -0
- package/src/utils/print/PrintDataProcessor.ts +390 -0
- package/src/utils/print/examples/PrintUtilitiesShowcase.tsx +397 -0
- package/src/utils/print/index.ts +29 -0
- package/src/utils/print/types.ts +196 -0
- package/src/utils/print/usePrintOptimization.ts +272 -0
- package/src/utils/sanitization.ts +264 -0
- package/src/utils/schemaUtils.ts +37 -0
- package/src/utils/secureDataAccess.ts +361 -0
- package/src/utils/secureErrors.ts +79 -0
- package/src/utils/secureStorage.ts +244 -0
- package/src/utils/security.ts +156 -0
- package/src/utils/securityMonitor.ts +45 -0
- package/src/utils/sessionTracking.ts +170 -0
- package/src/utils/storage/README.md +348 -0
- package/src/utils/storage/config.ts +100 -0
- package/src/utils/storage/helpers.ts +359 -0
- package/src/utils/storage/index.ts +36 -0
- package/src/utils/storage/types.ts +90 -0
- package/src/utils/validation.ts +111 -0
- package/src/utils/validationUtils.ts +120 -0
- package/src/validation/common.ts +53 -0
- package/src/validation/csrf.ts +214 -0
- package/src/validation/index.ts +43 -0
- package/src/validation/passwordSchema.ts +125 -0
- package/src/validation/sanitization.ts +96 -0
- package/src/validation/schemaUtils.ts +42 -0
- package/src/validation/sqlInjectionProtection.ts +242 -0
- package/src/validation/user.ts +34 -0
- package/dist/chunk-4MCJAK7J.js.map +0 -1
- package/dist/chunk-4ZTIEYU2.js.map +0 -1
- package/dist/chunk-H4PZ4B3Y.js.map +0 -1
- package/dist/chunk-IOX76PSM.js.map +0 -1
- package/dist/chunk-JUUNUW3O.js.map +0 -1
- package/dist/chunk-KK6WIDK6.js +0 -63
- package/dist/chunk-KK6WIDK6.js.map +0 -1
- package/dist/chunk-U7DY5T33.js +0 -11
- package/dist/chunk-U7DY5T33.js.map +0 -1
- package/dist/chunk-WHLSWC6W.js.map +0 -1
- package/dist/chunk-XI7QFSSC.js +0 -790
- package/dist/chunk-XI7QFSSC.js.map +0 -1
- package/dist/chunk-XIJMMBDD.js +0 -73
- package/dist/chunk-XIJMMBDD.js.map +0 -1
- package/dist/chunk-YNU5QJ4S.js.map +0 -1
- package/dist/chunk-YWYCNGWH.js +0 -2070
- package/dist/chunk-YWYCNGWH.js.map +0 -1
- package/dist/chunk-ZJ3UKPIW.js +0 -952
- package/dist/chunk-ZJ3UKPIW.js.map +0 -1
- package/dist/useAppConfig-CZNJJsT_.d.ts +0 -148
- package/dist/{DataTable-2LB6HI6V.js.map → DataTable-ZQDRE46Q.js.map} +0 -0
- package/dist/{api-AIJ3IJX3.js.map → api-H5A3H4IR.js.map} +0 -0
- package/dist/{audit-PD5L5ZSC.js.map → appNameResolver-7GHF5ED2.js.map} +0 -0
- package/dist/{chunk-DC5AMYBS.js.map → audit-BUW3LMJB.js.map} +0 -0
- package/dist/{validation-D2-NNCCE.d.ts → validation-PM_iOaTI.d.ts} +6 -6
|
@@ -0,0 +1,204 @@
|
|
|
1
|
+
# Print Components Examples
|
|
2
|
+
|
|
3
|
+
> **📚 Complete working examples for all print components**
|
|
4
|
+
|
|
5
|
+
This directory contains comprehensive examples demonstrating how to use pace-core print components in real-world scenarios.
|
|
6
|
+
|
|
7
|
+
## 📋 Available Examples
|
|
8
|
+
|
|
9
|
+
### 1. [Basic Report](./basic-report.tsx)
|
|
10
|
+
Simple business report with header, data table, and footer.
|
|
11
|
+
|
|
12
|
+
**Features:**
|
|
13
|
+
- PrintLayout with A4 portrait orientation
|
|
14
|
+
- PrintHeader with branding and metadata
|
|
15
|
+
- PrintDataTable with grouping and styling
|
|
16
|
+
- PrintFooter with page numbering
|
|
17
|
+
- PrintButton for print functionality
|
|
18
|
+
|
|
19
|
+
**Use Case:** Employee directories, simple reports, data summaries
|
|
20
|
+
|
|
21
|
+
### 2. [Cover Page Report](./cover-page-report.tsx)
|
|
22
|
+
Professional report with cover page and subsequent page headers.
|
|
23
|
+
|
|
24
|
+
**Features:**
|
|
25
|
+
- PrintCoverHeader for first page
|
|
26
|
+
- PrintHeader for subsequent pages
|
|
27
|
+
- PrintSection for content organization
|
|
28
|
+
- PrintPageBreak for page control
|
|
29
|
+
- Multi-section document structure
|
|
30
|
+
|
|
31
|
+
**Use Case:** Annual reports, formal documents, executive summaries
|
|
32
|
+
|
|
33
|
+
### 3. [Card Catalog](./card-catalog.tsx)
|
|
34
|
+
Product catalog with card-based layout and grid system.
|
|
35
|
+
|
|
36
|
+
**Features:**
|
|
37
|
+
- PrintGrid for responsive layout
|
|
38
|
+
- PrintCard for product display
|
|
39
|
+
- Image integration with aspect ratios
|
|
40
|
+
- Metadata display
|
|
41
|
+
- Print-optimized card layouts
|
|
42
|
+
|
|
43
|
+
**Use Case:** Product catalogs, directories, reference materials
|
|
44
|
+
|
|
45
|
+
## 🚀 Getting Started
|
|
46
|
+
|
|
47
|
+
### 1. Copy an Example
|
|
48
|
+
```bash
|
|
49
|
+
# Copy the basic report example
|
|
50
|
+
cp docs/print-components/examples/basic-report.tsx src/components/MyReport.tsx
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
### 2. Install Dependencies
|
|
54
|
+
```bash
|
|
55
|
+
npm install @jmruthers/pace-core
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
### 3. Import CSS
|
|
59
|
+
```tsx
|
|
60
|
+
import '@jmruthers/pace-core/styles/core.css';
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
### 4. Customize for Your Needs
|
|
64
|
+
- Replace sample data with your actual data
|
|
65
|
+
- Update branding and metadata
|
|
66
|
+
- Adjust styling and layout
|
|
67
|
+
- Add your specific content
|
|
68
|
+
|
|
69
|
+
## 🎨 Customization Examples
|
|
70
|
+
|
|
71
|
+
### Custom Branding
|
|
72
|
+
```tsx
|
|
73
|
+
<PrintHeader
|
|
74
|
+
title="Your Report Title"
|
|
75
|
+
branding={{
|
|
76
|
+
logo: "/your-logo.png",
|
|
77
|
+
companyName: "Your Company",
|
|
78
|
+
projectName: "Your Project",
|
|
79
|
+
version: "v1.0"
|
|
80
|
+
}}
|
|
81
|
+
metadata={[
|
|
82
|
+
{ label: "Generated", value: new Date().toLocaleDateString() },
|
|
83
|
+
{ label: "Author", value: "Your Name" }
|
|
84
|
+
]}
|
|
85
|
+
/>
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
### Custom Data Table
|
|
89
|
+
```tsx
|
|
90
|
+
<PrintDataTable
|
|
91
|
+
data={yourData}
|
|
92
|
+
columns={[
|
|
93
|
+
{ key: 'field1', header: 'Field 1', align: 'left' },
|
|
94
|
+
{ key: 'field2', header: 'Field 2', align: 'center' },
|
|
95
|
+
{ key: 'field3', header: 'Field 3', align: 'right', render: (value) => formatValue(value) }
|
|
96
|
+
]}
|
|
97
|
+
title="Your Data Table"
|
|
98
|
+
grouping={{
|
|
99
|
+
enabled: true,
|
|
100
|
+
groupBy: 'category',
|
|
101
|
+
groupHeader: (group) => <CustomGroupHeader group={group} />
|
|
102
|
+
}}
|
|
103
|
+
/>
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
### Custom Card Layout
|
|
107
|
+
```tsx
|
|
108
|
+
<PrintCard
|
|
109
|
+
title="Your Card Title"
|
|
110
|
+
subtitle="Your Subtitle"
|
|
111
|
+
variant="outlined"
|
|
112
|
+
size="large"
|
|
113
|
+
layout="horizontal"
|
|
114
|
+
image={{
|
|
115
|
+
src: "/your-image.jpg",
|
|
116
|
+
alt: "Your Image",
|
|
117
|
+
aspectRatio: "landscape"
|
|
118
|
+
}}
|
|
119
|
+
metadata={[
|
|
120
|
+
{ label: "Field 1", value: "Value 1" },
|
|
121
|
+
{ label: "Field 2", value: "Value 2" }
|
|
122
|
+
]}
|
|
123
|
+
>
|
|
124
|
+
<PrintText variant="body">
|
|
125
|
+
Your custom content goes here...
|
|
126
|
+
</PrintText>
|
|
127
|
+
</PrintCard>
|
|
128
|
+
```
|
|
129
|
+
|
|
130
|
+
## 🔧 Advanced Patterns
|
|
131
|
+
|
|
132
|
+
### Multi-Page Document
|
|
133
|
+
```tsx
|
|
134
|
+
<PrintLayout
|
|
135
|
+
firstPageHeader={<PrintCoverHeader title="Document Title" />}
|
|
136
|
+
subsequentPageHeader={<PrintHeader title="Document Title" />}
|
|
137
|
+
>
|
|
138
|
+
<PrintSection title="Introduction">
|
|
139
|
+
{/* Content */}
|
|
140
|
+
</PrintSection>
|
|
141
|
+
|
|
142
|
+
<PrintPageBreak type="before" />
|
|
143
|
+
|
|
144
|
+
<PrintSection title="Main Content">
|
|
145
|
+
{/* Content */}
|
|
146
|
+
</PrintSection>
|
|
147
|
+
</PrintLayout>
|
|
148
|
+
```
|
|
149
|
+
|
|
150
|
+
### Responsive Grid
|
|
151
|
+
```tsx
|
|
152
|
+
<PrintGrid columns={4} printColumns={2} gap="lg">
|
|
153
|
+
{items.map(item => (
|
|
154
|
+
<PrintCard key={item.id} title={item.name} />
|
|
155
|
+
))}
|
|
156
|
+
</PrintGrid>
|
|
157
|
+
```
|
|
158
|
+
|
|
159
|
+
### Custom Styling
|
|
160
|
+
```tsx
|
|
161
|
+
<PrintCard
|
|
162
|
+
className="custom-card-style"
|
|
163
|
+
title="Custom Styled Card"
|
|
164
|
+
>
|
|
165
|
+
Content
|
|
166
|
+
</PrintCard>
|
|
167
|
+
```
|
|
168
|
+
|
|
169
|
+
## 🎯 Best Practices
|
|
170
|
+
|
|
171
|
+
### 1. Test Print Output
|
|
172
|
+
Always test your layouts using browser print preview (Ctrl+P / Cmd+P).
|
|
173
|
+
|
|
174
|
+
### 2. Use Semantic Components
|
|
175
|
+
Choose the right component for your content:
|
|
176
|
+
- `PrintDataTable` for tabular data
|
|
177
|
+
- `PrintCard` for item summaries
|
|
178
|
+
- `PrintSection` for content organization
|
|
179
|
+
|
|
180
|
+
### 3. Optimize for A4
|
|
181
|
+
Design for A4 page size as the primary target format.
|
|
182
|
+
|
|
183
|
+
### 4. Leverage Grouping
|
|
184
|
+
Use data grouping for better print organization.
|
|
185
|
+
|
|
186
|
+
### 5. Use Page Breaks
|
|
187
|
+
Control page breaks for better document flow.
|
|
188
|
+
|
|
189
|
+
## 📚 Related Documentation
|
|
190
|
+
|
|
191
|
+
- **[Print Components Guide](../README.md)** - Complete documentation
|
|
192
|
+
- **[Quick Start Guide](../quick-start.md)** - 5-minute setup
|
|
193
|
+
- **[API Reference](../api-reference.md)** - Complete component APIs
|
|
194
|
+
- **[Troubleshooting](../troubleshooting.md)** - Common issues and solutions
|
|
195
|
+
|
|
196
|
+
## 🆘 Need Help?
|
|
197
|
+
|
|
198
|
+
- **Issues**: [GitHub Issues](https://github.com/jmruthers/pace-core/issues)
|
|
199
|
+
- **Discussions**: [GitHub Discussions](https://github.com/jmruthers/pace-core/discussions)
|
|
200
|
+
- **Documentation**: [Full Documentation](../README.md)
|
|
201
|
+
|
|
202
|
+
---
|
|
203
|
+
|
|
204
|
+
**Ready to build?** Start with the [Basic Report Example](./basic-report.tsx) and customize it for your needs! 🚀
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @file Basic Report Example
|
|
3
|
+
* @description Simple business report with header, data table, and footer
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
import React from 'react';
|
|
7
|
+
import {
|
|
8
|
+
PrintLayout,
|
|
9
|
+
PrintHeader,
|
|
10
|
+
PrintDataTable,
|
|
11
|
+
PrintText,
|
|
12
|
+
PrintButton,
|
|
13
|
+
PrintFooter
|
|
14
|
+
} from '@jmruthers/pace-core';
|
|
15
|
+
|
|
16
|
+
// Sample data
|
|
17
|
+
const employeeData = [
|
|
18
|
+
{ id: 1, name: 'John Doe', department: 'Engineering', salary: 80000, status: 'Active' },
|
|
19
|
+
{ id: 2, name: 'Jane Smith', department: 'Marketing', salary: 75000, status: 'Active' },
|
|
20
|
+
{ id: 3, name: 'Bob Johnson', department: 'Sales', salary: 70000, status: 'Active' },
|
|
21
|
+
{ id: 4, name: 'Alice Brown', department: 'Engineering', salary: 85000, status: 'Active' },
|
|
22
|
+
{ id: 5, name: 'Charlie Wilson', department: 'Marketing', salary: 72000, status: 'Active' },
|
|
23
|
+
];
|
|
24
|
+
|
|
25
|
+
const columns = [
|
|
26
|
+
{ key: 'name', header: 'Name', align: 'left' as const },
|
|
27
|
+
{ key: 'department', header: 'Department', align: 'center' as const },
|
|
28
|
+
{ key: 'salary', header: 'Salary', align: 'right' as const, render: (value: number) => `$${value.toLocaleString()}` },
|
|
29
|
+
{ key: 'status', header: 'Status', align: 'center' as const },
|
|
30
|
+
];
|
|
31
|
+
|
|
32
|
+
export function BasicReportExample() {
|
|
33
|
+
return (
|
|
34
|
+
<div className="space-y-4">
|
|
35
|
+
{/* Print Button */}
|
|
36
|
+
<PrintButton
|
|
37
|
+
variant="primary"
|
|
38
|
+
printSelector=".report-content"
|
|
39
|
+
beforePrint={() => console.log('Preparing to print...')}
|
|
40
|
+
afterPrint={() => console.log('Print completed!')}
|
|
41
|
+
>
|
|
42
|
+
Print Report
|
|
43
|
+
</PrintButton>
|
|
44
|
+
|
|
45
|
+
{/* Report Content */}
|
|
46
|
+
<div className="report-content">
|
|
47
|
+
<PrintLayout orientation="portrait" pageSize="A4">
|
|
48
|
+
<PrintHeader
|
|
49
|
+
title="Employee Directory"
|
|
50
|
+
subtitle="Department Overview"
|
|
51
|
+
branding={{
|
|
52
|
+
companyName: "Acme Corporation",
|
|
53
|
+
projectName: "HR Analytics",
|
|
54
|
+
version: "v1.0"
|
|
55
|
+
}}
|
|
56
|
+
metadata={[
|
|
57
|
+
{ label: "Generated", value: new Date().toLocaleDateString() },
|
|
58
|
+
{ label: "Total Employees", value: employeeData.length.toString() }
|
|
59
|
+
]}
|
|
60
|
+
printDate={true}
|
|
61
|
+
/>
|
|
62
|
+
|
|
63
|
+
<PrintDataTable
|
|
64
|
+
data={employeeData}
|
|
65
|
+
columns={columns}
|
|
66
|
+
title="Employee Directory"
|
|
67
|
+
grouping={{
|
|
68
|
+
enabled: true,
|
|
69
|
+
groupBy: 'department',
|
|
70
|
+
groupHeader: (group) => (
|
|
71
|
+
<div className="font-bold text-lg bg-gray-100 p-2 border-b">
|
|
72
|
+
{group} Department
|
|
73
|
+
</div>
|
|
74
|
+
)
|
|
75
|
+
}}
|
|
76
|
+
styling={{
|
|
77
|
+
headerStyle: 'solid',
|
|
78
|
+
rowStyle: 'striped',
|
|
79
|
+
cellPadding: 'normal'
|
|
80
|
+
}}
|
|
81
|
+
/>
|
|
82
|
+
|
|
83
|
+
<PrintFooter
|
|
84
|
+
pageNumbers={true}
|
|
85
|
+
customText="Confidential - Internal Use Only"
|
|
86
|
+
alignment="center"
|
|
87
|
+
/>
|
|
88
|
+
</PrintLayout>
|
|
89
|
+
</div>
|
|
90
|
+
</div>
|
|
91
|
+
);
|
|
92
|
+
}
|
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @file Card Catalog Example
|
|
3
|
+
* @description Product catalog with card-based layout
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
import React from 'react';
|
|
7
|
+
import {
|
|
8
|
+
PrintLayout,
|
|
9
|
+
PrintHeader,
|
|
10
|
+
PrintGrid,
|
|
11
|
+
PrintCard,
|
|
12
|
+
PrintButton,
|
|
13
|
+
PrintFooter
|
|
14
|
+
} from '@jmruthers/pace-core';
|
|
15
|
+
|
|
16
|
+
// Sample product data
|
|
17
|
+
const products = [
|
|
18
|
+
{
|
|
19
|
+
id: 1,
|
|
20
|
+
name: 'Professional Widget',
|
|
21
|
+
category: 'Electronics',
|
|
22
|
+
price: '$299.99',
|
|
23
|
+
sku: 'PW-001',
|
|
24
|
+
stock: 'In Stock',
|
|
25
|
+
description: 'High-quality professional widget with advanced features',
|
|
26
|
+
image: '/products/widget-pro.jpg'
|
|
27
|
+
},
|
|
28
|
+
{
|
|
29
|
+
id: 2,
|
|
30
|
+
name: 'Standard Widget',
|
|
31
|
+
category: 'Electronics',
|
|
32
|
+
price: '$199.99',
|
|
33
|
+
sku: 'SW-002',
|
|
34
|
+
stock: 'In Stock',
|
|
35
|
+
description: 'Reliable standard widget for everyday use',
|
|
36
|
+
image: '/products/widget-standard.jpg'
|
|
37
|
+
},
|
|
38
|
+
{
|
|
39
|
+
id: 3,
|
|
40
|
+
name: 'Premium Widget',
|
|
41
|
+
category: 'Electronics',
|
|
42
|
+
price: '$399.99',
|
|
43
|
+
sku: 'PW-003',
|
|
44
|
+
stock: 'Limited',
|
|
45
|
+
description: 'Premium widget with cutting-edge technology',
|
|
46
|
+
image: '/products/widget-premium.jpg'
|
|
47
|
+
},
|
|
48
|
+
{
|
|
49
|
+
id: 4,
|
|
50
|
+
name: 'Basic Widget',
|
|
51
|
+
category: 'Electronics',
|
|
52
|
+
price: '$99.99',
|
|
53
|
+
sku: 'BW-004',
|
|
54
|
+
stock: 'In Stock',
|
|
55
|
+
description: 'Affordable basic widget for entry-level users',
|
|
56
|
+
image: '/products/widget-basic.jpg'
|
|
57
|
+
},
|
|
58
|
+
{
|
|
59
|
+
id: 5,
|
|
60
|
+
name: 'Enterprise Widget',
|
|
61
|
+
category: 'Electronics',
|
|
62
|
+
price: '$599.99',
|
|
63
|
+
sku: 'EW-005',
|
|
64
|
+
stock: 'In Stock',
|
|
65
|
+
description: 'Enterprise-grade widget for large organizations',
|
|
66
|
+
image: '/products/widget-enterprise.jpg'
|
|
67
|
+
},
|
|
68
|
+
{
|
|
69
|
+
id: 6,
|
|
70
|
+
name: 'Compact Widget',
|
|
71
|
+
category: 'Electronics',
|
|
72
|
+
price: '$149.99',
|
|
73
|
+
sku: 'CW-006',
|
|
74
|
+
stock: 'Out of Stock',
|
|
75
|
+
description: 'Compact widget perfect for space-constrained environments',
|
|
76
|
+
image: '/products/widget-compact.jpg'
|
|
77
|
+
},
|
|
78
|
+
];
|
|
79
|
+
|
|
80
|
+
export function CardCatalogExample() {
|
|
81
|
+
return (
|
|
82
|
+
<div className="space-y-4">
|
|
83
|
+
{/* Print Button */}
|
|
84
|
+
<PrintButton
|
|
85
|
+
variant="primary"
|
|
86
|
+
printSelector=".catalog-content"
|
|
87
|
+
beforePrint={() => console.log('Preparing product catalog...')}
|
|
88
|
+
afterPrint={() => console.log('Product catalog printed!')}
|
|
89
|
+
>
|
|
90
|
+
Print Product Catalog
|
|
91
|
+
</PrintButton>
|
|
92
|
+
|
|
93
|
+
{/* Catalog Content */}
|
|
94
|
+
<div className="catalog-content">
|
|
95
|
+
<PrintLayout orientation="portrait" pageSize="A4">
|
|
96
|
+
<PrintHeader
|
|
97
|
+
title="Product Catalog 2024"
|
|
98
|
+
subtitle="Complete Widget Collection"
|
|
99
|
+
branding={{
|
|
100
|
+
companyName: "Widget Solutions Inc.",
|
|
101
|
+
projectName: "Product Catalog",
|
|
102
|
+
version: "v2024.1"
|
|
103
|
+
}}
|
|
104
|
+
metadata={[
|
|
105
|
+
{ label: "Total Products", value: products.length.toString() },
|
|
106
|
+
{ label: "Categories", value: "Electronics" },
|
|
107
|
+
{ label: "Price Range", value: "$99.99 - $599.99" }
|
|
108
|
+
]}
|
|
109
|
+
printDate={true}
|
|
110
|
+
/>
|
|
111
|
+
|
|
112
|
+
<PrintGrid columns={3} printColumns={2} gap="md">
|
|
113
|
+
{products.map(product => (
|
|
114
|
+
<PrintCard
|
|
115
|
+
key={product.id}
|
|
116
|
+
title={product.name}
|
|
117
|
+
subtitle={product.category}
|
|
118
|
+
variant="outlined"
|
|
119
|
+
size="medium"
|
|
120
|
+
layout="vertical"
|
|
121
|
+
backgroundColor="white"
|
|
122
|
+
image={{
|
|
123
|
+
src: product.image,
|
|
124
|
+
alt: product.name,
|
|
125
|
+
aspectRatio: "square"
|
|
126
|
+
}}
|
|
127
|
+
metadata={[
|
|
128
|
+
{ label: "Price", value: product.price },
|
|
129
|
+
{ label: "SKU", value: product.sku },
|
|
130
|
+
{ label: "Stock", value: product.stock }
|
|
131
|
+
]}
|
|
132
|
+
>
|
|
133
|
+
<PrintText variant="caption" color="muted">
|
|
134
|
+
{product.description}
|
|
135
|
+
</PrintText>
|
|
136
|
+
</PrintCard>
|
|
137
|
+
))}
|
|
138
|
+
</PrintGrid>
|
|
139
|
+
|
|
140
|
+
<PrintFooter
|
|
141
|
+
pageNumbers={true}
|
|
142
|
+
customText="Widget Solutions Inc. - Product Catalog 2024"
|
|
143
|
+
alignment="center"
|
|
144
|
+
/>
|
|
145
|
+
</PrintLayout>
|
|
146
|
+
</div>
|
|
147
|
+
</div>
|
|
148
|
+
);
|
|
149
|
+
}
|
|
@@ -0,0 +1,163 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @file Cover Page Report Example
|
|
3
|
+
* @description Professional report with cover page and subsequent page headers
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
import React from 'react';
|
|
7
|
+
import {
|
|
8
|
+
PrintLayout,
|
|
9
|
+
PrintCoverHeader,
|
|
10
|
+
PrintHeader,
|
|
11
|
+
PrintSection,
|
|
12
|
+
PrintText,
|
|
13
|
+
PrintDataTable,
|
|
14
|
+
PrintPageBreak,
|
|
15
|
+
PrintButton,
|
|
16
|
+
PrintFooter
|
|
17
|
+
} from '@jmruthers/pace-core';
|
|
18
|
+
|
|
19
|
+
// Sample financial data
|
|
20
|
+
const quarterlyData = [
|
|
21
|
+
{ quarter: 'Q1 2024', revenue: 1200000, profit: 300000, growth: 15 },
|
|
22
|
+
{ quarter: 'Q2 2024', revenue: 1350000, profit: 350000, growth: 12 },
|
|
23
|
+
{ quarter: 'Q3 2024', revenue: 1500000, profit: 400000, growth: 11 },
|
|
24
|
+
{ quarter: 'Q4 2024', revenue: 1650000, profit: 450000, growth: 10 },
|
|
25
|
+
];
|
|
26
|
+
|
|
27
|
+
const financialColumns = [
|
|
28
|
+
{ key: 'quarter', header: 'Quarter', align: 'left' as const },
|
|
29
|
+
{ key: 'revenue', header: 'Revenue', align: 'right' as const, render: (value: number) => `$${value.toLocaleString()}` },
|
|
30
|
+
{ key: 'profit', header: 'Profit', align: 'right' as const, render: (value: number) => `$${value.toLocaleString()}` },
|
|
31
|
+
{ key: 'growth', header: 'Growth %', align: 'center' as const, render: (value: number) => `${value}%` },
|
|
32
|
+
];
|
|
33
|
+
|
|
34
|
+
export function CoverPageReportExample() {
|
|
35
|
+
return (
|
|
36
|
+
<div className="space-y-4">
|
|
37
|
+
{/* Print Button */}
|
|
38
|
+
<PrintButton
|
|
39
|
+
variant="primary"
|
|
40
|
+
printSelector=".report-content"
|
|
41
|
+
beforePrint={() => console.log('Preparing annual report...')}
|
|
42
|
+
afterPrint={() => console.log('Annual report printed!')}
|
|
43
|
+
>
|
|
44
|
+
Print Annual Report
|
|
45
|
+
</PrintButton>
|
|
46
|
+
|
|
47
|
+
{/* Report Content */}
|
|
48
|
+
<div className="report-content">
|
|
49
|
+
<PrintLayout
|
|
50
|
+
orientation="portrait"
|
|
51
|
+
pageSize="A4"
|
|
52
|
+
firstPageHeader={
|
|
53
|
+
<PrintCoverHeader
|
|
54
|
+
title="Annual Report 2024"
|
|
55
|
+
subtitle="Financial Performance & Strategic Overview"
|
|
56
|
+
branding={{
|
|
57
|
+
logo: "/logo.png",
|
|
58
|
+
companyName: "Acme Corporation",
|
|
59
|
+
tagline: "Innovation Through Excellence",
|
|
60
|
+
version: "v2024.1"
|
|
61
|
+
}}
|
|
62
|
+
logoSize="large"
|
|
63
|
+
titleSize="xl"
|
|
64
|
+
showDivider={true}
|
|
65
|
+
backgroundColor="#f8f9fa"
|
|
66
|
+
metadata={[
|
|
67
|
+
{ label: "Period", value: "January 1 - December 31, 2024" },
|
|
68
|
+
{ label: "Prepared by", value: "Finance Team" },
|
|
69
|
+
{ label: "Approved by", value: "Board of Directors" }
|
|
70
|
+
]}
|
|
71
|
+
/>
|
|
72
|
+
}
|
|
73
|
+
subsequentPageHeader={
|
|
74
|
+
<PrintHeader
|
|
75
|
+
title="Annual Report 2024"
|
|
76
|
+
branding={{
|
|
77
|
+
logo: "/logo-small.png",
|
|
78
|
+
companyName: "Acme Corp"
|
|
79
|
+
}}
|
|
80
|
+
/>
|
|
81
|
+
}
|
|
82
|
+
>
|
|
83
|
+
{/* Executive Summary */}
|
|
84
|
+
<PrintSection title="Executive Summary">
|
|
85
|
+
<PrintText variant="heading" weight="bold">
|
|
86
|
+
Overview
|
|
87
|
+
</PrintText>
|
|
88
|
+
<PrintText variant="body">
|
|
89
|
+
This annual report provides a comprehensive analysis of Acme Corporation's
|
|
90
|
+
financial performance, strategic initiatives, and future outlook for 2024.
|
|
91
|
+
We achieved record revenue growth while maintaining strong profitability
|
|
92
|
+
and operational efficiency.
|
|
93
|
+
</PrintText>
|
|
94
|
+
|
|
95
|
+
<PrintText variant="subheading" weight="semibold">
|
|
96
|
+
Key Highlights
|
|
97
|
+
</PrintText>
|
|
98
|
+
<PrintText variant="body">
|
|
99
|
+
• Record revenue of $5.7M, representing 12% year-over-year growth
|
|
100
|
+
• Strong profitability with 27% profit margins
|
|
101
|
+
• Successful expansion into three new markets
|
|
102
|
+
• 95% customer satisfaction rating maintained
|
|
103
|
+
</PrintText>
|
|
104
|
+
</PrintSection>
|
|
105
|
+
|
|
106
|
+
<PrintPageBreak type="before" />
|
|
107
|
+
|
|
108
|
+
{/* Financial Performance */}
|
|
109
|
+
<PrintSection title="Financial Performance">
|
|
110
|
+
<PrintText variant="heading" weight="bold">
|
|
111
|
+
Quarterly Results
|
|
112
|
+
</PrintText>
|
|
113
|
+
<PrintText variant="body">
|
|
114
|
+
Our quarterly performance demonstrates consistent growth and strong
|
|
115
|
+
financial discipline across all business units.
|
|
116
|
+
</PrintText>
|
|
117
|
+
|
|
118
|
+
<PrintDataTable
|
|
119
|
+
data={quarterlyData}
|
|
120
|
+
columns={financialColumns}
|
|
121
|
+
title="Quarterly Financial Summary"
|
|
122
|
+
styling={{
|
|
123
|
+
headerStyle: 'solid',
|
|
124
|
+
rowStyle: 'striped',
|
|
125
|
+
cellPadding: 'normal'
|
|
126
|
+
}}
|
|
127
|
+
/>
|
|
128
|
+
</PrintSection>
|
|
129
|
+
|
|
130
|
+
<PrintPageBreak type="before" />
|
|
131
|
+
|
|
132
|
+
{/* Strategic Initiatives */}
|
|
133
|
+
<PrintSection title="Strategic Initiatives">
|
|
134
|
+
<PrintText variant="heading" weight="bold">
|
|
135
|
+
Market Expansion
|
|
136
|
+
</PrintText>
|
|
137
|
+
<PrintText variant="body">
|
|
138
|
+
In 2024, we successfully expanded into three new geographic markets,
|
|
139
|
+
establishing a strong presence in the European and Asian regions.
|
|
140
|
+
This expansion contributed significantly to our revenue growth and
|
|
141
|
+
diversified our customer base.
|
|
142
|
+
</PrintText>
|
|
143
|
+
|
|
144
|
+
<PrintText variant="subheading" weight="semibold">
|
|
145
|
+
Technology Innovation
|
|
146
|
+
</PrintText>
|
|
147
|
+
<PrintText variant="body">
|
|
148
|
+
Our continued investment in technology and innovation has resulted in
|
|
149
|
+
improved operational efficiency and enhanced customer experience.
|
|
150
|
+
We launched two new product lines and upgraded our core platform.
|
|
151
|
+
</PrintText>
|
|
152
|
+
</PrintSection>
|
|
153
|
+
|
|
154
|
+
<PrintFooter
|
|
155
|
+
pageNumbers={true}
|
|
156
|
+
customText="Acme Corporation - Annual Report 2024"
|
|
157
|
+
alignment="center"
|
|
158
|
+
/>
|
|
159
|
+
</PrintLayout>
|
|
160
|
+
</div>
|
|
161
|
+
</div>
|
|
162
|
+
);
|
|
163
|
+
}
|