@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,119 @@
|
|
|
1
|
+
import {
|
|
2
|
+
__esm,
|
|
3
|
+
__require
|
|
4
|
+
} from "./chunk-PLDDJCW6.js";
|
|
5
|
+
|
|
6
|
+
// src/utils/appNameResolver.ts
|
|
7
|
+
function getAppNameFromPackageJson() {
|
|
8
|
+
if (typeof window === "undefined" && typeof __require !== "undefined") {
|
|
9
|
+
try {
|
|
10
|
+
const fs = __require("fs");
|
|
11
|
+
const path = __require("path");
|
|
12
|
+
const possiblePaths = [
|
|
13
|
+
path.join(process.cwd(), "package.json"),
|
|
14
|
+
path.join(__dirname, "../../package.json"),
|
|
15
|
+
path.join(__dirname, "../../../package.json")
|
|
16
|
+
];
|
|
17
|
+
for (const packagePath of possiblePaths) {
|
|
18
|
+
try {
|
|
19
|
+
if (fs.existsSync(packagePath)) {
|
|
20
|
+
const packageJsonContent = fs.readFileSync(packagePath, "utf8");
|
|
21
|
+
const packageJson = JSON.parse(packageJsonContent);
|
|
22
|
+
if (packageJson.name) {
|
|
23
|
+
const name = packageJson.name.split("/").pop() || packageJson.name;
|
|
24
|
+
return name;
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
} catch (error) {
|
|
28
|
+
continue;
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
} catch (error) {
|
|
32
|
+
console.warn("[RBAC] Could not read app name from package.json:", error);
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
return null;
|
|
36
|
+
}
|
|
37
|
+
function getAppNameFromBuildTime() {
|
|
38
|
+
if (typeof window !== "undefined") {
|
|
39
|
+
try {
|
|
40
|
+
const buildTimeEnv = globalThis.__RBAC_APP_NAME__;
|
|
41
|
+
if (buildTimeEnv && buildTimeEnv.trim()) {
|
|
42
|
+
return buildTimeEnv.trim();
|
|
43
|
+
}
|
|
44
|
+
} catch (error) {
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
return null;
|
|
48
|
+
}
|
|
49
|
+
function getAppNameFromGlobal() {
|
|
50
|
+
if (typeof window !== "undefined") {
|
|
51
|
+
try {
|
|
52
|
+
const globalAppName = globalThis.RBAC_APP_NAME;
|
|
53
|
+
if (globalAppName && globalAppName.trim()) {
|
|
54
|
+
return globalAppName.trim();
|
|
55
|
+
}
|
|
56
|
+
} catch (error) {
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
return null;
|
|
60
|
+
}
|
|
61
|
+
function getAppNameFromEnvironment() {
|
|
62
|
+
const envVars = [
|
|
63
|
+
"VITE_APP_NAME",
|
|
64
|
+
"REACT_APP_NAME",
|
|
65
|
+
"NEXT_PUBLIC_APP_NAME",
|
|
66
|
+
"APP_NAME",
|
|
67
|
+
"NODE_APP_NAME"
|
|
68
|
+
];
|
|
69
|
+
for (const envVar of envVars) {
|
|
70
|
+
const value = process.env[envVar];
|
|
71
|
+
if (value && value.trim()) {
|
|
72
|
+
return value.trim();
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
return null;
|
|
76
|
+
}
|
|
77
|
+
function getCurrentAppName() {
|
|
78
|
+
const globalName = getAppNameFromGlobal();
|
|
79
|
+
if (globalName) {
|
|
80
|
+
return globalName;
|
|
81
|
+
}
|
|
82
|
+
const buildTimeName = getAppNameFromBuildTime();
|
|
83
|
+
if (buildTimeName) {
|
|
84
|
+
return buildTimeName;
|
|
85
|
+
}
|
|
86
|
+
const packageJsonName = getAppNameFromPackageJson();
|
|
87
|
+
if (packageJsonName) {
|
|
88
|
+
return packageJsonName;
|
|
89
|
+
}
|
|
90
|
+
const envName = getAppNameFromEnvironment();
|
|
91
|
+
if (envName) {
|
|
92
|
+
return envName;
|
|
93
|
+
}
|
|
94
|
+
return null;
|
|
95
|
+
}
|
|
96
|
+
function setRBACAppName(appName) {
|
|
97
|
+
if (typeof window !== "undefined") {
|
|
98
|
+
globalThis.RBAC_APP_NAME = appName.trim();
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
function getCurrentAppNameWithFallback(fallback = "default-app") {
|
|
102
|
+
return getCurrentAppName() || fallback;
|
|
103
|
+
}
|
|
104
|
+
var init_appNameResolver = __esm({
|
|
105
|
+
"src/utils/appNameResolver.ts"() {
|
|
106
|
+
}
|
|
107
|
+
});
|
|
108
|
+
|
|
109
|
+
export {
|
|
110
|
+
getAppNameFromPackageJson,
|
|
111
|
+
getAppNameFromBuildTime,
|
|
112
|
+
getAppNameFromGlobal,
|
|
113
|
+
getAppNameFromEnvironment,
|
|
114
|
+
getCurrentAppName,
|
|
115
|
+
setRBACAppName,
|
|
116
|
+
getCurrentAppNameWithFallback,
|
|
117
|
+
init_appNameResolver
|
|
118
|
+
};
|
|
119
|
+
//# sourceMappingURL=chunk-MZBUOP4P.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/utils/appNameResolver.ts"],"sourcesContent":["/**\n * Utility to resolve the current app name from various sources\n * Priority: package.json > environment variables > fallback\n */\n\ninterface PackageJson {\n name: string;\n [key: string]: any;\n}\n\n/**\n * Get the app name from package.json at build time\n * This works by reading package.json during the build process\n */\nexport function getAppNameFromPackageJson(): string | null {\n // Check if we're in a Node.js environment (build time)\n if (typeof window === 'undefined' && typeof require !== 'undefined') {\n try {\n // Try to read package.json from the current working directory\n // This works in most Node.js environments\n const fs = require('fs');\n const path = require('path');\n \n // Look for package.json in common locations\n const possiblePaths = [\n path.join(process.cwd(), 'package.json'),\n path.join(__dirname, '../../package.json'),\n path.join(__dirname, '../../../package.json'),\n ];\n \n for (const packagePath of possiblePaths) {\n try {\n if (fs.existsSync(packagePath)) {\n const packageJsonContent = fs.readFileSync(packagePath, 'utf8');\n const packageJson: PackageJson = JSON.parse(packageJsonContent);\n \n if (packageJson.name) {\n // Extract the app name from the package name\n // Handle scoped packages like @org/app-name\n const name = packageJson.name.split('/').pop() || packageJson.name;\n return name;\n }\n }\n } catch (error) {\n // Continue to next path\n continue;\n }\n }\n } catch (error) {\n // package.json not found or not readable\n console.warn('[RBAC] Could not read app name from package.json:', error);\n }\n }\n \n // In browser environments, we can't read package.json\n // This will fall back to environment variables\n return null;\n}\n\n/**\n * Get the app name from build-time injected variables\n * This is the preferred method for browser environments\n */\nexport function getAppNameFromBuildTime(): string | null {\n // Check for build-time injected app name\n // This would be set by the build process reading package.json\n if (typeof window !== 'undefined') {\n // Try to access build-time injected variables\n try {\n // @ts-ignore - These are injected at build time\n const buildTimeEnv = (globalThis as any).__RBAC_APP_NAME__;\n if (buildTimeEnv && buildTimeEnv.trim()) {\n return buildTimeEnv.trim();\n }\n } catch (error) {\n // Build-time injection not available\n }\n }\n \n return null;\n}\n\n/**\n * Get the app name from a global variable set by the consuming app\n * This is the simplest approach for browser environments\n */\nexport function getAppNameFromGlobal(): string | null {\n if (typeof window !== 'undefined') {\n // Check for global app name set by consuming app\n try {\n // @ts-ignore - This is set by the consuming app\n const globalAppName = (globalThis as any).RBAC_APP_NAME;\n if (globalAppName && globalAppName.trim()) {\n return globalAppName.trim();\n }\n } catch (error) {\n // Global variable not set\n }\n }\n \n return null;\n}\n\n/**\n * Get the app name from environment variables\n * Fallback method for when package.json is not available\n */\nexport function getAppNameFromEnvironment(): string | null {\n // Try different environment variable patterns used by various frameworks\n const envVars = [\n 'VITE_APP_NAME',\n 'REACT_APP_NAME', \n 'NEXT_PUBLIC_APP_NAME',\n 'APP_NAME',\n 'NODE_APP_NAME'\n ];\n \n for (const envVar of envVars) {\n const value = process.env[envVar];\n if (value && value.trim()) {\n return value.trim();\n }\n }\n \n return null;\n}\n\n/**\n * Get the current app name from the most reliable source\n * Priority: global variable > build-time injection > package.json > environment variables > null\n */\nexport function getCurrentAppName(): string | null {\n // First try global variable (set by consuming app)\n const globalName = getAppNameFromGlobal();\n if (globalName) {\n return globalName;\n }\n \n // Then try build-time injection (most reliable for browser)\n const buildTimeName = getAppNameFromBuildTime();\n if (buildTimeName) {\n return buildTimeName;\n }\n \n // Then try package.json (works in Node.js environments)\n const packageJsonName = getAppNameFromPackageJson();\n if (packageJsonName) {\n return packageJsonName;\n }\n \n // Fallback to environment variables\n const envName = getAppNameFromEnvironment();\n if (envName) {\n return envName;\n }\n \n return null;\n}\n\n/**\n * Set the app name globally for RBAC resolution\n * Call this in your app's main entry point (e.g., main.tsx, index.tsx)\n * \n * @param appName - The app name from your package.json\n * \n * @example\n * ```tsx\n * // In your main.tsx or index.tsx\n * import { setRBACAppName } from '@jmruthers/pace-core/utils';\n * \n * // Set the app name from package.json\n * setRBACAppName('CAKE');\n * \n * // Rest of your app setup...\n * ```\n */\nexport function setRBACAppName(appName: string): void {\n if (typeof window !== 'undefined') {\n // @ts-ignore - Setting global variable\n (globalThis as any).RBAC_APP_NAME = appName.trim();\n }\n}\n\n/**\n * Get the app name with fallback to a default\n * Useful when you need a guaranteed app name\n */\nexport function getCurrentAppNameWithFallback(fallback: string = 'default-app'): string {\n return getCurrentAppName() || fallback;\n}\n"],"mappings":";;;;;;AAcO,SAAS,4BAA2C;AAEzD,MAAI,OAAO,WAAW,eAAe,OAAO,cAAY,aAAa;AACnE,QAAI;AAGF,YAAM,KAAK,UAAQ,IAAI;AACvB,YAAM,OAAO,UAAQ,MAAM;AAG3B,YAAM,gBAAgB;AAAA,QACpB,KAAK,KAAK,QAAQ,IAAI,GAAG,cAAc;AAAA,QACvC,KAAK,KAAK,WAAW,oBAAoB;AAAA,QACzC,KAAK,KAAK,WAAW,uBAAuB;AAAA,MAC9C;AAEA,iBAAW,eAAe,eAAe;AACvC,YAAI;AACF,cAAI,GAAG,WAAW,WAAW,GAAG;AAC9B,kBAAM,qBAAqB,GAAG,aAAa,aAAa,MAAM;AAC9D,kBAAM,cAA2B,KAAK,MAAM,kBAAkB;AAE9D,gBAAI,YAAY,MAAM;AAGpB,oBAAM,OAAO,YAAY,KAAK,MAAM,GAAG,EAAE,IAAI,KAAK,YAAY;AAC9D,qBAAO;AAAA,YACT;AAAA,UACF;AAAA,QACF,SAAS,OAAO;AAEd;AAAA,QACF;AAAA,MACF;AAAA,IACF,SAAS,OAAO;AAEd,cAAQ,KAAK,qDAAqD,KAAK;AAAA,IACzE;AAAA,EACF;AAIA,SAAO;AACT;AAMO,SAAS,0BAAyC;AAGvD,MAAI,OAAO,WAAW,aAAa;AAEjC,QAAI;AAEF,YAAM,eAAgB,WAAmB;AACzC,UAAI,gBAAgB,aAAa,KAAK,GAAG;AACvC,eAAO,aAAa,KAAK;AAAA,MAC3B;AAAA,IACF,SAAS,OAAO;AAAA,IAEhB;AAAA,EACF;AAEA,SAAO;AACT;AAMO,SAAS,uBAAsC;AACpD,MAAI,OAAO,WAAW,aAAa;AAEjC,QAAI;AAEF,YAAM,gBAAiB,WAAmB;AAC1C,UAAI,iBAAiB,cAAc,KAAK,GAAG;AACzC,eAAO,cAAc,KAAK;AAAA,MAC5B;AAAA,IACF,SAAS,OAAO;AAAA,IAEhB;AAAA,EACF;AAEA,SAAO;AACT;AAMO,SAAS,4BAA2C;AAEzD,QAAM,UAAU;AAAA,IACd;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AAEA,aAAW,UAAU,SAAS;AAC5B,UAAM,QAAQ,QAAQ,IAAI,MAAM;AAChC,QAAI,SAAS,MAAM,KAAK,GAAG;AACzB,aAAO,MAAM,KAAK;AAAA,IACpB;AAAA,EACF;AAEA,SAAO;AACT;AAMO,SAAS,oBAAmC;AAEjD,QAAM,aAAa,qBAAqB;AACxC,MAAI,YAAY;AACd,WAAO;AAAA,EACT;AAGA,QAAM,gBAAgB,wBAAwB;AAC9C,MAAI,eAAe;AACjB,WAAO;AAAA,EACT;AAGA,QAAM,kBAAkB,0BAA0B;AAClD,MAAI,iBAAiB;AACnB,WAAO;AAAA,EACT;AAGA,QAAM,UAAU,0BAA0B;AAC1C,MAAI,SAAS;AACX,WAAO;AAAA,EACT;AAEA,SAAO;AACT;AAmBO,SAAS,eAAe,SAAuB;AACpD,MAAI,OAAO,WAAW,aAAa;AAEjC,IAAC,WAAmB,gBAAgB,QAAQ,KAAK;AAAA,EACnD;AACF;AAMO,SAAS,8BAA8B,WAAmB,eAAuB;AACtF,SAAO,kBAAkB,KAAK;AAChC;AA7LA;AAAA;AAAA;AAAA;","names":[]}
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
// src/theming/runtime.ts
|
|
2
|
+
function formatOklchCss(color) {
|
|
3
|
+
return `oklch(${color.L} ${color.C} ${color.H})`;
|
|
4
|
+
}
|
|
5
|
+
function applyPalette(palette) {
|
|
6
|
+
if (typeof document === "undefined" || document === null) {
|
|
7
|
+
if (typeof console !== "undefined" && console?.warn) {
|
|
8
|
+
console.warn("applyPalette: Document not available (SSR)");
|
|
9
|
+
}
|
|
10
|
+
return;
|
|
11
|
+
}
|
|
12
|
+
clearPalette();
|
|
13
|
+
const style = document.createElement("style");
|
|
14
|
+
style.id = "pace-theme-dynamic";
|
|
15
|
+
style.textContent = generateThemeCSS(palette);
|
|
16
|
+
document.head.appendChild(style);
|
|
17
|
+
}
|
|
18
|
+
function clearPalette() {
|
|
19
|
+
if (typeof document === "undefined" || document === null) {
|
|
20
|
+
return;
|
|
21
|
+
}
|
|
22
|
+
const existingStyle = document.getElementById("pace-theme-dynamic");
|
|
23
|
+
if (existingStyle) {
|
|
24
|
+
existingStyle.remove();
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
function generateThemeCSS(palette) {
|
|
28
|
+
if (!palette) {
|
|
29
|
+
throw new Error("Palette data is required");
|
|
30
|
+
}
|
|
31
|
+
const main = palette.main || {};
|
|
32
|
+
const sec = palette.sec || {};
|
|
33
|
+
const acc = palette.acc || {};
|
|
34
|
+
let css = "@theme static {\n";
|
|
35
|
+
css += " /* MAIN */\n";
|
|
36
|
+
if (main.raw) {
|
|
37
|
+
css += ` --color-main-raw: ${formatOklchCss(main.raw)};
|
|
38
|
+
`;
|
|
39
|
+
}
|
|
40
|
+
for (let i = 50; i <= 950; i += 50) {
|
|
41
|
+
if (main[i.toString()]) {
|
|
42
|
+
css += ` --color-main-${i}: ${formatOklchCss(main[i.toString()])};
|
|
43
|
+
`;
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
css += " /* SEC */\n";
|
|
47
|
+
if (sec.raw) {
|
|
48
|
+
css += ` --color-sec-raw: ${formatOklchCss(sec.raw)};
|
|
49
|
+
`;
|
|
50
|
+
}
|
|
51
|
+
for (let i = 50; i <= 950; i += 50) {
|
|
52
|
+
if (sec[i.toString()]) {
|
|
53
|
+
css += ` --color-sec-${i}: ${formatOklchCss(sec[i.toString()])};
|
|
54
|
+
`;
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
css += " /* ACC */\n";
|
|
58
|
+
if (acc.raw) {
|
|
59
|
+
css += ` --color-acc-raw: ${formatOklchCss(acc.raw)};
|
|
60
|
+
`;
|
|
61
|
+
}
|
|
62
|
+
for (let i = 50; i <= 950; i += 50) {
|
|
63
|
+
if (acc[i.toString()]) {
|
|
64
|
+
css += ` --color-acc-${i}: ${formatOklchCss(acc[i.toString()])};
|
|
65
|
+
`;
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
css += "}\n";
|
|
69
|
+
return css;
|
|
70
|
+
}
|
|
71
|
+
function generateSSRThemeCSS(palette) {
|
|
72
|
+
return generateThemeCSS(palette);
|
|
73
|
+
}
|
|
74
|
+
function isDynamicThemingActive() {
|
|
75
|
+
if (typeof document === "undefined" || document === null) {
|
|
76
|
+
return false;
|
|
77
|
+
}
|
|
78
|
+
return document.getElementById("pace-theme-dynamic") !== null;
|
|
79
|
+
}
|
|
80
|
+
function getCurrentThemeData() {
|
|
81
|
+
if (typeof document === "undefined" || document === null) {
|
|
82
|
+
return null;
|
|
83
|
+
}
|
|
84
|
+
const style = document.getElementById("pace-theme-dynamic");
|
|
85
|
+
if (!style) {
|
|
86
|
+
return null;
|
|
87
|
+
}
|
|
88
|
+
return null;
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
export {
|
|
92
|
+
applyPalette,
|
|
93
|
+
clearPalette,
|
|
94
|
+
generateSSRThemeCSS,
|
|
95
|
+
isDynamicThemingActive,
|
|
96
|
+
getCurrentThemeData
|
|
97
|
+
};
|
|
98
|
+
//# sourceMappingURL=chunk-N2EUGZRW.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/theming/runtime.ts"],"sourcesContent":["/**\n * @file PACE Core Theming Runtime\n * @package @jmruthers/pace-core\n * @module Theming/Runtime\n * @since 2.0.0\n * \n * Runtime helpers for palette replacement from organisation/event payloads.\n * Provides simple applyPalette() and clearPalette() API with SSR support.\n * \n * @example\n * ```ts\n * import { applyPalette, clearPalette } from '@jmruthers/pace-core/theming/runtime';\n * \n * // Apply organisation colors\n * applyPalette({\n * main: { // main palette shades\n * 50: { L: 0.95, C: 0.02, H: 0 },\n * 500: { L: 0.5, C: 0.2, H: 0 }\n * },\n * sec: { // secondary palette shades\n * 50: { L: 0.95, C: 0.02, H: 120 },\n * 500: { L: 0.5, C: 0.2, H: 120 }\n * },\n * acc: { // accent palette shades\n * 50: { L: 0.95, C: 0.02, H: 240 },\n * 500: { L: 0.5, C: 0.2, H: 240 }\n * }\n * });\n * \n * // Clear dynamic theming\n * clearPalette();\n * ```\n */\n\nexport interface ColorShade {\n L: number;\n C: number;\n H: number;\n}\n\nexport interface ColorPalette {\n [shade: string]: ColorShade;\n}\n\nexport interface PaletteData {\n main: ColorPalette;\n sec: ColorPalette;\n acc: ColorPalette;\n}\n\n/**\n * Converts OKLCH color data to CSS string\n */\nfunction formatOklchCss(color: ColorShade): string {\n return `oklch(${color.L} ${color.C} ${color.H})`;\n}\n\n/**\n * Applies a complete palette to the document by replacing all three palette variable sets.\n * Writes a single <style id=\"pace-theme-dynamic\"> block into <head>.\n * \n * @param palette - Complete palette data with main, sec, and acc palettes\n */\nexport function applyPalette(palette: PaletteData): void {\n if (typeof document === 'undefined' || document === null) {\n if (typeof console !== 'undefined' && console?.warn) {\n console.warn('applyPalette: Document not available (SSR)');\n }\n return;\n }\n\n // Remove existing dynamic theme block\n clearPalette();\n\n // Create new style block\n const style = document.createElement('style');\n style.id = 'pace-theme-dynamic';\n style.textContent = generateThemeCSS(palette);\n \n document.head.appendChild(style);\n}\n\n/**\n * Removes the dynamic theme block, returning to app-defined CSS values.\n */\nexport function clearPalette(): void {\n if (typeof document === 'undefined' || document === null) {\n return;\n }\n\n const existingStyle = document.getElementById('pace-theme-dynamic');\n if (existingStyle) {\n existingStyle.remove();\n }\n}\n\n/**\n * Generates CSS for the dynamic theme block\n */\nfunction generateThemeCSS(palette: PaletteData): string {\n // Handle null/undefined palette\n if (!palette) {\n throw new Error('Palette data is required');\n }\n \n const main = palette.main || {};\n const sec = palette.sec || {};\n const acc = palette.acc || {};\n \n let css = '@theme static {\\n';\n \n // MAIN palette\n css += ' /* MAIN */\\n';\n if (main.raw) {\n css += ` --color-main-raw: ${formatOklchCss(main.raw)};\\n`;\n }\n for (let i = 50; i <= 950; i += 50) {\n if (main[i.toString()]) {\n css += ` --color-main-${i}: ${formatOklchCss(main[i.toString()])};\\n`;\n }\n }\n \n // SEC palette\n css += ' /* SEC */\\n';\n if (sec.raw) {\n css += ` --color-sec-raw: ${formatOklchCss(sec.raw)};\\n`;\n }\n for (let i = 50; i <= 950; i += 50) {\n if (sec[i.toString()]) {\n css += ` --color-sec-${i}: ${formatOklchCss(sec[i.toString()])};\\n`;\n }\n }\n \n // ACC palette\n css += ' /* ACC */\\n';\n if (acc.raw) {\n css += ` --color-acc-raw: ${formatOklchCss(acc.raw)};\\n`;\n }\n for (let i = 50; i <= 950; i += 50) {\n if (acc[i.toString()]) {\n css += ` --color-acc-${i}: ${formatOklchCss(acc[i.toString()])};\\n`;\n }\n }\n \n css += '}\\n';\n \n return css;\n}\n\n/**\n * Generates the same CSS block for SSR rendering\n * Use this in your SSR setup to avoid FOUC\n */\nexport function generateSSRThemeCSS(palette: PaletteData): string {\n return generateThemeCSS(palette);\n}\n\n/**\n * Checks if dynamic theming is currently active\n */\nexport function isDynamicThemingActive(): boolean {\n if (typeof document === 'undefined' || document === null) {\n return false;\n }\n \n return document.getElementById('pace-theme-dynamic') !== null;\n}\n\n/**\n * Gets the current dynamic theme data (if any)\n * Useful for debugging or persistence\n */\nexport function getCurrentThemeData(): PaletteData | null {\n if (typeof document === 'undefined' || document === null) {\n return null;\n }\n\n const style = document.getElementById('pace-theme-dynamic');\n if (!style) {\n return null;\n }\n\n // This is a simplified implementation\n // In a real scenario, you might want to parse the CSS to extract values\n // For now, we'll return null as the theme data isn't easily extractable\n return null;\n}\n"],"mappings":";AAqDA,SAAS,eAAe,OAA2B;AACjD,SAAO,SAAS,MAAM,CAAC,IAAI,MAAM,CAAC,IAAI,MAAM,CAAC;AAC/C;AAQO,SAAS,aAAa,SAA4B;AACvD,MAAI,OAAO,aAAa,eAAe,aAAa,MAAM;AACxD,QAAI,OAAO,YAAY,eAAe,SAAS,MAAM;AACnD,cAAQ,KAAK,4CAA4C;AAAA,IAC3D;AACA;AAAA,EACF;AAGA,eAAa;AAGb,QAAM,QAAQ,SAAS,cAAc,OAAO;AAC5C,QAAM,KAAK;AACX,QAAM,cAAc,iBAAiB,OAAO;AAE5C,WAAS,KAAK,YAAY,KAAK;AACjC;AAKO,SAAS,eAAqB;AACnC,MAAI,OAAO,aAAa,eAAe,aAAa,MAAM;AACxD;AAAA,EACF;AAEA,QAAM,gBAAgB,SAAS,eAAe,oBAAoB;AAClE,MAAI,eAAe;AACjB,kBAAc,OAAO;AAAA,EACvB;AACF;AAKA,SAAS,iBAAiB,SAA8B;AAEtD,MAAI,CAAC,SAAS;AACZ,UAAM,IAAI,MAAM,0BAA0B;AAAA,EAC5C;AAEA,QAAM,OAAO,QAAQ,QAAQ,CAAC;AAC9B,QAAM,MAAM,QAAQ,OAAO,CAAC;AAC5B,QAAM,MAAM,QAAQ,OAAO,CAAC;AAE5B,MAAI,MAAM;AAGV,SAAO;AACP,MAAI,KAAK,KAAK;AACZ,WAAO,uBAAuB,eAAe,KAAK,GAAG,CAAC;AAAA;AAAA,EACxD;AACA,WAAS,IAAI,IAAI,KAAK,KAAK,KAAK,IAAI;AAClC,QAAI,KAAK,EAAE,SAAS,CAAC,GAAG;AACtB,aAAO,kBAAkB,CAAC,KAAK,eAAe,KAAK,EAAE,SAAS,CAAC,CAAC,CAAC;AAAA;AAAA,IACnE;AAAA,EACF;AAGA,SAAO;AACP,MAAI,IAAI,KAAK;AACX,WAAO,sBAAsB,eAAe,IAAI,GAAG,CAAC;AAAA;AAAA,EACtD;AACA,WAAS,IAAI,IAAI,KAAK,KAAK,KAAK,IAAI;AAClC,QAAI,IAAI,EAAE,SAAS,CAAC,GAAG;AACrB,aAAO,iBAAiB,CAAC,KAAK,eAAe,IAAI,EAAE,SAAS,CAAC,CAAC,CAAC;AAAA;AAAA,IACjE;AAAA,EACF;AAGA,SAAO;AACP,MAAI,IAAI,KAAK;AACX,WAAO,sBAAsB,eAAe,IAAI,GAAG,CAAC;AAAA;AAAA,EACtD;AACA,WAAS,IAAI,IAAI,KAAK,KAAK,KAAK,IAAI;AAClC,QAAI,IAAI,EAAE,SAAS,CAAC,GAAG;AACrB,aAAO,iBAAiB,CAAC,KAAK,eAAe,IAAI,EAAE,SAAS,CAAC,CAAC,CAAC;AAAA;AAAA,IACjE;AAAA,EACF;AAEA,SAAO;AAEP,SAAO;AACT;AAMO,SAAS,oBAAoB,SAA8B;AAChE,SAAO,iBAAiB,OAAO;AACjC;AAKO,SAAS,yBAAkC;AAChD,MAAI,OAAO,aAAa,eAAe,aAAa,MAAM;AACxD,WAAO;AAAA,EACT;AAEA,SAAO,SAAS,eAAe,oBAAoB,MAAM;AAC3D;AAMO,SAAS,sBAA0C;AACxD,MAAI,OAAO,aAAa,eAAe,aAAa,MAAM;AACxD,WAAO;AAAA,EACT;AAEA,QAAM,QAAQ,SAAS,eAAe,oBAAoB;AAC1D,MAAI,CAAC,OAAO;AACV,WAAO;AAAA,EACT;AAKA,SAAO;AACT;","names":[]}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
// src/styles/index.ts
|
|
2
|
+
var styleConfig = {
|
|
3
|
+
core: {
|
|
4
|
+
path: "./core.css",
|
|
5
|
+
description: "Complete CSS foundation including base styles, theme mappings, fonts, resets, and neutral tokens"
|
|
6
|
+
}
|
|
7
|
+
};
|
|
8
|
+
function getStylePath(style) {
|
|
9
|
+
return styleConfig[style].path;
|
|
10
|
+
}
|
|
11
|
+
function getAllStylePaths() {
|
|
12
|
+
return Object.values(styleConfig).map((config) => config.path);
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
export {
|
|
16
|
+
styleConfig,
|
|
17
|
+
getStylePath,
|
|
18
|
+
getAllStylePaths
|
|
19
|
+
};
|
|
20
|
+
//# sourceMappingURL=chunk-NQ4TOOO6.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/styles/index.ts"],"sourcesContent":["/**\n * @file Styles Index\n * @package @jmruthers/pace-core\n * @module Styles\n * @since 2.0.0\n * \n * Central export for all pace-core styles.\n * This file provides easy access to all CSS files for consuming applications.\n * \n * @example\n * ```tsx\n * // Import the core CSS file\n * import '@jmruthers/pace-core/styles/core.css';\n * ```\n * \n * @example\n * ```tsx\n * // Import theming runtime\n * import { applyPalette, clearPalette } from '@jmruthers/pace-core/theming/runtime';\n * ```\n */\n\n// Note: CSS files are available at runtime via package exports\n// Import them using the individual file paths\n\n// Type definitions for style imports\nexport interface StyleImport {\n default: string;\n}\n\n// Style configuration\nexport const styleConfig = {\n core: {\n path: './core.css',\n description: 'Complete CSS foundation including base styles, theme mappings, fonts, resets, and neutral tokens'\n }\n} as const;\n\n// Helper function to get style paths\nexport function getStylePath(style: keyof typeof styleConfig): string {\n return styleConfig[style].path;\n}\n\n// Helper function to get all style paths\nexport function getAllStylePaths(): string[] {\n return Object.values(styleConfig).map(config => config.path);\n}\n\n// Re-export theming runtime for convenience\nexport { applyPalette, clearPalette, generateSSRThemeCSS, isDynamicThemingActive, getCurrentThemeData } from '../theming/runtime';\nexport type { PaletteData, ColorPalette, ColorShade } from '../theming/runtime';\n"],"mappings":";AA+BO,IAAM,cAAc;AAAA,EACzB,MAAM;AAAA,IACJ,MAAM;AAAA,IACN,aAAa;AAAA,EACf;AACF;AAGO,SAAS,aAAa,OAAyC;AACpE,SAAO,YAAY,KAAK,EAAE;AAC5B;AAGO,SAAS,mBAA6B;AAC3C,SAAO,OAAO,OAAO,WAAW,EAAE,IAAI,YAAU,OAAO,IAAI;AAC7D;","names":[]}
|
|
@@ -4,8 +4,16 @@ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
|
4
4
|
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
5
|
var __getProtoOf = Object.getPrototypeOf;
|
|
6
6
|
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
7
|
-
var
|
|
8
|
-
|
|
7
|
+
var __require = /* @__PURE__ */ ((x) => typeof require !== "undefined" ? require : typeof Proxy !== "undefined" ? new Proxy(x, {
|
|
8
|
+
get: (a, b) => (typeof require !== "undefined" ? require : a)[b]
|
|
9
|
+
}) : x)(function(x) {
|
|
10
|
+
if (typeof require !== "undefined") return require.apply(this, arguments);
|
|
11
|
+
throw Error('Dynamic require of "' + x + '" is not supported');
|
|
12
|
+
});
|
|
13
|
+
var __esm = (fn, res) => function __init() {
|
|
14
|
+
return fn && (res = (0, fn[__getOwnPropNames(fn)[0]])(fn = 0)), res;
|
|
15
|
+
};
|
|
16
|
+
var __commonJS = (cb, mod) => function __require2() {
|
|
9
17
|
return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports;
|
|
10
18
|
};
|
|
11
19
|
var __export = (target, all) => {
|
|
@@ -28,12 +36,14 @@ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__ge
|
|
|
28
36
|
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
|
29
37
|
mod
|
|
30
38
|
));
|
|
31
|
-
var
|
|
39
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
32
40
|
|
|
33
41
|
export {
|
|
42
|
+
__require,
|
|
43
|
+
__esm,
|
|
34
44
|
__commonJS,
|
|
35
45
|
__export,
|
|
36
46
|
__toESM,
|
|
37
|
-
|
|
47
|
+
__toCommonJS
|
|
38
48
|
};
|
|
39
|
-
//# sourceMappingURL=chunk-
|
|
49
|
+
//# sourceMappingURL=chunk-PLDDJCW6.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
|
|
@@ -1,9 +1,15 @@
|
|
|
1
1
|
import {
|
|
2
|
+
usePublicPageContext
|
|
3
|
+
} from "./chunk-K6B7BLSE.js";
|
|
4
|
+
import {
|
|
5
|
+
init_OrganisationProvider,
|
|
6
|
+
init_UnifiedAuthProvider,
|
|
2
7
|
useOrganisations,
|
|
3
8
|
useUnifiedAuth
|
|
4
|
-
} from "./chunk-
|
|
9
|
+
} from "./chunk-QKHFMQ5R.js";
|
|
5
10
|
|
|
6
11
|
// src/hooks/useOrganisationPermissions.ts
|
|
12
|
+
init_OrganisationProvider();
|
|
7
13
|
import { useMemo } from "react";
|
|
8
14
|
function useOrganisationPermissions(orgId) {
|
|
9
15
|
const {
|
|
@@ -101,9 +107,11 @@ function useOrganisationPermissions(orgId) {
|
|
|
101
107
|
}
|
|
102
108
|
|
|
103
109
|
// src/hooks/useOrganisationSecurity.ts
|
|
110
|
+
init_UnifiedAuthProvider();
|
|
111
|
+
init_OrganisationProvider();
|
|
104
112
|
import { useCallback, useMemo as useMemo2 } from "react";
|
|
105
113
|
var useOrganisationSecurity = () => {
|
|
106
|
-
const { user, supabase } = useUnifiedAuth();
|
|
114
|
+
const { user, session, supabase } = useUnifiedAuth();
|
|
107
115
|
const { selectedOrganisation, getUserRole, validateOrganisationAccess: validateAccess } = useOrganisations();
|
|
108
116
|
const globalRole = useMemo2(() => {
|
|
109
117
|
if (!user) return null;
|
|
@@ -118,7 +126,7 @@ var useOrganisationSecurity = () => {
|
|
|
118
126
|
};
|
|
119
127
|
}, [globalRole]);
|
|
120
128
|
const validateOrganisationAccess = useCallback(async (orgId) => {
|
|
121
|
-
if (!user || !supabase) return false;
|
|
129
|
+
if (!user || !session || !supabase) return false;
|
|
122
130
|
try {
|
|
123
131
|
if (superAdminContext.isSuperAdmin) {
|
|
124
132
|
return true;
|
|
@@ -133,7 +141,7 @@ var useOrganisationSecurity = () => {
|
|
|
133
141
|
console.error("[useOrganisationSecurity] Exception validating organisation access:", error);
|
|
134
142
|
return false;
|
|
135
143
|
}
|
|
136
|
-
}, [user, supabase, superAdminContext.isSuperAdmin]);
|
|
144
|
+
}, [user, session, supabase, superAdminContext.isSuperAdmin]);
|
|
137
145
|
const hasMinimumRole = useCallback((minRole, orgId) => {
|
|
138
146
|
if (superAdminContext.isSuperAdmin) {
|
|
139
147
|
return true;
|
|
@@ -162,7 +170,7 @@ var useOrganisationSecurity = () => {
|
|
|
162
170
|
const targetOrgId = orgId || selectedOrganisation?.id;
|
|
163
171
|
if (!targetOrgId || !user) return false;
|
|
164
172
|
try {
|
|
165
|
-
const { isPermitted } = await import("./api-
|
|
173
|
+
const { isPermitted } = await import("./api-H5A3H4IR.js");
|
|
166
174
|
const scope = {
|
|
167
175
|
organisationId: targetOrgId,
|
|
168
176
|
eventId: user.user_metadata?.eventId || user.app_metadata?.eventId,
|
|
@@ -185,7 +193,7 @@ var useOrganisationSecurity = () => {
|
|
|
185
193
|
const targetOrgId = orgId || selectedOrganisation?.id;
|
|
186
194
|
if (!targetOrgId || !user) return [];
|
|
187
195
|
try {
|
|
188
|
-
const { getPermissionMap } = await import("./api-
|
|
196
|
+
const { getPermissionMap } = await import("./api-H5A3H4IR.js");
|
|
189
197
|
const scope = {
|
|
190
198
|
organisationId: targetOrgId,
|
|
191
199
|
eventId: user.user_metadata?.eventId || user.app_metadata?.eventId,
|
|
@@ -205,19 +213,21 @@ var useOrganisationSecurity = () => {
|
|
|
205
213
|
const logOrganisationAccess = useCallback(async (action, details) => {
|
|
206
214
|
if (!user || !selectedOrganisation) return;
|
|
207
215
|
try {
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
216
|
+
if (selectedOrganisation.id) {
|
|
217
|
+
const { emitAuditEvent } = await import("./audit-BUW3LMJB.js");
|
|
218
|
+
await emitAuditEvent({
|
|
219
|
+
type: "permission_check",
|
|
220
|
+
userId: user.id,
|
|
221
|
+
organisationId: selectedOrganisation.id,
|
|
222
|
+
permission: action,
|
|
223
|
+
decision: true,
|
|
224
|
+
// Assume access was granted if we're logging it
|
|
225
|
+
source: "api",
|
|
226
|
+
duration_ms: 0,
|
|
227
|
+
// No actual permission check performed here
|
|
228
|
+
metadata: details || {}
|
|
229
|
+
});
|
|
230
|
+
}
|
|
221
231
|
} catch (error) {
|
|
222
232
|
console.error("[useOrganisationSecurity] Error logging organisation access:", error);
|
|
223
233
|
}
|
|
@@ -261,20 +271,252 @@ var useOrganisationSecurity = () => {
|
|
|
261
271
|
};
|
|
262
272
|
};
|
|
263
273
|
|
|
264
|
-
// src/hooks/
|
|
265
|
-
|
|
266
|
-
|
|
274
|
+
// src/hooks/public/usePublicEvent.ts
|
|
275
|
+
import { useState, useEffect, useCallback as useCallback2, useMemo as useMemo3 } from "react";
|
|
276
|
+
import { createClient } from "@supabase/supabase-js";
|
|
277
|
+
var publicDataCache = /* @__PURE__ */ new Map();
|
|
278
|
+
function usePublicEvent(eventCode, options = {}) {
|
|
279
|
+
const {
|
|
280
|
+
cacheTtl = 5 * 60 * 1e3,
|
|
281
|
+
// 5 minutes
|
|
282
|
+
enableCache = true
|
|
283
|
+
} = options;
|
|
284
|
+
const [event, setEvent] = useState(null);
|
|
285
|
+
const [isLoading, setIsLoading] = useState(true);
|
|
286
|
+
const [error, setError] = useState(null);
|
|
287
|
+
let environment;
|
|
288
|
+
try {
|
|
289
|
+
environment = usePublicPageContext().environment;
|
|
290
|
+
} catch {
|
|
291
|
+
environment = {
|
|
292
|
+
supabaseUrl: import.meta.env?.VITE_SUPABASE_URL || process.env.VITE_SUPABASE_URL || process.env.NEXT_PUBLIC_SUPABASE_URL || null,
|
|
293
|
+
supabaseKey: import.meta.env?.VITE_SUPABASE_ANON_KEY || process.env.VITE_SUPABASE_ANON_KEY || process.env.NEXT_PUBLIC_SUPABASE_ANON_KEY || null
|
|
294
|
+
};
|
|
295
|
+
}
|
|
296
|
+
const supabase = useMemo3(() => {
|
|
297
|
+
if (typeof window === "undefined") return null;
|
|
298
|
+
if (!environment.supabaseUrl || !environment.supabaseKey) {
|
|
299
|
+
console.warn("[usePublicEvent] Missing Supabase environment variables. Please ensure VITE_SUPABASE_URL and VITE_SUPABASE_ANON_KEY are set in your environment.");
|
|
300
|
+
return null;
|
|
301
|
+
}
|
|
302
|
+
return createClient(environment.supabaseUrl, environment.supabaseKey);
|
|
303
|
+
}, [environment.supabaseUrl, environment.supabaseKey]);
|
|
304
|
+
const fetchEvent = useCallback2(async () => {
|
|
305
|
+
if (!eventCode || !supabase) {
|
|
306
|
+
setError(new Error("Invalid event code or Supabase client not available"));
|
|
307
|
+
setIsLoading(false);
|
|
308
|
+
return;
|
|
309
|
+
}
|
|
310
|
+
const cacheKey = `public_event_${eventCode}`;
|
|
311
|
+
if (enableCache) {
|
|
312
|
+
const cached = publicDataCache.get(cacheKey);
|
|
313
|
+
if (cached && Date.now() - cached.timestamp < cached.ttl) {
|
|
314
|
+
setEvent(cached.data);
|
|
315
|
+
setIsLoading(false);
|
|
316
|
+
setError(null);
|
|
317
|
+
return;
|
|
318
|
+
}
|
|
319
|
+
}
|
|
320
|
+
try {
|
|
321
|
+
setIsLoading(true);
|
|
322
|
+
setError(null);
|
|
323
|
+
const { data, error: rpcError } = await supabase.rpc("get_public_event_by_code", {
|
|
324
|
+
event_code_param: eventCode
|
|
325
|
+
});
|
|
326
|
+
if (rpcError) {
|
|
327
|
+
throw new Error(rpcError.message || "Failed to fetch event");
|
|
328
|
+
}
|
|
329
|
+
if (!data || data.length === 0 || !data[0]) {
|
|
330
|
+
setEvent(null);
|
|
331
|
+
setError(new Error("Event not found"));
|
|
332
|
+
return;
|
|
333
|
+
}
|
|
334
|
+
const eventData = data[0];
|
|
335
|
+
const transformedEvent = {
|
|
336
|
+
id: eventData.event_id,
|
|
337
|
+
event_id: eventData.event_id,
|
|
338
|
+
event_name: eventData.event_name,
|
|
339
|
+
event_code: eventCode,
|
|
340
|
+
event_date: eventData.event_date,
|
|
341
|
+
event_venue: eventData.event_venue,
|
|
342
|
+
event_participants: eventData.event_participants,
|
|
343
|
+
event_logo: eventData.event_logo,
|
|
344
|
+
event_colours: eventData.event_colours,
|
|
345
|
+
organisation_id: eventData.organisation_id,
|
|
346
|
+
is_visible: true,
|
|
347
|
+
created_at: (/* @__PURE__ */ new Date()).toISOString(),
|
|
348
|
+
updated_at: (/* @__PURE__ */ new Date()).toISOString(),
|
|
349
|
+
// Legacy compatibility
|
|
350
|
+
name: eventData.event_name,
|
|
351
|
+
start_date: eventData.event_date
|
|
352
|
+
};
|
|
353
|
+
setEvent(transformedEvent);
|
|
354
|
+
if (enableCache) {
|
|
355
|
+
publicDataCache.set(cacheKey, {
|
|
356
|
+
data: transformedEvent,
|
|
357
|
+
timestamp: Date.now(),
|
|
358
|
+
ttl: cacheTtl
|
|
359
|
+
});
|
|
360
|
+
}
|
|
361
|
+
} catch (err) {
|
|
362
|
+
console.error("[usePublicEvent] Error fetching event:", err);
|
|
363
|
+
const error2 = err instanceof Error ? err : new Error("Unknown error occurred");
|
|
364
|
+
setError(error2);
|
|
365
|
+
setEvent(null);
|
|
366
|
+
} finally {
|
|
367
|
+
setIsLoading(false);
|
|
368
|
+
}
|
|
369
|
+
}, [eventCode, supabase, cacheTtl, enableCache]);
|
|
370
|
+
useEffect(() => {
|
|
371
|
+
fetchEvent();
|
|
372
|
+
}, [fetchEvent]);
|
|
373
|
+
const refetch = useCallback2(async () => {
|
|
374
|
+
if (enableCache) {
|
|
375
|
+
const cacheKey = `public_event_${eventCode}`;
|
|
376
|
+
publicDataCache.delete(cacheKey);
|
|
377
|
+
}
|
|
378
|
+
await fetchEvent();
|
|
379
|
+
}, [fetchEvent, eventCode, enableCache]);
|
|
380
|
+
return {
|
|
381
|
+
event,
|
|
382
|
+
isLoading,
|
|
383
|
+
error,
|
|
384
|
+
refetch
|
|
385
|
+
};
|
|
386
|
+
}
|
|
387
|
+
function clearPublicEventCache() {
|
|
388
|
+
for (const [key] of publicDataCache) {
|
|
389
|
+
if (key.startsWith("public_event_")) {
|
|
390
|
+
publicDataCache.delete(key);
|
|
391
|
+
}
|
|
392
|
+
}
|
|
393
|
+
}
|
|
394
|
+
function getPublicEventCacheStats() {
|
|
395
|
+
const keys = Array.from(publicDataCache.keys()).filter((key) => key.startsWith("public_event_"));
|
|
396
|
+
return {
|
|
397
|
+
size: keys.length,
|
|
398
|
+
keys
|
|
399
|
+
};
|
|
400
|
+
}
|
|
401
|
+
|
|
402
|
+
// src/hooks/public/usePublicRouteParams.ts
|
|
403
|
+
import { useState as useState2, useEffect as useEffect2, useCallback as useCallback3, useMemo as useMemo4 } from "react";
|
|
404
|
+
import { useParams, useLocation } from "react-router-dom";
|
|
405
|
+
function validateEventCodeFormat(eventCode) {
|
|
406
|
+
if (!eventCode || typeof eventCode !== "string") return false;
|
|
407
|
+
const eventCodeRegex = /^[a-zA-Z0-9_-]{3,50}$/;
|
|
408
|
+
return eventCodeRegex.test(eventCode);
|
|
409
|
+
}
|
|
410
|
+
function usePublicRouteParams(options = {}) {
|
|
411
|
+
const {
|
|
412
|
+
fetchEventData = true,
|
|
413
|
+
eventCodeParam = "eventCode",
|
|
414
|
+
validateEventCode = true
|
|
415
|
+
} = options;
|
|
416
|
+
const params = useParams();
|
|
417
|
+
const location = useLocation();
|
|
418
|
+
const [error, setError] = useState2(null);
|
|
419
|
+
const eventCode = useMemo4(() => {
|
|
420
|
+
const code = params[eventCodeParam];
|
|
421
|
+
if (!code) {
|
|
422
|
+
return null;
|
|
423
|
+
}
|
|
424
|
+
if (validateEventCode && !validateEventCodeFormat(code)) {
|
|
425
|
+
setError(new Error(`Invalid event code format: ${code}`));
|
|
426
|
+
return null;
|
|
427
|
+
}
|
|
428
|
+
setError(null);
|
|
429
|
+
return code;
|
|
430
|
+
}, [params, eventCodeParam, validateEventCode]);
|
|
431
|
+
const {
|
|
432
|
+
event,
|
|
433
|
+
isLoading: eventLoading,
|
|
434
|
+
error: eventError,
|
|
435
|
+
refetch: refetchEvent
|
|
436
|
+
} = usePublicEvent(eventCode || "", {
|
|
437
|
+
enableCache: true,
|
|
438
|
+
cacheTtl: 5 * 60 * 1e3
|
|
439
|
+
// 5 minutes
|
|
440
|
+
});
|
|
441
|
+
const isLoading = useMemo4(() => {
|
|
442
|
+
if (!fetchEventData) return false;
|
|
443
|
+
return eventLoading;
|
|
444
|
+
}, [fetchEventData, eventLoading]);
|
|
445
|
+
const finalError = useMemo4(() => {
|
|
446
|
+
if (error) return error;
|
|
447
|
+
if (eventError) return eventError;
|
|
448
|
+
return null;
|
|
449
|
+
}, [error, eventError]);
|
|
450
|
+
const eventId = useMemo4(() => {
|
|
451
|
+
if (!event) return null;
|
|
452
|
+
return event.event_id || event.id;
|
|
453
|
+
}, [event]);
|
|
454
|
+
const refetch = useCallback3(async () => {
|
|
455
|
+
if (!fetchEventData) return;
|
|
456
|
+
await refetchEvent();
|
|
457
|
+
}, [fetchEventData, refetchEvent]);
|
|
458
|
+
useEffect2(() => {
|
|
459
|
+
if (eventCode && event) {
|
|
460
|
+
console.log("[usePublicRouteParams] Public route accessed:", {
|
|
461
|
+
eventCode,
|
|
462
|
+
eventId: event.event_id,
|
|
463
|
+
eventName: event.event_name,
|
|
464
|
+
path: location.pathname
|
|
465
|
+
});
|
|
466
|
+
}
|
|
467
|
+
}, [eventCode, event, location.pathname]);
|
|
468
|
+
return {
|
|
469
|
+
eventCode,
|
|
470
|
+
eventId,
|
|
471
|
+
event: fetchEventData ? event : null,
|
|
472
|
+
isLoading,
|
|
473
|
+
error: finalError,
|
|
474
|
+
refetch
|
|
475
|
+
};
|
|
476
|
+
}
|
|
477
|
+
function usePublicEventCode(eventCodeParam = "eventCode") {
|
|
478
|
+
const params = useParams();
|
|
479
|
+
const eventCode = useMemo4(() => {
|
|
480
|
+
const code = params[eventCodeParam];
|
|
481
|
+
if (!code) {
|
|
482
|
+
return null;
|
|
483
|
+
}
|
|
484
|
+
if (!validateEventCodeFormat(code)) {
|
|
485
|
+
return null;
|
|
486
|
+
}
|
|
487
|
+
return code;
|
|
488
|
+
}, [params, eventCodeParam]);
|
|
489
|
+
const error = useMemo4(() => {
|
|
490
|
+
if (!eventCode) {
|
|
491
|
+
return new Error(`Event code parameter '${eventCodeParam}' not found or invalid`);
|
|
492
|
+
}
|
|
493
|
+
return null;
|
|
494
|
+
}, [eventCode, eventCodeParam]);
|
|
267
495
|
return {
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
isLoading: appConfig === null,
|
|
271
|
-
appName
|
|
496
|
+
eventCode,
|
|
497
|
+
error
|
|
272
498
|
};
|
|
273
499
|
}
|
|
500
|
+
function generatePublicRoutePath(eventCode, pageName = "index") {
|
|
501
|
+
if (!eventCode || !validateEventCodeFormat(eventCode)) {
|
|
502
|
+
throw new Error("Invalid event code for route generation");
|
|
503
|
+
}
|
|
504
|
+
return `/public/event/${eventCode}/${pageName}`;
|
|
505
|
+
}
|
|
506
|
+
function extractEventCodeFromPath(path) {
|
|
507
|
+
const match = path.match(/^\/public\/event\/([a-zA-Z0-9_-]{3,50})(?:\/.*)?$/);
|
|
508
|
+
return match ? match[1] : null;
|
|
509
|
+
}
|
|
274
510
|
|
|
275
511
|
export {
|
|
276
512
|
useOrganisationPermissions,
|
|
277
513
|
useOrganisationSecurity,
|
|
278
|
-
|
|
514
|
+
usePublicEvent,
|
|
515
|
+
clearPublicEventCache,
|
|
516
|
+
getPublicEventCacheStats,
|
|
517
|
+
usePublicRouteParams,
|
|
518
|
+
usePublicEventCode,
|
|
519
|
+
generatePublicRoutePath,
|
|
520
|
+
extractEventCodeFromPath
|
|
279
521
|
};
|
|
280
|
-
//# sourceMappingURL=chunk-
|
|
522
|
+
//# sourceMappingURL=chunk-PVMYVQSM.js.map
|