@jmruthers/pace-core 0.5.180 → 0.5.182
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 +1 -1
- package/README.md +16 -2
- package/dist/{AuthService-DYuQPJj6.d.ts → AuthService-B-cd2MA4.d.ts} +9 -11
- package/dist/{DataTable-CWAZZcXC.d.ts → DataTable-Bz8ffqyA.d.ts} +1 -1
- package/dist/{DataTable-4VSEJQ7D.js → DataTable-QAB34V6K.js} +14 -15
- package/dist/UnifiedAuthProvider-7F6T4B6K.js +13 -0
- package/dist/{UnifiedAuthProvider-DJxGTftH.d.ts → UnifiedAuthProvider-F86d7dSi.d.ts} +5 -6
- package/dist/{api-45XYYO2A.js → api-ROMBCNKU.js} +5 -5
- package/dist/{audit-64X3VJXB.js → audit-WRS3KJKI.js} +4 -4
- package/dist/auth-BZOJqrdd.d.ts +49 -0
- package/dist/{chunk-CX5M4ZAG.js → chunk-5DRSZLL2.js} +1 -1
- package/dist/chunk-5DRSZLL2.js.map +1 -0
- package/dist/{chunk-BESYRHQM.js → chunk-6C4YBBJM.js} +10 -7
- package/dist/chunk-6C4YBBJM.js.map +1 -0
- package/dist/{chunk-PLDDJCW6.js → chunk-7D4SUZUM.js} +2 -13
- package/dist/{chunk-6HLVGAZG.js → chunk-CSOFYHAG.js} +55 -162
- package/dist/chunk-CSOFYHAG.js.map +1 -0
- package/dist/{chunk-ANBQRTPX.js → chunk-E66EQZE6.js} +3 -5
- package/dist/{chunk-ANBQRTPX.js.map → chunk-E66EQZE6.js.map} +1 -1
- package/dist/{chunk-Q5QRDWKI.js → chunk-F2IMUDXZ.js} +4 -6
- package/dist/chunk-F2IMUDXZ.js.map +1 -0
- package/dist/{chunk-SBVILCCA.js → chunk-FSFQFJCU.js} +28 -6
- package/dist/chunk-FSFQFJCU.js.map +1 -0
- package/dist/chunk-FUEYYMX5.js +2296 -0
- package/dist/chunk-FUEYYMX5.js.map +1 -0
- package/dist/{chunk-FFKNH6U5.js → chunk-HKIT6O7W.js} +3 -5
- package/dist/{chunk-FFKNH6U5.js.map → chunk-HKIT6O7W.js.map} +1 -1
- package/dist/chunk-KQCRWDSA.js +1 -0
- package/dist/{chunk-S5OFRT4M.js → chunk-KUEN3HFB.js} +6 -6
- package/dist/chunk-KUEN3HFB.js.map +1 -0
- package/dist/chunk-LMC26NLJ.js +84 -0
- package/dist/chunk-LMC26NLJ.js.map +1 -0
- package/dist/{chunk-BVYWGZVV.js → chunk-M7W4CP3M.js} +52 -19
- package/dist/chunk-M7W4CP3M.js.map +1 -0
- package/dist/{chunk-CPTUD43C.js → chunk-MI7HBHN3.js} +164 -243
- package/dist/chunk-MI7HBHN3.js.map +1 -0
- package/dist/{chunk-N5YCCUG5.js → chunk-PWAHJW4G.js} +180 -29
- package/dist/chunk-PWAHJW4G.js.map +1 -0
- package/dist/chunk-PWLANIRT.js +127 -0
- package/dist/{chunk-XDNLUEXI.js.map → chunk-PWLANIRT.js.map} +1 -1
- package/dist/chunk-QCDXODCA.js +75 -0
- package/dist/chunk-QCDXODCA.js.map +1 -0
- package/dist/{chunk-P6UUHOIF.js → chunk-QETLRQI6.js} +526 -887
- package/dist/chunk-QETLRQI6.js.map +1 -0
- package/dist/{chunk-GQA2LIAE.js → chunk-QUVSNGIP.js} +264 -262
- package/dist/chunk-QUVSNGIP.js.map +1 -0
- package/dist/chunk-QXHPKYJV.js +113 -0
- package/dist/chunk-QXHPKYJV.js.map +1 -0
- package/dist/{chunk-OWAG3GSU.js → chunk-R77UEZ4E.js} +11 -1
- package/dist/chunk-R77UEZ4E.js.map +1 -0
- package/dist/{chunk-ONI7Y733.js → chunk-RA3JUFMW.js} +314 -161
- package/dist/chunk-RA3JUFMW.js.map +1 -0
- package/dist/{chunk-ERISIBYU.js → chunk-SQGMNID3.js} +3 -8
- package/dist/chunk-SQGMNID3.js.map +1 -0
- package/dist/{chunk-XJ2HZOBU.js → chunk-UHNYIBXL.js} +1 -1
- package/dist/chunk-UHNYIBXL.js.map +1 -0
- package/{src/utils/secureStorage.ts → dist/chunk-VBXEHIUJ.js} +113 -88
- package/dist/{chunk-7QCC6MCP.js.map → chunk-VBXEHIUJ.js.map} +1 -1
- package/dist/{chunk-R53TUSFK.js → chunk-W22JP75J.js} +5 -13
- package/dist/{chunk-R53TUSFK.js.map → chunk-W22JP75J.js.map} +1 -1
- package/dist/components.d.ts +12 -93
- package/dist/components.js +23 -106
- package/dist/components.js.map +1 -1
- package/dist/core-CUElvH_C.d.ts +164 -0
- package/dist/database.generated-CBmg2950.d.ts +8284 -0
- package/dist/event-CW5YB_2p.d.ts +239 -0
- package/dist/{file-reference-C6Gkn77H.d.ts → file-reference-D06mEEWW.d.ts} +7 -5
- package/dist/functions-D_kgHktt.d.ts +208 -0
- package/dist/hooks.d.ts +54 -7
- package/dist/hooks.js +204 -17
- package/dist/hooks.js.map +1 -1
- package/dist/{EventLogo-B3V3otev.d.ts → index-Bl--n7-T.d.ts} +387 -397
- package/dist/index.d.ts +94 -261
- package/dist/index.js +314 -126
- package/dist/index.js.map +1 -1
- package/dist/providers.d.ts +7 -8
- package/dist/providers.js +6 -13
- package/dist/rbac/index.d.ts +171 -101
- package/dist/rbac/index.js +23 -17
- package/dist/styles/index.d.ts +1 -3
- package/dist/styles/index.js +2 -17
- package/dist/theming/runtime.js +3 -3
- package/dist/types-UU913iLA.d.ts +102 -0
- package/dist/{types-Dfz9dmVH.d.ts → types-_x1f4QBF.d.ts} +6 -6
- package/dist/types.d.ts +88 -227
- package/dist/types.js +64 -112
- package/dist/types.js.map +1 -1
- package/dist/{usePublicRouteParams-B7PabvuH.d.ts → usePublicRouteParams-JJczomYq.d.ts} +203 -6
- package/dist/utils.d.ts +299 -13
- package/dist/utils.js +481 -55
- package/dist/utils.js.map +1 -1
- package/dist/validation-643vUDZW.d.ts +177 -0
- package/docs/DOCUMENTATION_REVIEW_TRACKER.md +511 -0
- package/docs/README.md +9 -8
- package/docs/api/README.md +16 -2
- package/docs/api/classes/ColumnFactory.md +1 -1
- package/docs/api/classes/ErrorBoundary.md +1 -1
- package/docs/api/classes/InvalidScopeError.md +4 -4
- package/docs/api/classes/MissingUserContextError.md +4 -4
- package/docs/api/classes/OrganisationContextRequiredError.md +4 -4
- package/docs/api/classes/PermissionDeniedError.md +4 -4
- package/docs/api/classes/RBACAuditManager.md +14 -14
- package/docs/api/classes/RBACCache.md +1 -1
- package/docs/api/classes/RBACEngine.md +2 -2
- package/docs/api/classes/RBACError.md +4 -4
- package/docs/api/classes/RBACNotInitializedError.md +4 -4
- package/docs/api/classes/SecureSupabaseClient.md +29 -9
- package/docs/api/classes/StorageUtils.md +1 -1
- package/docs/api/enums/FileCategory.md +17 -17
- package/docs/api/enums/RBACErrorCode.md +228 -0
- package/docs/api/enums/RPCFunction.md +118 -0
- package/docs/api/interfaces/AggregateConfig.md +1 -1
- package/docs/api/interfaces/BadgeProps.md +1 -1
- package/docs/api/interfaces/ButtonProps.md +2 -2
- package/docs/api/interfaces/CalendarProps.md +1 -1
- package/docs/api/interfaces/CardProps.md +29 -3
- package/docs/api/interfaces/ColorPalette.md +1 -1
- package/docs/api/interfaces/ColorShade.md +1 -1
- package/docs/api/interfaces/DataAccessRecord.md +1 -1
- package/docs/api/interfaces/DataRecord.md +1 -1
- package/docs/api/interfaces/DataTableAction.md +2 -2
- package/docs/api/interfaces/DataTableColumn.md +6 -6
- package/docs/api/interfaces/DataTableProps.md +1 -1
- package/docs/api/interfaces/DataTableToolbarButton.md +2 -2
- package/docs/api/interfaces/EmptyStateConfig.md +1 -1
- package/docs/api/interfaces/EnhancedNavigationMenuProps.md +1 -1
- package/docs/api/interfaces/EventAppRoleData.md +1 -1
- package/docs/api/interfaces/ExportColumn.md +5 -5
- package/docs/api/interfaces/ExportOptions.md +4 -4
- package/docs/api/interfaces/FileDisplayProps.md +1 -1
- package/docs/api/interfaces/FileMetadata.md +13 -13
- package/docs/api/interfaces/FileReference.md +12 -12
- package/docs/api/interfaces/FileSizeLimits.md +1 -1
- package/docs/api/interfaces/FileUploadOptions.md +10 -10
- package/docs/api/interfaces/FileUploadProps.md +19 -19
- package/docs/api/interfaces/FooterProps.md +1 -1
- package/docs/api/interfaces/FormFieldProps.md +166 -0
- package/docs/api/interfaces/FormProps.md +113 -0
- package/docs/api/interfaces/GrantEventAppRoleParams.md +1 -1
- package/docs/api/interfaces/InactivityWarningModalProps.md +8 -8
- package/docs/api/interfaces/InputProps.md +2 -2
- package/docs/api/interfaces/LabelProps.md +8 -8
- package/docs/api/interfaces/LoginFormProps.md +1 -1
- package/docs/api/interfaces/NavigationAccessRecord.md +1 -1
- package/docs/api/interfaces/NavigationContextType.md +1 -1
- package/docs/api/interfaces/NavigationGuardProps.md +1 -1
- package/docs/api/interfaces/NavigationItem.md +17 -73
- package/docs/api/interfaces/NavigationMenuProps.md +38 -53
- package/docs/api/interfaces/NavigationProviderProps.md +1 -1
- package/docs/api/interfaces/Organisation.md +13 -13
- package/docs/api/interfaces/OrganisationContextType.md +21 -21
- package/docs/api/interfaces/OrganisationMembership.md +15 -15
- package/docs/api/interfaces/OrganisationProviderProps.md +59 -2
- package/docs/api/interfaces/OrganisationSecurityError.md +5 -5
- package/docs/api/interfaces/PaceAppLayoutProps.md +26 -39
- package/docs/api/interfaces/PaceLoginPageProps.md +1 -1
- package/docs/api/interfaces/PageAccessRecord.md +1 -1
- package/docs/api/interfaces/PagePermissionContextType.md +1 -1
- package/docs/api/interfaces/PagePermissionGuardProps.md +1 -1
- package/docs/api/interfaces/PagePermissionProviderProps.md +1 -1
- package/docs/api/interfaces/PaletteData.md +1 -1
- package/docs/api/interfaces/PermissionEnforcerProps.md +1 -1
- package/docs/api/interfaces/ProgressProps.md +50 -0
- package/docs/api/interfaces/ProtectedRouteProps.md +1 -1
- package/docs/api/interfaces/PublicPageFooterProps.md +9 -9
- package/docs/api/interfaces/PublicPageHeaderProps.md +10 -10
- package/docs/api/interfaces/PublicPageLayoutProps.md +15 -15
- package/docs/api/interfaces/RBACAccessValidateParams.md +52 -0
- package/docs/api/interfaces/RBACAccessValidateResult.md +41 -0
- package/docs/api/interfaces/RBACAuditLogParams.md +85 -0
- package/docs/api/interfaces/RBACAuditLogResult.md +52 -0
- package/docs/api/interfaces/RBACConfig.md +2 -2
- package/docs/api/interfaces/RBACContext.md +52 -0
- package/docs/api/interfaces/RBACLogger.md +1 -1
- package/docs/api/interfaces/RBACPageAccessCheckParams.md +74 -0
- package/docs/api/interfaces/RBACPermissionCheckParams.md +74 -0
- package/docs/api/interfaces/RBACPermissionCheckResult.md +52 -0
- package/docs/api/interfaces/RBACPermissionsGetParams.md +63 -0
- package/docs/api/interfaces/RBACPermissionsGetResult.md +63 -0
- package/docs/api/interfaces/RBACResult.md +58 -0
- package/docs/api/interfaces/RBACRoleGrantParams.md +63 -0
- package/docs/api/interfaces/RBACRoleGrantResult.md +52 -0
- package/docs/api/interfaces/RBACRoleRevokeParams.md +63 -0
- package/docs/api/interfaces/RBACRoleRevokeResult.md +52 -0
- package/docs/api/interfaces/RBACRoleValidateParams.md +52 -0
- package/docs/api/interfaces/RBACRoleValidateResult.md +63 -0
- package/docs/api/interfaces/RBACRolesListParams.md +52 -0
- package/docs/api/interfaces/RBACRolesListResult.md +74 -0
- package/docs/api/interfaces/RBACSessionTrackParams.md +74 -0
- package/docs/api/interfaces/RBACSessionTrackResult.md +52 -0
- package/docs/api/interfaces/ResourcePermissions.md +1 -1
- package/docs/api/interfaces/RevokeEventAppRoleParams.md +1 -1
- package/docs/api/interfaces/RoleBasedRouterContextType.md +1 -1
- package/docs/api/interfaces/RoleBasedRouterProps.md +1 -1
- package/docs/api/interfaces/RoleManagementResult.md +1 -1
- package/docs/api/interfaces/RouteAccessRecord.md +1 -1
- package/docs/api/interfaces/RouteConfig.md +1 -1
- package/docs/api/interfaces/SecureDataContextType.md +1 -1
- package/docs/api/interfaces/SecureDataProviderProps.md +1 -1
- package/docs/api/interfaces/SessionRestorationLoaderProps.md +15 -2
- package/docs/api/interfaces/StorageConfig.md +1 -1
- package/docs/api/interfaces/StorageFileInfo.md +1 -1
- package/docs/api/interfaces/StorageFileMetadata.md +1 -1
- package/docs/api/interfaces/StorageListOptions.md +1 -1
- package/docs/api/interfaces/StorageListResult.md +1 -1
- package/docs/api/interfaces/StorageUploadOptions.md +1 -1
- package/docs/api/interfaces/StorageUploadResult.md +1 -1
- package/docs/api/interfaces/StorageUrlOptions.md +1 -1
- package/docs/api/interfaces/StyleImport.md +1 -1
- package/docs/api/interfaces/SwitchProps.md +1 -1
- package/docs/api/interfaces/TabsContentProps.md +1 -1
- package/docs/api/interfaces/TabsListProps.md +1 -1
- package/docs/api/interfaces/TabsProps.md +1 -1
- package/docs/api/interfaces/TabsTriggerProps.md +43 -2
- package/docs/api/interfaces/TextareaProps.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 +61 -61
- package/docs/api/interfaces/UnifiedAuthProviderProps.md +13 -13
- package/docs/api/interfaces/UseInactivityTrackerOptions.md +1 -1
- package/docs/api/interfaces/UseInactivityTrackerReturn.md +1 -1
- package/docs/api/interfaces/UsePublicEventLogoOptions.md +87 -0
- package/docs/api/interfaces/UsePublicEventLogoReturn.md +81 -0
- package/docs/api/interfaces/UsePublicEventOptions.md +3 -3
- package/docs/api/interfaces/UsePublicEventReturn.md +5 -5
- package/docs/api/interfaces/UsePublicFileDisplayOptions.md +2 -2
- package/docs/api/interfaces/UsePublicFileDisplayReturn.md +1 -1
- package/docs/api/interfaces/UsePublicRouteParamsReturn.md +1 -1
- package/docs/api/interfaces/UseResolvedScopeOptions.md +2 -2
- package/docs/api/interfaces/UseResolvedScopeReturn.md +1 -1
- package/docs/api/interfaces/UseResourcePermissionsOptions.md +1 -1
- package/docs/api/interfaces/UserEventAccess.md +1 -1
- package/docs/api/interfaces/UserMenuProps.md +4 -4
- package/docs/api/interfaces/UserProfile.md +7 -7
- package/docs/api/modules.md +484 -462
- package/docs/api-reference/components.md +186 -15
- package/docs/api-reference/deprecated.md +376 -0
- package/docs/api-reference/hooks.md +149 -19
- package/docs/api-reference/providers.md +61 -6
- package/docs/api-reference/rpc-functions.md +397 -0
- package/docs/api-reference/types.md +135 -78
- package/docs/api-reference/utilities.md +51 -380
- package/docs/architecture/README.md +49 -3
- package/docs/architecture/database-schema-requirements.md +40 -3
- package/docs/architecture/rbac-security-architecture.md +41 -4
- package/docs/architecture/services.md +127 -42
- package/docs/best-practices/README.md +51 -5
- package/docs/best-practices/accessibility.md +32 -3
- package/docs/best-practices/common-patterns.md +50 -3
- package/docs/best-practices/deployment.md +50 -4
- package/docs/best-practices/performance.md +50 -3
- package/docs/best-practices/security.md +94 -41
- package/docs/best-practices/testing.md +33 -4
- package/docs/core-concepts/authentication.md +5 -5
- package/docs/core-concepts/events.md +3 -3
- package/docs/core-concepts/organisations.md +3 -3
- package/docs/core-concepts/permissions.md +3 -3
- package/docs/core-concepts/rbac-system.md +5 -5
- package/docs/documentation-index.md +30 -8
- package/docs/getting-started/documentation-index.md +1 -1
- package/docs/getting-started/examples/README.md +7 -5
- package/docs/getting-started/examples/basic-auth-app.md +3 -0
- package/docs/getting-started/examples/full-featured-app.md +5 -3
- package/docs/getting-started/faq.md +6 -6
- package/docs/getting-started/installation-guide.md +192 -13
- package/docs/getting-started/local-development.md +303 -0
- package/docs/getting-started/quick-reference.md +3 -3
- package/docs/getting-started/quick-start.md +517 -0
- package/docs/implementation-guides/app-layout.md +45 -3
- package/docs/implementation-guides/authentication.md +66 -7
- package/docs/implementation-guides/component-styling.md +53 -3
- package/docs/implementation-guides/data-tables.md +76 -7
- package/docs/implementation-guides/datatable-filtering.md +1 -2
- package/docs/implementation-guides/datatable-rbac-usage.md +0 -1
- package/docs/implementation-guides/dynamic-colors.md +155 -4
- package/docs/implementation-guides/file-reference-system.md +72 -3
- package/docs/implementation-guides/file-upload-storage.md +72 -3
- package/docs/implementation-guides/forms.md +53 -3
- package/docs/implementation-guides/inactivity-tracking.md +53 -3
- package/docs/implementation-guides/large-datasets.md +1 -1
- package/docs/implementation-guides/navigation.md +55 -5
- package/docs/implementation-guides/organisation-security.md +72 -3
- package/docs/implementation-guides/performance.md +57 -1
- package/docs/implementation-guides/permission-enforcement.md +81 -8
- package/docs/implementation-guides/public-pages.md +560 -14
- package/docs/migration/MIGRATION_GUIDE.md +409 -50
- package/docs/migration/README.md +37 -3
- package/docs/migration/organisation-context-timing-fix.md +39 -4
- package/docs/migration/quick-migration-guide.md +41 -5
- package/docs/migration/rbac-migration.md +59 -3
- package/docs/migration/service-architecture.md +77 -14
- package/docs/rbac/README.md +79 -3
- package/docs/rbac/advanced-patterns.md +47 -3
- package/docs/rbac/api-reference.md +77 -8
- package/docs/rbac/event-based-apps.md +50 -5
- package/docs/rbac/examples/rbac-rls-integration-example.md +3 -3
- package/docs/rbac/examples.md +39 -3
- package/docs/rbac/getting-started.md +63 -4
- package/docs/rbac/quick-start.md +57 -5
- package/docs/rbac/rbac-rls-integration.md +68 -6
- package/docs/rbac/super-admin-guide.md +47 -3
- package/docs/rbac/troubleshooting.md +3 -3
- package/docs/security/README.md +68 -3
- package/docs/security/checklist.md +50 -3
- package/docs/standards/01-architecture-standard.md +39 -0
- package/docs/standards/02-api-and-rpc-standard.md +39 -0
- package/docs/standards/03-component-standard.md +32 -0
- package/docs/standards/04-code-style-standard.md +32 -0
- package/docs/standards/05-security-standard.md +30 -0
- package/docs/standards/06-testing-and-docs-standard.md +29 -0
- package/docs/standards/README.md +35 -0
- package/docs/styles/README.md +89 -8
- package/docs/testing/README.md +175 -24
- package/docs/troubleshooting/README.md +50 -3
- package/docs/troubleshooting/common-issues.md +271 -5
- package/docs/troubleshooting/debugging.md +54 -1
- package/docs/troubleshooting/migration.md +54 -1
- package/docs/troubleshooting/organisation-context-setup.md +29 -3
- package/docs/troubleshooting/styling-issues.md +246 -4
- package/{src/components/DataTable/examples → examples/DataTable}/GroupingAggregationExample.tsx +1 -1
- package/examples/{components 2/DataTable/HierarchicalActionsExample.tsx → DataTable/HierarchicalActionsExample.tsx} +7 -6
- package/examples/{components 2/DataTable/HierarchicalExample.tsx → DataTable/HierarchicalExample.tsx} +8 -6
- package/examples/{components 2/DataTable/PerformanceExample.tsx → DataTable/PerformanceExample.tsx} +2 -2
- package/examples/{components 2/DataTable/index.ts → DataTable/index.ts} +1 -0
- package/{src/components/Dialog/examples → examples/Dialog}/HtmlDialogExample.tsx +3 -3
- package/examples/{components 2/Dialog/ScrollableDialogExample.tsx → Dialog/ScrollableDialogExample.tsx} +1 -1
- package/{src/components/Dialog/examples → examples/Dialog}/SmartDialogExample.tsx +1 -1
- package/examples/{components 2/Dialog/index.ts → Dialog/index.ts} +0 -3
- package/examples/{features/public-pages → PublicPages}/CorrectPublicPageImplementation.tsx +52 -17
- package/examples/{features/public-pages → PublicPages}/PublicEventPage.tsx +65 -35
- package/examples/{features/public-pages → PublicPages}/PublicPageApp.tsx +52 -18
- package/examples/{features/public-pages → PublicPages}/PublicPageUsageExample.tsx +28 -15
- package/examples/README.md +81 -33
- package/examples/index.ts +14 -12
- package/examples/{RBAC → rbac}/CompleteRBACExample.tsx +1 -1
- package/examples/{features/rbac → rbac}/EventBasedApp.tsx +4 -4
- package/examples/{features/rbac → rbac}/PermissionExample.tsx +5 -3
- package/package.json +21 -27
- package/src/__tests__/helpers/test-utils.tsx +29 -3
- package/src/__tests__/rbac/PagePermissionGuard.test.tsx +7 -5
- package/src/components/Alert/Alert.test.tsx +2 -2
- package/src/components/Alert/Alert.tsx +4 -4
- package/src/components/Avatar/Avatar.test.tsx +17 -6
- package/src/components/Badge/Badge.test.tsx +1 -1
- package/src/components/Badge/Badge.tsx +2 -2
- package/src/components/Button/Button.test.tsx +2 -2
- package/src/components/Button/Button.tsx +11 -7
- package/src/components/Calendar/Calendar.test.tsx +41 -8
- package/src/components/Calendar/Calendar.tsx +39 -36
- package/src/components/Card/Card.tsx +51 -13
- package/src/components/Checkbox/Checkbox.test.tsx +36 -12
- package/src/components/DataTable/DataTable.test.tsx +1 -1
- package/src/components/DataTable/__tests__/DataTable.comprehensive.test.tsx +13 -7
- package/src/components/DataTable/__tests__/DataTable.default-state.test.tsx +14 -42
- package/src/components/DataTable/__tests__/DataTable.export.test.tsx +13 -10
- package/src/components/DataTable/__tests__/DataTable.grouping-aggregation.test.tsx +14 -11
- package/src/components/DataTable/__tests__/DataTable.hooks.test.tsx +4 -2
- package/src/components/DataTable/__tests__/DataTable.test.tsx +13 -7
- package/src/components/DataTable/__tests__/DataTableCore.test-setup.ts +13 -10
- package/src/components/DataTable/__tests__/DataTableCore.test.tsx +15 -11
- package/src/components/DataTable/__tests__/a11y.basic.test.tsx +12 -6
- package/src/components/DataTable/__tests__/keyboard.test.tsx +12 -6
- package/src/components/DataTable/__tests__/pagination.modes.test.tsx +10 -6
- package/src/components/DataTable/__tests__/test-utils/sharedTestUtils.tsx +1 -1
- package/src/components/DataTable/components/DataTableBody.tsx +10 -25
- package/src/components/DataTable/components/DataTableCore.tsx +1 -1
- package/src/components/DataTable/components/FilterRow.tsx +3 -1
- package/src/components/DataTable/components/ImportModal.tsx +1 -1
- package/src/components/DataTable/components/VirtualizedDataTable.tsx +9 -9
- package/src/components/DataTable/core/ColumnFactory.ts +6 -6
- package/src/components/DataTable/core/DataTableContext.tsx +14 -10
- package/src/components/DataTable/core/LocalDataAdapter.ts +2 -1
- package/src/components/DataTable/core/PluginRegistry.ts +3 -3
- package/src/components/DataTable/core/StateManager.ts +12 -11
- package/src/components/DataTable/core/__tests__/ActionManager.test.ts +104 -0
- package/src/components/DataTable/core/__tests__/DataManager.test.ts +101 -0
- package/src/components/DataTable/core/__tests__/LocalDataAdapter.test.ts +84 -0
- package/src/components/DataTable/core/__tests__/PluginRegistry.test.ts +102 -0
- package/src/components/DataTable/core/__tests__/StateManager.test.ts +104 -0
- package/src/components/DataTable/core/interfaces.ts +17 -17
- package/src/components/DataTable/hooks/__tests__/useDataTableConfiguration.test.ts +124 -0
- package/src/components/DataTable/hooks/__tests__/useDataTableDataPipeline.test.ts +117 -0
- package/src/components/DataTable/hooks/__tests__/useDataTablePermissions.test.ts +102 -0
- package/src/components/DataTable/hooks/__tests__/useEffectiveColumnOrder.test.ts +53 -0
- package/src/components/DataTable/hooks/useColumnOrderPersistence.ts +0 -2
- package/src/components/DataTable/hooks/useDataTablePermissions.ts +9 -8
- package/src/components/DataTable/types.ts +5 -5
- package/src/components/DataTable/utils/aggregationUtils.ts +4 -4
- package/src/components/DataTable/utils/columnUtils.ts +3 -2
- package/src/components/DataTable/utils/debugTools.ts +1 -1
- package/src/components/DataTable/utils/exportUtils.ts +6 -6
- package/src/components/DataTable/utils/hierarchicalSorting.ts +6 -6
- package/src/components/DataTable/utils/hierarchicalUtils.ts +0 -8
- package/src/components/DataTable/utils/index.ts +0 -1
- package/src/components/DataTable/utils/performanceUtils.ts +9 -4
- package/src/components/Dialog/Dialog.test.tsx +49 -27
- package/src/components/ErrorBoundary/ErrorBoundary.test.tsx +13 -8
- package/src/components/EventSelector/EventSelector.test.tsx +60 -12
- package/src/components/EventSelector/EventSelector.tsx +38 -15
- package/src/components/EventSelector/index.ts +2 -2
- package/src/components/FileDisplay/FileDisplay.test.tsx +143 -85
- package/src/components/FileDisplay/FileDisplay.tsx +1 -0
- package/src/components/FileUpload/FileUpload.test.tsx +532 -152
- package/src/components/FileUpload/FileUpload.tsx +43 -8
- package/src/components/Footer/Footer.test.tsx +19 -14
- package/src/components/Form/Form.test.tsx +96 -14
- package/src/components/Form/Form.tsx +210 -1
- package/src/components/Form/index.ts +3 -7
- package/src/components/Header/Header.test.tsx +24 -17
- package/src/components/Header/Header.tsx +3 -1
- package/src/components/InactivityWarningModal/InactivityWarningModal.tsx +2 -4
- package/src/components/Input/Input.test.tsx +61 -36
- package/src/components/Label/{__tests__/Label.test.tsx → Label.test.tsx} +2 -2
- package/src/components/Label/Label.tsx +2 -3
- package/src/components/LoadingSpinner/LoadingSpinner.test.tsx +6 -5
- package/src/components/LoadingSpinner/LoadingSpinner.tsx +6 -2
- package/src/components/LoginForm/LoginForm.test.tsx +14 -13
- package/src/components/LoginForm/LoginForm.tsx +1 -1
- package/src/components/LoginForm/index.ts +7 -0
- package/src/components/NavigationMenu/NavigationMenu.test.tsx +233 -20
- package/src/components/NavigationMenu/NavigationMenu.tsx +191 -55
- package/src/components/NavigationMenu/index.ts +1 -1
- package/src/components/OrganisationSelector/OrganisationSelector.test.tsx +20 -11
- package/src/components/OrganisationSelector/OrganisationSelector.tsx +1 -1
- package/src/components/PaceAppLayout/{__tests__/PaceAppLayout.integration.test.tsx → PaceAppLayout.integration.test.tsx} +272 -79
- package/src/components/PaceAppLayout/{__tests__/PaceAppLayout.performance.test.tsx → PaceAppLayout.performance.test.tsx} +155 -32
- package/src/components/PaceAppLayout/{__tests__/PaceAppLayout.security.test.tsx → PaceAppLayout.security.test.tsx} +211 -65
- package/src/components/PaceAppLayout/PaceAppLayout.test.tsx +498 -210
- package/src/components/PaceAppLayout/PaceAppLayout.tsx +63 -64
- package/src/components/PaceAppLayout/test-setup.tsx +192 -0
- package/src/components/PaceLoginPage/PaceLoginPage.test.tsx +193 -39
- package/src/components/{PasswordReset → PasswordChange}/PasswordChangeForm.test.tsx +2 -2
- package/src/components/{PasswordReset → PasswordChange}/PasswordChangeForm.tsx +10 -4
- package/src/components/PasswordChange/index.ts +2 -0
- package/src/components/Progress/Progress.test.tsx +11 -0
- package/src/components/Progress/Progress.tsx +1 -1
- package/src/components/Progress/index.ts +10 -0
- package/src/components/ProtectedRoute/ProtectedRoute.test.tsx +2 -1
- package/src/components/PublicLayout/PublicLayout.test.tsx +1210 -0
- package/src/components/PublicLayout/PublicPageLayout.tsx +190 -36
- package/src/components/PublicLayout/PublicPageProvider.tsx +8 -7
- package/src/components/PublicLayout/index.ts +10 -28
- package/src/components/Select/Select.test.tsx +7 -7
- package/src/components/Select/Select.tsx +277 -11
- package/src/components/Select/index.ts +1 -2
- package/src/components/SessionRestorationLoader/SessionRestorationLoader.test.tsx +232 -0
- package/src/components/SessionRestorationLoader/SessionRestorationLoader.tsx +40 -19
- package/src/components/Table/{__tests__/Table.test.tsx → Table.test.tsx} +94 -41
- package/src/components/Tabs/Tabs.test.tsx +10 -9
- package/src/components/Tabs/Tabs.tsx +61 -33
- package/src/components/Textarea/Textarea.test.tsx +31 -18
- package/src/components/Toast/Toast.tsx +2 -2
- package/src/components/Tooltip/Tooltip.test.tsx +1 -1
- package/src/components/UserMenu/UserMenu.test.tsx +7 -6
- package/src/components/UserMenu/UserMenu.tsx +2 -2
- package/src/components/index.ts +5 -4
- package/src/constants/performance.ts +19 -8
- package/src/hooks/__tests__/useAppConfig.unit.test.ts +21 -22
- package/src/hooks/__tests__/useEvents.unit.test.ts +5 -4
- package/src/hooks/__tests__/useOrganisationPermissions.unit.test.tsx +2 -2
- package/src/hooks/__tests__/usePermissionCache.simple.test.ts +17 -0
- package/src/hooks/__tests__/usePermissionCache.unit.test.ts +16 -11
- package/src/hooks/__tests__/usePublicEvent.simple.test.ts +1 -3
- package/src/hooks/__tests__/usePublicEvent.unit.test.ts +1 -3
- package/src/hooks/__tests__/useRBAC.unit.test.ts +24 -2
- package/src/hooks/index.ts +4 -0
- package/src/hooks/public/index.ts +2 -0
- package/src/hooks/public/usePublicEvent.ts +4 -6
- package/src/hooks/public/usePublicRouteParams.ts +1 -1
- package/src/hooks/services/useAuth.ts +2 -4
- package/src/hooks/services/useCurrentEvent.ts +1 -1
- package/src/hooks/useAppConfig.ts +1 -1
- package/src/hooks/useDataTablePerformance.ts +2 -2
- package/src/hooks/useEventTheme.ts +1 -1
- package/src/hooks/useEvents.ts +51 -10
- package/src/hooks/useOrganisationPermissions.test.ts +3 -3
- package/src/hooks/useOrganisationPermissions.ts +1 -1
- package/src/hooks/useOrganisationSecurity.ts +2 -2
- package/src/hooks/usePermissionCache.test.ts +9 -9
- package/src/hooks/usePermissionCache.ts +2 -2
- package/src/index.ts +19 -12
- package/src/providers/OrganisationProvider.tsx +73 -9
- package/src/providers/UnifiedAuthProvider.smoke.test.tsx +113 -13
- package/src/providers/__tests__/AuthProvider.test.tsx +2 -1
- package/src/providers/__tests__/EventProvider.test.tsx +24 -15
- package/src/providers/__tests__/OrganisationProvider.test.tsx +87 -36
- package/src/providers/__tests__/UnifiedAuthProvider.test.tsx +80 -24
- package/src/providers/index.ts +0 -3
- package/src/providers/services/AuthServiceProvider.tsx +2 -17
- package/src/providers/services/EventServiceProvider.tsx +11 -16
- package/src/providers/services/InactivityServiceProvider.tsx +9 -12
- package/src/providers/services/OrganisationServiceProvider.tsx +9 -12
- package/src/providers/services/UnifiedAuthProvider.tsx +85 -18
- package/src/providers/services/__tests__/AuthServiceProvider.integration.test.tsx +11 -4
- package/src/rbac/__tests__/scenarios.user-role.test.tsx +105 -21
- package/src/rbac/adapters.tsx +1 -1
- package/src/rbac/api.ts +20 -4
- package/src/rbac/audit-enhanced.ts +47 -2
- package/src/rbac/audit.ts +47 -2
- package/src/rbac/components/NavigationGuard.tsx +1 -1
- package/src/rbac/components/NavigationProvider.test.tsx +7 -6
- package/src/rbac/components/NavigationProvider.tsx +1 -1
- package/src/rbac/components/PagePermissionGuard.tsx +1 -1
- package/src/rbac/components/PagePermissionProvider.test.tsx +7 -6
- package/src/rbac/components/PagePermissionProvider.tsx +1 -1
- package/src/rbac/components/PermissionEnforcer.tsx +1 -1
- package/src/rbac/components/RoleBasedRouter.tsx +1 -1
- package/src/rbac/components/SecureDataProvider.test.tsx +7 -6
- package/src/rbac/components/SecureDataProvider.tsx +1 -1
- package/src/rbac/components/__tests__/EnhancedNavigationMenu.test.tsx +6 -6
- package/src/rbac/components/__tests__/NavigationGuard.test.tsx +11 -10
- package/src/rbac/components/__tests__/NavigationProvider.test.tsx +10 -11
- package/src/rbac/components/__tests__/PagePermissionGuard.race-condition.test.tsx +19 -15
- package/src/rbac/components/__tests__/PagePermissionGuard.test.tsx +13 -12
- package/src/rbac/components/__tests__/PagePermissionGuard.verification.test.tsx +19 -15
- package/src/rbac/components/__tests__/PagePermissionProvider.test.tsx +18 -18
- package/src/rbac/components/__tests__/PermissionEnforcer.test.tsx +11 -10
- package/src/rbac/components/__tests__/RoleBasedRouter.test.tsx +8 -7
- package/src/rbac/components/__tests__/SecureDataProvider.fixed.test.tsx +10 -11
- package/src/rbac/components/__tests__/SecureDataProvider.test.tsx +48 -19
- package/src/rbac/hooks/__tests__/useSecureSupabase.test.ts +476 -0
- package/src/rbac/hooks/index.ts +3 -0
- package/src/rbac/hooks/usePermissions.ts +31 -85
- package/src/rbac/hooks/useRBAC.test.ts +13 -1
- package/src/rbac/hooks/useRBAC.ts +13 -67
- package/src/rbac/hooks/useResolvedScope.ts +11 -0
- package/src/rbac/hooks/useSecureSupabase.ts +308 -0
- package/src/rbac/index.ts +3 -0
- package/src/rbac/secureClient.ts +53 -6
- package/src/rbac/security.ts +37 -1
- package/src/{types/rbac-functions.ts → rbac/types/functions.ts} +30 -30
- package/src/rbac/types.ts +3 -2
- package/src/services/AuthService.ts +33 -25
- package/src/services/EventService.ts +57 -31
- package/src/services/InactivityService.ts +33 -53
- package/src/services/OrganisationService.ts +36 -40
- package/src/services/__tests__/AuthService.restoreSession.test.ts +6 -2
- package/src/services/__tests__/EventService.test.ts +67 -33
- package/src/services/interfaces/IEventService.ts +1 -1
- package/src/styles/core.css +2 -2
- package/src/styles/index.ts +1 -5
- package/src/types/__tests__/guards.test.ts +1 -1
- package/src/types/__tests__/type-validation.test.ts +0 -1
- package/src/types/auth.ts +42 -2
- package/src/types/core.ts +251 -0
- package/src/types/database.ts +11 -496
- package/src/types/event.ts +102 -0
- package/src/types/file-reference.ts +6 -4
- package/src/types/guards.ts +2 -1
- package/src/types/index.ts +48 -14
- package/src/types/lodash.debounce.d.ts +15 -0
- package/src/types/organisation.ts +14 -10
- package/src/types/supabase.ts +15 -17
- package/src/utils/__tests__/secureErrors.unit.test.ts +1 -1
- package/src/utils/__tests__/validationUtils.unit.test.ts +0 -29
- package/src/utils/app/appNameResolver.ts +1 -1
- package/src/utils/dynamic/dynamicUtils.ts +3 -2
- package/src/utils/file-reference/index.ts +25 -6
- package/src/utils/security/secureErrors.ts +1 -1
- package/src/utils/validation/index.ts +6 -12
- package/src/utils/validation/validationUtils.ts +0 -13
- package/dist/UnifiedAuthProvider-BMJAP6Z7.js +0 -16
- package/dist/auth-DReDSLq9.d.ts +0 -16
- package/dist/chunk-56XJ3TU6.js +0 -11
- package/dist/chunk-56XJ3TU6.js.map +0 -1
- package/dist/chunk-6HLVGAZG.js.map +0 -1
- package/dist/chunk-7QCC6MCP.js +0 -288
- package/dist/chunk-BESYRHQM.js.map +0 -1
- package/dist/chunk-BJPBT3CU.js +0 -21
- package/dist/chunk-BJPBT3CU.js.map +0 -1
- package/dist/chunk-BVYWGZVV.js.map +0 -1
- package/dist/chunk-CPTUD43C.js.map +0 -1
- package/dist/chunk-CX5M4ZAG.js.map +0 -1
- package/dist/chunk-ERGKJX4D.js +0 -15
- package/dist/chunk-ERGKJX4D.js.map +0 -1
- package/dist/chunk-ERISIBYU.js.map +0 -1
- package/dist/chunk-GQA2LIAE.js.map +0 -1
- package/dist/chunk-JISYG63F.js +0 -70
- package/dist/chunk-JISYG63F.js.map +0 -1
- package/dist/chunk-MSHEVJXS.js +0 -27
- package/dist/chunk-MSHEVJXS.js.map +0 -1
- package/dist/chunk-N5YCCUG5.js.map +0 -1
- package/dist/chunk-ONI7Y733.js.map +0 -1
- package/dist/chunk-OWAG3GSU.js.map +0 -1
- package/dist/chunk-P6UUHOIF.js.map +0 -1
- package/dist/chunk-PKW27QVS.js +0 -61
- package/dist/chunk-PKW27QVS.js.map +0 -1
- package/dist/chunk-Q5QRDWKI.js.map +0 -1
- package/dist/chunk-S5OFRT4M.js.map +0 -1
- package/dist/chunk-SBVILCCA.js.map +0 -1
- package/dist/chunk-WM26XK7I.js +0 -2432
- package/dist/chunk-WM26XK7I.js.map +0 -1
- package/dist/chunk-XDNLUEXI.js +0 -138
- package/dist/chunk-XJ2HZOBU.js.map +0 -1
- package/dist/chunk-ZZ2SS7NI.js +0 -237
- package/dist/chunk-ZZ2SS7NI.js.map +0 -1
- package/dist/database-C6jy7EOu.d.ts +0 -500
- package/dist/organisation-D6qRDtbF.d.ts +0 -93
- package/dist/schema-DTDZQe2u.d.ts +0 -28
- package/dist/unified-DQ4VcT7H.d.ts +0 -198
- package/dist/useInactivityTracker-TO6ZOF35.js +0 -11
- package/dist/validation.d.ts +0 -47
- package/dist/validation.js +0 -24
- package/dist/validation.js.map +0 -1
- package/docs/DOCUMENTATION_AUDIT.md +0 -172
- package/docs/DOCUMENTATION_STANDARD.md +0 -137
- package/docs/api/classes/PublicErrorBoundary.md +0 -132
- package/docs/api/interfaces/EventLogoProps.md +0 -152
- package/docs/api/interfaces/PublicErrorBoundaryProps.md +0 -94
- package/docs/api/interfaces/PublicErrorBoundaryState.md +0 -68
- package/docs/api/interfaces/PublicLoadingSpinnerProps.md +0 -86
- package/docs/architecture/rpc-function-standards.md +0 -1106
- package/docs/getting-started/consuming-app-vite-config.md +0 -239
- package/docs/implementation-guides/event-theming-summary.md +0 -226
- package/docs/implementation-guides/public-pages-advanced.md +0 -1038
- package/docs/migration/v0.4.15-tailwind-scanning.md +0 -278
- package/docs/migration/v0.4.16-css-first-approach.md +0 -312
- package/docs/migration/v0.4.17-source-path-fix.md +0 -235
- package/docs/rbac/RBAC_EVENT_CONTEXT_LOADING.md +0 -222
- package/docs/rbac/RBAC_LOGIN_SAFETY_FIX.md +0 -95
- package/docs/rbac/RBAC_V0.5.147_FIX.md +0 -117
- package/docs/rbac/README-rbac-rls-integration.md +0 -374
- package/docs/styles/usage.md +0 -227
- package/docs/testing/visual-testing.md +0 -120
- package/docs/troubleshooting/DEBUG_NETWORK_ERROR.md +0 -152
- package/docs/troubleshooting/FIX_SUPABASE_CORS.md +0 -184
- package/docs/troubleshooting/cake-page-permission-guard-issue-summary.md +0 -193
- package/docs/troubleshooting/database-view-compatibility.md +0 -125
- package/docs/troubleshooting/react-hooks-issue-analysis.md +0 -172
- package/docs/troubleshooting/tailwind-content-scanning.md +0 -219
- package/examples/RBAC/EventBasedApp.tsx +0 -239
- package/examples/RBAC/PermissionExample.tsx +0 -151
- package/examples/STRUCTURE.md +0 -125
- package/examples/components 2/Dialog/BasicHtmlTest.tsx +0 -55
- package/examples/components 2/Dialog/DebugHtmlExample.tsx +0 -68
- package/examples/components 2/Dialog/HtmlDialogExample.tsx +0 -202
- package/examples/components 2/Dialog/SimpleHtmlTest.tsx +0 -61
- package/examples/components 2/Dialog/SmartDialogExample.tsx +0 -322
- package/examples/components 2/index.ts +0 -11
- package/examples/features/index.ts +0 -12
- package/examples/features/rbac/CompleteRBACExample.tsx +0 -324
- package/examples/features/rbac/index.ts +0 -13
- package/examples/public-pages/CorrectPublicPageImplementation.tsx +0 -301
- package/examples/public-pages/PublicEventPage.tsx +0 -274
- package/examples/public-pages/PublicPageApp.tsx +0 -308
- package/examples/public-pages/PublicPageUsageExample.tsx +0 -216
- package/examples/public-pages/index.ts +0 -14
- package/src/__tests__/TEST_STANDARD.md +0 -1008
- package/src/components/Checkbox/__mocks__/Checkbox.tsx +0 -2
- package/src/components/DataTable/examples/HierarchicalActionsExample.tsx +0 -421
- package/src/components/DataTable/examples/HierarchicalExample.tsx +0 -475
- package/src/components/DataTable/examples/InitialPageSizeExample.tsx +0 -177
- package/src/components/DataTable/examples/PerformanceExample.tsx +0 -506
- package/src/components/DataTable/examples/__tests__/HierarchicalActionsExample.test.tsx +0 -316
- package/src/components/DataTable/examples/__tests__/HierarchicalExample.test.tsx +0 -45
- package/src/components/DataTable/examples/__tests__/InitialPageSizeExample.test.tsx +0 -211
- package/src/components/DataTable/examples/__tests__/PerformanceExample.test.tsx +0 -126
- package/src/components/Dialog/README.md +0 -804
- package/src/components/Dialog/examples/BasicHtmlTest.tsx +0 -55
- package/src/components/Dialog/examples/DebugHtmlExample.tsx +0 -68
- package/src/components/Dialog/examples/ScrollableDialogExample.tsx +0 -290
- package/src/components/Dialog/examples/SimpleHtmlTest.tsx +0 -61
- package/src/components/Dialog/examples/__tests__/HtmlDialogExample.test.tsx +0 -71
- package/src/components/Dialog/examples/__tests__/SimpleHtmlTest.test.tsx +0 -122
- package/src/components/Dialog/examples/__tests__/SmartDialogExample.unit.test.tsx +0 -147
- package/src/components/Dialog/utils/__tests__/safeHtml.unit.test.ts +0 -611
- package/src/components/Dialog/utils/safeHtml.ts +0 -185
- package/src/components/EventSelector/types.ts +0 -79
- package/src/components/Form/FormErrorSummary.tsx +0 -113
- package/src/components/Form/FormField.tsx +0 -249
- package/src/components/Form/FormFieldset.tsx +0 -127
- package/src/components/Form/FormLiveRegion.tsx +0 -198
- package/src/components/Input/__mocks__/Input.tsx +0 -2
- package/src/components/NavigationMenu/types.ts +0 -85
- package/src/components/PaceAppLayout/__tests__/PaceAppLayout.accessibility.test.tsx +0 -326
- package/src/components/PaceAppLayout/__tests__/PaceAppLayout.unit.test.tsx +0 -1078
- package/src/components/PasswordReset/PasswordResetForm.test.tsx +0 -597
- package/src/components/PasswordReset/PasswordResetForm.tsx +0 -201
- package/src/components/PasswordReset/index.ts +0 -2
- package/src/components/ProtectedRoute/README.md +0 -164
- package/src/components/PublicLayout/EventLogo.tsx +0 -175
- package/src/components/PublicLayout/PublicErrorBoundary.tsx +0 -282
- package/src/components/PublicLayout/PublicLoadingSpinner.tsx +0 -216
- package/src/components/PublicLayout/PublicPageContextChecker.tsx +0 -131
- package/src/components/PublicLayout/PublicPageDebugger.tsx +0 -104
- package/src/components/PublicLayout/PublicPageDiagnostic.tsx +0 -162
- package/src/components/PublicLayout/PublicPageFooter.tsx +0 -124
- package/src/components/PublicLayout/PublicPageHeader.tsx +0 -209
- package/src/components/PublicLayout/__tests__/PublicErrorBoundary.test.tsx +0 -449
- package/src/components/PublicLayout/__tests__/PublicLoadingSpinner.test.tsx +0 -393
- package/src/components/PublicLayout/__tests__/PublicPageContextChecker.test.tsx +0 -192
- package/src/components/PublicLayout/__tests__/PublicPageFooter.test.tsx +0 -351
- package/src/components/PublicLayout/__tests__/PublicPageHeader.test.tsx +0 -402
- package/src/components/PublicLayout/__tests__/PublicPageLayout.test.tsx +0 -460
- package/src/components/PublicLayout/__tests__/PublicPageProvider.test.tsx +0 -313
- package/src/components/Select/hooks.ts +0 -289
- package/src/hooks/useCounter.test.ts +0 -131
- package/src/hooks/useDebounce.test.ts +0 -375
- package/src/providers/AuthProvider.tsx +0 -15
- package/src/providers/EventProvider.tsx +0 -16
- package/src/providers/InactivityProvider.tsx +0 -15
- package/src/providers/OrganisationProvider.context.test.tsx +0 -169
- package/src/providers/UnifiedAuthProvider.tsx +0 -15
- package/src/types/theme.ts +0 -6
- package/src/types/unified.ts +0 -265
- package/src/utils/appConfig.ts +0 -47
- package/src/utils/appIdResolver.test.ts +0 -499
- package/src/utils/appIdResolver.ts +0 -130
- package/src/utils/appNameResolver.simple.test.ts +0 -212
- package/src/utils/appNameResolver.test.ts +0 -121
- package/src/utils/appNameResolver.ts +0 -191
- package/src/utils/audit.ts +0 -127
- package/src/utils/auth-utils.ts +0 -96
- package/src/utils/bundleAnalysis.ts +0 -129
- package/src/utils/debugLogger.ts +0 -67
- package/src/utils/deviceFingerprint.ts +0 -215
- package/src/utils/dynamicUtils.ts +0 -105
- package/src/utils/file-reference.test.ts +0 -788
- package/src/utils/file-reference.ts +0 -519
- package/src/utils/formatDate.test.ts +0 -237
- package/src/utils/formatting.ts +0 -170
- package/src/utils/lazyLoad.tsx +0 -44
- package/src/utils/logger.ts +0 -179
- package/src/utils/organisationContext.test.ts +0 -322
- package/src/utils/organisationContext.ts +0 -153
- package/src/utils/performanceBenchmark.ts +0 -64
- package/src/utils/performanceBudgets.ts +0 -110
- package/src/utils/permissionTypes.ts +0 -37
- package/src/utils/permissionUtils.test.ts +0 -393
- package/src/utils/permissionUtils.ts +0 -34
- package/src/utils/sanitization.ts +0 -264
- package/src/utils/schemaUtils.ts +0 -37
- package/src/utils/secureDataAccess.test.ts +0 -711
- package/src/utils/secureDataAccess.ts +0 -377
- package/src/utils/secureErrors.ts +0 -79
- package/src/utils/security.ts +0 -156
- package/src/utils/securityMonitor.ts +0 -45
- package/src/utils/sessionTracking.ts +0 -126
- package/src/utils/validation.ts +0 -111
- package/src/utils/validationUtils.ts +0 -120
- package/src/validation/index.ts +0 -12
- /package/dist/{DataTable-4VSEJQ7D.js.map → DataTable-QAB34V6K.js.map} +0 -0
- /package/dist/{UnifiedAuthProvider-BMJAP6Z7.js.map → UnifiedAuthProvider-7F6T4B6K.js.map} +0 -0
- /package/dist/{api-45XYYO2A.js.map → api-ROMBCNKU.js.map} +0 -0
- /package/dist/{audit-64X3VJXB.js.map → audit-WRS3KJKI.js.map} +0 -0
- /package/dist/{chunk-PLDDJCW6.js.map → chunk-7D4SUZUM.js.map} +0 -0
- /package/dist/{useInactivityTracker-TO6ZOF35.js.map → chunk-KQCRWDSA.js.map} +0 -0
- /package/examples/{components 2/DataTable → DataTable}/InitialPageSizeExample.tsx +0 -0
- /package/examples/{features/public-pages → PublicPages}/index.ts +0 -0
- /package/examples/{RBAC → rbac}/index.ts +0 -0
|
@@ -1,151 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @file Permission System Example
|
|
3
|
-
* @package @jmruthers/pace-core
|
|
4
|
-
* @module Examples/RBAC/PermissionExample
|
|
5
|
-
* @since 0.4.0
|
|
6
|
-
*
|
|
7
|
-
* Example component demonstrating the hybrid permission system
|
|
8
|
-
* that supports both direct app access and event-based permissions.
|
|
9
|
-
*/
|
|
10
|
-
|
|
11
|
-
import React from 'react';
|
|
12
|
-
import { useUnifiedAuth } from '../../src/providers';
|
|
13
|
-
import { useAppConfig } from '../../src/hooks';
|
|
14
|
-
import { AccessLevel } from '../../src/types';
|
|
15
|
-
|
|
16
|
-
export function PermissionExample() {
|
|
17
|
-
const {
|
|
18
|
-
user,
|
|
19
|
-
isAuthenticated,
|
|
20
|
-
hasPermission,
|
|
21
|
-
hasAccessLevel,
|
|
22
|
-
accessLevel,
|
|
23
|
-
selectedEventId,
|
|
24
|
-
setSelectedEventId
|
|
25
|
-
} = useUnifiedAuth();
|
|
26
|
-
|
|
27
|
-
const { supportsDirectAccess, requiresEvent, isLoading, appName } = useAppConfig();
|
|
28
|
-
|
|
29
|
-
if (!isAuthenticated) {
|
|
30
|
-
return <div>Please log in to see permissions</div>;
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
if (isLoading) {
|
|
34
|
-
return <div>Loading app configuration...</div>;
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
return (
|
|
38
|
-
<div className="p-6 max-w-2xl">
|
|
39
|
-
<h2>Permission System Example</h2>
|
|
40
|
-
|
|
41
|
-
{/* App Configuration Info */}
|
|
42
|
-
<div className="mb-6 p-4 bg-sec-100 rounded-lg">
|
|
43
|
-
<h3>App Configuration: {appName}</h3>
|
|
44
|
-
<div className="space-y-1">
|
|
45
|
-
<div>Supports Direct Access: {supportsDirectAccess ? '✅' : '❌'}</div>
|
|
46
|
-
<div>Requires Event: {requiresEvent ? '✅' : '❌'}</div>
|
|
47
|
-
<div>Current Access Level: {accessLevel}</div>
|
|
48
|
-
</div>
|
|
49
|
-
</div>
|
|
50
|
-
|
|
51
|
-
{/* Event Selection */}
|
|
52
|
-
{requiresEvent && (
|
|
53
|
-
<div className="mb-6 p-4 border rounded-lg">
|
|
54
|
-
<h3>Event Context</h3>
|
|
55
|
-
<div className="space-y-2">
|
|
56
|
-
<div>Selected Event: {selectedEventId || 'None'}</div>
|
|
57
|
-
<div className="space-x-2">
|
|
58
|
-
<button
|
|
59
|
-
onClick={() => setSelectedEventId('event-123')}
|
|
60
|
-
className="px-3 py-1 bg-main-500 text-main-50 rounded"
|
|
61
|
-
>
|
|
62
|
-
Select Event 123
|
|
63
|
-
</button>
|
|
64
|
-
<button
|
|
65
|
-
onClick={() => setSelectedEventId(null)}
|
|
66
|
-
className="px-3 py-1 bg-sec-500 text-main-50 rounded"
|
|
67
|
-
>
|
|
68
|
-
Clear Event
|
|
69
|
-
</button>
|
|
70
|
-
</div>
|
|
71
|
-
</div>
|
|
72
|
-
</div>
|
|
73
|
-
)}
|
|
74
|
-
|
|
75
|
-
{/* Permission Examples */}
|
|
76
|
-
<div className="space-y-4">
|
|
77
|
-
<h3>Permission Examples</h3>
|
|
78
|
-
|
|
79
|
-
<div className="grid gap-4 md:grid-cols-2">
|
|
80
|
-
{/* Basic Permissions */}
|
|
81
|
-
<div className="p-4 border rounded-lg">
|
|
82
|
-
<h4>Basic Permissions</h4>
|
|
83
|
-
<div className="space-y-1 text-sm">
|
|
84
|
-
<div>Can Read: {hasPermission('app:read') ? '✅' : '❌'}</div>
|
|
85
|
-
<div>Can Write: {hasPermission('app:write') ? '✅' : '❌'}</div>
|
|
86
|
-
<div>Can Delete: {hasPermission('app:delete') ? '✅' : '❌'}</div>
|
|
87
|
-
</div>
|
|
88
|
-
</div>
|
|
89
|
-
|
|
90
|
-
{/* Access Level Checks */}
|
|
91
|
-
<div className="p-4 border rounded-lg">
|
|
92
|
-
<h4>Access Level Checks</h4>
|
|
93
|
-
<div className="space-y-1 text-sm">
|
|
94
|
-
<div>Is Editor+: {hasAccessLevel(AccessLevel.EDITOR) ? '✅' : '❌'}</div>
|
|
95
|
-
<div>Is Planner+: {hasAccessLevel(AccessLevel.PLANNER) ? '✅' : '❌'}</div>
|
|
96
|
-
<div>Is Admin: {hasAccessLevel(AccessLevel.ADMIN) ? '✅' : '❌'}</div>
|
|
97
|
-
</div>
|
|
98
|
-
</div>
|
|
99
|
-
</div>
|
|
100
|
-
|
|
101
|
-
{/* Conditional Rendering Examples */}
|
|
102
|
-
<div className="p-4 border rounded-lg">
|
|
103
|
-
<h4>Conditional UI Elements</h4>
|
|
104
|
-
<div className="space-y-2">
|
|
105
|
-
{hasPermission('app:read') && (
|
|
106
|
-
<div className="p-2 bg-main-100 text-main-800 rounded">
|
|
107
|
-
✅ You can see this because you have read permission
|
|
108
|
-
</div>
|
|
109
|
-
)}
|
|
110
|
-
|
|
111
|
-
{hasPermission('app:write') && (
|
|
112
|
-
<button className="px-4 py-2 bg-main-500 text-main-50 rounded">
|
|
113
|
-
Edit (Available with write permission)
|
|
114
|
-
</button>
|
|
115
|
-
)}
|
|
116
|
-
|
|
117
|
-
{hasAccessLevel(AccessLevel.ADMIN) && (
|
|
118
|
-
<div className="p-2 bg-acc-100 text-acc-800 rounded">
|
|
119
|
-
🔒 Admin-only content visible
|
|
120
|
-
</div>
|
|
121
|
-
)}
|
|
122
|
-
|
|
123
|
-
{!hasPermission('app:delete') && (
|
|
124
|
-
<div className="p-2 bg-acc-100 text-acc-800 rounded">
|
|
125
|
-
⚠️ Delete functionality not available for your access level
|
|
126
|
-
</div>
|
|
127
|
-
)}
|
|
128
|
-
</div>
|
|
129
|
-
</div>
|
|
130
|
-
|
|
131
|
-
{/* Status Summary */}
|
|
132
|
-
<div className="p-4 bg-main-50 rounded-lg">
|
|
133
|
-
<h4>Current Status</h4>
|
|
134
|
-
<div className="text-sm space-y-1">
|
|
135
|
-
<div>User: {user?.email}</div>
|
|
136
|
-
<div>App: {appName}</div>
|
|
137
|
-
<div>Event: {selectedEventId || 'Direct Access'}</div>
|
|
138
|
-
<div>
|
|
139
|
-
Permission Model: {
|
|
140
|
-
selectedEventId ? 'Event-based' :
|
|
141
|
-
supportsDirectAccess ? 'Direct Access' :
|
|
142
|
-
'No Access (requires event)'
|
|
143
|
-
}
|
|
144
|
-
</div>
|
|
145
|
-
</div>
|
|
146
|
-
</div>
|
|
147
|
-
</div>
|
|
148
|
-
</div>
|
|
149
|
-
);
|
|
150
|
-
}
|
|
151
|
-
|
package/examples/STRUCTURE.md
DELETED
|
@@ -1,125 +0,0 @@
|
|
|
1
|
-
# Examples Directory Structure
|
|
2
|
-
|
|
3
|
-
This document describes the organization of examples in the pace-core package.
|
|
4
|
-
|
|
5
|
-
## Overview
|
|
6
|
-
|
|
7
|
-
All examples are consolidated in the `/packages/core/examples/` directory, organized into two main categories:
|
|
8
|
-
|
|
9
|
-
1. **Features** (`features/`) - Cross-component workflow examples
|
|
10
|
-
2. **Components** (`components/`) - Component-specific examples
|
|
11
|
-
|
|
12
|
-
## Directory Structure
|
|
13
|
-
|
|
14
|
-
```
|
|
15
|
-
examples/
|
|
16
|
-
├── README.md # Main examples documentation
|
|
17
|
-
├── index.ts # Central export point
|
|
18
|
-
│
|
|
19
|
-
├── features/ # Feature-based examples (cross-component)
|
|
20
|
-
│ ├── index.ts
|
|
21
|
-
│ ├── rbac/ # RBAC examples
|
|
22
|
-
│ │ ├── index.ts
|
|
23
|
-
│ │ ├── EventBasedApp.tsx
|
|
24
|
-
│ │ ├── CompleteRBACExample.tsx
|
|
25
|
-
│ │ └── PermissionExample.tsx
|
|
26
|
-
│ │
|
|
27
|
-
│ └── public-pages/ # Public page workflow examples
|
|
28
|
-
│ ├── index.ts
|
|
29
|
-
│ ├── PublicPageUsageExample.tsx
|
|
30
|
-
│ ├── PublicEventPage.tsx
|
|
31
|
-
│ ├── PublicPageApp.tsx
|
|
32
|
-
│ └── CorrectPublicPageImplementation.tsx
|
|
33
|
-
│
|
|
34
|
-
└── components/ # Component-specific examples
|
|
35
|
-
├── index.ts
|
|
36
|
-
├── DataTable/
|
|
37
|
-
│ ├── index.ts
|
|
38
|
-
│ ├── HierarchicalExample.tsx
|
|
39
|
-
│ ├── HierarchicalActionsExample.tsx
|
|
40
|
-
│ ├── InitialPageSizeExample.tsx
|
|
41
|
-
│ └── PerformanceExample.tsx
|
|
42
|
-
│
|
|
43
|
-
└── Dialog/
|
|
44
|
-
├── index.ts
|
|
45
|
-
├── HtmlDialogExample.tsx
|
|
46
|
-
├── ScrollableDialogExample.tsx
|
|
47
|
-
├── SmartDialogExample.tsx
|
|
48
|
-
├── SimpleHtmlTest.tsx
|
|
49
|
-
├── BasicHtmlTest.tsx
|
|
50
|
-
└── DebugHtmlExample.tsx
|
|
51
|
-
```
|
|
52
|
-
|
|
53
|
-
## Import Paths
|
|
54
|
-
|
|
55
|
-
### Feature Examples
|
|
56
|
-
|
|
57
|
-
```tsx
|
|
58
|
-
// Main export (recommended)
|
|
59
|
-
import { PublicPageUsageExample, EventBasedApp } from '@jmruthers/pace-core/examples';
|
|
60
|
-
|
|
61
|
-
// Specific feature
|
|
62
|
-
import { PublicPageUsageExample } from '@jmruthers/pace-core/examples/features/public-pages';
|
|
63
|
-
import { EventBasedApp } from '@jmruthers/pace-core/examples/features/rbac';
|
|
64
|
-
```
|
|
65
|
-
|
|
66
|
-
### Component Examples
|
|
67
|
-
|
|
68
|
-
```tsx
|
|
69
|
-
// Specific component
|
|
70
|
-
import { HierarchicalExample } from '@jmruthers/pace-core/examples/components/DataTable';
|
|
71
|
-
import { HtmlDialogExample } from '@jmruthers/pace-core/examples/components/Dialog';
|
|
72
|
-
```
|
|
73
|
-
|
|
74
|
-
## Migration Notes
|
|
75
|
-
|
|
76
|
-
### Removed Locations
|
|
77
|
-
|
|
78
|
-
- ❌ `/packages/core/src/examples/` - Duplicates moved to `examples/features/public-pages/`
|
|
79
|
-
- ❌ `/packages/core/examples/RBAC/` - Moved to `examples/features/rbac/`
|
|
80
|
-
- ❌ `/packages/core/examples/public-pages/` - Moved to `examples/features/public-pages/`
|
|
81
|
-
- ❌ `/packages/core/examples/Components/`, `DataTable/`, `Dialog/`, `PublicPages/` - Empty folders removed
|
|
82
|
-
|
|
83
|
-
### Component Examples
|
|
84
|
-
|
|
85
|
-
Component examples were previously located in:
|
|
86
|
-
- `/packages/core/src/components/DataTable/examples/`
|
|
87
|
-
- `/packages/core/src/components/Dialog/examples/`
|
|
88
|
-
|
|
89
|
-
These have been moved to:
|
|
90
|
-
- `/packages/core/examples/components/DataTable/`
|
|
91
|
-
- `/packages/core/examples/components/Dialog/`
|
|
92
|
-
|
|
93
|
-
**Note:** Test files remain in the original component directories (`src/components/*/examples/__tests__/`) as they are part of the component's test suite.
|
|
94
|
-
|
|
95
|
-
## Adding New Examples
|
|
96
|
-
|
|
97
|
-
### Feature Examples
|
|
98
|
-
|
|
99
|
-
1. Create a new directory under `examples/features/`
|
|
100
|
-
2. Add your example files
|
|
101
|
-
3. Create an `index.ts` file exporting your examples
|
|
102
|
-
4. Update `examples/features/index.ts` to export from your new directory
|
|
103
|
-
5. Update `examples/index.ts` if needed
|
|
104
|
-
6. Update `package.json` exports if you want a dedicated import path
|
|
105
|
-
|
|
106
|
-
### Component Examples
|
|
107
|
-
|
|
108
|
-
1. Create a new directory under `examples/components/[ComponentName]/`
|
|
109
|
-
2. Add your example files
|
|
110
|
-
3. Create an `index.ts` file exporting your examples
|
|
111
|
-
4. Update `examples/components/index.ts` to export from your new directory
|
|
112
|
-
5. Update `package.json` exports if you want a dedicated import path
|
|
113
|
-
|
|
114
|
-
## Package Exports
|
|
115
|
-
|
|
116
|
-
The following export paths are available in `package.json`:
|
|
117
|
-
|
|
118
|
-
- `@jmruthers/pace-core/examples` - Main export (all examples)
|
|
119
|
-
- `@jmruthers/pace-core/examples/features` - All feature examples
|
|
120
|
-
- `@jmruthers/pace-core/examples/features/rbac` - RBAC examples
|
|
121
|
-
- `@jmruthers/pace-core/examples/features/public-pages` - Public pages examples
|
|
122
|
-
- `@jmruthers/pace-core/examples/components` - All component examples
|
|
123
|
-
- `@jmruthers/pace-core/examples/components/DataTable` - DataTable examples
|
|
124
|
-
- `@jmruthers/pace-core/examples/components/Dialog` - Dialog examples
|
|
125
|
-
|
|
@@ -1,55 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @file Basic HTML Test
|
|
3
|
-
* @package @jmruthers/pace-core
|
|
4
|
-
* @module Components/Dialog/Examples
|
|
5
|
-
* @since 0.4.37
|
|
6
|
-
*/
|
|
7
|
-
|
|
8
|
-
import React, { useState } from 'react';
|
|
9
|
-
import { Dialog, DialogContent, DialogHeader, DialogTitle, DialogBody, DialogFooter } from '../Dialog';
|
|
10
|
-
import { Button } from '../../Button';
|
|
11
|
-
|
|
12
|
-
export function BasicHtmlTest() {
|
|
13
|
-
const [isOpen, setIsOpen] = useState(false);
|
|
14
|
-
|
|
15
|
-
return (
|
|
16
|
-
<div className="p-4">
|
|
17
|
-
<h2 className="text-xl font-bold mb-4">Basic HTML Test</h2>
|
|
18
|
-
|
|
19
|
-
<div className="mb-4">
|
|
20
|
-
<h3 className="font-semibold mb-2">Test 1: Direct dangerouslySetInnerHTML</h3>
|
|
21
|
-
<div
|
|
22
|
-
dangerouslySetInnerHTML={{ __html: '<p>Hello <strong>world</strong>!</p>' }}
|
|
23
|
-
className="bg-main-50 p-2 rounded"
|
|
24
|
-
/>
|
|
25
|
-
</div>
|
|
26
|
-
|
|
27
|
-
<div className="mb-4">
|
|
28
|
-
<h3 className="font-semibold mb-2">Test 2: Dialog with HTML content</h3>
|
|
29
|
-
<Button onClick={() => setIsOpen(true)}>
|
|
30
|
-
Open Dialog
|
|
31
|
-
</Button>
|
|
32
|
-
</div>
|
|
33
|
-
|
|
34
|
-
<Dialog open={isOpen} onOpenChange={setIsOpen}>
|
|
35
|
-
<DialogContent size="md">
|
|
36
|
-
<DialogHeader>
|
|
37
|
-
<DialogTitle>HTML Test</DialogTitle>
|
|
38
|
-
</DialogHeader>
|
|
39
|
-
|
|
40
|
-
<DialogBody htmlContent="<p>Hello <strong>world</strong>!</p>" allowHtml={true}>
|
|
41
|
-
<div className="text-acc-500">
|
|
42
|
-
HTML content failed to render. This is fallback content.
|
|
43
|
-
</div>
|
|
44
|
-
</DialogBody>
|
|
45
|
-
|
|
46
|
-
<DialogFooter>
|
|
47
|
-
<Button variant="outline" onClick={() => setIsOpen(false)}>
|
|
48
|
-
Close
|
|
49
|
-
</Button>
|
|
50
|
-
</DialogFooter>
|
|
51
|
-
</DialogContent>
|
|
52
|
-
</Dialog>
|
|
53
|
-
</div>
|
|
54
|
-
);
|
|
55
|
-
}
|
|
@@ -1,68 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @file Debug HTML Content Example
|
|
3
|
-
* @package @jmruthers/pace-core
|
|
4
|
-
* @module Components/Dialog/Examples
|
|
5
|
-
* @since 0.4.37
|
|
6
|
-
*/
|
|
7
|
-
|
|
8
|
-
import React, { useState } from 'react';
|
|
9
|
-
import { Dialog, DialogContent, DialogHeader, DialogTitle, DialogBody, DialogFooter } from '../Dialog';
|
|
10
|
-
import { Button } from '../../Button';
|
|
11
|
-
|
|
12
|
-
export function DebugHtmlExample() {
|
|
13
|
-
const [isOpen, setIsOpen] = useState(false);
|
|
14
|
-
|
|
15
|
-
const testHtml = `
|
|
16
|
-
<p class="text-sm text-sec-600 mb-4">Upload a CSV file with dish or recipe data. The system will automatically detect the format based on your column headers.</p>
|
|
17
|
-
|
|
18
|
-
<div class="bg-main-50 p-4 rounded-lg">
|
|
19
|
-
<h3 class="font-semibold text-main-900 mb-2">Dish Format (3 columns)</h3>
|
|
20
|
-
<p class="text-sm text-main-800 mb-2">Perfect for importing basic dish information:</p>
|
|
21
|
-
<div class="space-y-1">
|
|
22
|
-
<p class="text-sm"><strong>Required:</strong> <code>dish_code</code>, <code>dish_name</code>, <code>mealtype_name</code></p>
|
|
23
|
-
<p class="text-sm"><strong>Optional:</strong> <code>dish_description</code></p>
|
|
24
|
-
</div>
|
|
25
|
-
</div>
|
|
26
|
-
`;
|
|
27
|
-
|
|
28
|
-
return (
|
|
29
|
-
<div className="p-4">
|
|
30
|
-
<h2 className="text-xl font-bold mb-4">Debug HTML Content</h2>
|
|
31
|
-
|
|
32
|
-
<div className="mb-4">
|
|
33
|
-
<h3 className="font-semibold mb-2">Raw HTML String:</h3>
|
|
34
|
-
<pre className="bg-sec-100 p-2 rounded text-xs overflow-auto">
|
|
35
|
-
{testHtml}
|
|
36
|
-
</pre>
|
|
37
|
-
</div>
|
|
38
|
-
|
|
39
|
-
<Button onClick={() => setIsOpen(true)}>
|
|
40
|
-
Open Dialog with HTML Content
|
|
41
|
-
</Button>
|
|
42
|
-
|
|
43
|
-
<Dialog open={isOpen} onOpenChange={setIsOpen}>
|
|
44
|
-
<DialogContent size="lg">
|
|
45
|
-
<DialogHeader>
|
|
46
|
-
<DialogTitle>Import Dishes or Recipes</DialogTitle>
|
|
47
|
-
</DialogHeader>
|
|
48
|
-
|
|
49
|
-
<DialogBody htmlContent={testHtml} allowHtml={true}>
|
|
50
|
-
{/* Fallback content if HTML rendering fails */}
|
|
51
|
-
<div className="text-acc-500">
|
|
52
|
-
HTML content failed to render. This is fallback content.
|
|
53
|
-
</div>
|
|
54
|
-
</DialogBody>
|
|
55
|
-
|
|
56
|
-
<DialogFooter>
|
|
57
|
-
<Button variant="outline" onClick={() => setIsOpen(false)}>
|
|
58
|
-
Cancel
|
|
59
|
-
</Button>
|
|
60
|
-
<Button onClick={() => setIsOpen(false)}>
|
|
61
|
-
Import Data
|
|
62
|
-
</Button>
|
|
63
|
-
</DialogFooter>
|
|
64
|
-
</DialogContent>
|
|
65
|
-
</Dialog>
|
|
66
|
-
</div>
|
|
67
|
-
);
|
|
68
|
-
}
|
|
@@ -1,202 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @file HTML Dialog Example
|
|
3
|
-
* @package @jmruthers/pace-core
|
|
4
|
-
* @module Components/Dialog/Examples
|
|
5
|
-
* @since 0.4.36
|
|
6
|
-
*
|
|
7
|
-
* Example demonstrating HTML content rendering in Dialog components.
|
|
8
|
-
* Shows how to use htmlContent prop for rich text formatting.
|
|
9
|
-
*/
|
|
10
|
-
|
|
11
|
-
import React from 'react';
|
|
12
|
-
import {
|
|
13
|
-
Dialog,
|
|
14
|
-
DialogTrigger,
|
|
15
|
-
DialogContent,
|
|
16
|
-
DialogHeader,
|
|
17
|
-
DialogTitle,
|
|
18
|
-
DialogDescription,
|
|
19
|
-
DialogBody,
|
|
20
|
-
DialogFooter
|
|
21
|
-
} from '../Dialog';
|
|
22
|
-
import { Button } from '../../Button';
|
|
23
|
-
|
|
24
|
-
export function HtmlDialogExample() {
|
|
25
|
-
const importInstructionsHtml = `
|
|
26
|
-
<h2>Import Dishes or Recipes</h2>
|
|
27
|
-
<p>Upload a CSV file with dish or recipe data. The system will automatically detect the format based on your column headers.</p>
|
|
28
|
-
|
|
29
|
-
<h3>DISH FORMAT (3 columns):</h3>
|
|
30
|
-
<ul>
|
|
31
|
-
<li><strong>Required:</strong> <code>dish_code</code>, <code>dish_name</code>, <code>mealtype_name</code></li>
|
|
32
|
-
<li><strong>Optional:</strong> <code>dish_description</code></li>
|
|
33
|
-
</ul>
|
|
34
|
-
|
|
35
|
-
<h4>Examples:</h4>
|
|
36
|
-
<ul>
|
|
37
|
-
<li><code>dish_code</code>: BBQ, PC, CTY</li>
|
|
38
|
-
<li><code>dish_name</code>: BBQ hamburgers and potato salad</li>
|
|
39
|
-
<li><code>mealtype_name</code>: Breakfast, Lunch, Dinner</li>
|
|
40
|
-
</ul>
|
|
41
|
-
|
|
42
|
-
<h3>RECIPE FORMAT (8 columns):</h3>
|
|
43
|
-
<ul>
|
|
44
|
-
<li><strong>Required:</strong> <code>dish_code</code>, <code>dish_name</code>, <code>mealtype_name</code>, <code>diettype_name</code>, <code>item_name</code>, <code>recipe_qtypp</code>, <code>recipe_uptake</code></li>
|
|
45
|
-
<li><strong>Optional:</strong> <code>item_brand</code></li>
|
|
46
|
-
</ul>
|
|
47
|
-
|
|
48
|
-
<h4>Examples:</h4>
|
|
49
|
-
<ul>
|
|
50
|
-
<li><code>dish_code</code>: BBQ</li>
|
|
51
|
-
<li><code>dish_name</code>: BBQ hamburgers and potato salad</li>
|
|
52
|
-
<li><code>mealtype_name</code>: Dinner</li>
|
|
53
|
-
<li><code>diettype_name</code>: Standard, Gluten Free, Vegan</li>
|
|
54
|
-
<li><code>item_name</code>: Lettuce iceberg shredded</li>
|
|
55
|
-
<li><code>item_brand</code>: Masterfoods, Coles</li>
|
|
56
|
-
<li><code>recipe_qtypp</code>: 35, 1.66</li>
|
|
57
|
-
<li><code>recipe_uptake</code>: 1.0, 0.75</li>
|
|
58
|
-
</ul>
|
|
59
|
-
|
|
60
|
-
<div style="background-color: #fef3c7; padding: 12px; border-radius: 6px; margin: 16px 0;">
|
|
61
|
-
<strong>⚠️ IMPORTANT:</strong> Recipe imports will replace all existing recipe data for dishes in the file.
|
|
62
|
-
</div>
|
|
63
|
-
`;
|
|
64
|
-
|
|
65
|
-
const welcomeMessageHtml = `
|
|
66
|
-
<h1>Welcome to <strong>PACE Core</strong>!</h1>
|
|
67
|
-
<p>This dialog demonstrates the new <em>HTML content rendering</em> feature.</p>
|
|
68
|
-
|
|
69
|
-
<h2>Features:</h2>
|
|
70
|
-
<ul>
|
|
71
|
-
<li>✅ <strong>Safe HTML rendering</strong> with automatic sanitization</li>
|
|
72
|
-
<li>✅ <strong>Rich text formatting</strong> (bold, italic, lists, etc.)</li>
|
|
73
|
-
<li>✅ <strong>Code highlighting</strong> with <code><code></code> tags</li>
|
|
74
|
-
<li>✅ <strong>Custom styling</strong> with inline styles</li>
|
|
75
|
-
<li>✅ <strong>Security first</strong> - dangerous content is automatically removed</li>
|
|
76
|
-
</ul>
|
|
77
|
-
|
|
78
|
-
<h3>Supported HTML Elements:</h3>
|
|
79
|
-
<p>You can use most common HTML elements including:</p>
|
|
80
|
-
<ul>
|
|
81
|
-
<li>Headings: <code>h1</code> through <code>h6</code></li>
|
|
82
|
-
<li>Text formatting: <strong>strong</strong>, <em>em</em>, <u>underline</u></li>
|
|
83
|
-
<li>Lists: <code>ul</code>, <code>ol</code>, <code>li</code></li>
|
|
84
|
-
<li>Code: <code>code</code>, <code>pre</code></li>
|
|
85
|
-
<li>Links: <a href="#" onclick="return false;">example link</a></li>
|
|
86
|
-
<li>Tables: <code>table</code>, <code>tr</code>, <code>td</code></li>
|
|
87
|
-
</ul>
|
|
88
|
-
`;
|
|
89
|
-
|
|
90
|
-
return (
|
|
91
|
-
<div className="space-y-4">
|
|
92
|
-
<h2 className="text-2xl font-bold">HTML Dialog Examples</h2>
|
|
93
|
-
|
|
94
|
-
{/* Example 1: Import Instructions Dialog */}
|
|
95
|
-
<Dialog>
|
|
96
|
-
<DialogTrigger asChild>
|
|
97
|
-
<Button variant="outline">Import Instructions</Button>
|
|
98
|
-
</DialogTrigger>
|
|
99
|
-
<DialogContent size="lg" enableScrolling={true} maxHeightPercent={80}>
|
|
100
|
-
<DialogHeader>
|
|
101
|
-
<DialogTitle htmlContent="Import Dishes or Recipes" />
|
|
102
|
-
<DialogDescription htmlContent="Follow the instructions below to upload your CSV file with the correct format." />
|
|
103
|
-
</DialogHeader>
|
|
104
|
-
<DialogBody
|
|
105
|
-
htmlContent={importInstructionsHtml}
|
|
106
|
-
allowHtml={true}
|
|
107
|
-
strictSanitization={true}
|
|
108
|
-
logWarnings={true}
|
|
109
|
-
/>
|
|
110
|
-
<DialogFooter>
|
|
111
|
-
<Button variant="outline">Cancel</Button>
|
|
112
|
-
<Button>Select CSV File</Button>
|
|
113
|
-
</DialogFooter>
|
|
114
|
-
</DialogContent>
|
|
115
|
-
</Dialog>
|
|
116
|
-
|
|
117
|
-
{/* Example 2: Welcome Message Dialog */}
|
|
118
|
-
<Dialog>
|
|
119
|
-
<DialogTrigger asChild>
|
|
120
|
-
<Button>Welcome Message</Button>
|
|
121
|
-
</DialogTrigger>
|
|
122
|
-
<DialogContent size="md">
|
|
123
|
-
<DialogHeader>
|
|
124
|
-
<DialogTitle htmlContent="🎉 New Feature Available!" />
|
|
125
|
-
<DialogDescription htmlContent="Learn about the new HTML content rendering capabilities." />
|
|
126
|
-
</DialogHeader>
|
|
127
|
-
<DialogBody
|
|
128
|
-
htmlContent={welcomeMessageHtml}
|
|
129
|
-
allowHtml={true}
|
|
130
|
-
/>
|
|
131
|
-
<DialogFooter>
|
|
132
|
-
<Button variant="outline">Learn More</Button>
|
|
133
|
-
<Button>Get Started</Button>
|
|
134
|
-
</DialogFooter>
|
|
135
|
-
</DialogContent>
|
|
136
|
-
</Dialog>
|
|
137
|
-
|
|
138
|
-
{/* Example 3: Mixed Content Dialog */}
|
|
139
|
-
<Dialog>
|
|
140
|
-
<DialogTrigger asChild>
|
|
141
|
-
<Button variant="secondary">Mixed Content</Button>
|
|
142
|
-
</DialogTrigger>
|
|
143
|
-
<DialogContent size="lg">
|
|
144
|
-
<DialogHeader>
|
|
145
|
-
<DialogTitle>Mixed Content Example</DialogTitle>
|
|
146
|
-
<DialogDescription htmlContent="This dialog shows <strong>HTML in the description</strong> and <em>React children</em> in the body." />
|
|
147
|
-
</DialogHeader>
|
|
148
|
-
<DialogBody>
|
|
149
|
-
<div className="space-y-4">
|
|
150
|
-
<h3 className="text-lg font-semibold">React Children Content</h3>
|
|
151
|
-
<p>This content is rendered using React children, not HTML strings.</p>
|
|
152
|
-
<div className="bg-main-50 p-4 rounded-lg">
|
|
153
|
-
<p className="text-main-800">
|
|
154
|
-
You can mix HTML content (via <code>htmlContent</code> prop)
|
|
155
|
-
with React children for maximum flexibility.
|
|
156
|
-
</p>
|
|
157
|
-
</div>
|
|
158
|
-
</div>
|
|
159
|
-
</DialogBody>
|
|
160
|
-
<DialogFooter>
|
|
161
|
-
<Button variant="outline">Cancel</Button>
|
|
162
|
-
<Button>Continue</Button>
|
|
163
|
-
</DialogFooter>
|
|
164
|
-
</DialogContent>
|
|
165
|
-
</Dialog>
|
|
166
|
-
|
|
167
|
-
{/* Example 4: Security Demo */}
|
|
168
|
-
<Dialog>
|
|
169
|
-
<DialogTrigger asChild>
|
|
170
|
-
<Button variant="destructive">Security Demo</Button>
|
|
171
|
-
</DialogTrigger>
|
|
172
|
-
<DialogContent size="md">
|
|
173
|
-
<DialogHeader>
|
|
174
|
-
<DialogTitle>Security Demonstration</DialogTitle>
|
|
175
|
-
<DialogDescription>This shows how dangerous HTML is automatically sanitized.</DialogDescription>
|
|
176
|
-
</DialogHeader>
|
|
177
|
-
<DialogBody
|
|
178
|
-
htmlContent={`
|
|
179
|
-
<h3>Safe Content</h3>
|
|
180
|
-
<p>This content is safe and will be rendered normally.</p>
|
|
181
|
-
|
|
182
|
-
<h3>Dangerous Content (Will Be Removed)</h3>
|
|
183
|
-
<p>The following dangerous elements will be automatically removed:</p>
|
|
184
|
-
<ul>
|
|
185
|
-
<li>Script tags: <script>alert('This will be removed')</script></li>
|
|
186
|
-
<li>Event handlers: <span onclick="alert('This will be removed')">Click me</span></li>
|
|
187
|
-
<li>JavaScript protocols: <a href="javascript:alert('This will be removed')">Dangerous link</a></li>
|
|
188
|
-
</ul>
|
|
189
|
-
|
|
190
|
-
<p><strong>Result:</strong> Only the safe content above will be displayed!</p>
|
|
191
|
-
`}
|
|
192
|
-
allowHtml={true}
|
|
193
|
-
logWarnings={true}
|
|
194
|
-
/>
|
|
195
|
-
<DialogFooter>
|
|
196
|
-
<Button>Got it!</Button>
|
|
197
|
-
</DialogFooter>
|
|
198
|
-
</DialogContent>
|
|
199
|
-
</Dialog>
|
|
200
|
-
</div>
|
|
201
|
-
);
|
|
202
|
-
}
|
|
@@ -1,61 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @file Simple HTML Test
|
|
3
|
-
* @package @jmruthers/pace-core
|
|
4
|
-
* @module Components/Dialog/Examples
|
|
5
|
-
* @since 0.4.37
|
|
6
|
-
*/
|
|
7
|
-
|
|
8
|
-
import React, { useState } from 'react';
|
|
9
|
-
import { Dialog, DialogContent, DialogHeader, DialogTitle, DialogBody, DialogFooter } from '../Dialog';
|
|
10
|
-
import { Button } from '../../Button';
|
|
11
|
-
|
|
12
|
-
export function SimpleHtmlTest() {
|
|
13
|
-
const [isOpen, setIsOpen] = useState(false);
|
|
14
|
-
|
|
15
|
-
// Very simple HTML test
|
|
16
|
-
const simpleHtml = '<p>Hello <strong>world</strong>!</p>';
|
|
17
|
-
|
|
18
|
-
return (
|
|
19
|
-
<div className="p-4">
|
|
20
|
-
<h2 className="text-xl font-bold mb-4">Simple HTML Test</h2>
|
|
21
|
-
|
|
22
|
-
<div className="mb-4">
|
|
23
|
-
<h3 className="font-semibold mb-2">Test HTML:</h3>
|
|
24
|
-
<pre className="bg-sec-100 p-2 rounded text-xs">
|
|
25
|
-
{simpleHtml}
|
|
26
|
-
</pre>
|
|
27
|
-
</div>
|
|
28
|
-
|
|
29
|
-
<div className="mb-4">
|
|
30
|
-
<h3 className="font-semibold mb-2">Expected Result:</h3>
|
|
31
|
-
<div className="bg-main-50 p-2 rounded">
|
|
32
|
-
Hello <strong>world</strong>!
|
|
33
|
-
</div>
|
|
34
|
-
</div>
|
|
35
|
-
|
|
36
|
-
<Button onClick={() => setIsOpen(true)}>
|
|
37
|
-
Test HTML Rendering
|
|
38
|
-
</Button>
|
|
39
|
-
|
|
40
|
-
<Dialog open={isOpen} onOpenChange={setIsOpen}>
|
|
41
|
-
<DialogContent size="md">
|
|
42
|
-
<DialogHeader>
|
|
43
|
-
<DialogTitle>HTML Test</DialogTitle>
|
|
44
|
-
</DialogHeader>
|
|
45
|
-
|
|
46
|
-
<DialogBody htmlContent={simpleHtml} allowHtml={true}>
|
|
47
|
-
<div className="text-acc-500">
|
|
48
|
-
HTML content failed to render. This is fallback content.
|
|
49
|
-
</div>
|
|
50
|
-
</DialogBody>
|
|
51
|
-
|
|
52
|
-
<DialogFooter>
|
|
53
|
-
<Button variant="outline" onClick={() => setIsOpen(false)}>
|
|
54
|
-
Close
|
|
55
|
-
</Button>
|
|
56
|
-
</DialogFooter>
|
|
57
|
-
</DialogContent>
|
|
58
|
-
</Dialog>
|
|
59
|
-
</div>
|
|
60
|
-
);
|
|
61
|
-
}
|