@rolatech/angular-onboarding 20.3.0-beta.2

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 (35) hide show
  1. package/README.md +55 -0
  2. package/fesm2022/rolatech-angular-onboarding-admin-onboarding-detail-page-DKJQX3cs.mjs +224 -0
  3. package/fesm2022/rolatech-angular-onboarding-admin-onboarding-detail-page-DKJQX3cs.mjs.map +1 -0
  4. package/fesm2022/rolatech-angular-onboarding-admin-onboarding-index-page-BO4pC_NU.mjs +206 -0
  5. package/fesm2022/rolatech-angular-onboarding-admin-onboarding-index-page-BO4pC_NU.mjs.map +1 -0
  6. package/fesm2022/rolatech-angular-onboarding-admin-onboarding-review-page-BERcLBeQ.mjs +419 -0
  7. package/fesm2022/rolatech-angular-onboarding-admin-onboarding-review-page-BERcLBeQ.mjs.map +1 -0
  8. package/fesm2022/rolatech-angular-onboarding-agent-apply-banking-page-VYNfR4fy.mjs +133 -0
  9. package/fesm2022/rolatech-angular-onboarding-agent-apply-banking-page-VYNfR4fy.mjs.map +1 -0
  10. package/fesm2022/rolatech-angular-onboarding-agent-apply-financial-page-Ck3Rowke.mjs +132 -0
  11. package/fesm2022/rolatech-angular-onboarding-agent-apply-financial-page-Ck3Rowke.mjs.map +1 -0
  12. package/fesm2022/rolatech-angular-onboarding-agent-apply-profile-page-DNepDxHu.mjs +122 -0
  13. package/fesm2022/rolatech-angular-onboarding-agent-apply-profile-page-DNepDxHu.mjs.map +1 -0
  14. package/fesm2022/rolatech-angular-onboarding-agent-apply-qualification-page-CSwupuKt.mjs +108 -0
  15. package/fesm2022/rolatech-angular-onboarding-agent-apply-qualification-page-CSwupuKt.mjs.map +1 -0
  16. package/fesm2022/rolatech-angular-onboarding-agent-apply-review-page-DugCjfvK.mjs +182 -0
  17. package/fesm2022/rolatech-angular-onboarding-agent-apply-review-page-DugCjfvK.mjs.map +1 -0
  18. package/fesm2022/rolatech-angular-onboarding-agent-apply-shell-page-DibWYeD1.mjs +150 -0
  19. package/fesm2022/rolatech-angular-onboarding-agent-apply-shell-page-DibWYeD1.mjs.map +1 -0
  20. package/fesm2022/rolatech-angular-onboarding-agent-apply-start-page-DC7gyOnS.mjs +144 -0
  21. package/fesm2022/rolatech-angular-onboarding-agent-apply-start-page-DC7gyOnS.mjs.map +1 -0
  22. package/fesm2022/rolatech-angular-onboarding-agent-apply-submitted-page-BMkV2V8K.mjs +55 -0
  23. package/fesm2022/rolatech-angular-onboarding-agent-apply-submitted-page-BMkV2V8K.mjs.map +1 -0
  24. package/fesm2022/rolatech-angular-onboarding-agent-onboarding-documents-page-DWBGTj5J.mjs +99 -0
  25. package/fesm2022/rolatech-angular-onboarding-agent-onboarding-documents-page-DWBGTj5J.mjs.map +1 -0
  26. package/fesm2022/rolatech-angular-onboarding-agent-onboarding-issues-page-CSVgCJ7t.mjs +28 -0
  27. package/fesm2022/rolatech-angular-onboarding-agent-onboarding-issues-page-CSVgCJ7t.mjs.map +1 -0
  28. package/fesm2022/rolatech-angular-onboarding-agent-onboarding-overview-page-8sTSvFZ7.mjs +67 -0
  29. package/fesm2022/rolatech-angular-onboarding-agent-onboarding-overview-page-8sTSvFZ7.mjs.map +1 -0
  30. package/fesm2022/rolatech-angular-onboarding-agent-onboarding-shell-page-B6ffcJ5A.mjs +125 -0
  31. package/fesm2022/rolatech-angular-onboarding-agent-onboarding-shell-page-B6ffcJ5A.mjs.map +1 -0
  32. package/fesm2022/rolatech-angular-onboarding.mjs +1495 -0
  33. package/fesm2022/rolatech-angular-onboarding.mjs.map +1 -0
  34. package/package.json +35 -0
  35. package/types/rolatech-angular-onboarding.d.ts +244 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rolatech-angular-onboarding.mjs","sources":["../../../../packages/angular-onboarding/src/lib/guards/application-id.guard.ts","../../../../packages/angular-onboarding/src/lib/store/agent-apply.facade.ts","../../../../packages/angular-onboarding/src/lib/guards/apply-step.guard.ts","../../../../packages/angular-onboarding/src/lib/pages/agent-apply/agent-apply-routes.ts","../../../../packages/angular-onboarding/src/lib/store/agent-onboarding.facade.ts","../../../../packages/angular-onboarding/src/lib/pages/agent-onboarding/agent-onboarding-routes.ts","../../../../packages/angular-onboarding/src/lib/pages/admin-onboarding/admin-onboarding-routes.ts","../../../../packages/angular-onboarding/src/lib/store/admin-onboarding-list.facade.ts","../../../../packages/angular-onboarding/src/lib/store/admin-onboarding-detail.facade.ts","../../../../packages/angular-onboarding/src/lib/store/admin-onboarding-review.facade.ts","../../../../packages/angular-onboarding/src/lib/components/onboarding/onboarding-page-shell.ts","../../../../packages/angular-onboarding/src/lib/components/onboarding/onboarding-status-badge.ts","../../../../packages/angular-onboarding/src/lib/components/onboarding/onboarding-step-nav.ts","../../../../packages/angular-onboarding/src/lib/components/onboarding/onboarding-document-uploader.ts","../../../../packages/angular-onboarding/src/lib/components/onboarding/onboarding-issue-list.ts","../../../../packages/angular-onboarding/src/lib/components/onboarding/onboarding-summary-card.ts","../../../../packages/angular-onboarding/src/lib/components/onboarding/onboarding-timeline.ts","../../../../packages/angular-onboarding/src/lib/components/onboarding/onboarding-timeline-drawer.ts","../../../../packages/angular-onboarding/src/rolatech-angular-onboarding.ts"],"sourcesContent":["import { CanActivateFn } from '@angular/router';\n\nexport const applicationIdGuard: CanActivateFn = (route) => Boolean(route.paramMap.get('applicationId'));\n","import { Injectable, computed, inject, signal } from '@angular/core';\nimport { FormBuilder, Validators } from '@angular/forms';\nimport {\n ConfirmOnboardingDocumentUploadRequest,\n CreateOnboardingApplicationRequest,\n OnboardingApplicantService,\n OnboardingApplicationDetailResponse,\n OnboardingApplicationResponse,\n OnboardingDocumentResponse,\n OnboardingDocumentType,\n OnboardingIssueResponse,\n OnboardingStatus,\n RequestOnboardingUploadUrlRequest,\n SaveOnboardingBankingRequest,\n SaveOnboardingFinancialRequest,\n SaveOnboardingProfileRequest,\n} from '@rolatech/angular-services';\nimport { firstValueFrom } from 'rxjs';\nimport { ApplyRouteStep, ApplyStepCompletion, RequiredDocumentSpec } from '../models/onboarding-ui.models';\nimport { HttpClient } from '@angular/common/http';\n\nconst INDIVIDUAL_REQUIRED_DOCUMENTS: RequiredDocumentSpec[] = [\n { type: 'PASSPORT', label: 'Passport' },\n { type: 'PROOF_OF_ADDRESS', label: 'Proof of address' },\n];\n\nconst COMPANY_REQUIRED_DOCUMENTS: RequiredDocumentSpec[] = [\n { type: 'PASSPORT', label: 'Passport' },\n { type: 'CERTIFICATE_OF_INCORPORATION', label: 'Certificate of incorporation' },\n { type: 'INDUSTRY_CERTIFICATE', label: 'Industry certificate' },\n];\n\n@Injectable()\nexport class AgentApplyFacade {\n private readonly onboardingService = inject(OnboardingApplicantService);\n private readonly fb = inject(FormBuilder);\n private http = inject(HttpClient);\n\n readonly loading = signal(false);\n readonly saving = signal(false);\n readonly submitting = signal(false);\n readonly error = signal<string | null>(null);\n\n readonly application = signal<OnboardingApplicationResponse | null>(null);\n readonly detail = signal<OnboardingApplicationDetailResponse | null>(null);\n\n private readonly loadedApplicationId = signal<string | null>(null);\n\n readonly applicationId = computed(() => this.detail()?.id ?? this.application()?.id ?? null);\n readonly status = computed<OnboardingStatus | null>(() => this.detail()?.status ?? this.application()?.status ?? null);\n\n readonly documents = computed<OnboardingDocumentResponse[]>(() => this.detail()?.documents ?? []);\n readonly issues = computed<OnboardingIssueResponse[]>(() => this.detail()?.issues ?? []);\n readonly timeline = computed(() => this.detail()?.timeline ?? []);\n\n readonly requiredDocuments = computed<RequiredDocumentSpec[]>(() => {\n const applicantType = this.detail()?.applicantType ?? this.application()?.applicantType;\n return applicantType === 'COMPANY' ? COMPANY_REQUIRED_DOCUMENTS : INDIVIDUAL_REQUIRED_DOCUMENTS;\n });\n\n readonly completion = computed<ApplyStepCompletion>(() => {\n const detail = this.detail();\n\n if (!detail) {\n return {\n profile: false,\n qualification: false,\n financial: false,\n banking: false,\n };\n }\n\n if (detail.progress) {\n return {\n profile: detail.progress.profileCompleted,\n qualification: detail.progress.qualificationCompleted,\n financial: detail.progress.financialCompleted,\n banking: detail.progress.bankingCompleted,\n };\n }\n\n return {\n profile: this.isProfileComplete(detail),\n qualification: this.isQualificationComplete(detail),\n financial: this.isFinancialComplete(detail),\n banking: this.isBankingComplete(detail),\n };\n });\n\n readonly profileForm = this.fb.nonNullable.group({\n organizationName: ['', [Validators.required, Validators.maxLength(255)]],\n contactName: ['', [Validators.required, Validators.maxLength(255)]],\n contactEmail: ['', [Validators.required, Validators.email]],\n contactPhone: ['', [Validators.required, Validators.maxLength(64)]],\n countryCode: ['GB', [Validators.required, Validators.maxLength(8)]],\n });\n\n readonly financialForm = this.fb.nonNullable.group({\n vatMode: ['NON_VAT_REGISTERED', [Validators.required]],\n vatNumber: [''],\n });\n\n readonly bankingForm = this.fb.nonNullable.group({\n bankName: ['', [Validators.required, Validators.maxLength(255)]],\n accountHolderName: ['', [Validators.required, Validators.maxLength(255)]],\n sortCode: ['', [Validators.required, Validators.maxLength(16)]],\n accountNumber: ['', [Validators.required, Validators.maxLength(32)]],\n });\n\n async start(request: CreateOnboardingApplicationRequest): Promise<OnboardingApplicationResponse | null> {\n this.loading.set(true);\n this.error.set(null);\n\n try {\n const response = await firstValueFrom(this.onboardingService.createApplication(request));\n this.application.set(response);\n this.detail.set(null);\n this.loadedApplicationId.set(null);\n return response;\n } catch (error) {\n this.error.set(this.toErrorMessage(error));\n return null;\n } finally {\n this.loading.set(false);\n }\n }\n\n async ensureLoaded(applicationId: string, force = false): Promise<void> {\n if (!applicationId) {\n return;\n }\n\n if (!force && this.loadedApplicationId() === applicationId && this.detail()) {\n return;\n }\n\n this.loading.set(true);\n this.error.set(null);\n\n try {\n const response = await firstValueFrom(this.onboardingService.getApplication(applicationId));\n this.detail.set(response);\n this.loadedApplicationId.set(response.id);\n this.patchForms(response);\n } catch (error) {\n this.error.set(this.toErrorMessage(error));\n } finally {\n this.loading.set(false);\n }\n }\n\n async saveProfile(): Promise<boolean> {\n const applicationId = this.applicationId();\n\n if (!applicationId) {\n return false;\n }\n\n if (this.profileForm.invalid) {\n this.profileForm.markAllAsTouched();\n return false;\n }\n\n this.saving.set(true);\n this.error.set(null);\n\n try {\n const payload: SaveOnboardingProfileRequest = this.profileForm.getRawValue();\n const response = await firstValueFrom(this.onboardingService.saveProfile(applicationId, payload));\n this.application.set(response);\n await this.ensureLoaded(applicationId, true);\n return true;\n } catch (error) {\n this.error.set(this.toErrorMessage(error));\n return false;\n } finally {\n this.saving.set(false);\n }\n }\n\n async saveFinancial(): Promise<boolean> {\n const applicationId = this.applicationId();\n\n if (!applicationId) {\n return false;\n }\n\n if (this.financialForm.invalid) {\n this.financialForm.markAllAsTouched();\n return false;\n }\n\n this.saving.set(true);\n this.error.set(null);\n\n try {\n const rawValue = this.financialForm.getRawValue();\n const payload: SaveOnboardingFinancialRequest = {\n vatMode: rawValue.vatMode as SaveOnboardingFinancialRequest['vatMode'],\n vatNumber: rawValue.vatNumber || undefined,\n };\n const response = await firstValueFrom(this.onboardingService.saveFinancial(applicationId, payload));\n this.application.set(response);\n await this.ensureLoaded(applicationId, true);\n return true;\n } catch (error) {\n this.error.set(this.toErrorMessage(error));\n return false;\n } finally {\n this.saving.set(false);\n }\n }\n\n async saveBanking(): Promise<boolean> {\n const applicationId = this.applicationId();\n\n if (!applicationId) {\n return false;\n }\n\n if (this.bankingForm.invalid) {\n this.bankingForm.markAllAsTouched();\n return false;\n }\n\n this.saving.set(true);\n this.error.set(null);\n\n try {\n const payload: SaveOnboardingBankingRequest = this.bankingForm.getRawValue();\n const response = await firstValueFrom(this.onboardingService.saveBanking(applicationId, payload));\n this.application.set(response);\n await this.ensureLoaded(applicationId, true);\n return true;\n } catch (error) {\n this.error.set(this.toErrorMessage(error));\n return false;\n } finally {\n this.saving.set(false);\n }\n }\n\n async uploadDocument(documentType: OnboardingDocumentType, file: File, replacedDocumentId?: string | null): Promise<boolean> {\n const applicationId = this.applicationId();\n\n if (!applicationId) {\n return false;\n }\n\n this.saving.set(true);\n this.error.set(null);\n\n try {\n const uploadRequest: RequestOnboardingUploadUrlRequest = {\n documentType,\n filename: file.name,\n contentType: file.type,\n fileSize: file.size,\n replacedDocumentId: replacedDocumentId ?? undefined,\n };\n\n const uploadUrl = await firstValueFrom(this.onboardingService.requestUploadUrl(applicationId, uploadRequest));\n\n // const uploadResponse1 = await fetch(uploadUrl.uploadUrl, {\n // method: 'PUT',\n // body: file,\n // headers: {\n // 'Content-Type': file.type || 'application/octet-stream',\n // },\n // mode: 'cors',\n // });\n\n // const uploadResponse = await firstValueFrom(\n // this.http.put(uploadUrl.uploadUrl, file, {\n // headers: {\n // 'Content-Type': file.type || 'application/octet-stream',\n // },\n // }),\n // );\n // console.log(uploadResponse);\n\n // if (!uploadResponse .ok) {\n // throw new Error(`Document upload failed with status ${uploadResponse.status}`);\n // }\n\n const confirmRequest: ConfirmOnboardingDocumentUploadRequest = {\n documentType,\n storageType: uploadUrl.storageType,\n objectKey: uploadUrl.objectKey,\n objectUrl: uploadUrl.uploadUrl,\n originalFilename: file.name,\n contentType: file.type,\n fileSize: file.size,\n replacedDocumentId: replacedDocumentId ?? undefined,\n };\n\n const detail = await firstValueFrom(this.onboardingService.confirmDocumentUpload(applicationId, confirmRequest));\n this.detail.set(detail);\n this.loadedApplicationId.set(detail.id);\n return true;\n } catch (error) {\n this.error.set(this.toErrorMessage(error));\n return false;\n } finally {\n this.saving.set(false);\n }\n }\n\n async submit(): Promise<boolean> {\n const applicationId = this.applicationId();\n\n if (!applicationId) {\n return false;\n }\n\n this.submitting.set(true);\n this.error.set(null);\n\n try {\n const response = await firstValueFrom(this.onboardingService.submit(applicationId));\n this.application.set(response);\n await this.ensureLoaded(applicationId, true);\n return true;\n } catch (error) {\n this.error.set(this.toErrorMessage(error));\n return false;\n } finally {\n this.submitting.set(false);\n }\n }\n\n getDocument(documentType: OnboardingDocumentType): OnboardingDocumentResponse | null {\n return this.documents().find((item) => item.documentType === documentType) ?? null;\n }\n\n getIssueComment(documentType: OnboardingDocumentType): string | null {\n return this.issues().find((item) => item.documentType === documentType)?.comment ?? null;\n }\n\n canAccessStep(step: ApplyRouteStep): boolean {\n const completion = this.completion();\n\n switch (step) {\n case 'profile':\n return true;\n case 'qualification':\n return completion.profile;\n case 'financial':\n return completion.profile && completion.qualification;\n case 'banking':\n return completion.profile && completion.qualification && completion.financial;\n case 'review':\n return completion.profile && completion.qualification && completion.financial && completion.banking;\n case 'submitted': {\n const status = this.status();\n return status === 'SUBMITTED' || status === 'IN_REVIEW' || status === 'APPROVED' || status === 'FAILED';\n }\n default:\n return false;\n }\n }\n\n firstIncompleteStep(): Exclude<ApplyRouteStep, 'submitted'> {\n const completion = this.completion();\n\n if (!completion.profile) {\n return 'profile';\n }\n\n if (!completion.qualification) {\n return 'qualification';\n }\n\n if (!completion.financial) {\n return 'financial';\n }\n\n if (!completion.banking) {\n return 'banking';\n }\n\n return 'review';\n }\n\n private patchForms(detail: OnboardingApplicationDetailResponse): void {\n this.profileForm.patchValue({\n organizationName: detail.organizationName ?? '',\n contactName: detail.contactName ?? '',\n contactEmail: detail.contactEmail ?? '',\n contactPhone: detail.contactPhone ?? '',\n countryCode: detail.countryCode ?? 'GB',\n });\n\n this.financialForm.patchValue({\n vatMode: detail.vatMode ?? 'NON_VAT_REGISTERED',\n vatNumber: detail.vatNumber ?? '',\n });\n\n this.bankingForm.patchValue({\n bankName: detail.bankName ?? '',\n accountHolderName: detail.accountHolderName ?? '',\n sortCode: detail.sortCode ?? '',\n accountNumber: detail.accountNumber ?? '',\n });\n }\n\n private isProfileComplete(detail: OnboardingApplicationDetailResponse): boolean {\n return Boolean(\n detail.organizationName && detail.contactName && detail.contactEmail && detail.contactPhone && detail.countryCode,\n );\n }\n\n private isQualificationComplete(detail: OnboardingApplicationDetailResponse): boolean {\n const uploadedTypes = new Set(detail.documents.map((item) => item.documentType));\n const required = detail.applicantType === 'COMPANY' ? COMPANY_REQUIRED_DOCUMENTS : INDIVIDUAL_REQUIRED_DOCUMENTS;\n return required.every((item) => uploadedTypes.has(item.type));\n }\n\n private isFinancialComplete(detail: OnboardingApplicationDetailResponse): boolean {\n if (!detail.vatMode) {\n return false;\n }\n\n if (detail.vatMode === 'VAT_REGISTERED') {\n return Boolean(detail.vatNumber);\n }\n\n return true;\n }\n\n private isBankingComplete(detail: OnboardingApplicationDetailResponse): boolean {\n return Boolean(detail.bankName && detail.accountHolderName && detail.sortCode && detail.accountNumber);\n }\n\n private toErrorMessage(error: unknown): string {\n if (error instanceof Error && error.message) {\n return error.message;\n }\n\n return 'Unable to complete the onboarding action.';\n }\n}\n","import { inject } from '@angular/core';\nimport { ActivatedRouteSnapshot, CanActivateChildFn, Router } from '@angular/router';\nimport { ApplyRouteStep } from '../models/onboarding-ui.models';\nimport { AgentApplyFacade } from '../store/agent-apply.facade';\n\nexport const applyStepGuard: CanActivateChildFn = async (childRoute) => {\n const facade = inject(AgentApplyFacade);\n const router = inject(Router);\n\n const applicationId = childRoute.parent?.paramMap.get('applicationId') ?? childRoute.paramMap.get('applicationId');\n\n if (!applicationId) {\n return false;\n }\n\n await facade.ensureLoaded(applicationId);\n\n const requiredStep = childRoute.data['requiredStep'] as ApplyRouteStep | undefined;\n\n if (!requiredStep || facade.canAccessStep(requiredStep)) {\n return true;\n }\n\n const fallbackStep = facade.firstIncompleteStep();\n const fallbackSegments = buildFallbackSegments(childRoute, fallbackStep);\n\n if (fallbackSegments.length === 0) {\n return false;\n }\n\n return router.createUrlTree(['/', ...fallbackSegments]);\n};\n\nfunction buildFallbackSegments(route: ActivatedRouteSnapshot, fallbackStep: Exclude<ApplyRouteStep, 'submitted'>): string[] {\n const segments = route.pathFromRoot.flatMap((item) => item.url.map((segment) => segment.path)).filter(Boolean);\n\n if (segments.length === 0) {\n return [];\n }\n\n segments[segments.length - 1] = fallbackStep;\n return segments;\n}\n","import { Routes } from '@angular/router';\nimport { applicationIdGuard } from '../../guards/application-id.guard';\nimport { applyStepGuard } from '../../guards/apply-step.guard';\nimport { AgentApplyFacade } from '../../store/agent-apply.facade';\n\nexport const AGENT_APPLY_ROUTES: Routes = [\n {\n path: '',\n loadComponent: () => import('./agent-apply-start-page').then((m) => m.AgentApplyStartPage),\n },\n {\n path: ':applicationId',\n canActivate: [applicationIdGuard],\n canActivateChild: [applyStepGuard],\n providers: [AgentApplyFacade],\n loadComponent: () => import('./agent-apply-shell-page').then((m) => m.AgentApplyShellPage),\n children: [\n {\n path: '',\n pathMatch: 'full',\n redirectTo: 'profile',\n },\n {\n path: 'profile',\n data: {\n requiredStep: 'profile',\n },\n loadComponent: () => import('./agent-apply-profile-page').then((m) => m.AgentApplyProfilePage),\n },\n {\n path: 'qualification',\n data: {\n requiredStep: 'qualification',\n },\n loadComponent: () => import('./agent-apply-qualification-page').then((m) => m.AgentApplyQualificationPage),\n },\n {\n path: 'financial',\n data: {\n requiredStep: 'financial',\n },\n loadComponent: () => import('./agent-apply-financial-page').then((m) => m.AgentApplyFinancialPage),\n },\n {\n path: 'banking',\n data: {\n requiredStep: 'banking',\n },\n loadComponent: () => import('./agent-apply-banking-page').then((m) => m.AgentApplyBankingPage),\n },\n {\n path: 'review',\n data: {\n requiredStep: 'review',\n },\n loadComponent: () => import('./agent-apply-review-page').then((m) => m.AgentApplyReviewPage),\n },\n {\n path: 'submitted',\n data: {\n requiredStep: 'submitted',\n },\n loadComponent: () => import('./agent-apply-submitted-page').then((m) => m.AgentApplySubmittedPage),\n },\n ],\n },\n];\n","import { Injectable, computed, inject, signal } from '@angular/core';\nimport {\n ConfirmOnboardingDocumentUploadRequest,\n OnboardingApplicantService,\n OnboardingApplicationDetailResponse,\n OnboardingDocumentResponse,\n OnboardingDocumentType,\n OnboardingIssueResponse,\n OnboardingStatus,\n RequestOnboardingUploadUrlRequest,\n} from '@rolatech/angular-services';\nimport { firstValueFrom } from 'rxjs';\n\n@Injectable()\nexport class AgentOnboardingFacade {\n private readonly onboardingService = inject(OnboardingApplicantService);\n\n readonly loading = signal(false);\n readonly saving = signal(false);\n readonly error = signal<string | null>(null);\n\n readonly detail = signal<OnboardingApplicationDetailResponse | null>(null);\n\n private readonly loadedApplicationId = signal<string | null>(null);\n\n readonly status = computed<OnboardingStatus | null>(() => this.detail()?.status ?? null);\n readonly issues = computed<OnboardingIssueResponse[]>(() => this.detail()?.issues ?? []);\n readonly documents = computed<OnboardingDocumentResponse[]>(() => this.detail()?.documents ?? []);\n readonly timeline = computed(() => this.detail()?.timeline ?? []);\n readonly applicationId = computed(() => this.detail()?.id ?? null);\n\n async ensureLoaded(applicationId: string, force = false): Promise<void> {\n if (!applicationId) {\n return;\n }\n\n if (!force && this.loadedApplicationId() === applicationId && this.detail()) {\n return;\n }\n\n this.loading.set(true);\n this.error.set(null);\n\n try {\n const detail = await firstValueFrom(this.onboardingService.getApplication(applicationId));\n this.detail.set(detail);\n this.loadedApplicationId.set(detail.id);\n } catch (error) {\n this.error.set(this.toErrorMessage(error));\n } finally {\n this.loading.set(false);\n }\n }\n\n async reuploadDocument(documentType: OnboardingDocumentType, file: File, replacedDocumentId: string): Promise<boolean> {\n const applicationId = this.applicationId();\n\n if (!applicationId) {\n return false;\n }\n\n this.saving.set(true);\n this.error.set(null);\n\n try {\n const uploadRequest: RequestOnboardingUploadUrlRequest = {\n documentType,\n filename: file.name,\n contentType: file.type,\n fileSize: file.size,\n replacedDocumentId,\n };\n\n const uploadUrl = await firstValueFrom(this.onboardingService.requestUploadUrl(applicationId, uploadRequest));\n\n const uploadResponse = await fetch(uploadUrl.uploadUrl, {\n method: 'PUT',\n body: file,\n headers: {\n 'Content-Type': file.type,\n },\n });\n\n if (!uploadResponse.ok) {\n throw new Error(`Document upload failed with status ${uploadResponse.status}`);\n }\n\n const confirmRequest: ConfirmOnboardingDocumentUploadRequest = {\n documentType,\n storageType: uploadUrl.storageType,\n objectKey: uploadUrl.objectKey,\n objectUrl: uploadUrl.uploadUrl,\n originalFilename: file.name,\n contentType: file.type,\n fileSize: file.size,\n replacedDocumentId,\n };\n\n const detail = await firstValueFrom(this.onboardingService.confirmDocumentUpload(applicationId, confirmRequest));\n this.detail.set(detail);\n this.loadedApplicationId.set(detail.id);\n return true;\n } catch (error) {\n this.error.set(this.toErrorMessage(error));\n return false;\n } finally {\n this.saving.set(false);\n }\n }\n\n async resubmit(): Promise<boolean> {\n const applicationId = this.applicationId();\n\n if (!applicationId) {\n return false;\n }\n\n this.saving.set(true);\n this.error.set(null);\n\n try {\n await firstValueFrom(this.onboardingService.submit(applicationId));\n await this.ensureLoaded(applicationId, true);\n return true;\n } catch (error) {\n this.error.set(this.toErrorMessage(error));\n return false;\n } finally {\n this.saving.set(false);\n }\n }\n\n private toErrorMessage(error: unknown): string {\n if (error instanceof Error && error.message) {\n return error.message;\n }\n\n return 'Unable to load onboarding information.';\n }\n}\n","import { Routes } from '@angular/router';\nimport { applicationIdGuard } from '../../guards/application-id.guard';\nimport { AgentOnboardingFacade } from '../../store/agent-onboarding.facade';\n\nexport const AGENT_ONBOARDING_ROUTES: Routes = [\n {\n path: ':applicationId',\n canActivate: [applicationIdGuard],\n providers: [AgentOnboardingFacade],\n loadComponent: () => import('./agent-onboarding-shell-page').then((m) => m.AgentOnboardingShellPage),\n children: [\n {\n path: '',\n pathMatch: 'full',\n loadComponent: () => import('./agent-onboarding-overview-page').then((m) => m.AgentOnboardingOverviewPage),\n },\n {\n path: 'documents',\n loadComponent: () => import('./agent-onboarding-documents-page').then((m) => m.AgentOnboardingDocumentsPage),\n },\n {\n path: 'issues',\n loadComponent: () => import('./agent-onboarding-issues-page').then((m) => m.AgentOnboardingIssuesPage),\n },\n ],\n },\n];\n","import { Routes } from '@angular/router';\nimport { applicationIdGuard } from '../../guards/application-id.guard';\n\nexport const ADMIN_ONBOARDING_ROUTES: Routes = [\n {\n path: '',\n loadComponent: () => import('./admin-onboarding-index-page').then((m) => m.AdminOnboardingIndexPage),\n },\n {\n path: ':applicationId',\n canActivate: [applicationIdGuard],\n loadComponent: () => import('./admin-onboarding-detail-page').then((m) => m.AdminOnboardingDetailPage),\n },\n {\n path: ':applicationId/review',\n canActivate: [applicationIdGuard],\n loadComponent: () => import('./admin-onboarding-review-page').then((m) => m.AdminOnboardingReviewPage),\n },\n];\n","import { Injectable, computed, inject, signal } from '@angular/core';\nimport {\n OnboardingAdminListQuery,\n OnboardingAdminService,\n OnboardingApplicationResponse,\n OnboardingStatus,\n} from '@rolatech/angular-services';\nimport { firstValueFrom } from 'rxjs';\n\n@Injectable()\nexport class AdminOnboardingListFacade {\n private readonly onboardingAdminService = inject(OnboardingAdminService);\n\n readonly loading = signal(false);\n readonly error = signal<string | null>(null);\n\n readonly filters = signal<OnboardingAdminListQuery>({\n status: undefined,\n search: '',\n });\n\n readonly items = signal<OnboardingApplicationResponse[]>([]);\n\n readonly groupedCounts = computed(() => {\n const result: Record<OnboardingStatus, number> = {\n DRAFT: 0,\n IN_PROGRESS: 0,\n SUBMITTED: 0,\n IN_REVIEW: 0,\n NEED_MORE_INFO: 0,\n APPROVED: 0,\n FAILED: 0,\n };\n\n for (const item of this.items()) {\n result[item.status] += 1;\n }\n\n return result;\n });\n\n async load(query?: Partial<OnboardingAdminListQuery>): Promise<void> {\n if (query) {\n this.filters.update((current) => ({\n ...current,\n ...query,\n }));\n }\n\n this.loading.set(true);\n this.error.set(null);\n\n try {\n const payload = this.filters();\n const items = await firstValueFrom(this.onboardingAdminService.list(payload));\n this.items.set(items);\n } catch (error) {\n this.error.set(this.toErrorMessage(error));\n } finally {\n this.loading.set(false);\n }\n }\n\n setStatus(status: OnboardingStatus | undefined): void {\n this.filters.update((current) => ({\n ...current,\n status,\n }));\n }\n\n setSearch(search: string): void {\n this.filters.update((current) => ({\n ...current,\n search,\n }));\n }\n\n private toErrorMessage(error: unknown): string {\n if (error instanceof Error && error.message) {\n return error.message;\n }\n\n return 'Unable to load onboarding applications.';\n }\n}\n","import { Injectable, inject, signal } from '@angular/core';\nimport { OnboardingAdminService, OnboardingApplicationDetailResponse } from '@rolatech/angular-services';\nimport { firstValueFrom } from 'rxjs';\n\n@Injectable()\nexport class AdminOnboardingDetailFacade {\n private readonly onboardingAdminService = inject(OnboardingAdminService);\n\n readonly loading = signal(false);\n readonly error = signal<string | null>(null);\n readonly detail = signal<OnboardingApplicationDetailResponse | null>(null);\n\n async load(applicationId: string): Promise<void> {\n if (!applicationId) {\n return;\n }\n\n this.loading.set(true);\n this.error.set(null);\n\n try {\n const detail = await firstValueFrom(this.onboardingAdminService.getApplication(applicationId));\n this.detail.set(detail);\n } catch (error) {\n this.error.set(this.toErrorMessage(error));\n } finally {\n this.loading.set(false);\n }\n }\n\n private toErrorMessage(error: unknown): string {\n if (error instanceof Error && error.message) {\n return error.message;\n }\n\n return 'Unable to load onboarding application details.';\n }\n}\n","import { Injectable, inject, signal } from '@angular/core';\nimport {\n ApproveOnboardingApplicationRequest,\n FailOnboardingApplicationRequest,\n NeedMoreInfoOnboardingApplicationRequest,\n OnboardingAdminService,\n OnboardingApplicationDetailResponse,\n OnboardingDocumentType,\n OnboardingIssueType,\n} from '@rolatech/angular-services';\nimport { firstValueFrom } from 'rxjs';\n\n@Injectable()\nexport class AdminOnboardingReviewFacade {\n private readonly onboardingAdminService = inject(OnboardingAdminService);\n\n readonly loading = signal(false);\n readonly saving = signal(false);\n readonly error = signal<string | null>(null);\n\n readonly detail = signal<OnboardingApplicationDetailResponse | null>(null);\n readonly reviewComment = signal('');\n readonly issueDrafts = signal<NeedMoreInfoOnboardingApplicationRequest['issues']>([]);\n\n async load(applicationId: string): Promise<void> {\n if (!applicationId) {\n return;\n }\n\n this.loading.set(true);\n this.error.set(null);\n\n try {\n const detail = await firstValueFrom(this.onboardingAdminService.getApplication(applicationId));\n this.detail.set(detail);\n } catch (error) {\n this.error.set(this.toErrorMessage(error));\n } finally {\n this.loading.set(false);\n }\n }\n\n addFieldIssue(fieldKey: string, comment: string): void {\n this.issueDrafts.update((items) => [\n ...items,\n {\n issueType: 'FIELD' as OnboardingIssueType,\n fieldKey,\n comment,\n },\n ]);\n }\n\n addDocumentIssue(documentType: OnboardingDocumentType, comment: string): void {\n this.issueDrafts.update((items) => [\n ...items,\n {\n issueType: 'DOCUMENT' as OnboardingIssueType,\n documentType,\n comment,\n },\n ]);\n }\n\n removeIssue(index: number): void {\n this.issueDrafts.update((items) => items.filter((_, currentIndex) => currentIndex !== index));\n }\n\n setComment(value: string): void {\n this.reviewComment.set(value);\n }\n\n async startReview(applicationId: string): Promise<boolean> {\n return this.runAction(async () => {\n const detail = await firstValueFrom(this.onboardingAdminService.startReview(applicationId));\n this.detail.set(detail);\n });\n }\n\n async requestMoreInfo(applicationId: string): Promise<boolean> {\n const payload: NeedMoreInfoOnboardingApplicationRequest = {\n comment: this.reviewComment(),\n issues: this.issueDrafts(),\n };\n\n return this.runAction(async () => {\n const detail = await firstValueFrom(this.onboardingAdminService.needMoreInfo(applicationId, payload));\n this.detail.set(detail);\n this.reviewComment.set('');\n this.issueDrafts.set([]);\n });\n }\n\n async approve(applicationId: string): Promise<boolean> {\n const payload: ApproveOnboardingApplicationRequest = {\n comment: this.reviewComment(),\n };\n\n return this.runAction(async () => {\n const detail = await firstValueFrom(this.onboardingAdminService.approve(applicationId, payload));\n this.detail.set(detail);\n this.reviewComment.set('');\n });\n }\n\n async fail(applicationId: string): Promise<boolean> {\n const payload: FailOnboardingApplicationRequest = {\n comment: this.reviewComment(),\n };\n\n return this.runAction(async () => {\n const detail = await firstValueFrom(this.onboardingAdminService.fail(applicationId, payload));\n this.detail.set(detail);\n this.reviewComment.set('');\n });\n }\n\n private async runAction(action: () => Promise<void>): Promise<boolean> {\n this.saving.set(true);\n this.error.set(null);\n\n try {\n await action();\n return true;\n } catch (error) {\n this.error.set(this.toErrorMessage(error));\n return false;\n } finally {\n this.saving.set(false);\n }\n }\n\n private toErrorMessage(error: unknown): string {\n if (error instanceof Error && error.message) {\n return error.message;\n }\n\n return 'Unable to complete the onboarding review action.';\n }\n}\n","import { ChangeDetectionStrategy, Component, input, ViewEncapsulation } from '@angular/core';\n\n@Component({\n selector: 'rolatech-onboarding-page-shell',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: { class: 'block' },\n styles: [\n `\n .rt-onboarding-theme {\n color-scheme: light dark;\n background-color: var(--rt-base-background);\n color: var(--rt-text-primary);\n }\n\n .rt-onboarding-header-leading:empty {\n display: none;\n }\n `,\n ],\n template: `\n <section class=\"rt-onboarding-theme mx-auto w-full max-w-6xl space-y-6 bg-(--rt-base-background) px-4 py-6 text-(--rt-text-primary) sm:px-6 lg:px-8\">\n <header class=\"relative overflow-hidden rounded-3xl border border-(--rt-border-color) bg-(--rt-base-background) p-6 shadow-sm sm:p-8\">\n <div class=\"pointer-events-none absolute -right-10 -top-10 h-36 w-36 rounded-full bg-(--rt-10-percent-layer) blur-2xl\"></div>\n <div class=\"pointer-events-none absolute -bottom-16 left-12 h-36 w-36 rounded-full bg-(--rt-10-percent-layer) blur-2xl\"></div>\n\n <div class=\"relative flex flex-wrap items-start justify-between gap-4\">\n <div class=\"flex min-w-0 items-start gap-3\">\n <div class=\"rt-onboarding-header-leading\">\n <ng-content select=\"[header-leading]\"></ng-content>\n </div>\n\n <div>\n @if (kicker()) {\n <p class=\"text-xs font-semibold uppercase tracking-[0.2em] text-(--rt-text-secondary)\">{{ kicker() }}</p>\n }\n <h1 class=\"mt-1 text-2xl font-semibold tracking-tight text-(--rt-text-primary) sm:text-3xl\">{{ title() }}</h1>\n @if (subtitle()) {\n <p class=\"mt-3 max-w-3xl text-sm text-(--rt-text-secondary) sm:text-base\">{{ subtitle() }}</p>\n }\n </div>\n </div>\n <div class=\"shrink-0\">\n <ng-content select=\"[header-actions]\"></ng-content>\n </div>\n </div>\n </header>\n\n <ng-content select=\"[floating]\"></ng-content>\n\n <div class=\"space-y-6\">\n <ng-content></ng-content>\n </div>\n </section>\n `,\n})\nexport class OnboardingPageShell {\n readonly title = input.required<string>();\n readonly subtitle = input<string>('');\n readonly kicker = input<string>('');\n}\n","import { ChangeDetectionStrategy, Component, computed, input, ViewEncapsulation } from '@angular/core';\nimport { onboardingStatusLabel, OnboardingStatus } from '@rolatech/angular-services';\n\n@Component({\n selector: 'rolatech-onboarding-status-badge',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: { class: 'block' },\n template: `\n <span\n class=\"inline-flex items-center rounded-full border border-(--rt-border-color) px-3 py-1 text-xs font-semibold uppercase tracking-wide\"\n [class]=\"badgeClass()\"\n >\n {{ label() }}\n </span>\n `,\n})\nexport class OnboardingStatusBadge {\n readonly status = input<OnboardingStatus | null>(null);\n\n readonly label = computed(() => {\n return onboardingStatusLabel(this.status());\n });\n\n readonly badgeClass = computed(() => {\n switch (this.status()) {\n case 'APPROVED':\n return 'border-emerald-200 bg-emerald-50 text-emerald-700';\n case 'FAILED':\n return 'border-rose-200 bg-rose-50 text-rose-700';\n case 'NEED_MORE_INFO':\n return 'border-amber-200 bg-amber-50 text-amber-700';\n case 'SUBMITTED':\n case 'IN_REVIEW':\n return 'border-sky-200 bg-sky-50 text-sky-700';\n case 'IN_PROGRESS':\n case 'DRAFT':\n return 'border-(--rt-border-color) bg-(--rt-raised-background) text-(--rt-text-secondary)';\n default:\n return 'border-(--rt-border-color) bg-(--rt-raised-background) text-(--rt-text-secondary)';\n }\n });\n}\n","import { NgClass } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, input, ViewEncapsulation } from '@angular/core';\nimport { RouterLink } from '@angular/router';\nimport { ApplyStepNavItem } from '../../models/onboarding-ui.models';\n\n@Component({\n selector: 'rolatech-onboarding-step-nav',\n standalone: true,\n imports: [RouterLink, NgClass],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: { class: 'block' },\n template: `\n <nav class=\"grid gap-2 sm:grid-cols-2 lg:grid-cols-6\" aria-label=\"Onboarding steps\">\n @for (step of steps(); track step.step) {\n <a\n [routerLink]=\"step.accessible ? step.link : null\"\n class=\"group rounded-2xl border border-(--rt-border-color) px-3 py-3 text-left transition cursor-pointer\"\n [ngClass]=\"\n step.step === activeStep()\n ? 'border-(--rt-brand-color) bg-(--rt-brand-color) text-(--rt-text-primary-inverse) shadow-sm'\n : 'border-(--rt-border-color) bg-(--rt-raised-background) text-(--rt-text-primary) hover:bg-(--rt-raised-background)'\n \"\n [class.cursor-not-allowed]=\"!step.accessible\"\n [class.opacity-60]=\"!step.accessible\"\n >\n <div class=\"flex items-center justify-between gap-2\">\n <span class=\"text-sm font-medium\">{{ step.label }}</span>\n @if (step.completed) {\n <span class=\"text-xs font-semibold text-emerald-700\">Done</span>\n } @else if (!step.accessible) {\n <span class=\"text-xs font-semibold text-(--rt-text-secondary)\">Locked</span>\n }\n </div>\n </a>\n }\n </nav>\n `,\n})\nexport class OnboardingStepNav {\n readonly steps = input<ApplyStepNavItem[]>([]);\n readonly activeStep = input<string>('');\n}\n","import { ChangeDetectionStrategy, Component, input, output, ViewEncapsulation } from '@angular/core';\nimport { OnboardingDocumentResponse, OnboardingDocumentType } from '@rolatech/angular-services';\n\n@Component({\n selector: 'rolatech-onboarding-document-uploader',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: { class: 'block' },\n template: `\n <section class=\"rounded-2xl border border-(--rt-border-color) bg-(--rt-base-background) p-4 shadow-sm\">\n <div class=\"flex flex-wrap items-start justify-between gap-4\">\n <div>\n <h3 class=\"text-sm font-semibold text-(--rt-text-primary)\">{{ label() }}</h3>\n <p class=\"mt-1 text-xs text-(--rt-text-secondary)\">{{ helperText() }}</p>\n\n @if (document(); as existing) {\n <p class=\"mt-2 text-sm text-(--rt-text-primary)\">\n {{ existing.originalFilename }}\n <span class=\"text-(--rt-text-secondary)\">(v{{ existing.version }})</span>\n </p>\n }\n </div>\n\n <label\n class=\"inline-flex cursor-pointer items-center rounded-xl border border-(--rt-border-color) px-3 py-2 text-sm font-medium text-(--rt-text-primary) transition hover:bg-(--rt-raised-background)\"\n [class.pointer-events-none]=\"busy()\"\n [class.opacity-60]=\"busy()\"\n >\n {{ document() ? 'Replace' : 'Upload' }}\n <input\n type=\"file\"\n class=\"hidden\"\n [accept]=\"acceptedTypes()\"\n [disabled]=\"busy()\"\n (change)=\"onFileChange($event)\"\n />\n </label>\n </div>\n\n @if (comment()) {\n <div class=\"mt-3 rounded-xl border border-amber-200 bg-amber-50 px-3 py-2 text-sm text-amber-800\">\n {{ comment() }}\n </div>\n }\n </section>\n `,\n})\nexport class OnboardingDocumentUploader {\n readonly label = input.required<string>();\n readonly helperText = input<string>('Upload a clear and readable file.');\n readonly documentType = input.required<OnboardingDocumentType>();\n readonly document = input<OnboardingDocumentResponse | null>(null);\n readonly comment = input<string | null>(null);\n readonly busy = input(false);\n readonly acceptedTypes = input('image/*,application/pdf');\n\n readonly fileSelected = output<{ documentType: OnboardingDocumentType; file: File; replacedDocumentId?: string }>();\n\n onFileChange(event: Event): void {\n const target = event.target as HTMLInputElement;\n const file = target.files?.[0];\n\n if (!file) {\n return;\n }\n\n this.fileSelected.emit({\n documentType: this.documentType(),\n file,\n replacedDocumentId: this.document()?.id ?? undefined,\n });\n\n target.value = '';\n }\n}\n","import { ChangeDetectionStrategy, Component, input, ViewEncapsulation } from '@angular/core';\nimport { onboardingDocumentTypeLabel, onboardingIssueTypeLabel, OnboardingIssueResponse } from '@rolatech/angular-services';\n\n@Component({\n selector: 'rolatech-onboarding-issue-list',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: { class: 'block' },\n template: `\n <section class=\"rounded-2xl border border-(--rt-border-color) bg-(--rt-base-background) p-5 shadow-sm\">\n <div class=\"mb-4 flex items-center justify-between gap-3\">\n <h3 class=\"text-base font-semibold text-(--rt-text-primary)\">Reviewer Issues</h3>\n <span class=\"rounded-full bg-(--rt-raised-background) px-2 py-1 text-xs font-semibold text-(--rt-text-secondary)\">\n {{ issues().length }}\n </span>\n </div>\n\n @if (issues().length === 0) {\n <p class=\"text-sm text-(--rt-text-secondary)\">No issues raised for this application.</p>\n } @else {\n <div class=\"space-y-3\">\n @for (issue of issues(); track issue.id) {\n <article class=\"rounded-xl border border-amber-200 bg-amber-50 p-3\">\n <div class=\"flex flex-wrap items-center justify-between gap-2\">\n <p class=\"text-xs font-semibold uppercase tracking-wide text-amber-800\">{{ issueTypeLabel(issue.issueType) }}</p>\n @if (issue.resolved) {\n <span class=\"rounded-full border border-emerald-200 bg-emerald-50 px-2 py-0.5 text-xs font-semibold text-emerald-700\">\n Resolved\n </span>\n }\n </div>\n\n @if (issue.fieldKey) {\n <p class=\"mt-2 text-xs text-(--rt-text-secondary)\">Field: {{ issue.fieldKey }}</p>\n }\n\n @if (issue.documentType) {\n <p class=\"mt-2 text-xs text-(--rt-text-secondary)\">Document: {{ documentTypeLabel(issue.documentType) }}</p>\n }\n\n <p class=\"mt-2 text-sm text-(--rt-text-primary)\">{{ issue.comment }}</p>\n </article>\n }\n </div>\n }\n </section>\n `,\n})\nexport class OnboardingIssueList {\n readonly issues = input<OnboardingIssueResponse[]>([]);\n readonly issueTypeLabel = onboardingIssueTypeLabel;\n readonly documentTypeLabel = onboardingDocumentTypeLabel;\n}\n","import { ChangeDetectionStrategy, Component, input, ViewEncapsulation } from '@angular/core';\n\n@Component({\n selector: 'rolatech-onboarding-summary-card',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: { class: 'block' },\n template: `\n <section class=\"rounded-2xl border border-(--rt-border-color) bg-(--rt-base-background) p-5 shadow-sm\">\n <h3 class=\"text-base font-semibold text-(--rt-text-primary)\">{{ title() }}</h3>\n\n <div class=\"mt-4 grid gap-4 md:grid-cols-2\">\n @for (item of items(); track item.label) {\n <div class=\"rounded-xl border border-(--rt-border-color) bg-(--rt-raised-background) p-3\">\n <p class=\"text-xs font-medium uppercase tracking-wide text-(--rt-text-secondary)\">{{ item.label }}</p>\n <p class=\"mt-1 text-sm font-medium text-(--rt-text-primary)\">{{ item.value || '-' }}</p>\n </div>\n }\n </div>\n </section>\n `,\n})\nexport class OnboardingSummaryCard {\n readonly title = input.required<string>();\n readonly items = input<{ label: string; value: string | null | undefined }[]>([]);\n}\n","import { DatePipe } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, computed, input, signal, ViewEncapsulation } from '@angular/core';\nimport { OnboardingTimelineResponse } from '@rolatech/angular-services';\n\n@Component({\n selector: 'rolatech-onboarding-timeline',\n standalone: true,\n imports: [DatePipe],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: { class: 'block' },\n template: `\n <section class=\"rounded-2xl border border-(--rt-border-color) bg-(--rt-base-background) p-5 shadow-sm\">\n <div class=\"flex items-center justify-between gap-3\">\n <h3 class=\"text-base font-semibold text-(--rt-text-primary)\">Timeline</h3>\n @if (canCollapse()) {\n <button\n type=\"button\"\n class=\"rounded-lg border border-(--rt-border-color) px-3 py-1.5 text-xs font-semibold uppercase tracking-wide text-(--rt-text-secondary) transition hover:bg-(--rt-raised-background)\"\n (click)=\"toggle()\"\n >\n {{ panelOpen() ? 'Collapse' : 'Expand' }}\n </button>\n }\n </div>\n\n @if (items().length === 0) {\n <p class=\"mt-4 text-sm text-(--rt-text-secondary)\">No timeline events yet.</p>\n } @else {\n <div\n class=\"mt-4 transform transition-all duration-300 ease-out\"\n [style.maxHeight]=\"panelOpen() ? '1400px' : '0px'\"\n [style.opacity]=\"panelOpen() ? '1' : '0'\"\n [style.transform]=\"panelOpen() ? 'translateX(0)' : 'translateX(24px)'\"\n [style.overflow]=\"panelOpen() ? 'visible' : 'hidden'\"\n >\n <ol class=\"space-y-3\">\n @for (item of items(); track item.id) {\n <li class=\"rounded-xl border border-(--rt-border-color) p-3\">\n <div class=\"flex flex-wrap items-start justify-between gap-2\">\n <p class=\"text-sm font-semibold text-(--rt-text-primary)\">{{ item.title || item.type }}</p>\n <p class=\"text-xs text-(--rt-text-secondary)\">{{ item.createdAt | date: 'medium' }}</p>\n </div>\n @if (item.description) {\n <p class=\"mt-2 text-sm text-(--rt-text-secondary)\">{{ item.description }}</p>\n }\n </li>\n }\n </ol>\n </div>\n }\n </section>\n `,\n})\nexport class OnboardingTimeline {\n readonly items = input<OnboardingTimelineResponse[]>([]);\n readonly collapsible = input(false);\n readonly collapseThreshold = input(6);\n readonly expanded = signal(true);\n\n readonly canCollapse = computed(() => this.collapsible() && this.items().length >= this.collapseThreshold());\n readonly panelOpen = computed(() => !this.canCollapse() || this.expanded());\n\n toggle(): void {\n this.expanded.update((value) => !value);\n }\n}\n","import { ChangeDetectionStrategy, Component, input, output, ViewEncapsulation } from '@angular/core';\nimport { OnboardingTimelineResponse } from '@rolatech/angular-services';\nimport { OnboardingTimeline } from './onboarding-timeline';\n\n@Component({\n selector: 'rolatech-onboarding-timeline-drawer',\n standalone: true,\n imports: [OnboardingTimeline],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: { class: 'block' },\n template: `\n <div\n class=\"fixed inset-0 transition-opacity duration-300 ease-out\"\n [style.opacity]=\"open() ? '1' : '0'\"\n [style.pointer-events]=\"open() ? 'auto' : 'none'\"\n [style.zIndex]=\"zIndex()\"\n >\n <div class=\"absolute inset-0 bg-black/20\" (click)=\"requestClose()\"></div>\n\n <aside\n class=\"absolute right-0 top-0 h-full w-full max-w-2xl border-l border-(--rt-border-color) bg-(--rt-base-background) p-5 shadow-2xl transition-transform duration-300 ease-out\"\n [style.transform]=\"open() ? 'translateX(0)' : 'translateX(100%)'\"\n >\n <div class=\"mb-4 flex items-center justify-between gap-3\">\n <h3 class=\"text-base font-semibold text-(--rt-text-primary)\">{{ title() }}</h3>\n <button\n type=\"button\"\n class=\"rounded-lg border border-(--rt-border-color) px-3 py-1.5 text-xs font-semibold uppercase tracking-wide text-(--rt-text-secondary) transition hover:bg-(--rt-raised-background)\"\n (click)=\"requestClose()\"\n >\n Close\n </button>\n </div>\n\n <div class=\"h-[calc(100vh-6rem)] overflow-auto pr-1\">\n <rolatech-onboarding-timeline [items]=\"items()\" />\n </div>\n </aside>\n </div>\n `,\n})\nexport class OnboardingTimelineDrawer {\n readonly open = input(false);\n readonly title = input('Application Timeline');\n readonly items = input<OnboardingTimelineResponse[]>([]);\n readonly zIndex = input(9100);\n readonly closeRequested = output<void>();\n\n requestClose(): void {\n this.closeRequested.emit();\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,35 @@
1
+ {
2
+ "name": "@rolatech/angular-onboarding",
3
+ "version": "20.3.0-beta.2",
4
+ "private": false,
5
+ "peerDependencies": {
6
+ "@angular/common": ">=20.0.0 <22.0.0",
7
+ "@angular/core": ">=20.0.0 <22.0.0",
8
+ "@angular/forms": ">=20.0.0 <22.0.0",
9
+ "@angular/router": ">=20.0.0 <22.0.0",
10
+ "rxjs": "^7.8.0"
11
+ },
12
+ "sideEffects": false,
13
+ "repository": {
14
+ "type": "git",
15
+ "url": "https://github.com/viablecell/rolatech-web.git"
16
+ },
17
+ "license": "MIT",
18
+ "publishConfig": {
19
+ "access": "public"
20
+ },
21
+ "module": "fesm2022/rolatech-angular-onboarding.mjs",
22
+ "typings": "types/rolatech-angular-onboarding.d.ts",
23
+ "exports": {
24
+ "./package.json": {
25
+ "default": "./package.json"
26
+ },
27
+ ".": {
28
+ "types": "./types/rolatech-angular-onboarding.d.ts",
29
+ "default": "./fesm2022/rolatech-angular-onboarding.mjs"
30
+ }
31
+ },
32
+ "dependencies": {
33
+ "tslib": "^2.3.0"
34
+ }
35
+ }
@@ -0,0 +1,244 @@
1
+ import { Routes, CanActivateFn, CanActivateChildFn } from '@angular/router';
2
+ import * as _angular_forms from '@angular/forms';
3
+ import * as _rolatech_angular_services from '@rolatech/angular-services';
4
+ import { OnboardingDocumentType, OnboardingApplicationResponse, OnboardingApplicationDetailResponse, OnboardingStatus, OnboardingDocumentResponse, OnboardingIssueResponse, CreateOnboardingApplicationRequest, OnboardingAdminListQuery, onboardingIssueTypeLabel, onboardingDocumentTypeLabel, OnboardingTimelineResponse } from '@rolatech/angular-services';
5
+ import * as _angular_core from '@angular/core';
6
+
7
+ declare const AGENT_APPLY_ROUTES: Routes;
8
+
9
+ declare const AGENT_ONBOARDING_ROUTES: Routes;
10
+
11
+ declare const ADMIN_ONBOARDING_ROUTES: Routes;
12
+
13
+ type ApplyRouteStep = 'profile' | 'qualification' | 'financial' | 'banking' | 'review' | 'submitted';
14
+ interface ApplyStepCompletion {
15
+ profile: boolean;
16
+ qualification: boolean;
17
+ financial: boolean;
18
+ banking: boolean;
19
+ }
20
+ interface ApplyStepNavItem {
21
+ label: string;
22
+ step: ApplyRouteStep;
23
+ link: string[];
24
+ completed: boolean;
25
+ accessible: boolean;
26
+ }
27
+ interface RequiredDocumentSpec {
28
+ type: OnboardingDocumentType;
29
+ label: string;
30
+ }
31
+
32
+ declare class AgentApplyFacade {
33
+ private readonly onboardingService;
34
+ private readonly fb;
35
+ private http;
36
+ readonly loading: _angular_core.WritableSignal<boolean>;
37
+ readonly saving: _angular_core.WritableSignal<boolean>;
38
+ readonly submitting: _angular_core.WritableSignal<boolean>;
39
+ readonly error: _angular_core.WritableSignal<string | null>;
40
+ readonly application: _angular_core.WritableSignal<OnboardingApplicationResponse | null>;
41
+ readonly detail: _angular_core.WritableSignal<OnboardingApplicationDetailResponse | null>;
42
+ private readonly loadedApplicationId;
43
+ readonly applicationId: _angular_core.Signal<string | null>;
44
+ readonly status: _angular_core.Signal<OnboardingStatus | null>;
45
+ readonly documents: _angular_core.Signal<OnboardingDocumentResponse[]>;
46
+ readonly issues: _angular_core.Signal<OnboardingIssueResponse[]>;
47
+ readonly timeline: _angular_core.Signal<_rolatech_angular_services.OnboardingTimelineResponse[]>;
48
+ readonly requiredDocuments: _angular_core.Signal<RequiredDocumentSpec[]>;
49
+ readonly completion: _angular_core.Signal<ApplyStepCompletion>;
50
+ readonly profileForm: _angular_forms.FormGroup<{
51
+ organizationName: _angular_forms.FormControl<string>;
52
+ contactName: _angular_forms.FormControl<string>;
53
+ contactEmail: _angular_forms.FormControl<string>;
54
+ contactPhone: _angular_forms.FormControl<string>;
55
+ countryCode: _angular_forms.FormControl<string>;
56
+ }>;
57
+ readonly financialForm: _angular_forms.FormGroup<{
58
+ vatMode: _angular_forms.FormControl<string>;
59
+ vatNumber: _angular_forms.FormControl<string>;
60
+ }>;
61
+ readonly bankingForm: _angular_forms.FormGroup<{
62
+ bankName: _angular_forms.FormControl<string>;
63
+ accountHolderName: _angular_forms.FormControl<string>;
64
+ sortCode: _angular_forms.FormControl<string>;
65
+ accountNumber: _angular_forms.FormControl<string>;
66
+ }>;
67
+ start(request: CreateOnboardingApplicationRequest): Promise<OnboardingApplicationResponse | null>;
68
+ ensureLoaded(applicationId: string, force?: boolean): Promise<void>;
69
+ saveProfile(): Promise<boolean>;
70
+ saveFinancial(): Promise<boolean>;
71
+ saveBanking(): Promise<boolean>;
72
+ uploadDocument(documentType: OnboardingDocumentType, file: File, replacedDocumentId?: string | null): Promise<boolean>;
73
+ submit(): Promise<boolean>;
74
+ getDocument(documentType: OnboardingDocumentType): OnboardingDocumentResponse | null;
75
+ getIssueComment(documentType: OnboardingDocumentType): string | null;
76
+ canAccessStep(step: ApplyRouteStep): boolean;
77
+ firstIncompleteStep(): Exclude<ApplyRouteStep, 'submitted'>;
78
+ private patchForms;
79
+ private isProfileComplete;
80
+ private isQualificationComplete;
81
+ private isFinancialComplete;
82
+ private isBankingComplete;
83
+ private toErrorMessage;
84
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<AgentApplyFacade, never>;
85
+ static ɵprov: _angular_core.ɵɵInjectableDeclaration<AgentApplyFacade>;
86
+ }
87
+
88
+ declare class AgentOnboardingFacade {
89
+ private readonly onboardingService;
90
+ readonly loading: _angular_core.WritableSignal<boolean>;
91
+ readonly saving: _angular_core.WritableSignal<boolean>;
92
+ readonly error: _angular_core.WritableSignal<string | null>;
93
+ readonly detail: _angular_core.WritableSignal<OnboardingApplicationDetailResponse | null>;
94
+ private readonly loadedApplicationId;
95
+ readonly status: _angular_core.Signal<OnboardingStatus | null>;
96
+ readonly issues: _angular_core.Signal<OnboardingIssueResponse[]>;
97
+ readonly documents: _angular_core.Signal<OnboardingDocumentResponse[]>;
98
+ readonly timeline: _angular_core.Signal<_rolatech_angular_services.OnboardingTimelineResponse[]>;
99
+ readonly applicationId: _angular_core.Signal<string | null>;
100
+ ensureLoaded(applicationId: string, force?: boolean): Promise<void>;
101
+ reuploadDocument(documentType: OnboardingDocumentType, file: File, replacedDocumentId: string): Promise<boolean>;
102
+ resubmit(): Promise<boolean>;
103
+ private toErrorMessage;
104
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<AgentOnboardingFacade, never>;
105
+ static ɵprov: _angular_core.ɵɵInjectableDeclaration<AgentOnboardingFacade>;
106
+ }
107
+
108
+ declare class AdminOnboardingListFacade {
109
+ private readonly onboardingAdminService;
110
+ readonly loading: _angular_core.WritableSignal<boolean>;
111
+ readonly error: _angular_core.WritableSignal<string | null>;
112
+ readonly filters: _angular_core.WritableSignal<OnboardingAdminListQuery>;
113
+ readonly items: _angular_core.WritableSignal<OnboardingApplicationResponse[]>;
114
+ readonly groupedCounts: _angular_core.Signal<Record<OnboardingStatus, number>>;
115
+ load(query?: Partial<OnboardingAdminListQuery>): Promise<void>;
116
+ setStatus(status: OnboardingStatus | undefined): void;
117
+ setSearch(search: string): void;
118
+ private toErrorMessage;
119
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<AdminOnboardingListFacade, never>;
120
+ static ɵprov: _angular_core.ɵɵInjectableDeclaration<AdminOnboardingListFacade>;
121
+ }
122
+
123
+ declare class AdminOnboardingDetailFacade {
124
+ private readonly onboardingAdminService;
125
+ readonly loading: _angular_core.WritableSignal<boolean>;
126
+ readonly error: _angular_core.WritableSignal<string | null>;
127
+ readonly detail: _angular_core.WritableSignal<OnboardingApplicationDetailResponse | null>;
128
+ load(applicationId: string): Promise<void>;
129
+ private toErrorMessage;
130
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<AdminOnboardingDetailFacade, never>;
131
+ static ɵprov: _angular_core.ɵɵInjectableDeclaration<AdminOnboardingDetailFacade>;
132
+ }
133
+
134
+ declare class AdminOnboardingReviewFacade {
135
+ private readonly onboardingAdminService;
136
+ readonly loading: _angular_core.WritableSignal<boolean>;
137
+ readonly saving: _angular_core.WritableSignal<boolean>;
138
+ readonly error: _angular_core.WritableSignal<string | null>;
139
+ readonly detail: _angular_core.WritableSignal<OnboardingApplicationDetailResponse | null>;
140
+ readonly reviewComment: _angular_core.WritableSignal<string>;
141
+ readonly issueDrafts: _angular_core.WritableSignal<_rolatech_angular_services.NeedMoreInfoOnboardingIssueRequest[]>;
142
+ load(applicationId: string): Promise<void>;
143
+ addFieldIssue(fieldKey: string, comment: string): void;
144
+ addDocumentIssue(documentType: OnboardingDocumentType, comment: string): void;
145
+ removeIssue(index: number): void;
146
+ setComment(value: string): void;
147
+ startReview(applicationId: string): Promise<boolean>;
148
+ requestMoreInfo(applicationId: string): Promise<boolean>;
149
+ approve(applicationId: string): Promise<boolean>;
150
+ fail(applicationId: string): Promise<boolean>;
151
+ private runAction;
152
+ private toErrorMessage;
153
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<AdminOnboardingReviewFacade, never>;
154
+ static ɵprov: _angular_core.ɵɵInjectableDeclaration<AdminOnboardingReviewFacade>;
155
+ }
156
+
157
+ declare class OnboardingPageShell {
158
+ readonly title: _angular_core.InputSignal<string>;
159
+ readonly subtitle: _angular_core.InputSignal<string>;
160
+ readonly kicker: _angular_core.InputSignal<string>;
161
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<OnboardingPageShell, never>;
162
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<OnboardingPageShell, "rolatech-onboarding-page-shell", never, { "title": { "alias": "title"; "required": true; "isSignal": true; }; "subtitle": { "alias": "subtitle"; "required": false; "isSignal": true; }; "kicker": { "alias": "kicker"; "required": false; "isSignal": true; }; }, {}, never, ["[header-leading]", "[header-actions]", "[floating]", "*"], true, never>;
163
+ }
164
+
165
+ declare class OnboardingStatusBadge {
166
+ readonly status: _angular_core.InputSignal<OnboardingStatus | null>;
167
+ readonly label: _angular_core.Signal<string>;
168
+ readonly badgeClass: _angular_core.Signal<"border-emerald-200 bg-emerald-50 text-emerald-700" | "border-rose-200 bg-rose-50 text-rose-700" | "border-amber-200 bg-amber-50 text-amber-700" | "border-sky-200 bg-sky-50 text-sky-700" | "border-(--rt-border-color) bg-(--rt-raised-background) text-(--rt-text-secondary)">;
169
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<OnboardingStatusBadge, never>;
170
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<OnboardingStatusBadge, "rolatech-onboarding-status-badge", never, { "status": { "alias": "status"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
171
+ }
172
+
173
+ declare class OnboardingStepNav {
174
+ readonly steps: _angular_core.InputSignal<ApplyStepNavItem[]>;
175
+ readonly activeStep: _angular_core.InputSignal<string>;
176
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<OnboardingStepNav, never>;
177
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<OnboardingStepNav, "rolatech-onboarding-step-nav", never, { "steps": { "alias": "steps"; "required": false; "isSignal": true; }; "activeStep": { "alias": "activeStep"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
178
+ }
179
+
180
+ declare class OnboardingDocumentUploader {
181
+ readonly label: _angular_core.InputSignal<string>;
182
+ readonly helperText: _angular_core.InputSignal<string>;
183
+ readonly documentType: _angular_core.InputSignal<OnboardingDocumentType>;
184
+ readonly document: _angular_core.InputSignal<OnboardingDocumentResponse | null>;
185
+ readonly comment: _angular_core.InputSignal<string | null>;
186
+ readonly busy: _angular_core.InputSignal<boolean>;
187
+ readonly acceptedTypes: _angular_core.InputSignal<string>;
188
+ readonly fileSelected: _angular_core.OutputEmitterRef<{
189
+ documentType: OnboardingDocumentType;
190
+ file: File;
191
+ replacedDocumentId?: string;
192
+ }>;
193
+ onFileChange(event: Event): void;
194
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<OnboardingDocumentUploader, never>;
195
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<OnboardingDocumentUploader, "rolatech-onboarding-document-uploader", never, { "label": { "alias": "label"; "required": true; "isSignal": true; }; "helperText": { "alias": "helperText"; "required": false; "isSignal": true; }; "documentType": { "alias": "documentType"; "required": true; "isSignal": true; }; "document": { "alias": "document"; "required": false; "isSignal": true; }; "comment": { "alias": "comment"; "required": false; "isSignal": true; }; "busy": { "alias": "busy"; "required": false; "isSignal": true; }; "acceptedTypes": { "alias": "acceptedTypes"; "required": false; "isSignal": true; }; }, { "fileSelected": "fileSelected"; }, never, never, true, never>;
196
+ }
197
+
198
+ declare class OnboardingIssueList {
199
+ readonly issues: _angular_core.InputSignal<OnboardingIssueResponse[]>;
200
+ readonly issueTypeLabel: typeof onboardingIssueTypeLabel;
201
+ readonly documentTypeLabel: typeof onboardingDocumentTypeLabel;
202
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<OnboardingIssueList, never>;
203
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<OnboardingIssueList, "rolatech-onboarding-issue-list", never, { "issues": { "alias": "issues"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
204
+ }
205
+
206
+ declare class OnboardingSummaryCard {
207
+ readonly title: _angular_core.InputSignal<string>;
208
+ readonly items: _angular_core.InputSignal<{
209
+ label: string;
210
+ value: string | null | undefined;
211
+ }[]>;
212
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<OnboardingSummaryCard, never>;
213
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<OnboardingSummaryCard, "rolatech-onboarding-summary-card", never, { "title": { "alias": "title"; "required": true; "isSignal": true; }; "items": { "alias": "items"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
214
+ }
215
+
216
+ declare class OnboardingTimeline {
217
+ readonly items: _angular_core.InputSignal<OnboardingTimelineResponse[]>;
218
+ readonly collapsible: _angular_core.InputSignal<boolean>;
219
+ readonly collapseThreshold: _angular_core.InputSignal<number>;
220
+ readonly expanded: _angular_core.WritableSignal<boolean>;
221
+ readonly canCollapse: _angular_core.Signal<boolean>;
222
+ readonly panelOpen: _angular_core.Signal<boolean>;
223
+ toggle(): void;
224
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<OnboardingTimeline, never>;
225
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<OnboardingTimeline, "rolatech-onboarding-timeline", never, { "items": { "alias": "items"; "required": false; "isSignal": true; }; "collapsible": { "alias": "collapsible"; "required": false; "isSignal": true; }; "collapseThreshold": { "alias": "collapseThreshold"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
226
+ }
227
+
228
+ declare class OnboardingTimelineDrawer {
229
+ readonly open: _angular_core.InputSignal<boolean>;
230
+ readonly title: _angular_core.InputSignal<string>;
231
+ readonly items: _angular_core.InputSignal<OnboardingTimelineResponse[]>;
232
+ readonly zIndex: _angular_core.InputSignal<number>;
233
+ readonly closeRequested: _angular_core.OutputEmitterRef<void>;
234
+ requestClose(): void;
235
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<OnboardingTimelineDrawer, never>;
236
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<OnboardingTimelineDrawer, "rolatech-onboarding-timeline-drawer", never, { "open": { "alias": "open"; "required": false; "isSignal": true; }; "title": { "alias": "title"; "required": false; "isSignal": true; }; "items": { "alias": "items"; "required": false; "isSignal": true; }; "zIndex": { "alias": "zIndex"; "required": false; "isSignal": true; }; }, { "closeRequested": "closeRequested"; }, never, never, true, never>;
237
+ }
238
+
239
+ declare const applicationIdGuard: CanActivateFn;
240
+
241
+ declare const applyStepGuard: CanActivateChildFn;
242
+
243
+ export { ADMIN_ONBOARDING_ROUTES, AGENT_APPLY_ROUTES, AGENT_ONBOARDING_ROUTES, AdminOnboardingDetailFacade, AdminOnboardingListFacade, AdminOnboardingReviewFacade, AgentApplyFacade, AgentOnboardingFacade, OnboardingDocumentUploader, OnboardingIssueList, OnboardingPageShell, OnboardingStatusBadge, OnboardingStepNav, OnboardingSummaryCard, OnboardingTimeline, OnboardingTimelineDrawer, applicationIdGuard, applyStepGuard };
244
+ export type { ApplyRouteStep, ApplyStepCompletion, ApplyStepNavItem, RequiredDocumentSpec };