{"version":3,"file":"bravobit-bb-foundation-localize.mjs","sources":["../../../projects/bb-foundation/localize/src/lib/interfaces/options.interfaces.ts","../../../projects/bb-foundation/localize/src/lib/interfaces/functions.interfaces.ts","../../../projects/bb-foundation/localize/src/lib/functions/lowercase.function.ts","../../../projects/bb-foundation/localize/src/lib/functions/uppercase.function.ts","../../../projects/bb-foundation/localize/src/lib/functions/date.function.ts","../../../projects/bb-foundation/localize/src/lib/localizations/english.localization.ts","../../../projects/bb-foundation/localize/src/lib/localizations/dutch.localization.ts","../../../projects/bb-foundation/localize/src/lib/localizations/papiamento.localization.ts","../../../projects/bb-foundation/localize/src/lib/localizations/spanish.localization.ts","../../../projects/bb-foundation/localize/src/lib/localizations/german.localization.ts","../../../projects/bb-foundation/localize/src/lib/localizations/portugese.localization.ts","../../../projects/bb-foundation/localize/src/lib/handlers/missing.handler.ts","../../../projects/bb-foundation/localize/src/lib/dictionary/dictionary.data.ts","../../../projects/bb-foundation/localize/src/lib/dictionary/dictionary.context.ts","../../../projects/bb-foundation/localize/src/lib/dictionary/dictionary.class.ts","../../../projects/bb-foundation/localize/src/lib/transforms/abstract.transform.ts","../../../projects/bb-foundation/localize/src/lib/localize.service.ts","../../../projects/bb-foundation/localize/src/lib/localize.tokens.ts","../../../projects/bb-foundation/localize/src/lib/transforms/plural.transform.ts","../../../projects/bb-foundation/localize/src/lib/transforms/interpolate.transform.ts","../../../projects/bb-foundation/localize/src/lib/transforms/reference.transform.ts","../../../projects/bb-foundation/localize/src/lib/views/localize-template.directive.ts","../../../projects/bb-foundation/localize/src/lib/views/localize-string/localize-string.component.ts","../../../projects/bb-foundation/localize/src/lib/views/localize-string/localize-string.component.html","../../../projects/bb-foundation/localize/src/lib/localize.pipe.ts","../../../projects/bb-foundation/localize/src/lib/localize.config.ts","../../../projects/bb-foundation/localize/src/lib/localize.module.ts","../../../projects/bb-foundation/localize/src/bravobit-bb-foundation-localize.ts"],"sourcesContent":["//\n// These are the options that the user has\n// when localizing the token.\n//\n\nexport interface LocalizeOptions {\n    optional?: boolean;\n    dictionary?: string;\n    data?: LocalizeOptionsData;\n}\n\n//\n// This is the data that the user can interpolate\n// in the localized strings.\n//\n\nexport interface LocalizeOptionsData {\n    [token: string]: string | number | boolean | Date;\n}\n\n//\n// These are the params that the user can set\n// when he wants to localize a token (with the\n// optional options).\n//\n\nexport interface LocalizeParams extends LocalizeOptions {\n    token: string;\n}\n","//\n// This is the interface that handles the localize functions.\n// every localize function needs to conform to this interface.\n// The interface allows the user to transform a token into\n// another value.\n//\n\nexport interface LocalizeFunction {\n\n    keyword(): string;\n\n    transform(value: string, locale?: string): string;\n\n}\n\n//\n// This is the interface that handles the map\n// of all the localize functions.\n//\n\nexport interface LocalizeFunctionMap {\n    [keyword: string]: LocalizeFunction;\n}\n","import {LocalizeFunction} from '../interfaces/functions.interfaces';\n\n//\n// This function transform the value\n// to a lowercase variant of the value.\n//\n\nexport class LocalizeLowercaseFunction implements LocalizeFunction {\n\n    keyword() {\n        return 'lowercase';\n    }\n\n    transform(value: string) {\n        return (value ?? '').toLowerCase();\n    }\n\n}\n","import {LocalizeFunction} from '../interfaces/functions.interfaces';\n\n//\n// This function transform the value\n// to a uppercase variant of the value.\n//\n\nexport class LocalizeUppercaseFunction implements LocalizeFunction {\n\n    keyword() {\n        return 'uppercase';\n    }\n\n    transform(value: string) {\n        return (value ?? '').toUpperCase();\n    }\n\n}\n","import {LocalizeFunction} from '../interfaces/functions.interfaces';\nimport {formatDate} from '@angular/common';\n\n//\n// This function transform the value\n// to a localized date.\n//\n\nexport class LocalizeDateFunction implements LocalizeFunction {\n\n    keyword() {\n        return 'date';\n    }\n\n    transform(value: string, locale?: string) {\n        const date = new Date(value);\n\n        if (date.toString() === 'Invalid Date') {\n            return '?';\n        }\n\n        return formatDate(date, 'longDate', locale);\n    }\n\n}\n","export const extraEnglishDictionary = {\n    'form-control-errors': {\n        'unknown': 'The field has an unknown error.',\n        'required': 'This field is required.',\n        'pattern': 'Invalid format.',\n        'email': 'The field does not match a valid email address.',\n        'emailTaken': 'The e-mail is already taken.',\n        'passwordMatch': 'The passwords don\\'t match.',\n        'confirm': 'The field does not match.',\n        'fullNumber': 'The field should be a full number.',\n        'min': 'Minimum amount should be {{min}}.',\n        'max': 'Maximum amount should be {{max}}.',\n        'invalidFileType': 'The file type is not allowed.',\n        'invalidFiles': 'One of the files is not allowed.',\n        'maxFileSize': 'The file has exceed the maximum amount of {{maxSize}}.',\n        \"maxTotalFileSize\": \"The files together are {{current}} in size and have exceeded the maximum of {{max}}.\",\n        'minDate': 'The first accepted date is {{date|date}}.',\n        'maxDate': 'The last accepted date is {{date|date}}.',\n        'invalidDate': 'The field contains an invalid date.',\n        'minlength': 'Expected a minimum of {{requiredLength}} characters but got {{actualLength}} characters.',\n        'maxlength': 'Expected a maximum of {{requiredLength}} characters but got {{actualLength}} characters.'\n    },\n    'select': {\n        'not_found_text': 'No items found',\n        'clear_all_text': 'Clear all',\n        'loading_text': 'Loading...',\n        'type_to_search_text': 'Typ to search',\n        'add_tag_text': 'Add tag'\n    },\n    'multi-file-control': {\n        'multiple_choose_file': 'Choose files',\n        'multiple_choose_file_text': '@element(label) or drag and drop files here',\n        'single_choose_file': 'Choose file',\n        'single_choose_file_text': '@element(label) or drag and drop the file here'\n    },\n    'image-control': {\n        'button_label': 'Choose an image',\n        'delete_label': 'Delete'\n    },\n    'collection': {\n        'search_label': 'Search...',\n        'showing_label': 'Showing @element(start) to @element(end) of @element(total) results',\n        'no_results_label': 'There are no results for @element(query). Try a different search term to find results...',\n        'empty_label': 'There are no results...',\n        'error_label': 'It seems that an error occurred while using the application.'\n    },\n    'tables': {\n        'search': 'Search...',\n        'loading': 'Loading...',\n        'empty': 'There is nothing to find here.',\n        'page': 'page',\n        'error_datasource': 'No data source was provided.',\n        'error_unauthorized': 'You need to be authenticated to view this data.',\n        'error_forbidden': 'You do not have access to view this data.',\n        'error_not_found': 'The data was not found.',\n        'error_server': 'A server error occurred while fetching data from the server.',\n        'error_down': 'It looks like the server is down.',\n        'error_unknown': 'A unknown error occurred.'\n    },\n    'file-picker': {\n        'choose': 'Choose file',\n        'remove': 'Remove file',\n        'drop': 'or drag and drop file here'\n    },\n    'dialog': {\n        'default_confirm_button': 'Confirm',\n        'default_cancel_button': 'Cancel',\n        'default_title': 'Are you sure you want to do this?',\n        'default_description': 'This action may not be undoable once you confirm it. Are you sure you want to do this?'\n    },\n    'times': {\n        'tomorrow_at': 'Tomorrow at {{date}}',\n        'today_at': 'Today at {{date}}',\n        'yesterday_at': 'Yesterday at {{date}}'\n    }\n};\n","export const extraDutchDictionary = {\n    'form-control-errors': {\n        'unknown': 'Het veld heeft een onbekende fout.',\n        'required': 'Dit veld is verplicht.',\n        'pattern': 'Ongeldig formaat.',\n        'email': 'Het veld komt niet overeen met een geldig e-mailadres.',\n        'emailTaken': 'Het e-mailadres is al bezet.',\n        'passwordMatch': 'De wachtwoorden komen niet overeen.',\n        'confirm': 'Het veld komt niet overeen.',\n        'fullNumber': 'Het veld moet een volledig getal zijn.',\n        'min': 'Minimum hoeveelheid moet {{min}} zijn.',\n        'max': 'Maximum hoeveelheid moet {{max}} zijn.',\n        'invalidFileType': 'Het type bestand is niet toegestaan.',\n        'invalidFiles': 'Een van de bestanden is niet toegestaan.',\n        'maxFileSize': 'Het bestand heeft de maximum hoeveelheid van {{maxSize}} overschreden.',\n        'maxTotalFileSize': 'De bestanden zijn samen {{current}} groot en hebben het maximum van {{max}} overschreden.',\n        'minDate': 'De eerst mogelijke datum is {{date|date}}.',\n        'maxDate': 'De laatst mogelijke datum is {{date|date}}.',\n        'invalidDate': 'Het veld bevat een ongeldige datum.',\n        'minlength': 'Verwachtte minimaal {{requiredLength}} tekens, maar kreeg {{actualLength}} tekens.',\n        'maxlength': 'Verwachtte maximaal {{requiredLength}} tekens, maar kreeg {{actualLength}} tekens.'\n    },\n    'select': {\n        'not_found_text': 'Geen items gevonden',\n        'clear_all_text': 'Wis alles',\n        'loading_text': 'Aan het laden...',\n        'type_to_search_text': 'Typ om te zoeken',\n        'add_tag_text': 'Tag toevoegen'\n    },\n    'multi-file-control': {\n        'multiple_choose_file': 'Kies bestanden',\n        'multiple_choose_file_text': '@element(label) of sleep de bestanden hiernaartoe',\n        'single_choose_file': 'Kies bestand',\n        'single_choose_file_text': '@element(label) of sleep het bestand hiernaartoe'\n    },\n    'image-control': {\n        'button_label': 'Kies een afbeelding',\n        'delete_label': 'Verwijderen'\n    },\n    'collection': {\n        'search_label': 'Zoeken...',\n        'showing_label': 'Toont @element(start) tot @element(end) van @element(total) resultaten',\n        'no_results_label': 'Er zijn geen resultaten voor @element(query). Probeer een andere zoekterm om resultaten te vinden...',\n        'empty_label': 'Er zijn geen resultaten...',\n        'error_label': 'Het lijkt erop dat een fout is opgetreden tijdens het gebruiken van de applicatie.'\n    },\n    'tables': {\n        'search': 'Zoeken...',\n        'loading': 'Aan het laden...',\n        'empty': 'Er is hier niets te vinden.',\n        'page': 'pagina',\n        'error_datasource': 'Er is geen gegevensbron verstrekt.',\n        'error_unauthorized': 'U moet ingelogd zijn om deze gegevens te bekijken.',\n        'error_forbidden': 'U hebt geen toegang om deze gegevens te bekijken.',\n        'error_not_found': 'De gegevens zijn niet gevonden.',\n        'error_server': 'Er is een serverfout opgetreden bij het ophalen van gegevens van de server.',\n        'error_down': 'Het lijkt erop dat de server down is.',\n        'error_unknown': 'Er is een onbekende fout opgetreden bij het ophalen van gegevens van de server.'\n    },\n    'file-picker': {\n        'choose': 'Kies bestand',\n        'remove': 'Verwijder bestand',\n        'drop': 'of sleep het bestand hiernaartoe'\n    },\n    'dialog': {\n        'default_confirm_button': 'Ik weet het zeker',\n        'default_cancel_button': 'Annuleren',\n        'default_title': 'Weet u zeker dat u dit wilt doen?',\n        'default_description': 'Deze actie kan mogelijk niet ongedaan worden gemaakt wanneer u deze bevestigt. Weet u zeker dat u dit wilt doen?'\n    },\n    'times': {\n        'tomorrow_at': 'Morgen om {{date}}',\n        'today_at': 'Vandaag om {{date}}',\n        'yesterday_at': 'Gisteren om {{date}}'\n    }\n};\n","export const extraPapiamentoDictionary = {\n    'form-control-errors': {\n        'unknown': 'E campo tin un fout no konosí.',\n        'required': 'E campo aki ta obligatoro.',\n        'pattern': 'Formato no válido.',\n        'email': 'E campo no ta koinsidí ku un adres di email válido.',\n        'emailTaken': 'E-mail ya ta usa.',\n        'passwordMatch': 'E passwordnan no ta koinsidí.',\n        'confirm': 'E campo no ta koinsidí.',\n        'fullNumber': 'E campo mester ta un number komplet.',\n        'min': 'Kantidad mínimo mester ta {{min}}.',\n        'max': 'Kantidad máximo mester ta {{max}}.',\n        'invalidFileType': 'E tipo di archivo no ta permití.',\n        'invalidFiles': 'Un di e archivonan no ta permití.',\n        'maxFileSize': 'E archivo a pasa e límite máximo di {{maxSize}}.',\n        'maxTotalFileSize': 'E archivonan huntu ta {{current}} den tamaño i a surpasá e máksimo di {{max}}.',\n        'minDate': 'E promé fecha akseptá ta {{date|date}}.',\n        'maxDate': 'E último fecha akseptá ta {{date|date}}.',\n        'invalidDate': 'E campo tin un fecha no válido.',\n        'minlength': 'Espera un mínimo di {{requiredLength}} karakter pero haña {{actualLength}} karakter.',\n        'maxlength': 'Espera un máximo di {{requiredLength}} karakter pero haña {{actualLength}} karakter.'\n    },\n    'select': {\n        'not_found_text': 'No a haña niun item',\n        'clear_all_text': 'Limpia tur',\n        'loading_text': 'Ta karga...',\n        'type_to_search_text': 'Skribi pa buska',\n        'add_tag_text': 'Haña tag'\n    },\n    'multi-file-control': {\n        'multiple_choose_file': 'Skohe archivonan',\n        'multiple_choose_file_text': '@element(label) òf trèk i kai archivonan aki',\n        'single_choose_file': 'Skohe archivo',\n        'single_choose_file_text': '@element(label) òf trèk i kai un archivo aki'\n    },\n    'image-control': {\n        'button_label': 'Skohe un imágen',\n        'delete_label': 'Eliminá'\n    },\n    'collection': {\n        'search_label': 'Buska...',\n        'showing_label': 'Ta mustra @element(start) te @element(end) di @element(total) rezultadonan',\n        'no_results_label': 'No tin rezultadonan pa @element(query). Purba un otro término di buska pa haña rezultadonan...',\n        'empty_label': 'No tin rezultadonan...',\n        'error_label': 'Parece ku un fout a pasa durante e uzo di e aplikashon.'\n    },\n    'tables': {\n        'search': 'Buska...',\n        'loading': 'Ta karga...',\n        'empty': 'No tin nada pa haña aki.',\n        'page': 'página',\n        'error_datasource': 'No a duna un fuente di dato.',\n        'error_unauthorized': 'Bo mester ta autentiká pa mira e datonan aki.',\n        'error_forbidden': 'Bo no tin akses pa mira e datonan aki.',\n        'error_not_found': 'E datonan no a haña.',\n        'error_server': 'Un fout di server a pasa durante e haña di dato di e server.',\n        'error_down': 'Parece ku e server ta afó.',\n        'error_unknown': 'Un fout no konosí a pasa.'\n    },\n    'file-picker': {\n        'choose': 'Skohe archivo',\n        'remove': 'Kita archivo',\n        'drop': 'òf trèk i kai archivo aki'\n    },\n    'dialog': {\n        'default_confirm_button': 'Konfirma',\n        'default_cancel_button': 'Kanselá',\n        'default_title': 'Bo ta sigur ku bo ke hasi esaki?',\n        'default_description': 'E akshon aki por no ta reversibel ora bo konfirma. Bo ta sigur ku bo ke hasi esaki?'\n    },\n    'times': {\n        'tomorrow_at': 'Mañan na {{date}}',\n        'today_at': 'Awe na {{date}}',\n        'yesterday_at': 'Ayer na {{date}}'\n    }\n};\n","export const extraSpanishDictionary = {\n    'form-control-errors': {\n        'unknown': 'El campo tiene un error desconocido.',\n        'required': 'Este campo es obligatorio.',\n        'pattern': 'Formato inválido.',\n        'email': 'El campo no corresponde a una dirección de correo válida.',\n        'emailTaken': 'El correo electrónico ya está en uso.',\n        'passwordMatch': 'Las contraseñas no coinciden.',\n        'confirm': 'El campo no coincide.',\n        'fullNumber': 'El campo debe ser un número completo.',\n        'min': 'La cantidad mínima debe ser {{min}}.',\n        'max': 'La cantidad máxima debe ser {{max}}.',\n        'invalidFileType': 'El tipo de archivo no está permitido.',\n        'invalidFiles': 'Uno de los archivos no está permitido.',\n        'maxFileSize': 'El archivo excede el tamaño máximo de {{maxSize}}.',\n        'maxTotalFileSize': 'Los archivos en conjunto tienen un tamaño de {{current}} y han excedido el máximo de {{max}}.',\n        'minDate': 'La primera fecha aceptada es {{date|date}}.',\n        'maxDate': 'La última fecha aceptada es {{date|date}}.',\n        'invalidDate': 'El campo contiene una fecha inválida.',\n        'minlength': 'Se esperaban al menos {{requiredLength}} caracteres pero se obtuvieron {{actualLength}}.',\n        'maxlength': 'Se esperaban un máximo de {{requiredLength}} caracteres pero se obtuvieron {{actualLength}}.'\n    },\n    'select': {\n        'not_found_text': 'No se encontraron artículos',\n        'clear_all_text': 'Limpiar todo',\n        'loading_text': 'Cargando...',\n        'type_to_search_text': 'Escribe para buscar',\n        'add_tag_text': 'Agregar etiqueta'\n    },\n    'multi-file-control': {\n        'multiple_choose_file': 'Seleccionar archivos',\n        'multiple_choose_file_text': '@element(label) o arrastra y suelta archivos aquí',\n        'single_choose_file': 'Seleccionar archivo',\n        'single_choose_file_text': '@element(label) o arrastra y suelta el archivo aquí'\n    },\n    'image-control': {\n        'button_label': 'Elige una imagen',\n        'delete_label': 'Borrar'\n    },\n    'collection': {\n        'search_label': 'Para buscar...',\n        'showing_label': 'Muestra los resultados de @element(start) a @element(end) de @element(total)',\n        'no_results_label': 'No hay resultados para @element(query). Pruebe con un término de búsqueda diferente para encontrar resultados...',\n        'empty_label': 'No hay resultados...',\n        'error_label': 'Parece que se produjo un error al utilizar la aplicación.'\n    },\n    'tables': {\n        'search': 'Buscar...',\n        'loading': 'Cargando...',\n        'empty': 'No hay nada que encontrar aquí.',\n        'page': 'página',\n        'error_datasource': 'No se proporcionó una fuente de datos.',\n        'error_unauthorized': 'Necesitas estar autenticado para ver estos datos.',\n        'error_forbidden': 'No tienes acceso para ver estos datos.',\n        'error_not_found': 'No se encontraron los datos.',\n        'error_server': 'Ocurrió un error en el servidor al obtener los datos.',\n        'error_down': 'Parece que el servidor está caído.',\n        'error_unknown': 'Ocurrió un error desconocido.'\n    },\n    'file-picker': {\n        'choose': 'Elegir archivo',\n        'remove': 'Quitar archivo',\n        'drop': 'o arrastra y suelta el archivo aquí'\n    },\n    'dialog': {\n        'default_confirm_button': 'Confirmar',\n        'default_cancel_button': 'Cancelar',\n        'default_title': '¿Estás seguro de que quieres hacer esto?',\n        'default_description': 'Esta acción puede no ser reversible una vez que la confirmes. ¿Estás seguro de que quieres hacer esto?'\n    },\n    'times': {\n        'tomorrow_at': 'Mañana a las {{date}}',\n        'today_at': 'Hoy a las {{date}}',\n        'yesterday_at': 'Ayer a las {{date}}'\n    }\n};\n","export const extraGermanDictionary = {\n    'form-control-errors': {\n        'unknown': 'Das Feld weist einen unbekannten Fehler auf.',\n        'required': 'Dieses Feld ist erforderlich.',\n        'pattern': 'Ungültiges Format.',\n        'email': 'Das Feld enthält keine gültige E-Mail-Adresse.',\n        'emailTaken': 'Diese E-Mail-Adresse ist bereits vergeben.',\n        'passwordMatch': 'Die Passwörter stimmen nicht überein.',\n        'confirm': 'Das Feld stimmt nicht überein.',\n        'fullNumber': 'Das Feld muss eine ganze Zahl sein.',\n        'min': 'Der Mindestwert sollte {{min}} betragen.',\n        'max': 'Der Höchstwert sollte {{max}} betragen.',\n        'invalidFileType': 'Der Dateityp ist nicht zulässig.',\n        'invalidFiles': 'Eine der Dateien ist nicht zulässig.',\n        'maxFileSize': 'Die Datei überschreitet die maximale Größe von {{maxSize}}.',\n        \"maxTotalFileSize\": \"Die Dateien sind zusammen {{current}} groß und überschreiten das Maximum von {{max}}.\",\n        'minDate': 'Das erste akzeptierte Datum ist {{date|date}}.',\n        'maxDate': 'Das letzte akzeptierte Datum ist {{date|date}}.',\n        'invalidDate': 'Das Feld enthält ein ungültiges Datum.',\n        'minlength': 'Erwartet werden mindestens {{requiredLength}} Zeichen, aber es sind {{actualLength}} Zeichen.',\n        'maxlength': 'Erwartet werden maximal {{requiredLength}} Zeichen, aber es sind {{actualLength}} Zeichen.'\n    },\n    'select': {\n        'not_found_text': 'Keine Einträge gefunden',\n        'clear_all_text': 'Alle löschen',\n        'loading_text': 'Lädt...',\n        'type_to_search_text': 'Tippen zum Suchen',\n        'add_tag_text': 'Tag hinzufügen'\n    },\n    'multi-file-control': {\n        'multiple_choose_file': 'Dateien auswählen',\n        'multiple_choose_file_text': '@element(label) oder Dateien hierher ziehen',\n        'single_choose_file': 'Datei auswählen',\n        'single_choose_file_text': '@element(label) oder die Datei hierher ziehen'\n    },\n    'image-control': {\n        'button_label': 'Bild auswählen',\n        'delete_label': 'Löschen'\n    },\n    'collection': {\n        'search_label': 'Suchen...',\n        'showing_label': 'Zeige @element(start) bis @element(end) von @element(total) Ergebnissen',\n        'no_results_label': 'Keine Ergebnisse für @element(query). Versuchen Sie einen anderen Suchbegriff...',\n        'empty_label': 'Es gibt keine Ergebnisse...',\n        'error_label': 'Es scheint, als ob ein Fehler bei der Nutzung der Anwendung aufgetreten ist.'\n    },\n    'tables': {\n        'search': 'Suchen...',\n        'loading': 'Lädt...',\n        'empty': 'Hier gibt es nichts zu finden.',\n        'page': 'Seite',\n        'error_datasource': 'Es wurde keine Datenquelle bereitgestellt.',\n        'error_unauthorized': 'Sie müssen angemeldet sein, um diese Daten zu sehen.',\n        'error_forbidden': 'Sie haben keinen Zugriff auf diese Daten.',\n        'error_not_found': 'Die Daten wurden nicht gefunden.',\n        'error_server': 'Beim Abrufen der Daten ist ein Serverfehler aufgetreten.',\n        'error_down': 'Es sieht so aus, als ob der Server nicht erreichbar ist.',\n        'error_unknown': 'Ein unbekannter Fehler ist aufgetreten.'\n    },\n    'file-picker': {\n        'choose': 'Datei auswählen',\n        'remove': 'Datei entfernen',\n        'drop': 'oder Datei hierher ziehen'\n    },\n    'dialog': {\n        'default_confirm_button': 'Bestätigen',\n        'default_cancel_button': 'Abbrechen',\n        'default_title': 'Sind Sie sicher, dass Sie dies tun möchten?',\n        'default_description': 'Diese Aktion kann nach der Bestätigung möglicherweise nicht rückgängig gemacht werden. Sind Sie sicher?'\n    },\n    'times': {\n        'tomorrow_at': 'Morgen um {{date}}',\n        'today_at': 'Heute um {{date}}',\n        'yesterday_at': 'Gestern um {{date}}'\n    }\n};","export const extraPortugueseDictionary = {\n    'form-control-errors': {\n        'unknown': 'O campo possui um erro desconhecido.',\n        'required': 'Este campo é obrigatório.',\n        'pattern': 'Formato inválido.',\n        'email': 'O campo não corresponde a um endereço de e-mail válido.',\n        'emailTaken': 'O e-mail já está em uso.',\n        'passwordMatch': 'As senhas não coincidem.',\n        'confirm': 'O campo não coincide.',\n        'fullNumber': 'O campo deve ser um número inteiro.',\n        'min': 'O valor mínimo deve ser {{min}}.',\n        'max': 'O valor máximo deve ser {{max}}.',\n        'invalidFileType': 'O tipo de arquivo não é permitido.',\n        'invalidFiles': 'Um dos arquivos não é permitido.',\n        'maxFileSize': 'O arquivo excedeu o tamanho máximo de {{maxSize}}.',\n        \"maxTotalFileSize\": \"Os arquivos juntos têm {{current}} de tamanho e excederam o máximo de {{max}}.\",\n        'minDate': 'A primeira data aceita é {{date|date}}.',\n        'maxDate': 'A última data aceita é {{date|date}}.',\n        'invalidDate': 'O campo contém uma data inválida.',\n        'minlength': 'Esperava-se um mínimo de {{requiredLength}} caracteres, mas obteve-se {{actualLength}} caracteres.',\n        'maxlength': 'Esperava-se um máximo de {{requiredLength}} caracteres, mas obteve-se {{actualLength}} caracteres.'\n    },\n    'select': {\n        'not_found_text': 'Nenhum item encontrado',\n        'clear_all_text': 'Limpar tudo',\n        'loading_text': 'Carregando...',\n        'type_to_search_text': 'Digite para pesquisar',\n        'add_tag_text': 'Adicionar tag'\n    },\n    'multi-file-control': {\n        'multiple_choose_file': 'Escolher arquivos',\n        'multiple_choose_file_text': '@element(label) ou arraste e solte arquivos aqui',\n        'single_choose_file': 'Escolher arquivo',\n        'single_choose_file_text': '@element(label) ou arraste e solte o arquivo aqui'\n    },\n    'image-control': {\n        'button_label': 'Escolher uma imagem',\n        'delete_label': 'Excluir'\n    },\n    'collection': {\n        'search_label': 'Pesquisar...',\n        'showing_label': 'Exibindo @element(start) a @element(end) de @element(total) resultados',\n        'no_results_label': 'Não há resultados para @element(query). Tente um termo de pesquisa diferente para encontrar resultados...',\n        'empty_label': 'Não há resultados...',\n        'error_label': 'Parece que ocorreu um erro ao usar o aplicativo.'\n    },\n    'tables': {\n        'search': 'Pesquisar...',\n        'loading': 'Carregando...',\n        'empty': 'Não há nada para encontrar aqui.',\n        'page': 'página',\n        'error_datasource': 'Nenhuma fonte de dados foi fornecida.',\n        'error_unauthorized': 'Você precisa estar autenticado para visualizar estes dados.',\n        'error_forbidden': 'Você não tem acesso para visualizar estes dados.',\n        'error_not_found': 'Os dados não foram encontrados.',\n        'error_server': 'Ocorreu um erro no servidor ao buscar os dados.',\n        'error_down': 'Parece que o servidor está fora do ar.',\n        'error_unknown': 'Ocorreu um erro desconhecido.'\n    },\n    'file-picker': {\n        'choose': 'Escolher arquivo',\n        'remove': 'Remover arquivo',\n        'drop': 'ou arraste e solte o arquivo aqui'\n    },\n    'dialog': {\n        'default_confirm_button': 'Confirmar',\n        'default_cancel_button': 'Cancelar',\n        'default_title': 'Tem certeza de que deseja fazer isso?',\n        'default_description': 'Esta ação pode não ser reversível após a confirmação. Tem certeza de que deseja fazer isso?'\n    },\n    'times': {\n        'tomorrow_at': 'Amanhã às {{date}}',\n        'today_at': 'Hoje às {{date}}',\n        'yesterday_at': 'Ontem às {{date}}'\n    }\n};","import {LocalizeHandlerProtocol} from '../interfaces/handlers.interfaces';\nimport {LocalizeParams} from '../interfaces/options.interfaces';\n\nexport class LocalizeMissingHandler implements LocalizeHandlerProtocol {\n\n    handle(params: LocalizeParams) {\n        // Log to the console when the token was not found\n        // if the user did not mark it as optional.\n        if (!params?.optional) {\n            this.log(`The token with name: \"${params?.token}\" was not found.`);\n        }\n\n        // Return the default token back.\n        return params?.token ?? null;\n    }\n\n    private log = (message: string) => console?.warn?.(message);\n\n}\n","export type LocalizeDictionaryDataValues = { [key: string]: string | LocalizeDictionaryDataValues };\n\nexport class LocalizeDictionaryData {\n\n    constructor(public data: LocalizeDictionaryDataValues) {\n    }\n\n}\n","export class LocalizeDictionaryContext {\n\n    regexp: RegExp = /^.*$/;\n\n    pattern(regexp: RegExp) {\n        this.regexp = regexp;\n        return this;\n    }\n\n    matches(value: string | string[]) {\n        const formatted = this.formatValue(value);\n        const regex = (formatted ?? '')\n            .replace(/[-[\\]{}()*+?.,\\\\^$|#\\s]/g, '\\\\$&')\n            .replace(/\\\\\\*/g, '.*');\n        return this.pattern(new RegExp(`^${regex}$`));\n    }\n\n    group(value: string | string[]) {\n        const formatted = this.formatValue(value);\n        return this.matches([formatted, '*']);\n    }\n\n    private formatValue(value: string | string[]) {\n        return Array.isArray(value)\n            ? value.filter(item => !!item).join('.')\n            : value;\n    }\n\n}\n","import {LocalizeDictionaryDataValues} from './dictionary.data';\nimport {LocalizeDictionaryContext} from './dictionary.context';\nimport {Localize} from '../localize.service';\n\ndeclare let ngDevMode;\n\nexport class LocalizeDictionary {\n\n    private readonly _data: Record<string, string>;\n\n    constructor(private _id: string,\n                private _locale: string,\n                private _supported: string[],\n                private _dataValues: LocalizeDictionaryDataValues,\n                private _localize: Localize) {\n        this._data = this.formatData(this._dataValues);\n    }\n\n    get id() {\n        return this._id ?? null;\n    }\n\n    get locale() {\n        return this._locale ?? null;\n    }\n\n    get supported() {\n        return this._supported ?? [];\n    }\n\n    get(token: string | string[]) {\n        const key = Array.isArray(token) ? token.join('.') : token;\n        return this._data?.[key] ?? null;\n    }\n\n    has(token: string | string[]) {\n        return !!this.get(token);\n    }\n\n    all() {\n        return this.some(context => context);\n    }\n\n    some(callback: (context: LocalizeDictionaryContext) => LocalizeDictionaryContext) {\n        const defaultContext = new LocalizeDictionaryContext();\n        const context = !!callback ? callback(defaultContext) : defaultContext;\n\n        return Object.keys(this._data ?? {})\n            .filter(key => context.regexp.test(key))\n            .reduce((previous, current) => ([\n                ...previous,\n                {token: current, value: this.get(current)}\n            ]), <{ token: string, value: string }[]>[]);\n    }\n\n    async compare(to: string | string[]) {\n        if ((typeof ngDevMode === 'undefined' || ngDevMode)) {\n            const dictionaryIds = (Array.isArray(to) ? to : [to]);\n            const dictionaries: LocalizeDictionary[] = [];\n            for (const dictionaryId of dictionaryIds) {\n                const dictionary = await this._localize.load(dictionaryId);\n                dictionaries.push(dictionary);\n            }\n\n            const warnings = [];\n\n            const items = this.all();\n            for (const item of items) {\n                for (const dictionary of dictionaries) {\n                    if (!dictionary.has(item?.token)) {\n                        warnings.push({dictionary: dictionary?.id, value: item?.token});\n                    }\n                }\n            }\n\n            for (const dictionary of dictionaries) {\n                const items = dictionary.all();\n                for (const item of items) {\n                    if (!this.has(item?.token)) {\n                        warnings.push({dictionary: this.id, value: item?.token});\n                    }\n                }\n            }\n\n            const compareDictionaryIds = dictionaries.map(dictionary => dictionary?.id).join(', ');\n            for (const warning of warnings) {\n                console?.warn?.(`Dictionary \"${warning.dictionary}\" is missing token \"${warning.value}\"`);\n            }\n            console?.warn?.(`Total of ${warnings.length} warning(s) found while comparing \"${this.id}\" -> [${compareDictionaryIds}].`);\n        }\n    }\n\n    count() {\n        return Object.keys(this._data ?? {}).length;\n    }\n\n    private formatData(data: LocalizeDictionaryDataValues, scope: string | null = null) {\n        return Object.keys(data ?? {}).reduce((previous, current) => {\n            const value = data?.[current];\n            if (typeof value === 'object' && value !== null) {\n                const reformatted = this.formatData(value, current);\n                return {...previous, ...reformatted};\n            }\n\n            const token = [scope, current].filter(item => !!item).join('.');\n            if (previous[token] && (typeof ngDevMode === 'undefined' || ngDevMode)) {\n                console?.warn?.(`Duplicate key \"${token}\" was found, please verify your translation files.`);\n            }\n\n            return {...previous, [token]: value};\n        }, <Record<string, string>>{});\n    }\n\n}\n","import {LocalizeParams} from '../interfaces/options.interfaces';\nimport {Localize} from '../localize.service';\n\nexport abstract class LocalizeTransform {\n\n    abstract execute(value: string, data: LocalizeParams['data'], localize: Localize): string;\n\n    protected getMatches(value: string, substitutions: [string, string]) {\n        // Validate our value exists, else return zero matches.\n        if (value === undefined || value === null) {\n            return [];\n        }\n\n        // Get the matching substitutions.\n        const {start, end} = this.getSubstitutions(substitutions);\n\n        // Compose a regex that will find the matches.\n        const regex = new RegExp(`${start}([^${end}]+)${end}`, 'g');\n\n        // Execute the regex to find matches.\n        let match = regex.exec(value);\n        const matches: { match: string, token: string }[] = [];\n\n        while (match !== null) {\n            matches.push({match: match[0], token: match[1]});\n            match = regex.exec(value);\n        }\n\n        // Return the processed value.\n        return matches.filter(item => !!item);\n    }\n\n    protected getSubstitutions(value: [string, string]) {\n        // Escape both substitutions so that they can be used.\n        const escape = /[.*+?^${}()|[\\]\\\\]/g;\n        const start = value[0].replace(escape, '\\\\$&');\n        const end = value[1].replace(escape, '\\\\$&');\n\n        // Return the substitutions.\n        return {start, end};\n    }\n\n}\n","import {LOCALIZE_CONFIG, LOCALIZE_MISSING_HANDLER, LOCALIZE_TRANSFORM} from './localize.tokens';\nimport {LocalizeConfig, LocalizeConfigLanguage} from './interfaces/config.interfaces';\nimport {LocalizeDictionaryData} from './dictionary/dictionary.data';\nimport {LocalizeTransform} from './transforms/abstract.transform';\nimport {LocalizeMissingHandler} from './handlers/missing.handler';\nimport {LocalizeDictionary} from './dictionary/dictionary.class';\nimport {LocalizeParams} from './interfaces/options.interfaces';\nimport {inject, Injectable, DOCUMENT} from '@angular/core';\nimport {Languages, WINDOW} from '@bravobit/bb-foundation';\nimport {Storage} from '@bravobit/bb-foundation/storage';\n\nimport {BehaviorSubject} from 'rxjs';\n\n@Injectable({\n    providedIn: 'root'\n})\nexport class Localize {\n\n    // Dependencies.\n    private readonly _storage: Storage = inject(Storage);\n    private readonly _languages: Languages = inject(Languages);\n    private readonly _window?: Window = inject(WINDOW, {optional: true});\n    private readonly _document?: Document = inject(DOCUMENT, {optional: true});\n    private readonly _config?: LocalizeConfig = inject(LOCALIZE_CONFIG, {optional: true});\n    private readonly _transforms?: LocalizeTransform[] = inject(LOCALIZE_TRANSFORM, {optional: true});\n    private readonly _missingHandler?: LocalizeMissingHandler = inject(LOCALIZE_MISSING_HANDLER, {optional: true});\n\n    // Readonly data.\n    private readonly _storageToken: string = this._config?.storageToken ?? 'bb-language-dictionary-id';\n    private readonly _availableLanguages: LocalizeConfigLanguage[] = this?._config?.languages ?? [];\n    private readonly _bestMatchingLanguage: LocalizeConfigLanguage = this.retrieveBestMatchingLanguage();\n\n    private readonly _loadedDictionaries: Map<string, LocalizeDictionary> = new Map<string, LocalizeDictionary>();\n\n    // Current dictionary.\n    private _current$ = new BehaviorSubject<LocalizeDictionary | null>(null);\n\n    // State changes.\n    dictionaryChanges$ = this._current$.asObservable();\n\n    constructor() {\n        this.renderDocumentLanguage();\n    }\n\n    get languages() {\n        return this._availableLanguages ?? [];\n    }\n\n    get current() {\n        return this._current$.getValue();\n    }\n\n    async load(id: string) {\n        if (id === null || id === undefined) {\n            throw new Error(`Cannot load language with id: \"${id}\".`);\n        }\n\n        if (this._loadedDictionaries.has(id)) {\n            return this._loadedDictionaries.get(id);\n        }\n\n        const language = this.languages?.find(language => language?.id === id);\n        if (!language || !language?.data) {\n            console?.warn?.(`No language was found with id: \"${id}\"; Defaulting to first available language.`);\n            const languageId = this.languages?.[0]?.id ?? null;\n            return this.load(languageId);\n        }\n\n        const dictionaryDataValues = await language?.data?.();\n        const dictionary = this.createDictionary(dictionaryDataValues, language);\n        this._loadedDictionaries.set(id, dictionary);\n        return dictionary;\n    }\n\n    async loadAllLanguages() {\n        for (const language of this.languages) {\n            await this.load(language?.id);\n        }\n    }\n\n    async switch(id: string, options?: { cache?: boolean, reload?: boolean }) {\n        const dictionary = await this.load(id);\n        this._current$.next(dictionary);\n\n        const cache = options?.cache ?? true;\n        if (cache) {\n            this._storage.cookie.set<string>(this._storageToken, dictionary?.id, {});\n        }\n\n        const reload = options?.reload ?? false;\n        if (reload) {\n            this._window?.location?.reload?.();\n        }\n\n        return dictionary;\n    }\n\n    select(id: string) {\n        if (!this._loadedDictionaries.has(id)) {\n            throw new Error(`Dictionary with id: \"${id}\" not loaded; Load dictionary first before using .select(:id).`);\n        }\n        return this._loadedDictionaries.get(id);\n    }\n\n    async initialize() {\n        await this.switch(this._bestMatchingLanguage?.id, {reload: false, cache: false});\n        return this.compareDictionaries();\n    }\n\n    clear() {\n        this._storage.cookie.remove(this._storageToken);\n    }\n\n    transform(value: string, data: LocalizeParams['data'] = {}) {\n        return (this._transforms ?? []).reduce((previous, current) => {\n            return current.execute(previous, data, this);\n        }, value);\n    }\n\n    translate(tokenOrParams: string | LocalizeParams) {\n        // 1. Convert to the params.\n        const params = this.convertToParams(tokenOrParams);\n\n        // 2. Try to find the translation in the dictionary.\n        const dictionary = this.getDictionary(params?.dictionary);\n        const searchResult = !!dictionary ? dictionary.get(params?.token) : null;\n\n        // 3. Verify the translation was found.\n        if (!searchResult) {\n            if (!this._missingHandler) {\n                return null;\n            }\n            return this._missingHandler.handle(params);\n        }\n\n        return this.transform(searchResult, params?.data);\n    }\n\n    private retrieveBestMatchingLanguage() {\n        return this.getLanguageFromStorage()\n            ?? this.getBestBrowserMatchLanguage()\n            ?? this._availableLanguages?.[0];\n    }\n\n    private getLanguageFromStorage() {\n        // Get id from the storage.\n        const id = this._storage.cookie.get<string>(this._storageToken);\n\n        // Return the language based on the storage id.\n        return this._availableLanguages.find(item => item?.id === id);\n    }\n\n    private getBestBrowserMatchLanguage() {\n        // Loop through all browser languages and return the\n        // best matching language.\n        return this._languages.all.map(({code, region}) => {\n            const languageCode = [code, region].filter(data => !!data).join('-');\n\n            return this._availableLanguages.find(item => item?.supported?.includes(languageCode));\n        }).filter(item => !!item).find((_, index) => index === 0);\n    }\n\n    private createDictionary(data: LocalizeDictionaryData, language: LocalizeConfigLanguage) {\n        return new LocalizeDictionary(language?.id, language?.locale, language?.supported, data?.data, this);\n    }\n\n    private getDictionary(id: string | null) {\n        if (id === null || id === undefined) {\n            return this.current;\n        }\n        return this.select(id);\n    }\n\n    private renderDocumentLanguage() {\n        const element = this._document?.documentElement;\n        if (!element) {\n            return;\n        }\n\n        element.lang = this._bestMatchingLanguage?.supported?.[0] ?? this._bestMatchingLanguage?.locale;\n    }\n\n    private async compareDictionaries() {\n        const compareDictionaries = this._config.compareDictionaries ?? false;\n        if (!compareDictionaries || !this.current) {\n            return;\n        }\n\n        const languageIds = (this.languages ?? [])\n            ?.filter(language => language?.id !== this.current?.id)\n            ?.map(language => language?.id);\n\n        return await this.current.compare(languageIds);\n    }\n\n    private convertToParams = (tokenOrParams: string | LocalizeParams) => {\n        if (typeof tokenOrParams !== 'string') {\n            // Destruct the params from the object.\n            const {token, optional, dictionary, data} = tokenOrParams;\n\n            // Make sure all parameters are valid\n            // by type safe adding them.\n            return {token: token, optional: optional ?? false, dictionary: dictionary ?? null, data: data ?? {}};\n        }\n\n        // If the parameter is a string fill in the blanks.\n        return {token: tokenOrParams, optional: false, dictionary: null, data: {}};\n    };\n\n}\n","import {distinctUntilChanged, map, startWith} from 'rxjs/operators';\nimport {LocalizeFunction} from './interfaces/functions.interfaces';\nimport {LocalizeMissingHandler} from './handlers/missing.handler';\nimport {LocalizeTransform} from './transforms/abstract.transform';\nimport {inject, InjectionToken, LOCALE_ID} from '@angular/core';\nimport {LocalizeConfig} from './interfaces/config.interfaces';\nimport {Localize} from './localize.service';\nimport {Observable, of} from 'rxjs';\n\nexport const LOCALIZE_FUNCTION: InjectionToken<LocalizeFunction[]> = new InjectionToken('localize function');\nexport const LOCALIZE_CONFIG: InjectionToken<LocalizeConfig> = new InjectionToken('localize config');\nexport const LOCALIZE_TRANSFORM: InjectionToken<LocalizeTransform[]> = new InjectionToken('localize transform');\nexport const LOCALIZE_MISSING_HANDLER: InjectionToken<LocalizeMissingHandler> = new InjectionToken('localize missing handler');\n\nexport const LOCALIZE_ID = new InjectionToken<Observable<string>>(\n    'An abstraction over locale changes',\n    {\n        factory: () => {\n            const localize = inject(Localize, {optional: true});\n            if (!localize) {\n                return of(inject(LOCALE_ID));\n            }\n\n            return localize.dictionaryChanges$.pipe(\n                map(dictionary => dictionary?.locale ?? null),\n                distinctUntilChanged(),\n                startWith(localize?.current?.locale ?? null)\n            );\n        }\n    }\n);\n","import {LocalizeParams} from '../interfaces/options.interfaces';\nimport {LocalizeConfig} from '../interfaces/config.interfaces';\nimport {LocalizeTransform} from './abstract.transform';\nimport {LOCALIZE_CONFIG} from '../localize.tokens';\nimport {Localize} from '../localize.service';\nimport {inject} from '@angular/core';\n\nexport class LocalizePluralTransform extends LocalizeTransform {\n\n    protected readonly config?: LocalizeConfig = inject(LOCALIZE_CONFIG, {optional: true});\n    protected readonly substitutions = this.config?.substitutions?.plural ?? ['@plural(', ')'];\n    protected readonly defaultAmount = 'default';\n    protected readonly multiItemRegex = new RegExp(`(?<value>=(-?[0-9]+|${this.defaultAmount}): *[^,]+)`, 'g');\n    protected readonly singleItemRegex = new RegExp(`(=(?<amount>-?[0-9]+|${this.defaultAmount}): *(?<sentence>.+))`);\n\n    override execute(value: string, data: LocalizeParams['data'], _: Localize) {\n        const matches = this.getMatches(value, this.substitutions);\n\n        return matches.reduce((previous, current) => {\n            const [variable, content] = current.token?.split('|');\n            const amount = this.extractAmount(variable, data);\n            const pluralToken = this.parsePluralToken(content, amount);\n            return previous.replace(current?.match, pluralToken ?? current?.match);\n        }, value);\n    }\n\n    private extractAmount(variable: string, data: LocalizeParams['data']) {\n        const trimmedVariable = variable?.trim();\n        const value = data?.[trimmedVariable] ?? null;\n        return typeof value === 'string' || typeof value === 'number'\n            ? value\n            : null;\n    }\n\n    private parsePluralToken(value: string, amount: string | number) {\n        const plural = this.getPluralObject(value);\n        return plural?.[amount] ?? plural?.[this.defaultAmount] ?? null;\n    }\n\n    private splitMatches(value: string) {\n        let match = this.multiItemRegex.exec(value);\n        const matches: string[] = [];\n\n        while (match !== null) {\n            matches.push(match[0]);\n            match = this.multiItemRegex.exec(value);\n        }\n\n        return matches;\n    }\n\n    private getPluralObject(value: string) {\n        const matches = this.splitMatches(value);\n\n        return matches.reduce((previous, current) => {\n            const result = current.match(this.singleItemRegex);\n            const amount = result.groups['amount'].trim();\n            const sentence = result.groups['sentence'].trim();\n            return {...previous, [amount]: sentence};\n        }, <Record<string, string>>{});\n    }\n\n}\n","import {LocalizeFunction, LocalizeFunctionMap} from '../interfaces/functions.interfaces';\nimport {LOCALIZE_CONFIG, LOCALIZE_FUNCTION} from '../localize.tokens';\nimport {LocalizeParams} from '../interfaces/options.interfaces';\nimport {LocalizeConfig} from '../interfaces/config.interfaces';\nimport {LocalizeTransform} from './abstract.transform';\nimport {Localize} from '../localize.service';\nimport {inject} from '@angular/core';\n\nexport class LocalizeInterpolateTransform extends LocalizeTransform {\n\n    // Dependencies.\n    protected readonly config?: LocalizeConfig = inject(LOCALIZE_CONFIG, {optional: true});\n    protected readonly functions?: LocalizeFunction[] = inject(LOCALIZE_FUNCTION, {optional: true});\n    protected readonly substitutions = this.config?.substitutions?.references ?? ['{{', '}}'];\n    protected readonly functionsMap: LocalizeFunctionMap = (this.functions ?? []).reduce((previous, current) => {\n        previous[current?.keyword()] = current;\n        return previous;\n    }, {});\n\n    override execute(value: string, data: LocalizeParams['data'], localize: Localize) {\n        const matches = this.getMatches(value, this.substitutions);\n\n        // Replace all matches with the translated value.\n        return matches.reduce((previous, current) => {\n            // Try to parse the token.\n            const interpolatedToken = this.parseInterpolationToken(current?.token, data, localize);\n\n            // Replace the match with the translated token.\n            return previous.replace(current?.match, interpolatedToken);\n        }, value);\n    }\n\n    protected parseInterpolationToken(value: string, data: LocalizeParams['data'], localize: Localize) {\n        // Get the token and the methods by splitting\n        // on the pipe symbol.\n        const [token, ...methods] = (value ?? '').split('|').map(item => item.trim());\n\n        // Get the value for the token from\n        // the interpolation data.\n        const interpolationValue = data?.[token] ?? 'null';\n\n        // Loop through all the middleware methods and try to\n        // conform the string to the given parameters.\n        return methods.reduce((string, middlewareName) => {\n            // Try to retrieve the middleware from the collection.\n            const middleware = this.functionsMap?.[middlewareName];\n\n            // If the middleware is missing return an error\n            // so that the user knows it was not found.\n            if (!middleware) {\n                return string;\n            }\n\n            // Execute the middleware function with the string.\n            return middleware.transform(string, localize?.current?.locale);\n        }, `${interpolationValue}`);\n    }\n\n}\n","import {LocalizeParams} from '../interfaces/options.interfaces';\nimport {LocalizeConfig} from '../interfaces/config.interfaces';\nimport {LocalizeTransform} from './abstract.transform';\nimport {LOCALIZE_CONFIG} from '../localize.tokens';\nimport {Localize} from '../localize.service';\nimport {inject} from '@angular/core';\n\nexport class LocalizeReferenceTransform extends LocalizeTransform {\n\n    // Dependencies.\n    protected readonly config?: LocalizeConfig = inject(LOCALIZE_CONFIG, {optional: true});\n    protected readonly substitutions = this.config?.substitutions?.references ?? ['#(', ')'];\n\n    override execute(value: string, _: LocalizeParams['data'], localize: Localize) {\n        const matches = this.getMatches(value, this.substitutions);\n\n        // Replace all matches with the translated value.\n        return matches.reduce((previous, current) => {\n            // Try to translate the token.\n            const translatedToken = localize.translate(current?.token);\n\n            // Replace the match with the translated token.\n            return previous.replace(current?.match, translatedToken);\n        }, value);\n    }\n\n}\n","import {Directive, Input, TemplateRef} from '@angular/core';\n\n@Directive({\n    selector: 'ng-template[bbLocalizeTemplate]'\n})\nexport class BbLocalizeTemplate {\n\n    // Inputs.\n    @Input('bbLocalizeTemplate') name: string | null = null;\n\n    constructor(public templateRef: TemplateRef<any>) {\n    }\n\n}\n","import {AfterViewInit, ChangeDetectionStrategy, ChangeDetectorRef, Component, ContentChildren, Input, OnDestroy, QueryList, TemplateRef, ViewEncapsulation} from '@angular/core';\nimport {BbLocalizeTemplate} from '../localize-template.directive';\nimport {BbTemplate} from '@bravobit/bb-foundation/utils';\nimport {startWith} from 'rxjs/operators';\nimport {Subscription} from 'rxjs';\n\n@Component({\n    selector: '[bb-localize-string]',\n    templateUrl: './localize-string.component.html',\n    styleUrls: ['./localize-string.component.scss'],\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    host: {'class': 'bb-localize-string'},\n    encapsulation: ViewEncapsulation.None,\n    imports: [BbTemplate]\n})\nexport class BbLocalizeString implements AfterViewInit, OnDestroy {\n\n    // Content children.\n    @ContentChildren(BbLocalizeTemplate) items?: QueryList<BbLocalizeTemplate>;\n\n    // Inputs.\n    @Input() substitutions: [string, string] = ['@element(', ')'];\n\n    // Data.\n    components: (string | TemplateRef<any>)[] = [];\n\n    // Subscriptions.\n    private _subscription = new Subscription();\n\n    // State.\n    private _value: string | null = null;\n\n    @Input('bb-localize-string')\n    set value(value: string | null) {\n        this._value = value;\n        this.revalidate();\n    }\n\n    get value() {\n        return this._value;\n    }\n\n    constructor(private _changeDetection: ChangeDetectorRef) {\n    }\n\n    ngAfterViewInit() {\n        this.observeItemChanges();\n    }\n\n    ngOnDestroy() {\n        this._subscription?.unsubscribe();\n    }\n\n    private observeItemChanges() {\n        const subscription = this.items.changes.pipe(\n            startWith(0)\n        ).subscribe(() => this.revalidate());\n\n        this._subscription.add(subscription);\n    }\n\n    private revalidate() {\n        const items = this.items?.toArray() ?? [];\n        if (items.length <= 0) {\n            return;\n        }\n\n        this.setComponents(items);\n    }\n\n    private setComponents(items: BbLocalizeTemplate[]) {\n        const [start, end] = this.substitutions;\n\n        const templates = items.reduce((previous, current) => {\n            const template = current?.templateRef ?? null;\n            const name = current?.name ?? null;\n            if (!template || !name) {\n                return previous;\n            }\n\n            return {...previous, [`${start}${name}${end}`]: template};\n        }, {});\n\n        this.components = this.getStringComponents(this._value)\n            .map(component => templates?.[component] ?? component ?? null)\n            .filter(item => !!item);\n\n        this._changeDetection.detectChanges();\n    }\n\n    private getStringComponents(value: string) {\n        const [start, end] = this.getSubstitutions();\n        const regex = new RegExp(`(${start}[a-zA-Z]+${end})`, 'g');\n        return value.split(regex);\n    }\n\n    private getSubstitutions() {\n        const [start, end] = this.substitutions;\n        const escape = /[.*+?^${}()|[\\]\\\\]/g;\n\n        return [\n            start.replace(escape, '\\\\$&'),\n            end.replace(escape, '\\\\$&')\n        ];\n    }\n\n}\n","@for (component of components; track component) {\n    <ng-template [bbTemplate]=\"component\">{{ component }}</ng-template>\n}\n","import {LocalizeOptions, LocalizeParams} from './interfaces/options.interfaces';\nimport {Optional, Pipe, PipeTransform} from '@angular/core';\nimport {Localize} from './localize.service';\n\n@Pipe({\n    name: 'bbLocalize'\n})\nexport class BbLocalize implements PipeTransform {\n\n    constructor(@Optional() private _localize?: Localize) {\n    }\n\n    transform(tokenOrParams: string | LocalizeParams, args?: LocalizeOptions) {\n        // Combine the params with the options to form the localize params.\n        const params = this.combineParamsWithOptions(tokenOrParams, args);\n\n        // Validate that the localize service exists in the pipe.\n        if (!this._localize) {\n            return params?.token ?? null;\n        }\n\n        // Try to localize the value.\n        return this._localize.translate(params);\n    }\n\n    private combineParamsWithOptions(tokenOrParams: string | LocalizeParams, args?: LocalizeOptions) {\n        // Gather the extras.\n        const extras = args ?? {};\n\n        // Loop through all the keys to find the set options.\n        const options = Object.keys(extras).reduce((previous, current) => {\n            if (typeof extras?.[current] === 'undefined') {\n                return previous;\n            }\n\n            return {...previous, [current]: extras?.[current]};\n        }, {});\n\n        // Convert the string token to a params object.\n        const params = typeof tokenOrParams === 'string'\n            ? {token: tokenOrParams, optional: false, data: {}, dictionary: null}\n            : tokenOrParams;\n\n        // Return the combined params and options.\n        return {...params, ...options};\n    }\n\n}\n","import {EnvironmentProviders, LOCALE_ID, makeEnvironmentProviders, inject, provideAppInitializer} from '@angular/core';\nimport {LOCALIZE_CONFIG, LOCALIZE_FUNCTION, LOCALIZE_MISSING_HANDLER, LOCALIZE_TRANSFORM} from './localize.tokens';\nimport {LocalizeInterpolateTransform} from './transforms/interpolate.transform';\nimport {LocalizeReferenceTransform} from './transforms/reference.transform';\nimport {LocalizeLowercaseFunction} from './functions/lowercase.function';\nimport {LocalizeUppercaseFunction} from './functions/uppercase.function';\nimport {LocalizePluralTransform} from './transforms/plural.transform';\nimport {LocalizeMissingHandler} from './handlers/missing.handler';\nimport {LocalizeDateFunction} from './functions/date.function';\nimport {LocalizeConfig} from './interfaces/config.interfaces';\nimport {Localize} from './localize.service';\n\nexport function provideLocalizeConfig(config: LocalizeConfig): EnvironmentProviders {\n    if (config?.languages?.length <= 0) {\n        throw new Error('One or more languages should be supplied.');\n    }\n\n    if (config?.compareDictionaries && config?.mode === 'manual') {\n        console?.warn?.('You cannot enable \"compareDictionaries\" when having mode set to \"manual\"; This setting will be ignored.');\n    }\n\n    const mode = config?.mode ?? 'automatic';\n    const automaticProviders = mode === 'automatic'\n        ? [\n            provideAppInitializer(() => inject(Localize).initialize()),\n            {provide: LOCALE_ID, deps: [Localize], useFactory: getLocale}\n        ]\n        : [];\n\n    return makeEnvironmentProviders([\n        {provide: LOCALIZE_CONFIG, useValue: config},\n        ...automaticProviders,\n        {provide: LOCALIZE_FUNCTION, useClass: LocalizeLowercaseFunction, multi: true},\n        {provide: LOCALIZE_FUNCTION, useClass: LocalizeUppercaseFunction, multi: true},\n        {provide: LOCALIZE_FUNCTION, useClass: LocalizeDateFunction, multi: true},\n        {provide: LOCALIZE_TRANSFORM, useClass: LocalizePluralTransform, deps: [LOCALIZE_CONFIG], multi: true},\n        {provide: LOCALIZE_TRANSFORM, useClass: LocalizeReferenceTransform, deps: [LOCALIZE_CONFIG], multi: true},\n        {provide: LOCALIZE_TRANSFORM, useClass: LocalizeInterpolateTransform, deps: [LOCALIZE_CONFIG, LOCALIZE_FUNCTION], multi: true},\n        {provide: LOCALIZE_MISSING_HANDLER, useClass: LocalizeMissingHandler}\n    ]);\n}\n\nexport function getLocale(localize: Localize) {\n    return localize?.current?.locale ?? null;\n}\n","import {BbLocalizeString} from './views/localize-string/localize-string.component';\nimport {BbLocalizeTemplate} from './views/localize-template.directive';\nimport {LocalizeConfig} from './interfaces/config.interfaces';\nimport {ModuleWithProviders, NgModule} from '@angular/core';\nimport {provideLocalizeConfig} from './localize.config';\nimport {BbLocalize} from './localize.pipe';\n\n@NgModule({\n    imports: [\n        BbLocalize,\n        BbLocalizeString,\n        BbLocalizeTemplate\n    ],\n    exports: [\n        BbLocalize,\n        BbLocalizeString,\n        BbLocalizeTemplate\n    ]\n})\nexport class LocalizeModule {\n\n    static forRoot(config: LocalizeConfig): ModuleWithProviders<LocalizeModule> {\n        return {\n            ngModule: LocalizeModule,\n            providers: [\n                provideLocalizeConfig(config)\n            ]\n        };\n    }\n\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":["i1.Localize"],"mappings":"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"}