{"version":3,"file":"bravobit-bb-foundation.mjs","sources":["../../../projects/bb-foundation/src/lib/core/services/file-loader.service.ts","../../../projects/bb-foundation/src/lib/core/services/exif.service.ts","../../../projects/bb-foundation/src/lib/core/services/image-converter.service.ts","../../../projects/bb-foundation/src/lib/core/tokens/window.token.ts","../../../projects/bb-foundation/src/lib/core/services/files.service.ts","../../../projects/bb-foundation/src/lib/core/tokens/navigator.token.ts","../../../projects/bb-foundation/src/lib/core/tokens/accept-language.token.ts","../../../projects/bb-foundation/src/lib/core/services/languages.service.ts","../../../projects/bb-foundation/src/lib/core/services/network.service.ts","../../../projects/bb-foundation/src/lib/core/services/patch.service.ts","../../../projects/bb-foundation/src/lib/core/tokens/cookie.token.ts","../../../projects/bb-foundation/src/lib/core/tokens/location.token.ts","../../../projects/bb-foundation/src/lib/core/tokens/global-focus-mode.token.ts","../../../projects/bb-foundation/src/lib/core/miscellaneous/regex.ts","../../../projects/bb-foundation/src/lib/core/functions/format.utils.ts","../../../projects/bb-foundation/src/lib/core/miscellaneous/validator.ts","../../../projects/bb-foundation/src/lib/core/miscellaneous/coercion.ts","../../../projects/bb-foundation/src/lib/core/functions/utils.ts","../../../projects/bb-foundation/src/lib/core/colors/rgb.ts","../../../projects/bb-foundation/src/lib/core/colors/hsv.ts","../../../projects/bb-foundation/src/lib/core/colors/hex.ts","../../../projects/bb-foundation/src/lib/core/colors/hsl.ts","../../../projects/bb-foundation/src/lib/core/functions/date.utils.ts","../../../projects/bb-foundation/src/lib/core/functions/password.utils.ts","../../../projects/bb-foundation/src/lib/core/functions/array.utils.ts","../../../projects/bb-foundation/src/lib/core/functions/file.utils.ts","../../../projects/bb-foundation/src/lib/core/functions/route-cache.utils.ts","../../../projects/bb-foundation/src/lib/core/functions/inject.utils.ts","../../../projects/bb-foundation/src/public_api.ts","../../../projects/bb-foundation/src/bravobit-bb-foundation.ts"],"sourcesContent":["import {Injectable} from '@angular/core';\n\n@Injectable({\n    providedIn: 'root'\n})\nexport class FileLoader {\n\n    fromDataUrl(value: string, name: string = 'file') {\n        if (!value) {\n            return null;\n        }\n\n        try {\n            // Convert base64 to raw binary data held in a string.\n            const byteString = window.atob(value.split(',')[1]);\n\n            // Separate out the mime component.\n            const mimeString = value\n                .split(',')[0]\n                .split(':')[1]\n                .split(';')[0];\n\n            // Write the bytes of the string to an ArrayBuffer.\n            const arrayBuffer = new ArrayBuffer(byteString.length);\n            const uint8Array = new Uint8Array(arrayBuffer);\n            for (let index = 0; index < byteString.length; index++) {\n                uint8Array[index] = byteString.charCodeAt(index);\n            }\n\n            const dataView = new DataView(arrayBuffer);\n            const blob = new Blob([dataView.buffer], {type: mimeString});\n\n            return this.createFile(blob, name);\n        } catch {\n            return null;\n        }\n    }\n\n    asDataUrl(file: File | Blob) {\n        return this.read<string>(file, 'dataurl');\n    }\n\n    asArrayBuffer(file: File | Blob) {\n        return this.read<ArrayBuffer>(file, 'arraybuffer');\n    }\n\n    private async read<T = string | ArrayBuffer>(file: File | Blob, type: 'dataurl' | 'arraybuffer') {\n        return new Promise<T>((resolve, reject) => {\n            const isFileLike = this.isFile(file) || this.isBlob(file);\n            if (!file || !isFileLike) {\n                return reject('Invalid file');\n            }\n\n            const reader = new FileReader();\n            reader.onerror = () => reject('Error file read');\n            reader.onabort = () => reject('Abort file read');\n            reader.onload = () => {\n                const result = reader.result as unknown;\n                return resolve(result as T);\n            };\n\n            if (type === 'dataurl') {\n                reader.readAsDataURL(file);\n            } else if (type === 'arraybuffer') {\n                reader.readAsArrayBuffer(file);\n            }\n        });\n    }\n\n    private isFile = (input: unknown) => {\n        return 'File' in window && input instanceof File;\n    };\n\n    private isBlob = (input: unknown) => {\n        return 'Blob' in window && input instanceof Blob;\n    };\n\n    private createFile(blob: Blob, name: string) {\n        if (!navigator['msSaveBlob']) {\n            return new File([blob], name, {lastModified: Date.now(), type: blob?.type});\n        }\n\n        const blobFile = new Blob([blob], {type: blob?.type});\n        return this.blobToFile(blobFile, name);\n    }\n\n    private blobToFile = (blob: Blob, fileName: string) => {\n        const anyBlob: any = blob;\n        anyBlob.lastModifiedDate = new Date();\n        anyBlob.name = fileName;\n        return anyBlob as File;\n    };\n\n}\n","import {inject, Injectable} from '@angular/core';\nimport {FileLoader} from './file-loader.service';\nimport {Platform} from '@angular/cdk/platform';\n\n@Injectable({\n    providedIn: 'root'\n})\nexport class Exif {\n\n    // Dependencies.\n    private readonly _platform: Platform = inject(Platform);\n    private readonly _fileLoader: FileLoader = inject(FileLoader);\n\n    async strip(file: File, quality: number = 100) {\n        // Validate we are on a browser.\n        if (!this._platform.isBrowser) {\n            return file;\n        }\n\n        // Validate the file exists and is\n        // an instance of a File object.\n        if (!file || !(file instanceof File)) {\n            return file;\n        }\n\n        // Only jpeg images need correction.\n        if (!['image/jpeg'].includes(file.type)) {\n            return file;\n        }\n\n        try {\n            // Read the file as an array buffer and data url.\n            const arrayBuffer = await this._fileLoader.asArrayBuffer(file);\n            const dataUrl = await this._fileLoader.asDataUrl(file);\n\n            // Create an image element.\n            const imageElement = await this.createImageElement(dataUrl);\n\n            // Get the orientation by using the buffer.\n            const orientation = this.getOrientation(arrayBuffer);\n\n            // Transform the image to remove the orientation.\n            const canvasType = this.getSupportedCanvasType(file.type);\n            const imageUrl = this.transformImage(imageElement, canvasType, orientation, quality);\n\n            // Validate the image url exists.\n            if (!imageUrl) {\n                return file;\n            }\n\n            // Transform the image url to a file.\n            return this._fileLoader.fromDataUrl(imageUrl, file.name);\n        } catch {\n            // When something goes wrong we\n            // just return the default file.\n            return file;\n        }\n    }\n\n    private async createImageElement(dataUrl: string) {\n        return new Promise<HTMLImageElement>((resolve, reject) => {\n            const image = new Image();\n            image.src = dataUrl;\n            image.onerror = () => reject('Error image create');\n            image.onabort = () => reject('Abort image create');\n            image.onload = () => resolve(image);\n        });\n    }\n\n    private transformImage = (image: HTMLImageElement, type: string, orientation: number, quality: number = 100) => {\n        // Create the canvas and context.\n        const canvas = document.createElement('canvas');\n        const context = canvas.getContext('2d');\n\n        // Validate the context exists.\n        if (!context) {\n            return null;\n        }\n\n        // Set the canvas size based on the image.\n        const {width, height} = image;\n        canvas.width = width;\n        canvas.height = height;\n\n        // Validate the orientation is correct\n        // else flip the canvas sizes.\n        if (4 < orientation && orientation < 9) {\n            canvas.width = height;\n            canvas.height = width;\n        }\n\n        // Transform the context based on the orientation.\n        switch (orientation) {\n            case 2:\n                context.transform(-1, 0, 0, 1, width, 0);\n                break;\n            case 3:\n                context.transform(-1, 0, 0, -1, width, height);\n                break;\n            case 4:\n                context.transform(1, 0, 0, -1, 0, height);\n                break;\n            case 5:\n                context.transform(0, 1, 1, 0, 0, 0);\n                break;\n            case 6:\n                context.transform(0, 1, -1, 0, height, 0);\n                break;\n            case 7:\n                context.transform(0, -1, -1, 0, height, width);\n                break;\n            case 8:\n                context.transform(0, -1, 1, 0, 0, width);\n                break;\n            default:\n                break;\n        }\n\n        // Draw the image on the context and return the data URL.\n        context.drawImage(image, 0, 0, width, height);\n        return canvas.toDataURL(type, quality / 100);\n    };\n\n    private getSupportedCanvasType = (fileType: string) => {\n        switch (fileType) {\n            case 'image/jpeg':\n            case 'image/jpg':\n                return 'image/jpeg';\n            case 'image/x-windows-bmp':\n            case 'image/bmp':\n                return 'image/bmp';\n            default:\n                return 'image/png';\n        }\n    };\n\n    private getOrientation = (buffer: ArrayBuffer) => {\n        // Create a new data view.\n        const view = new DataView(buffer);\n\n        if (view.getUint16(0, false) !== 0xFFD8) {\n            return -2;\n        }\n\n        const length = view.byteLength;\n        let offset = 2;\n\n        while (offset < length) {\n            if (view.getUint16(offset + 2, false) <= 8) {\n                return -1;\n            }\n\n            const marker = view.getUint16(offset, false);\n            offset += 2;\n\n            if (marker === 0xFFE1) {\n                if (view.getUint32(offset += 2, false) !== 0x45786966) {\n                    return -1;\n                }\n\n                const little = view.getUint16(offset += 6, false) === 0x4949;\n                offset += view.getUint32(offset + 4, little);\n\n                const tags = view.getUint16(offset, little);\n                offset += 2;\n\n                for (let index = 0; index < tags; index++) {\n                    if (view.getUint16(offset + index * 12, little) === 0x0112) {\n                        return view.getUint16(offset + index * 12 + 8, little);\n                    }\n                }\n            } else if ((marker & 0xFF00) !== 0xFF00) {\n                break;\n            } else {\n                offset += view.getUint16(offset, false);\n            }\n        }\n\n        return -1;\n    };\n\n}\n","import {inject, Injectable} from '@angular/core';\nimport {FileLoader} from './file-loader.service';\nimport {Platform} from '@angular/cdk/platform';\nimport {Exif} from './exif.service';\n\n@Injectable({\n    providedIn: 'root'\n})\nexport class ImageConverter {\n\n    // Dependencies.\n    private readonly _exif: Exif = inject(Exif);\n    private readonly _platform: Platform = inject(Platform);\n    private readonly _fileLoader: FileLoader = inject(FileLoader);\n\n    // Data.\n    private readonly _types = ['image/png', 'image/jpeg', 'image/webp'];\n\n    async toDataUri(contents: string | File | HTMLImageElement, options: { width: number, height: number } | null = null) {\n        // Check if the current platform is a browser.\n        if (!this._platform.isBrowser) {\n            return null;\n        }\n\n        // Get the image.\n        const image = await this.getImage(contents);\n\n        // Get the canvas width and height.\n        const canvasWidth = options?.width || image?.width;\n        const canvasHeight = options?.height || image?.height;\n\n        // Get the canvas and context.\n        const canvas = document.createElement('canvas');\n        const context = canvas.getContext('2d');\n\n        // Validate the context exists.\n        if (!context) {\n            return null;\n        }\n\n        // Set the width and height.\n        canvas.width = canvasWidth;\n        canvas.height = canvasHeight;\n\n        // When the canvas sizes are 0 we have failed.\n        if (canvas?.width === 0 && canvas?.height === 0) {\n            return null;\n        }\n\n        // Check if dimensions where supplied, else create the image.\n        if (!options) {\n            // Draw the image.\n            context.drawImage(image, 0, 0);\n\n            // Convert the canvas to a data url.\n            return canvas.toDataURL(this._types[0]);\n        }\n\n        // Get the dimensions and offsets.\n        const {width, height, xOffset, yOffset} = this.calculateOffsetAndDimensions(image, canvasWidth, canvasHeight);\n\n        // Draw the image.\n        context.drawImage(image, 0, 0, image.width, image.height, xOffset, yOffset, width, height);\n\n        // Convert the canvas to a data url.\n        return canvas.toDataURL(this._types[0]);\n    }\n\n    async fileToImage(file: File, types: string[] = this._types) {\n        // Check if the file matches an image.\n        if (!types.includes(file.type)) {\n            throw new Error('The selected file does not meet the required format.');\n        }\n\n        let stripped: File | null = null;\n        try {\n            stripped = await this._exif.strip(file, 90);\n        } catch {\n            // Do nothing.\n        }\n\n        // Ge the data uri.\n        const dataUri = await this._fileLoader.asDataUrl(stripped ?? file);\n\n        // Convert the data URI to a image element.\n        return await this.stringToImage(dataUri);\n    }\n\n    stringToImage(src: string) {\n        return new Promise<HTMLImageElement>((resolve, reject) => {\n            const image = new Image();\n            image.src = src;\n            image.onload = () => resolve(image);\n            image.onerror = error => reject(error);\n        });\n    }\n\n    private async getImage(contents: string | File | HTMLImageElement) {\n        // If the contents is already an HTML image element just return it.\n        if (contents instanceof HTMLImageElement) {\n            return contents;\n        }\n\n        // If the contents is a file convert it to an HTML image element.\n        if (contents instanceof File) {\n            return this.fileToImage(contents);\n        }\n\n        // If the contents is a string convert it to an HTML image element.\n        return this.stringToImage(contents);\n    }\n\n    private calculateOffsetAndDimensions = (image: HTMLImageElement, canvasWidth: number, canvasHeight: number) => {\n        const originalWidth = image.width;\n        const originalHeight = image.height;\n\n        const widthRatio = canvasWidth / originalWidth;\n        const heightRatio = canvasHeight / originalHeight;\n\n        let width: number;\n        let height: number;\n\n        if (originalWidth > originalHeight) {\n            height = originalHeight * heightRatio;\n            width = (originalWidth / originalHeight) * height;\n        } else {\n            width = originalWidth * widthRatio;\n            height = (originalHeight / originalWidth) * width;\n        }\n\n        let xOffset = 0;\n        let yOffset = 0;\n\n        if (canvasHeight === height) {\n            xOffset = -((width - canvasWidth) / 2);\n        } else if (canvasWidth === width) {\n            yOffset = -((height - canvasHeight) / 2);\n        }\n\n        return {xOffset, yOffset, width, height};\n    };\n\n}\n","import {inject, InjectionToken, DOCUMENT} from '@angular/core';\n\nexport const WINDOW = new InjectionToken<Window>(\n    'An abstraction over global window object',\n    {\n        factory: () => {\n            const {defaultView} = inject(DOCUMENT);\n\n            if (!defaultView) {\n                throw new Error('Window is not available');\n            }\n\n            return defaultView;\n        }\n    }\n);\n","import {inject, Injectable, Renderer2, RendererFactory2} from '@angular/core';\nimport {Platform} from '@angular/cdk/platform';\nimport {WINDOW} from '../tokens/window.token';\n\n@Injectable({\n    providedIn: 'root'\n})\nexport class Files {\n\n    private readonly _platform: Platform = inject(Platform);\n    private readonly _renderer: Renderer2 = inject(RendererFactory2).createRenderer(null, null);\n    private readonly _window: Window = inject(WINDOW, {optional: true});\n\n    download(file: File, name?: string): void;\n    download(blob: Blob, name: string): void;\n    download(blobOrFile: File | Blob, name?: string) {\n        if (!this._platform.isBrowser) {\n            return;\n        }\n\n        const anchor = this.createAnchorElement(blobOrFile, name);\n        this.revokeUrlAndPressAnchor(anchor);\n    }\n\n    fromDataUri(dataUri: string, name: string) {\n        if (!dataUri) {\n            return null;\n        }\n\n        try {\n            const byteString = this._window.atob(dataUri.split(',')[1]);\n\n            // Separate out the mime component.\n            const mimeString = dataUri\n                .split(',')[0]\n                .split(':')[1]\n                .split(';')[0];\n\n            // Write the bytes of the string to an ArrayBuffer.\n            const arrayBuffer = new ArrayBuffer(byteString.length);\n            const uint8Array = new Uint8Array(arrayBuffer);\n            for (let index = 0; index < byteString.length; index++) {\n                uint8Array[index] = byteString.charCodeAt(index);\n            }\n\n            const dataView = new DataView(arrayBuffer);\n            const blob = new Blob([dataView.buffer], {type: mimeString});\n            return this.create(blob, name);\n        } catch {\n            return null;\n        }\n    }\n\n    create(blob: Blob, name: string) {\n        if (!navigator['msSaveBlob']) {\n            return new File([blob], name, {lastModified: Date.now(), type: blob?.type});\n        }\n\n        const anyBlob: any = new Blob([blob], {type: blob?.type});\n        anyBlob.lastModifiedDate = new Date();\n        anyBlob.name = name;\n        return anyBlob as File;\n    }\n\n    private createAnchorElement(blobOrFile: File | Blob, name?: string) {\n        const anchor = this._renderer.createElement('a');\n        this._renderer.setProperty(anchor, 'download', name ?? blobOrFile?.['name']);\n        this._renderer.setProperty(anchor, 'rel', 'noopener');\n        this._renderer.setProperty(anchor, 'href', URL.createObjectURL(blobOrFile));\n        return anchor;\n    }\n\n    private revokeUrlAndPressAnchor(anchor: HTMLAnchorElement) {\n        setTimeout(() => URL.revokeObjectURL(anchor?.href), 40_000);\n        setTimeout(() => this.pressAnchor(anchor), 0);\n    }\n\n    private pressAnchor(anchor: HTMLAnchorElement) {\n        try {\n            anchor.dispatchEvent(new MouseEvent('click'));\n        } catch {\n            anchor.click();\n        }\n    }\n\n}\n","import {inject, InjectionToken} from '@angular/core';\nimport {WINDOW} from './window.token';\n\nexport const NAVIGATOR = new InjectionToken<Navigator>(\n    'An abstraction over window.navigator object',\n    {\n        factory: () => inject(WINDOW).navigator\n    }\n);","import {inject, InjectionToken, PLATFORM_ID, REQUEST} from '@angular/core';\nimport {isPlatformBrowser} from '@angular/common';\nimport {NAVIGATOR} from './navigator.token';\n\nexport const ACCEPT_LANGUAGE = new InjectionToken<string>(\n    'An abstraction for the accept-language header or navigator.language',\n    {\n        factory: () => {\n            const platformId = inject(PLATFORM_ID);\n            const request = inject(REQUEST, {optional: true});\n            const navigator = inject(NAVIGATOR, {optional: true});\n\n            const isBrowser = isPlatformBrowser(platformId);\n            if (isBrowser) {\n                if (typeof navigator !== 'object') {\n                    return null;\n                }\n\n                let t = 'anguage';\n                let n = navigator;\n                let f = n['l' + t + 's'];\n\n                const data = f && f.length ? f : (t = n['l' + t] ||\n                    n['browserL' + t] ||\n                    n['userL' + t]) ? [t] : t;\n\n                return typeof data === 'string'\n                    ? data\n                    : data.join(';');\n            }\n\n            return request?.headers?.get('accept-language') ?? null;\n        }\n    }\n);\n","import {ACCEPT_LANGUAGE} from '../tokens/accept-language.token';\nimport {inject, Injectable} from '@angular/core';\n\n@Injectable({\n    providedIn: 'root'\n})\nexport class Languages {\n\n    // Dependencies.\n    private readonly _acceptLanguage: string = inject(ACCEPT_LANGUAGE, {optional: true});\n\n    // Data.\n    private readonly _data: { code: string, script?: string, region?: string, quality: number }[] = [];\n\n    constructor() {\n        this._data = this.initialize();\n    }\n\n    get all() {\n        return this._data;\n    }\n\n    private initialize() {\n        // Parse all languages by using a regex.\n        const strings = (this._acceptLanguage ?? '')\n            .match(/((([a-zA-Z]+(-[a-zA-Z0-9]+){0,2})|\\*)(;q=[0-1](\\.[0-9]+)?)?)*/g);\n\n        // Get the content by parsing the strings.\n        const content = strings.map(item => {\n            if (!item) {\n                return null;\n            }\n\n            const bits = item.split(';');\n            const ietf = bits[0].split('-');\n            const hasScript = ietf.length === 3;\n\n            return {\n                code: ietf[0],\n                script: hasScript ? ietf[1] : null,\n                region: hasScript ? ietf[2] : ietf[1],\n                quality: bits[1] ? parseFloat(bits[1].split('=')[1]) : 1.0\n            };\n        });\n\n        // Filter out all the empty items\n        // and sort them by the quality.\n        return content\n            .filter(item => !!item)\n            .sort((a, b) => b.quality - a.quality);\n    }\n\n}\n","import {distinctUntilChanged, map, shareReplay} from 'rxjs/operators';\nimport {fromEvent, merge, Observable, of} from 'rxjs';\nimport {NAVIGATOR} from '../tokens/navigator.token';\nimport {inject, Injectable} from '@angular/core';\nimport {Platform} from '@angular/cdk/platform';\nimport {WINDOW} from '../tokens/window.token';\n\n@Injectable({\n    providedIn: 'root'\n})\nexport class Network {\n\n    // Dependencies.\n    private readonly _platform: Platform = inject(Platform);\n    private readonly _window?: Window = inject(WINDOW, {optional: true});\n    private readonly _navigator?: Navigator = inject(NAVIGATOR, {optional: true});\n\n    // Data.\n    private _online$: Observable<boolean> = of(true);\n\n    constructor() {\n        this.getOnlineObservable();\n    }\n\n    online() {\n        return this._online$;\n    }\n\n    private getOnlineObservable() {\n        // Validate we are on a browser.\n        if (!this._platform.isBrowser) {\n            return;\n        }\n\n        // Get all the events from the window.\n        const online$ = fromEvent(this._window, 'online').pipe(map(() => true));\n        const offline$ = fromEvent(this._window, 'offline').pipe(map(() => false));\n        const now$ = new Observable<boolean>(subscriber => {\n            subscriber.next(this._navigator?.onLine);\n            subscriber.complete();\n        });\n\n        // Merge all event so we get notified when\n        // a user is online/offline.\n        this._online$ = merge(now$, online$, offline$).pipe(\n            distinctUntilChanged(),\n            shareReplay({refCount: true, bufferSize: 1})\n        );\n    }\n\n}\n","import {inject, Injectable, OnDestroy, DOCUMENT} from '@angular/core';\nimport {debounceTime, startWith} from 'rxjs/operators';\nimport {Platform} from '@angular/cdk/platform';\nimport {WINDOW} from '../tokens/window.token';\nimport {fromEvent, Subscription} from 'rxjs';\n\n@Injectable({\n    providedIn: 'root'\n})\nexport class Patch implements OnDestroy {\n\n    // Dependencies.\n    private readonly _platform: Platform = inject(Platform);\n    private readonly _window?: Window = inject(WINDOW, {optional: true});\n    private readonly _document?: Document = inject(DOCUMENT, {optional: true});\n\n    // State.\n    private _hasPatchedMobileVerticalHeight: boolean = false;\n\n    // Subscriptions.\n    private _subscription = new Subscription();\n\n    mobileVerticalHeight() {\n        // Check if the user has already patched\n        // the mobile vertical height.\n        if (this._hasPatchedMobileVerticalHeight) {\n            return;\n        }\n\n        this.periodicallySetDocumentVerticalProperty();\n        this._hasPatchedMobileVerticalHeight = true;\n    }\n\n    ngOnDestroy() {\n        this._subscription?.unsubscribe();\n    }\n\n    private periodicallySetDocumentVerticalProperty() {\n        // Validate we are using a browser.\n        if (!this._platform.isBrowser || !this._window) {\n            return;\n        }\n\n        // Listen to a debounced window resize event.\n        const resize$ = fromEvent(this._window, 'resize').pipe(\n            debounceTime(25),\n            startWith(0)\n        );\n\n        // Subscribe to the resize observable.\n        const subscription = resize$.subscribe(() => {\n            const verticalHeight = (this._window?.innerHeight ?? 0) * 0.01;\n            this._document?.documentElement?.style?.setProperty('--vh', `${verticalHeight}px`);\n        });\n\n        // Save the subscription so we can destroy it later.\n        this._subscription.add(subscription);\n    }\n\n}\n","import {inject, InjectionToken, PLATFORM_ID, REQUEST, DOCUMENT} from '@angular/core';\nimport {isPlatformBrowser} from '@angular/common';\n\nexport const COOKIE = new InjectionToken<string | null>(\n    'An abstraction on the document.cookie or cookie header from the request object',\n    {\n        factory: () => {\n            const platformId = inject(PLATFORM_ID);\n            const request = inject(REQUEST, {optional: true});\n            const document = inject(DOCUMENT, {optional: true});\n\n            const isBrowser = isPlatformBrowser(platformId);\n            if (isBrowser) {\n                return document?.cookie ?? null;\n            }\n\n            return request?.headers?.get('cookie') ?? null;\n        }\n    }\n);\n","import {inject, InjectionToken} from '@angular/core';\nimport {WINDOW} from './window.token';\n\nexport const LOCATION = new InjectionToken<Location>(\n    'An abstraction over window.location object',\n    {\n        factory: () => inject(WINDOW).location\n    }\n);","import {EnvironmentProviders, InjectionToken, makeEnvironmentProviders} from '@angular/core';\n\nexport type FocusMode = 'only-desktop' | 'all';\n\nexport const GLOBAL_FOCUS_MODE = new InjectionToken<FocusMode>(\n    'The focus mode',\n    {\n        factory: () => 'only-desktop'\n    }\n);\n\nexport function provideGlobalFocusMode(mode: FocusMode): EnvironmentProviders {\n    return makeEnvironmentProviders([\n        {provide: GLOBAL_FOCUS_MODE, useValue: mode}\n    ]);\n}\n","export const BbRegex = {\n    email: /^(([^<>()\\[\\]\\\\.,;:\\s@\"]+(\\.[^<>()\\[\\]\\\\.,;:\\s@\"]+)*)|(\".+\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$/,\n    fullNumber: /^\\d*[1-9]\\d*$/,\n    url: new RegExp(\n        '^' +\n        // protocol identifier (optional)\n        // short syntax // still required\n        '(?:(?:(?:https?|ftp):)?\\\\/\\\\/)' +\n        // user:pass BasicAuth (optional)\n        '(?:\\\\S+(?::\\\\S*)?@)?' +\n        '(?:' +\n        // IP address exclusion\n        // private & local networks\n        '(?!(?:10|127)(?:\\\\.\\\\d{1,3}){3})' +\n        '(?!(?:169\\\\.254|192\\\\.168)(?:\\\\.\\\\d{1,3}){2})' +\n        '(?!172\\\\.(?:1[6-9]|2\\\\d|3[0-1])(?:\\\\.\\\\d{1,3}){2})' +\n        // IP address dotted notation octets\n        // excludes loopback network 0.0.0.0\n        // excludes reserved space >= 224.0.0.0\n        // excludes network & broadcast addresses\n        // (first & last IP address of each class)\n        '(?:[1-9]\\\\d?|1\\\\d\\\\d|2[01]\\\\d|22[0-3])' +\n        '(?:\\\\.(?:1?\\\\d{1,2}|2[0-4]\\\\d|25[0-5])){2}' +\n        '(?:\\\\.(?:[1-9]\\\\d?|1\\\\d\\\\d|2[0-4]\\\\d|25[0-4]))' +\n        '|' +\n        // host & domain names, may end with dot\n        // can be replaced by a shortest alternative\n        // (?![-_])(?:[-\\\\w\\\\u00a1-\\\\uffff]{0,63}[^-_]\\\\.)+\n        '(?:' +\n        '(?:' +\n        '[a-z0-9\\\\u00a1-\\\\uffff]' +\n        '[a-z0-9\\\\u00a1-\\\\uffff_-]{0,62}' +\n        ')?' +\n        '[a-z0-9\\\\u00a1-\\\\uffff]\\\\.' +\n        ')+' +\n        // TLD identifier name, may end with dot\n        '(?:[a-z\\\\u00a1-\\\\uffff]{2,}\\\\.?)' +\n        ')' +\n        // port number (optional)\n        '(?::\\\\d{2,5})?' +\n        // resource path (optional)\n        '(?:[/?#]\\\\S*)?' +\n        '$', 'i'\n    )\n};\n","export function formatFileSize(value: number, decimals: number = 2) {\n    if (value === 0) {\n        return '0 Bytes';\n    }\n\n    const k = 1024;\n    const dm = decimals < 0 ? 0 : decimals;\n    const sizes = ['Bytes', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB'];\n\n    const index = Math.floor(Math.log(value) / Math.log(k));\n\n    return parseFloat((value / Math.pow(k, index)).toFixed(dm)) + ' ' + sizes[index];\n}\n","import {AbstractControl, ValidatorFn} from '@angular/forms';\nimport {formatFileSize} from '../functions/format.utils';\nimport {formatDate} from '@angular/common';\nimport {BbRegex} from './regex';\n\nexport class BbValidator {\n\n    static email(control: AbstractControl) {\n        if (isEmptyInputValue(control.value)) {\n            return null;\n        }\n\n        return BbRegex.email.test(control.value) ? null : {email: true};\n    }\n\n    static fullNumber(control: AbstractControl) {\n        if (isEmptyInputValue(control.value)) {\n            return null;\n        }\n\n        return BbRegex.fullNumber.test(control.value) ? null : {fullNumber: true};\n    }\n\n    static maxFileSize(bytes: number) {\n        const validator: ValidatorFn = (control: AbstractControl) => {\n            const value = control.value;\n            if (value === null || value === undefined || !(value instanceof File)) {\n                return null;\n            }\n\n            if (value.size <= bytes) {\n                return null;\n            }\n\n            return {maxFileSize: {maxSize: formatFileSize(bytes)}};\n        };\n        return validator;\n    }\n\n    static confirm(fieldName: string, error: string = 'confirm') {\n        const validator: ValidatorFn = (control: AbstractControl) => {\n            if (isEmptyInputValue(control.value)) {\n                return null;\n            }\n\n            const field = control?.parent?.get(fieldName);\n\n            return control?.value === field?.value\n                ? null\n                : {[error]: true};\n        };\n        return validator;\n    }\n\n    static maxDate(date: Date, error: string = 'maxDate') {\n        const formattedDate = date.toString() !== 'Invalid Date'\n            ? formatDate(date, 'yyyy-MM-dd', 'en-US')\n            : null;\n\n        const validator: ValidatorFn = (control: AbstractControl) => {\n            if (isEmptyInputValue(control.value)) {\n                return null;\n            }\n\n            const controlDate = new Date(control.value);\n\n            return controlDate.getTime() > date.getTime()\n                ? {[error]: {date: formattedDate}}\n                : null;\n        };\n        return validator;\n    }\n\n    static minDate(date: Date, error: string = 'minDate') {\n        const formattedDate = date.toString() !== 'Invalid Date'\n            ? formatDate(date, 'yyyy-MM-dd', 'en-US')\n            : null;\n\n        const validator: ValidatorFn = (control: AbstractControl) => {\n            if (isEmptyInputValue(control.value)) {\n                return null;\n            }\n\n            const controlDate = new Date(control.value);\n\n            return controlDate.getTime() < date.getTime()\n                ? {[error]: {date: formattedDate}}\n                : null;\n        };\n        return validator;\n    }\n\n}\n\nfunction isEmptyInputValue(value: any) {\n    // We don't check for string here so it also works with arrays.\n    return value == null || value.length === 0;\n}\n","import {isObservable, Observable, of} from 'rxjs';\n\nexport function observableAttribute(value: unknown): Observable<any> {\n    return isObservable(value) ? value : of(value);\n}\n","export function clamp(value: number, min: number, max: number) {\n    return Math.min(Math.max(value, min), max);\n}\n","import {clamp} from '../functions/utils';\n\nexport function rgbToHex(red: number, green: number, blue: number, alpha: number = 1) {\n    const hex = ((blue | green << 8 | red << 16) | 1 << 24)\n        .toString(16)\n        .slice(1);\n\n    if (alpha >= 1) {\n        return `#${hex}`;\n    }\n\n    const hexAlpha = (Math.round(255 * alpha) | 1 << 8)\n        .toString(16)\n        .slice(1);\n    return `#${hex}${hexAlpha}`;\n}\n\nexport function rgbToHsv(red: number, green: number, blue: number, alpha: number = 1) {\n    const r = red / 255;\n    const g = green / 255;\n    const b = blue / 255;\n    const max = Math.max(r, g, b);\n    const min = Math.min(r, g, b);\n    const delta = max - min;\n    const value = max;\n    const saturation = max === 0 ? 0 : delta / max;\n    let hue = 0;\n\n    switch (max) {\n        case min:\n            hue = 0;\n            break;\n        case r:\n            hue = (g - b) / delta + (g < b ? 6 : 0);\n            break;\n        case g:\n            hue = (b - r) / delta + 2;\n            break;\n        case b:\n            hue = (r - g) / delta + 4;\n            break;\n    }\n\n    return {\n        hue: hue * 60 % 360,\n        saturation: clamp(saturation * 100, 0, 100),\n        value: clamp(value * 100, 0, 100),\n        alpha: alpha\n    };\n}\n","import {clamp} from '../functions/utils';\nimport {rgbToHex} from './rgb';\n\nexport function hsvToHex(hue: number, saturation: number, value: number, alpha: number = 1) {\n    const {red, green, blue, alpha: rgbAlpha} = hsvToRgb(hue, saturation, value, alpha);\n    return rgbToHex(red, green, blue, rgbAlpha);\n}\n\nexport function hsvToRgb(hue: number, saturation: number, value: number, alpha: number = 1) {\n    const h = hue / 60;\n    const s = saturation / 100;\n    const v = value / 100;\n    const i = Math.floor(h);\n    const f = h - i;\n    const p = v * (1 - s);\n    const q = v * (1 - f * s);\n    const t = v * (1 - (1 - f) * s);\n    const mod = i % 6;\n    const r = [v, q, p, p, t, v][mod];\n    const g = [t, v, v, q, p, p][mod];\n    const b = [p, p, t, v, v, q][mod];\n    return {\n        red: clamp(r * 255, 0, 255),\n        green: clamp(g * 255, 0, 255),\n        blue: clamp(b * 255, 0, 255),\n        alpha: alpha\n    };\n}\n\nexport function hsvToHsl(hue: number, saturation: number, value: number, alpha: number = 1) {\n    const s = saturation / 100;\n    const v = value / 100;\n    const l = (2 - s) * v;\n    const divisor = l <= 1 ? l : 2 - l; // Avoid division by zero when lightness is close to zero\n    const newSaturation = divisor < 1e-9 ? 0 : s * v / divisor;\n\n    return {\n        hue: hue,\n        saturation: clamp(newSaturation * 100, 0, 100),\n        lightness: clamp(l * 50, 0, 100),\n        alpha: alpha\n    };\n}\n","import {rgbToHsv} from './rgb';\nimport {hsvToHsl} from './hsv';\n\nexport function hexToHsv(hex: string) {\n    const {red, green, blue, alpha} = hexToRgb(hex);\n    return rgbToHsv(red, green, blue, alpha);\n}\n\nexport function hexToRgb(hex: string) {\n    const hexCharacters = 'a-f\\\\d';\n    const match3or4Hex = `#?[${hexCharacters}]{3}[${hexCharacters}]?`;\n    const match6or8Hex = `#?[${hexCharacters}]{6}([${hexCharacters}]{2})?`;\n    const nonHexChars = new RegExp(`[^#${hexCharacters}]`, 'gi');\n    const validHexSize = new RegExp(`^${match3or4Hex}$|^${match6or8Hex}$`, 'i');\n\n    if (typeof hex !== 'string' || nonHexChars.test(hex) || !validHexSize.test(hex)) {\n        throw new TypeError('expected a valid hex string');\n    }\n\n    hex = hex.replace(/^#/, '');\n    let alphaFromHex = 1;\n\n    if (hex.length === 8) {\n        alphaFromHex = Number.parseInt(hex.slice(6, 8), 16) / 255;\n        hex = hex.slice(0, 6);\n    }\n\n    if (hex.length === 4) {\n        alphaFromHex = Number.parseInt(hex.slice(3, 4).repeat(2), 16) / 255;\n        hex = hex.slice(0, 3);\n    }\n\n    if (hex.length === 3) {\n        hex = hex[0] + hex[0] + hex[1] + hex[1] + hex[2] + hex[2];\n    }\n\n    const number = Number.parseInt(hex, 16);\n    return {\n        red: number >> 16,\n        green: (number >> 8) & 255,\n        blue: number & 255,\n        alpha: alphaFromHex\n    };\n}\n\nexport function hexToHsl(hex: string) {\n    const hsv = hexToHsv(hex);\n    return hsvToHsl(hsv.hue, hsv.saturation, hsv.value, hsv.alpha);\n}\n","import {clamp} from '../functions/utils';\nimport {hsvToHex} from './hsv';\n\nexport function hslToHsv(hue: number, saturation: number, lightness: number, alpha: number = 1) {\n    const l = lightness * 2;\n    const s = saturation * (l <= 100 ? l : 200 - l) / 100; // Avoid division by zero when l + s is near 0\n    const newSaturation = l + s < 1e-9 ? 0 : 2 * s / (l + s);\n    return {\n        hue: hue,\n        saturation: clamp(newSaturation * 100, 0, 100),\n        value: clamp((l + s) / 2, 0, 100),\n        alpha: alpha\n    };\n}\n\nexport function hslToHex(hue: number, saturation: number, lightness: number, alpha: number = 1) {\n    const hsv = hslToHsv(hue, saturation, lightness, alpha);\n    return hsvToHex(hsv.hue, hsv.saturation, hsv.value, hsv.alpha);\n}\n","export function parseDate(value: string | number | Date): Date | null {\n    if (value === undefined || value === null) {\n        return null;\n    }\n\n    if (typeof value === 'string') {\n        if (/^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}$/.test(value)) {\n            return createDate(new Date(`${value}Z`));\n        }\n\n        if (/^[0-9]{4}-[0-9]{2}-[0-9]{2}$/.test(value)) {\n            const [y, m, d] = value.split('-');\n            const year = Number(y);\n            const month = Number(m) - 1;\n            const day = Number(d);\n            return createDate(new Date(year, month, day));\n        }\n    }\n\n    return createDate(new Date(value));\n}\n\nexport function createDate(date: Date) {\n    return isValidDate(date) ? date : null;\n}\n\nexport function isValidDate(date: unknown) {\n    if (!isDate(date)) {\n        return false;\n    }\n\n    return !isNaN(Number(date));\n}\n\nexport function isDate(value: unknown): value is Date {\n    return (value instanceof Date || (typeof value === 'object' && Object.prototype.toString.call(value) === '[object Date]'));\n}\n","export function generatePassword(length: number = 12) {\n    const chars = 'abcdefghijklmnopqrstuvwxyz';\n    const upperChars = chars.toUpperCase();\n    const numberChars = '0123456789';\n    const specialChars = '!@#?$%^&*+=';\n    const usableChars = chars + upperChars + numberChars + specialChars;\n\n    let generatedPassword = '';\n\n    for (let index = 0; index < length - 4; index++) {\n        generatedPassword += usableChars[Math.floor(Math.random() * (usableChars.length))];\n    }\n\n    generatedPassword += chars[Math.floor(Math.random() * (chars.length))];\n    generatedPassword += upperChars[Math.floor(Math.random() * (upperChars.length))];\n    generatedPassword += numberChars[Math.floor(Math.random() * (numberChars.length))];\n    generatedPassword += specialChars[Math.floor(Math.random() * (specialChars.length))];\n\n    return generatedPassword;\n}\n","export function arrayToMap<T extends object, K extends keyof T>(\n    items: T[],\n    field: K\n): Readonly<Record<string, T>> {\n    const map = Object.create(null) as Record<string, T>;\n    for (const item of items) {\n        if (item) {\n            map[String(item[field])] = item;\n        }\n    }\n    return map;\n}\n","export function isFileLike(input: unknown) {\n    return 'File' in window && input instanceof File\n        || 'Blob' in window && input instanceof Blob;\n}\n\nexport function isValidFileType(file: File, accept: string | null | undefined) {\n    if (!isFileLike(file)) {\n        return false;\n    }\n\n    if (accept === null || accept === undefined || accept === '*') {\n        return true;\n    }\n\n    const regexString = accept\n        .replace(/[-/\\\\^$*+?.()|[\\]{}]/g, '\\\\$&')\n        .replace(/,/g, '|');\n    const mimeTypeRegex = new RegExp(regexString);\n    return mimeTypeRegex.test(file?.type);\n}\n\nexport function isValidFileSize(file: File, max: number) {\n    if (!isFileLike(file)) {\n        return false;\n    }\n\n    return file?.size <= max;\n}\n","import {InjectionToken, makeEnvironmentProviders} from '@angular/core';\nimport {BehaviorSubject} from 'rxjs';\n\nexport class RouteCache<T> {\n\n    protected readonly value$: BehaviorSubject<T | null>;\n\n    constructor(initialValue?: T) {\n        this.value$ = new BehaviorSubject<T | null>(initialValue ?? null);\n    }\n\n    asObservable() {\n        return this.value$.asObservable();\n    }\n\n    get() {\n        return this.value$.getValue();\n    }\n\n    set(value: T) {\n        this.value$.next(value);\n    }\n\n}\n\nexport function provideRouteCache<T>(token: InjectionToken<RouteCache<T>>, value: RouteCache<T>) {\n    return makeEnvironmentProviders([\n        {provide: token, useValue: value}\n    ]);\n}\n","import {HostAttributeToken, inject, linkedSignal, signal} from '@angular/core';\nimport {distinctUntilChanged, map} from 'rxjs/operators';\nimport {ActivatedRoute, Router} from '@angular/router';\nimport {toSignal} from '@angular/core/rxjs-interop';\n\nexport function injectRouteParam<T = string>(\n    key: string,\n    format: (rawValue: string | null) => T | null = (value => value as T | null)\n) {\n    const route = inject(ActivatedRoute);\n    const initialValue = format(route.snapshot.paramMap.get(key));\n    return toSignal(\n        route.paramMap.pipe(\n            map(paramMap => format(paramMap.get(key))),\n            distinctUntilChanged()\n        ),\n        {initialValue}\n    );\n}\n\nexport function injectRouteParamId(key: string) {\n    return injectRouteParam<number>(key, rawValue => {\n        if (rawValue === null || rawValue === undefined) {\n            return null;\n        }\n        if (!/^\\d+$/.test(rawValue)) {\n            return null;\n        }\n        const numberValue = Number(rawValue);\n        return Number.isSafeInteger(numberValue) && numberValue > 0\n            ? numberValue\n            : null;\n    });\n}\n\nexport function injectRouteQueryParam<T = string>(\n    key: string,\n    format: (rawValue: string | null) => T | null = (value => value as T | null)\n) {\n    const route = inject(ActivatedRoute);\n    const initialValue = format(route.snapshot.queryParamMap.get(key));\n    return toSignal(\n        route.queryParamMap.pipe(\n            map(queryParamMap => format(queryParamMap.get(key))),\n            distinctUntilChanged()\n        ),\n        {initialValue}\n    );\n}\n\nexport function injectRouterInfo<T>(key: string) {\n    const router = inject(Router);\n    const info = router?.currentNavigation()?.extras?.info as Record<string, any>;\n    return signal(info?.[key] as T ?? null).asReadonly();\n}\n\nexport function injectLinkedRouteData<T>(key: string) {\n    const route = inject(ActivatedRoute);\n    const initialValue = (route.snapshot.data?.[key] as T | undefined) ?? null;\n    const source = toSignal(\n        route.data.pipe(\n            map(data => (data?.[key] as T | undefined) ?? null),\n            distinctUntilChanged()\n        ),\n        {initialValue}\n    );\n    return linkedSignal({source, computation: value => value});\n}\n\nexport function injectAttribute(key: string, defaultValue: string | null = null) {\n    const attribute = inject(new HostAttributeToken(key), {optional: true}) ?? null;\n    if (attribute === null || attribute === undefined) {\n        return signal(defaultValue).asReadonly();\n    }\n\n    return signal(attribute).asReadonly();\n}\n","/*\n * Public API Surface of bb-foundation\n */\n\nexport * from './lib/core/services/image-converter.service';\nexport * from './lib/core/services/file-loader.service';\nexport * from './lib/core/services/files.service';\nexport * from './lib/core/services/languages.service';\nexport * from './lib/core/services/network.service';\nexport * from './lib/core/services/patch.service';\nexport * from './lib/core/services/exif.service';\n\nexport * from './lib/core/tokens/accept-language.token';\nexport * from './lib/core/tokens/cookie.token';\nexport * from './lib/core/tokens/window.token';\nexport * from './lib/core/tokens/navigator.token';\nexport * from './lib/core/tokens/location.token';\nexport * from './lib/core/tokens/global-focus-mode.token';\n\nexport * from './lib/core/miscellaneous/regex';\nexport * from './lib/core/miscellaneous/validator';\nexport * from './lib/core/miscellaneous/coercion';\n\nexport * from './lib/core/colors/hex';\nexport * from './lib/core/colors/hsl';\nexport * from './lib/core/colors/hsv';\nexport * from './lib/core/colors/rgb';\n\nexport * from './lib/core/functions/utils';\nexport * from './lib/core/functions/date.utils';\nexport * from './lib/core/functions/password.utils';\nexport * from './lib/core/functions/array.utils';\nexport * from './lib/core/functions/file.utils';\nexport * from './lib/core/functions/format.utils';\nexport * from './lib/core/functions/route-cache.utils';\nexport * from './lib/core/functions/inject.utils';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":"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"}