UNPKG

ngx-i18n-input

Version:

Angular library for internationalized input fields

1 lines 49.2 kB
{"version":3,"file":"ngx-i18n-input.mjs","sources":["../../src/lib/country-iso-code.ts","../../src/lib/types.ts","../../src/lib/ngx-i18n-input-single-lang-input/ngx-i18n-input-single-lang-input.component.ts","../../src/lib/ngx-i18n-input-single-lang-input/ngx-i18n-input-single-lang-input.component.html","../../src/lib/ngx-i18n-input.component.ts","../../src/lib/ngx-i18n-input.component.html","../../src/lib/ngx-i18n-input.module.ts","../../src/public-api.ts","../../src/ngx-i18n-input.ts"],"sourcesContent":["export const COUNTRY_ISO_CODES = [\n 'AC',\n 'AD',\n 'AE',\n 'AF',\n 'AG',\n 'AI',\n 'AL',\n 'AM',\n 'AO',\n 'AR',\n 'AS',\n 'AT',\n 'AU',\n 'AW',\n 'AX',\n 'AZ',\n 'BA',\n 'BB',\n 'BD',\n 'BE',\n 'BF',\n 'BG',\n 'BH',\n 'BI',\n 'BJ',\n 'BL',\n 'BM',\n 'BN',\n 'BO',\n 'BQ',\n 'BR',\n 'BS',\n 'BT',\n 'BW',\n 'BY',\n 'BZ',\n 'CA',\n 'CC',\n 'CD',\n 'CF',\n 'CG',\n 'CH',\n 'CI',\n 'CK',\n 'CL',\n 'CM',\n 'CN',\n 'CO',\n 'CR',\n 'CU',\n 'CV',\n 'CW',\n 'CX',\n 'CY',\n 'CZ',\n 'DE',\n 'DJ',\n 'DK',\n 'DM',\n 'DO',\n 'DZ',\n 'EC',\n 'EE',\n 'EG',\n 'EH',\n 'ER',\n 'ES',\n 'ET',\n 'FI',\n 'FJ',\n 'FK',\n 'FM',\n 'FO',\n 'FR',\n 'GA',\n 'GB',\n 'GD',\n 'GE',\n 'GF',\n 'GG',\n 'GH',\n 'GI',\n 'GL',\n 'GM',\n 'GN',\n 'GP',\n 'GQ',\n 'GR',\n 'GT',\n 'GU',\n 'GW',\n 'GY',\n 'HK',\n 'HN',\n 'HR',\n 'HT',\n 'HU',\n 'ID',\n 'IE',\n 'IL',\n 'IM',\n 'IN',\n 'IO',\n 'IQ',\n 'IR',\n 'IS',\n 'IT',\n 'JE',\n 'JM',\n 'JO',\n 'JP',\n 'KE',\n 'KG',\n 'KH',\n 'KI',\n 'KM',\n 'KN',\n 'KP',\n 'KR',\n 'KW',\n 'KY',\n 'KZ',\n 'LA',\n 'LB',\n 'LC',\n 'LI',\n 'LK',\n 'LR',\n 'LS',\n 'LT',\n 'LU',\n 'LV',\n 'LY',\n 'MA',\n 'MC',\n 'MD',\n 'ME',\n 'MF',\n 'MG',\n 'MH',\n 'MK',\n 'ML',\n 'MM',\n 'MN',\n 'MO',\n 'MP',\n 'MQ',\n 'MR',\n 'MS',\n 'MT',\n 'MU',\n 'MV',\n 'MW',\n 'MX',\n 'MY',\n 'MZ',\n 'NA',\n 'NC',\n 'NE',\n 'NF',\n 'NG',\n 'NI',\n 'NL',\n 'NO',\n 'NP',\n 'NR',\n 'NU',\n 'NZ',\n 'OM',\n 'PA',\n 'PE',\n 'PF',\n 'PG',\n 'PH',\n 'PK',\n 'PL',\n 'PM',\n 'PR',\n 'PS',\n 'PT',\n 'PW',\n 'PY',\n 'QA',\n 'RE',\n 'RO',\n 'RS',\n 'RU',\n 'RW',\n 'SA',\n 'SB',\n 'SC',\n 'SD',\n 'SE',\n 'SG',\n 'SH',\n 'SI',\n 'SJ',\n 'SK',\n 'SL',\n 'SM',\n 'SN',\n 'SO',\n 'SR',\n 'SS',\n 'ST',\n 'SV',\n 'SX',\n 'SY',\n 'SZ',\n 'TA',\n 'TC',\n 'TD',\n 'TG',\n 'TH',\n 'TJ',\n 'TK',\n 'TL',\n 'TM',\n 'TN',\n 'TO',\n 'TR',\n 'TT',\n 'TV',\n 'TW',\n 'TZ',\n 'UA',\n 'UG',\n 'US',\n 'UY',\n 'UZ',\n 'VA',\n 'VC',\n 'VE',\n 'VG',\n 'VI',\n 'VN',\n 'VU',\n 'WF',\n 'WS',\n 'XK',\n 'YE',\n 'YT',\n 'ZA',\n 'ZM',\n 'ZW'\n] as const;\n\n/**\n * TODO: how localize country names?\n */\nexport const LANGUAGE_DETAILS: Record<string, { name: string }> = {\n en: { name: \"English\" },\n zh: { name: \"Chinese\" },\n es: { name: \"Spanish\" },\n ar: { name: \"Arabic\" },\n hi: { name: \"Hindi\" },\n bn: { name: \"Bengali\" },\n pt: { name: \"Portuguese\" },\n ru: { name: \"Russian\" },\n ja: { name: \"Japanese\" },\n de: { name: \"German\" },\n fr: { name: \"French\" },\n it: { name: \"Italian\" },\n tr: { name: \"Turkish\" },\n ko: { name: \"Korean\" },\n vi: { name: \"Vietnamese\" },\n ur: { name: \"Urdu\" },\n fa: { name: \"Persian\" },\n pl: { name: \"Polish\" },\n nl: { name: \"Dutch\" },\n th: { name: \"Thai\" },\n};\n\nexport type CountryIsoCode = typeof COUNTRY_ISO_CODES[number];","import { InjectionToken, Provider, TemplateRef, Type } from \"@angular/core\";\nimport { LANGUAGE_DETAILS } from \"./country-iso-code\";\nimport { AbstractControl, FormControl, ValidatorFn } from \"@angular/forms\";\n\nexport type Lang = string;\nexport type Langs = Lang[];\n\n\nexport const NgxI18nInputLayouts = [\"vertical\", \"tabs\"] as const;\nexport type NgxI18nInputLayout = typeof NgxI18nInputLayouts[number];\n\nexport interface NgxI18nInputConfig {\n availableLangs: Langs;\n languageDetails: Record<Lang, { name: string }>;\n stringifyLang: (lang: string) => string;\n formatLabel: (lang: Lang, label: string | Record<Lang, string> | null) => string,\n layout: NgxI18nInputLayout,\n labelTemplate: TemplateRef<unknown> | null,\n inputTemplate: TemplateRef<unknown> | null,\n hideLabels: boolean,\n autofocus: boolean | string,\n required: boolean,\n label: string | Record<Lang, string> | null,\n validators: ValidatorFn[],\n defaultInputComponent: Type<any> | null | undefined,\n formatOutput: (formValue: Record<Lang, any | null>) => Record<Lang, any | null>\n}\n\nexport const NGX_I18N_INPUT_DEFAULT_CONFIGS: NgxI18nInputConfig = {\n availableLangs: [\"en\"],\n languageDetails: LANGUAGE_DETAILS,\n stringifyLang: function(lang: Lang): string {\n return (this.languageDetails || LANGUAGE_DETAILS)[lang]?.name || lang;\n },\n formatLabel: function(lang: Lang, label: string | Record<Lang, string> | null): string {\n const labelStr: string = typeof label === \"string\" ? label : (label || {})[lang];\n\n if (!labelStr) return this.stringifyLang(lang);\n\n return labelStr + \" (\" + this.stringifyLang(lang) + \")\";\n },\n layout: NgxI18nInputLayouts[0],\n labelTemplate: null,\n inputTemplate: null,\n hideLabels: false,\n autofocus: false,\n required: false,\n label: null,\n validators: [],\n defaultInputComponent: null,\n formatOutput: ngxI18nDefaultFormatOutput\n};\n\n// TODO partial ??\nexport const NGX_I18N_INPUT_CONFIG = new InjectionToken<NgxI18nInputConfig>('NGX_I18N_INPUT_CONFIG');\n\nexport function mergeNgxI18nConfigs(configs: Partial<NgxI18nInputConfig> | null | undefined): NgxI18nInputConfig {\n if (!configs) return NGX_I18N_INPUT_DEFAULT_CONFIGS;\n\n return {\n ...NGX_I18N_INPUT_DEFAULT_CONFIGS,\n ...configs\n }\n}\n\nexport function provideNgxI18nConfigs(configs: Partial<NgxI18nInputConfig>): Provider {\n return {\n provide: NGX_I18N_INPUT_CONFIG,\n useValue: mergeNgxI18nConfigs(configs)\n }\n}\n\nexport function ngxI18nDefaultFormatOutput<T>(formValue: Record<Lang, T | null>): Record<Lang, T | null> {\n return formValue;\n}\n\nexport function generateUid(): string {\n return Math.random().toString(36).substring(2);\n}\n\nexport interface NgxI18nInputContext {\n /**\n * Unique identifier for the input.\n * In particolar, you can use this value for the id of the input element.\n * @example\n * ```html\n * <ng-template #inputTemp let-context>\n * <input [id]=\"context.id\">\n * </ng-template>\n * \n * <ngx-i18n-input [inputTemplate]=\"inputTemp\"></ngx-i18n-input>\n * ```\n */\n id: string;\n configs: NgxI18nInputConfig;\n control: FormControl<any>;\n lang: Lang;\n emitCustomEvent: (name: string, value: any) => void;\n // writeValue: (value: any) => void\n}\n\nexport const NGX_I18N_INPUT_CONTEXT = new InjectionToken<NgxI18nInputContext>('NGX_I18N_INPUT_CONTEXT');\n\nexport function isNgxI18nInputContext(v: unknown): v is NgxI18nInputContext {\n return typeof v === \"object\" && v !== null && \"configs\" in v && \"control\" in v;\n}","import { AfterViewInit, ChangeDetectionStrategy, ChangeDetectorRef, Component, EventEmitter, forwardRef, inject, Injector, Input, OnInit, Output, TemplateRef, Type, ViewChild, ViewContainerRef } from '@angular/core';\nimport { ControlValueAccessor, FormControl, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { generateUid, Lang, NGX_I18N_INPUT_CONFIG, NGX_I18N_INPUT_CONTEXT, NGX_I18N_INPUT_DEFAULT_CONFIGS, NgxI18nInputConfig, NgxI18nInputContext } from '../types';\n\n@Component({\n selector: 'lib-ngx-i18n-input-single-lang-input',\n templateUrl: './ngx-i18n-input-single-lang-input.component.html',\n styleUrls: [\n \"./ngx-i18n-input-single-lang-input.component.scss\",\n \"../tw.scss\"\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => NgxI18nInputSingleLangInputComponent),\n multi: true\n }\n ]\n})\nexport class NgxI18nInputSingleLangInputComponent<T> implements AfterViewInit, ControlValueAccessor {\n\n /*************************************** Dependencies ***************************************/\n private readonly cd: ChangeDetectorRef = inject(ChangeDetectorRef);\n private readonly injector: Injector = inject(Injector);\n\n @Output() readonly onCustomEvent = new EventEmitter<{ lang: Lang, name: string, value: any }>();\n\n /*************************************** Instance variables ***************************************/\n @ViewChild('dynamicContainer', { read: ViewContainerRef, static: true }) container?: ViewContainerRef;\n\n readonly control = new FormControl<T | null>(null);\n\n injectableContext: NgxI18nInputContext | null = null;\n\n /*************************************** Inputs and configs ***************************************/\n\n @Input() inputId: string = generateUid();\n\n @Input() configs: NgxI18nInputConfig = { ...NGX_I18N_INPUT_DEFAULT_CONFIGS };\n\n @Input() lang: Lang | null = null;\n\n /*************************************** Angular Lifecycle hoooks ***************************************/\n\n ngAfterViewInit(): void {\n this.renderComponent();\n }\n\n writeValue(obj: any): void {\n this.control.setValue(obj, { emitEvent: false });\n }\n\n registerOnChange(fn: any): void {\n this.control.valueChanges.subscribe(fn);\n }\n\n registerOnTouched(fn: any): void {\n this.control.valueChanges.subscribe(fn);\n }\n\n setDisabledState?(isDisabled: boolean): void {\n this.control[isDisabled ? 'disable' : 'enable']();\n }\n\n ngOnChanges(): void {\n if (this.lang && this.inputId) {\n this.injectableContext = {\n id: this.inputId,\n configs: this.configs,\n control: this.control,\n lang: this.lang,\n emitCustomEvent: (name: string, value: any) => {\n this.onCustomEvent.emit({ lang: this.lang!, name, value });\n }\n }\n } else {\n this.injectableContext = null;\n }\n }\n\n /*************************************** Public methods ***************************************/\n\n renderComponent(): void {\n if (!this.configs.defaultInputComponent) return; // No component to render.\n if (this.configs.inputTemplate) return; // will render inputTemplate.\n\n if (!this.container) {\n console.error(`Container not found for ${this.configs.defaultInputComponent.name}`);\n return;\n }\n\n if (!this.lang) {\n console.error(`invalid lang`);\n return;\n }\n\n if (!this.injectableContext) {\n console.error(`invalid context`, this.injectableContext);\n return;\n }\n\n this.container.clear();\n\n // const context: NgxI18nInputContext = {\n // configs: this.configs,\n // control: this.control,\n // lang: this.lang,\n // emitCustomEvent: (name: string, value: any) => {\n // this.onCustomEvent.emit({ lang: this.lang!, name, value });\n // }\n // };\n\n const injector = Injector.create({\n providers: [\n {\n provide: NGX_I18N_INPUT_CONTEXT,\n useValue: this.injectableContext\n }\n ],\n parent: this.injector\n });\n\n const componentRef = this.container.createComponent(this.configs.defaultInputComponent, { injector });\n\n componentRef.changeDetectorRef.detectChanges();\n }\n\n inputTouched(): void {\n this.control.markAsTouched();\n this.control.updateValueAndValidity();\n }\n\n detectChanges(): void {\n this.cd.detectChanges();\n }\n}\n","<ng-template #defaultInputTemplate let-all>\n <input id=\"{{ all.id }}\"\n (blur)=\"inputTouched()\"\n (focus)=\"inputTouched()\"\n (input)=\"inputTouched()\"\n (click)=\"inputTouched()\"\n\n\n class=\"default-input-field border-solid outline-0 bg-gray-50 border border-gray-300 text-gray-900 text-sm rounded-lg block w-full p-2.5 focus:border-blue-500\"\n [ngClass]=\"{\n 'focus:ring-blue-500': all.control.valid,\n 'border-red-500': all.control.invalid && all.control.touched,\n '-mt-px rounded-tl-none rounded-tr-none': all.configs.layout === 'tabs' && !all.configs.hideLabels\n }\"\n \n\n [placeholder]=\"all.configs.formatLabel(all.lang, all.configs.label)\"\n [formControl]=\"all.control\">\n</ng-template>\n\n<ng-container #dynamicContainer></ng-container>\n\n<ng-container *ngIf=\"configs.inputTemplate || !configs.defaultInputComponent\">\n <ng-container *ngTemplateOutlet=\"configs.inputTemplate || defaultInputTemplate; context: {\n $implicit: injectableContext\n }\" ></ng-container>\n</ng-container>\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, ElementRef, EventEmitter, forwardRef, Inject, inject, Input, OnChanges, OnInit, Output, QueryList, SimpleChanges, TemplateRef, Type, ViewChildren, ViewEncapsulation } from '@angular/core';\nimport { AbstractControl, ControlValueAccessor, FormArray, FormControl, FormGroup, NG_VALUE_ACCESSOR, RequiredValidator, ValidatorFn } from '@angular/forms';\nimport { Lang, mergeNgxI18nConfigs, NGX_I18N_INPUT_CONFIG, NGX_I18N_INPUT_DEFAULT_CONFIGS, NgxI18nInputConfig, NgxI18nInputLayout, NgxI18nInputLayouts } from './types';\nimport { generateUid, ngxI18nDefaultFormatOutput } from './types';\nimport { BehaviorSubject, map, Observable, of } from 'rxjs';\nimport { NgxI18nInputSingleLangInputComponent } from './ngx-i18n-input-single-lang-input/ngx-i18n-input-single-lang-input.component';\n\n@Component({\n selector: 'ngx-i18n-input',\n templateUrl: './ngx-i18n-input.component.html',\n styleUrls: [\n './tw.scss',\n './ngx-i18n-input.component.scss',\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => NgxI18nInputComponent),\n multi: true\n }\n ]\n})\nexport class NgxI18nInputComponent<T> implements OnInit, OnChanges, ControlValueAccessor {\n\n /*************************************** Dependencies ***************************************/\n private readonly cd: ChangeDetectorRef = inject(ChangeDetectorRef);\n\n /*************************************** Instance variables ***************************************/\n activeLang: Lang | null = null;\n\n @ViewChildren(NgxI18nInputSingleLangInputComponent) inputs?: QueryList<NgxI18nInputSingleLangInputComponent<T>>;\n\n readonly forms: FormGroup = new FormGroup({});\n\n /*************************************** Inputs and Configs ***************************************/\n @Input() uid: string = generateUid();\n\n readonly configs: NgxI18nInputConfig = mergeNgxI18nConfigs(inject(NGX_I18N_INPUT_CONFIG, { optional: true }) || NGX_I18N_INPUT_DEFAULT_CONFIGS);\n\n /**\n * Customize input template. Suggested but not required.\n * Usage:\n * ```html\n * <ng-template #titleTemplate let-all>\n * <input [formControl]=\"all.control\">\n * </ng-template>\n *\n * <ngx-i18n-input [inputTemplate]=\"titleTemplate\" formControlName=\"title\">\n * ```\n */\n @Input() set inputTemplate(template: TemplateRef<unknown> | null | undefined) {\n this.configs.inputTemplate = template || null;\n }\n\n get inputTemplate() {\n return this.configs.inputTemplate;\n }\n\n /**\n * Customize language name template.\n * Usage:\n * ```html\n * <ng-template #labelTemplate let-context>\n * <span>{{ context.configs.formatLabel(context.lang, context.configs.label) }}</span>\n * </ng-template>\n *\n * <ngx-i18n-input [labelTemplate]=\"labelTemplate\"></ngx-i18n-input>\n * ```\n */\n @Input() set labelTemplate(template: TemplateRef<unknown> | null | undefined) {\n this.configs.labelTemplate = template ?? null;\n }\n\n get labelTemplate() {\n return this.configs.labelTemplate;\n }\n\n /**\n * Customize label of the component.\n * When provided, will be used as string inside the template.\n */\n @Input() set label(label: string | Record<Lang, string> | null | undefined) {\n this.configs.label = label || null;\n }\n\n get label() {\n return this.configs.label;\n }\n\n /**\n * Customize layout of the component.\n * Available layouts:\n * - tabs\n * - vertical\n * Default: vertical\n */\n @Input() set layout(layout: NgxI18nInputLayout | null | undefined) {\n if (layout) this.configs.layout = layout;\n }\n\n get layout() {\n return this.configs.layout;\n }\n\n /**\n * Autofocus input.\n * When boolean, will autofocus the first input.\n * When string, will autofocus the input with the given lang.\n */\n @Input() set autofocus(autofocus: boolean | string | null | undefined) {\n if (autofocus === null || autofocus === undefined) autofocus = false;\n\n this.configs.autofocus = autofocus;\n }\n\n get autofocus() {\n return this.configs.autofocus;\n }\n\n /**\n * When true, labels won't be displayed.\n */\n @Input() set hideLabels(hideLabels: boolean | null | undefined) {\n if (hideLabels === null || hideLabels === undefined) hideLabels = false;\n\n this.configs.hideLabels = hideLabels;\n }\n\n get hideLabels(): boolean {\n return this.configs.hideLabels;\n }\n\n get availableLangs(): Lang[] {\n return this.configs.availableLangs;\n }\n\n @Input() set languages(langs: Lang[] | null | undefined) {\n if (langs === null || langs === undefined) langs = [];\n\n this.configs.availableLangs = langs;\n }\n\n get languages(): Lang[] {\n return this.configs.availableLangs;\n }\n\n /**\n * When true, all inputs will be required.\n */\n @Input() set required(required: boolean | null | undefined) {\n this.configs.required = (required === true);\n }\n\n get required(): boolean {\n return this.configs.required;\n }\n\n /**\n * Adding validators to the input.\n */\n @Input() set validators(validators: ValidatorFn[] | null | undefined) {\n this.configs.validators = validators || [];\n }\n\n get validators(): ValidatorFn[] {\n return this.configs.validators || [];\n }\n\n @Input() set defaultInputComponent(v: Type<any> | null | undefined) {\n this.configs.defaultInputComponent = v;\n }\n\n get defaultInputComponent(): Type<any> | null | undefined {\n return this.configs.defaultInputComponent;\n }\n\n /*************************************** Outputs ***************************************/\n\n @Output() readonly valueChanges: Observable<Record<Lang, T | null>> = this.forms.valueChanges.pipe(map(this.configs.formatOutput));\n\n @Output() readonly activeLangChange: BehaviorSubject<Lang | null> = new BehaviorSubject<Lang | null>(null);\n\n @Output() readonly onCustomEvent = new EventEmitter<{ lang: Lang, name: string, value: any }>();\n\n /*************************************** ANGULAR LIFECYCLE HOOKS ***************************************/\n\n ngOnInit(): void {\n this.availableLangs.forEach((lang: Lang) => {\n if (!this.forms.get(lang)) this.forms.addControl(lang, new FormControl(null, [\n this.validateFn.bind(this)\n ]));\n });\n\n // this.service.configs$.subscribe({next: (c) => this.configs = c});\n\n if (typeof this.autofocus === \"string\" && this.forms.get(this.autofocus)) {\n this.focusInput(this.autofocus);\n } else if (this.autofocus === true) {\n this.focusInput(this.availableLangs[0]);\n }\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n this.inputs?.forEach((input: NgxI18nInputSingleLangInputComponent<T>) => {\n input.detectChanges();\n });\n\n setTimeout(() => {\n Object.values(this.forms.controls).forEach((control: AbstractControl) => control.updateValueAndValidity({ emitEvent: false }));\n });\n }\n\n writeValue(value: unknown): void {\n if (value === null || value === undefined) value = {};\n\n if (typeof value !== 'object') {\n console.warn('NgxI18nInputComponent: value must be an object or null. Will reset input. got ', value);\n value = {};\n }\n\n this.forms.patchValue(value as Record<string, unknown>, { emitEvent: false });\n }\n\n registerOnChange(fn: any): void {\n this.valueChanges.subscribe({\n next: (value: Record<Lang, T | null>) => fn(value)\n });\n }\n\n registerOnTouched(fn: any): void {\n this.registerOnChange(fn);\n }\n\n setDisabledState(isDisabled: boolean): void {\n this.forms[isDisabled ? 'disable' : 'enable']();\n }\n\n /*************************************** PUBLIC METHODS ***************************************/\n\n validateFn(control: AbstractControl): { [key: string]: any } | null {\n const value: unknown = control.value;\n const acc: Record<string, any> = {};\n\n if (this.required === true) {\n if (\n value == null ||\n value == undefined ||\n ((typeof value === \"string\" || Array.isArray(value)) && value.length === 0) ||\n (typeof value === \"object\" && Object.keys(value as Record<string, unknown>).length === 0)\n ) {\n acc[\"required\"] = true;\n }\n }\n\n this.validators?.forEach((validator: ValidatorFn) => {\n const result: Record<string, any> | null = validator(control);\n if (result) {\n Object.keys(result).forEach((key: string) => {\n acc[key] = result[key];\n });\n }\n });\n\n return Object.keys(acc).length > 0 ? acc : null;\n }\n\n getStrLabelFor(lang: Lang): string {\n if (typeof this.label === \"string\") return this.label;\n if (this.label && this.label[lang]) return this.label[lang];\n\n return lang;\n }\n\n getId(lang: Lang): string {\n return `${this.uid}-${lang}`;\n }\n\n inputId(lang: Lang): string {\n return `input-${this.getId(lang)}`;\n }\n\n containerId(lang: Lang): string {\n return `container-${this.getId(lang)}`;\n }\n\n isActiveLang(lang: Lang): boolean {\n return this.activeLang === lang || (\n this.activeLang === null &&\n this.availableLangs &&\n lang === this.availableLangs[0]\n );\n }\n\n focusInput(lang: string): void {\n this.activeLang = lang;\n this.activeLangChange.next(lang as Lang);\n setTimeout(() => this.tryLocateAndFocusInput(lang));\n this.detectChanges();\n }\n\n detectChanges(): void {\n this.cd.detectChanges();\n }\n\n /*************************************** PRIVATE METHODS ***************************************/\n\n /**\n * This method will try to locate the input with the given lang and focus it.\n */\n private tryLocateAndFocusInput(lang: Lang): void {\n const done = () => this.detectChanges();\n\n const input = document.getElementById(this.inputId(lang));\n if (input) {\n input.focus();\n return done();\n }\n\n const container = document.getElementById(this.containerId(lang));\n if (container) {\n const input: HTMLInputElement | null = container.querySelector('input');\n if (input) {\n input.focus();\n return done();\n }\n\n const textarea: HTMLTextAreaElement | null = container.querySelector('textarea');\n if (textarea) {\n textarea.focus();\n return done();\n }\n }\n\n done();\n }\n}\n","<!------------------- TEMPLATES ------------------->\n<ng-template #defaultlabelTemplate let-all>\n <span [ngClass]=\"{'underline decoration-wavy decoration-red-500': all.control.touched && all.control.invalid && (layout === 'vertical' || !isActiveLang(all.lang))}\">\n {{ all.configs.formatLabel(all.lang, all.configs.label) }}\n </span>\n</ng-template>\n\n<ng-template #actualLabel let-all>\n <ng-container *ngTemplateOutlet=\"labelTemplate || defaultlabelTemplate; context: {\n $implicit: {\n lang: all.lang,\n control: forms.controls[all.lang],\n id: all.id,\n configs: all.configs\n }\n }\"></ng-container>\n</ng-template>\n\n<!------------------- CONTENT ------------------->\n<form class=\"layout-{{ layout }}\" [ngClass]=\"{'labels-hidden': hideLabels}\" [formGroup]=\"forms\">\n <ng-container [ngSwitch]=\"layout\">\n <ng-container *ngSwitchCase=\"'tabs'\">\n <ul *ngIf=\"!hideLabels\"\n class=\"m-0 p-0 flex flex-wrap text-sm font-medium text-center text-gray-500 border-b border-gray-200\">\n <ng-container *ngFor=\"let lang of availableLangs;\">\n <li class=\"me-2\">\n <label for=\"input-{{uid}}-{{lang}}\" (click)=\"focusInput(lang)\"\n class=\"inline-block px-4 py-3 rounded-t-lg cursor-pointer\" [ngClass]=\"{\n 'text-blue-600 bg-gray-100 active': isActiveLang(lang),\n 'hover:text-gray-600 hover:bg-gray-50': !isActiveLang(lang)\n }\">\n <ng-container *ngTemplateOutlet=\"actualLabel; context: { $implicit: { lang: lang, configs } }\"></ng-container>\n </label>\n </li>\n </ng-container>\n </ul>\n \n <ng-container *ngFor=\"let lang of availableLangs;\">\n <div id=\"{{ containerId(lang) }}\" [ngClass]=\"{\n 'hidden': !isActiveLang(lang)\n }\">\n <lib-ngx-i18n-input-single-lang-input\n [inputId]=\"inputId(lang)\"\n (onCustomEvent)=\"onCustomEvent.emit($event)\"\n [configs]=\"configs\"\n [formControlName]=\"lang\"\n [lang]=\"lang\"\n ></lib-ngx-i18n-input-single-lang-input>\n </div>\n </ng-container>\n </ng-container>\n\n <ng-container *ngSwitchDefault>\n <ng-container *ngFor=\"let lang of availableLangs\">\n <div class=\"block mb-4\">\n <div class=\"flex flex-col\">\n <label *ngIf=\"!hideLabels\" for=\"input-{{ uid }}-{{ lang }}\">\n <ng-container *ngTemplateOutlet=\"actualLabel; context: { $implicit: { lang: lang, configs } }\"></ng-container>\n </label>\n \n <div id=\"{{ containerId(lang) }}\">\n <lib-ngx-i18n-input-single-lang-input\n [inputId]=\"inputId(lang)\"\n (onCustomEvent)=\"onCustomEvent.emit($event)\"\n [configs]=\"configs\"\n [formControlName]=\"lang\"\n [lang]=\"lang\"\n ></lib-ngx-i18n-input-single-lang-input>\n </div>\n </div>\n </div>\n </ng-container>\n </ng-container>\n </ng-container>\n</form>\n","import { ModuleWithProviders, NgModule } from '@angular/core';\nimport { NgxI18nInputComponent } from './ngx-i18n-input.component';\nimport { AsyncPipe, JsonPipe, NgClass, NgForOf, NgIf, NgSwitch, NgSwitchCase, NgSwitchDefault, NgTemplateOutlet } from '@angular/common';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport { NGX_I18N_INPUT_CONFIG, NGX_I18N_INPUT_DEFAULT_CONFIGS, NgxI18nInputConfig } from './types';\nimport { NgxI18nInputSingleLangInputComponent } from './ngx-i18n-input-single-lang-input/ngx-i18n-input-single-lang-input.component';\n\n\n\n@NgModule({\n declarations: [\n NgxI18nInputComponent,\n NgxI18nInputSingleLangInputComponent,\n ],\n imports: [\n NgTemplateOutlet,\n NgIf,\n ReactiveFormsModule,\n NgForOf,\n AsyncPipe,\n NgSwitch,\n NgSwitchDefault,\n NgSwitchCase,\n NgClass,\n\n // DEVELOPMENT\n JsonPipe\n ],\n exports: [\n NgxI18nInputComponent\n ]\n})\nexport class NgxI18nInputModule {\n static forRoot(configs: Partial<NgxI18nInputConfig>): ModuleWithProviders<NgxI18nInputModule> {\n return {\n ngModule: NgxI18nInputModule,\n providers: [\n {\n provide: NGX_I18N_INPUT_CONFIG,\n useValue: {...configs}\n }\n ]\n }\n }\n}\n","/*\n * Public API Surface of ngx-i18n-input\n */\n\n// export * from './lib/ngx-i18n-input.service';\nexport * from './lib/ngx-i18n-input.component';\nexport * from './lib/ngx-i18n-input.module';\nexport * from './lib/types';","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i3.NgxI18nInputSingleLangInputComponent"],"mappings":";;;;;;;;AAAO,MAAM,iBAAiB,GAAG;IAC/B,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI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"}