{"version":3,"file":"app-afbe97b7.xxxxxxxx.bundle.js","mappings":"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","sources":["webpack://iadviser/./src/document-analyser/app.html","webpack://iadviser/./src/document-analyser/components/analysis-step.html","webpack://iadviser/./src/document-analyser/components/categories-step.html","webpack://iadviser/./src/document-analyser/components/documents-step.html","webpack://iadviser/./src/document-analyser/components/sections-step.html","webpack://iadviser/./src/document-analyser/components/subcategories-step.html","webpack://iadviser/./src/document-analyser/pages/comparison/comparison.html","webpack://iadviser/./src/document-analyser/pages/document-qna/document-qna.html","webpack://iadviser/./src/document-analyser/pages/home/home.html","webpack://iadviser/./src/document-analyser/pages/summarization/summarization.html","webpack://iadviser/./src/document-analyser/resources/elements/svg-icon.html","webpack://iadviser/./src/document-analyser/app.ts","webpack://iadviser/./src/document-analyser/components/analysis-step.ts","webpack://iadviser/./src/document-analyser/components/categories-step.ts","webpack://iadviser/./src/document-analyser/components/documents-step.ts","webpack://iadviser/./src/document-analyser/components/sections-step.ts","webpack://iadviser/./src/document-analyser/components/subcategories-step.ts","webpack://iadviser/./src/document-analyser/data/analyser.ts","webpack://iadviser/./src/document-analyser/pages/comparison/comparison.ts","webpack://iadviser/./src/document-analyser/pages/document-qna/document-qna.ts","webpack://iadviser/./src/document-analyser/pages/home/home.ts","webpack://iadviser/./src/document-analyser/pages/summarization/summarization.ts","webpack://iadviser/./src/document-analyser/resources/elements/icon-data.ts","webpack://iadviser/./src/document-analyser/resources/elements/svg-icon.ts","webpack://iadviser/./src/document-analyser/resources/index.ts","webpack://iadviser/./src/document-analyser/resources/value-converters/file-size.ts","webpack://iadviser/./src/document-analyser/resources/value-converters/markdown.ts","webpack://iadviser/./src/document-analyser/environment.ts","webpack://iadviser/./src/document-analyser/services/api-service.ts","webpack://iadviser/./src/endpoints/adviser-funder-credentials-endpoint.ts","webpack://iadviser/./src/endpoints/auth/reset-password-endpoint.ts","webpack://iadviser/./src/endpoints/auth/sso-callback-endpoint.ts","webpack://iadviser/./src/endpoints/auth/token-endpoint.ts","webpack://iadviser/./src/endpoints/change-password-endpoint.ts","webpack://iadviser/./src/endpoints/create-funder-password-endpoint.ts","webpack://iadviser/./src/endpoints/delete-funder-password-endpoint.ts","webpack://iadviser/./src/endpoints/fill-document-tree-endpoint.ts","webpack://iadviser/./src/endpoints/get-all-folders-endpoint.ts","webpack://iadviser/./src/endpoints/get-external-system-password-endpoint.ts","webpack://iadviser/./src/endpoints/home/notifications-endpoint.ts","webpack://iadviser/./src/endpoints/licence-acceptance-endpoint.ts","webpack://iadviser/./src/endpoints/licence-agreement-endpoint.ts","webpack://iadviser/./src/endpoints/messages-endpoint.ts","webpack://iadviser/./src/endpoints/post-external-system-password-endpoint.ts","webpack://iadviser/./src/endpoints/put-external-system-password-endpoint.ts","webpack://iadviser/./src/endpoints/search/search-endpoint.ts","webpack://iadviser/./src/endpoints/update-funder-password-endpoint.ts","webpack://iadviser/./src/enums/insured-action.ts","webpack://iadviser/./src/environments/dev.ts","webpack://iadviser/./src/environment.ts","webpack://iadviser/./src/environments/prod.ts","webpack://iadviser/./src/feature-flags.ts"],"sourcesContent":["// Module\nvar code = \"\";\n// Exports\nexport default code;","// Module\nvar code = \"\\r\\n\";\n// Exports\nexport default code;","// Module\nvar code = \"\\r\\n\";\n// Exports\nexport default code;","// Module\nvar code = \"\\r\\n\";\n// Exports\nexport default code;","// Module\nvar code = \"\\r\\n\";\n// Exports\nexport default code;","// Module\nvar code = \"\\r\\n\";\n// Exports\nexport default code;","// Module\nvar code = \"\\r\\n\";\n// Exports\nexport default code;","// Module\nvar code = \"\";\n// Exports\nexport default code;","// Module\nvar code = \"\";\n// Exports\nexport default code;","// Module\nvar code = \"\";\n// Exports\nexport default code;","// Module\nvar code = \"\\r\\n\";\n// Exports\nexport default code;","import { PLATFORM } from 'aurelia-framework';\r\nimport { Router, RouterConfiguration, RouteConfig } from 'aurelia-router';\r\n\r\nexport class App {\r\n router: Router;\r\n isCollapsed = false;\r\n\r\n toggleSidebar() {\r\n this.isCollapsed = !this.isCollapsed;\r\n }\r\n\r\n configureRouter(config: RouterConfiguration, router: Router): void {\r\n config.title = 'AUBi Document Analyser';\r\n\r\n config.map([\r\n {\r\n route: ['', 'home'],\r\n name: 'home',\r\n moduleId: PLATFORM.moduleName('document-analyser/pages/home/home'),\r\n nav: true,\r\n title: 'Home',\r\n settings: { icon: 'home' },\r\n },\r\n {\r\n route: 'comparison',\r\n name: 'comparison',\r\n moduleId: PLATFORM.moduleName('document-analyser/pages/comparison/comparison'),\r\n nav: true,\r\n title: 'Comparison of PDS',\r\n settings: { icon: 'git-compare' },\r\n },\r\n {\r\n route: 'summarization',\r\n name: 'summarization',\r\n moduleId: PLATFORM.moduleName('document-analyser/pages/summarization/summarization'),\r\n nav: true,\r\n title: 'Summarisation',\r\n settings: { icon: 'file-text' },\r\n },\r\n {\r\n route: 'qna',\r\n name: 'qna',\r\n moduleId: PLATFORM.moduleName('document-analyser/pages/document-qna/document-qna'),\r\n nav: true,\r\n title: 'Document QnA',\r\n settings: { icon: 'message-square-text' },\r\n },\r\n ] as RouteConfig[]);\r\n\r\n this.router = router;\r\n }\r\n}\r\n","import { bindable } from 'aurelia-framework';\r\nimport { ComparisonAspect } from '../services/api-service';\r\n\r\nexport class AnalysisStep {\r\n @bindable selectedCategories: string[] = [];\r\n @bindable selectedSubcategories: string[] = [];\r\n @bindable selectedSections: string[] = [];\r\n @bindable selectedDocuments: string[] = [];\r\n @bindable pdfUrl: string | null = null;\r\n @bindable comparisonData: ComparisonAspect[] | null = null;\r\n @bindable pdfFilename = 'pds_comparison_report.pdf';\r\n\r\n isExpanded = true;\r\n searchQuery = '';\r\n\r\n get documentNames(): string[] {\r\n return this.comparisonData && this.comparisonData.length > 0\r\n ? this.comparisonData[0].documents.map((d) => d.filename)\r\n : [];\r\n }\r\n\r\n get filteredData(): ComparisonAspect[] {\r\n if (!this.comparisonData) {\r\n return [];\r\n }\r\n const q = this.searchQuery.toLowerCase();\r\n return this.comparisonData.filter((aspect) => aspect.aspect_name.toLowerCase().includes(q));\r\n }\r\n\r\n get isLoading(): boolean {\r\n return !this.pdfUrl && !this.comparisonData;\r\n }\r\n\r\n toggleExpand(): void {\r\n this.isExpanded = !this.isExpanded;\r\n }\r\n\r\n cellFor(aspect: ComparisonAspect, docName: string): string {\r\n const docData = aspect.documents.find((d) => d.filename === docName);\r\n return docData ? docData.description : '-';\r\n }\r\n\r\n stripPdf(name: string): string {\r\n return name.replace('.pdf', '');\r\n }\r\n}\r\n","import { bindable } from 'aurelia-framework';\r\nimport { CATEGORIES, Category, iconName } from '../data/analyser';\r\n\r\nexport class CategoriesStep {\r\n @bindable selectedCategories: string[] = [];\r\n @bindable change: (args: { selected: string[] }) => void;\r\n\r\n categories: Category[] = CATEGORIES;\r\n iconName = iconName;\r\n\r\n // Reactive map: { [categoryId]: boolean } — Aurelia observes property reads on plain objects\r\n selectedMap: Record = {};\r\n\r\n // Called automatically by Aurelia whenever the selectedCategories binding changes\r\n selectedCategoriesChanged(newValue: string[]) {\r\n const map: Record = {};\r\n (newValue || []).forEach(id => { map[id] = true; });\r\n this.selectedMap = map;\r\n }\r\n\r\n toggleCategory(id: string): void {\r\n if (this.selectedMap[id]) {\r\n this.change({ selected: [] });\r\n } else {\r\n this.change({ selected: [id] });\r\n }\r\n }\r\n}\r\n","import { bindable } from 'aurelia-framework';\r\n\r\ninterface UploadedDocument {\r\n id: string;\r\n name: string;\r\n size: number;\r\n charCount: number;\r\n status: 'uploading' | 'processing' | 'completed';\r\n progress: number;\r\n file: File;\r\n}\r\n\r\nexport class DocumentsStep {\r\n @bindable uploadedFiles: File[] = [];\r\n @bindable isGeneratingReport = false;\r\n @bindable filesChange: (args: { files: File[] }) => void;\r\n @bindable selectionChange: (args: { selected: string[] }) => void;\r\n @bindable back: () => void;\r\n @bindable next: () => void;\r\n\r\n uploadedDocs: UploadedDocument[] = [];\r\n fileInput: HTMLInputElement;\r\n isDragging = false;\r\n\r\n handleDragEnter(event: DragEvent): boolean {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n this.isDragging = true;\r\n return false;\r\n }\r\n\r\n handleDragOver(event: DragEvent): boolean {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n if (event.dataTransfer) {\r\n event.dataTransfer.dropEffect = 'copy';\r\n }\r\n this.isDragging = true;\r\n return false;\r\n }\r\n\r\n handleDragLeave(event: DragEvent): boolean {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n this.isDragging = false;\r\n return false;\r\n }\r\n\r\n handleDrop(event: DragEvent): boolean {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n this.isDragging = false;\r\n if (event.dataTransfer?.files?.length) {\r\n const files = Array.from(event.dataTransfer.files);\r\n if (files.length > 0) {\r\n this.processFiles(files);\r\n }\r\n }\r\n return false;\r\n }\r\n\r\n private timers: Set = new Set();\r\n private seq = 0;\r\n\r\n bind(): void {\r\n this.uploadedDocs = (this.uploadedFiles || []).map((file) => ({\r\n id: `uploaded-${file.name}-${file.size}`,\r\n name: file.name,\r\n size: file.size,\r\n charCount: Math.round(file.size * 0.46),\r\n status: 'completed',\r\n progress: 100,\r\n file,\r\n }));\r\n }\r\n\r\n detached(): void {\r\n this.timers.forEach((t) => clearInterval(t));\r\n this.timers.forEach((t) => clearTimeout(t));\r\n this.timers.clear();\r\n }\r\n\r\n get isAnyUploadingOrProcessing(): boolean {\r\n return this.uploadedDocs.some((d) => d.status !== 'completed');\r\n }\r\n\r\n get hasNoCompletedFiles(): boolean {\r\n return this.uploadedDocs.filter((d) => d.status === 'completed').length === 0;\r\n }\r\n\r\n get isNextDisabled(): boolean {\r\n return this.isAnyUploadingOrProcessing || this.hasNoCompletedFiles || this.isGeneratingReport;\r\n }\r\n\r\n get allCompleted(): boolean {\r\n return this.uploadedDocs.length > 0 && !this.isAnyUploadingOrProcessing;\r\n }\r\n\r\n formatChars(chars: number): string {\r\n return `${chars.toLocaleString()} chars`;\r\n }\r\n\r\n private notifyParent(): void {\r\n const completed = this.uploadedDocs.filter((d) => d.status === 'completed');\r\n this.filesChange({ files: completed.map((d) => d.file) });\r\n this.selectionChange({ selected: completed.map((d) => d.id) });\r\n }\r\n\r\n private simulateUpload(id: string): void {\r\n let progress = 0;\r\n const interval = setInterval(() => {\r\n progress += Math.floor(Math.random() * 15) + 5;\r\n if (progress >= 100) {\r\n progress = 100;\r\n clearInterval(interval);\r\n this.timers.delete(interval);\r\n\r\n const doc = this.uploadedDocs.find((d) => d.id === id);\r\n if (doc) {\r\n doc.status = 'processing';\r\n doc.progress = 100;\r\n }\r\n\r\n const timeout = setTimeout(() => {\r\n this.timers.delete(timeout);\r\n const d2 = this.uploadedDocs.find((d) => d.id === id);\r\n if (d2) {\r\n d2.status = 'completed';\r\n }\r\n this.notifyParent();\r\n }, 800);\r\n this.timers.add(timeout);\r\n } else {\r\n const doc = this.uploadedDocs.find((d) => d.id === id);\r\n if (doc) {\r\n doc.progress = progress;\r\n }\r\n }\r\n }, 80);\r\n this.timers.add(interval);\r\n }\r\n\r\n private processFiles(fileList: File[]): void {\r\n if (this.uploadedDocs.length + fileList.length > 5) {\r\n window.alert('You can upload up to 5 documents for comparison.');\r\n return;\r\n }\r\n\r\n const newDocs: UploadedDocument[] = fileList.map((file, idx) => ({\r\n id: `uploaded-${file.name}-${file.size}-${++this.seq}-${idx}`,\r\n name: file.name,\r\n size: file.size,\r\n charCount: Math.round(file.size * 0.46),\r\n status: 'uploading',\r\n progress: 0,\r\n file,\r\n }));\r\n\r\n this.uploadedDocs = [...this.uploadedDocs, ...newDocs];\r\n newDocs.forEach((doc) => this.simulateUpload(doc.id));\r\n }\r\n\r\n handleFileUpload(event: Event): void {\r\n const input = event.target as HTMLInputElement;\r\n if (!input.files || input.files.length === 0) {\r\n return;\r\n }\r\n\r\n const fileList = Array.from(input.files);\r\n this.processFiles(fileList);\r\n input.value = '';\r\n }\r\n\r\n removeUploaded(id: string): void {\r\n this.uploadedDocs = this.uploadedDocs.filter((doc) => doc.id !== id);\r\n this.notifyParent();\r\n }\r\n}\r\n","import { bindable } from 'aurelia-framework';\r\nimport {\r\n getCategory,\r\n getSubcategories,\r\n getAspectsForPath,\r\n Category,\r\n Subcategory,\r\n Section,\r\n} from '../data/analyser';\r\n\r\nexport class SectionsStep {\r\n @bindable selectedCategories: string[] = [];\r\n @bindable selectedSubcategories: string[] = [];\r\n @bindable selectedSections: string[] = [];\r\n @bindable change: (args: { selected: string[] }) => void;\r\n\r\n showParametersModal = false;\r\n\r\n get activeCategory(): string {\r\n return (this.selectedCategories || [])[0];\r\n }\r\n\r\n get activeSubcategory(): string {\r\n return (this.selectedSubcategories || [])[0];\r\n }\r\n\r\n get categoryData(): Category | undefined {\r\n return getCategory(this.activeCategory);\r\n }\r\n\r\n get subcatData(): Subcategory | undefined {\r\n return getSubcategories(this.activeCategory).find((sub) => sub.id === this.activeSubcategory);\r\n }\r\n\r\n get sectionsList(): Section[] {\r\n return (this.subcatData && this.subcatData.sections) || [];\r\n }\r\n\r\n get hasSections(): boolean {\r\n return this.sectionsList.length > 0;\r\n }\r\n\r\n private get aspects(): { count: number; list: string[] } {\r\n let aspectCount = 0;\r\n let combinedAspects: string[] = [];\r\n\r\n if (this.hasSections) {\r\n const activeSecs =\r\n (this.selectedSections || []).length > 0\r\n ? this.selectedSections\r\n : this.sectionsList.map((s) => s.id);\r\n activeSecs.forEach((secId) => {\r\n const { count, list } = getAspectsForPath(this.activeCategory, this.activeSubcategory, secId);\r\n aspectCount += count;\r\n combinedAspects = [...combinedAspects, ...list];\r\n });\r\n } else {\r\n const { count, list } = getAspectsForPath(this.activeCategory, this.activeSubcategory);\r\n aspectCount = count;\r\n combinedAspects = list;\r\n }\r\n\r\n return { count: aspectCount, list: combinedAspects };\r\n }\r\n\r\n get aspectCount(): number {\r\n return this.aspects.count;\r\n }\r\n\r\n get combinedAspects(): string[] {\r\n return this.aspects.list;\r\n }\r\n\r\n get itemsToDisplay(): string[] {\r\n return this.combinedAspects.slice(0, 30);\r\n }\r\n\r\n get hiddenCount(): number {\r\n return this.combinedAspects.length - this.itemsToDisplay.length;\r\n }\r\n\r\n get selectionSuffix(): string {\r\n if (this.hasSections && (this.selectedSections || []).length > 0) {\r\n return ` (${this.selectedSections.length} sections)`;\r\n }\r\n return '';\r\n }\r\n\r\n isSelected(id: string): boolean {\r\n return (this.selectedSections || []).includes(id);\r\n }\r\n\r\n toggleSection(id: string): void {\r\n if (this.isSelected(id)) {\r\n this.change({ selected: [] });\r\n } else {\r\n this.change({ selected: [id] });\r\n }\r\n }\r\n}\r\n","import { bindable } from 'aurelia-framework';\r\nimport { getCategory, getSubcategories, iconName, Category, Subcategory } from '../data/analyser';\r\n\r\nexport class SubcategoriesStep {\r\n @bindable selectedCategories: string[] = [];\r\n @bindable selectedSubcategories: string[] = [];\r\n @bindable change: (args: { selected: string[] }) => void;\r\n\r\n iconName = iconName;\r\n\r\n get activeCategory(): string {\r\n return (this.selectedCategories || [])[0];\r\n }\r\n\r\n get categoryData(): Category | undefined {\r\n return getCategory(this.activeCategory);\r\n }\r\n\r\n get subcategoriesList(): Subcategory[] {\r\n return getSubcategories(this.activeCategory);\r\n }\r\n\r\n get selectedSub(): string {\r\n return (this.selectedSubcategories || [])[0] || '';\r\n }\r\n\r\n get isSelected(): boolean {\r\n return this.selectedSub !== '';\r\n }\r\n\r\n handleSelect(value: string): void {\r\n if (value) {\r\n this.change({ selected: [value] });\r\n } else {\r\n this.change({ selected: [] });\r\n }\r\n }\r\n}\r\n","import analyserData from './analyserData.json';\r\n\r\nexport interface Category {\r\n id: string;\r\n name: string;\r\n subCount: number;\r\n icon: string;\r\n emoji?: string;\r\n}\r\n\r\nexport interface Section {\r\n id: string;\r\n name: string;\r\n}\r\n\r\nexport interface Subcategory {\r\n id: string;\r\n name: string;\r\n sections?: Section[];\r\n}\r\n\r\nconst data = analyserData as any;\r\n\r\nexport const CATEGORIES: Category[] = data.categories;\r\n\r\nexport function getSubcategories(categoryId: string): Subcategory[] {\r\n return data.subcategories[categoryId] || [];\r\n}\r\n\r\nexport function getCategory(categoryId: string): Category | undefined {\r\n return CATEGORIES.find((cat) => cat.id === categoryId);\r\n}\r\n\r\n/**\r\n * Maps the JSON icon name (e.g. \"Home\", \"Building2\") to an svg-icon name.\r\n */\r\nexport function iconName(jsonIcon: string): string {\r\n const map: Record = {\r\n Home: 'home',\r\n Building2: 'building-2',\r\n Leaf: 'leaf',\r\n Briefcase: 'briefcase',\r\n };\r\n return map[jsonIcon] || 'home';\r\n}\r\n\r\n/**\r\n * Ported verbatim from SectionsStep.tsx getAspectsForPath: maps a UI path to the\r\n * extracted JSON aspect keys using suffix-stripping + exact/startsWith/includes fallback.\r\n */\r\nexport function getAspectsForPath(\r\n category: string,\r\n subcategory: string,\r\n sectionId?: string\r\n): { count: number; list: string[] } {\r\n let cleanSectionId = sectionId;\r\n if (cleanSectionId) {\r\n cleanSectionId = cleanSectionId\r\n .replace(/_rural$/, '')\r\n .replace(/_eng$/, '')\r\n .replace(/_mgmt$/, '')\r\n .replace(/_recall$/, '')\r\n .replace(/_cyber$/, '')\r\n .replace(/_travel$/, '')\r\n .replace(/_pack$/, '');\r\n }\r\n\r\n const prefix = cleanSectionId\r\n ? `${category}_${subcategory}_${cleanSectionId}`.toLowerCase()\r\n : `${category}_${subcategory}`.toLowerCase();\r\n\r\n const aspectKeys = Object.keys(data.aspects);\r\n\r\n let matchedKey = aspectKeys.find((key) => key === prefix);\r\n\r\n if (!matchedKey) {\r\n matchedKey = aspectKeys.find((key) => key.startsWith(prefix));\r\n }\r\n\r\n if (!matchedKey && cleanSectionId) {\r\n matchedKey = aspectKeys.find(\r\n (key) => key.includes(subcategory) && key.includes(cleanSectionId as string)\r\n );\r\n }\r\n\r\n if (matchedKey) {\r\n const list = data.aspects[matchedKey] || [];\r\n const count = data.aspectCounts[matchedKey] || list.length;\r\n return { count, list };\r\n }\r\n\r\n return { count: 0, list: [] };\r\n}\r\n","import { autoinject } from 'aurelia-framework';\r\nimport { ApiService, ComparisonAspect } from '../../services/api-service';\r\nimport auroraLogo from '../../assets/aurora.svg';\r\n\r\ntype StepType = 'categories' | 'subcategories' | 'sections' | 'documents' | 'analysis';\r\n\r\ninterface StepInfo {\r\n id: StepType;\r\n label: string;\r\n}\r\n\r\n@autoinject\r\nexport class Comparison {\r\n auroraLogo = auroraLogo;\r\n\r\n activeStep: StepType = 'categories';\r\n\r\n selectedCategories: string[] = ['personal'];\r\n selectedSubcategories: string[] = [];\r\n selectedSections: string[] = [];\r\n selectedDocuments: string[] = [];\r\n uploadedFiles: File[] = [];\r\n isGeneratingReport = false;\r\n pdfUrl: string | null = null;\r\n comparisonData: ComparisonAspect[] | null = null;\r\n pdfFilename = 'pds_comparison_report.pdf';\r\n\r\n stepOrder: StepType[] = ['categories', 'subcategories', 'sections', 'documents', 'analysis'];\r\n\r\n steps: StepInfo[] = [\r\n { id: 'categories', label: 'Categories' },\r\n { id: 'subcategories', label: 'Subcategories' },\r\n { id: 'sections', label: 'Sections' },\r\n { id: 'documents', label: 'Documents' },\r\n { id: 'analysis', label: 'Analysis' },\r\n ];\r\n\r\n constructor(private api: ApiService) {}\r\n\r\n detached(): void {\r\n if (this.pdfUrl) {\r\n URL.revokeObjectURL(this.pdfUrl);\r\n }\r\n }\r\n\r\n getStepIndex(step: StepType): number {\r\n return this.stepOrder.indexOf(step);\r\n }\r\n\r\n get currentIndex(): number {\r\n return this.getStepIndex(this.activeStep);\r\n }\r\n\r\n // --- Child change handlers (mirror the React onChange callbacks) ---\r\n\r\n onCategoriesChange(selected: string[]): void {\r\n this.selectedCategories = selected;\r\n this.selectedSubcategories = [];\r\n }\r\n\r\n onSubcategoriesChange(selected: string[]): void {\r\n this.selectedSubcategories = selected;\r\n }\r\n\r\n onSectionsChange(selected: string[]): void {\r\n this.selectedSections = selected;\r\n }\r\n\r\n onUploadedFilesChange(files: File[]): void {\r\n this.uploadedFiles = files;\r\n }\r\n\r\n onDocumentsChange(selected: string[]): void {\r\n this.selectedDocuments = selected;\r\n }\r\n\r\n // --- Report generation ---\r\n\r\n private async generateComparisonReport(files: File[]): Promise {\r\n const result = await this.api.compareDocuments(\r\n files,\r\n this.selectedCategories[0] ?? '',\r\n this.selectedSubcategories[0] ?? '',\r\n this.selectedSections[0] ?? ''\r\n );\r\n\r\n this.comparisonData = result.comparison;\r\n this.pdfFilename = result.pdfFilename;\r\n\r\n if (this.pdfUrl) {\r\n URL.revokeObjectURL(this.pdfUrl);\r\n }\r\n this.pdfUrl = result.pdfUrl;\r\n }\r\n\r\n // --- Navigation ---\r\n\r\n async handleNext(): Promise {\r\n if (this.activeStep === 'documents') {\r\n if (this.isGeneratingReport) {\r\n return;\r\n }\r\n if (this.uploadedFiles.length === 0) {\r\n window.alert('Please upload at least one document.');\r\n return;\r\n }\r\n\r\n this.isGeneratingReport = true;\r\n try {\r\n await this.generateComparisonReport(this.uploadedFiles);\r\n this.activeStep = 'analysis';\r\n } catch (error) {\r\n window.alert(error instanceof Error ? error.message : 'Unable to generate report.');\r\n } finally {\r\n this.isGeneratingReport = false;\r\n }\r\n return;\r\n }\r\n\r\n if (this.currentIndex < this.stepOrder.length - 1) {\r\n this.activeStep = this.stepOrder[this.currentIndex + 1];\r\n }\r\n }\r\n\r\n handleBack(): void {\r\n if (this.currentIndex > 0) {\r\n this.activeStep = this.stepOrder[this.currentIndex - 1];\r\n }\r\n }\r\n\r\n goToStep(step: StepType, idx: number): void {\r\n if (idx <= this.currentIndex) {\r\n this.activeStep = step;\r\n }\r\n }\r\n\r\n handleReset(): void {\r\n if (window.confirm('Are you sure you want to reset all selections?')) {\r\n this.selectedCategories = [];\r\n this.selectedSubcategories = [];\r\n this.selectedSections = [];\r\n this.selectedDocuments = [];\r\n this.uploadedFiles = [];\r\n this.comparisonData = null;\r\n this.pdfFilename = 'pds_comparison_report.pdf';\r\n if (this.pdfUrl) {\r\n URL.revokeObjectURL(this.pdfUrl);\r\n this.pdfUrl = null;\r\n }\r\n this.activeStep = 'categories';\r\n }\r\n }\r\n\r\n handleClose(): void {\r\n window.location.href = '/';\r\n }\r\n\r\n // --- Labels / disabled state ---\r\n\r\n get backButtonLabel(): string {\r\n switch (this.activeStep) {\r\n case 'categories':\r\n return '<< Back';\r\n case 'subcategories':\r\n return '<< Back: Categories';\r\n case 'sections':\r\n return '<< Back: Subcategories';\r\n case 'documents':\r\n return '<< Back: Sections';\r\n case 'analysis':\r\n return '<< Back: Documents';\r\n default:\r\n return '<< Back';\r\n }\r\n }\r\n\r\n get nextButtonLabel(): string {\r\n switch (this.activeStep) {\r\n case 'categories':\r\n return 'Next: Select Subcategories >>';\r\n case 'subcategories':\r\n return 'Next: Select Subcategories >>';\r\n case 'sections':\r\n return 'Next: Upload Document >>';\r\n case 'documents':\r\n return this.isGeneratingReport ? 'Generating Report...' : 'Next: View Analysis >>';\r\n case 'analysis':\r\n return 'Analysis Complete';\r\n default:\r\n return 'Next >>';\r\n }\r\n }\r\n\r\n get isNextDisabled(): boolean {\r\n if (this.activeStep === 'categories' && this.selectedCategories.length === 0) {\r\n return true;\r\n }\r\n if (this.activeStep === 'subcategories' && this.selectedSubcategories.length === 0) {\r\n return true;\r\n }\r\n if (this.activeStep === 'documents' && this.selectedDocuments.length === 0) {\r\n return true;\r\n }\r\n if (this.isGeneratingReport) {\r\n return true;\r\n }\r\n if (this.activeStep === 'analysis') {\r\n return true;\r\n }\r\n return false;\r\n }\r\n}\r\n","import { autoinject } from 'aurelia-framework';\r\nimport { ApiService, QnaSource } from '../../services/api-service';\r\n\r\ninterface ChatMessage {\r\n query: string;\r\n answer: string;\r\n sources?: QnaSource[];\r\n}\r\n\r\nfunction normalizeMarkdown(raw: string): string {\r\n if (!raw) {\r\n return '';\r\n }\r\n\r\n let formatted = raw\r\n .replace(/\\r\\n/g, '\\n')\r\n .replace(/[ \\t]+$/gm, '')\r\n .trim();\r\n\r\n formatted = formatted.replace(/([.:])\\s*-\\s+\\*\\*/g, '$1\\n- **');\r\n formatted = formatted.replace(/\\s+-\\s+\\*\\*/g, '\\n- **');\r\n formatted = formatted.replace(/(Sources:\\s*Page\\s*\\d+.*)$/i, '\\n\\n**$1**');\r\n\r\n return formatted;\r\n}\r\n\r\n@autoinject\r\nexport class DocumentQna {\r\n qnaText = '';\r\n qnaChat: ChatMessage[] = [];\r\n documentId: string | null = sessionStorage.getItem('documentId');\r\n documentName: string | null = sessionStorage.getItem('documentName');\r\n uploading = false;\r\n asking = false;\r\n uploadError: string | null = null;\r\n qnaError: string | null = null;\r\n isDragging = false;\r\n\r\n fileInput: HTMLInputElement;\r\n chatEnd: HTMLElement;\r\n\r\n normalizeMarkdown = normalizeMarkdown;\r\n\r\n handleDragEnter(event: DragEvent): boolean {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n this.isDragging = true;\r\n return false;\r\n }\r\n\r\n handleDragOver(event: DragEvent): boolean {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n if (event.dataTransfer) {\r\n event.dataTransfer.dropEffect = 'copy';\r\n }\r\n this.isDragging = true;\r\n return false;\r\n }\r\n\r\n handleDragLeave(event: DragEvent): boolean {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n this.isDragging = false;\r\n return false;\r\n }\r\n\r\n handleDrop(event: DragEvent): boolean {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n this.isDragging = false;\r\n if (event.dataTransfer?.files?.length) {\r\n const file = event.dataTransfer.files[0];\r\n if (file) {\r\n this.uploadFile(file);\r\n }\r\n }\r\n return false;\r\n }\r\n\r\n constructor(private api: ApiService) {}\r\n\r\n attached(): void {\r\n this.scrollToBottom();\r\n }\r\n\r\n private scrollToBottom(): void {\r\n setTimeout(() => {\r\n if (this.chatEnd) {\r\n this.chatEnd.scrollIntoView({ behavior: 'smooth' });\r\n }\r\n }, 0);\r\n }\r\n\r\n openFilePicker(): void {\r\n if (this.fileInput) {\r\n this.fileInput.click();\r\n }\r\n }\r\n\r\n async uploadFile(file: File): Promise {\r\n if (!file) {\r\n return;\r\n }\r\n\r\n this.uploading = true;\r\n this.uploadError = null;\r\n\r\n try {\r\n const documentId = await this.api.uploadDocument(file);\r\n this.documentId = documentId;\r\n this.documentName = file.name;\r\n sessionStorage.setItem('documentId', documentId);\r\n sessionStorage.setItem('documentName', file.name);\r\n } catch (err: any) {\r\n const msg = (err && err.message) || 'An error occurred during file upload';\r\n window.alert(msg);\r\n this.handleRemoveDocument(); console.error('[DocumentQnA] Upload failed:', err);\r\n } finally {\r\n this.uploading = false;\r\n if (this.fileInput) {\r\n this.fileInput.value = '';\r\n }\r\n }\r\n }\r\n\r\n async handleFileUpload(event: Event): Promise {\r\n const input = event.target as HTMLInputElement;\r\n const file = input.files && input.files[0];\r\n if (file) {\r\n await this.uploadFile(file);\r\n }\r\n }\r\n\r\n handleRemoveDocument(): void {\r\n this.documentId = null;\r\n this.documentName = null;\r\n sessionStorage.removeItem('documentId');\r\n sessionStorage.removeItem('documentName');\r\n this.uploadError = null;\r\n this.qnaError = null;\r\n }\r\n\r\n async handleAskQuestion(event?: Event): Promise {\r\n if (event) {\r\n event.preventDefault();\r\n }\r\n if (!this.qnaText.trim() || !this.documentId || this.asking) {\r\n return;\r\n }\r\n\r\n const query = this.qnaText;\r\n this.qnaText = '';\r\n this.asking = true;\r\n this.qnaError = null;\r\n\r\n const newChatIndex = this.qnaChat.length;\r\n this.qnaChat.push({ query, answer: 'Generating answer...' });\r\n this.scrollToBottom();\r\n\r\n try {\r\n const result = await this.api.askQuestion(this.documentId, query);\r\n this.qnaChat.splice(newChatIndex, 1, {\r\n query,\r\n answer: result.answer,\r\n sources: result.sources,\r\n });\r\n } catch (err: any) {\r\n this.qnaError = (err && err.message) || 'Failed to get an answer.';\r\n this.qnaChat.splice(newChatIndex, 1, {\r\n query,\r\n answer: `Error: ${(err && err.message) || 'Could not retrieve answer. Please try again.'}`,\r\n });\r\n console.error('[DocumentQnA] QA failed:', err);\r\n } finally {\r\n this.asking = false;\r\n this.scrollToBottom();\r\n }\r\n }\r\n\r\n handleResetApp(): void {\r\n if (window.confirm('Are you sure you want to reset all selections?')) {\r\n this.handleRemoveDocument();\r\n this.qnaChat = [];\r\n this.qnaText = '';\r\n }\r\n }\r\n\r\n handleClose(): void {\r\n window.location.href = '/';\r\n }\r\n}\r\n","export class Home {\r\n get today(): string {\r\n return new Date().toLocaleDateString('en-US', {\r\n month: 'long',\r\n day: 'numeric',\r\n year: 'numeric',\r\n });\r\n }\r\n}\r\n","import { autoinject } from 'aurelia-framework';\r\nimport { ApiService } from '../../services/api-service';\r\nimport auroraLogo from '../../assets/aurora.svg';\r\n\r\nfunction normalizeSummary(raw: string): string {\r\n const text = raw\r\n .replace(/\\r\\n/g, '\\n')\r\n .replace(/[ \\t]+$/gm, '')\r\n .replace(/\\n{3,}/g, '\\n\\n')\r\n .replace(/^\\s*#+\\s*/gm, (match) => match.trimStart())\r\n .replace(/^\\s*-\\s+/gm, '- ')\r\n .trim();\r\n\r\n return text.replace(/([^\\n])\\n(#+\\s|-\\s)/g, '$1\\n\\n$2');\r\n}\r\n\r\n@autoinject\r\nexport class Summarization {\r\n auroraLogo = auroraLogo;\r\n\r\n selectedFiles: File[] = [];\r\n summary = '';\r\n isSubmitting = false;\r\n error = '';\r\n copied = false;\r\n\r\n private copyTimer: ReturnType | null = null;\r\n\r\n constructor(private api: ApiService) { }\r\n\r\n get normalizedSummary(): string {\r\n return normalizeSummary(this.summary);\r\n }\r\n\r\n get totalSizeKb(): number {\r\n return Math.round(this.selectedFiles.reduce((total, file) => total + file.size, 0) / 1024);\r\n }\r\n\r\n get firstFileName(): string {\r\n return this.selectedFiles[0] ? this.selectedFiles[0].name : '';\r\n }\r\n\r\n isDragging = false;\r\n\r\n handleDragEnter(event: DragEvent): boolean {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n this.isDragging = true;\r\n return false;\r\n }\r\n\r\n handleDragOver(event: DragEvent): boolean {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n if (event.dataTransfer) {\r\n event.dataTransfer.dropEffect = 'copy';\r\n }\r\n this.isDragging = true;\r\n return false;\r\n }\r\n\r\n handleDragLeave(event: DragEvent): boolean {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n this.isDragging = false;\r\n return false;\r\n }\r\n\r\n handleDrop(event: DragEvent): boolean {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n this.isDragging = false;\r\n \r\n if (event.dataTransfer?.files?.length) {\r\n const files = Array.from(event.dataTransfer.files);\r\n if (files.length > 0) {\r\n this.selectedFiles = files;\r\n this.summary = '';\r\n this.error = '';\r\n }\r\n }\r\n return false;\r\n }\r\n\r\n handleFileChange(event: Event): void {\r\n const input = event.target as HTMLInputElement;\r\n const files = Array.from(input.files || []);\r\n if (files.length > 0) {\r\n this.selectedFiles = files;\r\n this.summary = '';\r\n this.error = '';\r\n }\r\n }\r\n\r\n async handleGenerate(): Promise {\r\n if (this.selectedFiles.length === 0) {\r\n return;\r\n }\r\n\r\n this.isSubmitting = true;\r\n this.error = '';\r\n\r\n try {\r\n this.summary = await this.api.summarize(this.selectedFiles);\r\n } catch (err) {\r\n const msg = err instanceof Error ? err.message : 'Something went wrong.';\r\n window.alert(msg);\r\n this.handleReset();\r\n } finally {\r\n this.isSubmitting = false;\r\n }\r\n }\r\n\r\n handleReset(): void {\r\n this.selectedFiles = [];\r\n this.summary = '';\r\n this.error = '';\r\n }\r\n\r\n async handleCopy(): Promise {\r\n if (!this.summary) return;\r\n try {\r\n await navigator.clipboard.writeText(this.summary);\r\n } catch {\r\n // fallback for browsers blocking clipboard API\r\n const ta = document.createElement('textarea');\r\n ta.value = this.summary;\r\n ta.style.position = 'fixed';\r\n ta.style.opacity = '0';\r\n document.body.appendChild(ta);\r\n ta.focus();\r\n ta.select();\r\n document.execCommand('copy');\r\n document.body.removeChild(ta);\r\n }\r\n this.copied = true;\r\n if (this.copyTimer) clearTimeout(this.copyTimer);\r\n this.copyTimer = setTimeout(() => { this.copied = false; }, 2000);\r\n }\r\n\r\n handleDownload(): void {\r\n if (!this.summary) return;\r\n const blob = new Blob([this.summary], { type: 'text/plain' });\r\n const url = URL.createObjectURL(blob);\r\n const a = document.createElement('a');\r\n a.href = url;\r\n a.download = `Summary_${this.firstFileName || 'document'}.txt`;\r\n document.body.appendChild(a);\r\n a.click();\r\n document.body.removeChild(a);\r\n URL.revokeObjectURL(url);\r\n }\r\n\r\n handleResetApp(): void {\r\n if (window.confirm('Are you sure you want to reset all selections?')) {\r\n this.handleReset();\r\n }\r\n }\r\n\r\n handleClose(): void {\r\n window.location.href = '/';\r\n }\r\n}\r\n","/**\r\n * Inner SVG markup for each lucide icon used by the app.\r\n * Geometry taken from lucide (24x24 viewBox, stroke-based).\r\n * Replaces the lucide-react icon components from the original app.\r\n */\r\nexport const ICON_DATA: Record = {\r\n home:\r\n '',\r\n 'building-2':\r\n '',\r\n 'shield-check':\r\n '',\r\n briefcase:\r\n '',\r\n leaf:\r\n '',\r\n 'git-compare':\r\n '',\r\n 'file-text':\r\n '',\r\n 'message-square-text':\r\n '',\r\n sparkles:\r\n '',\r\n paperclip:\r\n '',\r\n loader:\r\n '',\r\n 'chevron-up': '',\r\n 'chevron-down': '',\r\n search: '',\r\n 'trash-2':\r\n '',\r\n x: '',\r\n eye:\r\n '',\r\n 'check-square':\r\n '',\r\n square: '',\r\n check: '',\r\n 'arrow-right': '',\r\n 'file-check-2':\r\n '',\r\n folder:\r\n '',\r\n copy:\r\n '',\r\n download:\r\n '',\r\n list:\r\n '',\r\n info:\r\n '',\r\n 'circle-check':\r\n '',\r\n upload:\r\n '',\r\n 'chevron-left': '',\r\n 'chevron-right': '',\r\n 'circle-check-filled': '',\r\n};\r\n","import { bindable, bindingMode } from 'aurelia-framework';\r\nimport { ICON_DATA } from './icon-data';\r\n\r\n/**\r\n * \r\n * Renders an inline lucide-style SVG. Replaces lucide-react.\r\n * `currentColor` is used for the stroke so colour is driven by CSS `color`.\r\n */\r\nexport class SvgIcon {\r\n @bindable name: string = '';\r\n @bindable({ defaultBindingMode: bindingMode.oneTime }) size: number | string = 16;\r\n @bindable strokeWidth: number | string = 2;\r\n\r\n get markup(): string {\r\n const inner = ICON_DATA[this.name];\r\n if (!inner) {\r\n return '';\r\n }\r\n const dimension = String(this.size);\r\n return (\r\n `${inner}`\r\n );\r\n }\r\n}\r\n","import { FrameworkConfiguration, PLATFORM } from 'aurelia-framework';\r\n\r\nexport function configure(config: FrameworkConfiguration): void {\r\n config.globalResources([\r\n PLATFORM.moduleName('document-analyser/resources/elements/svg-icon'),\r\n PLATFORM.moduleName('document-analyser/resources/value-converters/markdown'),\r\n PLATFORM.moduleName('document-analyser/resources/value-converters/file-size'),\r\n ]);\r\n}\r\n","/**\r\n * Formats a byte count the way DocumentsStep.tsx did: \"kb\" under 1MB, else \"MB\".\r\n * Usage: ${doc.size | fileSize}\r\n */\r\nexport class FileSizeValueConverter {\r\n toView(bytes: number): string {\r\n if (bytes == null || isNaN(bytes)) {\r\n return '';\r\n }\r\n if (bytes < 1024 * 1024) {\r\n return `${Math.round(bytes / 1024)} kb`;\r\n }\r\n return `${(bytes / (1024 * 1024)).toFixed(1)} MB`;\r\n }\r\n}\r\n","import MarkdownIt from 'markdown-it';\r\nimport DOMPurify from 'dompurify';\r\n\r\nconst md = new MarkdownIt({\r\n html: false,\r\n linkify: true,\r\n breaks: false,\r\n});\r\n\r\n/**\r\n * Renders GitHub-flavoured-ish markdown to sanitized HTML.\r\n * Replaces react-markdown + remark-gfm + rehype-sanitize.\r\n * Usage:
\r\n */\r\nexport class MarkdownValueConverter {\r\n toView(value: string): string {\r\n if (!value) {\r\n return '';\r\n }\r\n const rendered = md.render(value);\r\n return DOMPurify.sanitize(rendered);\r\n }\r\n}\r\n","// Git-ignored. Build-time fallback for the Document Analyser function app; the runtime\n// app-config.js generated per environment takes precedence (see api-service.ts getFunctionKey).\nexport default {\n debug: process.env.NODE_ENV !== 'production',\n apiBaseUrl: 'https://aubidocumentanalyser-e0fhasagdza6hygz.australiaeast-01.azurewebsites.net/api',\n comparisonFunctionKey: 'CbA7NZ4mjEra-d4YaTp_-gtjcEBxTxZ1WNB3xA-Yc0QEAzFuUqA2oQ==',\n summaryFunctionKey: '6ITftXW13RINkmK-DnfnWBLuoa8tahQXqlKAExqc7X_wAzFug1M8uw==',\n uploadFunctionKey: 'mvpQr2x5V9p4EGEu02YcjVlM0of-bYGLAOWCM3I6UgogAzFuEGPLRA==',\n qnaFunctionKey: 'wFWM2st9BiFuj0bWM-qSbhn6weO0LjscxpgtJyx7DmKDAzFuUEZ7IQ==',\n};\n","import { autoinject } from 'aurelia-framework';\r\nimport { HttpClient } from 'aurelia-fetch-client';\r\nimport environment from '../environment';\r\n\r\nexport interface ComparisonDocument {\r\n filename: string;\r\n description: string;\r\n}\r\n\r\nexport interface ComparisonAspect {\r\n aspect_number: number;\r\n aspect_name: string;\r\n documents: ComparisonDocument[];\r\n}\r\n\r\nexport interface ComparisonResult {\r\n comparison: ComparisonAspect[];\r\n pdfUrl: string | null;\r\n pdfFilename: string;\r\n}\r\n\r\nexport interface SummaryItem {\r\n filename?: string;\r\n summary?: string;\r\n error?: string | null;\r\n}\r\n\r\nexport interface QnaSource {\r\n page: number;\r\n chunk_id: string;\r\n}\r\n\r\nexport interface QnaResult {\r\n answer: string;\r\n sources?: QnaSource[];\r\n}\r\n\r\nfunction normaliseBaseUrl(baseUrl: string = ''): string {\r\n return baseUrl.replace(/\\/+$/, '');\r\n}\r\n\r\nfunction getDocumentAnalyserBaseUrl(): string {\r\n const runtimeBaseUrl = window.__AURORA_CONFIG__?.documentAnalyser?.apiBaseUrl;\r\n const baseUrl = normaliseBaseUrl(runtimeBaseUrl || environment.apiBaseUrl);\r\n\r\n if (!baseUrl) {\r\n throw new Error('Document Analyser API base URL is not configured.');\r\n }\r\n\r\n return `${baseUrl}/`;\r\n}\r\n\r\ntype FunctionKeyName = 'comparisonFunctionKey' | 'summaryFunctionKey' | 'uploadFunctionKey' | 'qnaFunctionKey';\r\n\r\n// Same precedence as the base URL above: runtime app-config.js wins, the bundled environment.ts is\r\n// the fallback. Without this the keys are fixed at build time, so one bundle cannot be pointed at a\r\n// different environment's Function App.\r\nfunction getFunctionKey(name: FunctionKeyName): string {\r\n return window.__AURORA_CONFIG__?.documentAnalyser?.[name] || environment[name];\r\n}\r\n\r\n@autoinject\r\nexport class ApiService {\r\n constructor(private http: HttpClient) { }\r\n\r\n private endpoint(path: string): string {\r\n return `${getDocumentAnalyserBaseUrl()}${path.replace(/^\\/+/, '')}`;\r\n }\r\n\r\n /**\r\n * POST /document-comparison\r\n * Mirrors Comparison.tsx generateComparisonReport: posts files + selection ids,\r\n * decodes the base64 PDF into an object URL.\r\n */\r\n async compareDocuments(\r\n files: File[],\r\n categoryId: string,\r\n subcategoryId: string,\r\n sectionId: string\r\n ): Promise {\r\n const formData = new FormData();\r\n files.forEach((file) => formData.append('files', file));\r\n formData.append('category_id', categoryId ?? '');\r\n formData.append('subcategory_id', subcategoryId ?? '');\r\n formData.append('section_id', sectionId ?? '');\r\n\r\n const response = await this.http.fetch(this.endpoint('document-comparison'), {\r\n method: 'POST',\r\n headers: {\r\n 'x-functions-key': getFunctionKey('comparisonFunctionKey'),\r\n },\r\n body: formData,\r\n });\r\n\r\n if (!response.ok) {\r\n let errorMsg = `Request failed (${response.status}).`;\r\n try {\r\n const errJson: any = await response.json();\r\n if (errJson.error) {\r\n errorMsg = errJson.reason\r\n ? `${errJson.error}\\n\\n${errJson.reason}`\r\n : errJson.error;\r\n }\r\n } catch {\r\n // response body was not JSON — keep the default message\r\n }\r\n throw new Error(errorMsg);\r\n }\r\n\r\n const json: any = await response.json();\r\n const comparison: ComparisonAspect[] = json.comparison || [];\r\n const pdfFilename: string = json.pdf_filename || 'pds_comparison_report.pdf';\r\n\r\n let pdfUrl: string | null = null;\r\n if (json.pdf_base64) {\r\n pdfUrl = this.base64ToObjectUrl(json.pdf_base64, 'application/pdf');\r\n }\r\n\r\n return { comparison, pdfUrl, pdfFilename };\r\n }\r\n\r\n /**\r\n * POST /summary - tolerates several response shapes (see Summarization.tsx).\r\n */\r\n async summarize(files: File[]): Promise {\r\n const formData = new FormData();\r\n files.forEach((file) => formData.append('files', file));\r\n\r\n const response = await this.http.fetch(this.endpoint('summary'), {\r\n method: 'POST',\r\n headers: {\r\n 'x-functions-key': getFunctionKey('summaryFunctionKey'),\r\n },\r\n body: formData,\r\n });\r\n // console.log(response)\r\n if (!response.ok) {\r\n let errorMsg = `Request failed (${response.status}).`;\r\n try {\r\n const errJson: any = await response.json();\r\n if (errJson.error) {\r\n errorMsg = errJson.reason\r\n ? `${errJson.error}\\n\\n${errJson.reason}`\r\n : errJson.error;\r\n }\r\n } catch {\r\n // response body was not JSON — keep the default message\r\n }\r\n throw new Error(errorMsg);\r\n }\r\n\r\n const contentType = response.headers.get('content-type') ?? '';\r\n if (contentType.includes('application/json')) {\r\n const data: any = await response.json();\r\n const summaries: SummaryItem[] = Array.isArray(data.summaries) ? data.summaries : [];\r\n const summaryText = summaries\r\n .map((item) => {\r\n if (item.error) {\r\n return item.filename ? `${item.filename}: ${item.error}` : `Error: ${item.error}`;\r\n }\r\n if (item.summary) {\r\n return item.filename ? `${item.filename}:\\n${item.summary}` : item.summary;\r\n }\r\n return '';\r\n })\r\n .filter(Boolean)\r\n .join('\\n\\n');\r\n\r\n const fallbackText = data.summary || data.summaryText || data.result || '';\r\n return summaryText || fallbackText || 'Summary generated, but response was empty.';\r\n }\r\n\r\n const text = await response.text();\r\n return text || 'Summary generated, but response was empty.';\r\n }\r\n\r\n /**\r\n * POST /upload-document - returns the document_id for a single PDF.\r\n */\r\n async uploadDocument(file: File): Promise {\r\n const formData = new FormData();\r\n formData.append('file', file);\r\n\r\n const response = await this.http.fetch(this.endpoint('upload-document'), {\r\n method: 'POST',\r\n headers: {\r\n 'x-functions-key': getFunctionKey('uploadFunctionKey'),\r\n },\r\n body: formData,\r\n });\r\n\r\n if (!response.ok) {\r\n let errorMsg = `Upload failed with status ${response.status}`;\r\n try {\r\n const errJson: any = await response.json();\r\n if (errJson.error) {\r\n errorMsg = errJson.reason\r\n ? `${errJson.error}\\n\\n${errJson.reason}`\r\n : errJson.error;\r\n }\r\n } catch {\r\n // response body was not JSON — keep the default message\r\n }\r\n throw new Error(errorMsg);\r\n }\r\n\r\n const data: any = await response.json();\r\n if (data.status === 'success' && data.document_id) {\r\n return data.document_id as string;\r\n }\r\n throw new Error(data.error || 'Failed to process document');\r\n }\r\n\r\n /**\r\n * POST /document-qa - asks a question against an uploaded document.\r\n */\r\n async askQuestion(documentId: string, question: string): Promise {\r\n const response = await this.http.fetch(this.endpoint('document-qa'), {\r\n method: 'POST',\r\n headers: { 'Content-Type': 'application/json', 'x-functions-key': getFunctionKey('qnaFunctionKey') },\r\n body: JSON.stringify({ document_id: documentId, question }),\r\n });\r\n\r\n if (!response.ok) {\r\n let errorMsg = `Request failed with status ${response.status}`;\r\n try {\r\n const errJson: any = await response.json();\r\n if (errJson.error) {\r\n errorMsg = errJson.reason\r\n ? `${errJson.error}\\n\\n${errJson.reason}`\r\n : errJson.error;\r\n }\r\n } catch {\r\n // response body was not JSON — keep the default message\r\n }\r\n throw new Error(errorMsg);\r\n }\r\n\r\n const data: any = await response.json();\r\n if (data.answer) {\r\n return { answer: data.answer, sources: data.sources };\r\n }\r\n throw new Error(data.error || 'Failed to get answer from AI');\r\n }\r\n\r\n private base64ToObjectUrl(base64: string, mimeType: string): string {\r\n const byteCharacters = atob(base64);\r\n const byteNumbers = new Array(byteCharacters.length);\r\n for (let i = 0; i < byteCharacters.length; i++) {\r\n byteNumbers[i] = byteCharacters.charCodeAt(i);\r\n }\r\n const byteArray = new Uint8Array(byteNumbers);\r\n const blob = new Blob([byteArray], { type: mimeType });\r\n return URL.createObjectURL(blob);\r\n }\r\n}\r\n","import { JsonEndpoint } from 'resources/endpoints/json-endpoint';\r\nimport { environment } from 'environment';\r\nimport { RequestMethod } from 'resources/endpoints/endpoints';\r\nimport { IAdviserFunderCredentials } from 'interfaces/i-adviser-funder-credentials';\r\n\r\nexport interface IRouteParamsAdviserFunderCredentials {\r\n adviserId: number;\r\n}\r\n\r\nexport class AdviserFunderCredentialsEndpoint extends JsonEndpoint<\r\n IRouteParamsAdviserFunderCredentials,\r\n void,\r\n IAdviserFunderCredentials\r\n> {\r\n protected method: RequestMethod = RequestMethod.get;\r\n\r\n protected uri(parameters: IRouteParamsAdviserFunderCredentials): string {\r\n return `${environment.apiHost}/api/premiumfunder/passwords?adviserId=${parameters.adviserId}`;\r\n }\r\n}\r\n","import { JsonEndpoint } from 'resources/endpoints/json-endpoint';\r\nimport { environment } from 'environment';\r\nimport { RequestMethod } from 'resources/endpoints/endpoints';\r\n\r\nexport interface IResetPasswordBody {\r\n emailAddress: string;\r\n}\r\n\r\nexport interface IResetPasswordResponse {\r\n success: boolean;\r\n message: string;\r\n}\r\n\r\nexport class ResetPasswordEndpoint extends JsonEndpoint {\r\n protected method: RequestMethod = RequestMethod.post;\r\n\r\n protected uri(): string {\r\n return `${environment.apiHost}/api/users/resetpassword`;\r\n }\r\n}\r\n","import { JsonEndpoint } from 'resources/endpoints/json-endpoint';\r\nimport { environment } from 'environment';\r\nimport { RequestMethod } from 'resources/endpoints/endpoints';\r\nimport { ITokenResponse } from './token-endpoint';\r\n\r\nexport interface ISsoCallbackBody {\r\n id_token: string;\r\n app_client_type: string;\r\n app_client_instance: string;\r\n}\r\n\r\n/**\r\n * Trades the Microsoft id_token MSAL just handed us for an Aurora JWT.\r\n * Addresses the auth server directly - only /token is proxied through the API. The response\r\n * carries the Aurora access token with the role claim, same shape as /token, so\r\n * TokenService.saveToken takes it as-is.\r\n */\r\nexport class SsoCallbackEndpoint extends JsonEndpoint {\r\n protected method: RequestMethod = RequestMethod.post;\r\n\r\n protected uri(): string {\r\n return `${environment.authHost}/auth/callback`;\r\n }\r\n}\r\n","import { FormEndpoint } from 'resources/endpoints/form-endpoint';\r\nimport { environment } from 'environment';\r\nimport { RequestMethod } from 'resources/endpoints/endpoints';\r\n\r\nexport interface ITokenResponse {\r\n access_token: string;\r\n token_type: string;\r\n expires_in: number;\r\n refresh_token: string;\r\n 'as:client_id': string;\r\n 'as:tenant': string | null;\r\n userName: string;\r\n '.issued': string;\r\n '.expires': string;\r\n}\r\n\r\nexport class AuthTokenEndpoint extends FormEndpoint {\r\n protected method: RequestMethod = RequestMethod.post;\r\n\r\n protected uri(): string {\r\n // apiHost, never authHost: the API proxies /token onwards and adds the 2FA and licence\r\n // headers the login flow reads off the response\r\n return `${environment.apiHost}/token`;\r\n }\r\n}\r\n","import { JsonEndpoint } from 'resources/endpoints/json-endpoint';\r\nimport { environment } from 'environment';\r\nimport { RequestMethod } from 'resources/endpoints/endpoints';\r\n\r\nexport interface IRequestBodyChangePassword {\r\n currentPassword: string;\r\n newPassword: string;\r\n confirmPassword: string;\r\n}\r\n\r\nexport interface IResponseChangePassword {\r\n errors: {\r\n errorKey: string;\r\n }[];\r\n}\r\n\r\nexport class ChangePasswordEndpoint extends JsonEndpoint {\r\n protected method: RequestMethod = RequestMethod.post;\r\n\r\n protected uri(): string {\r\n return `${environment.apiHost}/api/users/changepassword`;\r\n }\r\n}\r\n","import { JsonEndpoint } from 'resources/endpoints/json-endpoint';\r\nimport { environment } from 'environment';\r\nimport { RequestMethod } from 'resources/endpoints/endpoints';\r\nimport { FunderCredential } from 'resources/models/client';\r\n\r\nexport class CreateFunderPasswordEndpoint extends JsonEndpoint {\r\n protected method: RequestMethod = RequestMethod.post;\r\n\r\n protected uri(): string {\r\n return `${environment.apiHost}/api/premiumfunder/passwords`;\r\n }\r\n}\r\n","import { JsonEndpoint } from 'resources/endpoints/json-endpoint';\r\nimport { environment } from 'environment';\r\nimport { RequestMethod } from 'resources/endpoints/endpoints';\r\n\r\nexport interface IRouteParamsDeleteFunderPassword {\r\n adviserFunderCredentialsId: number;\r\n}\r\n\r\nexport class DeleteFunderPasswordEndpoint extends JsonEndpoint {\r\n protected method: RequestMethod = RequestMethod.delete;\r\n\r\n protected uri(parameters: IRouteParamsDeleteFunderPassword): string {\r\n return `${environment.apiHost}/api/premiumfunder/passwords/${parameters.adviserFunderCredentialsId}`;\r\n }\r\n}\r\n","import { JsonEndpoint } from 'resources/endpoints/json-endpoint';\r\nimport { environment } from 'environment';\r\nimport { RequestMethod } from 'resources/endpoints/endpoints';\r\n\r\nexport interface IRouteParamsFillDocTree {\r\n clientId: number;\r\n}\r\n\r\nexport class FillDocumentTreeEndpoint extends JsonEndpoint {\r\n protected method: RequestMethod = RequestMethod.post;\r\n\r\n protected uri(parameters: IRouteParamsFillDocTree): string {\r\n return `${environment.apiHost}/api/clients/${parameters.clientId}/docmgmt`;\r\n }\r\n}\r\n","import * as Dtos from 'components/document-management/dtos';\r\nimport { JsonEndpoint } from 'resources/endpoints/json-endpoint';\r\nimport { environment } from 'environment';\r\nimport { RequestMethod } from 'resources/endpoints/endpoints';\r\n\r\nexport interface IRouteParamsGetAllFolders {\r\n clientId: number;\r\n}\r\n\r\nexport class GetAllFoldersEndpoint extends JsonEndpoint {\r\n protected method: RequestMethod = RequestMethod.get;\r\n\r\n protected uri(parameters: IRouteParamsGetAllFolders): string {\r\n return `${environment.apiHost}/api/clients/${parameters.clientId}/docmgmt`;\r\n }\r\n}\r\n","import { JsonEndpoint } from 'resources/endpoints/json-endpoint';\r\nimport { environment } from 'environment';\r\nimport { RequestMethod } from 'resources/endpoints/endpoints';\r\n\r\nexport interface IRouteParamsGetExternalSystemPassword {\r\n systemKey: string;\r\n}\r\n\r\nexport class GetExternalSystemPasswordEndpoint extends JsonEndpoint> {\r\n protected method: RequestMethod = RequestMethod.get;\r\n\r\n protected uri(parameters: IRouteParamsGetExternalSystemPassword): string {\r\n return `${environment.apiHost}/api/users/current/externalsystemcredentials?externalSystemIdentifier=${parameters.systemKey}`;\r\n }\r\n}\r\n","import { JsonEndpoint } from 'resources/endpoints/json-endpoint';\r\nimport { environment } from 'environment';\r\nimport { RequestMethod } from 'resources/endpoints/endpoints';\r\nimport { INotificationGroup } from 'interfaces/i-notification-group';\r\n\r\nexport class NotificationsEndpoint extends JsonEndpoint {\r\n protected method: RequestMethod = RequestMethod.get;\r\n\r\n protected uri(): string {\r\n return `${environment.apiHost}/api/homepage/notifications`;\r\n }\r\n}\r\n","import { JsonEndpoint } from 'resources/endpoints/json-endpoint';\r\nimport { environment } from 'environment';\r\nimport { RequestMethod } from 'resources/endpoints/endpoints';\r\n\r\nexport class LicenceAcceptanceEndpoint extends JsonEndpoint {\r\n protected method: RequestMethod = RequestMethod.post;\r\n\r\n protected uri(): string {\r\n return `${environment.apiHost}/api/users/current/licenceacceptance`;\r\n }\r\n}\r\n","import { JsonEndpoint } from 'resources/endpoints/json-endpoint';\r\nimport { environment } from 'environment';\r\nimport { RequestMethod } from 'resources/endpoints/endpoints';\r\n\r\nexport class LicenceAgreementEndpoint extends JsonEndpoint {\r\n protected method: RequestMethod = RequestMethod.get;\r\n\r\n protected uri(): string {\r\n return `${environment.apiHost}/api/users/current/licenceagreement`;\r\n }\r\n}\r\n","import { JsonEndpoint } from 'resources/endpoints/json-endpoint';\r\nimport { environment } from 'environment';\r\nimport { RequestMethod } from 'resources/endpoints/endpoints';\r\nimport { IMessage } from 'interfaces/i-message';\r\n\r\nexport interface IRouteParamsMessages {\r\n priority: string;\r\n status: string;\r\n}\r\n\r\nexport class MessagesEndpoint extends JsonEndpoint {\r\n protected method: RequestMethod = RequestMethod.get;\r\n\r\n protected uri(parameters: IRouteParamsMessages = { priority: 'all', status: 'all' }): string {\r\n return `${environment.apiHost}/api/homepage/messages?priority=${parameters.priority}&status=${parameters.status}`;\r\n }\r\n}\r\n\r\n","import { JsonEndpoint } from 'resources/endpoints/json-endpoint';\r\nimport { environment } from 'environment';\r\nimport { RequestMethod } from 'resources/endpoints/endpoints';\r\nimport { IExternalSystemCredential } from 'interfaces/i-external-system-credential';\r\n\r\nexport interface IRouteParamsPostExternalSystemPassword {\r\n systemKey: string;\r\n}\r\n\r\nexport interface IRequestBodyPostExternalSystemPassword {\r\n userName: string;\r\n password: string;\r\n confirmPassword: string;\r\n externalSystemCredentialId?: string;\r\n}\r\n\r\nexport class PostExternalSystemPasswordEndpoint extends JsonEndpoint {\r\n protected method: RequestMethod = RequestMethod.post;\r\n\r\n protected uri(parameters: IRouteParamsPostExternalSystemPassword): string {\r\n return `${environment.apiHost}/api/users/current/externalsystemcredentials?externalSystemIdentifier=${parameters.systemKey}`;\r\n }\r\n}\r\n","import { JsonEndpoint } from 'resources/endpoints/json-endpoint';\r\nimport { environment } from 'environment';\r\nimport { RequestMethod } from 'resources/endpoints/endpoints';\r\n\r\nexport interface IRouteParamsPutExternalSystemPassword {\r\n externalSystemCredentialId: number;\r\n systemKey: string;\r\n}\r\n\r\nexport interface IRequestBodyPutExternalSystemPassword {\r\n userName: string;\r\n password: string;\r\n confirmPassword: string;\r\n externalSystemCredentialId?: string;\r\n}\r\n\r\nexport class PutExternalSystemPasswordEndpoint extends JsonEndpoint {\r\n protected method: RequestMethod = RequestMethod.put;\r\n\r\n protected uri(parameters: IRouteParamsPutExternalSystemPassword): string {\r\n return `${environment.apiHost}/api/users/current/externalsystemcredentials/${parameters.externalSystemCredentialId}?externalSystemIdentifier=${parameters.systemKey}`;\r\n }\r\n}\r\n","import { JsonEndpoint } from 'resources/endpoints/json-endpoint';\r\nimport { environment } from 'environment';\r\nimport { RequestMethod } from 'resources/endpoints/endpoints';\r\nimport { ISearchResponse } from 'interfaces/i-search-response';\r\n\r\nexport interface ISearchParams {\r\n query: string;\r\n}\r\n\r\nexport class SearchEndpoint extends JsonEndpoint {\r\n protected method: RequestMethod = RequestMethod.get;\r\n\r\n protected uri(routeParams: ISearchParams): string {\r\n return `${environment.apiHost}/api/search?searchString=${encodeURIComponent(routeParams.query)}`;\r\n }\r\n}\r\n","import { JsonEndpoint } from 'resources/endpoints/json-endpoint';\r\nimport { environment } from 'environment';\r\nimport { RequestMethod } from 'resources/endpoints/endpoints';\r\nimport { FunderCredential } from 'resources/models/client';\r\n\r\nexport interface IRouteParamsUpdateFunderPassword {\r\n adviserFunderCredentialsId: number;\r\n}\r\n\r\nexport class UpdateFunderPasswordEndpoint extends JsonEndpoint {\r\n protected method: RequestMethod = RequestMethod.put;\r\n\r\n protected uri(parameters: IRouteParamsUpdateFunderPassword): string {\r\n return `${environment.apiHost}/api/premiumfunder/passwords/${parameters.adviserFunderCredentialsId}`;\r\n }\r\n}\r\n","export enum InsuredAction {\r\n NoAction = '',\r\n AddLocation = 'addLocation',\r\n UpdateLocation = 'updateLocation',\r\n DeleteLocation = 'deleteLocation',\r\n AddRisk = 'addRisk',\r\n UpdateRisk = 'updateRisk',\r\n DeleteRisk = 'deleteRisk'\r\n}\r\n","import { Environment, PartialEnvironment } from 'base-environment';\r\n\r\nconst environmentOverrides: PartialEnvironment = {\r\n // ### Include all the development release settings overrides ###\r\n debug: true\r\n};\r\n\r\nexport const DevEnvironment = new Environment(environmentOverrides);\r\n","import { DevEnvironment } from './environments/dev';\r\nimport { ProdEnvironment } from './environments/prod';\r\n\r\nconst environmentMap = {\r\n development: DevEnvironment,\r\n production: ProdEnvironment,\r\n};\r\n\r\n// note, this will resolve at build time\r\nconst environment = environmentMap[process.env.NODE_ENV] || DevEnvironment;\r\n\r\nexport { environment };\r\n","import { Environment, PartialEnvironment } from 'base-environment';\r\n\r\nconst environmentOverrides: PartialEnvironment = {\r\n // ### Include all the production release settings overrides ###\r\n debug: false\r\n};\r\n\r\nexport const ProdEnvironment = new Environment(environmentOverrides);\r\n","export enum FeatureFlag {\r\n qceDebug = 'qceDebug',\r\n christmas = 'christmas',\r\n}\r\n"],"names":["isCollapsed","toggleSidebar","this","configureRouter","config","router","title","map","route","name","moduleId","nav","settings","icon","selectedCategories","selectedSubcategories","selectedSections","selectedDocuments","pdfUrl","comparisonData","pdfFilename","isExpanded","searchQuery","length","documents","d","filename","q","toLowerCase","filter","aspect","aspect_name","includes","toggleExpand","cellFor","docName","docData","find","description","stripPdf","replace","bindable","categories","iconName","selectedMap","selectedCategoriesChanged","newValue","forEach","id","toggleCategory","change","selected","uploadedFiles","isGeneratingReport","uploadedDocs","isDragging","timers","Set","seq","handleDragEnter","event","preventDefault","stopPropagation","handleDragOver","dataTransfer","dropEffect","handleDragLeave","handleDrop","files","Array","from","processFiles","bind","file","size","charCount","Math","round","status","progress","detached","t","clearInterval","clearTimeout","clear","some","isAnyUploadingOrProcessing","hasNoCompletedFiles","formatChars","chars","toLocaleString","notifyParent","completed","filesChange","selectionChange","simulateUpload","interval","setInterval","floor","random","delete","doc","setTimeout","d2","add","fileList","window","alert","newDocs","idx","handleFileUpload","input","target","value","removeUploaded","showParametersModal","activeCategory","sub","activeSubcategory","subcatData","sections","sectionsList","aspectCount","combinedAspects","hasSections","s","secId","count","list","aspects","slice","itemsToDisplay","isSelected","toggleSection","selectedSub","handleSelect","data","CATEGORIES","getSubcategories","categoryId","subcategories","getCategory","cat","jsonIcon","Home","Building2","Leaf","Briefcase","getAspectsForPath","category","subcategory","sectionId","cleanSectionId","prefix","aspectKeys","Object","keys","matchedKey","key","startsWith","aspectCounts","api","auroraLogo","activeStep","stepOrder","steps","label","URL","revokeObjectURL","getStepIndex","step","indexOf","onCategoriesChange","onSubcategoriesChange","onSectionsChange","onUploadedFilesChange","onDocumentsChange","generateComparisonReport","Promise","compareDocuments","result","comparison","handleNext","Error","message","currentIndex","handleBack","goToStep","handleReset","confirm","handleClose","location","href","autoinject","Comparison","normalizeMarkdown","raw","formatted","trim","qnaText","qnaChat","documentId","sessionStorage","getItem","documentName","uploading","asking","uploadError","qnaError","uploadFile","attached","scrollToBottom","chatEnd","scrollIntoView","behavior","openFilePicker","fileInput","click","uploadDocument","setItem","msg","handleRemoveDocument","console","error","removeItem","handleAskQuestion","query","newChatIndex","push","answer","askQuestion","splice","sources","handleResetApp","DocumentQna","Date","toLocaleDateString","month","day","year","selectedFiles","summary","isSubmitting","copied","copyTimer","match","trimStart","reduce","total","handleFileChange","handleGenerate","summarize","handleCopy","navigator","clipboard","writeText","ta","document","createElement","style","position","opacity","body","appendChild","focus","select","execCommand","removeChild","handleDownload","blob","Blob","type","url","createObjectURL","a","download","firstFileName","Summarization","ICON_DATA","home","briefcase","leaf","sparkles","paperclip","loader","search","x","eye","square","check","folder","copy","info","upload","strokeWidth","inner","dimension","String","defaultBindingMode","bindingMode","configure","globalResources","toView","bytes","isNaN","toFixed","md","html","linkify","breaks","rendered","render","debug","apiBaseUrl","comparisonFunctionKey","summaryFunctionKey","uploadFunctionKey","qnaFunctionKey","getFunctionKey","__AURORA_CONFIG__","documentAnalyser","environment","http","endpoint","path","baseUrl","normaliseBaseUrl","getDocumentAnalyserBaseUrl","subcategoryId","formData","FormData","append","fetch","method","headers","response","ok","errorMsg","json","errJson","reason","pdf_filename","pdf_base64","base64ToObjectUrl","get","summaries","isArray","summaryText","item","Boolean","join","fallbackText","text","document_id","question","JSON","stringify","base64","mimeType","byteCharacters","atob","byteNumbers","i","charCodeAt","byteArray","Uint8Array","ApiService","uri","parameters","adviserId","adviserFunderCredentialsId","clientId","systemKey","priority","externalSystemCredentialId","routeParams","encodeURIComponent","InsuredAction","DevEnvironment","FeatureFlag"],"sourceRoot":""}