{"version":3,"file":"app-c76adf7f.xxxxxxxx.bundle.js","mappings":"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","sources":["webpack://iadviser/./src/resources/utilities/instance-of-interface.ts","webpack://iadviser/./src/resources/utilities/api-error-handler.ts","webpack://iadviser/./src/resources/utilities/flatten-errors.ts","webpack://iadviser/./src/resources/utilities/apply-theme.ts","webpack://iadviser/./src/resources/utilities/au-table-custom-filter.ts","webpack://iadviser/./src/resources/utilities/au-table-select-filter.ts","webpack://iadviser/./src/resources/utilities/date-helper.ts","webpack://iadviser/./src/resources/utilities/funder-insurer-mismatch.ts","webpack://iadviser/./src/resources/utilities/http-helper.ts","webpack://iadviser/./src/resources/utilities/img-utils.ts","webpack://iadviser/./src/resources/utilities/insecure-guid.ts","webpack://iadviser/./src/resources/utilities/json-date-to-display-date.ts","webpack://iadviser/./src/resources/utilities/logger.ts","webpack://iadviser/./src/resources/utilities/storage-helper.ts","webpack://iadviser/./src/resources/utilities/toastr-helper.ts","webpack://iadviser/./src/resources/utils.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-use-before-define */\r\nimport { ErrorItem, PlaceHolderValue, ServerErrorDescription, ExceptionMessage } from 'store/interfaces';\r\n\r\nexport function isArrayOfStrings(object: any): object is string[] {\r\n return Array.isArray(object) && object.every((item) => typeof item === 'string');\r\n}\r\n\r\nexport function isErrorItem(object: any): object is ErrorItem {\r\n return 'errorKey' in object && 'placeHolderVals' in object && isPlaceHolderValueArray(object.placeHolderVals);\r\n}\r\n\r\nexport function isErrorItemArray(object: any): object is ErrorItem[] {\r\n return Array.isArray(object) && object.every((item) => isErrorItem(item));\r\n}\r\n\r\nexport function isExceptionMessage(object: any): object is ExceptionMessage {\r\n return object && typeof object === 'object' && ('ExceptionMessage' in object || 'exceptionMessage' in object);\r\n}\r\n\r\nexport function isPlaceHolderValue(object: any): object is PlaceHolderValue {\r\n return 'varName' in object && 'val' in object;\r\n}\r\n\r\nexport function isPlaceHolderValueArray(object: any): object is PlaceHolderValue[] {\r\n return Array.isArray(object) && object.every((item) => isPlaceHolderValue(item));\r\n}\r\n\r\nexport function isServerErrorDescription(object: any): object is ServerErrorDescription {\r\n return 'guid' in object && 'property' in object && 'errors' in object && isErrorItemArray(object.errors);\r\n}\r\n\r\nexport function isServerErrorDescriptionArray(object: any): object is ServerErrorDescription[] {\r\n return Array.isArray(object) && object.every((item) => isServerErrorDescription(item));\r\n}\r\n","import { log } from './../services/log-service';\r\nimport { Container } from 'aurelia-framework';\r\nimport { I18N } from 'aurelia-i18n';\r\nimport { InsuredLocation } from 'resources/models/client';\r\nimport isObjectLike from 'lodash/isObjectLike';\r\nimport { flattenErrors } from 'resources/utilities/flatten-errors';\r\nimport {\r\n isServerErrorDescriptionArray,\r\n isExceptionMessage,\r\n isArrayOfStrings,\r\n} from 'resources/utilities/instance-of-interface';\r\nimport { IaToastService, IaToastMessage } from 'resources/services/ia-toast-service';\r\nimport { ServerError } from 'resources/interceptors/server-validation';\r\nimport { PlaceHolderValue, ExceptionMessage } from 'store/interfaces';\r\nimport { EntityMode, EntityActionType, EntityType } from 'routes/app-adviser/client/quotes/interfaces';\r\nimport moment from 'moment';\r\nimport { momentToLocalDateTimeString } from 'resources/moment-helpers';\r\n\r\nexport interface EntityWizardErrorMetaData {\r\n methodName: string;\r\n clientId: number;\r\n entityActionType: EntityActionType;\r\n entityType: EntityType;\r\n entityId: number;\r\n additionalPageId?: number;\r\n quoteOrVersionSituationId?: number;\r\n situationRiskId?: number;\r\n riskArray?: any[];\r\n mode?: EntityMode;\r\n location?: InsuredLocation;\r\n}\r\n\r\nexport async function entityWizardErrorHandler({ ...metaData }: EntityWizardErrorMetaData) {\r\n let errorMetaData = '';\r\n const i18n: I18N = Container.instance.get(I18N);\r\n const errorMessageTitle = i18n.tr('entityWizardApiError');\r\n\r\n for (let [key, value] of Object.entries(metaData)) {\r\n if (value) {\r\n if (isObjectLike(value)) {\r\n value = JSON.stringify(value);\r\n }\r\n errorMetaData += `\r\n ${key}: ${value}`;\r\n }\r\n }\r\n log.error(`${errorMessageTitle} => Failed for => ${errorMetaData}`);\r\n}\r\n\r\nexport async function httpErrorResponseHandler(response: Response) {\r\n if (response.ok) return;\r\n\r\n const toastr: IaToastService = Container.instance.get(IaToastService);\r\n const i18n: I18N = Container.instance.get(I18N);\r\n\r\n // Bad Request\r\n if (response.status === 400) {\r\n const responseClone = response.clone();\r\n const responseBody = await responseClone.json();\r\n\r\n const apiError = new ServerError(responseBody as any);\r\n\r\n if (!apiError || !apiError.serverErrors || !responseBody?.length) return;\r\n\r\n if (!apiError?.serverErrors && responseBody?.length) {\r\n apiError.serverErrors = responseBody as any;\r\n }\r\n\r\n const errors: string[] = [];\r\n\r\n if (isServerErrorDescriptionArray(apiError.serverErrors)) {\r\n const errorKeys = flattenErrors(apiError.serverErrors, true) as Map;\r\n const error = [];\r\n for (const [key, value] of errorKeys) {\r\n const options = {};\r\n if (value && value.length) {\r\n value.forEach((placeholder) => {\r\n Object.defineProperty(options, placeholder.varName, {\r\n value: placeholder.val,\r\n enumerable: true,\r\n writable: true,\r\n configurable: true,\r\n });\r\n });\r\n errors.push(i18n.tr(key as string, options));\r\n } else {\r\n errors.push(i18n.tr(key as string));\r\n }\r\n }\r\n } else if (isExceptionMessage(apiError.serverErrors)) {\r\n const errorObj = apiError.serverErrors as ExceptionMessage;\r\n const errMsg = errorObj.ExceptionMessage || errorObj.exceptionMessage;\r\n errors.push(errMsg);\r\n } else if (isObjectLike(apiError.serverErrors)) {\r\n let errList = '';\r\n\r\n for (const [key, value] of Object.entries(apiError.serverErrors)) {\r\n errList;\r\n if (!value) continue;\r\n\r\n if (isArrayOfStrings(value)) {\r\n value.forEach((v) => {\r\n errList += v;\r\n });\r\n } else if (isObjectLike(value)) {\r\n errList += JSON.stringify(value);\r\n } else {\r\n errList += value;\r\n }\r\n }\r\n errors.push(errList);\r\n }\r\n\r\n const toast = new IaToastMessage(formatErrorsForToast(errors), i18n.tr('server400ErrorTitle'));\r\n toastr.error(toast);\r\n }\r\n // Internal Server Error\r\n else if (response.status === 500) {\r\n const toast = new IaToastMessage(\r\n i18n.tr('server500ErrorMessage') + momentToLocalDateTimeString(moment()) + '
' + response.url,\r\n i18n.tr('server500ErrorTitle'),\r\n );\r\n toastr.error(toast);\r\n }\r\n}\r\n\r\nfunction formatErrorsForToast(errors: unknown[]): string {\r\n return errors\r\n .map((error) => cleanErrorMessage(error))\r\n .filter((message) => message.length)\r\n .join('
');\r\n}\r\n\r\nfunction cleanErrorMessage(error: unknown): string {\r\n if (typeof error !== 'string') {\r\n if (error == null) return '';\r\n return String(error);\r\n }\r\n\r\n return error\r\n .replace(/^\"(.*)\"$/, '$1')\r\n .replace(/\\\\r\\\\n/g, '
')\r\n .replace(/\\\\r/g, '
')\r\n .replace(/\\\\n/g, '
')\r\n .replace(/\\r\\n/g, '
')\r\n .replace(/\\r/g, '
')\r\n .replace(/\\n/g, '
')\r\n .trim();\r\n}\r\n","import { ServerErrorDescription, PlaceHolderValue } from 'store/interfaces';\r\n\r\n/**\r\n * Flatten the `errors` provided into an array to cater for aurelia localization.\r\n *\r\n * If `mapErrorKeyToPlaceHolderVals` is `true`, @returns a `Map`.\r\n * The `Map` dictionary object's `key` is the actual `errorKey` and `value` is `placeHolderVals[]`.\r\n *\r\n * If `mapErrorKeyToPlaceHolderVals` is `false` (default), @returns `string [ prependNamespace:MY_ERROR_KEY_1, ... ]`.\r\n *\r\n * Pass `prependNamespace = ''` to return error keys without a namespace.\r\n */\r\nexport function flattenErrors(\r\n errors: ServerErrorDescription[],\r\n mapErrorKeyToPlaceHolderVals = false,\r\n prependNamespace = 'errors',\r\n): string[] | Map {\r\n if (!errors || !errors.length) return;\r\n\r\n const namespace = prependNamespace ? `${prependNamespace}:` : '';\r\n let flattenedErrors: string[] | Map;\r\n\r\n if (mapErrorKeyToPlaceHolderVals) {\r\n flattenedErrors = new Map();\r\n } else {\r\n flattenedErrors = [];\r\n }\r\n\r\n errors.forEach((error) => {\r\n if (!error.errors || !error.errors.length) return;\r\n\r\n error.errors.forEach((errorActual) => {\r\n const errorKey = `${namespace}${errorActual.errorKey}`;\r\n\r\n if (mapErrorKeyToPlaceHolderVals) {\r\n flattenedErrors = flattenedErrors as Map;\r\n\r\n if (flattenedErrors.has(errorKey)) {\r\n const allPlaceHolderVals = flattenedErrors.get(errorKey).concat(errorActual.placeHolderVals);\r\n flattenedErrors.set(errorKey, allPlaceHolderVals);\r\n } else {\r\n flattenedErrors.set(errorKey, errorActual.placeHolderVals);\r\n }\r\n } else {\r\n (flattenedErrors as string[]).push(errorKey);\r\n }\r\n });\r\n });\r\n\r\n return flattenedErrors;\r\n}\r\n","import { AppTheme } from 'resources/enums';\r\n\r\n/* istanbul ignore next */\r\nexport function applyTheme(theme) {\r\n if (theme === AppTheme.LIGHT) {\r\n document.documentElement.style.setProperty('--color-secondary', '#818EA3');\r\n document.documentElement.style.setProperty('--color-secondary--dark', '#677284');\r\n document.documentElement.style.setProperty('--color-body-background', '#F9FBFC');\r\n document.documentElement.style.setProperty('--color-top-nav-background', '#E9EFF3');\r\n document.documentElement.style.setProperty('--color-card-heading-background', '#FBFDFD');\r\n }\r\n\r\n if (theme === AppTheme.BLUE) {\r\n document.documentElement.style.setProperty('--color-secondary', '#677284');\r\n document.documentElement.style.setProperty('--color-secondary--dark', '#4D5562');\r\n document.documentElement.style.setProperty('--color-body-background', '#E0E7EE');\r\n document.documentElement.style.setProperty('--color-top-nav-background', '#F0F8FF');\r\n document.documentElement.style.setProperty('--color-card-heading-background', '#EDF1F5');\r\n }\r\n\r\n localStorage.setItem('theme', theme);\r\n}\r\n","import { momentToString } from 'resources/moment-helpers';\r\n\r\nexport function customFilter(filterValue, row) {\r\n // Show row when no filterValue applied - i.e. table load\r\n if (filterValue === '') {\r\n return true;\r\n }\r\n\r\n // Get the row value\r\n let rowValue = row[this.key];\r\n\r\n // Return false if rowValue is undefined or null\r\n if (rowValue == null) {\r\n return false;\r\n }\r\n\r\n // Convert to string if it's not already\r\n rowValue = rowValue.toString();\r\n\r\n // Format rowValue as date\r\n if (rowValue.includes('T') && rowValue.includes('-')) {\r\n rowValue = momentToString(rowValue);\r\n }\r\n\r\n // filter rows that include the filterValue\r\n return rowValue.includes(filterValue);\r\n}\r\n","export function tableSelectFilter(filterValue, row) {\r\n // Show row when no filterValue applied - i.e. table load\r\n if (filterValue === null || filterValue === undefined || filterValue === '') {\r\n return true;\r\n }\r\n\r\n // Get the relevant option for the filterValue\r\n const option = this.options.find(opt => opt.value === filterValue);\r\n\r\n // If no option found, return true to show all rows\r\n if (!option) {\r\n return true;\r\n }\r\n\r\n // Pass the row to the option filter function to determine if the row should be shown\r\n return option.filter(row);\r\n}\r\n","export const DateHelper = {\r\n dateSorter(a: Record, b: Record, sortOrder: 1 | -1, key: string) {\r\n const date1 = new Date(a[key]);\r\n const date2 = new Date(b[key]);\r\n\r\n if (date1.getTime() === date2.getTime()) {\r\n return 0;\r\n }\r\n\r\n return date1 > date2 ? (1 * sortOrder) : (-1 * sortOrder);\r\n }\r\n};\r\n","interface UnderwriterLike {\r\n abn?: string;\r\n code?: string;\r\n name?: string;\r\n chosenRedPlanetUnderwriterAbn?: string;\r\n chosenRedPlanetUnderwriterCode?: string;\r\n chosenRedPlanetUnderwriterName?: string;\r\n}\r\n\r\ninterface FunderInsurerMismatchParams {\r\n enabled?: boolean;\r\n primaryInsurer?: any;\r\n insurers?: any[];\r\n underwriterSource?: UnderwriterLike | null;\r\n}\r\n\r\nconst leadFlagKeys = ['leadInsurerFlag', 'leadFlag', 'isLeadInsurer', 'isLead'];\r\n\r\nexport function shouldShowFunderInsurerMismatch({\r\n enabled,\r\n primaryInsurer,\r\n insurers,\r\n underwriterSource,\r\n}: FunderInsurerMismatchParams): boolean {\r\n if (!enabled) {\r\n return false;\r\n }\r\n\r\n const insurer = primaryInsurer ?? getPrimaryInsurer(insurers);\r\n if (!insurer) {\r\n return false;\r\n }\r\n\r\n const insurerAbns = getInsurerAbns(insurer);\r\n if (!insurerAbns.length) {\r\n return false;\r\n }\r\n\r\n if (!underwriterSource) {\r\n return false;\r\n }\r\n\r\n const underwriterAbn = getUnderwriterAbn(underwriterSource);\r\n if (!underwriterAbn) {\r\n return true;\r\n }\r\n\r\n return !insurerAbns.includes(underwriterAbn);\r\n}\r\n\r\nfunction getPrimaryInsurer(insurers?: any[]): any {\r\n if (!Array.isArray(insurers)) {\r\n return undefined;\r\n }\r\n\r\n // Check for recommendedFlag OR recommendFlag (different endpoints use different field names)\r\n const recommended = insurers.find((insurer) =>\r\n asBoolean(insurer?.recommendedFlag) || asBoolean(insurer?.recommendFlag)\r\n );\r\n if (recommended) {\r\n return recommended;\r\n }\r\n\r\n return insurers.find((insurer) => leadFlagKeys.some((key) => asBoolean(insurer?.[key])));\r\n}\r\n\r\nfunction asBoolean(value: unknown): boolean {\r\n if (typeof value === 'boolean') {\r\n return value;\r\n }\r\n if (typeof value === 'number') {\r\n return value === 1;\r\n }\r\n if (typeof value === 'string') {\r\n const trimmed = value.trim().toLowerCase();\r\n return trimmed === 'true' || trimmed === '1';\r\n }\r\n return false;\r\n}\r\n\r\nexport function getInsurerAbns(insurer: any): string[] {\r\n if (!insurer) {\r\n return [];\r\n }\r\n\r\n const abns = new Set();\r\n\r\n const append = (value?: string) => {\r\n const abn = normaliseAbn(value);\r\n if (abn) {\r\n abns.add(abn);\r\n }\r\n };\r\n\r\n if (Array.isArray(insurer?.insurerAbns)) {\r\n insurer.insurerAbns.forEach(append);\r\n }\r\n\r\n append(insurer?.insurerOfficeAbn);\r\n append(insurer?.insurerAbn);\r\n append(insurer?.abn);\r\n\r\n return Array.from(abns);\r\n}\r\n\r\nfunction getUnderwriterAbn(source?: UnderwriterLike | null): string | undefined {\r\n if (!source) {\r\n return undefined;\r\n }\r\n\r\n return normaliseAbn(firstString(source.abn, source.chosenRedPlanetUnderwriterAbn));\r\n}\r\n\r\nfunction firstString(...values: Array): string | undefined {\r\n for (const value of values) {\r\n if (typeof value === 'string' && value.trim().length > 0) {\r\n return value;\r\n }\r\n }\r\n\r\n return undefined;\r\n}\r\n\r\nexport function normaliseAbn(value?: string): string | undefined {\r\n if (!value) {\r\n return undefined;\r\n }\r\n const cleaned = value.replace(/\\D/g, '');\r\n return cleaned.length ? cleaned : undefined;\r\n}\r\n","import { Endpoint } from 'resources/endpoints/endpoints';\r\n\r\nexport const HttpHelper = {\r\n requestFromEndpoint(endpoint: Endpoint, ...uriParams: string[]) {\r\n const init: RequestInit = { headers: {}, ...endpoint } as RequestInit;\r\n\r\n return {\r\n uri: endpoint.uri(uriParams),\r\n init,\r\n };\r\n },\r\n\r\n addFormFields(request: RequestInit, fields: Record) {\r\n let { body = '' } = request;\r\n\r\n if (body !== '') {\r\n body += '&';\r\n }\r\n\r\n for (const [key, value] of Object.entries(fields)) {\r\n body = `${body}${key}=${encodeURIComponent(value as string)}&`;\r\n }\r\n\r\n request.body = (body as string).substring(0, (body as string).length - 1);\r\n },\r\n\r\n awaiter(promise) {\r\n return promise\r\n .then((data) => {\r\n return [null, data];\r\n })\r\n .catch((err) => [err]);\r\n },\r\n};\r\n","/**\r\n * Image utility functions for manipulating HTML image elements.\r\n *\r\n * @module img-utils\r\n */\r\n\r\n/**\r\n * Crops an `` element in-place so that all fully-transparent border pixels\r\n * are removed, leaving only the tightest bounding box around the opaque content.\r\n *\r\n * The crop is performed entirely on the client using the Canvas 2D API:\r\n * 1. The image is decoded into an `ImageBitmap` (not subject to CORS taint).\r\n * 2. The bitmap is drawn onto an off-screen canvas so its raw pixel data can be read.\r\n * 3. Every pixel is examined; the minimum and maximum x/y coordinates of any\r\n * pixel with `alpha > 0` are recorded.\r\n * 4. A second canvas of exactly that size is drawn, and the result is written\r\n * back to `imgEl.src` as a data URL.\r\n *\r\n * If the crop fails for any reason (e.g. a CORS-restricted image that cannot be\r\n * decoded, or an entirely transparent image) the function exits silently and\r\n * leaves `imgEl` unchanged. All intermediate canvas and bitmap resources are\r\n * released in that case to avoid memory leaks.\r\n *\r\n * @param imgEl - The `HTMLImageElement` whose `src` should be replaced with the\r\n * cropped version. The element must already have its image loaded (or be\r\n * loadable by `createImageBitmap`).\r\n * @returns A promise that resolves once the crop is complete (or once the\r\n * silent fallback path has been taken).\r\n *\r\n * @example\r\n * const img = document.querySelector('#logo')!;\r\n * await cropImgElementToOpaque(img);\r\n * // img.src now contains a data URL of the tightly-cropped image.\r\n */\r\nexport async function cropImgElementToOpaque(imgEl: HTMLImageElement): Promise {\r\n // Short-circuit known opaque formats (e.g. JPEG/BMP) where alpha cannot exist.\r\n if (isDefinitelyOpaqueFormat(imgEl)) {\r\n return;\r\n }\r\n\r\n // Declared outside try/catch so they are accessible in the catch block for cleanup.\r\n let img: ImageBitmap | null = null;\r\n let inputCanvas: HTMLCanvasElement | null = null;\r\n let outputCanvas: HTMLCanvasElement | null = null;\r\n\r\n // Attempt to crop, but leave the original image if it fails (e.g. due to CORS).\r\n try {\r\n // Load the image into an ImageBitmap, which is not tainted by CORS restrictions and can be drawn to a canvas.\r\n // Unlike drawing imgEl directly onto a canvas, createImageBitmap does not mark the canvas as \"origin-dirty\",\r\n // so getImageData() will succeed even for cross-origin images that have already been decoded by the browser.\r\n img = await createImageBitmap(imgEl);\r\n\r\n // Draw the image to a canvas to access pixel data.\r\n // The canvas must match the bitmap dimensions exactly so pixel coordinates are 1:1.\r\n inputCanvas = document.createElement('canvas');\r\n inputCanvas.width = img.width;\r\n inputCanvas.height = img.height;\r\n const ctx = inputCanvas.getContext('2d');\r\n ctx!.drawImage(img, 0, 0);\r\n\r\n // Analyze pixel data to find the bounding box of non-transparent pixels.\r\n // getImageData returns a flat Uint8ClampedArray of [R, G, B, A, R, G, B, A, ...] values,\r\n // one group of 4 bytes per pixel, in left-to-right, top-to-bottom order.\r\n const { data } = ctx!.getImageData(0, 0, inputCanvas.width, inputCanvas.height);\r\n\r\n // Cache dimensions in locals — DOM property reads inside a tight loop are\r\n // slower than local variable reads, and this loop may visit millions of pixels (worst case).\r\n const width = inputCanvas.width;\r\n const height = inputCanvas.height;\r\n\r\n // Initialise bounds to the worst-case opposite extremes so any real opaque pixel will\r\n // immediately tighten them. If the image is entirely transparent these values will\r\n // never be updated, and w/h below will be negative — toDataURL() will still succeed\r\n // but will produce a 1×1 blank canvas (harmless).\r\n let minX = width,\r\n minY = height,\r\n maxX = 0,\r\n maxY = 0;\r\n\r\n for (let y = 0; y < height; y++) {\r\n for (let x = 0; x < width; x++) {\r\n // Each pixel occupies 4 consecutive bytes (RGBA); the alpha channel is at offset +3.\r\n const i = (y * width + x) * 4;\r\n if (data[i + 3] !== 0) {\r\n // alpha > 0 — pixel has any visible content\r\n // Plain comparisons are used instead of Math.min/Math.max to avoid\r\n // per-pixel function-call overhead across potentially millions of pixels.\r\n\r\n // minY only needs to be captured once: scanning top-to-bottom, the first\r\n // row containing an opaque pixel is always the topmost boundary.\r\n if (y < minY) {\r\n minY = y;\r\n }\r\n\r\n // maxY is simply the last row in which an opaque pixel was found; because\r\n // y is strictly ascending in the outer loop, a plain assignment is sufficient.\r\n maxY = y;\r\n\r\n if (x < minX) {\r\n minX = x;\r\n }\r\n if (x > maxX) {\r\n maxX = x;\r\n }\r\n }\r\n }\r\n }\r\n\r\n // +1 because maxX/maxY are inclusive column/row indices, not exclusive bounds.\r\n const w = maxX - minX + 1;\r\n const h = maxY - minY + 1;\r\n\r\n // Draw only the opaque region onto a second, smaller canvas.\r\n // drawImage(source, sx, sy, sw, sh, dx, dy, dw, dh) copies the rectangle\r\n // (minX, minY, w, h) from inputCanvas and stretches it to fill outputCanvas at (0, 0).\r\n // Because dw === sw and dh === sh there is no scaling.\r\n outputCanvas = document.createElement('canvas');\r\n outputCanvas.width = w;\r\n outputCanvas.height = h;\r\n outputCanvas.getContext('2d')!.drawImage(inputCanvas, minX, minY, w, h, 0, 0, w, h);\r\n\r\n // Replace the element's src with a PNG data URL of the cropped canvas.\r\n // This triggers a synchronous re-render of the element at the new (smaller) intrinsic size.\r\n imgEl.src = outputCanvas.toDataURL();\r\n } catch {\r\n // If cropping fails, leave the original image intact\r\n if (img) {\r\n // ImageBitmap holds a decoded GPU/CPU texture; explicitly close it to free that memory\r\n // rather than waiting for GC.\r\n img.close();\r\n }\r\n\r\n // Zero the canvas sizes to release the backing pixel buffers immediately.\r\n // This is especially important for large images where the buffer could be many MB.\r\n if (inputCanvas) {\r\n inputCanvas.width = 0;\r\n inputCanvas.height = 0;\r\n }\r\n\r\n if (outputCanvas) {\r\n outputCanvas.width = 0;\r\n outputCanvas.height = 0;\r\n }\r\n }\r\n}\r\n\r\n// Formats in this allow-list do not support transparency in normal browser usage,\r\n// so there is no value in scanning pixels for transparent borders.\r\nconst OPAQUE_IMAGE_MIME_TYPES = new Set(['image/jpeg', 'image/jpg', 'image/bmp']);\r\n\r\nfunction isDefinitelyOpaqueFormat(imgEl: HTMLImageElement): boolean {\r\n const source = (imgEl.currentSrc || imgEl.src || '').trim().toLowerCase();\r\n if (!source) {\r\n return false;\r\n }\r\n\r\n // Fast path for data URLs where MIME type is explicit.\r\n if (source.startsWith('data:')) {\r\n const mimeEnd = source.indexOf(';') === -1 ? source.indexOf(',') : source.indexOf(';');\r\n if (mimeEnd === -1) {\r\n return false;\r\n }\r\n\r\n const mime = source.slice('data:'.length, mimeEnd);\r\n return OPAQUE_IMAGE_MIME_TYPES.has(mime);\r\n }\r\n\r\n // Fall back to file extension when MIME metadata is not available.\r\n // This is intentionally conservative: we only skip known opaque formats.\r\n return /\\.(jpe?g|bmp)(?:[?#].*)?$/.test(source);\r\n}","/* eslint-disable @typescript-eslint/no-use-before-define */\r\n// Adapted from https://github.com/dandean/guid\r\n// Original Source MIT License\r\n// Copyright 2009, 2010 Dan Dean. All rights reserved.\r\n// Permission is hereby granted, free of charge, to any person obtaining a copy\r\n// of this software and associated documentation files (the 'Software'), to\r\n// deal in the Software without restriction, including without limitation the\r\n// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\r\n// sell copies of the Software, and to permit persons to whom the Software is\r\n// furnished to do so, subject to the following conditions:\r\n\r\n// The above copyright notice and this permission notice shall be included in\r\n// all copies or substantial portions of the Software.\r\n\r\n// THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\r\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\r\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\r\n// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\r\n// IN THE SOFTWARE.\r\n/* eslint:disable */\r\n\r\nconst validator = new RegExp('^[a-z0-9]{8}-[a-z0-9]{4}-[a-z0-9]{4}-[a-z0-9]{4}-[a-z0-9]{12}$', 'i');\r\n\r\nexport const EMPTY_GUID = '00000000-0000-0000-0000-000000000000';\r\n\r\nfunction gen(count: number): string {\r\n let out = '';\r\n for (let i = 0; i < count; i++) {\r\n out += (((1 + Math.random()) * 0x10000) | 0).toString(16).substring(1);\r\n }\r\n return out;\r\n}\r\n\r\nfunction genAlphanumeric(count: number): string {\r\n const chars = 'abcdefghijklmnopqrstuvwxyz0123456789';\r\n let out = '';\r\n for (let i = 0; i < count; i++) {\r\n out += chars.charAt(Math.floor(Math.random() * chars.length));\r\n }\r\n return out;\r\n}\r\n\r\nfunction genLetter(): string {\r\n const letters = 'abcdefghijklmnopqrstuvwxyz';\r\n return letters.charAt(Math.floor(Math.random() * letters.length));\r\n}\r\n\r\nexport function generateGuid(): Guid {\r\n return new Guid([gen(2), gen(1), gen(1), gen(1), gen(3)].join('-'));\r\n}\r\n\r\nexport function generateGuidString(): string {\r\n return [gen(2), gen(1), gen(1), gen(1), gen(3)].join('-');\r\n}\r\n\r\nexport function generateHtmlIdGuid(): string {\r\n return genLetter() + genAlphanumeric(11);\r\n}\r\n\r\nexport class GuidGenerator {\r\n public generateGuid = generateGuid;\r\n public generateGuidString = generateGuidString;\r\n}\r\n\r\nexport class Guid {\r\n public static EMPTY = '00000000-0000-0000-0000-000000000000';\r\n public value: string = Guid.EMPTY;\r\n\r\n constructor(guid: string | Guid) {\r\n if (!guid) {\r\n throw new TypeError('Invalid argument; `value` has no value.');\r\n }\r\n\r\n this.value = Guid.EMPTY;\r\n\r\n if (guid && guid instanceof Guid) {\r\n this.value = guid.toString();\r\n } else if (guid && Object.prototype.toString.call(guid) === '[object String]' && Guid.isGuid(guid)) {\r\n this.value = guid as string;\r\n }\r\n }\r\n\r\n public equals(other: any) {\r\n // Comparing string `value` against provided `guid` will auto-call\r\n // toString on `guid` for comparison\r\n return Guid.isGuid(other) && this.value == other;\r\n }\r\n\r\n public isEmpty() {\r\n return this.value === Guid.EMPTY;\r\n }\r\n\r\n public toString() {\r\n return this.value;\r\n }\r\n\r\n public toJSON() {\r\n return this.value;\r\n }\r\n\r\n public static isGuid(value: any): boolean {\r\n // Return false for null, undefined, or empty values\r\n if (!value) {\r\n return false;\r\n }\r\n\r\n // Get the string representation of the value\r\n const stringValue = value instanceof Guid ? value.value : String(value);\r\n\r\n // Test against the validator regex\r\n return validator.test(stringValue);\r\n }\r\n}\r\n","export function jsonDateToDisplayDate(value: string) {\r\n if (value) {\r\n const [year, month, day] = value\r\n .slice(0, 10)\r\n .split('-')\r\n .map((p) => parseInt(p));\r\n const date = new Date(year, month - 1, day);\r\n\r\n return date.toLocaleDateString(undefined, {\r\n month: '2-digit',\r\n day: '2-digit',\r\n year: 'numeric',\r\n });\r\n }\r\n return '';\r\n}\r\n\r\nexport function jsonDateToDisplayDateTime(value: string) {\r\n if (value) {\r\n const [year, month, day] = value\r\n .slice(0, 10)\r\n .split('-')\r\n .map((p) => parseInt(p));\r\n const [hour, minute, second] = value\r\n .slice(11)\r\n .split(':')\r\n .map((p) => parseInt(p));\r\n\r\n const date = new Date(year, month - 1, day, hour, minute, second);\r\n\r\n const localDate = date.toLocaleDateString(undefined, {\r\n month: '2-digit',\r\n day: '2-digit',\r\n year: 'numeric',\r\n });\r\n\r\n const localTime = date.toLocaleTimeString();\r\n\r\n return `${localDate} ${localTime}`;\r\n }\r\n return '';\r\n}\r\n","let currentModule = 'DOCUMENT MANAGEMENT';\r\n\r\n/**\r\n * Sets the module for the console logger text\r\n * @param moduleName\r\n * @default 'DOCUMENT MANAGEMENT'\r\n */\r\nexport const setModule = (moduleName: string) => (currentModule = (moduleName || currentModule).toUpperCase());\r\n\r\n/**\r\n * Gets the current module text\r\n */\r\nexport const getModule = () => currentModule;\r\n\r\n/**\r\n * Adds message text after the module name for the console logger\r\n * @param message\r\n */\r\nexport const appendMessageToModule = (message: string) => `%c[${currentModule}] => ${message}`;\r\n\r\n/**\r\n * Gets the default base styles for the console logger\r\n * @param styles override default base styles\r\n */\r\nexport const getBaseStyles = (styles?: string) =>\r\n styles ?? 'font-weight: bold; display: inline-block; padding: 0.5em 0;';\r\n\r\n/**\r\n * Logs a custom styled `warning` message with optional params to console\r\n * @param message warning message to be displayed\r\n * @param optionalParams same optional params passed to `console.log`\r\n */\r\nexport const warn = (message: string, ...optionalParams: any[]) =>\r\n console.log(appendMessageToModule(message), `color: #ff7900; ${getBaseStyles()}`, ...optionalParams);\r\n\r\n/**\r\n * Logs a custom styled `info` message with optional params to console\r\n * @param message info message to be displayed\r\n * @param optionalParams same optional params passed to `console.info`\r\n */\r\nexport const info = (message: string, ...optionalParams: any[]) =>\r\n console.info(appendMessageToModule(message), `color: #89cff0; ${getBaseStyles()}`, ...optionalParams);\r\n\r\n/**\r\n * Logs a custom styled `error` message with optional params to console\r\n * @param message error message to be displayed\r\n * @param optionalParams same optional params passed to `console.error`\r\n */\r\nexport const error = (message: string, ...optionalParams: any[]) =>\r\n console.error(appendMessageToModule(message), `color: #ff2400; ${getBaseStyles()}`, ...optionalParams);\r\n","import lzstring from 'lz-string';\r\nimport { PLATFORM } from 'aurelia-pal';\r\n\r\nexport class StorageService {\r\n lzstring = lzstring;\r\n\r\n saveToSessionStorage(key: string, data: any) {\r\n if (PLATFORM.global.sessionStorage) {\r\n PLATFORM.global.sessionStorage.setItem(key, this.lzstring.compressToUTF16(JSON.stringify(data)));\r\n }\r\n }\r\n\r\n getFromSessionStorage(key: string) {\r\n if (PLATFORM.global.sessionStorage) {\r\n const data = this.lzstring.decompressFromUTF16(PLATFORM.global.sessionStorage.getItem(key));\r\n\r\n if (data) {\r\n return JSON.parse(data);\r\n }\r\n\r\n return data;\r\n }\r\n\r\n return null;\r\n }\r\n\r\n saveToLocalStorage(key: string, data: any) {\r\n if (PLATFORM.global.localStorage) {\r\n PLATFORM.global.localStorage.setItem(key, this.lzstring.compressToUTF16(JSON.stringify(data)));\r\n }\r\n }\r\n\r\n getFromLocalStorage(key: string) {\r\n if (PLATFORM.global.localStorage) {\r\n const data = this.lzstring.decompressFromUTF16(PLATFORM.global.localStorage.getItem(key));\r\n\r\n if (data) {\r\n return JSON.parse(data);\r\n }\r\n\r\n return data;\r\n }\r\n\r\n return null;\r\n }\r\n}\r\n\r\nexport const Storage = new StorageService();\r\n","import { Container } from 'aurelia-framework';\r\nimport { IaToastService, IaToastMessage } from 'resources/services/ia-toast-service';\r\n\r\nexport function successToast(message: string | IaToastMessage) {\r\n const toastService: IaToastService = Container.instance.get(IaToastService);\r\n const toastMessage = typeof message === 'string' ? new IaToastMessage(message) : message;\r\n toastService.success(toastMessage);\r\n}\r\n\r\nexport function errorToast(message: string | IaToastMessage, title?: string) {\r\n const toastService: IaToastService = Container.instance.get(IaToastService);\r\n const toastMessage = typeof message === 'string' ? new IaToastMessage(message, title) : message;\r\n toastService.error(toastMessage);\r\n}\r\n\r\nexport function infoToast(message: string | IaToastMessage, title?: string) {\r\n const toastService: IaToastService = Container.instance.get(IaToastService);\r\n const toastMessage = typeof message === 'string' ? new IaToastMessage(message, title) : message;\r\n toastService.info(toastMessage);\r\n}\r\n","import { getBuildEnvironment } from \"./parse-jwt\";\r\n\r\nexport function isProd() {\r\n return getBuildEnvironment().toLocaleLowerCase() === 'live';\r\n}\r\n\r\nexport function isTemplate() {\r\n return getBuildEnvironment().toLocaleLowerCase() === 'template';\r\n}"],"names":["isArrayOfStrings","object","Array","isArray","every","item","isServerErrorDescription","isPlaceHolderValue","isPlaceHolderValueArray","placeHolderVals","isErrorItem","isErrorItemArray","errors","entityWizardErrorHandler","metaData","errorMetaData","i18n","Container","instance","get","I18N","errorMessageTitle","tr","Object","entries","key","value","JSON","stringify","error","httpErrorResponseHandler","response","ok","toastr","status","clone","json","responseBody","apiError","serverErrors","length","errorKeys","mapErrorKeyToPlaceHolderVals","prependNamespace","flattenedErrors","namespace","Map","forEach","errorActual","errorKey","has","allPlaceHolderVals","concat","set","push","flattenErrors","options","placeholder","defineProperty","varName","val","enumerable","writable","configurable","isExceptionMessage","errorObj","errMsg","ExceptionMessage","exceptionMessage","v","toast","map","String","replace","trim","cleanErrorMessage","filter","message","join","formatErrorsForToast","url","applyTheme","theme","LIGHT","document","documentElement","style","setProperty","BLUE","localStorage","setItem","customFilter","filterValue","row","rowValue","this","toString","includes","tableSelectFilter","option","find","opt","DateHelper","dateSorter","a","b","sortOrder","date1","Date","date2","getTime","leadFlagKeys","shouldShowFunderInsurerMismatch","enabled","primaryInsurer","insurers","underwriterSource","insurer","recommended","asBoolean","recommendedFlag","recommendFlag","some","getPrimaryInsurer","insurerAbns","getInsurerAbns","underwriterAbn","source","normaliseAbn","values","firstString","abn","chosenRedPlanetUnderwriterAbn","getUnderwriterAbn","trimmed","toLowerCase","abns","Set","append","add","insurerOfficeAbn","insurerAbn","from","cleaned","undefined","HttpHelper","requestFromEndpoint","endpoint","init","headers","uri","uriParams","addFormFields","request","fields","body","encodeURIComponent","substring","awaiter","promise","then","data","catch","err","cropImgElementToOpaque","imgEl","Promise","currentSrc","src","startsWith","mimeEnd","indexOf","mime","slice","OPAQUE_IMAGE_MIME_TYPES","test","isDefinitelyOpaqueFormat","img","inputCanvas","outputCanvas","createImageBitmap","createElement","width","height","ctx","getContext","drawImage","getImageData","minX","minY","maxX","maxY","y","x","w","h","toDataURL","close","validator","RegExp","gen","count","out","i","Math","random","generateGuid","Guid","generateGuidString","generateHtmlIdGuid","charAt","floor","letters","chars","genAlphanumeric","guid","EMPTY","TypeError","prototype","call","isGuid","equals","other","isEmpty","toJSON","stringValue","jsonDateToDisplayDate","split","p","parseInt","year","month","day","toLocaleDateString","jsonDateToDisplayDateTime","hour","minute","second","date","localDate","localTime","toLocaleTimeString","currentModule","setModule","moduleName","toUpperCase","appendMessageToModule","getBaseStyles","styles","warn","console","log","optionalParams","info","lzstring","saveToSessionStorage","global","sessionStorage","compressToUTF16","getFromSessionStorage","decompressFromUTF16","getItem","parse","saveToLocalStorage","getFromLocalStorage","Storage","StorageService","successToast","toastService","toastMessage","success","errorToast","title","infoToast","isProd","toLocaleLowerCase","isTemplate"],"sourceRoot":""}