@cccteam/ccc-lib 0.0.10 → 0.0.12

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (96) hide show
  1. package/fesm2022/cccteam-ccc-lib-src-auth-authentication-guard.mjs +44 -0
  2. package/fesm2022/cccteam-ccc-lib-src-auth-authentication-guard.mjs.map +1 -0
  3. package/fesm2022/cccteam-ccc-lib-src-auth-authorization-guard.mjs +24 -0
  4. package/fesm2022/cccteam-ccc-lib-src-auth-authorization-guard.mjs.map +1 -0
  5. package/fesm2022/cccteam-ccc-lib-src-auth-forms.mjs +118 -0
  6. package/fesm2022/cccteam-ccc-lib-src-auth-forms.mjs.map +1 -0
  7. package/fesm2022/cccteam-ccc-lib-src-auth-has-permission.mjs +51 -0
  8. package/fesm2022/cccteam-ccc-lib-src-auth-has-permission.mjs.map +1 -0
  9. package/fesm2022/cccteam-ccc-lib-src-auth-service.mjs +56 -0
  10. package/fesm2022/cccteam-ccc-lib-src-auth-service.mjs.map +1 -0
  11. package/fesm2022/cccteam-ccc-lib-src-auth-state.mjs +109 -0
  12. package/fesm2022/cccteam-ccc-lib-src-auth-state.mjs.map +1 -0
  13. package/fesm2022/cccteam-ccc-lib-src-types.mjs +137 -0
  14. package/fesm2022/cccteam-ccc-lib-src-types.mjs.map +1 -0
  15. package/fesm2022/cccteam-ccc-lib-src-ui-alert.mjs +48 -0
  16. package/fesm2022/cccteam-ccc-lib-src-ui-alert.mjs.map +1 -0
  17. package/fesm2022/cccteam-ccc-lib-src-ui-core-state.mjs +100 -0
  18. package/fesm2022/cccteam-ccc-lib-src-ui-core-state.mjs.map +1 -0
  19. package/fesm2022/cccteam-ccc-lib-src-ui-interceptor.mjs +48 -0
  20. package/fesm2022/cccteam-ccc-lib-src-ui-interceptor.mjs.map +1 -0
  21. package/fesm2022/cccteam-ccc-lib-src-ui-notification-service.mjs +57 -0
  22. package/fesm2022/cccteam-ccc-lib-src-ui-notification-service.mjs.map +1 -0
  23. package/{esm2022/lib/ui/components/sidenav/sidenav.component.mjs → fesm2022/cccteam-ccc-lib-src-ui-sidenav.mjs} +20 -13
  24. package/fesm2022/cccteam-ccc-lib-src-ui-sidenav.mjs.map +1 -0
  25. package/fesm2022/cccteam-ccc-lib-src-util-request-options.mjs +19 -0
  26. package/fesm2022/cccteam-ccc-lib-src-util-request-options.mjs.map +1 -0
  27. package/fesm2022/cccteam-ccc-lib.mjs +13 -729
  28. package/fesm2022/cccteam-ccc-lib.mjs.map +1 -1
  29. package/package.json +55 -5
  30. package/public-api.d.ts +13 -19
  31. package/src/auth-authentication-guard/index.d.ts +5 -0
  32. package/src/auth-authentication-guard/public-api.d.ts +1 -0
  33. package/src/auth-authorization-guard/index.d.ts +5 -0
  34. package/src/auth-authorization-guard/public-api.d.ts +1 -0
  35. package/{lib/auth/forms → src/auth-forms}/ccc-field/ccc-field.component.d.ts +1 -1
  36. package/src/auth-forms/index.d.ts +5 -0
  37. package/src/auth-forms/public-api.d.ts +2 -0
  38. package/{lib/auth/directives → src/auth-has-permission}/has-permission.directive.d.ts +1 -1
  39. package/src/auth-has-permission/index.d.ts +5 -0
  40. package/src/auth-has-permission/public-api.d.ts +1 -0
  41. package/{lib/auth/services → src/auth-service}/auth.service.d.ts +1 -1
  42. package/src/auth-service/index.d.ts +5 -0
  43. package/src/auth-service/public-api.d.ts +1 -0
  44. package/{lib/auth/state → src/auth-state}/auth.state.d.ts +1 -2
  45. package/src/auth-state/index.d.ts +5 -0
  46. package/src/auth-state/public-api.d.ts +1 -0
  47. package/{lib/auth/state → src/types}/auth.actions.d.ts +1 -1
  48. package/{lib/ui/state → src/types}/core.actions.d.ts +1 -1
  49. package/src/types/index.d.ts +5 -0
  50. package/src/types/public-api.d.ts +6 -0
  51. package/{lib/types/base → src/types}/tokens.d.ts +1 -1
  52. package/{lib/ui/components/alert → src/ui-alert}/alert.component.d.ts +2 -2
  53. package/src/ui-alert/index.d.ts +5 -0
  54. package/src/ui-alert/public-api.d.ts +1 -0
  55. package/{lib/ui/state → src/ui-core-state}/core.state.d.ts +1 -2
  56. package/src/ui-core-state/index.d.ts +5 -0
  57. package/src/ui-core-state/public-api.d.ts +1 -0
  58. package/src/ui-interceptor/index.d.ts +5 -0
  59. package/src/ui-interceptor/public-api.d.ts +1 -0
  60. package/src/ui-notification-service/index.d.ts +5 -0
  61. package/{lib/ui/services → src/ui-notification-service}/notification.service.d.ts +1 -1
  62. package/src/ui-notification-service/public-api.d.ts +1 -0
  63. package/src/ui-sidenav/index.d.ts +5 -0
  64. package/src/ui-sidenav/public-api.d.ts +1 -0
  65. package/{lib/ui/components/sidenav → src/ui-sidenav}/sidenav.component.d.ts +1 -1
  66. package/src/util-request-options/index.d.ts +5 -0
  67. package/src/util-request-options/public-api.d.ts +1 -0
  68. package/cccteam-ccc-lib-0.0.10.tgz +0 -0
  69. package/esm2022/cccteam-ccc-lib.mjs +0 -5
  70. package/esm2022/lib/auth/directives/has-permission.directive.mjs +0 -44
  71. package/esm2022/lib/auth/forms/ccc-field/ccc-field.component.mjs +0 -77
  72. package/esm2022/lib/auth/forms/form-helpers.mjs +0 -34
  73. package/esm2022/lib/auth/guards/authentication.guard.mjs +0 -38
  74. package/esm2022/lib/auth/guards/authorization.guard.mjs +0 -17
  75. package/esm2022/lib/auth/services/auth.service.mjs +0 -49
  76. package/esm2022/lib/auth/services/request-options.mjs +0 -12
  77. package/esm2022/lib/auth/state/auth.actions.mjs +0 -64
  78. package/esm2022/lib/auth/state/auth.state.mjs +0 -105
  79. package/esm2022/lib/types/base/tokens.mjs +0 -7
  80. package/esm2022/lib/types/notification-message.mjs +0 -7
  81. package/esm2022/lib/types/permissions.mjs +0 -3
  82. package/esm2022/lib/types/session-info.mjs +0 -2
  83. package/esm2022/lib/ui/components/alert/alert.component.mjs +0 -41
  84. package/esm2022/lib/ui/interceptor/api.interceptor.mjs +0 -43
  85. package/esm2022/lib/ui/services/notification.service.mjs +0 -50
  86. package/esm2022/lib/ui/state/core.actions.mjs +0 -49
  87. package/esm2022/lib/ui/state/core.state.mjs +0 -95
  88. package/esm2022/public-api.mjs +0 -34
  89. /package/{lib/auth/guards → src/auth-authentication-guard}/authentication.guard.d.ts +0 -0
  90. /package/{lib/auth/guards → src/auth-authorization-guard}/authorization.guard.d.ts +0 -0
  91. /package/{lib/auth/forms → src/auth-forms}/form-helpers.d.ts +0 -0
  92. /package/{lib → src}/types/notification-message.d.ts +0 -0
  93. /package/{lib → src}/types/permissions.d.ts +0 -0
  94. /package/{lib → src}/types/session-info.d.ts +0 -0
  95. /package/{lib/ui/interceptor → src/ui-interceptor}/api.interceptor.d.ts +0 -0
  96. /package/{lib/auth/services → src/util-request-options}/request-options.d.ts +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"cccteam-ccc-lib.mjs","sources":["../../../projects/ccc-lib/src/lib/types/base/tokens.ts","../../../projects/ccc-lib/src/lib/ui/state/core.actions.ts","../../../projects/ccc-lib/src/lib/auth/services/request-options.ts","../../../projects/ccc-lib/src/lib/auth/services/auth.service.ts","../../../projects/ccc-lib/src/lib/auth/state/auth.actions.ts","../../../projects/ccc-lib/src/lib/auth/state/auth.state.ts","../../../projects/ccc-lib/src/lib/auth/directives/has-permission.directive.ts","../../../projects/ccc-lib/src/lib/types/permissions.ts","../../../projects/ccc-lib/src/lib/auth/forms/ccc-field/ccc-field.component.ts","../../../projects/ccc-lib/src/lib/auth/forms/form-helpers.ts","../../../projects/ccc-lib/src/lib/auth/guards/authentication.guard.ts","../../../projects/ccc-lib/src/lib/auth/guards/authorization.guard.ts","../../../projects/ccc-lib/src/lib/types/notification-message.ts","../../../projects/ccc-lib/src/lib/ui/services/notification.service.ts","../../../projects/ccc-lib/src/lib/ui/components/alert/alert.component.ts","../../../projects/ccc-lib/src/lib/ui/components/alert/alert.component.html","../../../projects/ccc-lib/src/lib/ui/state/core.state.ts","../../../projects/ccc-lib/src/lib/ui/components/sidenav/sidenav.component.ts","../../../projects/ccc-lib/src/lib/ui/components/sidenav/sidenav.component.html","../../../projects/ccc-lib/src/lib/ui/interceptor/api.interceptor.ts","../../../projects/ccc-lib/src/public-api.ts","../../../projects/ccc-lib/src/cccteam-ccc-lib.ts"],"sourcesContent":["import { InjectionToken } from '@angular/core';\nimport { Domain, Permission, Resource } from '../permissions';\n\nexport const BASE_URL = new InjectionToken<string>('BASE_URL');\nexport const API_URL = new InjectionToken<string>('API_URL');\nexport const PERMISSION_REQUIRED = new InjectionToken<(resource: Resource, permission: Permission) => boolean>(\n 'PERMISSION_REQUIRED',\n);\n\nexport const AVAILABLE_PERMISSIONS = new InjectionToken<{\n Create: Permission;\n Delete: Permission;\n List: Permission;\n Read: Permission;\n Update: Permission;\n}>('AVAILABLE_PERMISSIONS');\nexport const AVAILABLE_DOMAINS = new InjectionToken<Record<string, Domain>[]>('AVAILABLE_DOMAINS');\n","/* eslint-disable @typescript-eslint/no-namespace */\n// no-namespace rule is disabled because action hygiene prevents import pollution\n\nimport { CreateNotificationMessage } from '../../types/notification-message';\n\nexport namespace ApiInterceptorAction {\n export class BeginActivity {\n static readonly type = '[ApiInterceptor] Add Loading Activity';\n constructor(public process: string) {}\n }\n export class EndActivity {\n static readonly type = '[ApiInterceptor] Remove Loading Activity';\n constructor(public process: string) {}\n }\n export class PublishError {\n static readonly type = '[ApiInterceptor] Publish Error';\n constructor(public message: CreateNotificationMessage) {}\n }\n export class SetRedirectUrl {\n static readonly type = '[ApiInterceptor] Set Redirect Url';\n constructor(public redirectUrl: string) {}\n }\n}\n\nexport namespace HeaderAction {\n export class ToggleSidenav {\n static readonly type = '[Header] Toggle Sidenav';\n }\n\n export class Logout {\n static readonly type = '[Header] User Logout';\n }\n}\n","import { HttpContext, HttpContextToken } from '@angular/common/http';\n\nexport interface CustomHttpRequestOptions {\n suppressGlobalError: boolean;\n}\n\nexport const CUSTOM_HTTP_REQUEST_OPTIONS = new HttpContextToken<CustomHttpRequestOptions>(() => ({\n suppressGlobalError: false,\n}));\n\nexport function errorOptions(suppressGlobalError: boolean | undefined): { context: HttpContext } {\n return {\n context: new HttpContext().set(CUSTOM_HTTP_REQUEST_OPTIONS, {\n suppressGlobalError: suppressGlobalError ?? false,\n }),\n };\n}\n","import { HttpClient } from '@angular/common/http';\nimport { Inject, Injectable } from '@angular/core';\nimport { map, Observable } from 'rxjs';\nimport { API_URL } from '../../types/base/tokens';\nimport { SessionInfo } from '../../types/session-info';\nimport { errorOptions } from './request-options';\n\nconst routes = {\n login: (rootUrl: string): string => `${rootUrl}/user/login`,\n session: (rootUrl: string): string => `${rootUrl}/user/session`,\n};\n\n@Injectable({\n providedIn: 'root',\n})\nexport class AuthService {\n constructor(\n private http: HttpClient,\n @Inject(API_URL) private apiUrl: string,\n ) {}\n\n /**\n * Logs a user out.\n *\n * @returns Observable with a boolean indicating whether they were logged out.\n */\n logout(): Observable<boolean> {\n return this.http.delete(routes.session(this.apiUrl), errorOptions(false)).pipe(map(() => true));\n }\n\n /**\n * Checks a user's session with the server.\n *\n * @returns Observable with the user session info\n */\n checkUserSession(): Observable<SessionInfo | null> {\n return this.http.get<SessionInfo>(routes.session(this.apiUrl), errorOptions(false));\n }\n\n loginRoute(): string {\n return routes.login(this.apiUrl);\n }\n}\n","/* eslint-disable @typescript-eslint/no-namespace */\n// no-namespace rule is disabled because action hygiene prevents import pollution\n\nimport { CreateNotificationMessage } from '../../types/notification-message';\n\nexport namespace AuthenticationGuardAction {\n export class SetRedirectUrl {\n static readonly type = '[AuthenticationGuard] Set Redirect Url And Navigate To Login Page';\n constructor(public redirectUrl: string) {}\n }\n\n export class CheckUserSession {\n static readonly type = '[AuthenticationGuard] Check User Session';\n }\n}\n\nexport namespace LoginAction {\n export class Logout {\n static readonly type = '[Login] Auto Logout';\n }\n\n export class SetRedirectUrl {\n static readonly type = '[Login] Set Redirect Url';\n constructor(public redirectUrl: string) {}\n }\n\n export class PublishError {\n static readonly type = '[Login] Publish Error';\n constructor(public message: CreateNotificationMessage) {}\n }\n}\n\nexport namespace AppAction {\n export class CheckUserSession {\n static readonly type = '[App] Check User Session';\n }\n\n export class SetRedirectUrl {\n static readonly type = '[App] Set Redirect Url';\n constructor(public redirectUrl: string) {}\n }\n\n export class SetNavIdentifier {\n static readonly type = '[App] Set Nav Identifier';\n constructor(public identifier: string) {}\n }\n}\n","import { inject, Injectable } from '@angular/core';\nimport { Action, Selector, State, StateContext } from '@ngxs/store';\nimport { patch } from '@ngxs/store/operators';\nimport { cloneDeep } from 'lodash-es';\nimport { Observable, tap } from 'rxjs';\nimport { PERMISSION_REQUIRED } from '../../types/base/tokens';\nimport { Permission, PermissionScope, Resource } from '../../types/permissions';\nimport { SessionInfo } from '../../types/session-info';\nimport { ApiInterceptorAction } from '../../ui/state/core.actions';\nimport { AuthService } from '../services/auth.service';\nimport { AppAction, AuthenticationGuardAction, LoginAction } from './auth.actions';\n\nexport interface AuthStateModel {\n authenticated: boolean;\n redirectUrl: string;\n sessionInfo: SessionInfo | null;\n}\n\nexport const initState: AuthStateModel = {\n authenticated: false,\n redirectUrl: '',\n sessionInfo: null,\n};\n\n@State<AuthStateModel>({\n name: 'authState',\n defaults: initState,\n})\n@Injectable()\nexport class AuthState {\n private authService = inject(AuthService);\n private static permissionFn: (resource: Resource, permission: Permission) => boolean;\n\n constructor() {\n AuthState.initializePermissionFn();\n }\n\n private static initializePermissionFn(): void {\n if (!AuthState.permissionFn) {\n AuthState.permissionFn = inject(PERMISSION_REQUIRED);\n }\n }\n\n @Selector()\n static hasPermission(state: AuthStateModel): (scope?: PermissionScope) => boolean {\n return (scope?: PermissionScope) => {\n if (!scope) return true;\n const resourcePermissions = state?.sessionInfo?.permissions?.[scope.domain]?.[scope.resource];\n return Array.isArray(resourcePermissions) && resourcePermissions.includes(scope.permission);\n };\n }\n\n static requiresPermission(resource: Resource, permission: Permission): boolean {\n if (!AuthState.permissionFn) {\n throw new Error(\n `AuthState has not been initialized. Ensure AuthState is provided in your module or instantiated at least once.`,\n );\n }\n return AuthState.permissionFn(resource, permission);\n }\n\n @Selector()\n static isAuthenticated(state: AuthStateModel): boolean {\n return state?.authenticated;\n }\n\n @Selector()\n static redirectUrl(state: AuthStateModel): string {\n return state?.redirectUrl;\n }\n\n @Action([AppAction.CheckUserSession, AuthenticationGuardAction.CheckUserSession])\n checkUserSession(ctx: StateContext<AuthStateModel>): Observable<SessionInfo | null> {\n return this.authService.checkUserSession().pipe(\n tap((result) =>\n ctx.setState(\n patch({\n authenticated: !!result?.authenticated,\n sessionInfo: result,\n }),\n ),\n ),\n );\n }\n\n @Action([LoginAction.Logout])\n logout(ctx: StateContext<AuthStateModel>): Observable<boolean> {\n const localStateCopy = cloneDeep(initState);\n localStateCopy.redirectUrl = ctx.getState().redirectUrl;\n return this.authService.logout().pipe(\n tap(() => {\n ctx.setState(localStateCopy);\n }),\n );\n }\n\n @Action([\n AppAction.SetRedirectUrl,\n LoginAction.SetRedirectUrl,\n AuthenticationGuardAction.SetRedirectUrl,\n ApiInterceptorAction.SetRedirectUrl,\n ])\n setRedirectUrl(ctx: StateContext<AuthStateModel>, action: { redirectUrl: string }): AuthStateModel {\n ctx.setState(\n patch({\n redirectUrl: action.redirectUrl,\n }),\n );\n return ctx.getState();\n }\n}\n","import { Directive, Input, TemplateRef, ViewContainerRef, inject } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { Store } from '@ngxs/store';\nimport { Subject, catchError, combineLatest, map, of } from 'rxjs';\nimport { PermissionScope } from '../../types/permissions';\nimport { AuthState } from '../state/auth.state';\n\n@Directive({\n selector: '[cccHasPermission]',\n standalone: true,\n})\nexport class HasPermissionDirective {\n private templateRef = inject(TemplateRef<unknown>);\n private viewContainer = inject(ViewContainerRef);\n private store = inject(Store);\n\n private scope = new Subject<PermissionScope>();\n\n @Input()\n set cccHasPermission(scope: PermissionScope) {\n this.scope.next(scope);\n }\n\n constructor() {\n combineLatest({\n permissionFn: this.store.select(AuthState.hasPermission),\n scope: this.scope.asObservable(),\n })\n .pipe(\n takeUntilDestroyed(),\n map(({ permissionFn, scope }) => (scope !== undefined ? permissionFn(scope) : true)),\n catchError(() => of(false)),\n )\n .subscribe((result) => {\n if (result) {\n if (!this.viewContainer.get(0)) {\n this.viewContainer.createEmbeddedView(this.templateRef);\n }\n } else {\n this.viewContainer.clear();\n }\n });\n }\n}\n","type Brand<K, T> = K & { __brand: T };\n\nexport type Permission = Brand<string, 'Permission'>;\nexport type Resource = Brand<string, 'Resource'>;\nexport type Domain = Brand<string, 'Domain'>;\nexport type DomainPermissions = Record<Domain, Record<Resource, Record<Permission, Permissions>>>;\n\nexport interface PermissionScope {\n resource: Resource;\n permission: Permission;\n domain: Domain;\n}\n\nexport const ReadPermission = 'Read' as Permission;\nexport const UpdatePermission = 'Update' as Permission;\n","import { Component, computed, inject, input, OnInit, signal, Signal } from '@angular/core';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatInputModule } from '@angular/material/input';\nimport { Store } from '@ngxs/store';\nimport { Domain, ReadPermission, Resource, UpdatePermission } from '../../../types/permissions';\nimport { AuthState } from '../../state/auth.state';\n\nexport enum InputMode {\n Read = 'read',\n Edit = 'edit',\n}\n\n@Component({\n selector: 'ccc-input-field',\n standalone: true,\n imports: [MatFormFieldModule, MatInputModule],\n template: `\n <mat-form-field [class]=\"className()\">\n <mat-label>{{ name() }}</mat-label>\n <input matInput [disabled]=\"mode() === inputMode.Edit && canEdit()\" [value]=\"value()\" />\n </mat-form-field>\n `,\n styleUrl: './ccc-field.component.scss',\n})\nexport class CccInputFieldComponent implements OnInit {\n store = inject(Store);\n className = input();\n mode = input.required<InputMode>();\n resource = input.required<Resource>();\n domain = input.required<Domain>();\n value = input.required();\n name = input.required<string>();\n\n inputMode = InputMode;\n\n canEdit: Signal<boolean> = signal(false);\n canEditSelector = false;\n\n canRead: Signal<boolean> = signal(false);\n canReadSelector = false;\n\n ngOnInit(): void {\n this.canEditSelector = this.store.selectSnapshot(AuthState.hasPermission)({\n resource: this.resource(),\n permission: ReadPermission,\n domain: this.domain(),\n });\n this.canReadSelector = this.store.selectSnapshot(AuthState.hasPermission)({\n resource: this.resource(),\n permission: UpdatePermission,\n domain: this.domain(),\n });\n\n this.canRead = computed(() => {\n const res = this.resource();\n if (!res) {\n return false;\n }\n if (AuthState.requiresPermission(this.resource(), ReadPermission)) {\n return this.canReadSelector;\n }\n return false;\n });\n\n this.canEdit = computed(() => {\n const res = this.resource();\n if (!res) {\n return false;\n }\n if (AuthState.requiresPermission(this.resource(), UpdatePermission)) {\n return this.canEditSelector;\n }\n return false;\n });\n }\n}\n","import { FormArray, FormGroup } from '@angular/forms';\nimport { isEqual } from 'lodash-es';\n\n/**\n * Accepts a FormGroup and compares it to an object to return the dirty form values\n * as a sparse object\n * @param form - FormGroup\n * @param compareData - object to compare form values against\n * @returns Partial<T>\n * @example sparseFormData<UserCreate>(this.userForm, initUser)\n */\nexport function sparseFormData<T>(form: FormGroup, compareData: T): T {\n const sparseFormData: T = {} as T;\n\n for (const [key, control] of Object.entries(form.controls)) {\n const controlValue = control.value;\n const compareValue = compareData[key as keyof T];\n\n if (!isEqual(controlValue, compareValue)) {\n sparseFormData[key as keyof T] = controlValue as T[keyof T];\n }\n }\n\n return sparseFormData;\n}\n\n/**\n * Accepts a FormArray and removes empty strings\n * @param formArray - FormArray\n * @returns FormArray\n */\nexport function cleanStringFormArray(formArray: FormArray): FormArray {\n for (let i = formArray.controls.length - 1; i >= 0; i--) {\n if (formArray.at(i).value === '') {\n formArray.removeAt(i);\n }\n }\n return formArray;\n}\n","import { inject } from '@angular/core';\nimport { ActivatedRouteSnapshot, RouterStateSnapshot } from '@angular/router';\nimport { Store } from '@ngxs/store';\nimport { Observable, of } from 'rxjs';\nimport { catchError, map, switchMap } from 'rxjs/operators';\nimport { BASE_URL } from '../../types/base/tokens';\nimport { AuthService } from '../services/auth.service';\nimport { AuthenticationGuardAction } from '../state/auth.actions';\nimport { AuthState } from '../state/auth.state';\n\nexport const AuthenticationGuard = (\n route: ActivatedRouteSnapshot,\n routerState: RouterStateSnapshot,\n): Observable<boolean> => {\n const store = inject(Store);\n const authService = inject(AuthService);\n\n const baseUrl = inject(BASE_URL);\n\n const authenticate = (): void => {\n const url = routerState.url;\n const absoluteUrl = baseUrl + (!url.toString().startsWith('/') ? '/' + url : url);\n const encodedUrl = encodeURIComponent(absoluteUrl);\n window.location.href = `${authService.loginRoute()}?returnUrl=${encodedUrl}`;\n };\n\n return store.select(AuthState.isAuthenticated).pipe(\n switchMap((authenticated) => {\n if (authenticated) {\n return of(authenticated);\n }\n // Handle uninitialized state (ie Browser reload)\n return store.dispatch(AuthenticationGuardAction.CheckUserSession).pipe(\n switchMap(() => {\n return store.select(AuthState.isAuthenticated);\n }),\n );\n }),\n map((authenticated) => {\n if (authenticated) {\n return true;\n }\n\n authenticate();\n\n return false;\n }),\n catchError(() => {\n authenticate();\n\n return of(false);\n }),\n );\n};\n","import { inject } from '@angular/core';\nimport { ActivatedRouteSnapshot, Router } from '@angular/router';\nimport { Store } from '@ngxs/store';\nimport { map, Observable } from 'rxjs';\nimport { AuthState } from '../state/auth.state';\n\nexport const AuthorizationGuard = (route: ActivatedRouteSnapshot): Observable<boolean> => {\n const store = inject(Store);\n const router = inject(Router);\n return store.select(AuthState.hasPermission).pipe(\n map((permissionFn) => permissionFn(route.data['scope'])),\n map((hasPermission) => {\n if (hasPermission) {\n return true;\n }\n router.navigate(['/']);\n return false;\n }),\n );\n};\n","export enum AlertLevel {\n ERROR = 'warn',\n INFO = 'accent',\n SUCCESS = 'success',\n}\n\nexport interface CreateNotificationMessage {\n duration?: number;\n message: string;\n link: string;\n level: AlertLevel;\n}\n\nexport interface NotificationMessage {\n id: number;\n duration?: number;\n message: string;\n link: string;\n level: AlertLevel;\n}\n","import { Injectable, signal } from '@angular/core';\nimport { CreateNotificationMessage, NotificationMessage } from '../../types/notification-message';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class NotificationService {\n private notificationId = 0;\n private _notifications = signal<NotificationMessage[]>([]);\n notifications = this._notifications.asReadonly();\n\n /**\n * Adds a new global notification.\n * @param notification The notification message to add.\n * @returns The unique ID assigned to the notification.\n */\n addGlobalNotification(notification: CreateNotificationMessage): number {\n const newNotification: NotificationMessage = {\n ...notification,\n id: this.notificationId++,\n };\n this._notifications.update((current) => [...current, newNotification]);\n return newNotification.id;\n }\n\n /**\n * Dismisses a global notification by its ID.\n * @param notificationId The ID of the notification to dismiss.\n */\n dismissGlobalNotificationById(notificationId: number): void {\n this._notifications.update((current) => current.filter((notification) => notification.id !== notificationId));\n }\n\n /**\n * Dismisses a specific global notification.\n * @param notification The notification to dismiss.\n */\n dismissGlobalNotification(notification: NotificationMessage): void {\n this.dismissGlobalNotificationById(notification.id);\n }\n\n /**\n * Updates an existing notification.\n * @param updatedNotification The notification with updated information.\n */\n updateNotification(updatedNotification: NotificationMessage): void {\n this._notifications.update((current) =>\n current.map((notification) =>\n notification.id === updatedNotification.id ? { ...notification, ...updatedNotification } : notification,\n ),\n );\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { Component, EventEmitter, Input, OnInit, Output, inject } from '@angular/core';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatIconModule } from '@angular/material/icon';\nimport { RouterModule } from '@angular/router';\nimport { NotificationMessage } from '../../../types/notification-message';\nimport { NotificationService } from '../../services/notification.service';\n\n@Component({\n selector: 'ccc-alert',\n templateUrl: './alert.component.html',\n styleUrls: ['./alert.component.scss'],\n standalone: true,\n imports: [MatIconModule, MatButtonModule, CommonModule, RouterModule],\n})\nexport class AlertComponent implements OnInit {\n @Input({ required: true }) error!: NotificationMessage;\n @Output() dismiss = new EventEmitter();\n\n errors = inject(NotificationService);\n ngOnInit(): void {\n if (this.error.duration === undefined) {\n this.error.duration = 30000;\n }\n\n setTimeout(() => {\n this.dismissAlert();\n }, this.error.duration);\n }\n\n dismissAlert(): void {\n if (this.error.id !== undefined) {\n this.errors.dismissGlobalNotification(this.error);\n }\n }\n}\n","<div class=\"alert\" [ngClass]=\"error.level\">\n <div class=\"message\">\n <span>{{ error.message }}</span>\n </div>\n <div class=\"alert-end\">\n @if (error.link) {\n <span [routerLink]=\"error.link\" class=\"link\">View</span>\n }\n <button (click)=\"dismissAlert()\" mat-icon-button aria-label=\"Close Alert\">\n <mat-icon>close</mat-icon>\n </button>\n </div>\n</div>\n","import { Injectable, inject } from '@angular/core';\nimport { Action, Selector, State, StateContext } from '@ngxs/store';\nimport { patch } from '@ngxs/store/operators';\nimport { AppAction, LoginAction } from '../../auth/state/auth.actions';\nimport { CreateNotificationMessage } from '../../types/notification-message';\nimport { NotificationService } from '../services/notification.service';\nimport { ApiInterceptorAction, HeaderAction } from './core.actions';\n\ninterface CoreStateModel {\n loading: string[];\n sidenavOpened: boolean;\n currentSidenavIdentifier: string;\n}\n\nconst initState: CoreStateModel = {\n loading: [],\n sidenavOpened: true,\n currentSidenavIdentifier: '',\n};\n\n@State<CoreStateModel>({\n name: 'coreState',\n defaults: initState,\n})\n@Injectable()\nexport class CoreState {\n private notifications = inject(NotificationService);\n\n @Selector()\n static sidenavOpened(state: CoreStateModel): boolean {\n return state?.sidenavOpened;\n }\n\n @Selector()\n static isLoading(state: CoreStateModel): boolean {\n return state.loading.length > 0;\n }\n\n @Selector()\n static currentSidenavIdentifier(state: CoreStateModel): string {\n return state.currentSidenavIdentifier;\n }\n\n @Action([AppAction.SetNavIdentifier])\n setNavIdentifier(ctx: StateContext<CoreStateModel>, action: AppAction.SetNavIdentifier): void {\n ctx.setState(\n patch({\n currentSidenavIdentifier: action.identifier,\n }),\n );\n }\n\n @Action([ApiInterceptorAction.PublishError, LoginAction.PublishError])\n publishError(ctx: StateContext<CoreStateModel>, action: { message: CreateNotificationMessage }): void {\n this.notifications.addGlobalNotification(action.message);\n }\n\n @Action([ApiInterceptorAction.BeginActivity])\n beginActivity(ctx: StateContext<CoreStateModel>, action: { process: string }): CoreStateModel {\n const state = ctx.getState();\n ctx.patchState({\n loading: [action.process, ...state.loading],\n });\n return ctx.getState();\n }\n\n @Action([ApiInterceptorAction.EndActivity])\n endActivity(ctx: StateContext<CoreStateModel>, action: { process: string }): CoreStateModel | null {\n const loading = ctx.getState().loading;\n // There can be multiple activities running with the same process signature\n const index = loading.findIndex((activity) => activity === action.process);\n if (index !== -1) {\n const newLoading = [...loading.slice(0, index), ...loading.slice(index + 1)];\n ctx.patchState({\n loading: newLoading,\n });\n return ctx.getState();\n }\n return null;\n }\n\n @Action([HeaderAction.ToggleSidenav])\n toggleSidenav(ctx: StateContext<CoreStateModel>): void {\n ctx.setState(\n patch({\n sidenavOpened: !ctx.getState().sidenavOpened,\n }),\n );\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { Component, DestroyRef, inject, Input, OnInit } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatExpansionModule } from '@angular/material/expansion';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatSidenavModule } from '@angular/material/sidenav';\nimport { RouterModule } from '@angular/router';\nimport { Store } from '@ngxs/store';\n\nimport { Observable, tap } from 'rxjs';\nimport { HasPermissionDirective } from '../../../auth/directives/has-permission.directive';\nimport { PermissionScope } from '../../../types/permissions';\nimport { CoreState } from '../../state/core.state';\n\nexport interface NavItem {\n type: 'link' | 'header' | 'expandable';\n routerLink?: string[];\n label: string;\n icon?: string;\n permission?: PermissionScope;\n children?: NavItem[];\n isExpanded?: boolean;\n attentionCount?: Observable<number>;\n}\n\nexport type NavGroups = Record<string, NavItem[]>;\n\n@Component({\n selector: 'ccc-sidenav',\n templateUrl: './sidenav.component.html',\n styleUrls: ['./sidenav.component.scss'],\n standalone: true,\n imports: [\n MatIconModule,\n RouterModule,\n CommonModule,\n MatExpansionModule,\n MatButtonModule,\n MatSidenavModule,\n HasPermissionDirective,\n ],\n})\nexport class SidenavComponent implements OnInit {\n private store = inject(Store);\n private destroyRef = inject(DestroyRef);\n\n @Input() navGroups?: NavGroups;\n currentNav: NavItem[] = [];\n\n ngOnInit(): void {\n this.store\n .select(CoreState.currentSidenavIdentifier)\n .pipe(\n tap((identifier) => {\n this.currentNav = this.updateNavItems(identifier);\n }),\n takeUntilDestroyed(this.destroyRef),\n )\n .subscribe();\n }\n\n /**\n * Updates the currentNav based on the identifier\n * @param identifier\n * @returns NavItem[]\n * @memberof SidenavComponent\n */\n updateNavItems(identifier: string): NavItem[] {\n if (!this.navGroups) {\n return [];\n }\n if (!this.navGroups[identifier]) {\n // pick the first one if the identifier is not found so we don't break the UI\n identifier = Object.keys(this.navGroups)[0];\n }\n return this.navGroups[identifier];\n }\n}\n","<div class=\"nav-container\">\n <nav>\n @for (navItem of currentNav; track navItem.label) {\n <ng-container *ngTemplateOutlet=\"typeRendererTemplate; context: { navItem: navItem }\"></ng-container>\n }\n </nav>\n</div>\n<ng-template #typeRendererTemplate let-navItem=\"navItem\">\n @switch (navItem.type) {\n @case ('header') {\n <ng-container [ngTemplateOutlet]=\"headerTemplate\" [ngTemplateOutletContext]=\"{ navItem: navItem }\"></ng-container>\n }\n @case ('link') {\n <ng-container [ngTemplateOutlet]=\"linkTemplate\" [ngTemplateOutletContext]=\"{ navItem: navItem }\"></ng-container>\n }\n @case ('expandable') {\n <ng-container\n [ngTemplateOutlet]=\"expandableTemplate\"\n [ngTemplateOutletContext]=\"{ navItem: navItem }\"></ng-container>\n }\n }\n</ng-template>\n<ng-template #headerTemplate let-navItem=\"navItem\">\n <div class=\"link-header\">{{ navItem.label }}</div>\n</ng-template>\n<ng-template #linkTemplate let-navItem=\"navItem\">\n <a [routerLink]=\"navItem.routerLink\" *cccHasPermission=\"navItem.permission\">\n <div class=\"nav-item\" routerLinkActive=\"active-link\">\n <div class=\"link-button\">\n <div class=\"icon\">\n <mat-icon class=\"material-icons-outlined\" [inline]=\"true\">\n {{ navItem.icon }}\n </mat-icon>\n </div>\n <div class=\"text\">\n {{ navItem.label | titlecase }}\n </div>\n </div>\n </div>\n </a>\n</ng-template>\n<ng-template #expandableTemplate let-navItem=\"navItem\">\n <div class=\"nav-item\" aria-hidden=\"true\" (click)=\"navItem.isExpanded = !navItem.isExpanded\">\n <div class=\"link-button\">\n <div class=\"icon\">\n <mat-icon class=\"material-icons-outlined\" [inline]=\"true\">\n {{ navItem.isExpanded ? 'expand_less' : 'expand_more' }}\n </mat-icon>\n </div>\n <div class=\"text\">{{ navItem.label }}</div>\n </div>\n </div>\n @if (navItem.isExpanded) {\n <div class=\"expandable-links\">\n @for (navItemChild of navItem.children; track navItemChild) {\n <ng-container *ngTemplateOutlet=\"typeRendererTemplate; context: { navItem: navItemChild }\"> </ng-container>\n }\n </div>\n }\n</ng-template>\n","import { HttpErrorResponse, HttpEvent, HttpHandler, HttpInterceptor, HttpRequest } from '@angular/common/http';\nimport { inject, Injectable, NgZone } from '@angular/core';\nimport { Router } from '@angular/router';\nimport { Store } from '@ngxs/store';\nimport { catchError, finalize, Observable, throwError } from 'rxjs';\nimport { CUSTOM_HTTP_REQUEST_OPTIONS } from '../../auth/services/request-options';\nimport { BASE_URL } from '../../types/base/tokens';\nimport { AlertLevel } from '../../types/notification-message';\nimport { ApiInterceptorAction } from '../state/core.actions';\n\n@Injectable()\nexport class ApiInterceptor implements HttpInterceptor {\n private store = inject(Store);\n private router = inject(Router);\n private ngZone = inject(NgZone);\n private baseUrl = inject(BASE_URL);\n\n intercept(request: HttpRequest<unknown>, next: HttpHandler): Observable<HttpEvent<unknown>> {\n this.store.dispatch(new ApiInterceptorAction.BeginActivity(request.method + ' ' + request.url));\n\n return next.handle(request).pipe(\n catchError((error: HttpErrorResponse): Observable<HttpEvent<unknown>> => {\n if (error.status === 401) {\n this.ngZone.run(() => {\n this.store.dispatch(new ApiInterceptorAction.SetRedirectUrl(this.baseUrl + this.router.url));\n this.router.navigate(['/login']);\n });\n }\n if (!request.context.get(CUSTOM_HTTP_REQUEST_OPTIONS).suppressGlobalError) {\n const message = error.error?.message ?? error.message ?? error.error;\n this.store.dispatch(\n new ApiInterceptorAction.PublishError({\n message: message,\n level: AlertLevel.ERROR,\n link: '',\n }),\n );\n }\n\n return throwError(() => error);\n }),\n finalize(() => {\n this.store.dispatch(new ApiInterceptorAction.EndActivity(request.method + ' ' + request.url));\n }),\n );\n }\n}\n","/*\n * Public API Surface of ccc-lib\n */\n\n// Auth directives\nexport * from './lib/auth/directives/has-permission.directive';\n\n// Auth forms\nexport * from './lib/auth/forms/ccc-field/ccc-field.component';\nexport * from './lib/auth/forms/form-helpers';\n\n// Auth guards\nexport * from './lib/auth/guards/authentication.guard';\nexport * from './lib/auth/guards/authorization.guard';\n\n// Auth services\nexport * from './lib/auth/services/auth.service';\nexport * from './lib/auth/services/request-options';\n\n// Auth state\nexport * from './lib/auth/state/auth.actions';\nexport * from './lib/auth/state/auth.state';\n\n// Types tokens\nexport * from './lib/types/base/tokens';\n\n// Types\nexport * from './lib/types/notification-message';\nexport * from './lib/types/permissions';\nexport * from './lib/types/session-info';\n\n// Ui components\nexport * from './lib/ui/components/alert/alert.component';\nexport * from './lib/ui/components/sidenav/sidenav.component';\n\n// Ui interceptor\nexport * from './lib/ui/interceptor/api.interceptor';\n\n// Ui services\nexport * from './lib/ui/services/notification.service';\n\n// Ui state\nexport * from './lib/ui/state/core.actions';\nexport * from './lib/ui/state/core.state';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["initState","map","catchError","i2","i4"],"mappings":"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"}
1
+ {"version":3,"file":"cccteam-ccc-lib.mjs","sources":["../../../projects/ccc-lib/src/public-api.ts","../../../projects/ccc-lib/src/cccteam-ccc-lib.ts"],"sourcesContent":["/*\n * Public API Surface of ccc-lib\n */\n\n// Auth directives\nexport * from '@cccteam/ccc-lib/src/auth-has-permission';\n\n// Auth forms\nexport * from '@cccteam/ccc-lib/src/auth-forms';\n\n// Auth guards\nexport * from '@cccteam/ccc-lib/src/auth-authentication-guard';\nexport * from '@cccteam/ccc-lib/src/auth-authorization-guard';\n\n// Auth services\nexport * from '@cccteam/ccc-lib/src/auth-service';\n\n// Util\nexport * from '@cccteam/ccc-lib/src/util-request-options';\n\n// Auth state\nexport * from '@cccteam/ccc-lib/src/auth-state';\n\n// Types\nexport * from '@cccteam/ccc-lib/src/types';\n\n// Ui components\nexport * from '@cccteam/ccc-lib/src/ui-alert';\nexport * from '@cccteam/ccc-lib/src/ui-sidenav';\n\n// Ui interceptor\nexport * from '@cccteam/ccc-lib/src/ui-interceptor';\n\n// Ui services\nexport * from '@cccteam/ccc-lib/src/ui-notification-service';\n\n// Ui state\nexport * from '@cccteam/ccc-lib/src/ui-core-state';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":";;;;;;;;;;;;;;AAAA;;AAEG;AAEH;;ACJA;;AAEG"}
package/package.json CHANGED
@@ -1,13 +1,13 @@
1
1
  {
2
2
  "name": "@cccteam/ccc-lib",
3
- "version": "0.0.10",
3
+ "version": "0.0.12",
4
4
  "repository": {
5
5
  "type": "git",
6
6
  "url": "git://github.com/cccteam/ccc-lib.git"
7
7
  },
8
8
  "peerDependencies": {
9
- "@angular/common": "^18.2.0",
10
- "@angular/core": "^18.2.0"
9
+ "@angular/common": "^19.0.2",
10
+ "@angular/core": "^19.0.2"
11
11
  },
12
12
  "dependencies": {
13
13
  "tslib": "^2.3.0"
@@ -21,9 +21,59 @@
21
21
  },
22
22
  ".": {
23
23
  "types": "./index.d.ts",
24
- "esm2022": "./esm2022/cccteam-ccc-lib.mjs",
25
- "esm": "./esm2022/cccteam-ccc-lib.mjs",
26
24
  "default": "./fesm2022/cccteam-ccc-lib.mjs"
25
+ },
26
+ "./src/auth-authentication-guard": {
27
+ "types": "./src/auth-authentication-guard/index.d.ts",
28
+ "default": "./fesm2022/cccteam-ccc-lib-src-auth-authentication-guard.mjs"
29
+ },
30
+ "./src/auth-forms": {
31
+ "types": "./src/auth-forms/index.d.ts",
32
+ "default": "./fesm2022/cccteam-ccc-lib-src-auth-forms.mjs"
33
+ },
34
+ "./src/auth-has-permission": {
35
+ "types": "./src/auth-has-permission/index.d.ts",
36
+ "default": "./fesm2022/cccteam-ccc-lib-src-auth-has-permission.mjs"
37
+ },
38
+ "./src/auth-authorization-guard": {
39
+ "types": "./src/auth-authorization-guard/index.d.ts",
40
+ "default": "./fesm2022/cccteam-ccc-lib-src-auth-authorization-guard.mjs"
41
+ },
42
+ "./src/auth-service": {
43
+ "types": "./src/auth-service/index.d.ts",
44
+ "default": "./fesm2022/cccteam-ccc-lib-src-auth-service.mjs"
45
+ },
46
+ "./src/auth-state": {
47
+ "types": "./src/auth-state/index.d.ts",
48
+ "default": "./fesm2022/cccteam-ccc-lib-src-auth-state.mjs"
49
+ },
50
+ "./src/types": {
51
+ "types": "./src/types/index.d.ts",
52
+ "default": "./fesm2022/cccteam-ccc-lib-src-types.mjs"
53
+ },
54
+ "./src/ui-alert": {
55
+ "types": "./src/ui-alert/index.d.ts",
56
+ "default": "./fesm2022/cccteam-ccc-lib-src-ui-alert.mjs"
57
+ },
58
+ "./src/ui-core-state": {
59
+ "types": "./src/ui-core-state/index.d.ts",
60
+ "default": "./fesm2022/cccteam-ccc-lib-src-ui-core-state.mjs"
61
+ },
62
+ "./src/ui-interceptor": {
63
+ "types": "./src/ui-interceptor/index.d.ts",
64
+ "default": "./fesm2022/cccteam-ccc-lib-src-ui-interceptor.mjs"
65
+ },
66
+ "./src/ui-notification-service": {
67
+ "types": "./src/ui-notification-service/index.d.ts",
68
+ "default": "./fesm2022/cccteam-ccc-lib-src-ui-notification-service.mjs"
69
+ },
70
+ "./src/ui-sidenav": {
71
+ "types": "./src/ui-sidenav/index.d.ts",
72
+ "default": "./fesm2022/cccteam-ccc-lib-src-ui-sidenav.mjs"
73
+ },
74
+ "./src/util-request-options": {
75
+ "types": "./src/util-request-options/index.d.ts",
76
+ "default": "./fesm2022/cccteam-ccc-lib-src-util-request-options.mjs"
27
77
  }
28
78
  }
29
79
  }
package/public-api.d.ts CHANGED
@@ -1,19 +1,13 @@
1
- export * from './lib/auth/directives/has-permission.directive';
2
- export * from './lib/auth/forms/ccc-field/ccc-field.component';
3
- export * from './lib/auth/forms/form-helpers';
4
- export * from './lib/auth/guards/authentication.guard';
5
- export * from './lib/auth/guards/authorization.guard';
6
- export * from './lib/auth/services/auth.service';
7
- export * from './lib/auth/services/request-options';
8
- export * from './lib/auth/state/auth.actions';
9
- export * from './lib/auth/state/auth.state';
10
- export * from './lib/types/base/tokens';
11
- export * from './lib/types/notification-message';
12
- export * from './lib/types/permissions';
13
- export * from './lib/types/session-info';
14
- export * from './lib/ui/components/alert/alert.component';
15
- export * from './lib/ui/components/sidenav/sidenav.component';
16
- export * from './lib/ui/interceptor/api.interceptor';
17
- export * from './lib/ui/services/notification.service';
18
- export * from './lib/ui/state/core.actions';
19
- export * from './lib/ui/state/core.state';
1
+ export * from '@cccteam/ccc-lib/src/auth-has-permission';
2
+ export * from '@cccteam/ccc-lib/src/auth-forms';
3
+ export * from '@cccteam/ccc-lib/src/auth-authentication-guard';
4
+ export * from '@cccteam/ccc-lib/src/auth-authorization-guard';
5
+ export * from '@cccteam/ccc-lib/src/auth-service';
6
+ export * from '@cccteam/ccc-lib/src/util-request-options';
7
+ export * from '@cccteam/ccc-lib/src/auth-state';
8
+ export * from '@cccteam/ccc-lib/src/types';
9
+ export * from '@cccteam/ccc-lib/src/ui-alert';
10
+ export * from '@cccteam/ccc-lib/src/ui-sidenav';
11
+ export * from '@cccteam/ccc-lib/src/ui-interceptor';
12
+ export * from '@cccteam/ccc-lib/src/ui-notification-service';
13
+ export * from '@cccteam/ccc-lib/src/ui-core-state';
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Generated bundle index. Do not edit.
3
+ */
4
+ /// <amd-module name="@cccteam/ccc-lib/src/auth-authentication-guard" />
5
+ export * from './public-api';
@@ -0,0 +1 @@
1
+ export * from './authentication.guard';
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Generated bundle index. Do not edit.
3
+ */
4
+ /// <amd-module name="@cccteam/ccc-lib/src/auth-authorization-guard" />
5
+ export * from './public-api';
@@ -0,0 +1 @@
1
+ export * from './authorization.guard';
@@ -1,6 +1,6 @@
1
1
  import { OnInit, Signal } from '@angular/core';
2
+ import { Domain, Resource } from '@cccteam/ccc-lib/src/types';
2
3
  import { Store } from '@ngxs/store';
3
- import { Domain, Resource } from '../../../types/permissions';
4
4
  import * as i0 from "@angular/core";
5
5
  export declare enum InputMode {
6
6
  Read = "read",
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Generated bundle index. Do not edit.
3
+ */
4
+ /// <amd-module name="@cccteam/ccc-lib/src/auth-forms" />
5
+ export * from './public-api';
@@ -0,0 +1,2 @@
1
+ export * from './ccc-field/ccc-field.component';
2
+ export * from './form-helpers';
@@ -1,4 +1,4 @@
1
- import { PermissionScope } from '../../types/permissions';
1
+ import { PermissionScope } from '@cccteam/ccc-lib/src/types';
2
2
  import * as i0 from "@angular/core";
3
3
  export declare class HasPermissionDirective {
4
4
  private templateRef;
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Generated bundle index. Do not edit.
3
+ */
4
+ /// <amd-module name="@cccteam/ccc-lib/src/auth-has-permission" />
5
+ export * from './public-api';
@@ -0,0 +1 @@
1
+ export * from './has-permission.directive';
@@ -1,6 +1,6 @@
1
1
  import { HttpClient } from '@angular/common/http';
2
+ import { SessionInfo } from '@cccteam/ccc-lib/src/types';
2
3
  import { Observable } from 'rxjs';
3
- import { SessionInfo } from '../../types/session-info';
4
4
  import * as i0 from "@angular/core";
5
5
  export declare class AuthService {
6
6
  private http;
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Generated bundle index. Do not edit.
3
+ */
4
+ /// <amd-module name="@cccteam/ccc-lib/src/auth-service" />
5
+ export * from './public-api';
@@ -0,0 +1 @@
1
+ export * from './auth.service';
@@ -1,7 +1,6 @@
1
+ import { Permission, PermissionScope, Resource, SessionInfo } from '@cccteam/ccc-lib/src/types';
1
2
  import { StateContext } from '@ngxs/store';
2
3
  import { Observable } from 'rxjs';
3
- import { Permission, PermissionScope, Resource } from '../../types/permissions';
4
- import { SessionInfo } from '../../types/session-info';
5
4
  import * as i0 from "@angular/core";
6
5
  export interface AuthStateModel {
7
6
  authenticated: boolean;
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Generated bundle index. Do not edit.
3
+ */
4
+ /// <amd-module name="@cccteam/ccc-lib/src/auth-state" />
5
+ export * from './public-api';
@@ -0,0 +1 @@
1
+ export * from './auth.state';
@@ -1,4 +1,4 @@
1
- import { CreateNotificationMessage } from '../../types/notification-message';
1
+ import { CreateNotificationMessage } from './notification-message';
2
2
  export declare namespace AuthenticationGuardAction {
3
3
  class SetRedirectUrl {
4
4
  redirectUrl: string;
@@ -1,4 +1,4 @@
1
- import { CreateNotificationMessage } from '../../types/notification-message';
1
+ import { CreateNotificationMessage } from './notification-message';
2
2
  export declare namespace ApiInterceptorAction {
3
3
  class BeginActivity {
4
4
  process: string;
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Generated bundle index. Do not edit.
3
+ */
4
+ /// <amd-module name="@cccteam/ccc-lib/src/types" />
5
+ export * from './public-api';
@@ -0,0 +1,6 @@
1
+ export * from './auth.actions';
2
+ export * from './core.actions';
3
+ export * from './notification-message';
4
+ export * from './permissions';
5
+ export * from './session-info';
6
+ export * from './tokens';
@@ -1,5 +1,5 @@
1
1
  import { InjectionToken } from '@angular/core';
2
- import { Domain, Permission, Resource } from '../permissions';
2
+ import { Domain, Permission, Resource } from './permissions';
3
3
  export declare const BASE_URL: InjectionToken<string>;
4
4
  export declare const API_URL: InjectionToken<string>;
5
5
  export declare const PERMISSION_REQUIRED: InjectionToken<(resource: Resource, permission: Permission) => boolean>;
@@ -1,6 +1,6 @@
1
1
  import { EventEmitter, OnInit } from '@angular/core';
2
- import { NotificationMessage } from '../../../types/notification-message';
3
- import { NotificationService } from '../../services/notification.service';
2
+ import { NotificationMessage } from '@cccteam/ccc-lib/src/types';
3
+ import { NotificationService } from '@cccteam/ccc-lib/src/ui-notification-service';
4
4
  import * as i0 from "@angular/core";
5
5
  export declare class AlertComponent implements OnInit {
6
6
  error: NotificationMessage;
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Generated bundle index. Do not edit.
3
+ */
4
+ /// <amd-module name="@cccteam/ccc-lib/src/ui-alert" />
5
+ export * from './public-api';
@@ -0,0 +1 @@
1
+ export * from './alert.component';
@@ -1,6 +1,5 @@
1
+ import { AppAction, CreateNotificationMessage } from '@cccteam/ccc-lib/src/types';
1
2
  import { StateContext } from '@ngxs/store';
2
- import { AppAction } from '../../auth/state/auth.actions';
3
- import { CreateNotificationMessage } from '../../types/notification-message';
4
3
  import * as i0 from "@angular/core";
5
4
  interface CoreStateModel {
6
5
  loading: string[];
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Generated bundle index. Do not edit.
3
+ */
4
+ /// <amd-module name="@cccteam/ccc-lib/src/ui-core-state" />
5
+ export * from './public-api';
@@ -0,0 +1 @@
1
+ export * from './core.state';
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Generated bundle index. Do not edit.
3
+ */
4
+ /// <amd-module name="@cccteam/ccc-lib/src/ui-interceptor" />
5
+ export * from './public-api';
@@ -0,0 +1 @@
1
+ export * from './api.interceptor';
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Generated bundle index. Do not edit.
3
+ */
4
+ /// <amd-module name="@cccteam/ccc-lib/src/ui-notification-service" />
5
+ export * from './public-api';
@@ -1,4 +1,4 @@
1
- import { CreateNotificationMessage, NotificationMessage } from '../../types/notification-message';
1
+ import { CreateNotificationMessage, NotificationMessage } from '@cccteam/ccc-lib/src/types';
2
2
  import * as i0 from "@angular/core";
3
3
  export declare class NotificationService {
4
4
  private notificationId;
@@ -0,0 +1 @@
1
+ export * from './notification.service';
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Generated bundle index. Do not edit.
3
+ */
4
+ /// <amd-module name="@cccteam/ccc-lib/src/ui-sidenav" />
5
+ export * from './public-api';
@@ -0,0 +1 @@
1
+ export * from './sidenav.component';
@@ -1,6 +1,6 @@
1
1
  import { OnInit } from '@angular/core';
2
+ import { PermissionScope } from '@cccteam/ccc-lib/src/types';
2
3
  import { Observable } from 'rxjs';
3
- import { PermissionScope } from '../../../types/permissions';
4
4
  import * as i0 from "@angular/core";
5
5
  export interface NavItem {
6
6
  type: 'link' | 'header' | 'expandable';
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Generated bundle index. Do not edit.
3
+ */
4
+ /// <amd-module name="@cccteam/ccc-lib/src/util-request-options" />
5
+ export * from './public-api';
@@ -0,0 +1 @@
1
+ export * from './request-options';
Binary file
@@ -1,5 +0,0 @@
1
- /**
2
- * Generated bundle index. Do not edit.
3
- */
4
- export * from './public-api';
5
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2NjdGVhbS1jY2MtbGliLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vcHJvamVjdHMvY2NjLWxpYi9zcmMvY2NjdGVhbS1jY2MtbGliLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBRUgsY0FBYyxjQUFjLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEdlbmVyYXRlZCBidW5kbGUgaW5kZXguIERvIG5vdCBlZGl0LlxuICovXG5cbmV4cG9ydCAqIGZyb20gJy4vcHVibGljLWFwaSc7XG4iXX0=
@@ -1,44 +0,0 @@
1
- import { Directive, Input, TemplateRef, ViewContainerRef, inject } from '@angular/core';
2
- import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
3
- import { Store } from '@ngxs/store';
4
- import { Subject, catchError, combineLatest, map, of } from 'rxjs';
5
- import { AuthState } from '../state/auth.state';
6
- import * as i0 from "@angular/core";
7
- export class HasPermissionDirective {
8
- templateRef = inject((TemplateRef));
9
- viewContainer = inject(ViewContainerRef);
10
- store = inject(Store);
11
- scope = new Subject();
12
- set cccHasPermission(scope) {
13
- this.scope.next(scope);
14
- }
15
- constructor() {
16
- combineLatest({
17
- permissionFn: this.store.select(AuthState.hasPermission),
18
- scope: this.scope.asObservable(),
19
- })
20
- .pipe(takeUntilDestroyed(), map(({ permissionFn, scope }) => (scope !== undefined ? permissionFn(scope) : true)), catchError(() => of(false)))
21
- .subscribe((result) => {
22
- if (result) {
23
- if (!this.viewContainer.get(0)) {
24
- this.viewContainer.createEmbeddedView(this.templateRef);
25
- }
26
- }
27
- else {
28
- this.viewContainer.clear();
29
- }
30
- });
31
- }
32
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: HasPermissionDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
33
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.7", type: HasPermissionDirective, isStandalone: true, selector: "[cccHasPermission]", inputs: { cccHasPermission: "cccHasPermission" }, ngImport: i0 });
34
- }
35
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: HasPermissionDirective, decorators: [{
36
- type: Directive,
37
- args: [{
38
- selector: '[cccHasPermission]',
39
- standalone: true,
40
- }]
41
- }], ctorParameters: () => [], propDecorators: { cccHasPermission: [{
42
- type: Input
43
- }] } });
44
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGFzLXBlcm1pc3Npb24uZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2NjLWxpYi9zcmMvbGliL2F1dGgvZGlyZWN0aXZlcy9oYXMtcGVybWlzc2lvbi5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsV0FBVyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN4RixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ3BDLE9BQU8sRUFBRSxPQUFPLEVBQUUsVUFBVSxFQUFFLGFBQWEsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRW5FLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQzs7QUFNaEQsTUFBTSxPQUFPLHNCQUFzQjtJQUN6QixXQUFXLEdBQUcsTUFBTSxDQUFDLENBQUEsV0FBb0IsQ0FBQSxDQUFDLENBQUM7SUFDM0MsYUFBYSxHQUFHLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO0lBQ3pDLEtBQUssR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7SUFFdEIsS0FBSyxHQUFHLElBQUksT0FBTyxFQUFtQixDQUFDO0lBRS9DLElBQ0ksZ0JBQWdCLENBQUMsS0FBc0I7UUFDekMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDekIsQ0FBQztJQUVEO1FBQ0UsYUFBYSxDQUFDO1lBQ1osWUFBWSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxhQUFhLENBQUM7WUFDeEQsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsWUFBWSxFQUFFO1NBQ2pDLENBQUM7YUFDQyxJQUFJLENBQ0gsa0JBQWtCLEVBQUUsRUFDcEIsR0FBRyxDQUFDLENBQUMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsS0FBSyxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUNwRixVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQzVCO2FBQ0EsU0FBUyxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUU7WUFDcEIsSUFBSSxNQUFNLEVBQUUsQ0FBQztnQkFDWCxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztvQkFDL0IsSUFBSSxDQUFDLGFBQWEsQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7Z0JBQzFELENBQUM7WUFDSCxDQUFDO2lCQUFNLENBQUM7Z0JBQ04sSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUM3QixDQUFDO1FBQ0gsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO3VHQS9CVSxzQkFBc0I7MkZBQXRCLHNCQUFzQjs7MkZBQXRCLHNCQUFzQjtrQkFKbEMsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsb0JBQW9CO29CQUM5QixVQUFVLEVBQUUsSUFBSTtpQkFDakI7d0RBU0ssZ0JBQWdCO3NCQURuQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGlyZWN0aXZlLCBJbnB1dCwgVGVtcGxhdGVSZWYsIFZpZXdDb250YWluZXJSZWYsIGluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgdGFrZVVudGlsRGVzdHJveWVkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZS9yeGpzLWludGVyb3AnO1xuaW1wb3J0IHsgU3RvcmUgfSBmcm9tICdAbmd4cy9zdG9yZSc7XG5pbXBvcnQgeyBTdWJqZWN0LCBjYXRjaEVycm9yLCBjb21iaW5lTGF0ZXN0LCBtYXAsIG9mIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBQZXJtaXNzaW9uU2NvcGUgfSBmcm9tICcuLi8uLi90eXBlcy9wZXJtaXNzaW9ucyc7XG5pbXBvcnQgeyBBdXRoU3RhdGUgfSBmcm9tICcuLi9zdGF0ZS9hdXRoLnN0YXRlJztcblxuQERpcmVjdGl2ZSh7XG4gIHNlbGVjdG9yOiAnW2NjY0hhc1Blcm1pc3Npb25dJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbn0pXG5leHBvcnQgY2xhc3MgSGFzUGVybWlzc2lvbkRpcmVjdGl2ZSB7XG4gIHByaXZhdGUgdGVtcGxhdGVSZWYgPSBpbmplY3QoVGVtcGxhdGVSZWY8dW5rbm93bj4pO1xuICBwcml2YXRlIHZpZXdDb250YWluZXIgPSBpbmplY3QoVmlld0NvbnRhaW5lclJlZik7XG4gIHByaXZhdGUgc3RvcmUgPSBpbmplY3QoU3RvcmUpO1xuXG4gIHByaXZhdGUgc2NvcGUgPSBuZXcgU3ViamVjdDxQZXJtaXNzaW9uU2NvcGU+KCk7XG5cbiAgQElucHV0KClcbiAgc2V0IGNjY0hhc1Blcm1pc3Npb24oc2NvcGU6IFBlcm1pc3Npb25TY29wZSkge1xuICAgIHRoaXMuc2NvcGUubmV4dChzY29wZSk7XG4gIH1cblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBjb21iaW5lTGF0ZXN0KHtcbiAgICAgIHBlcm1pc3Npb25GbjogdGhpcy5zdG9yZS5zZWxlY3QoQXV0aFN0YXRlLmhhc1Blcm1pc3Npb24pLFxuICAgICAgc2NvcGU6IHRoaXMuc2NvcGUuYXNPYnNlcnZhYmxlKCksXG4gICAgfSlcbiAgICAgIC5waXBlKFxuICAgICAgICB0YWtlVW50aWxEZXN0cm95ZWQoKSxcbiAgICAgICAgbWFwKCh7IHBlcm1pc3Npb25Gbiwgc2NvcGUgfSkgPT4gKHNjb3BlICE9PSB1bmRlZmluZWQgPyBwZXJtaXNzaW9uRm4oc2NvcGUpIDogdHJ1ZSkpLFxuICAgICAgICBjYXRjaEVycm9yKCgpID0+IG9mKGZhbHNlKSksXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKChyZXN1bHQpID0+IHtcbiAgICAgICAgaWYgKHJlc3VsdCkge1xuICAgICAgICAgIGlmICghdGhpcy52aWV3Q29udGFpbmVyLmdldCgwKSkge1xuICAgICAgICAgICAgdGhpcy52aWV3Q29udGFpbmVyLmNyZWF0ZUVtYmVkZGVkVmlldyh0aGlzLnRlbXBsYXRlUmVmKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy52aWV3Q29udGFpbmVyLmNsZWFyKCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICB9XG59XG4iXX0=