@rolatech/angular-onboarding 20.3.0-beta.2 → 20.3.0-beta.4

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 (40) hide show
  1. package/README.md +1 -1
  2. package/fesm2022/rolatech-angular-onboarding-admin-onboarding-detail-page-DREEMvoT.mjs +720 -0
  3. package/fesm2022/rolatech-angular-onboarding-admin-onboarding-detail-page-DREEMvoT.mjs.map +1 -0
  4. package/fesm2022/rolatech-angular-onboarding-admin-onboarding-index-page-DP7wffLd.mjs +313 -0
  5. package/fesm2022/rolatech-angular-onboarding-admin-onboarding-index-page-DP7wffLd.mjs.map +1 -0
  6. package/fesm2022/rolatech-angular-onboarding-agent-apply-form-page-y02hYlN_.mjs +446 -0
  7. package/fesm2022/rolatech-angular-onboarding-agent-apply-form-page-y02hYlN_.mjs.map +1 -0
  8. package/fesm2022/rolatech-angular-onboarding-agent-apply-result-page-CEL4nWb_.mjs +141 -0
  9. package/fesm2022/rolatech-angular-onboarding-agent-apply-result-page-CEL4nWb_.mjs.map +1 -0
  10. package/fesm2022/rolatech-angular-onboarding-agent-apply-review-page-DG_D03YW.mjs +453 -0
  11. package/fesm2022/rolatech-angular-onboarding-agent-apply-review-page-DG_D03YW.mjs.map +1 -0
  12. package/fesm2022/{rolatech-angular-onboarding-agent-apply-shell-page-DibWYeD1.mjs → rolatech-angular-onboarding-agent-apply-shell-page-CaTvnFzk.mjs} +27 -40
  13. package/fesm2022/rolatech-angular-onboarding-agent-apply-shell-page-CaTvnFzk.mjs.map +1 -0
  14. package/fesm2022/{rolatech-angular-onboarding-agent-apply-start-page-DC7gyOnS.mjs → rolatech-angular-onboarding-agent-apply-start-page-BfqO2YWB.mjs} +31 -29
  15. package/fesm2022/rolatech-angular-onboarding-agent-apply-start-page-BfqO2YWB.mjs.map +1 -0
  16. package/fesm2022/{rolatech-angular-onboarding-agent-onboarding-documents-page-DWBGTj5J.mjs → rolatech-angular-onboarding-agent-onboarding-documents-page-BKDYZE0e.mjs} +79 -6
  17. package/fesm2022/rolatech-angular-onboarding-agent-onboarding-documents-page-BKDYZE0e.mjs.map +1 -0
  18. package/fesm2022/rolatech-angular-onboarding.mjs +2251 -233
  19. package/fesm2022/rolatech-angular-onboarding.mjs.map +1 -1
  20. package/package.json +1 -1
  21. package/types/rolatech-angular-onboarding.d.ts +219 -12
  22. package/fesm2022/rolatech-angular-onboarding-admin-onboarding-detail-page-DKJQX3cs.mjs +0 -224
  23. package/fesm2022/rolatech-angular-onboarding-admin-onboarding-detail-page-DKJQX3cs.mjs.map +0 -1
  24. package/fesm2022/rolatech-angular-onboarding-admin-onboarding-index-page-BO4pC_NU.mjs +0 -206
  25. package/fesm2022/rolatech-angular-onboarding-admin-onboarding-index-page-BO4pC_NU.mjs.map +0 -1
  26. package/fesm2022/rolatech-angular-onboarding-agent-apply-banking-page-VYNfR4fy.mjs +0 -133
  27. package/fesm2022/rolatech-angular-onboarding-agent-apply-banking-page-VYNfR4fy.mjs.map +0 -1
  28. package/fesm2022/rolatech-angular-onboarding-agent-apply-financial-page-Ck3Rowke.mjs +0 -132
  29. package/fesm2022/rolatech-angular-onboarding-agent-apply-financial-page-Ck3Rowke.mjs.map +0 -1
  30. package/fesm2022/rolatech-angular-onboarding-agent-apply-profile-page-DNepDxHu.mjs +0 -122
  31. package/fesm2022/rolatech-angular-onboarding-agent-apply-profile-page-DNepDxHu.mjs.map +0 -1
  32. package/fesm2022/rolatech-angular-onboarding-agent-apply-qualification-page-CSwupuKt.mjs +0 -108
  33. package/fesm2022/rolatech-angular-onboarding-agent-apply-qualification-page-CSwupuKt.mjs.map +0 -1
  34. package/fesm2022/rolatech-angular-onboarding-agent-apply-review-page-DugCjfvK.mjs +0 -182
  35. package/fesm2022/rolatech-angular-onboarding-agent-apply-review-page-DugCjfvK.mjs.map +0 -1
  36. package/fesm2022/rolatech-angular-onboarding-agent-apply-shell-page-DibWYeD1.mjs.map +0 -1
  37. package/fesm2022/rolatech-angular-onboarding-agent-apply-start-page-DC7gyOnS.mjs.map +0 -1
  38. package/fesm2022/rolatech-angular-onboarding-agent-apply-submitted-page-BMkV2V8K.mjs +0 -55
  39. package/fesm2022/rolatech-angular-onboarding-agent-apply-submitted-page-BMkV2V8K.mjs.map +0 -1
  40. package/fesm2022/rolatech-angular-onboarding-agent-onboarding-documents-page-DWBGTj5J.mjs.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rolatech-angular-onboarding-admin-onboarding-detail-page-DREEMvoT.mjs","sources":["../../../../packages/angular-onboarding/src/lib/pages/admin-onboarding/admin-onboarding-detail-page.ts"],"sourcesContent":["import { ChangeDetectionStrategy, Component, computed, effect, inject, signal, ViewEncapsulation } from '@angular/core';\nimport { toSignal } from '@angular/core/rxjs-interop';\nimport { ActivatedRoute, RouterLink } from '@angular/router';\nimport {\n onboardingApplicantTypeLabel,\n OnboardingDocumentResponse,\n onboardingDocumentTypeLabel,\n onboardingStatusLabel,\n onboardingVatModeLabel,\n OnboardingDocumentType,\n} from '@rolatech/angular-services';\nimport { PlatformPageHeader, PlatformStatCard } from '@rolatech/angular-platform';\nimport { OnboardingDocumentPreviewDialog } from '../../components/onboarding/onboarding-document-preview-dialog';\nimport { OnboardingIssueList } from '../../components/onboarding/onboarding-issue-list';\nimport { OnboardingReviewIssuesBanner } from '../../components/onboarding/onboarding-review-issues-banner';\nimport { OnboardingReviewRow } from '../../components/onboarding/onboarding-review-row';\nimport { OnboardingStatusBadge } from '../../components/onboarding/onboarding-status-badge';\nimport { OnboardingTimelineDrawer } from '../../components/onboarding/onboarding-timeline-drawer';\nimport {\n OnboardingReviewIssueDraft,\n OnboardingReviewIssueOption,\n onboardingDocumentIssueOptions,\n onboardingFieldIssueOptions,\n} from '../../models/onboarding-review.models';\nimport { AdminOnboardingReviewFacade } from '../../store/admin-onboarding-review.facade';\n\ninterface AdminReviewItem {\n key: string;\n label: string;\n value: string | null | undefined;\n helper: string;\n}\n\ninterface AdminDocumentReviewItem {\n documentType: OnboardingDocumentType;\n label: string;\n value: string | null | undefined;\n helper: string;\n document: OnboardingDocumentResponse | null;\n}\n\n@Component({\n selector: 'rolatech-admin-onboarding-detail-page',\n standalone: true,\n imports: [\n RouterLink,\n PlatformPageHeader,\n PlatformStatCard,\n OnboardingStatusBadge,\n OnboardingIssueList,\n OnboardingTimelineDrawer,\n OnboardingReviewRow,\n OnboardingReviewIssuesBanner,\n OnboardingDocumentPreviewDialog,\n ],\n providers: [AdminOnboardingReviewFacade],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: { class: 'block' },\n template: `\n <section class=\"rt-platform-theme flex flex-col gap-6 bg-(--rt-base-background) p-6 text-(--rt-text-primary)\">\n <rolatech-platform-page-header>\n <div header-left class=\"space-y-2\">\n <div class=\"flex flex-wrap items-center gap-2 text-sm text-muted-foreground\">\n <a [routerLink]=\"['../']\" class=\"hover:underline cursor-pointer\">Agent Applications</a>\n @if (facade.detail(); as detail) {\n <span>/</span>\n <span>{{ detail.organizationName || detail.contactName || detail.id }}</span>\n }\n </div>\n\n <div>\n <h1 class=\"text-2xl font-semibold tracking-tight\">{{ title() }}</h1>\n <p class=\"mt-1 text-sm text-muted-foreground\">{{ subtitle() }}</p>\n </div>\n </div>\n\n <div header-actions>\n @if (facade.detail()?.status || null; as status) {\n <rolatech-onboarding-status-badge [status]=\"status\" />\n }\n <a\n [routerLink]=\"['review']\"\n class=\"inline-flex items-center rounded-xl border border-(--rt-border-color) px-4 py-2 text-sm font-medium hover:bg-(--rt-raised-background) cursor-pointer\"\n >\n Review Page\n </a>\n <button\n type=\"button\"\n class=\"inline-flex items-center rounded-xl border border-(--rt-border-color) px-4 py-2 text-sm font-medium\"\n (click)=\"openTimeline()\"\n >\n Timeline\n </button>\n </div>\n </rolatech-platform-page-header>\n\n <section class=\"grid gap-4 md:grid-cols-2 xl:grid-cols-4\">\n <rolatech-platform-stat-card>\n <div stat-label>Documents</div>\n <div stat-value>{{ documentCount() }}</div>\n </rolatech-platform-stat-card>\n\n <rolatech-platform-stat-card>\n <div stat-label>Open Issues</div>\n <div stat-value>{{ openIssueCount() }}</div>\n </rolatech-platform-stat-card>\n\n <rolatech-platform-stat-card>\n <div stat-label>Timeline Events</div>\n <div stat-value>{{ timelineCount() }}</div>\n </rolatech-platform-stat-card>\n\n <rolatech-platform-stat-card>\n <div stat-label>Draft Issues</div>\n <div stat-value>{{ facade.issueDrafts().length }}</div>\n </rolatech-platform-stat-card>\n </section>\n\n @if (facade.error()) {\n <div class=\"rounded-2xl border border-rose-200 bg-rose-50 px-4 py-3 text-sm text-rose-700\">{{ facade.error() }}</div>\n }\n\n @if (facade.detail(); as detail) {\n <div class=\"space-y-4\">\n <section class=\"rounded-2xl border border-(--rt-border-color) bg-card p-5 shadow-sm\">\n <div class=\"flex flex-wrap items-center gap-3 text-sm text-muted-foreground\">\n <span>Application ID: <span class=\"font-semibold text-(--rt-text-primary)\">{{ detail.id }}</span></span>\n <span>•</span>\n <span>{{ onboardingStatusLabel(detail.status) }}</span>\n <span>•</span>\n <span>{{ onboardingApplicantTypeLabel(detail.applicantType) }}</span>\n <span>•</span>\n <span>{{ countryLabel(detail.companyCountry) }}</span>\n </div>\n </section>\n\n @if (detail.status === 'NEED_MORE_INFO') {\n <rolatech-onboarding-review-issues-banner [issues]=\"detail.issues\" [status]=\"detail.status\" />\n }\n\n <section class=\"space-y-4 rounded-3xl border border-(--rt-border-color) bg-(--rt-base-background) p-6 shadow-sm\">\n <div class=\"flex flex-wrap items-start justify-between gap-4\">\n <div class=\"space-y-2\">\n <h2 class=\"text-lg font-semibold text-(--rt-text-primary)\">Inline Review Workspace</h2>\n <p class=\"max-w-2xl text-sm text-(--rt-text-secondary)\">\n Review the application in place. Mark a field or document as passed, or leave an issue directly beside the item that needs correction.\n </p>\n </div>\n\n <span class=\"rounded-full border border-(--rt-border-color) bg-(--rt-raised-background) px-3 py-1 text-xs font-semibold text-(--rt-text-secondary)\">\n {{ facade.issueDrafts().length }} draft issues\n </span>\n </div>\n\n <label class=\"grid gap-2\">\n <span class=\"text-sm font-medium text-(--rt-text-secondary)\">Review summary</span>\n <textarea\n class=\"min-h-28 rounded-xl border border-(--rt-border-color) px-3 py-2\"\n [value]=\"facade.reviewComment()\"\n (input)=\"setComment($event)\"\n placeholder=\"Add a high-level review note or final decision context...\"\n ></textarea>\n </label>\n\n <div class=\"flex flex-wrap gap-3\">\n <button\n type=\"button\"\n class=\"rounded-xl border border-(--rt-border-color) px-4 py-2 text-sm font-semibold text-(--rt-text-secondary) hover:bg-(--rt-raised-background)\"\n [disabled]=\"facade.saving()\"\n (click)=\"startReview()\"\n >\n Start Review\n </button>\n\n <button\n type=\"button\"\n class=\"rounded-xl border border-amber-300 bg-amber-50 px-4 py-2 text-sm font-semibold text-amber-800 hover:bg-amber-100\"\n [disabled]=\"facade.saving()\"\n (click)=\"needMoreInfo()\"\n >\n Need More Info\n </button>\n\n <button\n type=\"button\"\n class=\"rounded-xl border border-emerald-300 bg-emerald-50 px-4 py-2 text-sm font-semibold text-emerald-800 hover:bg-emerald-100\"\n [disabled]=\"facade.saving()\"\n (click)=\"approve()\"\n >\n Approve\n </button>\n\n <button\n type=\"button\"\n class=\"rounded-xl border border-rose-300 bg-rose-50 px-4 py-2 text-sm font-semibold text-rose-800 hover:bg-rose-100\"\n [disabled]=\"facade.saving()\"\n (click)=\"fail()\"\n >\n Fail\n </button>\n </div>\n </section>\n\n <section class=\"space-y-4\">\n <div class=\"space-y-1\">\n <h2 class=\"text-lg font-semibold text-(--rt-text-primary)\">Applicant Profile</h2>\n <p class=\"text-sm text-(--rt-text-secondary)\">Check identity, contact, and company information.</p>\n </div>\n\n <div class=\"grid gap-4 lg:grid-cols-2\">\n @for (item of profileItems(); track item.key) {\n <rolatech-onboarding-review-row\n [label]=\"item.label\"\n [value]=\"item.value\"\n [helper]=\"item.helper\"\n [issueOptions]=\"fieldIssueOptions(item.key)\"\n [existingIssue]=\"fieldExistingIssue(item.key)\"\n [draftIssue]=\"facade.fieldDraft(item.key)\"\n [passed]=\"facade.fieldPassed(item.key)\"\n [busy]=\"facade.saving()\"\n (passedChange)=\"onFieldPassed(item.key, $event)\"\n (draftIssueChange)=\"onFieldIssue(item.key, $event)\"\n />\n }\n </div>\n </section>\n\n <section class=\"space-y-4\">\n <div class=\"space-y-1\">\n <h2 class=\"text-lg font-semibold text-(--rt-text-primary)\">Compliance and Banking</h2>\n <p class=\"text-sm text-(--rt-text-secondary)\">Check VAT setup and settlement account details.</p>\n </div>\n\n <div class=\"grid gap-4 lg:grid-cols-2\">\n @for (item of complianceItems(); track item.key) {\n <rolatech-onboarding-review-row\n [label]=\"item.label\"\n [value]=\"item.value\"\n [helper]=\"item.helper\"\n [issueOptions]=\"fieldIssueOptions(item.key)\"\n [existingIssue]=\"fieldExistingIssue(item.key)\"\n [draftIssue]=\"facade.fieldDraft(item.key)\"\n [passed]=\"facade.fieldPassed(item.key)\"\n [busy]=\"facade.saving()\"\n (passedChange)=\"onFieldPassed(item.key, $event)\"\n (draftIssueChange)=\"onFieldIssue(item.key, $event)\"\n />\n }\n </div>\n </section>\n\n <section class=\"space-y-4\">\n <div class=\"space-y-1\">\n <h2 class=\"text-lg font-semibold text-(--rt-text-primary)\">Documents</h2>\n <p class=\"text-sm text-(--rt-text-secondary)\">Review required documents and flag anything missing or unreadable.</p>\n </div>\n\n <div class=\"grid gap-4 lg:grid-cols-2\">\n @for (item of documentItems(); track item.documentType + item.label) {\n <rolatech-onboarding-review-row\n [label]=\"item.label\"\n [value]=\"item.value\"\n [helper]=\"item.helper\"\n [issueOptions]=\"documentIssueOptions(item.documentType)\"\n [existingIssue]=\"documentExistingIssue(item.documentType)\"\n [draftIssue]=\"facade.documentDraft(item.documentType)\"\n [passed]=\"facade.documentPassed(item.documentType)\"\n [busy]=\"facade.saving()\"\n [actionLabel]=\"item.document ? 'Preview' : null\"\n [actionDisabled]=\"!item.document\"\n (passedChange)=\"onDocumentPassed(item.documentType, $event)\"\n (draftIssueChange)=\"onDocumentIssue(item.documentType, $event)\"\n (actionTriggered)=\"openDocumentPreview(item)\"\n />\n }\n </div>\n </section>\n\n <rolatech-onboarding-issue-list [issues]=\"detail.issues\" />\n </div>\n } @else {\n <div class=\"rounded-2xl border border-(--rt-border-color) bg-(--rt-base-background) p-5 text-sm text-(--rt-text-secondary) shadow-sm\">\n Loading application details...\n </div>\n }\n\n @if (facade.detail(); as detail) {\n <rolatech-onboarding-timeline-drawer\n floating\n [open]=\"timelineOpen()\"\n [title]=\"'Application Timeline'\"\n [items]=\"detail.timeline\"\n [zIndex]=\"9100\"\n (closeRequested)=\"closeTimeline()\"\n />\n }\n\n <rolatech-onboarding-document-preview-dialog\n [open]=\"previewOpen()\"\n [title]=\"previewTitle()\"\n [subtitle]=\"previewSubtitle()\"\n [url]=\"facade.previewUrl()\"\n [loading]=\"facade.previewLoading()\"\n [error]=\"facade.previewError()\"\n (closeRequested)=\"closeDocumentPreview()\"\n />\n </section>\n `,\n})\nexport class AdminOnboardingDetailPage {\n readonly facade = inject(AdminOnboardingReviewFacade);\n readonly timelineOpen = signal(false);\n readonly previewOpen = signal(false);\n readonly previewTitle = signal<string | null>(null);\n readonly previewSubtitle = signal<string | null>(null);\n readonly onboardingApplicantTypeLabel = onboardingApplicantTypeLabel;\n readonly onboardingStatusLabel = onboardingStatusLabel;\n private readonly route = inject(ActivatedRoute);\n\n private readonly paramMap = toSignal(this.route.paramMap, {\n initialValue: this.route.snapshot.paramMap,\n });\n\n readonly subtitle = computed(() => {\n const detail = this.facade.detail();\n\n if (!detail) {\n return 'Inspect onboarding data and triage approvals inline.';\n }\n\n return `${detail.organizationName || detail.contactName || 'Applicant'} • ${detail.contactEmail || 'No email'}`;\n });\n readonly title = computed(() => {\n const detail = this.facade.detail();\n\n if (!detail) {\n return 'Agent Application Review';\n }\n\n return detail.organizationName || detail.contactName || 'Agent Application Review';\n });\n readonly documentCount = computed(() => this.facade.detail()?.documents.length ?? 0);\n readonly timelineCount = computed(() => this.facade.detail()?.timeline.length ?? 0);\n readonly openIssueCount = computed(() => (this.facade.detail()?.issues ?? []).filter((issue) => !issue.resolved).length);\n\n readonly profileItems = computed<AdminReviewItem[]>(() => {\n const detail = this.facade.detail();\n\n if (!detail) {\n return [];\n }\n\n return [\n ...(detail.applicantType === 'COMPANY'\n ? [{ key: 'organizationName', label: 'Company legal name', value: detail.organizationName, helper: '' }]\n : [{ key: 'contactName', label: 'Applicant name', value: detail.contactName, helper: '' }]),\n ...(detail.applicantType === 'COMPANY'\n ? [{ key: 'contactName', label: 'Primary contact', value: detail.contactName, helper: '' }]\n : []),\n { key: 'contactEmail', label: 'Primary email', value: detail.contactEmail, helper: '' },\n { key: 'contactPhone', label: 'Phone number', value: detail.contactPhone, helper: '' },\n { key: 'countryCode', label: 'Country code', value: detail.countryCode, helper: '' },\n ];\n });\n\n readonly complianceItems = computed<AdminReviewItem[]>(() => {\n const detail = this.facade.detail();\n\n if (!detail) {\n return [];\n }\n\n return [\n { key: 'vatMode', label: 'VAT mode', value: onboardingVatModeLabel(detail.vatMode ?? null), helper: '' },\n { key: 'vatNumber', label: 'VAT number', value: detail.vatNumber || 'Missing', helper: '' },\n { key: 'bankName', label: 'Bank name', value: detail.bankName, helper: '' },\n { key: 'accountHolderName', label: 'Account holder', value: detail.accountHolderName, helper: '' },\n { key: 'sortCode', label: 'Sort code', value: detail.sortCode, helper: '' },\n { key: 'accountNumber', label: 'Account number', value: detail.accountNumber, helper: '' },\n ];\n });\n\n readonly documentItems = computed<AdminDocumentReviewItem[]>(() => {\n const detail = this.facade.detail();\n\n if (!detail) {\n return [];\n }\n\n const requiredItems = this.facade.requiredDocuments().map((spec) => {\n const document = detail.documents.find((item) => item.documentType === spec.type) ?? null;\n\n return {\n documentType: spec.type,\n label: spec.label,\n helper: spec.helperText ?? '',\n document,\n value: document?.originalFilename ?? 'Missing',\n };\n });\n\n const requiredTypes = new Set(requiredItems.map((item) => item.documentType));\n const additionalItems = detail.documents\n .filter((item) => !requiredTypes.has(item.documentType))\n .map((item) => ({\n documentType: item.documentType,\n label: `Additional: ${onboardingDocumentTypeLabel(item.documentType)}`,\n helper: 'Supporting document uploaded by the applicant.',\n document: item,\n value: item.originalFilename,\n }));\n\n return [...requiredItems, ...additionalItems];\n });\n\n constructor() {\n effect(() => {\n const applicationId = this.paramMap().get('applicationId');\n\n if (!applicationId) {\n return;\n }\n\n void this.facade.load(applicationId);\n });\n }\n\n setComment(event: Event): void {\n const target = event.target as HTMLTextAreaElement;\n this.facade.setComment(target.value);\n }\n\n fieldIssueOptions(fieldKey: string): OnboardingReviewIssueOption[] {\n return onboardingFieldIssueOptions(fieldKey);\n }\n\n documentIssueOptions(documentType: OnboardingDocumentType): OnboardingReviewIssueOption[] {\n return onboardingDocumentIssueOptions(documentType);\n }\n\n onFieldIssue(fieldKey: string, draft: OnboardingReviewIssueDraft | null): void {\n this.facade.setFieldIssueDraft(fieldKey, draft);\n }\n\n fieldExistingIssue(fieldKey: string): string | null {\n const existing = this.facade.existingFieldIssues();\n return Object.prototype.hasOwnProperty.call(existing, fieldKey) ? existing[fieldKey] : null;\n }\n\n onFieldPassed(fieldKey: string, passed: boolean): void {\n this.facade.toggleFieldPassed(fieldKey, passed);\n }\n\n onDocumentIssue(documentType: OnboardingDocumentType, draft: OnboardingReviewIssueDraft | null): void {\n this.facade.setDocumentIssueDraft(documentType, draft);\n }\n\n documentExistingIssue(documentType: OnboardingDocumentType): string | null {\n const existing = this.facade.existingDocumentIssues();\n return existing[documentType] ?? null;\n }\n\n onDocumentPassed(documentType: OnboardingDocumentType, passed: boolean): void {\n this.facade.toggleDocumentPassed(documentType, passed);\n }\n\n async openDocumentPreview(item: AdminDocumentReviewItem): Promise<void> {\n if (!item.document) {\n return;\n }\n\n this.previewTitle.set(item.label);\n this.previewSubtitle.set(item.document.originalFilename || null);\n this.previewOpen.set(true);\n await this.facade.openDocumentPreview(item.document.id);\n }\n\n async startReview(): Promise<void> {\n const applicationId = this.paramMap().get('applicationId');\n\n if (!applicationId) {\n return;\n }\n\n await this.facade.startReview(applicationId);\n }\n\n async needMoreInfo(): Promise<void> {\n const applicationId = this.paramMap().get('applicationId');\n\n if (!applicationId) {\n return;\n }\n\n await this.facade.requestMoreInfo(applicationId);\n }\n\n async approve(): Promise<void> {\n const applicationId = this.paramMap().get('applicationId');\n\n if (!applicationId) {\n return;\n }\n\n await this.facade.approve(applicationId);\n }\n\n async fail(): Promise<void> {\n const applicationId = this.paramMap().get('applicationId');\n\n if (!applicationId) {\n return;\n }\n\n await this.facade.fail(applicationId);\n }\n\n openTimeline(): void {\n this.timelineOpen.set(true);\n }\n\n closeTimeline(): void {\n this.timelineOpen.set(false);\n }\n\n closeDocumentPreview(): void {\n this.previewOpen.set(false);\n this.previewTitle.set(null);\n this.previewSubtitle.set(null);\n this.facade.clearDocumentPreview();\n }\n\n countryLabel(value: string | null | undefined): string {\n switch ((value ?? '').toUpperCase()) {\n case 'CN':\n return 'China';\n case 'UK':\n return 'United Kingdom';\n default:\n return value || '—';\n }\n }\n}\n"],"names":[],"mappings":"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"}
@@ -0,0 +1,313 @@
1
+ import * as i0 from '@angular/core';
2
+ import { inject, ViewEncapsulation, ChangeDetectionStrategy, Component } from '@angular/core';
3
+ import { RouterLink } from '@angular/router';
4
+ import { onboardingStatusLabel } from '@rolatech/angular-services';
5
+ import { PlatformPageHeader, PlatformStatCard, PlatformFilterPanel, PlatformDataTable } from '@rolatech/angular-platform';
6
+ import { AdminOnboardingListFacade, OnboardingStatusBadge } from './rolatech-angular-onboarding.mjs';
7
+
8
+ class AdminOnboardingIndexPage {
9
+ facade = inject(AdminOnboardingListFacade);
10
+ statusLabel = onboardingStatusLabel;
11
+ statuses = [
12
+ 'DRAFT',
13
+ 'IN_PROGRESS',
14
+ 'SUBMITTED',
15
+ 'IN_REVIEW',
16
+ 'NEED_MORE_INFO',
17
+ 'APPROVED',
18
+ 'FAILED',
19
+ ];
20
+ constructor() {
21
+ void this.facade.load();
22
+ }
23
+ onSearch(event) {
24
+ const target = event.target;
25
+ this.facade.setSearch(target.value);
26
+ void this.facade.load();
27
+ }
28
+ onStatus(event) {
29
+ const target = event.target;
30
+ const status = target.value ? target.value : undefined;
31
+ this.facade.setStatus(status);
32
+ void this.facade.load();
33
+ }
34
+ async reload() {
35
+ await this.facade.load();
36
+ }
37
+ countryLabel(value) {
38
+ switch ((value ?? '').toUpperCase()) {
39
+ case 'CN':
40
+ return 'China';
41
+ case 'UK':
42
+ return 'United Kingdom';
43
+ default:
44
+ return value || '—';
45
+ }
46
+ }
47
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.1", ngImport: i0, type: AdminOnboardingIndexPage, deps: [], target: i0.ɵɵFactoryTarget.Component });
48
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.1", type: AdminOnboardingIndexPage, isStandalone: true, selector: "rolatech-admin-onboarding-index-page", host: { classAttribute: "block" }, providers: [AdminOnboardingListFacade], ngImport: i0, template: `
49
+ <section class="rt-platform-theme flex flex-col gap-6 bg-(--rt-base-background) p-6 text-(--rt-text-primary)">
50
+ <rolatech-platform-page-header>
51
+ <div header-left class="space-y-1">
52
+ <h1 class="text-2xl font-semibold tracking-tight">Agent Applications</h1>
53
+ <p class="text-sm text-muted-foreground">Review incoming agent onboarding requests and triage approvals.</p>
54
+ </div>
55
+
56
+ <div header-actions>
57
+ <button
58
+ type="button"
59
+ class="inline-flex items-center rounded-xl border border-(--rt-border-color) px-4 py-2 text-sm font-medium"
60
+ [disabled]="facade.loading()"
61
+ (click)="reload()"
62
+ >
63
+ Refresh
64
+ </button>
65
+ </div>
66
+ </rolatech-platform-page-header>
67
+
68
+ <section class="grid gap-4 md:grid-cols-2 xl:grid-cols-4">
69
+ <rolatech-platform-stat-card>
70
+ <div stat-label>Total Applications</div>
71
+ <div stat-value>{{ facade.items().length }}</div>
72
+ </rolatech-platform-stat-card>
73
+
74
+ <rolatech-platform-stat-card>
75
+ <div stat-label>Submitted</div>
76
+ <div stat-value>{{ facade.groupedCounts().SUBMITTED }}</div>
77
+ </rolatech-platform-stat-card>
78
+
79
+ <rolatech-platform-stat-card>
80
+ <div stat-label>In Review</div>
81
+ <div stat-value>{{ facade.groupedCounts().IN_REVIEW }}</div>
82
+ </rolatech-platform-stat-card>
83
+
84
+ <rolatech-platform-stat-card>
85
+ <div stat-label>Need More Info</div>
86
+ <div stat-value>{{ facade.groupedCounts().NEED_MORE_INFO }}</div>
87
+ </rolatech-platform-stat-card>
88
+ </section>
89
+
90
+ <section class="grid gap-6 xl:grid-cols-[320px_minmax(0,1fr)]">
91
+ <rolatech-platform-filter-panel>
92
+ <div filter-title>Filters</div>
93
+ <div filter-description>Search by organization, applicant, and status.</div>
94
+
95
+ <label class="flex flex-col gap-2">
96
+ <span class="text-sm font-medium">Search</span>
97
+ <input
98
+ class="h-10 rounded-xl border border-(--rt-border-color) px-3 text-sm outline-none"
99
+ [value]="facade.filters().search || ''"
100
+ (input)="onSearch($event)"
101
+ placeholder="Organization or contact"
102
+ />
103
+ </label>
104
+
105
+ <label class="flex flex-col gap-2">
106
+ <span class="text-sm font-medium">Status</span>
107
+ <select
108
+ class="h-10 rounded-xl border border-(--rt-border-color) px-3 text-sm outline-none"
109
+ [value]="facade.filters().status || ''"
110
+ (change)="onStatus($event)"
111
+ >
112
+ <option value="">All</option>
113
+ @for (status of statuses; track status) {
114
+ <option [value]="status">{{ statusLabel(status) }}</option>
115
+ }
116
+ </select>
117
+ </label>
118
+ </rolatech-platform-filter-panel>
119
+
120
+ <rolatech-platform-data-table>
121
+ <div table-toolbar class="flex items-center justify-between gap-3">
122
+ <div>
123
+ <h2 class="text-base font-semibold">Applications</h2>
124
+ <div class="text-sm text-muted-foreground">{{ facade.items().length }} items</div>
125
+ </div>
126
+ </div>
127
+
128
+ @if (facade.error()) {
129
+ <p class="mb-4 rounded-2xl border border-rose-300/40 bg-rose-500/10 px-4 py-3 text-sm text-(--rt-text-primary)">
130
+ {{ facade.error() }}
131
+ </p>
132
+ }
133
+
134
+ <thead class="bg-muted/40">
135
+ <tr class="text-left">
136
+ <th class="px-4 py-3 font-medium">ID</th>
137
+ <th class="px-4 py-3 font-medium">Organization</th>
138
+ <th class="px-4 py-3 font-medium">Applicant</th>
139
+ <th class="px-4 py-3 font-medium">Country</th>
140
+ <th class="px-4 py-3 font-medium">Status</th>
141
+ <th class="px-4 py-3 font-medium">Updated</th>
142
+ </tr>
143
+ </thead>
144
+
145
+ <tbody>
146
+ @if (facade.loading()) {
147
+ <tr>
148
+ <td colspan="6" class="px-4 py-10 text-center text-muted-foreground">Loading agent applications...</td>
149
+ </tr>
150
+ } @else if (facade.items().length === 0) {
151
+ <tr>
152
+ <td colspan="6" class="px-4 py-10 text-center text-muted-foreground">No agent applications found.</td>
153
+ </tr>
154
+ } @else { @for (item of facade.items(); track item.id) {
155
+ <tr class="border-t border-(--rt-border-color)">
156
+ <td class="px-4 py-3">
157
+ <a [routerLink]="[item.id]" class="font-medium hover:underline cursor-pointer">{{ item.id }}</a>
158
+ </td>
159
+ <td class="px-4 py-3">{{ item.organizationName || '-' }}</td>
160
+ <td class="px-4 py-3">{{ item.contactName || '-' }}</td>
161
+ <td class="px-4 py-3 text-muted-foreground">{{ countryLabel(item.companyCountry) }}</td>
162
+ <td class="px-4 py-3">
163
+ <rolatech-onboarding-status-badge [status]="item.status" />
164
+ </td>
165
+ <td class="px-4 py-3 text-muted-foreground">{{ item.updatedAt || item.createdAt || '—' }}</td>
166
+ </tr>
167
+ } }
168
+ </tbody>
169
+ </rolatech-platform-data-table>
170
+ </section>
171
+ </section>
172
+ `, isInline: true, dependencies: [{ kind: "directive", type: RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "component", type: PlatformPageHeader, selector: "rolatech-platform-page-header" }, { kind: "component", type: PlatformStatCard, selector: "rolatech-platform-stat-card" }, { kind: "component", type: PlatformFilterPanel, selector: "rolatech-platform-filter-panel" }, { kind: "component", type: PlatformDataTable, selector: "rolatech-platform-data-table" }, { kind: "component", type: OnboardingStatusBadge, selector: "rolatech-onboarding-status-badge", inputs: ["status"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
173
+ }
174
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.1", ngImport: i0, type: AdminOnboardingIndexPage, decorators: [{
175
+ type: Component,
176
+ args: [{
177
+ selector: 'rolatech-admin-onboarding-index-page',
178
+ standalone: true,
179
+ imports: [RouterLink, PlatformPageHeader, PlatformStatCard, PlatformFilterPanel, PlatformDataTable, OnboardingStatusBadge],
180
+ providers: [AdminOnboardingListFacade],
181
+ changeDetection: ChangeDetectionStrategy.OnPush,
182
+ encapsulation: ViewEncapsulation.None,
183
+ host: { class: 'block' },
184
+ template: `
185
+ <section class="rt-platform-theme flex flex-col gap-6 bg-(--rt-base-background) p-6 text-(--rt-text-primary)">
186
+ <rolatech-platform-page-header>
187
+ <div header-left class="space-y-1">
188
+ <h1 class="text-2xl font-semibold tracking-tight">Agent Applications</h1>
189
+ <p class="text-sm text-muted-foreground">Review incoming agent onboarding requests and triage approvals.</p>
190
+ </div>
191
+
192
+ <div header-actions>
193
+ <button
194
+ type="button"
195
+ class="inline-flex items-center rounded-xl border border-(--rt-border-color) px-4 py-2 text-sm font-medium"
196
+ [disabled]="facade.loading()"
197
+ (click)="reload()"
198
+ >
199
+ Refresh
200
+ </button>
201
+ </div>
202
+ </rolatech-platform-page-header>
203
+
204
+ <section class="grid gap-4 md:grid-cols-2 xl:grid-cols-4">
205
+ <rolatech-platform-stat-card>
206
+ <div stat-label>Total Applications</div>
207
+ <div stat-value>{{ facade.items().length }}</div>
208
+ </rolatech-platform-stat-card>
209
+
210
+ <rolatech-platform-stat-card>
211
+ <div stat-label>Submitted</div>
212
+ <div stat-value>{{ facade.groupedCounts().SUBMITTED }}</div>
213
+ </rolatech-platform-stat-card>
214
+
215
+ <rolatech-platform-stat-card>
216
+ <div stat-label>In Review</div>
217
+ <div stat-value>{{ facade.groupedCounts().IN_REVIEW }}</div>
218
+ </rolatech-platform-stat-card>
219
+
220
+ <rolatech-platform-stat-card>
221
+ <div stat-label>Need More Info</div>
222
+ <div stat-value>{{ facade.groupedCounts().NEED_MORE_INFO }}</div>
223
+ </rolatech-platform-stat-card>
224
+ </section>
225
+
226
+ <section class="grid gap-6 xl:grid-cols-[320px_minmax(0,1fr)]">
227
+ <rolatech-platform-filter-panel>
228
+ <div filter-title>Filters</div>
229
+ <div filter-description>Search by organization, applicant, and status.</div>
230
+
231
+ <label class="flex flex-col gap-2">
232
+ <span class="text-sm font-medium">Search</span>
233
+ <input
234
+ class="h-10 rounded-xl border border-(--rt-border-color) px-3 text-sm outline-none"
235
+ [value]="facade.filters().search || ''"
236
+ (input)="onSearch($event)"
237
+ placeholder="Organization or contact"
238
+ />
239
+ </label>
240
+
241
+ <label class="flex flex-col gap-2">
242
+ <span class="text-sm font-medium">Status</span>
243
+ <select
244
+ class="h-10 rounded-xl border border-(--rt-border-color) px-3 text-sm outline-none"
245
+ [value]="facade.filters().status || ''"
246
+ (change)="onStatus($event)"
247
+ >
248
+ <option value="">All</option>
249
+ @for (status of statuses; track status) {
250
+ <option [value]="status">{{ statusLabel(status) }}</option>
251
+ }
252
+ </select>
253
+ </label>
254
+ </rolatech-platform-filter-panel>
255
+
256
+ <rolatech-platform-data-table>
257
+ <div table-toolbar class="flex items-center justify-between gap-3">
258
+ <div>
259
+ <h2 class="text-base font-semibold">Applications</h2>
260
+ <div class="text-sm text-muted-foreground">{{ facade.items().length }} items</div>
261
+ </div>
262
+ </div>
263
+
264
+ @if (facade.error()) {
265
+ <p class="mb-4 rounded-2xl border border-rose-300/40 bg-rose-500/10 px-4 py-3 text-sm text-(--rt-text-primary)">
266
+ {{ facade.error() }}
267
+ </p>
268
+ }
269
+
270
+ <thead class="bg-muted/40">
271
+ <tr class="text-left">
272
+ <th class="px-4 py-3 font-medium">ID</th>
273
+ <th class="px-4 py-3 font-medium">Organization</th>
274
+ <th class="px-4 py-3 font-medium">Applicant</th>
275
+ <th class="px-4 py-3 font-medium">Country</th>
276
+ <th class="px-4 py-3 font-medium">Status</th>
277
+ <th class="px-4 py-3 font-medium">Updated</th>
278
+ </tr>
279
+ </thead>
280
+
281
+ <tbody>
282
+ @if (facade.loading()) {
283
+ <tr>
284
+ <td colspan="6" class="px-4 py-10 text-center text-muted-foreground">Loading agent applications...</td>
285
+ </tr>
286
+ } @else if (facade.items().length === 0) {
287
+ <tr>
288
+ <td colspan="6" class="px-4 py-10 text-center text-muted-foreground">No agent applications found.</td>
289
+ </tr>
290
+ } @else { @for (item of facade.items(); track item.id) {
291
+ <tr class="border-t border-(--rt-border-color)">
292
+ <td class="px-4 py-3">
293
+ <a [routerLink]="[item.id]" class="font-medium hover:underline cursor-pointer">{{ item.id }}</a>
294
+ </td>
295
+ <td class="px-4 py-3">{{ item.organizationName || '-' }}</td>
296
+ <td class="px-4 py-3">{{ item.contactName || '-' }}</td>
297
+ <td class="px-4 py-3 text-muted-foreground">{{ countryLabel(item.companyCountry) }}</td>
298
+ <td class="px-4 py-3">
299
+ <rolatech-onboarding-status-badge [status]="item.status" />
300
+ </td>
301
+ <td class="px-4 py-3 text-muted-foreground">{{ item.updatedAt || item.createdAt || '—' }}</td>
302
+ </tr>
303
+ } }
304
+ </tbody>
305
+ </rolatech-platform-data-table>
306
+ </section>
307
+ </section>
308
+ `,
309
+ }]
310
+ }], ctorParameters: () => [] });
311
+
312
+ export { AdminOnboardingIndexPage };
313
+ //# sourceMappingURL=rolatech-angular-onboarding-admin-onboarding-index-page-DP7wffLd.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rolatech-angular-onboarding-admin-onboarding-index-page-DP7wffLd.mjs","sources":["../../../../packages/angular-onboarding/src/lib/pages/admin-onboarding/admin-onboarding-index-page.ts"],"sourcesContent":["import { ChangeDetectionStrategy, Component, inject, ViewEncapsulation } from '@angular/core';\nimport { RouterLink } from '@angular/router';\nimport { onboardingStatusLabel, OnboardingStatus } from '@rolatech/angular-services';\nimport { PlatformDataTable, PlatformFilterPanel, PlatformPageHeader, PlatformStatCard } from '@rolatech/angular-platform';\nimport { OnboardingStatusBadge } from '../../components/onboarding/onboarding-status-badge';\nimport { AdminOnboardingListFacade } from '../../store/admin-onboarding-list.facade';\n\n@Component({\n selector: 'rolatech-admin-onboarding-index-page',\n standalone: true,\n imports: [RouterLink, PlatformPageHeader, PlatformStatCard, PlatformFilterPanel, PlatformDataTable, OnboardingStatusBadge],\n providers: [AdminOnboardingListFacade],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: { class: 'block' },\n template: `\n <section class=\"rt-platform-theme flex flex-col gap-6 bg-(--rt-base-background) p-6 text-(--rt-text-primary)\">\n <rolatech-platform-page-header>\n <div header-left class=\"space-y-1\">\n <h1 class=\"text-2xl font-semibold tracking-tight\">Agent Applications</h1>\n <p class=\"text-sm text-muted-foreground\">Review incoming agent onboarding requests and triage approvals.</p>\n </div>\n\n <div header-actions>\n <button\n type=\"button\"\n class=\"inline-flex items-center rounded-xl border border-(--rt-border-color) px-4 py-2 text-sm font-medium\"\n [disabled]=\"facade.loading()\"\n (click)=\"reload()\"\n >\n Refresh\n </button>\n </div>\n </rolatech-platform-page-header>\n\n <section class=\"grid gap-4 md:grid-cols-2 xl:grid-cols-4\">\n <rolatech-platform-stat-card>\n <div stat-label>Total Applications</div>\n <div stat-value>{{ facade.items().length }}</div>\n </rolatech-platform-stat-card>\n\n <rolatech-platform-stat-card>\n <div stat-label>Submitted</div>\n <div stat-value>{{ facade.groupedCounts().SUBMITTED }}</div>\n </rolatech-platform-stat-card>\n\n <rolatech-platform-stat-card>\n <div stat-label>In Review</div>\n <div stat-value>{{ facade.groupedCounts().IN_REVIEW }}</div>\n </rolatech-platform-stat-card>\n\n <rolatech-platform-stat-card>\n <div stat-label>Need More Info</div>\n <div stat-value>{{ facade.groupedCounts().NEED_MORE_INFO }}</div>\n </rolatech-platform-stat-card>\n </section>\n\n <section class=\"grid gap-6 xl:grid-cols-[320px_minmax(0,1fr)]\">\n <rolatech-platform-filter-panel>\n <div filter-title>Filters</div>\n <div filter-description>Search by organization, applicant, and status.</div>\n\n <label class=\"flex flex-col gap-2\">\n <span class=\"text-sm font-medium\">Search</span>\n <input\n class=\"h-10 rounded-xl border border-(--rt-border-color) px-3 text-sm outline-none\"\n [value]=\"facade.filters().search || ''\"\n (input)=\"onSearch($event)\"\n placeholder=\"Organization or contact\"\n />\n </label>\n\n <label class=\"flex flex-col gap-2\">\n <span class=\"text-sm font-medium\">Status</span>\n <select\n class=\"h-10 rounded-xl border border-(--rt-border-color) px-3 text-sm outline-none\"\n [value]=\"facade.filters().status || ''\"\n (change)=\"onStatus($event)\"\n >\n <option value=\"\">All</option>\n @for (status of statuses; track status) {\n <option [value]=\"status\">{{ statusLabel(status) }}</option>\n }\n </select>\n </label>\n </rolatech-platform-filter-panel>\n\n <rolatech-platform-data-table>\n <div table-toolbar class=\"flex items-center justify-between gap-3\">\n <div>\n <h2 class=\"text-base font-semibold\">Applications</h2>\n <div class=\"text-sm text-muted-foreground\">{{ facade.items().length }} items</div>\n </div>\n </div>\n\n @if (facade.error()) {\n <p class=\"mb-4 rounded-2xl border border-rose-300/40 bg-rose-500/10 px-4 py-3 text-sm text-(--rt-text-primary)\">\n {{ facade.error() }}\n </p>\n }\n\n <thead class=\"bg-muted/40\">\n <tr class=\"text-left\">\n <th class=\"px-4 py-3 font-medium\">ID</th>\n <th class=\"px-4 py-3 font-medium\">Organization</th>\n <th class=\"px-4 py-3 font-medium\">Applicant</th>\n <th class=\"px-4 py-3 font-medium\">Country</th>\n <th class=\"px-4 py-3 font-medium\">Status</th>\n <th class=\"px-4 py-3 font-medium\">Updated</th>\n </tr>\n </thead>\n\n <tbody>\n @if (facade.loading()) {\n <tr>\n <td colspan=\"6\" class=\"px-4 py-10 text-center text-muted-foreground\">Loading agent applications...</td>\n </tr>\n } @else if (facade.items().length === 0) {\n <tr>\n <td colspan=\"6\" class=\"px-4 py-10 text-center text-muted-foreground\">No agent applications found.</td>\n </tr>\n } @else { @for (item of facade.items(); track item.id) {\n <tr class=\"border-t border-(--rt-border-color)\">\n <td class=\"px-4 py-3\">\n <a [routerLink]=\"[item.id]\" class=\"font-medium hover:underline cursor-pointer\">{{ item.id }}</a>\n </td>\n <td class=\"px-4 py-3\">{{ item.organizationName || '-' }}</td>\n <td class=\"px-4 py-3\">{{ item.contactName || '-' }}</td>\n <td class=\"px-4 py-3 text-muted-foreground\">{{ countryLabel(item.companyCountry) }}</td>\n <td class=\"px-4 py-3\">\n <rolatech-onboarding-status-badge [status]=\"item.status\" />\n </td>\n <td class=\"px-4 py-3 text-muted-foreground\">{{ item.updatedAt || item.createdAt || '—' }}</td>\n </tr>\n } }\n </tbody>\n </rolatech-platform-data-table>\n </section>\n </section>\n `,\n})\nexport class AdminOnboardingIndexPage {\n readonly facade = inject(AdminOnboardingListFacade);\n readonly statusLabel = onboardingStatusLabel;\n readonly statuses: OnboardingStatus[] = [\n 'DRAFT',\n 'IN_PROGRESS',\n 'SUBMITTED',\n 'IN_REVIEW',\n 'NEED_MORE_INFO',\n 'APPROVED',\n 'FAILED',\n ];\n\n constructor() {\n void this.facade.load();\n }\n\n onSearch(event: Event): void {\n const target = event.target as HTMLInputElement;\n this.facade.setSearch(target.value);\n void this.facade.load();\n }\n\n onStatus(event: Event): void {\n const target = event.target as HTMLSelectElement;\n const status = target.value ? (target.value as OnboardingStatus) : undefined;\n this.facade.setStatus(status);\n void this.facade.load();\n }\n\n async reload(): Promise<void> {\n await this.facade.load();\n }\n\n countryLabel(value: string | null | undefined): string {\n switch ((value ?? '').toUpperCase()) {\n case 'CN':\n return 'China';\n case 'UK':\n return 'United Kingdom';\n default:\n return value || '—';\n }\n }\n}\n"],"names":[],"mappings":";;;;;;;MA6Ia,wBAAwB,CAAA;AAC1B,IAAA,MAAM,GAAG,MAAM,CAAC,yBAAyB,CAAC;IAC1C,WAAW,GAAG,qBAAqB;AACnC,IAAA,QAAQ,GAAuB;QACtC,OAAO;QACP,aAAa;QACb,WAAW;QACX,WAAW;QACX,gBAAgB;QAChB,UAAU;QACV,QAAQ;KACT;AAED,IAAA,WAAA,GAAA;AACE,QAAA,KAAK,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE;IACzB;AAEA,IAAA,QAAQ,CAAC,KAAY,EAAA;AACnB,QAAA,MAAM,MAAM,GAAG,KAAK,CAAC,MAA0B;QAC/C,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC;AACnC,QAAA,KAAK,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE;IACzB;AAEA,IAAA,QAAQ,CAAC,KAAY,EAAA;AACnB,QAAA,MAAM,MAAM,GAAG,KAAK,CAAC,MAA2B;AAChD,QAAA,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,GAAI,MAAM,CAAC,KAA0B,GAAG,SAAS;AAC5E,QAAA,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC;AAC7B,QAAA,KAAK,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE;IACzB;AAEA,IAAA,MAAM,MAAM,GAAA;AACV,QAAA,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE;IAC1B;AAEA,IAAA,YAAY,CAAC,KAAgC,EAAA;QAC3C,QAAQ,CAAC,KAAK,IAAI,EAAE,EAAE,WAAW,EAAE;AACjC,YAAA,KAAK,IAAI;AACP,gBAAA,OAAO,OAAO;AAChB,YAAA,KAAK,IAAI;AACP,gBAAA,OAAO,gBAAgB;AACzB,YAAA;gBACE,OAAO,KAAK,IAAI,GAAG;;IAEzB;uGA3CW,wBAAwB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAxB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,wBAAwB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,sCAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,OAAA,EAAA,EAAA,SAAA,EAlIxB,CAAC,yBAAyB,CAAC,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAI5B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4HT,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAjIS,UAAU,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,aAAA,EAAA,UAAA,EAAA,qBAAA,EAAA,OAAA,EAAA,MAAA,EAAA,YAAA,EAAA,kBAAA,EAAA,oBAAA,EAAA,YAAA,EAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,kBAAkB,EAAA,QAAA,EAAA,+BAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,gBAAgB,wEAAE,mBAAmB,EAAA,QAAA,EAAA,gCAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,iBAAiB,EAAA,QAAA,EAAA,8BAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,qBAAqB,EAAA,QAAA,EAAA,kCAAA,EAAA,MAAA,EAAA,CAAA,QAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA;;2FAmI9G,wBAAwB,EAAA,UAAA,EAAA,CAAA;kBAtIpC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,sCAAsC;AAChD,oBAAA,UAAU,EAAE,IAAI;AAChB,oBAAA,OAAO,EAAE,CAAC,UAAU,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,qBAAqB,CAAC;oBAC1H,SAAS,EAAE,CAAC,yBAAyB,CAAC;oBACtC,eAAe,EAAE,uBAAuB,CAAC,MAAM;oBAC/C,aAAa,EAAE,iBAAiB,CAAC,IAAI;AACrC,oBAAA,IAAI,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE;AACxB,oBAAA,QAAQ,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA4HT,EAAA,CAAA;AACF,iBAAA;;;;;"}