@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
|
@@ -225,8 +225,8 @@ export function DashboardPage() {
|
|
|
225
225
|
return (
|
|
226
226
|
<div className="p-6">
|
|
227
227
|
<div className="mb-8">
|
|
228
|
-
<h1 className="text-3xl font-bold text-
|
|
229
|
-
<p className="text-
|
|
228
|
+
<h1 className="text-3xl font-bold text-sec-900">Dashboard</h1>
|
|
229
|
+
<p className="text-sec-600 mt-2">
|
|
230
230
|
Welcome back, {user?.email}. Here's what's happening with your meals.
|
|
231
231
|
</p>
|
|
232
232
|
</div>
|
|
@@ -238,7 +238,7 @@ export function DashboardPage() {
|
|
|
238
238
|
</CardHeader>
|
|
239
239
|
<CardContent>
|
|
240
240
|
<p className="text-3xl font-bold">{mealsLoading ? '...' : totalMeals}</p>
|
|
241
|
-
<p className="text-sm text-
|
|
241
|
+
<p className="text-sm text-sec-600">All time</p>
|
|
242
242
|
</CardContent>
|
|
243
243
|
</Card>
|
|
244
244
|
|
|
@@ -248,7 +248,7 @@ export function DashboardPage() {
|
|
|
248
248
|
</CardHeader>
|
|
249
249
|
<CardContent>
|
|
250
250
|
<p className="text-3xl font-bold">{mealsLoading ? '...' : thisWeekMeals}</p>
|
|
251
|
-
<p className="text-sm text-
|
|
251
|
+
<p className="text-sm text-sec-600">Last 7 days</p>
|
|
252
252
|
</CardContent>
|
|
253
253
|
</Card>
|
|
254
254
|
|
|
@@ -258,7 +258,7 @@ export function DashboardPage() {
|
|
|
258
258
|
</CardHeader>
|
|
259
259
|
<CardContent>
|
|
260
260
|
<p className="text-3xl font-bold">{usersLoading ? '...' : totalUsers}</p>
|
|
261
|
-
<p className="text-sm text-
|
|
261
|
+
<p className="text-sm text-sec-600">Active users</p>
|
|
262
262
|
</CardContent>
|
|
263
263
|
</Card>
|
|
264
264
|
</div>
|
|
@@ -269,7 +269,7 @@ export function DashboardPage() {
|
|
|
269
269
|
<CardTitle>Recent Activity</CardTitle>
|
|
270
270
|
</CardHeader>
|
|
271
271
|
<CardContent>
|
|
272
|
-
<p className="text-
|
|
272
|
+
<p className="text-sec-600">
|
|
273
273
|
Your meal tracking activity will appear here.
|
|
274
274
|
</p>
|
|
275
275
|
</CardContent>
|
|
@@ -1,90 +1,269 @@
|
|
|
1
|
-
# Installation
|
|
1
|
+
# Complete Installation Guide
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
This is the definitive guide for installing and configuring pace-core in your application. Follow these steps exactly to ensure proper styling and functionality.
|
|
4
4
|
|
|
5
|
-
##
|
|
5
|
+
## 🚨 Critical Requirements
|
|
6
6
|
|
|
7
|
-
-
|
|
8
|
-
- React 18+ project (Next.js, Create React App, Vite, etc.)
|
|
9
|
-
- Supabase project (free tier works great)
|
|
7
|
+
**IMPORTANT**: Pace-core requires specific configuration to work properly. Without following these steps exactly, components will be unstyled and the UI will be severely compromised.
|
|
10
8
|
|
|
11
|
-
##
|
|
9
|
+
## Step 1: Install Dependencies
|
|
12
10
|
|
|
13
|
-
###
|
|
11
|
+
### Required Packages
|
|
14
12
|
|
|
15
13
|
```bash
|
|
16
|
-
|
|
17
|
-
npm install -
|
|
14
|
+
# Install pace-core and all required peer dependencies
|
|
15
|
+
npm install @jmruthers/pace-core @tanstack/react-table @radix-ui/react-checkbox @radix-ui/react-dialog @radix-ui/react-dropdown-menu @radix-ui/react-label @radix-ui/react-slot lucide-react class-variance-authority clsx tailwind-merge
|
|
16
|
+
|
|
17
|
+
# Install Tailwind CSS v4 and Vite plugin (REQUIRED)
|
|
18
|
+
npm install -D @tailwindcss/vite tailwindcss@^4.0.0
|
|
18
19
|
```
|
|
19
20
|
|
|
20
|
-
###
|
|
21
|
+
### Optional Packages (for full functionality)
|
|
21
22
|
|
|
22
23
|
```bash
|
|
23
|
-
|
|
24
|
+
# For authentication and database
|
|
25
|
+
npm install @supabase/supabase-js
|
|
26
|
+
|
|
27
|
+
# For routing
|
|
28
|
+
npm install react-router-dom
|
|
29
|
+
|
|
30
|
+
# For TypeScript support
|
|
31
|
+
npm install -D @types/react @types/react-dom
|
|
24
32
|
```
|
|
25
33
|
|
|
26
|
-
|
|
34
|
+
## Step 2: Configure Vite with Tailwind v4
|
|
35
|
+
|
|
36
|
+
**⚠️ CRITICAL**: This configuration is essential for pace-core components to be styled correctly.
|
|
27
37
|
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
38
|
+
Create or update your `vite.config.ts`:
|
|
39
|
+
|
|
40
|
+
```typescript
|
|
41
|
+
// vite.config.ts
|
|
42
|
+
import { defineConfig } from 'vite'
|
|
43
|
+
import react from '@vitejs/plugin-react'
|
|
44
|
+
import tailwindcss from '@tailwindcss/vite'
|
|
45
|
+
import path from 'path'
|
|
46
|
+
|
|
47
|
+
export default defineConfig({
|
|
48
|
+
plugins: [
|
|
49
|
+
react(),
|
|
50
|
+
tailwindcss({
|
|
51
|
+
// CRITICAL: Include pace-core components for scanning
|
|
52
|
+
content: [
|
|
53
|
+
'./src/**/*.{js,ts,jsx,tsx}',
|
|
54
|
+
'./node_modules/@jmruthers/pace-core/**/*.{js,ts,jsx,tsx}'
|
|
55
|
+
]
|
|
56
|
+
})
|
|
34
57
|
],
|
|
35
|
-
|
|
36
|
-
|
|
58
|
+
resolve: {
|
|
59
|
+
alias: {
|
|
60
|
+
"@": path.resolve(__dirname, "./src"),
|
|
61
|
+
},
|
|
37
62
|
},
|
|
38
|
-
|
|
39
|
-
|
|
63
|
+
server: {
|
|
64
|
+
port: 3000,
|
|
65
|
+
open: true,
|
|
66
|
+
},
|
|
67
|
+
build: {
|
|
68
|
+
outDir: 'dist',
|
|
69
|
+
sourcemap: true,
|
|
70
|
+
},
|
|
71
|
+
})
|
|
40
72
|
```
|
|
41
73
|
|
|
42
|
-
###
|
|
74
|
+
### Why This Configuration is Critical
|
|
43
75
|
|
|
44
|
-
|
|
76
|
+
Pace-core components contain Tailwind classes that must be scanned during the build process. Without this configuration:
|
|
45
77
|
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
78
|
+
- ❌ Component styles will be missing or broken
|
|
79
|
+
- ❌ Colors, spacing, and typography won't work
|
|
80
|
+
- ❌ The UI will be severely compromised
|
|
81
|
+
- ❌ The entire point of using this UI library is undermined
|
|
82
|
+
|
|
83
|
+
### Alternative Configuration (if needed)
|
|
84
|
+
|
|
85
|
+
If you're still having issues with component scanning:
|
|
50
86
|
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
87
|
+
```typescript
|
|
88
|
+
// vite.config.ts
|
|
89
|
+
import { defineConfig } from 'vite'
|
|
90
|
+
import react from '@vitejs/plugin-react'
|
|
91
|
+
import tailwindcss from '@tailwindcss/vite'
|
|
92
|
+
|
|
93
|
+
export default defineConfig({
|
|
94
|
+
plugins: [
|
|
95
|
+
react(),
|
|
96
|
+
tailwindcss({
|
|
97
|
+
content: {
|
|
98
|
+
files: [
|
|
99
|
+
'./src/**/*.{js,ts,jsx,tsx}',
|
|
100
|
+
'./node_modules/@jmruthers/pace-core/**/*.{js,ts,jsx,tsx}',
|
|
101
|
+
'./node_modules/@jmruthers/pace-core/dist/**/*.{js,ts,jsx,tsx}'
|
|
102
|
+
]
|
|
103
|
+
}
|
|
104
|
+
})
|
|
105
|
+
],
|
|
106
|
+
})
|
|
54
107
|
```
|
|
55
108
|
|
|
56
|
-
|
|
109
|
+
## Step 3: Import Core Styles
|
|
110
|
+
|
|
111
|
+
**CRITICAL**: Import the CSS file in your main entry point:
|
|
57
112
|
|
|
58
113
|
```tsx
|
|
59
|
-
//
|
|
60
|
-
import
|
|
61
|
-
import
|
|
114
|
+
// src/main.tsx (or your app's entry point)
|
|
115
|
+
import '@jmruthers/pace-core/styles/core.css';
|
|
116
|
+
import React from 'react';
|
|
117
|
+
import ReactDOM from 'react-dom/client';
|
|
118
|
+
import App from './App';
|
|
62
119
|
|
|
63
|
-
const
|
|
64
|
-
|
|
65
|
-
|
|
120
|
+
const root = ReactDOM.createRoot(document.getElementById('root') as HTMLElement);
|
|
121
|
+
root.render(
|
|
122
|
+
<React.StrictMode>
|
|
123
|
+
<App />
|
|
124
|
+
</React.StrictMode>
|
|
66
125
|
);
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
### What the CSS File Includes
|
|
129
|
+
|
|
130
|
+
The `core.css` file provides:
|
|
131
|
+
- Complete color palettes (main, secondary, accent)
|
|
132
|
+
- Font definitions with system font fallbacks
|
|
133
|
+
- Base element styles and resets
|
|
134
|
+
- Tailwind v4 utility classes
|
|
135
|
+
- Component styling foundation
|
|
136
|
+
|
|
137
|
+
**Note on Fonts**: The CSS includes font definitions that fall back to system fonts. For custom fonts, you'll need to provide them separately in your consuming app.
|
|
138
|
+
|
|
139
|
+
## Step 4: Verify Installation
|
|
140
|
+
|
|
141
|
+
Create a test component to ensure everything works:
|
|
142
|
+
|
|
143
|
+
```tsx
|
|
144
|
+
// src/App.tsx
|
|
145
|
+
import { Button, Card, Input } from '@jmruthers/pace-core';
|
|
67
146
|
|
|
68
147
|
function App() {
|
|
69
148
|
return (
|
|
70
|
-
<
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
149
|
+
<div className="p-8 space-y-4">
|
|
150
|
+
<h1 className="text-2xl font-bold text-main-900">PACE Core Test</h1>
|
|
151
|
+
|
|
152
|
+
<Card className="p-4">
|
|
153
|
+
<h2 className="text-lg font-semibold text-sec-800 mb-2">Components Test</h2>
|
|
154
|
+
<div className="space-y-2">
|
|
155
|
+
<Button variant="primary">Primary Button</Button>
|
|
156
|
+
<Button variant="secondary">Secondary Button</Button>
|
|
157
|
+
<Input placeholder="Test input field" />
|
|
158
|
+
</div>
|
|
159
|
+
</Card>
|
|
160
|
+
</div>
|
|
76
161
|
);
|
|
77
162
|
}
|
|
163
|
+
|
|
164
|
+
export default App;
|
|
78
165
|
```
|
|
79
166
|
|
|
80
|
-
|
|
167
|
+
### Expected Result
|
|
168
|
+
|
|
169
|
+
You should see:
|
|
170
|
+
- ✅ Properly styled components with PACE Core's design system
|
|
171
|
+
- ✅ Colors working (text-main-900, bg-sec-500, etc.)
|
|
172
|
+
- ✅ Typography and spacing applied correctly
|
|
173
|
+
- ✅ Hover effects and transitions working
|
|
174
|
+
|
|
175
|
+
## Step 5: Set Up Authentication (Optional)
|
|
81
176
|
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
177
|
+
If you're using pace-core's authentication features:
|
|
178
|
+
|
|
179
|
+
### Install Supabase
|
|
180
|
+
|
|
181
|
+
```bash
|
|
182
|
+
npm install @supabase/supabase-js
|
|
183
|
+
```
|
|
184
|
+
|
|
185
|
+
### Create Supabase Client
|
|
186
|
+
|
|
187
|
+
```typescript
|
|
188
|
+
// src/lib/supabase.ts
|
|
189
|
+
import { createClient } from '@supabase/supabase-js'
|
|
190
|
+
|
|
191
|
+
const supabaseUrl = process.env.REACT_APP_SUPABASE_URL!
|
|
192
|
+
const supabaseAnonKey = process.env.REACT_APP_SUPABASE_ANON_KEY!
|
|
193
|
+
|
|
194
|
+
export const supabase = createClient(supabaseUrl, supabaseAnonKey)
|
|
195
|
+
```
|
|
196
|
+
|
|
197
|
+
### Set Up Environment Variables
|
|
198
|
+
|
|
199
|
+
Create `.env.local`:
|
|
200
|
+
|
|
201
|
+
```bash
|
|
202
|
+
REACT_APP_SUPABASE_URL=https://your-project.supabase.co
|
|
203
|
+
REACT_APP_SUPABASE_ANON_KEY=your-anon-key-here
|
|
204
|
+
```
|
|
205
|
+
|
|
206
|
+
### Configure Providers
|
|
207
|
+
|
|
208
|
+
```tsx
|
|
209
|
+
// src/main.tsx
|
|
210
|
+
import { UnifiedAuthProvider, OrganisationProvider, EventProvider } from '@jmruthers/pace-core';
|
|
211
|
+
import { supabase } from './lib/supabase';
|
|
212
|
+
|
|
213
|
+
ReactDOM.createRoot(document.getElementById('root')!).render(
|
|
214
|
+
<React.StrictMode>
|
|
215
|
+
<UnifiedAuthProvider supabaseClient={supabase} appName="your-app">
|
|
216
|
+
<OrganisationProvider>
|
|
217
|
+
<EventProvider>
|
|
218
|
+
<App />
|
|
219
|
+
</EventProvider>
|
|
220
|
+
</OrganisationProvider>
|
|
221
|
+
</UnifiedAuthProvider>
|
|
222
|
+
</React.StrictMode>
|
|
223
|
+
);
|
|
224
|
+
```
|
|
225
|
+
|
|
226
|
+
## Troubleshooting
|
|
227
|
+
|
|
228
|
+
### Common Issues
|
|
229
|
+
|
|
230
|
+
1. **Components appear unstyled**
|
|
231
|
+
- Check that pace-core is included in your Vite content configuration
|
|
232
|
+
- Ensure the CSS file is imported
|
|
233
|
+
- Restart your dev server
|
|
234
|
+
|
|
235
|
+
2. **Colors don't work**
|
|
236
|
+
- Verify the CSS file is imported
|
|
237
|
+
- Check that content scanning includes pace-core
|
|
238
|
+
- Ensure you're using Tailwind v4
|
|
239
|
+
|
|
240
|
+
3. **Build errors about missing classes**
|
|
241
|
+
- Verify your content paths are correct
|
|
242
|
+
- Check that both source files and pace-core are included
|
|
243
|
+
|
|
244
|
+
### Verification Checklist
|
|
245
|
+
|
|
246
|
+
Before asking for help, verify:
|
|
247
|
+
|
|
248
|
+
- [ ] CSS file is imported: `import '@jmruthers/pace-core/styles/core.css'`
|
|
249
|
+
- [ ] Vite config includes pace-core in content scanning
|
|
250
|
+
- [ ] Using Tailwind v4 (not v3)
|
|
251
|
+
- [ ] Dev server restarted after config changes
|
|
252
|
+
- [ ] All required peer dependencies installed
|
|
253
|
+
- [ ] Test component renders with proper styling
|
|
254
|
+
|
|
255
|
+
## Next Steps
|
|
256
|
+
|
|
257
|
+
- [Quick Start Guide](./quick-start.md) - Build your first app
|
|
258
|
+
- [Vite Configuration](../consuming-app-vite-config.md) - Detailed Vite setup
|
|
259
|
+
- [Troubleshooting](../troubleshooting/styling-issues.md) - Fix common problems
|
|
260
|
+
- [Component API](../api/README.md) - Explore all components
|
|
85
261
|
|
|
86
262
|
## Need Help?
|
|
87
263
|
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
264
|
+
If you're still having issues:
|
|
265
|
+
|
|
266
|
+
1. Check the [Troubleshooting Guide](../troubleshooting/styling-issues.md)
|
|
267
|
+
2. Verify your setup matches this guide exactly
|
|
268
|
+
3. Test with a minimal example to isolate the issue
|
|
269
|
+
4. Check your package versions for compatibility
|
|
@@ -2,14 +2,29 @@
|
|
|
2
2
|
|
|
3
3
|
Build a complete PACE Core application with authentication, permissions, and a modern UI in under 10 minutes.
|
|
4
4
|
|
|
5
|
+
> **⏱️ Time to Complete**: ~10 minutes
|
|
6
|
+
> **Prerequisites**: Node.js 18+, npm/yarn/pnpm
|
|
7
|
+
> **Difficulty**: Beginner
|
|
8
|
+
|
|
5
9
|
## 🎯 What We'll Build
|
|
6
10
|
|
|
7
|
-
A
|
|
8
|
-
- User
|
|
9
|
-
- Role-
|
|
10
|
-
-
|
|
11
|
-
-
|
|
12
|
-
-
|
|
11
|
+
A complete meal management application featuring:
|
|
12
|
+
- ✅ **User Authentication** - Login/logout with Supabase
|
|
13
|
+
- ✅ **Role-Based Access Control** - Different permissions for different users
|
|
14
|
+
- ✅ **Interactive Data Tables** - CRUD operations with sorting, filtering, pagination
|
|
15
|
+
- ✅ **Form Validation** - Real-time validation with Zod schemas
|
|
16
|
+
- ✅ **Responsive Design** - Mobile-first with Tailwind CSS
|
|
17
|
+
- ✅ **Print Reports** - Generate PDF-ready reports
|
|
18
|
+
- ✅ **Modern UI** - Accessible, consistent component library
|
|
19
|
+
|
|
20
|
+
### Final Result Preview
|
|
21
|
+
|
|
22
|
+
Your app will have:
|
|
23
|
+
- A login page with proper authentication
|
|
24
|
+
- A dashboard with user-specific content
|
|
25
|
+
- A data table for managing meals with full CRUD operations
|
|
26
|
+
- Permission-based UI elements (admin-only features)
|
|
27
|
+
- Responsive design that works on all devices
|
|
13
28
|
|
|
14
29
|
## 🚀 Step-by-Step Implementation
|
|
15
30
|
|
|
@@ -25,32 +40,56 @@ cd meal-manager
|
|
|
25
40
|
### 2. Install Dependencies
|
|
26
41
|
|
|
27
42
|
```bash
|
|
28
|
-
|
|
29
|
-
npm install -
|
|
43
|
+
# Install pace-core and required peer dependencies
|
|
44
|
+
npm install @jmruthers/pace-core @tanstack/react-table @radix-ui/react-checkbox @radix-ui/react-dialog @radix-ui/react-dropdown-menu @radix-ui/react-label @radix-ui/react-slot lucide-react class-variance-authority clsx tailwind-merge
|
|
45
|
+
|
|
46
|
+
# Install Supabase and routing
|
|
47
|
+
npm install @supabase/supabase-js react-router-dom
|
|
48
|
+
|
|
49
|
+
# Install Tailwind CSS v4 and development dependencies
|
|
50
|
+
npm install -D @tailwindcss/vite tailwindcss@^4.0.0 @types/react @types/react-dom
|
|
30
51
|
```
|
|
31
52
|
|
|
32
|
-
### 3. Configure Tailwind CSS
|
|
53
|
+
### 3. Configure Tailwind CSS v4 (CRITICAL)
|
|
33
54
|
|
|
55
|
+
**⚠️ CRITICAL**: pace-core requires Tailwind v4 with proper content scanning. Without this configuration, components will be unstyled.
|
|
56
|
+
|
|
57
|
+
Install Tailwind v4:
|
|
34
58
|
```bash
|
|
35
|
-
|
|
59
|
+
npm install -D @tailwindcss/vite tailwindcss@^4.0.0
|
|
60
|
+
# Remove old Tailwind v3 if installed
|
|
61
|
+
npm uninstall tailwindcss@^3.0.0
|
|
36
62
|
```
|
|
37
63
|
|
|
38
|
-
|
|
64
|
+
**REQUIRED Vite Configuration** - You MUST include pace-core in content scanning:
|
|
39
65
|
|
|
40
66
|
```js
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
67
|
+
// vite.config.js
|
|
68
|
+
import { defineConfig } from 'vite'
|
|
69
|
+
import react from '@vitejs/plugin-react'
|
|
70
|
+
import tailwindcss from '@tailwindcss/vite'
|
|
71
|
+
|
|
72
|
+
export default defineConfig({
|
|
73
|
+
plugins: [
|
|
74
|
+
react(),
|
|
75
|
+
tailwindcss({
|
|
76
|
+
// CRITICAL: Include pace-core components for scanning
|
|
77
|
+
content: [
|
|
78
|
+
'./src/**/*.{js,ts,jsx,tsx}',
|
|
79
|
+
'./node_modules/@jmruthers/pace-core/**/*.{js,ts,jsx,tsx}'
|
|
80
|
+
]
|
|
81
|
+
})
|
|
46
82
|
],
|
|
47
|
-
|
|
48
|
-
extend: {},
|
|
49
|
-
},
|
|
50
|
-
plugins: [],
|
|
51
|
-
}
|
|
83
|
+
})
|
|
52
84
|
```
|
|
53
85
|
|
|
86
|
+
**Why this is critical:**
|
|
87
|
+
- Pace-core components contain Tailwind classes that must be scanned
|
|
88
|
+
- Without proper content configuration, components will appear unstyled
|
|
89
|
+
- The UI will be severely compromised without this step
|
|
90
|
+
|
|
91
|
+
**No `tailwind.config.js` file needed** - pace-core handles all configuration via CSS imports.
|
|
92
|
+
|
|
54
93
|
### 4. Set Up Environment Variables
|
|
55
94
|
|
|
56
95
|
Create `.env.local`:
|
|
@@ -72,7 +111,65 @@ const supabaseAnonKey = process.env.REACT_APP_SUPABASE_ANON_KEY!
|
|
|
72
111
|
export const supabase = createClient(supabaseUrl, supabaseAnonKey)
|
|
73
112
|
```
|
|
74
113
|
|
|
75
|
-
### 6. Set Up
|
|
114
|
+
### 6. Set Up CSS Imports and HTML Structure
|
|
115
|
+
|
|
116
|
+
**CRITICAL**: Import the CSS file in your main entry point:
|
|
117
|
+
|
|
118
|
+
```tsx
|
|
119
|
+
// src/main.tsx
|
|
120
|
+
import React from 'react'
|
|
121
|
+
import ReactDOM from 'react-dom/client'
|
|
122
|
+
import { BrowserRouter } from 'react-router-dom'
|
|
123
|
+
import {
|
|
124
|
+
UnifiedAuthProvider,
|
|
125
|
+
OrganisationProvider,
|
|
126
|
+
EventProvider
|
|
127
|
+
} from '@jmruthers/pace-core'
|
|
128
|
+
import { supabase } from './lib/supabase'
|
|
129
|
+
import App from './App.tsx'
|
|
130
|
+
|
|
131
|
+
// CRITICAL: Import the CSS system - includes everything you need
|
|
132
|
+
import '@jmruthers/pace-core/styles/core.css'
|
|
133
|
+
|
|
134
|
+
ReactDOM.createRoot(document.getElementById('root')!).render(
|
|
135
|
+
<React.StrictMode>
|
|
136
|
+
<BrowserRouter>
|
|
137
|
+
<UnifiedAuthProvider supabaseClient={supabase} appName="meal-manager">
|
|
138
|
+
<OrganisationProvider>
|
|
139
|
+
<EventProvider>
|
|
140
|
+
<App />
|
|
141
|
+
</EventProvider>
|
|
142
|
+
</OrganisationProvider>
|
|
143
|
+
</UnifiedAuthProvider>
|
|
144
|
+
</BrowserRouter>
|
|
145
|
+
</React.StrictMode>,
|
|
146
|
+
)
|
|
147
|
+
```
|
|
148
|
+
|
|
149
|
+
**That's it!** The core.css file includes:
|
|
150
|
+
- Complete color palettes (main, secondary, accent)
|
|
151
|
+
- All fonts (Georama, Open Sans, Reddit Mono)
|
|
152
|
+
- Base element styles and resets
|
|
153
|
+
- Tailwind v4 utility classes
|
|
154
|
+
- Component styling
|
|
155
|
+
|
|
156
|
+
Update your `index.html`:
|
|
157
|
+
```html
|
|
158
|
+
<!DOCTYPE html>
|
|
159
|
+
<html lang="en">
|
|
160
|
+
<head>
|
|
161
|
+
<meta charset="UTF-8" />
|
|
162
|
+
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
163
|
+
<title>Meal Manager</title>
|
|
164
|
+
</head>
|
|
165
|
+
<body class="appGradient">
|
|
166
|
+
<div id="root" class="grid grid-rows-[auto_1fr_auto] min-h-screen"></div>
|
|
167
|
+
<script type="module" src="/src/main.tsx"></script>
|
|
168
|
+
</body>
|
|
169
|
+
</html>
|
|
170
|
+
```
|
|
171
|
+
|
|
172
|
+
### 7. Set Up App Structure
|
|
76
173
|
|
|
77
174
|
```tsx
|
|
78
175
|
// src/App.tsx
|
|
@@ -131,10 +228,10 @@ export function LoginPage() {
|
|
|
131
228
|
};
|
|
132
229
|
|
|
133
230
|
return (
|
|
134
|
-
<div className="min-h-screen flex items-center justify-center bg-
|
|
231
|
+
<div className="min-h-screen flex items-center justify-center bg-sec-50">
|
|
135
232
|
<div className="max-w-md w-full space-y-8">
|
|
136
233
|
<div>
|
|
137
|
-
<h2 className="mt-6 text-center text-3xl font-extrabold text-
|
|
234
|
+
<h2 className="mt-6 text-center text-3xl font-extrabold text-sec-900">
|
|
138
235
|
Sign in to Meal Manager
|
|
139
236
|
</h2>
|
|
140
237
|
</div>
|