@metadev/lux 0.16.4 → 0.17.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"metadev-lux.js","sources":["../../../projects/lux/src/lib/helperFns.ts","../../../projects/lux/src/lib/autocomplete/autocomplete.component.ts","../../../projects/lux/src/lib/lang.ts","../../../projects/lux/src/lib/autocomplete-list/autocomplete-list.component.ts","../../../projects/lux/src/lib/checkbox/checkbox.component.ts","../../../projects/lux/src/lib/datetime/datetime.component.ts","../../../projects/lux/src/lib/input/regexp.service.ts","../../../projects/lux/src/lib/input/input.component.ts","../../../projects/lux/src/lib/filter/filter.component.ts","../../../projects/lux/src/lib/modal/modal-ref.ts","../../../projects/lux/src/lib/modal/util.ts","../../../projects/lux/src/lib/modal/modal-dismiss-reasons.ts","../../../projects/lux/src/lib/modal/modal-window.ts","../../../projects/lux/src/lib/modal/modal-backdrop.ts","../../../projects/lux/src/lib/modal/modal-config.ts","../../../projects/lux/src/lib/modal/modal-stack.ts","../../../projects/lux/src/lib/modal/modal.service.ts","../../../projects/lux/src/lib/geolocation/geolocation.service.ts","../../../projects/lux/src/lib/geolocation/geolocation.component.ts","../../../projects/lux/src/lib/tooltip/placement.ts","../../../projects/lux/src/lib/tooltip/tooltip.component.ts","../../../projects/lux/src/lib/tooltip/tooltop-content.ts","../../../projects/lux/src/lib/tooltip/tooltip.service.ts","../../../projects/lux/src/lib/tooltip/tooltip.directive.ts","../../../projects/lux/src/lib/breadcrumb/breadcrumb.component.ts","../../../projects/lux/src/lib/geolocation/openlayer-loader.service.ts","../../../projects/lux/src/lib/map/map.component.ts","../../../projects/lux/src/lib/pagination/pagination.component.ts","../../../projects/lux/src/lib/radiogroup/radiogroup.component.ts","../../../projects/lux/src/lib/select/select.component.ts","../../../projects/lux/src/lib/voice-recognition/voice-recognition.directive.ts","../../../projects/lux/src/lib/window/window.service.ts","../../../projects/lux/src/lib/lux.module.ts","../../../projects/lux/src/public-api.ts","../../../projects/lux/src/metadev-lux.ts"],"sourcesContent":["// undefined and null functions\r\n\r\nexport const exists = (value: any): boolean =>\r\n value !== null && value !== undefined;\r\n\r\nexport const hasValue = (value: any): boolean =>\r\n exists(value) && (typeof value === 'string' ? !isEmptyString(value) : true);\r\n\r\n// string functions\r\n\r\nexport const isEmptyString = (value: string): boolean => value.trim() === '';\r\n\r\nexport const isValidEmail = (value: string): boolean => {\r\n const re =\r\n /^[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?$/;\r\n return re.test(String(value).toLowerCase().trim());\r\n};\r\n\r\n// date functions\r\n\r\nexport const isValidDate = (date: Date): boolean =>\r\n exists(date) ? !isNaN(date.getTime()) : false;\r\n\r\nexport const normalizeDate = (value: any): string => {\r\n if (typeof value === 'string' && value.length > 10) {\r\n return value.substr(0, 10);\r\n }\r\n return value ? value.toString() : null;\r\n};\r\n\r\nexport const addTimezoneOffset = (date: Date): Date => {\r\n if (!isValidDate(date)) {\r\n return date;\r\n } else {\r\n return new Date(date.getTime() - date.getTimezoneOffset() * 60000);\r\n }\r\n};\r\n\r\n// number functions\r\n\r\nexport const isValidNumber = (\r\n value: string | number | undefined | null\r\n): boolean => (hasValue(value) ? !Number.isNaN(Number(value)) : false);\r\n\r\nexport const numberOfDecimalDigits = (\r\n x: number | string\r\n): number | undefined => {\r\n if (isValidNumber(x)) {\r\n const xString = String(Number(x));\r\n if (xString === 'Infinity') {\r\n return 0;\r\n }\r\n const indexOfE = xString.indexOf('e');\r\n if (indexOfE >= 0) {\r\n return 0;\r\n }\r\n const indexOfDecimalPoint = xString.indexOf('.');\r\n if (indexOfDecimalPoint < 0) {\r\n return 0;\r\n } else {\r\n return xString.length - indexOfDecimalPoint - 1;\r\n }\r\n }\r\n return undefined;\r\n};\r\n\r\nexport const numberOfWholeDigits = (x: number | string): number | undefined => {\r\n if (isValidNumber(x)) {\r\n let xString = String(Number(x));\r\n if (xString.indexOf('-') === 0) {\r\n xString = xString.slice(1, xString.length);\r\n }\r\n if (xString === 'Infinity') {\r\n return Infinity;\r\n }\r\n if (xString.indexOf('0') === 0) {\r\n xString = xString.slice(1, xString.length);\r\n }\r\n const indexOfE = xString.indexOf('e');\r\n if (indexOfE >= 0) {\r\n return Number(xString.slice(indexOfE + 1, xString.length)) + 1;\r\n }\r\n const indexOfDecimalPoint = xString.indexOf('.');\r\n if (indexOfDecimalPoint < 0) {\r\n return xString.length;\r\n } else {\r\n return indexOfDecimalPoint;\r\n }\r\n }\r\n return undefined;\r\n};\r\n\r\nexport const roundToMultipleOf = (x: number, modulo: number): number => {\r\n const moduloString = String(modulo);\r\n // approximates the result\r\n // prone to inexactitude because of floating point arithmetic\r\n const approximation = Math.round(x / modulo) * modulo;\r\n const approximationString = String(approximation);\r\n // remove useless decimals\r\n const uselessDecimalsInApproximation =\r\n numberOfDecimalDigits(approximationString) -\r\n numberOfDecimalDigits(moduloString);\r\n const resultString = approximationString.slice(\r\n 0,\r\n approximationString.length - uselessDecimalsInApproximation\r\n );\r\n return Number(resultString);\r\n};\r\n\r\n// other functions\r\n\r\nexport const isInitialAndEmpty = (\r\n previousValue: any,\r\n newValue: any\r\n): boolean => {\r\n const isPrevArray = Array.isArray(previousValue);\r\n const isNewArray = Array.isArray(newValue);\r\n return !(\r\n (isPrevArray ? previousValue.length !== 0 : Boolean(previousValue)) ||\r\n (isNewArray ? newValue.length !== 0 : Boolean(newValue))\r\n );\r\n};\r\n","import {\n AfterViewInit,\n ChangeDetectorRef,\n Component,\n ElementRef,\n EventEmitter,\n forwardRef,\n Input,\n OnInit,\n Output,\n ViewChild\n} from '@angular/core';\nimport {\n AbstractControl,\n ControlValueAccessor,\n NG_VALIDATORS,\n NG_VALUE_ACCESSOR,\n ValidationErrors,\n Validator\n} from '@angular/forms';\nimport { Observable, of } from 'rxjs';\nimport { debounceTime, first, map } from 'rxjs/operators';\nimport {\n DataSource,\n DataSourceItem,\n DecoratedDataSource,\n DecoratedDataSourceItem\n} from '../datasource';\nimport { isInitialAndEmpty } from '../helperFns';\n\nexport const LOST_FOCUS_TIME_WINDOW_MS = 200; // ms\n@Component({\n selector: 'lux-autocomplete',\n templateUrl: './autocomplete.component.html',\n styleUrls: ['./autocomplete.component.scss'],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n multi: true,\n useExisting: forwardRef(() => AutocompleteComponent)\n },\n {\n provide: NG_VALIDATORS,\n multi: true,\n useExisting: forwardRef(() => AutocompleteComponent)\n }\n ]\n})\nexport class AutocompleteComponent\n implements ControlValueAccessor, Validator, OnInit, AfterViewInit\n{\n static idCounter = 0;\n\n @ViewChild('i0', { static: true }) i0: ElementRef;\n @ViewChild('completeDiv', { static: true }) completeDiv: ElementRef;\n\n private _dataSource: DataSource<any, string>;\n private _placeholder: string;\n private _value: any;\n private lostFocusHandled = true;\n private t0 = 0;\n\n showSpinner = false;\n touched = false;\n completionList: DecoratedDataSource = [];\n showCompletion = false;\n focusItem: DataSourceItem<any, string>;\n\n @Output() valueChange = new EventEmitter<any>();\n @Output() dataSourceChange = new EventEmitter<DataSource<any, string>>();\n\n @Input() public inputId: string;\n @Input() public disabled: boolean | null = null;\n @Input() public readonly: boolean | null = null;\n @Input() label = '';\n /** If canAddNewValues, user can type items not present in the data-source. */\n @Input() canAddNewValues = false;\n /** After cleaning the selection should the completion list remain open or closed:\n * false: (default) close on filters, to clean a filter and select all.\n * true: keep open (when the action most likely is to pick another one).\n */\n @Input() keepOpenAfterDelete = false;\n\n @Input()\n get value(): any {\n return this._value;\n }\n set value(v: any) {\n const initialAndEmpty = isInitialAndEmpty(this._value, v);\n this._value = v;\n this.onChange(v);\n this.completeLabel();\n if (!initialAndEmpty) {\n this.valueChange.emit(v);\n }\n }\n @Input()\n get dataSource(): DataSource<any, string> {\n return this._dataSource;\n }\n set dataSource(v: DataSource<any, string>) {\n this._dataSource = v;\n this.dataSourceChange.emit(v);\n }\n @Input() required = false;\n\n @Input()\n set placeholder(v: string) {\n this._placeholder = v;\n }\n get placeholder(): string {\n return this._placeholder ? this._placeholder : '';\n }\n\n @Input() resolveLabelsFunction?: (\n instance: any,\n keys: any[]\n ) => Observable<DataSource<any, string>> = undefined;\n @Input() populateFunction?: (\n instance: any,\n search: string\n ) => Observable<DataSource<any, string>> = undefined;\n @Input() instance: any;\n\n constructor(private cd: ChangeDetectorRef) {}\n\n // ControlValueAccessor Interface\n onChange = (value): void => {};\n onTouched = (): void => {};\n\n writeValue(value: any): void {\n this.value = value;\n }\n\n registerOnChange(onChange: any): void {\n this.onChange = onChange;\n }\n registerOnTouched(onTouched: any): void {\n this.onTouched = onTouched;\n }\n markAsTouched(): void {\n if (!this.touched && !this.disabled) {\n this.onTouched();\n this.touched = true;\n }\n }\n\n setDisabledState(disabled: boolean): void {\n this.disabled = disabled;\n }\n // End ControlValueAccessor Interface\n\n // Validator interface\n registerOnValidatorChange(): void {}\n\n validate(control: AbstractControl): ValidationErrors | null {\n const value = control.value;\n if (\n this.required &&\n (value === '' || value === null || value === undefined)\n ) {\n return { required: { value, reason: 'Required field.' } };\n }\n return null;\n }\n // End of Validator interface\n\n clear(): void {\n this.value = null;\n this.toggleCompletion(this.keepOpenAfterDelete, '');\n }\n\n private completeLabel(): void {\n if (this.value) {\n if (this.dataSource) {\n this.label = findLabelForId(this.dataSource, this.value) || '';\n } else if (this.instance && this.resolveLabelsFunction) {\n this.resolveLabelsFunction(this.instance, [this.value])\n .pipe(debounceTime(1), first())\n .subscribe((data) => {\n this.label = findLabelForId(data, this.value) || '';\n });\n }\n } else {\n this.label = '';\n }\n }\n\n ngOnInit(): void {\n this.inputId = this.inputId\n ? this.inputId\n : `autocompletelist${AutocompleteComponent.idCounter++}`;\n this.completeLabel();\n }\n ngAfterViewInit(): void {\n this.setSameWidth();\n }\n onInputResized(): void {\n this.setSameWidth();\n }\n private setSameWidth(): void {\n const width = this.i0.nativeElement.getBoundingClientRect().width;\n this.completeDiv.nativeElement.style.width = `${width}px`;\n }\n\n onKeydown(event: KeyboardEvent, label: string): void {\n switch (event.key) {\n case 'Tab':\n if (label) {\n this.pickSelectionOrFirstMatch(label);\n }\n this.showCompletion = false;\n break;\n }\n this.markAsTouched();\n }\n onKeypress(event: KeyboardEvent, label: string): void {\n switch (event.key) {\n case 'Intro':\n case 'Enter':\n this.pickSelectionOrFirstMatch(label);\n event.preventDefault();\n break;\n }\n this.markAsTouched();\n }\n onKeyup(event: KeyboardEvent, label: string): void {\n switch (event.key) {\n case 'PageDown':\n this.focusOnNext(5);\n event.preventDefault();\n break;\n case 'ArrowDown':\n this.focusOnNext(1);\n event.preventDefault();\n break;\n case 'PageUp':\n this.focusOnPrevious(5);\n event.preventDefault();\n break;\n case 'ArrowUp':\n this.focusOnPrevious(1);\n event.preventDefault();\n break;\n case 'Escape':\n this.complete(null);\n event.preventDefault();\n break;\n case 'Intro':\n case 'Enter':\n event.preventDefault();\n break;\n default:\n this.showCompletionList(label);\n // event.preventDefault();\n }\n this.markAsTouched();\n }\n private focusOnNext(offset: number): void {\n const list = this.completionList || [];\n const index = list.findIndex(\n (it) => this.focusItem && it.key === this.focusItem.key\n );\n const indexNext =\n -1 && list.length > index + offset ? index + offset : list.length - 1;\n const next = list[indexNext];\n this.focusItem = next;\n this.ensureItemVisible(index);\n }\n private focusOnPrevious(offset: number): void {\n const list = this.completionList || [];\n const index = list.findIndex(\n (it) => this.focusItem && it.key === this.focusItem.key\n );\n const indexPrevious = index !== -1 && index > offset ? index - offset : 0;\n const next = list[indexPrevious];\n this.focusItem = next;\n this.ensureItemVisible(index);\n }\n onLostFocus(label: string): void {\n this.lostFocusHandled = false;\n this.t0 = performance.now();\n // console.log('Init LostFocus');\n setTimeout(() => {\n // needs to postpone actions some milliseconds to verify if\n // lost focus was followed by a list selection -> then cancel\n // if not -> make side effect\n if (!this.lostFocusHandled) {\n // console.log(\n // 'Lost focus 2',\n // this.lostFocusHandled,\n // 'SIDE EFFECT',\n // performance.now() - this.t0,\n // 'label:',\n // label\n // );\n if (label && this.label !== label) {\n this.pickSelectionOrFirstMatch(label);\n } else {\n this.lostFocusHandled = true;\n }\n this.toggleCompletion(false, label);\n } else {\n // do nothing (list selection took place)\n // console.log(\n // 'onlost focus 2',\n // this.lostFocusHandled,\n // 'nothing',\n // performance.now() - this.t0\n // );\n }\n }, LOST_FOCUS_TIME_WINDOW_MS);\n }\n complete(item: DataSourceItem<Record<string, unknown>, string>): void {\n if (!this.lostFocusHandled) {\n this.lostFocusHandled = true; // prevent a previous lostFocus to trigger a side effect\n const ellapsed = performance.now() - this.t0;\n if (ellapsed > LOST_FOCUS_TIME_WINDOW_MS) {\n console.warn(\n 'complete. lostfocus->click timeout of ',\n LOST_FOCUS_TIME_WINDOW_MS,\n 'ms exceed: ',\n performance.now() - this.t0,\n ' ms'\n );\n }\n // console.log(\n // 'complete. set to true. CANCELED side effect',\n // performance.now() - this.t0\n // );\n }\n if (item !== null) {\n this.value = item.key;\n this.label = item.label;\n } else {\n this.value = null;\n this.label = '';\n }\n this.toggleCompletion(false, null);\n this.markAsTouched();\n }\n toggleCompletion(show: boolean, label: string): void {\n if (show && !this.disabled) {\n this.showCompletionList(label);\n } else {\n this.showCompletion = false;\n if (this.canAddNewValues) {\n this.syncCustomValue(this.label);\n return;\n }\n }\n this.cd.markForCheck();\n }\n\n get selectedOption(): string {\n const index = this.completionList.findIndex(\n (i) => i.key === this.focusItem.key\n );\n if (index === -1 || !this.focusItem) {\n return null;\n }\n return `${this.inputId}_${index}`;\n }\n\n private ensureItemVisible(index: number): void {\n const target = this.completeDiv.nativeElement.querySelectorAll('li')[index];\n if (target) {\n target.scrollIntoView({ block: 'center' });\n }\n }\n private syncCustomValue(text: string): void {\n this.value = text;\n this.label = text;\n }\n /** Pick selection based on text filtering (ingnores drowdown state) */\n private pickSelectionOrFirstMatch(text: string): void {\n if (this.canAddNewValues) {\n this.syncCustomValue(text);\n return;\n }\n const focusIndex = this.completionList.findIndex(\n (it) => this.focusItem && it.key === this.focusItem.key\n );\n if (\n this.showCompletion &&\n focusIndex > 0 &&\n this.focusItem &&\n this.focusItem.label\n ) {\n if (text === this.focusItem.label && this.focusItem.key === this.value) {\n // do nothing if value does not change & close dropdow\n this.showCompletion = false;\n return;\n }\n // complete selected using selected item on drowdown\n this.complete(this.focusItem);\n return;\n }\n const source = (text || '').trim();\n if (!source) {\n this.showCompletion = false;\n // select null value\n if (this.value !== null) {\n this.value = null;\n }\n return;\n }\n this.completionList = [];\n this.computeCompletionList(source).subscribe((suggestions) => {\n const candidate =\n suggestions && suggestions.length > 0 ? suggestions[0] : null;\n this.complete(candidate);\n });\n }\n private showCompletionList(text: string): void {\n this.setSameWidth();\n const useSpinner = this.hasExternalDataSource();\n this.spinnerVisibility(useSpinner, true);\n setTimeout(() => {\n // for spinner to be shown\n this.computeCompletionList(text).subscribe({\n next: (cl) => {\n this.completionList = cl;\n this.focusItem = selectElement(this.completionList, text);\n this.showCompletion = true;\n this.spinnerVisibility(useSpinner, false);\n },\n error: () => {\n this.spinnerVisibility(useSpinner, false);\n },\n complete: () => {\n this.spinnerVisibility(useSpinner, false);\n }\n });\n }, 1);\n }\n\n private spinnerVisibility(useSpinner: boolean, value: boolean): void {\n if (useSpinner) {\n this.showSpinner = value;\n }\n }\n private hasExternalDataSource(): boolean {\n return !this.dataSource && !!this.instance && !!this.populateFunction;\n }\n private computeCompletionList(text: string): Observable<DecoratedDataSource> {\n const searchText = (text || '').toLowerCase();\n if (this.dataSource) {\n const ds = (this.dataSource || [])\n .filter((it) => ignoreAccentsInclude(it.label, searchText))\n .sort((a, b) => a.label.localeCompare(b.label));\n return of(decorateDataSource(ds, searchText));\n } else if (this.instance && this.populateFunction) {\n return this.populateFunction(this.instance, searchText).pipe(\n debounceTime(1),\n first(),\n map((ds) => {\n const dsFiltered = ds\n .filter((it) => ignoreAccentsInclude(it.label, searchText))\n .sort((a, b) => a.label.localeCompare(b.label));\n return decorateDataSource(dsFiltered, searchText);\n })\n );\n } else {\n return of([]);\n }\n }\n}\n\n/** Returns true if text includes substring. No accents considered. Ignorecase */\nconst ignoreAccentsInclude = (text: string, substring: string): boolean => {\n text = normalizedString(text).toLowerCase();\n substring = normalizedString(substring).toLowerCase();\n return text.includes(substring);\n};\n\n/** Returns a normalized string with no accents: used for comparison */\nconst normalizedString = (a: string): string =>\n (a || '').normalize('NFD').replace(/[\\u0300-\\u036f]/g, '');\n\nconst decorateDataSource = (\n dataSource: DataSource<any, string>,\n subString: string\n): DecoratedDataSource => dataSource.map((it) => decorateItem(it, subString));\n\nconst decorateItem = (\n item: DataSourceItem<any, string>,\n tx: string\n): DecoratedDataSourceItem => {\n const index = normalizedString(item.label)\n .toLowerCase()\n .indexOf(normalizedString(tx).toLowerCase());\n const labelPrefix = index === -1 ? item.label : item.label.substr(0, index);\n const labelMatch = index === -1 ? '' : item.label.substr(index, tx.length);\n const labelPostfix = index === -1 ? '' : item.label.substr(index + tx.length);\n const newItem: DecoratedDataSourceItem = {\n ...item,\n labelPrefix,\n labelMatch,\n labelPostfix\n };\n return newItem;\n};\n\nconst findLabelForId = (data: DataSource<any, string>, id: any): string => {\n const found = data.find((it) => it.key === id);\n return found ? found.label : null;\n};\n\nexport const selectElement = (\n completionList: DecoratedDataSource,\n label: string\n): DataSourceItem<any, string> => {\n label = (label || '').toLowerCase();\n if (!completionList || completionList.length === 0) {\n return null;\n }\n if (completionList.length === 1) {\n return completionList[0];\n }\n const found = completionList.find((it) => it.label.toLowerCase() === label);\n return found || completionList[0];\n};\n","/** Language detector based on Navigator preferences */\nexport const languageDetector = (): string => {\n const lang = navigator.language.split('-')[0];\n if (lang === 'es' || lang === 'en') {\n return lang;\n }\n return 'en'; // default\n};\n","import {\n Component,\n EventEmitter,\n forwardRef,\n Input,\n OnInit,\n Output,\n ViewChild\n} from '@angular/core';\nimport {\n AbstractControl,\n ControlValueAccessor,\n NG_VALIDATORS,\n NG_VALUE_ACCESSOR,\n ValidationErrors,\n Validator\n} from '@angular/forms';\nimport { Observable } from 'rxjs';\nimport { first } from 'rxjs/operators';\nimport { AutocompleteComponent } from '../autocomplete/autocomplete.component';\nimport { DataSource } from '../datasource';\nimport { isInitialAndEmpty } from '../helperFns';\nimport { languageDetector } from '../lang';\n\n@Component({\n selector: 'lux-autocomplete-list',\n templateUrl: './autocomplete-list.component.html',\n styleUrls: ['./autocomplete-list.component.scss'],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n multi: true,\n useExisting: forwardRef(() => AutocompleteListComponent)\n },\n {\n provide: NG_VALIDATORS,\n multi: true,\n useExisting: forwardRef(() => AutocompleteListComponent)\n }\n ]\n})\nexport class AutocompleteListComponent\n implements ControlValueAccessor, Validator, OnInit\n{\n static idCounter = 0;\n\n @ViewChild('auto') auto!: AutocompleteListComponent;\n\n literals = {\n en: {\n placeholder: 'new item',\n deleteLabelTemplate: 'Delete <<label>>',\n addMessage: 'Add'\n },\n es: {\n placeholder: 'nuevo elemento',\n deleteLabelTemplate: 'Eliminar <<label>>',\n addMessage: 'Añadir'\n }\n };\n\n public internalDataSource: DataSource<any, string> = [];\n private autoPopulate = false;\n\n private _value: any[] = [];\n @Input()\n set value(val: any[]) {\n if (val === this._value) {\n return;\n }\n const initialAndEmpty = isInitialAndEmpty(this._value, val);\n this._value = val;\n this.ensureLabelsForIds();\n this.populateWith('');\n this.onChange(this._value);\n if (!initialAndEmpty) {\n this.valueChange.emit(this._value);\n }\n }\n get value(): any[] {\n return this._value;\n }\n labels: string[] = [];\n newEntry: any;\n canAdd = false;\n touched = false;\n\n private _lang = languageDetector();\n @Input()\n get lang(): string {\n return this._lang;\n }\n set lang(l: string) {\n if (l === this._lang) {\n return;\n }\n if (Object.keys(this.literals).includes(l)) {\n this._lang = l;\n } else {\n this._lang = 'en';\n }\n }\n\n @Input() inputId: string;\n @Input() dataSource: DataSource<any, any> = [];\n @Input() placeholder?: string;\n @Input() disabled = false;\n @Input() deleteLabelTemplate?: string;\n @Input() addMessage?: string;\n @Input() required = false;\n\n @Input() resolveLabelsFunction?: (\n instance: any,\n ids: any[]\n ) => Observable<DataSource<any, string>> = undefined;\n @Input() populateFunction?: (\n instance: any,\n search: string\n ) => Observable<DataSource<any, string>> = undefined;\n @Input() instance: any;\n\n @Output() valueChange = new EventEmitter<any[]>();\n\n // ControlValueAccessor Interface\n onChange = (value): void => {};\n onTouched = (): void => {};\n\n writeValue(value: any): void {\n this.value = value;\n }\n\n registerOnChange(onChange: any): void {\n this.onChange = onChange;\n }\n registerOnTouched(onTouched: any): void {\n this.onTouched = onTouched;\n }\n markAsTouched(): void {\n if (!this.touched && !this.disabled) {\n this.onTouched();\n this.touched = true;\n }\n }\n setDisabledState(disabled: boolean): void {\n this.disabled = disabled;\n }\n // End ControlValueAccessor Interface\n\n // Validator interface\n registerOnValidatorChange(): void {}\n\n validate(control: AbstractControl): ValidationErrors | null {\n const value = control.value;\n if (\n this.required &&\n (value === '' || value === null || value === undefined)\n ) {\n return { required: { value, reason: 'Required field.' } };\n }\n return null;\n }\n // End of Validator interface\n\n ngOnInit(): void {\n this.inputId = this.inputId\n ? this.inputId\n : `autocompletelist${AutocompleteListComponent.idCounter++}`;\n this.autoPopulate =\n !!this.resolveLabelsFunction && !!this.populateFunction && this.instance;\n this.ensureLabelsForIds();\n }\n ensureLabelsForIds(): void {\n if (this.autoPopulate && this.resolveLabelsFunction) {\n this.resolveLabelsFunction(this.instance, this._value)\n .pipe(first())\n .subscribe((data) => {\n const res: string[] = [];\n (this._value || []).map((id) => {\n const found = data.find((it) => it.key === id);\n if (found) {\n res.push(found.label);\n } else {\n res.push('(unset)');\n }\n });\n this.labels = res;\n });\n } else if (this.dataSource) {\n const res: string[] = [];\n (this._value || []).map((id) => {\n const found = this.dataSource.find((it) => it.key === id);\n if (found) {\n res.push(found.label);\n } else {\n res.push('(unset)');\n }\n });\n this.labels = res;\n } else {\n this.labels = this._value.map((it) => (it ? it.toString() : '(unset)'));\n }\n }\n removeAt(index: number): void {\n if (this._value.length > index) {\n const key = this._value.splice(index, 1)[0];\n const label = this.labels.splice(index, 1)[0];\n this.internalDataSource.push({ key, label });\n }\n this.markAsTouched();\n }\n onValueChange(): void {\n this.updateCanAdd();\n }\n onNewEntryChange(event: KeyboardEvent, auto: AutocompleteComponent): void {\n if (event.key === 'Enter' && !!auto.value) {\n this.addNew(auto);\n } else if (event.key === 'Delete' || event.key === 'Backspace') {\n // todo\n } else {\n this.populateWith(auto.label + event.key);\n }\n this.updateCanAdd();\n }\n populateWith(searchText: string): void {\n if (this.autoPopulate && this.populateFunction && this.instance) {\n this.populateFunction(this.instance, searchText)\n .pipe(first())\n .subscribe((data) => {\n this.internalDataSource = data.filter(\n (it) => !(this._value || []).includes(it.key)\n );\n });\n } else if (this.dataSource) {\n this.internalDataSource = this.dataSource.filter(\n (it) => !(this._value || []).includes(it.key)\n );\n }\n }\n updateCanAdd(): void {\n this.canAdd =\n !this.disabled &&\n this.auto &&\n !!this.auto.value && // has value\n !this.value.find((it) => it === this.auto.value); // not already in\n }\n\n addNew(auto: AutocompleteComponent): void {\n this.value.push(auto.value);\n this.ensureLabelsForIds();\n this.newEntry = '';\n this.internalDataSource = this.internalDataSource.filter(\n (it) => !this._value.includes(it.key)\n );\n this.markAsTouched();\n }\n\n getDeleteMessage(label: string): string {\n return (\n this.deleteLabelTemplate ?? this.literals[this.lang].deleteLabelTemplate\n ).replace('<<label>>', label);\n }\n}\n","import {\n Component,\n Input,\n EventEmitter,\n Output,\n OnInit,\n forwardRef,\n ViewChild,\n ElementRef,\n AfterViewInit\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { isInitialAndEmpty } from '../helperFns';\nimport { languageDetector } from '../lang';\n\nconst KEY_SPACE = ' ';\n\n@Component({\n selector: 'lux-checkbox',\n templateUrl: './checkbox.component.html',\n styleUrls: ['./checkbox.component.scss'],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n multi: true,\n useExisting: forwardRef(() => CheckboxComponent)\n }\n ]\n})\nexport class CheckboxComponent\n implements ControlValueAccessor, OnInit, AfterViewInit\n{\n static idCounter = 0;\n\n @ViewChild('ck', { static: false }) ck: ElementRef;\n\n private _lang = languageDetector();\n @Input()\n set lang(l: string) {\n if (l === this._lang) {\n return;\n }\n if (Object.keys(this.literals).includes(l)) {\n this._lang = l;\n } else {\n this._lang = 'en';\n }\n }\n get lang(): string {\n return this._lang;\n }\n private internalValue: boolean;\n @Input()\n get value(): boolean {\n return this.internalValue;\n }\n set value(v: boolean) {\n if (this.internalValue === v) {\n return;\n }\n const initialAndEmpty = isInitialAndEmpty(this.internalValue, v);\n this.internalValue = v;\n this.syncModel();\n this.onChange(v);\n if (!initialAndEmpty) {\n this.valueChange.emit(v);\n }\n }\n\n get tabindexValue(): string {\n return this.disabled ? null : '0';\n }\n\n @Input() label: string = null;\n @Input() name: string = null;\n private _disabled = false;\n @Input()\n get disabled(): boolean {\n return this._disabled;\n }\n set disabled(v: boolean) {\n if (v === this._disabled) {\n return;\n }\n this._disabled = v;\n this.syncModel();\n }\n @Input() inputId: string;\n\n literals = {\n en: {\n yesLabel: 'Yes',\n noLabel: 'No'\n },\n es: {\n yesLabel: 'Sí',\n noLabel: 'No'\n }\n };\n touched = false;\n\n @Output() valueChange = new EventEmitter<boolean>();\n\n constructor() {}\n\n // ControlValueAccessor Interface\n onChange = (value): void => {};\n onTouched = (): void => {};\n writeValue(value: any): void {\n this.value = !!value;\n }\n registerOnChange(onChange: any): void {\n this.onChange = onChange;\n }\n registerOnTouched(onTouched: any): void {\n this.onTouched = onTouched;\n }\n markAsTouched(): void {\n if (!this.touched) {\n this.onTouched();\n this.touched = true;\n }\n }\n setDisabledState(disabled: boolean): void {\n this.disabled = disabled;\n }\n // End ControlValueAccessor Interface\n\n ngOnInit(): void {\n this.inputId = this.inputId\n ? this.inputId\n : `${this.name || 'checkbox'}$${CheckboxComponent.idCounter++}`;\n }\n ngAfterViewInit(): void {\n this.syncModel();\n }\n\n clicked(): void {\n if (!this.disabled) {\n this.value = !this.internalValue;\n this.markAsTouched();\n }\n }\n onKey(event: KeyboardEvent): void {\n if (event.key === KEY_SPACE && !this.disabled) {\n this.value = !this.internalValue;\n this.markAsTouched();\n event.preventDefault();\n }\n }\n\n private syncModel(): void {\n if (this.ck) {\n this.ck.nativeElement.checked = this.internalValue;\n }\n }\n}\n","import {\n Component,\n Input,\n Output,\n EventEmitter,\n OnInit,\n ElementRef,\n ViewChild,\n forwardRef\n} from '@angular/core';\nimport {\n NG_VALUE_ACCESSOR,\n ControlValueAccessor,\n AbstractControl,\n ValidationErrors,\n Validator,\n NG_VALIDATORS\n} from '@angular/forms';\nimport {\n addTimezoneOffset,\n hasValue,\n isInitialAndEmpty,\n isValidDate\n} from '../helperFns';\nimport { languageDetector } from '../lang';\n@Component({\n selector: 'lux-datetime',\n templateUrl: './datetime.component.html',\n styleUrls: ['./datetime.component.scss'],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n multi: true,\n useExisting: forwardRef(() => DatetimeComponent)\n },\n {\n provide: NG_VALIDATORS,\n multi: true,\n useExisting: forwardRef(() => DatetimeComponent)\n }\n ]\n})\nexport class DatetimeComponent\n implements OnInit, ControlValueAccessor, Validator\n{\n static idCounter = 0;\n\n @ViewChild('dateInput', { static: true }) dateInput: ElementRef;\n @ViewChild('timeInput', { static: true }) timeInput: ElementRef;\n\n touched = false;\n dirty = false;\n lastErrors: ValidationErrors | null = null;\n\n private _disabled: string | boolean;\n private _required: boolean;\n private _value: string;\n\n public dateValue?: string = undefined;\n public timeValue?: string = undefined;\n\n public userErrors = {\n en: {\n required: 'Required field.',\n min: 'Minimum value is $min.',\n max: 'Maximum value is $max.'\n },\n es: {\n required: 'El campo es obligatorio.',\n min: 'El valor mínimo es $min.',\n max: 'El valor máximo es $max.'\n }\n };\n\n @Input()\n public min?: string = '1900-01-01T00:00:00Z';\n @Input()\n public max?: string = '2100-01-01T00:00:00Z';\n @Input()\n public includeSeconds: boolean = true;\n @Input()\n public localTime: boolean = true;\n\n get className(): string {\n return this.checkClassName();\n }\n\n @Input() lang = languageDetector();\n @Input() public inlineErrors = false;\n @Input() public inputId: string;\n @Input('aria-label') public ariaLabel: string;\n @Input() public readonly: boolean | null = null;\n\n @Input()\n set disabled(v: string | boolean) {\n v = typeof v === 'string' && v !== 'false' ? true : v;\n this._disabled = v;\n }\n get disabled(): string | boolean {\n return this._disabled;\n }\n\n @Input()\n set required(v: boolean) {\n this._required = v;\n }\n get required(): boolean {\n return this._required;\n }\n\n @Input()\n set value(v: string) {\n if (v === this._value) {\n return; // prevent events when there is no changes\n }\n const initialAndEmpty = isInitialAndEmpty(this._value, v);\n const datetime = new Date(v);\n if (!v) {\n this._value = null;\n this.setDateInControl(null);\n this.setTimeInControl(null);\n } else if (!isValidDate(datetime)) {\n this._value = v;\n // we don't set value in control if the value is not valid\n // if we do, the content of the control changes and can erase what the user is typing\n } else {\n this._value = datetime.toISOString(); // YYYY-MM-DDThh:mm:ss.SSSZ\n this.setValueInControl(datetime);\n }\n this.onChange(v);\n if (!initialAndEmpty) {\n this.valueChange.emit(v);\n }\n }\n get value(): string {\n return this._value;\n }\n\n @Output() valueChange = new EventEmitter<any>();\n @Output() keyPress = new EventEmitter<KeyboardEvent>();\n\n onChange = (_value): void => {};\n onTouched = (): void => {};\n\n constructor() {}\n\n // ControlValueAccessor Interface implementation\n writeValue(value: any): void {\n this.value = value;\n }\n\n registerOnChange(onChange: any): void {\n this.onChange = onChange;\n }\n\n registerOnTouched(onTouched: any): void {\n this.onTouched = onTouched;\n }\n\n markAsTouched(): void {\n if (!this.touched) {\n this.onTouched();\n this.touched = true;\n }\n }\n\n setDisabledState(disabled: boolean): void {\n this.disabled = disabled;\n }\n // End of ControlValueAccessor Interface implementation\n\n private setDateInControl(date: string): void {\n // this.dateInput.nativeElement.value = date;\n this.dateValue = date;\n }\n private setTimeInControl(time: string): void {\n // this.timeInput.nativeElement.value = time;\n this.timeValue = time;\n }\n private setValueInControl(datetime: Date): void {\n const offsetDatetime = this.localTime\n ? addTimezoneOffset(datetime)\n : datetime;\n const offsetDatetimeString = offsetDatetime.toISOString(); // YYYY-MM-DDThh:mm:ss.SSSZ\n this.setDateInControl(offsetDatetimeString.slice(0, 10)); // YYYY-MM-DD\n if (this.includeSeconds) {\n this.setTimeInControl(offsetDatetimeString.slice(11, 19)); // hh:mm:ss\n } else {\n this.setTimeInControl(offsetDatetimeString.slice(11, 16)); // hh:mm\n }\n }\n clear(): void {\n this.setDateInControl(null);\n this.setTimeInControl(null);\n this.value = null;\n }\n\n // Validator interface\n registerOnValidatorChange(): void {}\n\n validate(control: AbstractControl): ValidationErrors | null {\n const value = control.value;\n let result: ValidationErrors | null = null;\n\n if (\n this.required &&\n !hasValue(value) &&\n !hasValue(this.dateValue) &&\n !hasValue(this.timeValue)\n ) {\n result = result || {};\n result.required = { value, reason: 'Required field.' };\n }\n if (!hasValue(this.dateValue) && hasValue(this.timeValue)) {\n result = result || {};\n result.existsDate = {\n value,\n reason: 'Date not specified.'\n };\n }\n if (hasValue(this.dateValue) && !hasValue(this.timeValue)) {\n result = result || {};\n result.existsTime = {\n value,\n reason: 'Time not specified.'\n };\n }\n if (\n hasValue(this.min) &&\n hasValue(value) &&\n hasValue(this.dateValue) &&\n hasValue(this.timeValue) &&\n String(value).localeCompare(this.min) === -1\n ) {\n result = result || {};\n result.min = {\n value,\n min: this.min,\n reason: `Value is lower than minimum value: ${this.min}.`\n };\n }\n if (\n hasValue(this.max) &&\n hasValue(value) &&\n hasValue(this.dateValue) &&\n hasValue(this.timeValue) &&\n String(value).localeCompare(this.max) !== -1\n ) {\n result = result || {};\n result.max = {\n value,\n max: this.max,\n reason: `Value is greater than than maximum value: ${this.max}.`\n };\n }\n this.lastErrors = result;\n return result;\n }\n // End of Validator interface\n\n ngOnInit(): void {\n this.inputId = this.inputId\n ? this.inputId\n : `datetime$${DatetimeComponent.idCounter++}`;\n this.setPatterns();\n }\n\n onLostFocus(): void {\n this.markAsTouched();\n }\n onKeyPress(event: KeyboardEvent): void {\n this.keyPress.emit(event);\n }\n\n onEventDatetime(newDate: string, newTime: string): void {\n if (this.disabled || this.readonly) {\n return;\n }\n const newValue = '' + newDate + ' ' + newTime;\n if (!newValue) {\n this.value = null;\n } else {\n const datetime = new Date(newValue);\n if (isValidDate(datetime)) {\n let datetimeString;\n if (this.localTime) {\n datetimeString = datetime.toISOString(); // YYYY-MM-DDThh:mm:ss.SSSZ\n } else {\n datetimeString = addTimezoneOffset(datetime).toISOString(); // YYYY-MM-DDThh:mm:ss.SSSZ\n }\n if (this.includeSeconds) {\n this.value = datetimeString.slice(0, 19) + 'Z'; // YYYY-MM-DDThh:mm:ssZ\n } else {\n this.value = datetimeString.slice(0, 16) + 'Z'; // YYYY-MM-DDThh:mmZ\n }\n } else {\n this.value = newValue;\n }\n }\n }\n\n checkClassName(): string {\n return this.disabled\n ? this.readonly\n ? 'disabled readonly'\n : 'disabled'\n : this.readonly\n ? 'readonly'\n : '';\n }\n\n setPatterns(): void {\n this.min = this.min || '1900-01-01';\n this.max = this.max || '2100-01-01';\n }\n}\n","import { Injectable } from '@angular/core';\n\n/**\n * A service that holds the functionality for advanced handling of regular expressions\n */\n@Injectable({ providedIn: 'root' })\nexport class RegexpService {\n constructor() {}\n\n private removeOuterRoundBrackets(regularExpressionString: string): string {\n while (\n regularExpressionString[0] === '(' &&\n regularExpressionString[regularExpressionString.length - 1] === ')'\n ) {\n regularExpressionString = regularExpressionString.slice(\n 1,\n regularExpressionString.length - 1\n );\n }\n return regularExpressionString;\n }\n\n private isQuantifier(quantifier: string): boolean {\n switch (quantifier) {\n case '{':\n case '?':\n case '+':\n case '*':\n return true;\n }\n return false;\n }\n\n private parseMinimalAmountOfQuantifier(quantifier: string): number {\n switch (quantifier[0]) {\n case '?':\n case '*':\n return 0;\n case '+':\n return 1;\n case '{':\n for (let index = 1; index < quantifier.length; ++index) {\n if (quantifier[index] < '0' || quantifier[index] > '9') {\n return Number(quantifier.slice(1, index));\n }\n }\n }\n return 0;\n }\n\n private sliceRegexByOr(regularExpressionString: string): string[] {\n const result = [];\n let slicedRegex = '';\n let lastSliceIndex = 0;\n let roundBracketCount = 0;\n let squareBracketCount = 0;\n let curlyBracketCount = 0;\n let index = 0;\n for (; index < regularExpressionString.length; ++index) {\n switch (regularExpressionString[index]) {\n case '\\\\':\n // escape sequence; skip the next character\n ++index;\n break;\n case '(':\n roundBracketCount += 1;\n break;\n case ')':\n roundBracketCount -= 1;\n break;\n case '[':\n squareBracketCount += 1;\n break;\n case ']':\n squareBracketCount -= 1;\n break;\n case '{':\n curlyBracketCount += 1;\n break;\n case '}':\n curlyBracketCount -= 1;\n break;\n case '|':\n if (\n roundBracketCount === 0 &&\n squareBracketCount === 0 &&\n curlyBracketCount === 0\n ) {\n slicedRegex = this.removeOuterRoundBrackets(\n regularExpressionString.slice(lastSliceIndex, index)\n );\n result.push(slicedRegex);\n lastSliceIndex = index + 1;\n }\n break;\n }\n }\n slicedRegex = this.removeOuterRoundBrackets(\n regularExpressionString.slice(lastSliceIndex, index)\n );\n result.push(slicedRegex);\n return result;\n }\n\n private sliceRegexByThen(regularExpressionString: string): string[][] {\n // the actual result\n const resultStart = [];\n // the remainder of the regex in each case\n const resultRemainder = [];\n let roundBracketCount = 0;\n let squareBracketCount = 0;\n let curlyBracketCount = 0;\n for (let index = 0; index < regularExpressionString.length; ++index) {\n switch (regularExpressionString[index]) {\n case '\\\\':\n // escape sequence; skip the next character\n ++index;\n break;\n case '(':\n roundBracketCount += 1;\n break;\n case ')':\n roundBracketCount -= 1;\n break;\n case '[':\n squareBracketCount += 1;\n break;\n case ']':\n squareBracketCount -= 1;\n break;\n case '{':\n curlyBracketCount += 1;\n break;\n case '}':\n curlyBracketCount -= 1;\n break;\n }\n if (\n roundBracketCount === 0 &&\n squareBracketCount === 0 &&\n curlyBracketCount === 0\n ) {\n if (!this.isQuantifier(regularExpressionString[index + 1])) {\n resultStart.push(regularExpressionString.slice(0, index + 1));\n resultRemainder.push(regularExpressionString.slice(index + 1));\n } else {\n // let minimalAmountOfRepeats = parseMinimalAmountOfQuantifier(regularExpressionString.slice(index + 1));\n // TODO\n }\n }\n }\n return [resultStart, resultRemainder];\n }\n\n suggestion(beginning: string, regularExpressionString: string): string {\n if (new RegExp(regularExpressionString).test(beginning)) {\n // TODO: RETURN AN EMPTY STRING\n return 'YA ES IGUAL, NO HAY MÁS QUE SUGERIR';\n }\n const regexOptions = this.sliceRegexByOr(regularExpressionString);\n if (regexOptions.length > 1) {\n for (\n let regexOptionIndex = 0;\n regexOptionIndex < regexOptions.length;\n ++regexOptionIndex\n ) {\n const regexParts = this.sliceRegexByThen(\n regexOptions[regexOptionIndex]\n );\n const regexPartsStarts = regexParts[0];\n const regexPartsRemainders = regexParts[1];\n // for each option, test if the first part of the regex matches\n // if it doesn't, continue\n // if it does, keep checking until what part it matches\n if (!new RegExp(regexPartsStarts[0]).test(beginning)) {\n // if there are no more options\n if (regexOptionIndex === regexOptions.length - 1) {\n // we return the first option, but we could return any option\n\n // TODO: RETURN ANY TEXT THAT MATCHES regexOptions[0]\n return regexOptions[0];\n }\n } else {\n for (\n let regexPartIndex = 1;\n regexPartIndex < regexPartsStarts.length;\n ++regexPartIndex\n ) {\n if (!new RegExp(regexPartsStarts[regexPartIndex]).test(beginning)) {\n // TODO: RETURN ANY TEXT THAT MATCHES regexPartsRemainders[regexPartIndex - 1]\n return regexPartsRemainders[regexPartIndex - 1];\n }\n }\n }\n }\n } else if (regexOptions.length === 1) {\n const regexParts = this.sliceRegexByThen(regexOptions[0]);\n const regexPartsStarts = regexParts[0];\n const regexPartsRemainders = regexParts[1];\n if (!new RegExp(regexPartsStarts[0]).test(beginning)) {\n // TODO: RETURN ANY TEXT THAT MATCHES regularExpressionString\n return regularExpressionString;\n } else {\n for (\n let regexPartIndex = 1;\n regexPartIndex < regexPartsStarts.length;\n ++regexPartIndex\n ) {\n if (!new RegExp(regexPartsStarts[regexPartIndex]).test(beginning)) {\n // TODO: RETURN ANY TEXT THAT MATCHES regexPartsRemainders[regexPartIndex - 1]\n return regexPartsRemainders[regexPartIndex - 1];\n }\n }\n }\n }\n // TODO: RETURN AN EMPTY STRING\n return 'NO DEBERÍA SER POSIBLE';\n }\n}\n","import {\n Component,\n Input,\n Output,\n EventEmitter,\n OnInit,\n ElementRef,\n ViewChild,\n forwardRef\n} from '@angular/core';\nimport {\n NG_VALUE_ACCESSOR,\n ControlValueAccessor,\n AbstractControl,\n ValidationErrors,\n Validator,\n NG_VALIDATORS\n} from '@angular/forms';\nimport {\n hasValue,\n isInitialAndEmpty,\n isValidEmail,\n isValidNumber,\n normalizeDate\n} from '../helperFns';\nimport { languageDetector } from '../lang';\nimport { RegexpService } from './regexp.service';\n@Component({\n selector: 'lux-input',\n templateUrl: './input.component.html',\n styleUrls: ['./input.component.scss'],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n multi: true,\n useExisting: forwardRef(() => InputComponent)\n },\n {\n provide: NG_VALIDATORS,\n multi: true,\n useExisting: forwardRef(() => InputComponent)\n }\n ]\n})\nexport class InputComponent implements OnInit, ControlValueAccessor, Validator {\n static idCounter = 0;\n\n @ViewChild('input', { static: false }) input: ElementRef;\n @ViewChild('textarea', { static: false }) textarea: ElementRef;\n\n touched = false;\n dirty = false;\n lastErrors: ValidationErrors | null = null;\n\n private _disabled: string | boolean;\n private _value: any = '';\n private _type: string;\n private _placeholder: string;\n private _pattern?: string = undefined;\n private _regexp?: RegExp = undefined;\n private _currency: string;\n private _required: boolean;\n\n public userErrors = {\n en: {\n required: 'Required field.',\n min: 'Minimum value is $min.',\n max: 'Maximum value is $max.',\n email: 'Format should match example@example.com.'\n },\n es: {\n required: 'El campo es obligatorio.',\n min: 'El valor mínimo es $min.',\n max: 'El valor máximo es $max.',\n email: 'El campo debe tener un formato como ejemplo@ejemplo.com.'\n }\n };\n\n public domain: string;\n @Input()\n public rows?: number | string;\n @Input()\n public cols?: number | string;\n @Input()\n public step?: number;\n @Input()\n public min?: number | string;\n @Input()\n public max?: number | string;\n\n get className(): string {\n return this.checkClassName();\n }\n\n @Input() lang = languageDetector();\n @Input() public inlineErrors = false;\n @Input() public inputId: string;\n @Input('aria-label') public ariaLabel: string;\n @Input() public readonly: boolean | null = null;\n\n @Input()\n set disabled(v: string | boolean) {\n v = typeof v === 'string' ? true : v;\n this._disabled = v;\n }\n get disabled(): string | boolean {\n return this._disabled;\n }\n\n @Input()\n set pattern(p: string | undefined) {\n this._pattern = p;\n if (p === undefined) {\n this._regexp = undefined;\n } else {\n try {\n this._regexp = new RegExp(p);\n } catch (e) {\n this._pattern = undefined;\n this._regexp = undefined;\n }\n }\n }\n get pattern(): string | undefined {\n return this._pattern;\n }\n\n @Input()\n set currency(v: string) {\n this._currency = v.toUpperCase();\n }\n get currency(): string {\n return this._currency;\n }\n\n @Input()\n set placeholder(v: string) {\n this._placeholder = v;\n }\n get placeholder(): string {\n return this._placeholder ? this._placeholder : '';\n }\n\n @Input()\n set required(v: boolean) {\n this._required = v;\n }\n get required(): boolean {\n return this._required;\n }\n\n @Input()\n set type(v: string) {\n this._type = v.toLowerCase();\n this.domain = v.toLowerCase();\n this.checkType(v);\n }\n get type(): string {\n return this._type ? this._type : 'text';\n }\n\n @Input()\n set value(v: any) {\n v = v === undefined ? null : v;\n if (v === this._value) {\n return; // prevent events when there is no changes\n }\n const initialAndEmpty = isInitialAndEmpty(this._value, v);\n if (this.type === 'date') {\n v = normalizeDate(v);\n }\n\n this._value = v;\n this.onChange(v);\n if (!initialAndEmpty) {\n this.valueChange.emit(v);\n }\n }\n get value(): any {\n if (this.isPercentage() || this.isPermillage() || this.isNumber()) {\n const numVal = parseFloat(this._value);\n if (!Number.isNaN(numVal)) {\n return numVal;\n }\n }\n return this._value;\n }\n @Output() valueChange = new EventEmitter<any>();\n @Output() keyPress = new EventEmitter<KeyboardEvent>();\n\n onChange = (value): void => {};\n onTouched = (): void => {};\n\n constructor(public regexpService: RegexpService) {}\n\n // ControlValueAccessor Interface implementation\n writeValue(value: any): void {\n this.value = value;\n this.setValueInControl(value);\n }\n\n registerOnChange(onChange: any): void {\n this.onChange = onChange;\n }\n\n registerOnTouched(onTouched: any): void {\n this.onTouched = onTouched;\n }\n\n markAsTouched(): void {\n if (!this.touched) {\n this.onTouched();\n this.touched = true;\n }\n }\n\n setDisabledState(disabled: boolean): void {\n this.disabled = disabled;\n }\n // End of ControlValueAccessor Interface implementation\n\n private setValueInControl(v: any): void {\n if (this.domain === 'date') {\n v = normalizeDate(v);\n }\n if (this.input) {\n this.input.nativeElement.value = v;\n }\n if (this.textarea) {\n this.textarea.nativeElement.value = v;\n }\n }\n\n // Validator interface\n registerOnValidatorChange(): void {}\n\n validate(control: AbstractControl): ValidationErrors | null {\n const value = control.value;\n let result: ValidationErrors | null = null;\n\n if (this.required && !hasValue(value)) {\n result = result || {};\n result.required = { value, reason: 'Required field.' };\n }\n if (this._regexp && hasValue(value) && !this._regexp.test(value)) {\n result = result || {};\n result.pattern = {\n value,\n reason: `Value must follow the pattern: ${this._pattern}`\n };\n }\n if (this.type === 'email' && hasValue(value) && !isValidEmail(value)) {\n result = result || {};\n result.email = { value, reason: 'Invalid email.' };\n }\n if (this.type === 'number' && hasValue(value) && !isValidNumber(value)) {\n result = result || {};\n result.numeric = { value, reason: 'Invalid number.' };\n }\n if (\n this.type === 'date' ||\n this.type === 'time' ||\n this.type === 'timestamp'\n ) {\n if (\n typeof this.min === 'string' &&\n hasValue(value) &&\n String(value).localeCompare(this.min) === -1\n ) {\n result = result || {};\n result.min = {\n value,\n min: this.min,\n reason: `Value is lower than minimum value: ${this.min}.`\n };\n }\n if (\n typeof this.max === 'string' &&\n hasValue(value) &&\n String(value).localeCompare(this.max) !== -1\n ) {\n result = result || {};\n result.max = {\n value,\n max: this.max,\n reason: `Value is greater than than maximum value: ${this.max}.`\n };\n }\n }\n\n if (\n this.type === 'percentage' ||\n this.type === 'permillage' ||\n this.type === 'number' ||\n this.type === 'currency'\n ) {\n if (hasValue(this.min) && hasValue(value) && value < +this.min) {\n result = result || {};\n result.min = {\n value,\n min: this.min,\n reason: `Value is lower than minimum value: ${this.min}.`\n };\n }\n if (hasValue(this.max) && hasValue(value) && value > +this.max) {\n result = result || {};\n result.max = {\n value,\n max: this.max,\n reason: `Value is greater than than maximum value: ${this.max}.`\n };\n }\n }\n this.lastErrors = result;\n return result;\n }\n // End of Validator interface\n\n ngOnInit(): void {\n this.inputId = this.inputId\n ? this.inputId\n : `${this.type}$${InputComponent.idCounter++}`;\n }\n onLostFocus(): void {\n this.markAsTouched();\n }\n onKeyUp(newValue: string): void {\n this.value = newValue;\n }\n onChangeValue(newValue: string): void {\n this.value = newValue;\n this.markAsTouched();\n }\n onKeyPress(event: KeyboardEvent): void {\n this.keyPress.emit(event);\n }\n\n isNumber(): boolean {\n return this.type === 'number';\n }\n isPercentage(): boolean {\n return this.type === 'percentage';\n }\n isPermillage(): boolean {\n return this.type === 'permillage';\n }\n hasPrefix(): boolean {\n return this.currency === 'USD';\n }\n hasPostfix(): boolean {\n return (\n this.currency === 'EUR' || this.isPercentage() || this.isPermillage()\n );\n }\n\n checkClassName(): string {\n return this.disabled\n ? this.readonly\n ? 'disabled readonly'\n : 'disabled'\n : this.readonly\n ? 'readonly'\n : '';\n }\n\n checkType(type: string): void {\n switch (type) {\n case 'email':\n this.setEmailPatterns();\n break;\n case 'date':\n this.setDatePatterns();\n break;\n case 'time':\n this.setTimePatterns();\n break;\n case 'password':\n this.setPasswordPatterns();\n break;\n case 'number':\n this.setNumberPatterns();\n break;\n case 'currency':\n this.setCurrencyPatterns();\n break;\n case 'percentage':\n this.setPercentagePatterns();\n break;\n case 'permillage':\n this.setPermillagePatterns();\n break;\n default:\n break;\n }\n }\n\n setEmailPatterns(): void {}\n\n setDatePatterns(): void {\n this.min = this.min || '1900-01-01';\n this.max = this.max || '2100-01-01';\n }\n\n setTimePatterns(): void {}\n\n setPasswordPatterns(): void {}\n\n setNumberPatterns(): void {\n this.domain = 'number';\n this.placeholder = '0';\n }\n\n setCurrencyPatterns(): void {\n this.domain = 'number';\n this.step = this.step || 0.1;\n this.min = this.min || 0.0;\n this.max = this.max || 10000.0;\n this.value = 0.0;\n }\n\n setPercentagePatterns(): void {\n this.domain = 'number';\n this.step = this.step || 0.01;\n this.min = this.min || 0.0;\n this.max = this.max || 100.0;\n this.placeholder = '0.00';\n }\n\n setPermillagePatterns(): void {\n this.domain = 'number';\n this.step = this.step || 0.01;\n this.min = this.min || 0.0;\n this.max = this.max || 1000.0;\n this.placeholder = '0.00';\n }\n}\n","import {\n Component,\n Input,\n Output,\n EventEmitter,\n OnDestroy,\n OnInit,\n forwardRef\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { Subject, Observable, Subscription } from 'rxjs';\nimport { debounceTime } from 'rxjs/operators';\n\n/** Filter component to query for objects. */\n@Component({\n selector: 'lux-filter',\n templateUrl: './filter.component.html',\n styleUrls: ['./filter.component.scss'],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n multi: true,\n useExisting: forwardRef(() => FilterComponent)\n }\n ]\n})\nexport class FilterComponent\n implements ControlValueAccessor, OnInit, OnDestroy\n{\n static idCounter = 0;\n\n private touched = false;\n private _searchValue = '';\n\n @Input() disabled = false;\n /** id for the input. If left blank, it is autogenerated */\n @Input() inputId: string;\n /** Placeholder default text. */\n @Input() placeholder = '';\n /** Search value introduced by the user. */\n @Input()\n get searchValue(): string {\n return this._searchValue;\n }\n set searchValue(v: string) {\n v = (v || '').toString();\n if (v === this._searchValue) {\n return;\n }\n this.onChange(v);\n this._searchValue = v;\n }\n /** Search on type: (default true) Auto-search when user types in. */\n @Input() searchOnType = true;\n /** Custom aria label in case of not using a label */\n @Input('aria-label') ariaLabel: string;\n\n private debounceValue = 300; // 300 ms\n /** Debounce time in milliseconds. (defaults to 300 ms) */\n @Input()\n set debounce(val: number) {\n this.debounceValue = val;\n this.recreateObservable();\n }\n get debounce(): number {\n return this.debounceValue;\n }\n\n /** Search value changed by user. */\n @Output() searchValueChange = new EventEmitter<string>();\n\n searchValue$: Observable<string>;\n\n private subject = new Subject<string>();\n private sub: Subscription;\n\n constructor() {\n this.recreateObservable();\n }\n\n // ControlValueAccessor Interface\n onChange = (value): void => {};\n onTouched = (): void => {};\n writeValue(value: any): void {\n this.searchValue = (value || '').toString();\n }\n registerOnChange(onChange: any): void {\n this.onChange = onChange;\n }\n registerOnTouched(onTouched: any): void {\n this.onTouched = onTouched;\n }\n markAsTouched(): void {\n if (!this.touched) {\n this.onTouched();\n this.touched = true;\n }\n }\n setDisabledState(disabled: boolean): void {\n this.disabled = disabled;\n }\n // End ControlValueAccessor Interface\n\n ngOnInit(): void {\n this.inputId = this.inputId\n ? this.inputId\n : `filter$${FilterComponent.idCounter++}`;\n }\n ngOnDestroy(): void {\n this.freeSubscriptions();\n }\n clear(): void {\n this.searchValue = '';\n this.search();\n }\n search(): void {\n this.searchValueChange.emit(this.searchValue);\n }\n keyup(event: KeyboardEvent, newValue: string): void {\n this.markAsTouched();\n this.searchValue = newValue;\n if (event.key === 'Enter') {\n this.searchNow(this.searchValue);\n }\n if (this.searchOnType) {\n this.addEvent();\n }\n }\n onInputValueChange(newValue: string): void {\n this.markAsTouched();\n this.searchValue = newValue;\n }\n\n private recreateObservable(): void {\n this.searchValue$ = this.subject\n .asObservable()\n .pipe(debounceTime(this.debounce));\n\n this.freeSubscriptions();\n this.sub = this.searchValue$.subscribe((value) => {\n this.searchValueChange.emit(value);\n });\n }\n private freeSubscriptions(): void {\n if (this.sub) {\n this.sub.unsubscribe();\n this.sub = null;\n }\n }\n private searchNow(value: string): void {\n this.searchValueChange.emit(value);\n }\n private addEvent(): void {\n this.subject.next(this.searchValue);\n }\n}\n","import { ComponentRef } from '@angular/core';\nimport { LuxModalWindowComponent } from './modal-window';\nimport { ContentRef } from './util';\nimport { LuxModalBackdropComponent } from './modal-backdrop';\n\nexport class ActiveModal {\n close(result?: any): void {}\n dismiss(reason?: any): void {}\n}\n\nexport class ModalRef {\n private _resolve: (result?: any) => void;\n private _reject: (reason?: any) => void;\n\n /**\n * The instance of a component used for the modal content.\n *\n * When a `TemplateRef` is used as the content, will return `undefined`.\n */\n get componentInstance(): any {\n if (this._contentRef.componentRef) {\n return this._contentRef.componentRef.instance;\n }\n }\n\n /**\n * The promise that is resolved when the modal is closed and rejected when the modal is dismissed.\n */\n result: Promise<any>;\n\n constructor(\n private _windowCmptRef: ComponentRef<LuxModalWindowComponent>,\n private _contentRef: ContentRef,\n private _backdropCmptRef?: ComponentRef<LuxModalBackdropComponent>,\n private _beforeDismiss?: () => any\n ) {\n _windowCmptRef.instance.dismissEvent.subscribe((reason: any) => {\n this.dismiss(reason);\n });\n\n this.result = new Promise((resolve, reject) => {\n this._resolve = resolve;\n this._reject = reject;\n });\n this.result.then(null, () => {});\n }\n\n /**\n * Closes the modal with an optional `result` value.\n *\n * The `NgbMobalRef.result` promise will be resolved with the provided value.\n */\n close(result?: any): void {\n if (this._windowCmptRef) {\n if (this._resolve) {\n this._resolve(result);\n }\n this._removeModalElements();\n }\n }\n\n private _dismiss(reason?: any): void {\n if (this._reject) {\n this._reject(reason);\n }\n this._removeModalElements();\n }\n\n /**\n * Dismisses the modal with an optional `reason` value.\n *\n * The `NgbModalRef.result` promise will be rejected with the provided value.\n */\n dismiss(reason?: any): void {\n if (this._windowCmptRef) {\n if (!this._beforeDismiss) {\n this._dismiss(reason);\n } else {\n const dismiss = this._beforeDismiss();\n if (dismiss && dismiss.then) {\n dismiss.then(\n (result) => {\n if (result !== false) {\n this._dismiss(reason);\n }\n },\n () => {}\n );\n } else if (dismiss !== false) {\n this._dismiss(reason);\n }\n }\n }\n }\n\n private _removeModalElements(): void {\n const windowNativeEl = this._windowCmptRef.location.nativeElement;\n windowNativeEl.parentNode.removeChild(windowNativeEl);\n this._windowCmptRef.destroy();\n\n if (this._backdropCmptRef) {\n const backdropNativeEl = this._backdropCmptRef.location.nativeElement;\n backdropNativeEl.parentNode.removeChild(backdropNativeEl);\n this._backdropCmptRef.destroy();\n }\n\n if (this._contentRef && this._contentRef.viewRef) {\n this._contentRef.viewRef.destroy();\n }\n\n this._windowCmptRef = null;\n this._backdropCmptRef = null;\n this._contentRef = null;\n }\n}\n","import { ViewRef, ComponentRef } from '@angular/core';\nimport { fromEvent, Observable } from 'rxjs';\nimport { filter, map, takeUntil, withLatestFrom } from 'rxjs/operators';\n\nexport const FOCUS = 'focus';\n\nexport enum Key {\n Tab = 9,\n Enter = 13,\n Escape = 27,\n Space = 32,\n PageUp = 33,\n PageDown = 34,\n End = 35,\n Home = 36,\n ArrowLeft = 37,\n ArrowUp = 38,\n ArrowRight = 39,\n ArrowDown = 40\n}\n\nexport const isDefined = (value: any): boolean =>\n value !== undefined && value !== null;\n\nexport class ContentRef {\n constructor(\n public nodes: any[],\n public viewRef?: ViewRef,\n public componentRef?: ComponentRef<any>\n ) {}\n}\n\nconst FOCUSABLE_ELEMENTS_SELECTOR = [\n 'a[href]',\n 'button:not([disabled])',\n 'input:not([disabled]):not([type=\"hidden\"])',\n 'select:not([disabled])',\n 'textarea:not([disabled])',\n '[contenteditable]',\n '[tabindex]:not([tabindex=\"-1\"])'\n].join(', ');\n\n/**\n * Returns first and last focusable elements inside of a given element based on specific CSS selector\n */\nexport const getFocusableBoundaryElements = (\n element: HTMLElement\n): HTMLElement[] => {\n const list: HTMLElement[] = Array.from(\n element.querySelectorAll(\n FOCUSABLE_ELEMENTS_SELECTOR\n ) as NodeListOf<HTMLElement>\n ).filter((el) => el.tabIndex !== -1);\n return [list[0], list[list.length - 1]];\n};\n\n/**\n * Function that enforces browser focus to be trapped inside a DOM element.\n *\n * Works only for clicks inside the element and navigation with 'Tab', ignoring clicks outside of the element\n *\n * @param element The element around which focus will be trapped inside\n * @param stopFocusTrap$ The observable stream. When completed the focus trap will clean up listeners\n * and free internal resources\n * @param refocusOnClick Put the focus back to the last focused element whenever a click occurs on element (default to\n * false)\n */\nexport const focusTrap = (\n element: HTMLElement,\n stopFocusTrap$: Observable<any>,\n refocusOnClick = false\n): void => {\n // last focused element\n const lastFocusedElement$ = fromEvent<FocusEvent>(element, 'focusin').pipe(\n takeUntil(stopFocusTrap$),\n map((e) => e.target)\n );\n\n // 'tab' / 'shift+tab' stream\n fromEvent<KeyboardEvent>(element, 'keydown')\n .pipe(\n takeUntil(stopFocusTrap$),\n /* eslint-disable import/no-deprecated */\n filter((e) => e.which === Key.Tab),\n /* eslint-enable import/no-deprecated */\n withLatestFrom(lastFocusedElement$)\n )\n .subscribe(([tabEvent, focusedElement]) => {\n const [first, last] = getFocusableBoundaryElements(element);\n\n if (\n (focusedElement === first || focusedElement === element) &&\n tabEvent.shiftKey\n ) {\n last.focus();\n tabEvent.preventDefault();\n }\n\n if (focusedElement === last && !tabEvent.shiftKey) {\n first.focus();\n tabEvent.preventDefault();\n }\n });\n\n // inside click\n if (refocusOnClick) {\n fromEvent(element, 'click')\n .pipe(\n takeUntil(stopFocusTrap$),\n withLatestFrom(lastFocusedElement$),\n map((arr) => arr[1] as HTMLElement)\n )\n .subscribe((lastFocusedElement) => lastFocusedElement.focus());\n }\n};\n","export enum ModalDismissReasons {\n BackdropClick,\n Esc\n}\n","import { DOCUMENT } from '@angular/common';\nimport {\n AfterViewInit,\n Component,\n ElementRef,\n EventEmitter,\n Inject,\n Input,\n OnDestroy,\n OnInit,\n Output,\n HostBinding,\n HostListener\n} from '@angular/core';\n\nimport { getFocusableBoundaryElements, FOCUS } from './util';\nimport { ModalDismissReasons } from './modal-dismiss-reasons';\n\n@Component({\n selector: 'lux-modal-window',\n template: `\n <div class=\"modal-dialog\" role=\"document\">\n <div class=\"modal-content\"><ng-content></ng-content></div>\n </div>\n `\n})\nexport class LuxModalWindowComponent\n implements OnInit, AfterViewInit, OnDestroy\n{\n private _elWithFocus: Element; // element that is focused prior to modal opening\n\n @Input() ariaDescribedBy: string;\n @Input() ariaLabelledBy: string;\n @Input() backdrop: boolean | string = false;\n @Input() keyboard = true;\n @Input() windowClass: string;\n\n @Output() dismissEvent = new EventEmitter();\n\n @HostBinding('class') get class(): string {\n return `modal ${this.windowClass || ''}`;\n }\n @HostBinding('attr.role') role = 'dialog';\n @HostBinding('tabindex') tabindex = '-1';\n @HostBinding('attr.aria-modal') ariamodal = true;\n @HostBinding('attr.aria-labelledby') get hostAriaLabelledBy(): string {\n return this.ariaLabelledBy;\n }\n @HostBinding('attr.aria-describedby') get hostAriaDescribedBy(): string {\n return this.ariaDescribedBy;\n }\n @HostListener('click', ['$event.target']) backdropClick(\n btn: HTMLElement\n ): void {\n if (this.backdrop === true && this._elRef.nativeElement === btn) {\n this.dismiss(ModalDismissReasons.BackdropClick);\n }\n }\n @HostListener('keyup.esc', ['$event']) escKey(event): void {\n if (this.keyboard && !event.defaultPrevented) {\n this.dismiss(ModalDismissReasons.Esc);\n }\n }\n\n constructor(\n @Inject(DOCUMENT) private _document: any,\n private _elRef: ElementRef<HTMLElement>\n ) {}\n\n dismiss(reason): void {\n this.dismissEvent.emit(reason);\n }\n\n ngOnInit(): void {\n this._elWithFocus = this._document.activeElement;\n }\n\n ngAfterViewInit(): void {\n if (!this._elRef.nativeElement.contains(document.activeElement)) {\n const firstFocusable = getFocusableBoundaryElements(\n this._elRef.nativeElement\n )[0];\n\n const elementToFocus = firstFocusable || this._elRef.nativeElement;\n elementToFocus.focus();\n }\n }\n\n ngOnDestroy(): void {\n const body = this._document.body;\n const elWithFocus = this._elWithFocus;\n\n let elementToFocus;\n if (elWithFocus && elWithFocus[FOCUS] && body.contains(elWithFocus)) {\n elementToFocus = elWithFocus;\n } else {\n elementToFocus = body;\n }\n elementToFocus.focus();\n this._elWithFocus = null;\n }\n}\n","import {Component, Input, HostBinding} from '@angular/core';\n\n@Component({\n selector: 'lux-modal-backdrop',\n template: ''\n})\nexport class LuxModalBackdropComponent {\n @Input() backdropClass: string;\n\n @HostBinding('class') class = 'modal-backdrop fade show';\n @HostBinding('style') style = 'z-index: 1050';\n}\n","import { Injectable } from '@angular/core';\n\nexport interface LuxModalOptions {\n ariaDescribedBy?: string;\n ariaLabelledBy?: string;\n backdrop?: boolean;\n keyboard?: boolean;\n windowClass?: string;\n backdropClass?: string;\n}\n\n@Injectable({ providedIn: 'root' })\nexport class LuxModalConfig implements LuxModalOptions {\n backdrop = true;\n}\n","import {\n Injectable,\n ApplicationRef,\n ComponentFactoryResolver,\n TemplateRef,\n ComponentRef,\n Inject,\n Injector,\n RendererFactory2\n} from '@angular/core';\nimport { DOCUMENT } from '@angular/common';\n\nimport { ActiveModal, ModalRef } from './modal-ref';\nimport { ContentRef, focusTrap, isDefined } from './util';\nimport { LuxModalWindowComponent } from './modal-window';\nimport { Subject } from 'rxjs';\nimport { LuxModalBackdropComponent } from './modal-backdrop';\nimport { LuxModalOptions, LuxModalConfig } from './modal-config';\n\n@Injectable({ providedIn: 'root' })\nexport class ModalStack {\n private _activeWindowCmptHasChanged = new Subject();\n private _modalRefs: ModalRef[] = [];\n private _windowCmpts: ComponentRef<LuxModalWindowComponent>[] = [];\n private _ariaHiddenValues: Map<Element, string> = new Map();\n private _backdropAttributes = ['backdropClass'];\n private _windowAttributes = [\n 'ariaLabelledBy',\n 'backdrop',\n 'centered',\n 'keyboard',\n 'scrollable',\n 'size',\n 'windowClass'\n ];\n\n constructor(\n private _applicationRef: ApplicationRef,\n @Inject(DOCUMENT) private _document: any,\n private _injector: Injector,\n private _rendererFactory: RendererFactory2,\n private modalConfig: LuxModalConfig\n ) {\n this._activeWindowCmptHasChanged.subscribe(() => {\n if (this._windowCmpts.length) {\n const activeWindowCmpt =\n this._windowCmpts[this._windowCmpts.length - 1];\n focusTrap(\n activeWindowCmpt.location.nativeElement,\n this._activeWindowCmptHasChanged\n );\n this._revertAriaHidden();\n this._setAriaHidden(activeWindowCmpt.location.nativeElement);\n }\n });\n }\n\n open(\n moduleCFR: ComponentFactoryResolver,\n content: any,\n options: LuxModalOptions\n ): ModalRef {\n const config = Object.assign({}, this.modalConfig, options);\n const containerEl = this._document.body;\n const renderer = this._rendererFactory.createRenderer(null, null);\n const removeBodyClass = (): void => {\n if (!this._modalRefs.length) {\n renderer.removeClass(this._document.body, 'modal-open');\n this._revertAriaHidden();\n }\n };\n const activeModal = new ActiveModal();\n const contentRef = this.getContentRef(moduleCFR, content, activeModal);\n const backdropCmptRef: ComponentRef<LuxModalBackdropComponent> =\n config.backdrop ? this._attachBackdrop(moduleCFR, containerEl) : null;\n const windowCmptRef: ComponentRef<LuxModalWindowComponent> =\n this._attachWindowComponent(moduleCFR, containerEl, contentRef);\n const modalRef: ModalRef = new ModalRef(\n windowCmptRef,\n contentRef,\n backdropCmptRef\n );\n this._registerModalRef(modalRef);\n this._registerWindowCmpt(windowCmptRef);\n modalRef.result.then(removeBodyClass, removeBodyClass);\n activeModal.close = (result: any): void => {\n modalRef.close(result);\n };\n activeModal.dismiss = (reason: any): void => {\n modalRef.dismiss(reason);\n };\n\n this._applyWindowOptions(windowCmptRef.instance, config);\n if (this._modalRefs.length === 1) {\n renderer.addClass(this._document.body, 'modal-open');\n }\n if (backdropCmptRef && backdropCmptRef.instance) {\n this._applyBackgroundOptions(backdropCmptRef.instance, config);\n backdropCmptRef.changeDetectorRef.detectChanges();\n }\n windowCmptRef.changeDetectorRef.detectChanges();\n\n return modalRef;\n }\n\n private _applyWindowOptions(\n windowInstance: LuxModalWindowComponent,\n config: LuxModalOptions\n ): void {\n this._windowAttributes.forEach((optionName: string) => {\n if (isDefined(config[optionName])) {\n windowInstance[optionName] = config[optionName];\n }\n });\n }\n\n private _applyBackgroundOptions(\n backgroudInstance: LuxModalBackdropComponent,\n config: LuxModalOptions\n ): void {\n this._backdropAttributes.forEach((optionName: string) => {\n if (isDefined(config[optionName])) {\n backgroudInstance[optionName] = config[optionName];\n }\n });\n }\n\n private _revertAriaHidden(): void {\n this._ariaHiddenValues.forEach((value, element) => {\n if (value) {\n element.setAttribute('aria-hidden', value);\n } else {\n element.removeAttribute('aria-hidden');\n }\n });\n this._ariaHiddenValues.clear();\n }\n\n private getContentRef(\n moduleCFR: ComponentFactoryResolver,\n content: any,\n activeModal: ActiveModal\n ): ContentRef {\n if (content instanceof TemplateRef) {\n return this.createFromTemplateRef(content, activeModal);\n }\n }\n\n private createFromTemplateRef(\n content: TemplateRef<any>,\n activeModal: ActiveModal\n ): ContentRef {\n const context = {\n $implicit: activeModal,\n // eslint-disable-next-line prefer-arrow/prefer-arrow-functions\n close(result): void {\n activeModal.close(result);\n },\n // eslint-disable-next-line prefer-arrow/prefer-arrow-functions\n dismiss(reason): void {\n activeModal.dismiss(reason);\n }\n };\n const viewRef = content.createEmbeddedView(context);\n this._applicationRef.attachView(viewRef);\n return new ContentRef([viewRef.rootNodes], viewRef);\n }\n\n private _attachBackdrop(\n moduleCFR: ComponentFactoryResolver,\n containerEl: any\n ): ComponentRef<LuxModalBackdropComponent> {\n const backdropFactory = moduleCFR.resolveComponentFactory(\n LuxModalBackdropComponent\n );\n const backdropCmptRef = backdropFactory.create(this._injector);\n this._applicationRef.attachView(backdropCmptRef.hostView);\n containerEl.appendChild(backdropCmptRef.location.nativeElement);\n return backdropCmptRef;\n }\n\n private _attachWindowComponent(\n moduleCFR: ComponentFactoryResolver,\n containerEl: any,\n contentRef: any\n ): ComponentRef<LuxModalWindowComponent> {\n const windowFactory = moduleCFR.resolveComponentFactory(\n LuxModalWindowComponent\n );\n const windowCmptRef = windowFactory.create(\n this._injector,\n contentRef.nodes\n );\n this._applicationRef.attachView(windowCmptRef.hostView);\n containerEl.appendChild(windowCmptRef.location.nativeElement);\n return windowCmptRef;\n }\n\n private _registerModalRef(modalRef: ModalRef): void {\n const unregisterModalRef = (): void => {\n const index = this._modalRefs.indexOf(modalRef);\n if (index > -1) {\n this._modalRefs.splice(index, 1);\n }\n };\n this._modalRefs.push(modalRef);\n modalRef.result.then(unregisterModalRef, unregisterModalRef);\n }\n\n private _registerWindowCmpt(\n windowCmpt: ComponentRef<LuxModalWindowComponent>\n ): void {\n this._windowCmpts.push(windowCmpt);\n this._activeWindowCmptHasChanged.next();\n\n windowCmpt.onDestroy(() => {\n const index = this._windowCmpts.indexOf(windowCmpt);\n if (index > -1) {\n this._windowCmpts.splice(index, 1);\n this._activeWindowCmptHasChanged.next();\n }\n });\n }\n\n private _setAriaHidden(element: Element): void {\n const parent = element.parentElement;\n if (parent && element !== this._document.body) {\n Array.from(parent.children).forEach((sibling) => {\n if (sibling !== element && sibling.nodeName !== 'SCRIPT') {\n this._ariaHiddenValues.set(\n sibling,\n sibling.getAttribute('aria-hidden')\n );\n sibling.setAttribute('aria-hidden', 'true');\n }\n });\n this._setAriaHidden(parent);\n }\n }\n}\n","import {\n Injectable,\n ComponentFactoryResolver,\n TemplateRef,\n} from '@angular/core';\nimport { ModalStack } from './modal-stack';\nimport { ModalRef } from './modal-ref';\nimport { LuxModalOptions } from './modal-config';\n\n/**\n * A service that it allow open an close modal components\n */\n@Injectable({ providedIn: 'root' })\nexport class ModalService {\n constructor(\n private modalStack: ModalStack,\n private moduleCFR: ComponentFactoryResolver\n ) {}\n\n /**Open a modal component\n * @param content TemplateRef\n */\n open(content: TemplateRef<any>, options: LuxModalOptions = {}): ModalRef {\n return this.modalStack.open(this.moduleCFR, content, options);\n }\n}\n","import { HttpClient } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\nimport { DataSource } from '../datasource';\nimport { Observable, of, Subject } from 'rxjs';\nimport {\n debounceTime,\n distinctUntilChanged,\n map,\n switchMap\n} from 'rxjs/operators';\nimport { GeoPoint } from '../map/geopoint';\n\ninterface SearchResult {\n place_id: number;\n lat: number;\n lon: number;\n display_name: string;\n icon: string;\n}\n\n@Injectable({ providedIn: 'root' })\nexport class GeolocationService {\n private debouncePeriodMs = 300; // ms\n private cacheSize = 20;\n private lastQueriesWithResults = new Map<string, SearchResult[]>();\n private lastQueriesLru: string[] = [];\n private currentSearch$: Subject<string>;\n private currentQuery$: Observable<SearchResult[]>;\n\n constructor(private http: HttpClient) {\n this.currentSearch$ = new Subject<string>();\n\n const typed$ = this.currentSearch$\n .asObservable()\n .pipe(distinctUntilChanged());\n\n this.currentQuery$ = typed$.pipe(\n debounceTime(this.debouncePeriodMs),\n\n switchMap((currentQuery) => {\n const data = this.getFromCache(currentQuery);\n if (data !== undefined) {\n return of(data);\n }\n // Nominatim search documentation:\n // https://nominatim.org/release-docs/develop/api/Search/\n const url =\n 'https://nominatim.openstreetmap.org/search?format=json&limit=20&q=' +\n encodeURIComponent(currentQuery);\n const headers = {\n 'Content-Type': 'application/json'\n };\n this.addToCache(currentQuery, []);\n\n return this.http.get(url, { headers }).pipe(\n map((response) => {\n const searchResults = response as unknown as SearchResult[];\n const uniqueResults = distinct(searchResults);\n return this.addToCache(currentQuery, uniqueResults);\n })\n );\n })\n );\n }\n\n searchGeolocation(query: string): Observable<SearchResult[]> {\n this.currentSearch$.next(query);\n return this.currentQuery$;\n }\n\n getLabels(\n instance: GeolocationService,\n keys: GeoPoint[]\n ): Observable<DataSource<GeoPoint, string>> {\n const searchResults = instance.lastQueriesWithResults\n .get(instance.getLatestQuery())\n .filter((searchResult) => samePosition(searchResult, keys));\n return of(\n searchResults.map((searchResult) => {\n const key: GeoPoint = {\n type: 'Point',\n coordinates: [searchResult.lon, searchResult.lat]\n };\n return {\n key,\n label: searchResult.display_name\n };\n })\n );\n }\n\n getData(\n instance: GeolocationService,\n search: string\n ): Observable<DataSource<GeoPoint, string>> {\n return instance.searchGeolocation(search).pipe(\n map((searchResults) =>\n searchResults.map((searchResult) => {\n const key: GeoPoint = {\n type: 'Point',\n coordinates: [searchResult.lon, searchResult.lat]\n };\n const label = searchResult.display_name;\n return { key, label };\n })\n )\n );\n }\n\n // Cache implemementation ---\n private getFromCache(query: string): SearchResult[] {\n if (this.lastQueriesWithResults.has(query)) {\n return this.lastQueriesWithResults.get(query);\n }\n return undefined;\n }\n private addToCache(query: string, data: SearchResult[]): SearchResult[] {\n if (this.lastQueriesWithResults.keys.length >= this.cacheSize) {\n const deletedQuery = this.lastQueriesLru[0];\n this.revomeFromCache(deletedQuery);\n }\n this.lastQueriesWithResults.set(query, data);\n this.lastQueriesLru.push(query);\n return data;\n }\n private revomeFromCache(query: string): void {\n this.lastQueriesWithResults.delete(query);\n const index = this.lastQueriesLru.findIndex((it) => it === query);\n this.lastQueriesLru.splice(index, 1);\n }\n private getLatestQuery(): string | null {\n return this.lastQueriesLru.length\n ? this.lastQueriesLru[this.lastQueriesLru.length - 1]\n : null;\n }\n // End cache implemementation ---\n}\n\nconst samePosition = (\n searchResult: SearchResult,\n keys: GeoPoint[]\n): boolean => {\n let found = false;\n keys.forEach((item) => {\n if (\n searchResult.lon === item.coordinates[0] &&\n searchResult.lat === item.coordinates[1]\n ) {\n found = true;\n }\n });\n return found;\n};\n\nconst distinct = (data: SearchResult[]): SearchResult[] => {\n const unique: { [key: string]: number } = {};\n return data.filter((r) => {\n if (unique[r.display_name]) {\n return false;\n }\n unique[r.display_name] = 1;\n return true;\n });\n};\n","import {\n Component,\n ElementRef,\n EventEmitter,\n forwardRef,\n Input,\n OnInit,\n Output,\n TemplateRef,\n ViewChild\n} from '@angular/core';\nimport {\n AbstractControl,\n NG_VALIDATORS,\n NG_VALUE_ACCESSOR,\n ValidationErrors\n} from '@angular/forms';\nimport { Observable } from 'rxjs';\nimport { DataSource } from '../datasource';\nimport {\n exists,\n hasValue,\n isInitialAndEmpty,\n isValidNumber,\n roundToMultipleOf\n} from '../helperFns';\nimport { languageDetector } from '../lang';\nimport { GeoPoint } from '../map/geopoint';\nimport { ModalService } from '../modal/modal.service';\nimport { GeolocationService } from './geolocation.service';\n\n@Component({\n selector: 'lux-geolocation',\n templateUrl: './geolocation.component.html',\n styleUrls: ['./geolocation.component.scss'],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n multi: true,\n useExisting: forwardRef(() => GeolocationComponent)\n },\n {\n provide: NG_VALIDATORS,\n multi: true,\n useExisting: forwardRef(() => GeolocationComponent)\n }\n ]\n})\nexport class GeolocationComponent implements OnInit {\n static idCounter = 0;\n\n @ViewChild('latitude', { static: true }) latitude: ElementRef;\n @ViewChild('longitude', { static: true }) longitude: ElementRef;\n @ViewChild('map', { static: false }) map?: ElementRef;\n\n touched = false;\n dirty = false;\n lastErrors: ValidationErrors | null = null;\n\n private _disabled: string | boolean;\n private _required: boolean;\n private _value: any;\n\n latitudeValue?: number = undefined;\n longitudeValue?: number = undefined;\n\n isValidNumber = isValidNumber;\n\n i18n = {\n en: {\n lat: 'latitude',\n lon: 'longitude',\n selectLocation: 'Select location',\n location: 'Location',\n selectAction: 'Select',\n cancelAction: 'Cancel',\n closeAction: 'Close',\n typeToSearch: 'type to search',\n cardinalPoints: {\n north: 'N',\n south: 'S',\n east: 'E',\n west: 'W'\n },\n userErrors: {\n required: 'Required field.',\n minLatitude: 'Minimum latitude is $minLatitude.',\n maxLatitude: 'Maximum latitude is $maxLatitude.',\n minLongitude: 'Minimum longitude is $minLongitude.',\n maxLongitude: 'Maximum longitude is $maxLongitude.'\n }\n },\n es: {\n lat: 'latitud',\n lon: 'longitud',\n selectLocation: 'Seleccione ubicación',\n location: 'Ubicación',\n selectAction: 'Seleccionar',\n cancelAction: 'Cancelar',\n closeAction: 'Cerrar',\n typeToSearch: 'escribe para buscar',\n cardinalPoints: {\n north: 'N',\n south: 'S',\n east: 'E',\n west: 'O'\n },\n userErrors: {\n required: 'El campo es obligatorio.',\n minLatitude: 'La latitud mínima es $minLatitude.',\n maxLatitude: 'La latitud máxima es $maxLatitude.',\n minLongitude: 'La longitud mínima es $minLongitude.',\n maxLongitude: 'La longitud máxima es $maxLongitude.'\n }\n }\n };\n\n @Input()\n public minLatitude: number;\n @Input()\n public maxLatitude: number;\n @Input()\n public minLongitude: number;\n @Input()\n public maxLongitude: number;\n @Input()\n public step: number;\n @Input()\n public zoom: number;\n\n get className(): string {\n return this.checkClassName();\n }\n\n @Input() lang = languageDetector();\n @Input() public inlineErrors = false;\n @Input() public inputId: string;\n @Input('aria-label') public ariaLabel: string;\n @Input() public readonly: boolean | null = null;\n\n @Input()\n set disabled(v: string | boolean) {\n v = typeof v === 'string' && v !== 'false' ? true : v;\n this._disabled = v;\n }\n get disabled(): string | boolean {\n return this._disabled;\n }\n\n @Input()\n set required(v: boolean) {\n this._required = v;\n }\n get required(): boolean {\n return this._required;\n }\n\n @Input()\n set value(v: GeoPoint) {\n if (v === this._value) {\n return; // prevent events when there is no changes\n }\n const initialAndEmpty = isInitialAndEmpty(this._value, v);\n if (\n v &&\n v.coordinates &&\n v.coordinates.length === 2 &&\n exists(v.coordinates[0] && exists(v.coordinates[1]))\n ) {\n this._value = v;\n this.setLatitudeInControl(v.coordinates[1]);\n this.setLongitudeInControl(v.coordinates[0]);\n } else if (!v) {\n this._value = null;\n this.setLatitudeInControl(null);\n this.setLongitudeInControl(null);\n } else {\n this._value = v;\n // we don't set value in control if the value is not valid\n // if we do, the content of the control changes and can erase what the user is typing\n }\n this.onChange(v);\n if (!initialAndEmpty) {\n this.valueChange.emit(v);\n }\n }\n get value(): GeoPoint {\n return this._value;\n }\n\n @Output() valueChange = new EventEmitter<GeoPoint>();\n @Output() keyPress = new EventEmitter<KeyboardEvent>();\n\n onChange = (value: any): void => {};\n onTouched = (): void => {};\n\n constructor(\n private modalService: ModalService,\n public locationService: GeolocationService\n ) {}\n\n // ControlValueAccessor Interface implementation\n writeValue(value: any): void {\n this.value = value;\n }\n\n registerOnChange(onChange: any): void {\n this.onChange = onChange;\n }\n\n registerOnTouched(onTouched: any): void {\n this.onTouched = onTouched;\n }\n\n markAsTouched(): void {\n if (!this.touched) {\n this.onTouched();\n this.touched = true;\n }\n }\n\n setDisabledState(disabled: boolean): void {\n this.disabled = disabled;\n }\n // End of ControlValueAccessor Interface implementation\n\n private setLatitudeInControl(latitude: number): void {\n // this.latitude.nativeElement.value = latitude;\n this.latitudeValue = latitude;\n }\n private setLongitudeInControl(longitude: number): void {\n // this.longitude.nativeElement.value = longitude;\n this.longitudeValue = longitude;\n }\n clear(): void {\n this.setLatitudeInControl(null);\n this.setLongitudeInControl(null);\n this.value = null;\n }\n\n // Validator interface\n registerOnValidatorChange(): void {}\n\n validate(control: AbstractControl): ValidationErrors | null {\n const value = control.value;\n let result: ValidationErrors | null = null;\n\n if (\n this.required &&\n !hasValue(value) &&\n !exists(this.latitudeValue) &&\n !exists(this.longitudeValue)\n ) {\n result = result || {};\n result.required = { value, reason: 'Required field.' };\n }\n if (!exists(this.latitudeValue) && exists(this.longitudeValue)) {\n result = result || {};\n result.existsLatitude = {\n value,\n reason: 'Latitude not specified.'\n };\n }\n if (exists(this.latitudeValue) && !exists(this.longitudeValue)) {\n result = result || {};\n result.existsLongitude = {\n value,\n reason: 'Longitude not specified.'\n };\n }\n if (exists(this.minLatitude) && this.latitudeValue < this.minLatitude) {\n result = result || {};\n result.minLatitude = {\n value,\n min: this.minLatitude,\n reason: `Latitude is lower than minimum value: ${this.minLatitude}.`\n };\n }\n if (exists(this.maxLatitude) && this.latitudeValue > this.maxLatitude) {\n result = result || {};\n result.maxLatitude = {\n value,\n max: this.maxLatitude,\n reason: `Latitude is higher than maximum value: ${this.maxLatitude}.`\n };\n }\n if (exists(this.minLongitude) && this.longitudeValue < this.minLongitude) {\n result = result || {};\n result.minLongitude = {\n value,\n min: this.minLongitude,\n reason: `Longitude is lower than minimum value: ${this.minLongitude}.`\n };\n }\n if (exists(this.maxLongitude) && this.longitudeValue > this.maxLongitude) {\n result = result || {};\n result.maxLongitude = {\n value,\n max: this.maxLongitude,\n reason: `Longitude is higher than maximum value: ${this.maxLongitude}.`\n };\n }\n this.lastErrors = result;\n return result;\n }\n // End of Validator interface\n\n ngOnInit(): void {\n this.inputId = this.inputId\n ? this.inputId\n : `geolocation$${GeolocationComponent.idCounter++}`;\n this.setPatterns();\n }\n\n roundToStepAndUpdateLatitudeAndLongitude(\n newLatitudeAndLongitude: number[]\n ): void {\n const newLatitude = roundToMultipleOf(\n newLatitudeAndLongitude[1],\n this.step\n );\n const newLongitude = roundToMultipleOf(\n newLatitudeAndLongitude[0],\n this.step\n );\n if (this.disabled || this.readonly) {\n return;\n }\n if (!exists(newLatitudeAndLongitude)) {\n this.value = null;\n }\n this.value = {\n type: 'Point',\n coordinates: [newLongitude, newLatitude]\n };\n }\n\n onLostFocus(): void {\n this.markAsTouched();\n }\n onEventLatitude(newLatitude: string): void {\n if (this.disabled || this.readonly) {\n return;\n }\n const newLatitudeValue = isValidNumber(newLatitude) ? +newLatitude : null;\n if (\n !(exists(this.value) && exists(this.value.coordinates[0])) &&\n !exists(newLatitudeValue)\n ) {\n this.value = null;\n } else {\n this.value = {\n type: 'Point',\n coordinates: [\n this.value ? this.value.coordinates[0] : undefined,\n newLatitudeValue\n ]\n };\n }\n this.markAsTouched();\n }\n onEventLongitude(newLongitude: string): void {\n if (this.disabled || this.readonly) {\n return;\n }\n const newLongitudeValue = isValidNumber(newLongitude)\n ? +newLongitude\n : null;\n if (\n !exists(newLongitudeValue) &&\n !(exists(this.value) && exists(this._value.coordinates[1]))\n ) {\n this.value = null;\n } else {\n this.value = {\n type: 'Point',\n coordinates: [\n newLongitudeValue,\n this.value ? this.value.coordinates[1] : undefined\n ]\n };\n }\n this.markAsTouched();\n }\n onKeyPress(event: KeyboardEvent): void {\n this.keyPress.emit(event);\n }\n\n checkClassName(): string {\n return this.disabled\n ? this.readonly\n ? 'disabled readonly'\n : 'disabled'\n : this.readonly\n ? 'readonly'\n : '';\n }\n\n openModalMap(modal: TemplateRef<any>): void {\n this.modalService.open(modal).result.then(\n (result) => {\n if (result !== 'cancel') {\n this.roundToStepAndUpdateLatitudeAndLongitude(result);\n }\n },\n (_) => {}\n );\n }\n\n onSearchLocationChanged(newValue: GeoPoint, map: any): void {\n map.markerPoint = newValue;\n map.center = map.markerPoint;\n }\n\n get mapTitle(): string {\n return this._disabled || !!this.readonly\n ? this.i18n[this.lang].location\n : this.i18n[this.lang].selectLocation;\n }\n\n get self(): GeolocationComponent {\n return this;\n }\n\n getLabels(\n instance: GeolocationComponent,\n keys: GeoPoint[]\n ): Observable<DataSource<GeoPoint, string>> {\n return instance.locationService.getLabels(instance.locationService, keys);\n }\n\n getData(\n instance: GeolocationComponent,\n search: string\n ): Observable<DataSource<GeoPoint, string>> {\n return instance.locationService.getData(instance.locationService, search);\n }\n\n setPatterns(): void {\n this.step = this.step || 0.00001; // 0.00001 degrees = 1.11 meters\n this.zoom = this.zoom || 18; // (360/2^18) degrees ~ 0.00137 degrees ~ 153 meters\n this.minLatitude = this.minLatitude || -90;\n this.maxLatitude = this.maxLatitude || +90;\n this.minLongitude = this.minLongitude || -180;\n this.maxLongitude = this.maxLongitude || +180;\n }\n}\n","export enum Placement {\n Top = 'top',\n Bottom = 'bottom',\n Left = 'left',\n Right = 'right'\n}\nexport type PlacementValue = 'left' | 'right' | 'top' | 'bottom';\n","import { Component, Input } from '@angular/core';\nimport { LuxTooltipContext } from './tooltip-context';\n\n/**\n * Default Tooltip Component\n */\n@Component({\n template: `\n <span class=\"lux-tooltip\" style=\"transition: opacity 200ms\">{{context.message}}</span>\n `\n})\nexport class TooltipComponent {\n\n @Input() context: LuxTooltipContext;\n\n constructor() { }\n\n}\n","import { ViewRef, ComponentRef } from '@angular/core';\n\nexport class TooltipContentRef {\n constructor(public viewRef?: ViewRef, public componentRef?: ComponentRef<any>) {}\n}\n","import {\n Injectable,\n Injector,\n ComponentRef,\n ComponentFactoryResolver,\n ApplicationRef,\n EmbeddedViewRef,\n ElementRef,\n TemplateRef\n} from '@angular/core';\n\nimport { PlacementValue, Placement } from './placement';\nimport { LuxTooltipContext } from './tooltip-context';\nimport { TooltipComponent } from './tooltip.component';\nimport { TooltipContentRef } from './tooltop-content';\n\n@Injectable()\nexport class TooltipService {\n constructor(\n private _injector: Injector,\n private _crf: ComponentFactoryResolver,\n private _applicationRef: ApplicationRef\n ) {}\n\n appendComponentToBody(\n content: any,\n elHost: ElementRef,\n placement: PlacementValue\n ): TooltipContentRef {\n const tooltipContentRef = this.getTooltipContentRef(content);\n if (tooltipContentRef) {\n let domElem = (tooltipContentRef.viewRef as EmbeddedViewRef<any>)\n .rootNodes[0];\n document.body.appendChild(domElem);\n if (tooltipContentRef.componentRef) {\n tooltipContentRef.componentRef.changeDetectorRef.detectChanges();\n }\n domElem = this.setStyle(domElem, placement);\n domElem = this.setPosition(domElem, elHost, placement);\n return tooltipContentRef;\n }\n return null;\n }\n\n removeComponentFromBody(tooltipContentRef: TooltipContentRef): void {\n this._applicationRef.detachView(tooltipContentRef.viewRef);\n if (tooltipContentRef.componentRef) {\n tooltipContentRef.componentRef.destroy();\n }\n }\n\n private getTooltipContentRef(content: any): TooltipContentRef {\n if (!content) {\n // nothing to show\n } else if (content instanceof TemplateRef) {\n return this.createFromTemplateRef(content);\n } else if (typeof content === 'string') {\n return this.createFromComponent(TooltipComponent, { message: content });\n } else {\n return this.createFromComponent(content);\n }\n }\n\n private createFromTemplateRef(content: TemplateRef<any>): TooltipContentRef {\n const viewRef = content.createEmbeddedView({});\n this._applicationRef.attachView(viewRef);\n return new TooltipContentRef(viewRef);\n }\n\n private createFromComponent(\n component: any,\n context?: LuxTooltipContext\n ): TooltipContentRef {\n const componentRef: ComponentRef<any> = this._crf\n .resolveComponentFactory(component)\n .create(this._injector);\n if (context) {\n componentRef.instance.context = context;\n }\n this._applicationRef.attachView(componentRef.hostView);\n return new TooltipContentRef(componentRef.hostView, componentRef);\n }\n\n private setStyle(\n domElem: HTMLElement,\n placement: PlacementValue\n ): HTMLElement {\n domElem.style.position = 'absolute';\n domElem.style.minWidth = 'min-content';\n domElem.style.minHeight = 'min-content';\n const tooltipElement = this.getTooltipElementFromHTMLElemnt(domElem);\n placement =\n placement !== undefined\n ? (placement.toLocaleLowerCase() as PlacementValue)\n : 'top'; // 'Top' is the default value of placement\n tooltipElement.classList.add(`lux-tooltip-${placement}`);\n tooltipElement.classList.add('lux-tooltip-show');\n return domElem;\n }\n\n private getTooltipElementFromHTMLElemnt(domElem: HTMLElement): any {\n const elementsArray = Array.from(domElem.classList).filter(\n (className) => className === 'lux-tooltip'\n );\n if (elementsArray.length !== 0) {\n return domElem;\n } else if (domElem.hasChildNodes()) {\n const childrenArray = Array.from(domElem.children).filter(\n (child) =>\n this.getTooltipElementFromHTMLElemnt(child as HTMLElement) !== null\n );\n if (childrenArray.length !== 0) {\n return this.getTooltipElementFromHTMLElemnt(\n childrenArray[0] as HTMLElement\n );\n } else {\n return null;\n }\n } else {\n return null;\n }\n }\n\n private setPosition(\n domElem: HTMLElement,\n elHost: ElementRef,\n placement: PlacementValue\n ): HTMLElement {\n const hostPos = elHost.nativeElement.getBoundingClientRect();\n const tooltipPos = domElem.getBoundingClientRect();\n const scrollPos =\n window.pageYOffset ||\n document.documentElement.scrollTop ||\n document.body.scrollTop ||\n 0;\n let top = 0;\n let left = 0;\n const offset = 10;\n\n switch (placement) {\n case Placement.Bottom:\n top = hostPos.bottom + offset;\n left = hostPos.left + (hostPos.width - tooltipPos.width) / 2;\n break;\n case Placement.Left:\n top = hostPos.top + (hostPos.height - tooltipPos.height) / 2;\n left = hostPos.left - tooltipPos.width - offset;\n break;\n case Placement.Right:\n top = hostPos.top + (hostPos.height - tooltipPos.height) / 2;\n left = hostPos.right + offset;\n break;\n case Placement.Top:\n default:\n top = hostPos.top - tooltipPos.height - offset;\n left = hostPos.left + (hostPos.width - tooltipPos.width) / 2;\n break;\n }\n top = Math.max(0, top);\n left = Math.max(0, left);\n domElem.style.top = `${top + scrollPos}px`;\n domElem.style.left = `${left}px`;\n return domElem;\n }\n}\n","import { HostListener, Input, Directive, ElementRef } from '@angular/core';\n\nimport { TooltipService } from './tooltip.service';\nimport { PlacementValue } from './placement';\nimport { TooltipContentRef } from './tooltop-content';\n\n/**\n * Tooltip directive\n */\n@Directive({\n selector: '[luxTooltip]'\n})\nexport class LuxTooltipDirective {\n /** Tooltip title */\n @Input() luxTooltip: any;\n\n /** Component, TemplateRef or String */\n @Input() content: any;\n\n /** Placement */\n @Input() placement: PlacementValue;\n\n tooltipRef: TooltipContentRef;\n\n constructor(\n private elHost: ElementRef,\n private tooltipService: TooltipService\n ) {}\n\n @HostListener('mouseenter') onMouseEnter(): void {\n if (!this.tooltipRef) {\n this.tooltipRef = this.show(this.content, this.elHost, this.placement);\n }\n }\n\n @HostListener('mouseleave') onMouseLeave(): void {\n if (this.tooltipRef) {\n this.remove(this.tooltipRef);\n this.tooltipRef = null;\n }\n }\n\n @HostListener('click') onClick(): void {\n if (this.tooltipRef) {\n this.remove(this.tooltipRef);\n this.tooltipRef = null;\n }\n }\n\n show(\n component: any,\n elHost: ElementRef,\n placement: PlacementValue\n ): TooltipContentRef {\n return this.tooltipService.appendComponentToBody(\n component,\n elHost,\n placement\n );\n }\n\n remove(tooltipRef: TooltipContentRef): void {\n this.tooltipService.removeComponentFromBody(tooltipRef);\n }\n}\n","import { Component, OnInit, OnDestroy, Inject } from '@angular/core';\nimport {\n Router,\n NavigationEnd,\n ActivatedRoute,\n ActivatedRouteSnapshot\n} from '@angular/router';\nimport { filter } from 'rxjs/operators';\nimport { Subscription } from 'rxjs';\n\nexport interface BreadcrumbItem {\n label: string;\n url: string;\n}\n@Component({\n selector: 'lux-breadcrumb',\n templateUrl: './breadcrumb.component.html',\n styleUrls: ['./breadcrumb.component.scss']\n})\nexport class LuxBreadcrumbComponent implements OnInit, OnDestroy {\n public breadcrumbs: BreadcrumbItem[];\n private subs: Subscription[] = [];\n public imagePath = '../assets/img/arrow-forward.svg';\n\n constructor(private route: Router, private activedRoute: ActivatedRoute) {}\n\n ngOnInit(): void {\n this.subs.push(\n this.route.events\n .pipe(filter((event) => event instanceof NavigationEnd))\n .subscribe((_) => {\n this.breadcrumbs = [];\n this.addBreadcrumbs(this.activedRoute.snapshot.root, true, null);\n })\n );\n }\n\n ngOnDestroy(): void {\n this.subs.forEach((s) => s.unsubscribe());\n this.subs = [];\n }\n\n private addBreadcrumbs(\n activedRouteSnapshot: ActivatedRouteSnapshot,\n isRoot: boolean,\n urlPrefix: string\n ): void {\n const routeConfig = activedRouteSnapshot.routeConfig;\n let url = urlPrefix || '';\n url += routeConfig ? '/' + this.getUrl(activedRouteSnapshot) : '';\n const label = routeConfig\n ? this.getLabel(activedRouteSnapshot)\n : isRoot\n ? 'Home'\n : '';\n if (label && url !== '/') {\n const breadcrumb = { label, url };\n this.breadcrumbs.push(breadcrumb);\n }\n if (activedRouteSnapshot.children.length) {\n this.addBreadcrumbs(activedRouteSnapshot.children[0], false, url);\n }\n }\n\n private getUrl(activedRouteSnapshot: ActivatedRouteSnapshot): string {\n if (!activedRouteSnapshot.url[0]) {\n return '';\n }\n const id = activedRouteSnapshot.params.id;\n return id\n ? `${activedRouteSnapshot.url[0]}/${id}`\n : activedRouteSnapshot.routeConfig.path || '';\n }\n\n private getLabel(activedRouteSnapshot: ActivatedRouteSnapshot): string {\n const routeConfig = activedRouteSnapshot.routeConfig;\n if (!routeConfig) {\n return null;\n }\n if (activedRouteSnapshot.data && activedRouteSnapshot.data.title) {\n const data = activedRouteSnapshot.data;\n if (data.objectTitle) {\n return `${data.title} ${data.objectTitle}`;\n } else {\n return data.title;\n }\n }\n return activedRouteSnapshot.params.id || routeConfig.path;\n }\n}\n","import { Injectable } from '@angular/core';\nimport { from, Observable, of } from 'rxjs';\n\nlet openLayersIsInstalled = false;\n\n@Injectable({ providedIn: 'root' })\nexport class OpenLayerLoaderService {\n load(): Observable<boolean> {\n if ((window as any).ol) {\n return of(true);\n }\n\n const openLayerJsUrl = 'https://openlayers.org/en/v5.3.0/build/ol.js';\n const openLayerCssUrl = 'https://openlayers.org/en/v5.3.0/css/ol.css';\n\n if (!openLayersIsInstalled) {\n openLayersIsInstalled = true; // only try to install it once\n loadCss(openLayerCssUrl, () => {});\n return from(\n new Promise<boolean>((resolve, _) => {\n loadScript(openLayerJsUrl, () => resolve(true));\n })\n );\n }\n return of(true);\n }\n}\n\n/** Dynamically load a script from url and return a callback */\nconst loadScript = (url: string, callback: () => void): void => {\n const script: any = document.createElement('script');\n script.type = 'text/javascript';\n\n if (script.readyState) {\n // for old IE\n script.onreadystatechange = (): void => {\n if (script.readyState === 'loaded' || script.readyState === 'complete') {\n script.onreadystatechange = null;\n callback();\n }\n };\n } else {\n // Others browsers\n script.onload = (): void => {\n callback();\n };\n }\n script.src = url;\n document.getElementsByTagName('head')[0].appendChild(script);\n};\n\n/** Dynamically load css from url and return a callback */\nconst loadCss = (url: string, callback: () => void): void => {\n const link: any = document.createElement('link');\n link.type = 'text/css';\n link.rel = 'stylesheet';\n link.type = 'text/javascript';\n link.href = url;\n link.onload = (): void => {\n callback();\n };\n document.getElementsByTagName('head')[0].appendChild(link);\n};\n","import {\n Component,\n Input,\n Output,\n EventEmitter,\n OnInit,\n AfterViewInit\n} from '@angular/core';\nimport { BehaviorSubject } from 'rxjs';\nimport { OpenLayerLoaderService } from '../geolocation/openlayer-loader.service';\n\nimport { GeoPoint } from './geopoint';\n\n// @dynamic\ndeclare const ol: any;\n\n@Component({\n selector: 'lux-map',\n templateUrl: './map.component.html',\n styleUrls: ['./map.component.scss']\n})\nexport class MapComponent implements OnInit, AfterViewInit {\n static idCounter = 0;\n\n private loaded$: BehaviorSubject<boolean> = new BehaviorSubject(false);\n\n private _map: any;\n\n @Input() mapId;\n\n _zoom: number;\n @Input()\n set zoom(zoom: number) {\n if (!isNaN(zoom)) {\n this._zoom = zoom;\n if (this._map) {\n this._map.getView().setZoom(zoom);\n }\n }\n }\n get zoom(): number {\n return this._zoom;\n }\n\n _center: GeoPoint;\n @Input()\n set center(center: GeoPoint) {\n if (center && center.coordinates && center.coordinates.length === 2) {\n this._center = center;\n if (this._map) {\n this._map.getView().setCenter(ol.proj.fromLonLat(center.coordinates));\n }\n }\n }\n get center(): GeoPoint {\n return this._center;\n }\n\n _readonly: boolean;\n @Input()\n set readonly(readonly: boolean) {\n if (!readonly) {\n if (this._map) {\n this._map.on('click', (args: any) => {\n // args.coordinate is in EPSG:3857 (meters), we transform it into EPSG:4326 (degrees)\n const coordinates = ol.proj.toLonLat(args.coordinate);\n // alternatively: const lonLat = ol.proj.transform(args.coordinate,'EPSG:3857','EPSG:4326');\n this.addMarkerAtCoordinates(coordinates);\n });\n this._map.on('pointermove', (event: any) => {\n const pixel = this._map.getEventPixel(event.originalEvent);\n const hit = this._map.hasFeatureAtPixel(pixel);\n this._map.getViewport().style.cursor = hit ? 'move' : 'grab';\n });\n }\n } else {\n if (this._map) {\n this._map.on('click', (args: any) => {});\n this._map.on('pointermove', (event: any) => {});\n this._map.getViewport().style.cursor = 'grab';\n }\n }\n this._readonly = readonly;\n // reset marker coordinates so marker interactions can be created or recreated accordingly\n // to the changes to readonly\n this.markerCoordinates = this.markerCoordinates;\n }\n get readonly(): boolean {\n return this._readonly;\n }\n\n private _marker: any;\n private _markerInteraction: any;\n private _markerCoordinates: number[];\n @Input()\n private set markerCoordinates(markerCoordinates: number[]) {\n if (markerCoordinates && markerCoordinates.length === 2) {\n this._markerCoordinates = markerCoordinates;\n if (this._map) {\n this.addMarkerAtCoordinates(markerCoordinates);\n }\n } else {\n this._markerCoordinates = undefined;\n if (this._map) {\n this.removeMarker();\n }\n }\n }\n private get markerCoordinates(): number[] {\n return this._markerCoordinates;\n }\n @Input()\n set markerPoint(markerPoint: GeoPoint) {\n if (\n !markerPoint ||\n !(markerPoint.coordinates && markerPoint.coordinates.length === 2)\n ) {\n this.markerCoordinates = undefined;\n } else {\n this.markerCoordinates = [\n +markerPoint.coordinates[0],\n +markerPoint.coordinates[1]\n ];\n }\n this.valueChange.emit(markerPoint);\n }\n get markerPoint(): GeoPoint {\n return {\n type: 'Point',\n coordinates: this.markerCoordinates\n };\n }\n @Output() valueChange = new EventEmitter<GeoPoint>();\n\n private _markerSource: any;\n private _markerStyle: any;\n\n constructor(olLoader: OpenLayerLoaderService) {\n olLoader.load().subscribe((_) => {\n // Initialize\n this._markerSource = new ol.source.Vector();\n this._markerStyle = new ol.style.Style({\n image: new ol.style.Icon({\n anchor: [0.5, 1],\n scale: 0.25,\n src: '/assets/img/marker.png'\n })\n });\n this.loaded$.next(true);\n });\n }\n\n ngOnInit(): void {\n this.mapId = this.mapId ? this.mapId : 'map' + MapComponent.idCounter++;\n }\n\n ngAfterViewInit(): void {\n this.loaded$.subscribe((loaded) => {\n if (loaded) {\n this.initMap();\n }\n });\n }\n private initMap(): void {\n this._map = new ol.Map({\n target: this.mapId,\n controls: ol.control.defaults({ attribution: false }),\n layers: [\n new ol.layer.Tile({\n source: new ol.source.OSM()\n }),\n new ol.layer.Vector({\n source: this._markerSource,\n style: this._markerStyle\n })\n ],\n view: new ol.View({\n center: ol.proj.fromLonLat(\n this.center !== undefined ? this.center.coordinates : [0, 0]\n ),\n zoom: this.zoom\n })\n });\n\n if (this.center === undefined || this.center === null) {\n // if the center is not set, we set its default value\n if ('geolocation' in navigator) {\n navigator.geolocation.getCurrentPosition(\n (position) => {\n this.center = {\n type: 'Point',\n coordinates: [position.coords.longitude, position.coords.latitude]\n };\n },\n (error) => {\n this.center = {\n type: 'Point',\n coordinates: [0, 0]\n };\n }\n );\n } else {\n this.center = {\n type: 'Point',\n coordinates: [0, 0]\n };\n }\n } else {\n // the center needs the map to be properly set, so if it was set before the map was initialized,\n // we set the center again to perform necessary adjustements\n this.center = this.center;\n }\n\n if (this.zoom === undefined || this.zoom === null) {\n // if the zoom is not set, we set its default value\n this.zoom = 18;\n } else {\n // the zoom needs the map to be properly set, so if it was set before the map was initialized,\n // we set the zoom again to perform necessary adjustements\n this.zoom = this.zoom;\n }\n\n if (this.readonly === undefined || this.readonly === null) {\n // if readonly is not set, we set its default value\n this.readonly = false;\n } else {\n // readonly needs the map to be properly set, so if it was set before the map was initialized,\n // we set readonly again to perform necessary adjustements\n this.readonly = this.readonly;\n }\n\n if (\n this.markerCoordinates !== undefined &&\n this.markerCoordinates !== null\n ) {\n // the marker coordinates need the map to be properly set, so if they were set before the map was initialized,\n // we set the marker coordinates again to perform necessary adjustements\n this.markerCoordinates = this.markerCoordinates;\n }\n }\n\n private addMarkerAtCoordinates(coordinates: number[]): void {\n if (coordinates && coordinates.length === 2) {\n if (this._marker !== undefined) {\n this.removeMarker();\n }\n this._marker = new ol.Feature({\n geometry: new ol.geom.Point(\n // [lon, lat] is in EPSG:4326 (degrees), we transform it into EPSG:3857 (meters)\n ol.proj.transform(coordinates, 'EPSG:4326', 'EPSG:3857')\n )\n });\n this._markerSource.addFeature(this._marker);\n this._markerCoordinates = this.getMarkerCoordinates();\n\n if (!this.readonly) {\n const dragInteraction = new ol.interaction.Modify({\n features: new ol.Collection([this._marker]),\n style: this._markerStyle,\n pixelTolerance: 50,\n hitDetection: true\n });\n this._markerInteraction = dragInteraction;\n this._map.addInteraction(dragInteraction);\n }\n\n this._marker.on(\n 'change',\n () => {\n this._markerCoordinates = this.getMarkerCoordinates();\n },\n this._marker\n );\n }\n }\n\n private removeMarker(): void {\n if (this._marker !== undefined) {\n this._markerSource.removeFeature(this._marker);\n this._marker = undefined;\n }\n if (this._markerInteraction !== undefined) {\n this._map.getInteractions().pop();\n this._markerInteraction = undefined;\n }\n }\n\n private getMarkerCoordinates(): number[] | null {\n if (this._marker === undefined || this._marker == null) {\n return this._marker;\n }\n const coordinates = this._marker.getGeometry().getCoordinates();\n // coordinates is in EPSG:3857 (meters), we transform it into EPSG:4326 (degrees)\n return ol.proj.transform(coordinates, 'EPSG:3857', 'EPSG:4326');\n }\n\n onResize(): void {\n if (this._map) {\n this._map.updateSize();\n }\n }\n}\n","import { Component, Input, Output, EventEmitter, OnInit } from '@angular/core';\r\nimport { languageDetector } from '../lang';\r\nimport { PaginationInfo } from './pagination';\r\n\r\n@Component({\r\n selector: 'lux-pagination',\r\n templateUrl: './pagination.component.html',\r\n styleUrls: ['./pagination.component.scss']\r\n})\r\nexport class PaginationComponent implements OnInit {\r\n literals = {\r\n en: {\r\n first: 'First',\r\n previous: 'Previous',\r\n next: 'Next',\r\n last: 'Last'\r\n },\r\n es: {\r\n first: 'Primero',\r\n previous: 'Anterior',\r\n next: 'Siguiente',\r\n last: 'Último'\r\n }\r\n };\r\n\r\n public first: string;\r\n public previous: string;\r\n public next: string;\r\n public last: string;\r\n\r\n public showPagination = false;\r\n public hidePrevious = false;\r\n public lastPage = false;\r\n public totalPages = 0;\r\n public displayNextEllipsis = false;\r\n public displayPreviousEllipsis = false;\r\n\r\n public pages: number[] = [];\r\n\r\n @Output() goToPage = new EventEmitter<number>();\r\n @Output() pageSizeChange = new EventEmitter<number>();\r\n\r\n /** Current page, total items and items to show per page */\r\n private paginationInfoValue: PaginationInfo;\r\n\r\n private _lang: string;\r\n @Input()\r\n set lang(l: string) {\r\n if (l === this._lang) {\r\n return;\r\n }\r\n if (Object.keys(this.literals).includes(l)) {\r\n this._lang = l;\r\n } else {\r\n this._lang = 'en';\r\n }\r\n this.loadLanguage();\r\n }\r\n get lang(): string {\r\n return this._lang;\r\n }\r\n\r\n @Input()\r\n set paginationInfo(value: PaginationInfo) {\r\n this.paginationInfoValue = value;\r\n this.syncState();\r\n }\r\n get paginationInfo(): PaginationInfo {\r\n return this.paginationInfoValue;\r\n }\r\n\r\n constructor() {\r\n this.lang = languageDetector();\r\n }\r\n\r\n ngOnInit(): void {\r\n this.calculatePages();\r\n }\r\n\r\n pageSizeChanged(pageSize: number): void {\r\n this.paginationInfo.pageSize = pageSize;\r\n this.syncState();\r\n this.pageSizeChange.emit(pageSize);\r\n }\r\n\r\n onPage(n: number): void {\r\n this.goToPage.emit(n);\r\n }\r\n\r\n onFirst(): void {\r\n this.goToPage.emit(0);\r\n }\r\n\r\n onLast(): void {\r\n this.goToPage.emit(this.totalPages - 1);\r\n }\r\n onNext(): void {\r\n const page = (this.paginationInfo.page || 0) + 1;\r\n this.goToPage.emit(page);\r\n }\r\n onPrevious(): void {\r\n const page = (this.paginationInfo.page || 0) - 1;\r\n this.goToPage.emit(page);\r\n }\r\n\r\n private syncState(): void {\r\n this.pages = this.calculatePages();\r\n\r\n this.showPagination =\r\n this.paginationInfo.total > this.paginationInfo.pageSize;\r\n this.hidePrevious = this.paginationInfo.page === 0;\r\n this.lastPage =\r\n this.paginationInfo.pageSize * (this.paginationInfo.page + 1) >=\r\n this.paginationInfo.total;\r\n this.totalPages =\r\n Math.ceil(this.paginationInfo.total / this.paginationInfo.pageSize) || 0;\r\n this.displayNextEllipsis = !this.pages.includes(this.totalPages - 1);\r\n this.displayPreviousEllipsis = !this.pages.includes(0);\r\n }\r\n\r\n private calculatePages(): number[] {\r\n const totalPages =\r\n Math.ceil(this.paginationInfo.total / this.paginationInfo.pageSize) - 1; // 0-index\r\n const p = this.paginationInfo.page || 0;\r\n const pagesToShow = this.paginationInfo.pagesToShow;\r\n const pages: number[] = [];\r\n pages.push(p);\r\n const times = pagesToShow - 1;\r\n for (let i = 0; i < times; i++) {\r\n if (pages.length < pagesToShow) {\r\n if (Math.min(...pages) > 0) {\r\n pages.unshift(Math.min(...pages) - 1);\r\n }\r\n }\r\n if (pages.length < pagesToShow) {\r\n if (Math.max(...pages) < totalPages) {\r\n pages.push(Math.max(...pages) + 1);\r\n }\r\n }\r\n }\r\n pages.sort((a, b) => a - b);\r\n return pages;\r\n }\r\n\r\n private loadLanguage(): void {\r\n const l = this.literals[this.lang];\r\n this.first = l.first;\r\n this.previous = l.previous;\r\n this.next = l.next;\r\n this.last = l.last;\r\n }\r\n}\r\n","import {\n Component,\n EventEmitter,\n forwardRef,\n Input,\n Output\n} from '@angular/core';\nimport {\n AbstractControl,\n ControlValueAccessor,\n NG_VALIDATORS,\n NG_VALUE_ACCESSOR,\n ValidationErrors,\n Validator\n} from '@angular/forms';\nimport { isInitialAndEmpty } from '../helperFns';\n\nexport interface RadioItem {\n name?: string;\n label: string;\n value: any;\n}\n\n@Component({\n selector: 'lux-radiogroup',\n templateUrl: './radiogroup.component.html',\n styleUrls: ['./radiogroup.component.scss'],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n multi: true,\n useExisting: forwardRef(() => RadiogroupComponent)\n },\n {\n provide: NG_VALIDATORS,\n multi: true,\n useExisting: forwardRef(() => RadiogroupComponent)\n }\n ]\n})\nexport class RadiogroupComponent implements ControlValueAccessor, Validator {\n private touched = false;\n\n @Input() name = 'radiogroup1';\n @Input() public disabled: boolean | null = false;\n @Input() public readonly: boolean | null = false;\n @Input() public required: boolean | null = false;\n\n @Input()\n set items(col: RadioItem[]) {\n this._items = (col || []).map((it, index) =>\n this.ensureHasUniqueName(it, index)\n );\n this.itemsChange.emit(col);\n }\n get items(): RadioItem[] {\n return this._items;\n }\n @Output() itemsChange = new EventEmitter<RadioItem[]>();\n\n @Input()\n set value(v: any) {\n if (v === this._value) {\n return;\n }\n const initialAndEmpty = isInitialAndEmpty(this._value, v);\n this._value = v;\n this.onChange(v);\n if (!initialAndEmpty) {\n this.valueChange.emit(v);\n }\n }\n get value(): any {\n return this._value;\n }\n @Output() valueChange = new EventEmitter<any>();\n\n private _value: any = undefined;\n private _items: RadioItem[] = [];\n\n constructor() {}\n\n // ControlValueAccessor Interface\n onChange = (value): void => {};\n onTouched = (): void => {};\n writeValue(value: any): void {\n this.value = value;\n }\n registerOnChange(onChange: any): void {\n this.onChange = onChange;\n }\n registerOnTouched(onTouched: any): void {\n this.onTouched = onTouched;\n }\n markAsTouched(): void {\n if (!this.touched) {\n this.onTouched();\n this.touched = true;\n }\n }\n setDisabledState(disabled: boolean): void {\n this.disabled = disabled;\n }\n // End ControlValueAccessor Interface\n\n // Validator interface\n registerOnValidatorChange(): void {}\n\n validate(control: AbstractControl): ValidationErrors | null {\n const value = control.value;\n if (\n this.required &&\n (value === '' || value === null || value === undefined)\n ) {\n return { required: { value, reason: 'Required field.' } };\n }\n return null;\n }\n // End of Validator interface\n\n setValue(event: MouseEvent, item: RadioItem): void {\n if (!this.disabled && !this.readonly) {\n this.value = item.value;\n this.markAsTouched();\n }\n event.preventDefault();\n }\n ensureHasUniqueName(item: RadioItem, index: number): RadioItem {\n if (!item.name) {\n item.name = `${this.name}_${index}`;\n }\n return item;\n }\n}\n","import {\n Component,\n Input,\n EventEmitter,\n Output,\n forwardRef\n} from '@angular/core';\nimport {\n AbstractControl,\n ControlValueAccessor,\n NG_VALIDATORS,\n NG_VALUE_ACCESSOR,\n ValidationErrors,\n Validator\n} from '@angular/forms';\n\nlet sequencer = 0;\n\n@Component({\n selector: 'lux-select',\n templateUrl: './select.component.html',\n styleUrls: ['./select.component.scss'],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n multi: true,\n useExisting: forwardRef(() => SelectComponent)\n },\n {\n provide: NG_VALIDATORS,\n multi: true,\n useExisting: forwardRef(() => SelectComponent)\n }\n ]\n})\nexport class SelectComponent implements ControlValueAccessor, Validator {\n @Input() id = 'stringList' + sequencer++;\n @Input() disabled = false;\n @Input() required = false;\n /** Allow multiple elements */\n @Input() multiple = true;\n @Input() value: string[] = [];\n @Output() valueChange = new EventEmitter<string[]>();\n @Input() placeholder = 'Add new';\n /** If set, check there is no duplicates in the data. */\n @Input() unique = true;\n /** Validation function for new items. Returns error or null if valid */\n @Input() validateItem: (item: string) => string = (_) => null;\n\n newEntry = '';\n error = null;\n isValidNewEntry = false;\n\n private touched = false;\n\n constructor() {}\n\n // ControlValueAccessor Interface\n onChange = (value): void => {};\n onTouched = (): void => {};\n writeValue(value: any): void {\n this.value = value;\n }\n registerOnChange(onChange: any): void {\n this.onChange = onChange;\n }\n registerOnTouched(onTouched: any): void {\n this.onTouched = onTouched;\n }\n markAsTouched(): void {\n if (!this.touched) {\n this.onTouched();\n this.touched = true;\n }\n }\n setDisabledState(disabled: boolean): void {\n this.disabled = disabled;\n }\n // End ControlValueAccessor Interface\n\n // Validator interface\n registerOnValidatorChange(): void {}\n\n validate(control: AbstractControl): ValidationErrors | null {\n const value = control.value;\n if (\n this.required &&\n (value === '' || value === null || value === undefined)\n ) {\n return { required: { value, reason: 'Required field.' } };\n }\n return null;\n }\n // End of Validator interface\n\n get canAdd(): boolean {\n return this.multiple || this.value.length === 0;\n }\n add(val: string): void {\n this.value.push(val);\n this.newEntry = '';\n this.markAsTouched();\n this.valueChange.emit(this.value);\n }\n remove(index: number): void {\n if (this.value.length > index) {\n this.value.splice(index, 1);\n this.markAsTouched();\n this.valueChange.emit(this.value);\n }\n }\n onKeyPress(event: KeyboardEvent): void {\n if (event.key === 'Enter' && !this.error && this.newEntry !== '') {\n // Add on pressing Enter/Return\n this.markAsTouched();\n this.add(this.newEntry);\n }\n }\n onChangeNewEntry(newValue: string): void {\n this.markAsTouched();\n if (!newValue) {\n this.isValidNewEntry = false;\n this.error = null;\n return;\n }\n if (this.unique) {\n const found = (this.value || []).find((it) => it === newValue);\n this.isValidNewEntry = !found;\n this.error = found\n ? `Value '${newValue}' is already in. Cannot add duplicates.`\n : null;\n if (!this.isValidNewEntry) {\n return;\n }\n }\n this.error = this.validateItem(newValue);\n this.isValidNewEntry = !this.error;\n }\n}\n","import { Directive, ElementRef, Input, OnInit, Renderer2 } from '@angular/core';\n\n@Directive({\n selector: '[luxVoiceRecognition]'\n})\nexport class VoiceRecognitionDirective implements OnInit {\n @Input() language: string;\n // See API at: https://developer.mozilla.org/en-US/docs/Web/API/SpeechRecognition\n private recognition: any;\n private isRecognizing = false;\n private mic: any;\n\n constructor(private el: ElementRef, private renderer: Renderer2) {\n const speechRecognition = (window as any).webkitSpeechRecognition;\n if (speechRecognition) {\n this.recognition = new speechRecognition();\n }\n }\n\n ngOnInit(): void {\n if (this.recognition) {\n // API is available\n this.recognition.lang = this.language || window.navigator.language;\n this.recognition.interimResults = false;\n this.recognition.maxAlternatives = 1;\n\n // Add mic icon\n this.mic = document.createElement('div');\n this.mic.setAttribute('class', 'lux-microphone');\n\n const parent = this.el.nativeElement.parentElement;\n parent.appendChild(this.mic);\n\n // Add event handlers\n this.mic.onclick = (): void => this.microphoneClick();\n this.recognition.onresult = (event): void => this.onRecognized(event);\n }\n }\n\n microphoneClick(): void {\n if (this.isRecognizing) {\n // stop\n this.isRecognizing = false;\n this.renderer.removeClass(this.mic, 'lux-recording');\n this.recognition.abort();\n } else {\n // start\n this.el.nativeElement.value = getRecordingMessage(this.language);\n this.isRecognizing = true;\n this.renderer.addClass(this.mic, 'lux-recording');\n this.recognition.start();\n }\n }\n onRecognized(event: any): void {\n const recognizedText = event.results[0][0].transcript;\n this.isRecognizing = false;\n this.el.nativeElement.value = recognizedText;\n this.renderer.removeClass(this.mic, 'lux-recording');\n }\n}\n\nconst getRecordingMessage = (lang: string): string => {\n switch (lang.toLowerCase()) {\n case 'es':\n case 'es-es':\n return 'Grabando...';\n case 'en':\n case 'en-uk':\n case 'en-us':\n default:\n return 'Recording...';\n }\n};\n","\nimport { isPlatformBrowser } from '@angular/common';\n\nimport { ClassProvider, FactoryProvider, InjectionToken, PLATFORM_ID } from '@angular/core';\n\n/* Create a new injection token for injecting the window into a component. */\nexport const WINDOW = new InjectionToken('WindowToken');\n\n/* Define abstract class for obtaining reference to the global window object. */\nexport abstract class WindowRef {\n\n // eslint-disable-next-line @typescript-eslint/ban-types\n get nativeWindow(): Window | Object {\n throw new Error('Not implemented.');\n }\n\n}\n\n/* Define class that implements the abstract class and returns the native window object. */\nexport class BrowserWindowRef extends WindowRef {\n\n constructor() {\n super();\n }\n\n // eslint-disable-next-line @typescript-eslint/ban-types\n get nativeWindow(): Window | Object {\n return window;\n }\n\n}\n\n/* Create an factory function that returns the native window object. */\n// eslint-disable-next-line @typescript-eslint/ban-types\nexport const windowFactory = (browserWindowRef: BrowserWindowRef, platformId: Object): Window | Object => {\n if (isPlatformBrowser(platformId)) {\n return browserWindowRef.nativeWindow;\n }\n return new Object();\n};\n\n/* Create a injectable provider for the WindowRef token that uses the BrowserWindowRef class. */\nconst browserWindowProvider: ClassProvider = {\n provide: WindowRef,\n useClass: BrowserWindowRef\n};\n\n/* Create an injectable provider that uses the windowFactory function for returning the native window object. */\nconst windowProvider: FactoryProvider = {\n provide: WINDOW,\n useFactory: windowFactory,\n deps: [ WindowRef, PLATFORM_ID ]\n};\n\n/* Create an array of providers. */\nexport const WINDOW_PROVIDERS = [\n browserWindowProvider,\n windowProvider\n];\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { RouterModule } from '@angular/router';\n\nimport { AngularResizedEventModule } from 'angular-resize-event';\nimport { AutocompleteComponent } from './autocomplete/autocomplete.component';\nimport { AutocompleteListComponent } from './autocomplete-list/autocomplete-list.component';\nimport { CheckboxComponent } from './checkbox/checkbox.component';\nimport { DatetimeComponent } from './datetime/datetime.component';\nimport { InputComponent } from './input/input.component';\nimport { FilterComponent } from './filter/filter.component';\nimport { GeolocationComponent } from './geolocation/geolocation.component';\nimport { HttpClientModule } from '@angular/common/http';\nimport { LuxTooltipDirective } from './tooltip/tooltip.directive';\nimport { LuxBreadcrumbComponent } from './breadcrumb/breadcrumb.component';\nimport { LuxModalWindowComponent } from './modal/modal-window';\nimport { LuxModalBackdropComponent } from './modal/modal-backdrop';\nimport { MapComponent } from './map/map.component';\nimport { ModalService } from './modal/modal.service';\nimport { PaginationComponent } from './pagination/pagination.component';\nimport { RadiogroupComponent } from './radiogroup/radiogroup.component';\nimport { SelectComponent } from './select/select.component';\nimport { TooltipComponent } from './tooltip/tooltip.component';\nimport { TooltipService } from './tooltip/tooltip.service';\nimport { VoiceRecognitionDirective } from './voice-recognition/voice-recognition.directive';\nimport { WINDOW_PROVIDERS } from './window/window.service';\n\n@NgModule({\n declarations: [\n AutocompleteComponent,\n AutocompleteListComponent,\n FilterComponent,\n CheckboxComponent,\n DatetimeComponent,\n InputComponent,\n GeolocationComponent,\n LuxTooltipDirective,\n LuxModalWindowComponent,\n LuxModalBackdropComponent,\n LuxBreadcrumbComponent,\n MapComponent,\n SelectComponent,\n TooltipComponent,\n PaginationComponent,\n RadiogroupComponent,\n VoiceRecognitionDirective\n ],\n entryComponents: [\n LuxModalWindowComponent,\n LuxModalBackdropComponent,\n TooltipComponent\n ],\n providers: [ModalService, TooltipService, WINDOW_PROVIDERS],\n imports: [\n AngularResizedEventModule,\n FormsModule,\n HttpClientModule,\n ReactiveFormsModule,\n RouterModule,\n CommonModule\n ],\n exports: [\n AutocompleteComponent,\n AutocompleteListComponent,\n FilterComponent,\n CheckboxComponent,\n DatetimeComponent,\n InputComponent,\n GeolocationComponent,\n LuxTooltipDirective,\n LuxBreadcrumbComponent,\n LuxBreadcrumbComponent,\n MapComponent,\n SelectComponent,\n PaginationComponent,\n RadiogroupComponent,\n VoiceRecognitionDirective\n ]\n})\nexport class LuxModule {}\n","/*\n * Public API Surface of lux\n */\n\nexport { LuxModule } from './lib/lux.module';\nexport {\n DataSource,\n DataSourceItem,\n DecoratedDataSource,\n DecoratedDataSourceItem\n} from './lib/datasource';\nexport { AutocompleteComponent } from './lib/autocomplete/autocomplete.component';\nexport { AutocompleteListComponent } from './lib/autocomplete-list/autocomplete-list.component';\nexport {\n LuxBreadcrumbComponent,\n BreadcrumbItem\n} from './lib/breadcrumb/breadcrumb.component';\nexport { CheckboxComponent } from './lib/checkbox/checkbox.component';\nexport { FilterComponent } from './lib/filter/filter.component';\nexport { InputComponent } from './lib/input/input.component';\nexport { PaginationComponent } from './lib/pagination/pagination.component';\nexport { LuxTooltipDirective } from './lib/tooltip/tooltip.directive';\nexport { ModalService } from './lib/modal/modal.service';\nexport {\n RadioItem,\n RadiogroupComponent\n} from './lib/radiogroup/radiogroup.component';\nexport { ModalRef } from './lib/modal/modal-ref';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n\nexport {DatetimeComponent as ɵa} from './lib/datetime/datetime.component';\nexport {GeolocationComponent as ɵc} from './lib/geolocation/geolocation.component';\nexport {GeolocationService as ɵf} from './lib/geolocation/geolocation.service';\nexport {OpenLayerLoaderService as ɵk} from './lib/geolocation/openlayer-loader.service';\nexport {RegexpService as ɵb} from './lib/input/regexp.service';\nexport {MapComponent as ɵj} from './lib/map/map.component';\nexport {LuxModalBackdropComponent as ɵi} from './lib/modal/modal-backdrop';\nexport {LuxModalConfig as ɵe} from './lib/modal/modal-config';\nexport {ModalStack as ɵd} from './lib/modal/modal-stack';\nexport {LuxModalWindowComponent as ɵh} from './lib/modal/modal-window';\nexport {ContentRef as ɵt} from './lib/modal/util';\nexport {SelectComponent as ɵl} from './lib/select/select.component';\nexport {TooltipComponent as ɵm} from './lib/tooltip/tooltip.component';\nexport {TooltipService as ɵg} from './lib/tooltip/tooltip.service';\nexport {VoiceRecognitionDirective as ɵn} from './lib/voice-recognition/voice-recognition.directive';\nexport {BrowserWindowRef as ɵq,WINDOW as ɵo,WINDOW_PROVIDERS as ɵs,WindowRef as ɵp,windowFactory as ɵr} from './lib/window/window.service';"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"metadev-lux.js","sources":["../../../projects/lux/src/lib/helperFns.ts","../../../projects/lux/src/lib/autocomplete/autocomplete.component.ts","../../../projects/lux/src/lib/lang.ts","../../../projects/lux/src/lib/autocomplete-list/autocomplete-list.component.ts","../../../projects/lux/src/lib/checkbox/checkbox.component.ts","../../../projects/lux/src/lib/datetime/datetime.component.ts","../../../projects/lux/src/lib/input/regexp.service.ts","../../../projects/lux/src/lib/input/input.component.ts","../../../projects/lux/src/lib/filter/filter.component.ts","../../../projects/lux/src/lib/modal/modal-ref.ts","../../../projects/lux/src/lib/modal/util.ts","../../../projects/lux/src/lib/modal/modal-dismiss-reasons.ts","../../../projects/lux/src/lib/modal/modal-window.ts","../../../projects/lux/src/lib/modal/modal-backdrop.ts","../../../projects/lux/src/lib/modal/modal-config.ts","../../../projects/lux/src/lib/modal/modal-stack.ts","../../../projects/lux/src/lib/modal/modal.service.ts","../../../projects/lux/src/lib/geolocation/geolocation.service.ts","../../../projects/lux/src/lib/geolocation/geolocation.component.ts","../../../projects/lux/src/lib/tooltip/placement.ts","../../../projects/lux/src/lib/tooltip/tooltip.component.ts","../../../projects/lux/src/lib/tooltip/tooltop-content.ts","../../../projects/lux/src/lib/tooltip/tooltip.service.ts","../../../projects/lux/src/lib/tooltip/tooltip.directive.ts","../../../projects/lux/src/lib/breadcrumb/breadcrumb.component.ts","../../../projects/lux/src/lib/geolocation/openlayer-loader.service.ts","../../../projects/lux/src/lib/map/map.component.ts","../../../projects/lux/src/lib/pagination/pagination.component.ts","../../../projects/lux/src/lib/radiogroup/radiogroup.component.ts","../../../projects/lux/src/lib/select/select.component.ts","../../../projects/lux/src/lib/voice-recognition/voice-recognition.directive.ts","../../../projects/lux/src/lib/window/window.service.ts","../../../projects/lux/src/lib/lux.module.ts","../../../projects/lux/src/public-api.ts","../../../projects/lux/src/metadev-lux.ts"],"sourcesContent":["// undefined and null functions\r\n\r\nexport const exists = (value: any): boolean =>\r\n value !== null && value !== undefined;\r\n\r\nexport const hasValue = (value: any): boolean =>\r\n exists(value) && (typeof value === 'string' ? !isEmptyString(value) : true);\r\n\r\n// string functions\r\n\r\nexport const isEmptyString = (value: string): boolean => value.trim() === '';\r\n\r\nexport const isValidEmail = (value: string): boolean => {\r\n const re =\r\n /^[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?$/;\r\n return re.test(String(value).toLowerCase().trim());\r\n};\r\n\r\n// date functions\r\n\r\nexport const isValidDate = (date: Date): boolean =>\r\n exists(date) ? !isNaN(date.getTime()) : false;\r\n\r\nexport const normalizeDate = (value: any): string => {\r\n if (typeof value === 'string' && value.length > 10) {\r\n return value.substr(0, 10);\r\n }\r\n return value ? value.toString() : null;\r\n};\r\n\r\nexport const addTimezoneOffset = (date: Date): Date => {\r\n if (!isValidDate(date)) {\r\n return date;\r\n } else {\r\n return new Date(date.getTime() - date.getTimezoneOffset() * 60000);\r\n }\r\n};\r\n\r\n// number functions\r\n\r\nexport const isValidNumber = (\r\n value: string | number | undefined | null\r\n): boolean => (hasValue(value) ? !Number.isNaN(Number(value)) : false);\r\n\r\nexport const numberOfDecimalDigits = (\r\n x: number | string\r\n): number | undefined => {\r\n if (isValidNumber(x)) {\r\n const xString = String(Number(x));\r\n if (xString === 'Infinity') {\r\n return 0;\r\n }\r\n const indexOfE = xString.indexOf('e');\r\n if (indexOfE >= 0) {\r\n return 0;\r\n }\r\n const indexOfDecimalPoint = xString.indexOf('.');\r\n if (indexOfDecimalPoint < 0) {\r\n return 0;\r\n } else {\r\n return xString.length - indexOfDecimalPoint - 1;\r\n }\r\n }\r\n return undefined;\r\n};\r\n\r\nexport const numberOfWholeDigits = (x: number | string): number | undefined => {\r\n if (isValidNumber(x)) {\r\n let xString = String(Number(x));\r\n if (xString.indexOf('-') === 0) {\r\n xString = xString.slice(1, xString.length);\r\n }\r\n if (xString === 'Infinity') {\r\n return Infinity;\r\n }\r\n if (xString.indexOf('0') === 0) {\r\n xString = xString.slice(1, xString.length);\r\n }\r\n const indexOfE = xString.indexOf('e');\r\n if (indexOfE >= 0) {\r\n return Number(xString.slice(indexOfE + 1, xString.length)) + 1;\r\n }\r\n const indexOfDecimalPoint = xString.indexOf('.');\r\n if (indexOfDecimalPoint < 0) {\r\n return xString.length;\r\n } else {\r\n return indexOfDecimalPoint;\r\n }\r\n }\r\n return undefined;\r\n};\r\n\r\nexport const roundToMultipleOf = (x: number, modulo: number): number => {\r\n const moduloString = String(modulo);\r\n // approximates the result\r\n // prone to inexactitude because of floating point arithmetic\r\n const approximation = Math.round(x / modulo) * modulo;\r\n const approximationString = String(approximation);\r\n // remove useless decimals\r\n const uselessDecimalsInApproximation =\r\n numberOfDecimalDigits(approximationString) -\r\n numberOfDecimalDigits(moduloString);\r\n const resultString = approximationString.slice(\r\n 0,\r\n approximationString.length - uselessDecimalsInApproximation\r\n );\r\n return Number(resultString);\r\n};\r\n\r\n// other functions\r\n\r\nexport const isInitialAndEmpty = (\r\n previousValue: any,\r\n newValue: any\r\n): boolean => {\r\n const isPrevArray = Array.isArray(previousValue);\r\n const isNewArray = Array.isArray(newValue);\r\n return !(\r\n (isPrevArray ? previousValue.length !== 0 : Boolean(previousValue)) ||\r\n (isNewArray ? newValue.length !== 0 : Boolean(newValue))\r\n );\r\n};\r\n","import {\n AfterViewInit,\n ChangeDetectorRef,\n Component,\n ElementRef,\n EventEmitter,\n forwardRef,\n Input,\n OnInit,\n Output,\n ViewChild\n} from '@angular/core';\nimport {\n AbstractControl,\n ControlValueAccessor,\n NG_VALIDATORS,\n NG_VALUE_ACCESSOR,\n ValidationErrors,\n Validator\n} from '@angular/forms';\nimport { Observable, of } from 'rxjs';\nimport { debounceTime, first, map } from 'rxjs/operators';\nimport {\n DataSource,\n DataSourceItem,\n DecoratedDataSource,\n DecoratedDataSourceItem\n} from '../datasource';\nimport { isInitialAndEmpty } from '../helperFns';\n\nexport const LOST_FOCUS_TIME_WINDOW_MS = 200; // ms\n@Component({\n selector: 'lux-autocomplete',\n templateUrl: './autocomplete.component.html',\n styleUrls: ['./autocomplete.component.scss'],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n multi: true,\n useExisting: forwardRef(() => AutocompleteComponent)\n },\n {\n provide: NG_VALIDATORS,\n multi: true,\n useExisting: forwardRef(() => AutocompleteComponent)\n }\n ]\n})\nexport class AutocompleteComponent\n implements ControlValueAccessor, Validator, OnInit, AfterViewInit\n{\n static idCounter = 0;\n\n @ViewChild('i0', { static: true }) i0: ElementRef;\n @ViewChild('completeDiv', { static: true }) completeDiv: ElementRef;\n\n private _dataSource: DataSource<any, string>;\n private _placeholder: string;\n private _value: any;\n private lostFocusHandled = true;\n private t0 = 0;\n\n showSpinner = false;\n touched = false;\n completionList: DecoratedDataSource = [];\n showCompletion = false;\n focusItem: DataSourceItem<any, string>;\n\n @Output() valueChange = new EventEmitter<any>();\n @Output() dataSourceChange = new EventEmitter<DataSource<any, string>>();\n\n @Input() public inputId: string;\n @Input() public disabled: boolean | null = null;\n @Input() public readonly: boolean | null = null;\n @Input() label = '';\n /** If canAddNewValues, user can type items not present in the data-source. */\n @Input() canAddNewValues = false;\n /** After cleaning the selection should the completion list remain open or closed:\n * false: (default) close on filters, to clean a filter and select all.\n * true: keep open (when the action most likely is to pick another one).\n */\n @Input() keepOpenAfterDelete = false;\n\n @Input()\n get value(): any {\n return this._value;\n }\n set value(v: any) {\n const initialAndEmpty = isInitialAndEmpty(this._value, v);\n this._value = v;\n this.onChange(v);\n this.completeLabel();\n if (!initialAndEmpty) {\n this.valueChange.emit(v);\n }\n }\n @Input()\n get dataSource(): DataSource<any, string> {\n return this._dataSource;\n }\n set dataSource(v: DataSource<any, string>) {\n this._dataSource = v;\n this.dataSourceChange.emit(v);\n }\n @Input() required = false;\n\n @Input()\n set placeholder(v: string) {\n this._placeholder = v;\n }\n get placeholder(): string {\n return this._placeholder ? this._placeholder : '';\n }\n\n @Input() resolveLabelsFunction?: (\n instance: any,\n keys: any[]\n ) => Observable<DataSource<any, string>> = undefined;\n @Input() populateFunction?: (\n instance: any,\n search: string\n ) => Observable<DataSource<any, string>> = undefined;\n @Input() instance: any;\n\n constructor(private cd: ChangeDetectorRef) {}\n\n // ControlValueAccessor Interface\n onChange = (value): void => {};\n onTouched = (): void => {};\n\n writeValue(value: any): void {\n this.value = value;\n }\n\n registerOnChange(onChange: any): void {\n this.onChange = onChange;\n }\n registerOnTouched(onTouched: any): void {\n this.onTouched = onTouched;\n }\n markAsTouched(): void {\n if (!this.touched && !this.disabled) {\n this.onTouched();\n this.touched = true;\n }\n }\n\n setDisabledState(disabled: boolean): void {\n this.disabled = disabled;\n }\n // End ControlValueAccessor Interface\n\n // Validator interface\n registerOnValidatorChange(): void {}\n\n validate(control: AbstractControl): ValidationErrors | null {\n const value = control.value;\n if (\n this.required &&\n (value === '' || value === null || value === undefined)\n ) {\n return { required: { value, reason: 'Required field.' } };\n }\n return null;\n }\n // End of Validator interface\n\n clear(): void {\n this.value = null;\n this.toggleCompletion(this.keepOpenAfterDelete, '');\n }\n\n private completeLabel(): void {\n if (this.value) {\n if (this.dataSource) {\n this.label = findLabelForId(this.dataSource, this.value) || '';\n } else if (this.instance && this.resolveLabelsFunction) {\n this.resolveLabelsFunction(this.instance, [this.value])\n .pipe(debounceTime(1), first())\n .subscribe((data) => {\n this.label = findLabelForId(data, this.value) || '';\n });\n }\n } else {\n this.label = '';\n }\n }\n\n ngOnInit(): void {\n this.inputId = this.inputId\n ? this.inputId\n : `autocompletelist${AutocompleteComponent.idCounter++}`;\n this.completeLabel();\n }\n ngAfterViewInit(): void {\n this.setSameWidth();\n }\n onInputResized(): void {\n this.setSameWidth();\n }\n private setSameWidth(): void {\n const width = this.i0.nativeElement.getBoundingClientRect().width;\n this.completeDiv.nativeElement.style.width = `${width}px`;\n }\n\n onKeydown(event: KeyboardEvent, label: string): void {\n switch (event.key) {\n case 'Tab':\n if (label) {\n this.pickSelectionOrFirstMatch(label);\n }\n this.showCompletion = false;\n break;\n }\n this.markAsTouched();\n }\n onKeypress(event: KeyboardEvent, label: string): void {\n switch (event.key) {\n case 'Intro':\n case 'Enter':\n this.pickSelectionOrFirstMatch(label);\n event.preventDefault();\n break;\n }\n this.markAsTouched();\n }\n onKeyup(event: KeyboardEvent, label: string): void {\n switch (event.key) {\n case 'PageDown':\n this.focusOnNext(5);\n event.preventDefault();\n break;\n case 'ArrowDown':\n this.focusOnNext(1);\n event.preventDefault();\n break;\n case 'PageUp':\n this.focusOnPrevious(5);\n event.preventDefault();\n break;\n case 'ArrowUp':\n this.focusOnPrevious(1);\n event.preventDefault();\n break;\n case 'Escape':\n this.complete(null);\n event.preventDefault();\n break;\n case 'Intro':\n case 'Enter':\n event.preventDefault();\n break;\n default:\n this.showCompletionList(label);\n // event.preventDefault();\n }\n this.markAsTouched();\n }\n private focusOnNext(offset: number): void {\n const list = this.completionList || [];\n const index = list.findIndex(\n (it) => this.focusItem && it.key === this.focusItem.key\n );\n const indexNext =\n -1 && list.length > index + offset ? index + offset : list.length - 1;\n const next = list[indexNext];\n this.focusItem = next;\n this.ensureItemVisible(index);\n }\n private focusOnPrevious(offset: number): void {\n const list = this.completionList || [];\n const index = list.findIndex(\n (it) => this.focusItem && it.key === this.focusItem.key\n );\n const indexPrevious = index !== -1 && index > offset ? index - offset : 0;\n const next = list[indexPrevious];\n this.focusItem = next;\n this.ensureItemVisible(index);\n }\n onLostFocus(label: string): void {\n this.lostFocusHandled = false;\n this.t0 = performance.now();\n // console.log('Init LostFocus');\n setTimeout(() => {\n // needs to postpone actions some milliseconds to verify if\n // lost focus was followed by a list selection -> then cancel\n // if not -> make side effect\n if (!this.lostFocusHandled) {\n // console.log(\n // 'Lost focus 2',\n // this.lostFocusHandled,\n // 'SIDE EFFECT',\n // performance.now() - this.t0,\n // 'label:',\n // label\n // );\n if (label && this.label !== label) {\n this.pickSelectionOrFirstMatch(label);\n } else {\n this.lostFocusHandled = true;\n }\n this.toggleCompletion(false, label);\n } else {\n // do nothing (list selection took place)\n // console.log(\n // 'onlost focus 2',\n // this.lostFocusHandled,\n // 'nothing',\n // performance.now() - this.t0\n // );\n }\n }, LOST_FOCUS_TIME_WINDOW_MS);\n }\n complete(item: DataSourceItem<Record<string, unknown>, string>): void {\n if (!this.lostFocusHandled) {\n this.lostFocusHandled = true; // prevent a previous lostFocus to trigger a side effect\n const ellapsed = performance.now() - this.t0;\n if (ellapsed > LOST_FOCUS_TIME_WINDOW_MS) {\n console.warn(\n 'complete. lostfocus->click timeout of ',\n LOST_FOCUS_TIME_WINDOW_MS,\n 'ms exceed: ',\n performance.now() - this.t0,\n ' ms'\n );\n }\n // console.log(\n // 'complete. set to true. CANCELED side effect',\n // performance.now() - this.t0\n // );\n }\n if (item !== null) {\n this.value = item.key;\n this.label = item.label;\n } else {\n this.value = null;\n this.label = '';\n }\n this.toggleCompletion(false, null);\n this.markAsTouched();\n }\n toggleCompletion(show: boolean, label: string): void {\n if (show && !this.disabled) {\n this.showCompletionList(label);\n } else {\n this.showCompletion = false;\n if (this.canAddNewValues) {\n this.syncCustomValue(this.label);\n return;\n }\n }\n this.cd.markForCheck();\n }\n\n get selectedOption(): string {\n const index = this.completionList.findIndex(\n (i) => i.key === this.focusItem.key\n );\n if (index === -1 || !this.focusItem) {\n return null;\n }\n return `${this.inputId}_${index}`;\n }\n\n private ensureItemVisible(index: number): void {\n const target = this.completeDiv.nativeElement.querySelectorAll('li')[index];\n if (target) {\n target.scrollIntoView({ block: 'center' });\n }\n }\n private syncCustomValue(text: string): void {\n this.value = text;\n this.label = text;\n }\n /** Pick selection based on text filtering (ingnores drowdown state) */\n private pickSelectionOrFirstMatch(text: string): void {\n if (this.canAddNewValues) {\n this.syncCustomValue(text);\n return;\n }\n const focusIndex = this.completionList.findIndex(\n (it) => this.focusItem && it.key === this.focusItem.key\n );\n if (\n this.showCompletion &&\n focusIndex > 0 &&\n this.focusItem &&\n this.focusItem.label\n ) {\n if (text === this.focusItem.label && this.focusItem.key === this.value) {\n // do nothing if value does not change & close dropdow\n this.showCompletion = false;\n return;\n }\n // complete selected using selected item on drowdown\n this.complete(this.focusItem);\n return;\n }\n const source = (text || '').trim();\n if (!source) {\n this.showCompletion = false;\n // select null value\n if (this.value !== null) {\n this.value = null;\n }\n return;\n }\n this.completionList = [];\n this.computeCompletionList(source).subscribe((suggestions) => {\n const candidate =\n suggestions && suggestions.length > 0 ? suggestions[0] : null;\n this.complete(candidate);\n });\n }\n private showCompletionList(text: string): void {\n this.setSameWidth();\n const useSpinner = this.hasExternalDataSource();\n this.spinnerVisibility(useSpinner, true);\n setTimeout(() => {\n // for spinner to be shown\n this.computeCompletionList(text).subscribe({\n next: (cl) => {\n this.completionList = cl;\n this.focusItem = selectElement(this.completionList, text);\n this.showCompletion = true;\n this.spinnerVisibility(useSpinner, false);\n },\n error: () => {\n this.spinnerVisibility(useSpinner, false);\n },\n complete: () => {\n this.spinnerVisibility(useSpinner, false);\n }\n });\n }, 1);\n }\n\n private spinnerVisibility(useSpinner: boolean, value: boolean): void {\n if (useSpinner) {\n this.showSpinner = value;\n }\n }\n private hasExternalDataSource(): boolean {\n return !this.dataSource && !!this.instance && !!this.populateFunction;\n }\n private computeCompletionList(text: string): Observable<DecoratedDataSource> {\n const searchText = (text || '').toLowerCase();\n if (this.dataSource) {\n const ds = (this.dataSource || [])\n .filter((it) => ignoreAccentsInclude(it.label, searchText))\n .sort((a, b) => a.label.localeCompare(b.label));\n return of(decorateDataSource(ds, searchText));\n } else if (this.instance && this.populateFunction) {\n return this.populateFunction(this.instance, searchText).pipe(\n debounceTime(1),\n first(),\n map((ds) => {\n const dsFiltered = ds\n .filter((it) => ignoreAccentsInclude(it.label, searchText))\n .sort((a, b) => a.label.localeCompare(b.label));\n return decorateDataSource(dsFiltered, searchText);\n })\n );\n } else {\n return of([]);\n }\n }\n}\n\n/** Returns true if text includes substring. No accents considered. Ignorecase */\nconst ignoreAccentsInclude = (text: string, substring: string): boolean => {\n text = normalizedString(text).toLowerCase();\n substring = normalizedString(substring).toLowerCase();\n return text.includes(substring);\n};\n\n/** Returns a normalized string with no accents: used for comparison */\nconst normalizedString = (a: string): string =>\n (a || '').normalize('NFD').replace(/[\\u0300-\\u036f]/g, '');\n\nconst decorateDataSource = (\n dataSource: DataSource<any, string>,\n subString: string\n): DecoratedDataSource => dataSource.map((it) => decorateItem(it, subString));\n\nconst decorateItem = (\n item: DataSourceItem<any, string>,\n tx: string\n): DecoratedDataSourceItem => {\n const index = normalizedString(item.label)\n .toLowerCase()\n .indexOf(normalizedString(tx).toLowerCase());\n const labelPrefix = index === -1 ? item.label : item.label.substr(0, index);\n const labelMatch = index === -1 ? '' : item.label.substr(index, tx.length);\n const labelPostfix = index === -1 ? '' : item.label.substr(index + tx.length);\n const newItem: DecoratedDataSourceItem = {\n ...item,\n labelPrefix,\n labelMatch,\n labelPostfix\n };\n return newItem;\n};\n\nconst findLabelForId = (data: DataSource<any, string>, id: any): string => {\n const found = data.find((it) => it.key === id);\n return found ? found.label : null;\n};\n\nexport const selectElement = (\n completionList: DecoratedDataSource,\n label: string\n): DataSourceItem<any, string> => {\n label = (label || '').toLowerCase();\n if (!completionList || completionList.length === 0) {\n return null;\n }\n if (completionList.length === 1) {\n return completionList[0];\n }\n const found = completionList.find((it) => it.label.toLowerCase() === label);\n return found || completionList[0];\n};\n","/** Language detector based on Navigator preferences */\nexport const languageDetector = (): string => {\n const lang = navigator.language.split('-')[0];\n if (lang === 'es' || lang === 'en') {\n return lang;\n }\n return 'en'; // default\n};\n","import {\n Component,\n EventEmitter,\n forwardRef,\n Input,\n OnInit,\n Output,\n ViewChild\n} from '@angular/core';\nimport {\n AbstractControl,\n ControlValueAccessor,\n NG_VALIDATORS,\n NG_VALUE_ACCESSOR,\n ValidationErrors,\n Validator\n} from '@angular/forms';\nimport { Observable } from 'rxjs';\nimport { first } from 'rxjs/operators';\nimport { AutocompleteComponent } from '../autocomplete/autocomplete.component';\nimport { DataSource } from '../datasource';\nimport { isInitialAndEmpty } from '../helperFns';\nimport { languageDetector } from '../lang';\n\n@Component({\n selector: 'lux-autocomplete-list',\n templateUrl: './autocomplete-list.component.html',\n styleUrls: ['./autocomplete-list.component.scss'],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n multi: true,\n useExisting: forwardRef(() => AutocompleteListComponent)\n },\n {\n provide: NG_VALIDATORS,\n multi: true,\n useExisting: forwardRef(() => AutocompleteListComponent)\n }\n ]\n})\nexport class AutocompleteListComponent\n implements ControlValueAccessor, Validator, OnInit\n{\n static idCounter = 0;\n\n @ViewChild('auto') auto!: AutocompleteListComponent;\n\n literals = {\n en: {\n placeholder: 'new item',\n deleteLabelTemplate: 'Delete <<label>>',\n addMessage: 'Add'\n },\n es: {\n placeholder: 'nuevo elemento',\n deleteLabelTemplate: 'Eliminar <<label>>',\n addMessage: 'Añadir'\n }\n };\n\n public internalDataSource: DataSource<any, string> = [];\n private autoPopulate = false;\n\n private _value: any[] = [];\n @Input()\n set value(val: any[]) {\n if (val === this._value) {\n return;\n }\n const initialAndEmpty = isInitialAndEmpty(this._value, val);\n this._value = val;\n this.ensureLabelsForIds();\n this.populateWith('');\n this.onChange(this._value);\n if (!initialAndEmpty) {\n this.valueChange.emit(this._value);\n }\n }\n get value(): any[] {\n return this._value;\n }\n labels: string[] = [];\n newEntry: any;\n canAdd = false;\n touched = false;\n\n private _lang = languageDetector();\n @Input()\n get lang(): string {\n return this._lang;\n }\n set lang(l: string) {\n if (l === this._lang) {\n return;\n }\n if (Object.keys(this.literals).includes(l)) {\n this._lang = l;\n } else {\n this._lang = 'en';\n }\n }\n\n @Input() inputId: string;\n @Input() dataSource: DataSource<any, any> = [];\n @Input() placeholder?: string;\n @Input() disabled = false;\n @Input() deleteLabelTemplate?: string;\n @Input() addMessage?: string;\n @Input() required = false;\n\n @Input() resolveLabelsFunction?: (\n instance: any,\n ids: any[]\n ) => Observable<DataSource<any, string>> = undefined;\n @Input() populateFunction?: (\n instance: any,\n search: string\n ) => Observable<DataSource<any, string>> = undefined;\n @Input() instance: any;\n\n @Output() valueChange = new EventEmitter<any[]>();\n\n // ControlValueAccessor Interface\n onChange = (value): void => {};\n onTouched = (): void => {};\n\n writeValue(value: any): void {\n this.value = value;\n }\n\n registerOnChange(onChange: any): void {\n this.onChange = onChange;\n }\n registerOnTouched(onTouched: any): void {\n this.onTouched = onTouched;\n }\n markAsTouched(): void {\n if (!this.touched && !this.disabled) {\n this.onTouched();\n this.touched = true;\n }\n }\n setDisabledState(disabled: boolean): void {\n this.disabled = disabled;\n }\n // End ControlValueAccessor Interface\n\n // Validator interface\n registerOnValidatorChange(): void {}\n\n validate(control: AbstractControl): ValidationErrors | null {\n const value = control.value;\n if (\n this.required &&\n (value === '' || value === null || value === undefined)\n ) {\n return { required: { value, reason: 'Required field.' } };\n }\n return null;\n }\n // End of Validator interface\n\n ngOnInit(): void {\n this.inputId = this.inputId\n ? this.inputId\n : `autocompletelist${AutocompleteListComponent.idCounter++}`;\n this.autoPopulate =\n !!this.resolveLabelsFunction && !!this.populateFunction && this.instance;\n this.ensureLabelsForIds();\n }\n ensureLabelsForIds(): void {\n if (this.autoPopulate && this.resolveLabelsFunction) {\n this.resolveLabelsFunction(this.instance, this._value)\n .pipe(first())\n .subscribe((data) => {\n const res: string[] = [];\n (this._value || []).map((id) => {\n const found = data.find((it) => it.key === id);\n if (found) {\n res.push(found.label);\n } else {\n res.push('(unset)');\n }\n });\n this.labels = res;\n });\n } else if (this.dataSource) {\n const res: string[] = [];\n (this._value || []).map((id) => {\n const found = this.dataSource.find((it) => it.key === id);\n if (found) {\n res.push(found.label);\n } else {\n res.push('(unset)');\n }\n });\n this.labels = res;\n } else {\n this.labels = this._value.map((it) => (it ? it.toString() : '(unset)'));\n }\n }\n removeAt(index: number): void {\n if (this._value.length > index) {\n const key = this._value.splice(index, 1)[0];\n const label = this.labels.splice(index, 1)[0];\n this.internalDataSource.push({ key, label });\n }\n this.markAsTouched();\n }\n onValueChange(): void {\n this.updateCanAdd();\n }\n onNewEntryChange(event: KeyboardEvent, auto: AutocompleteComponent): void {\n if (event.key === 'Enter' && !!auto.value) {\n this.addNew(auto);\n } else if (event.key === 'Delete' || event.key === 'Backspace') {\n // todo\n } else {\n this.populateWith(auto.label + event.key);\n }\n this.updateCanAdd();\n }\n populateWith(searchText: string): void {\n if (this.autoPopulate && this.populateFunction && this.instance) {\n this.populateFunction(this.instance, searchText)\n .pipe(first())\n .subscribe((data) => {\n this.internalDataSource = data.filter(\n (it) => !(this._value || []).includes(it.key)\n );\n });\n } else if (this.dataSource) {\n this.internalDataSource = this.dataSource.filter(\n (it) => !(this._value || []).includes(it.key)\n );\n }\n }\n updateCanAdd(): void {\n this.canAdd =\n !this.disabled &&\n this.auto &&\n !!this.auto.value && // has value\n !this.value.find((it) => it === this.auto.value); // not already in\n }\n\n addNew(auto: AutocompleteComponent): void {\n this.value.push(auto.value);\n this.ensureLabelsForIds();\n this.newEntry = '';\n this.internalDataSource = this.internalDataSource.filter(\n (it) => !this._value.includes(it.key)\n );\n this.markAsTouched();\n }\n\n getDeleteMessage(label: string): string {\n return (\n this.deleteLabelTemplate ?? this.literals[this.lang].deleteLabelTemplate\n ).replace('<<label>>', label);\n }\n}\n","import {\n Component,\n Input,\n EventEmitter,\n Output,\n OnInit,\n forwardRef,\n ViewChild,\n ElementRef,\n AfterViewInit\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { isInitialAndEmpty } from '../helperFns';\nimport { languageDetector } from '../lang';\n\nconst KEY_SPACE = ' ';\n\n@Component({\n selector: 'lux-checkbox',\n templateUrl: './checkbox.component.html',\n styleUrls: ['./checkbox.component.scss'],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n multi: true,\n useExisting: forwardRef(() => CheckboxComponent)\n }\n ]\n})\nexport class CheckboxComponent\n implements ControlValueAccessor, OnInit, AfterViewInit\n{\n static idCounter = 0;\n\n @ViewChild('ck', { static: false }) ck: ElementRef;\n\n private _lang = languageDetector();\n @Input()\n set lang(l: string) {\n if (l === this._lang) {\n return;\n }\n if (Object.keys(this.literals).includes(l)) {\n this._lang = l;\n } else {\n this._lang = 'en';\n }\n }\n get lang(): string {\n return this._lang;\n }\n private internalValue: boolean;\n @Input()\n get value(): boolean {\n return this.internalValue;\n }\n set value(v: boolean) {\n if (this.internalValue === v) {\n return;\n }\n const initialAndEmpty = isInitialAndEmpty(this.internalValue, v);\n this.internalValue = v;\n this.syncModel();\n this.onChange(v);\n if (!initialAndEmpty) {\n this.valueChange.emit(v);\n }\n }\n\n get tabindexValue(): string {\n return this.disabled ? null : '0';\n }\n\n @Input() label: string = null;\n @Input() name: string = null;\n private _disabled = false;\n @Input()\n get disabled(): boolean {\n return this._disabled;\n }\n set disabled(v: boolean) {\n if (v === this._disabled) {\n return;\n }\n this._disabled = v;\n this.syncModel();\n }\n @Input() inputId: string;\n\n literals = {\n en: {\n yesLabel: 'Yes',\n noLabel: 'No'\n },\n es: {\n yesLabel: 'Sí',\n noLabel: 'No'\n }\n };\n touched = false;\n\n @Output() valueChange = new EventEmitter<boolean>();\n\n constructor() {}\n\n // ControlValueAccessor Interface\n onChange = (value): void => {};\n onTouched = (): void => {};\n writeValue(value: any): void {\n this.value = !!value;\n }\n registerOnChange(onChange: any): void {\n this.onChange = onChange;\n }\n registerOnTouched(onTouched: any): void {\n this.onTouched = onTouched;\n }\n markAsTouched(): void {\n if (!this.touched) {\n this.onTouched();\n this.touched = true;\n }\n }\n setDisabledState(disabled: boolean): void {\n this.disabled = disabled;\n }\n // End ControlValueAccessor Interface\n\n ngOnInit(): void {\n this.inputId = this.inputId\n ? this.inputId\n : `${this.name || 'checkbox'}$${CheckboxComponent.idCounter++}`;\n }\n ngAfterViewInit(): void {\n this.syncModel();\n }\n\n clicked(): void {\n if (!this.disabled) {\n this.value = !this.internalValue;\n this.markAsTouched();\n }\n }\n onKey(event: KeyboardEvent): void {\n if (event.key === KEY_SPACE && !this.disabled) {\n this.value = !this.internalValue;\n this.markAsTouched();\n event.preventDefault();\n }\n }\n\n private syncModel(): void {\n if (this.ck) {\n this.ck.nativeElement.checked = this.internalValue;\n }\n }\n}\n","import {\n Component,\n Input,\n Output,\n EventEmitter,\n OnInit,\n ElementRef,\n ViewChild,\n forwardRef\n} from '@angular/core';\nimport {\n NG_VALUE_ACCESSOR,\n ControlValueAccessor,\n AbstractControl,\n ValidationErrors,\n Validator,\n NG_VALIDATORS\n} from '@angular/forms';\nimport {\n addTimezoneOffset,\n hasValue,\n isInitialAndEmpty,\n isValidDate\n} from '../helperFns';\nimport { languageDetector } from '../lang';\n@Component({\n selector: 'lux-datetime',\n templateUrl: './datetime.component.html',\n styleUrls: ['./datetime.component.scss'],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n multi: true,\n useExisting: forwardRef(() => DatetimeComponent)\n },\n {\n provide: NG_VALIDATORS,\n multi: true,\n useExisting: forwardRef(() => DatetimeComponent)\n }\n ]\n})\nexport class DatetimeComponent\n implements OnInit, ControlValueAccessor, Validator\n{\n static idCounter = 0;\n\n @ViewChild('dateInput', { static: true }) dateInput: ElementRef;\n @ViewChild('timeInput', { static: true }) timeInput: ElementRef;\n\n touched = false;\n dirty = false;\n lastErrors: ValidationErrors | null = null;\n\n private _disabled: string | boolean;\n private _required: boolean;\n private _value: string;\n\n public dateValue?: string = undefined;\n public timeValue?: string = undefined;\n\n public userErrors = {\n en: {\n required: 'Required field.',\n min: 'Minimum value is $min.',\n max: 'Maximum value is $max.'\n },\n es: {\n required: 'El campo es obligatorio.',\n min: 'El valor mínimo es $min.',\n max: 'El valor máximo es $max.'\n }\n };\n\n @Input()\n public min?: string = '1900-01-01T00:00:00Z';\n @Input()\n public max?: string = '2100-01-01T00:00:00Z';\n @Input()\n public includeSeconds: boolean = true;\n @Input()\n public localTime: boolean = true;\n\n get className(): string {\n return this.checkClassName();\n }\n\n @Input() lang = languageDetector();\n @Input() public inlineErrors = false;\n @Input() public inputId: string;\n @Input('aria-label') public ariaLabel: string;\n @Input() public readonly: boolean | null = null;\n\n @Input()\n set disabled(v: string | boolean) {\n v = typeof v === 'string' && v !== 'false' ? true : v;\n this._disabled = v;\n }\n get disabled(): string | boolean {\n return this._disabled;\n }\n\n @Input()\n set required(v: boolean) {\n this._required = v;\n }\n get required(): boolean {\n return this._required;\n }\n\n @Input()\n set value(v: string) {\n if (v === this._value) {\n return; // prevent events when there is no changes\n }\n const initialAndEmpty = isInitialAndEmpty(this._value, v);\n const datetime = new Date(v);\n if (!v) {\n this._value = null;\n this.setDateInControl(null);\n this.setTimeInControl(null);\n } else if (!isValidDate(datetime)) {\n this._value = v;\n // we don't set value in control if the value is not valid\n // if we do, the content of the control changes and can erase what the user is typing\n } else {\n this._value = datetime.toISOString(); // YYYY-MM-DDThh:mm:ss.SSSZ\n this.setValueInControl(datetime);\n }\n this.onChange(v);\n if (!initialAndEmpty) {\n this.valueChange.emit(v);\n }\n }\n get value(): string {\n return this._value;\n }\n\n @Output() valueChange = new EventEmitter<any>();\n @Output() keyPress = new EventEmitter<KeyboardEvent>();\n\n onChange = (_value): void => {};\n onTouched = (): void => {};\n\n constructor() {}\n\n // ControlValueAccessor Interface implementation\n writeValue(value: any): void {\n this.value = value;\n }\n\n registerOnChange(onChange: any): void {\n this.onChange = onChange;\n }\n\n registerOnTouched(onTouched: any): void {\n this.onTouched = onTouched;\n }\n\n markAsTouched(): void {\n if (!this.touched) {\n this.onTouched();\n this.touched = true;\n }\n }\n\n setDisabledState(disabled: boolean): void {\n this.disabled = disabled;\n }\n // End of ControlValueAccessor Interface implementation\n\n private setDateInControl(date: string): void {\n // this.dateInput.nativeElement.value = date;\n this.dateValue = date;\n }\n private setTimeInControl(time: string): void {\n // this.timeInput.nativeElement.value = time;\n this.timeValue = time;\n }\n private setValueInControl(datetime: Date): void {\n const offsetDatetime = this.localTime\n ? addTimezoneOffset(datetime)\n : datetime;\n const offsetDatetimeString = offsetDatetime.toISOString(); // YYYY-MM-DDThh:mm:ss.SSSZ\n this.setDateInControl(offsetDatetimeString.slice(0, 10)); // YYYY-MM-DD\n if (this.includeSeconds) {\n this.setTimeInControl(offsetDatetimeString.slice(11, 19)); // hh:mm:ss\n } else {\n this.setTimeInControl(offsetDatetimeString.slice(11, 16)); // hh:mm\n }\n }\n clear(): void {\n this.setDateInControl(null);\n this.setTimeInControl(null);\n this.value = null;\n }\n\n // Validator interface\n registerOnValidatorChange(): void {}\n\n validate(control: AbstractControl): ValidationErrors | null {\n const value = control.value;\n let result: ValidationErrors | null = null;\n\n if (\n this.required &&\n !hasValue(value) &&\n !hasValue(this.dateValue) &&\n !hasValue(this.timeValue)\n ) {\n result = result || {};\n result.required = { value, reason: 'Required field.' };\n }\n if (!hasValue(this.dateValue) && hasValue(this.timeValue)) {\n result = result || {};\n result.existsDate = {\n value,\n reason: 'Date not specified.'\n };\n }\n if (hasValue(this.dateValue) && !hasValue(this.timeValue)) {\n result = result || {};\n result.existsTime = {\n value,\n reason: 'Time not specified.'\n };\n }\n if (\n hasValue(this.min) &&\n hasValue(value) &&\n hasValue(this.dateValue) &&\n hasValue(this.timeValue) &&\n String(value).localeCompare(this.min) === -1\n ) {\n result = result || {};\n result.min = {\n value,\n min: this.min,\n reason: `Value is lower than minimum value: ${this.min}.`\n };\n }\n if (\n hasValue(this.max) &&\n hasValue(value) &&\n hasValue(this.dateValue) &&\n hasValue(this.timeValue) &&\n String(value).localeCompare(this.max) !== -1\n ) {\n result = result || {};\n result.max = {\n value,\n max: this.max,\n reason: `Value is greater than than maximum value: ${this.max}.`\n };\n }\n this.lastErrors = result;\n return result;\n }\n // End of Validator interface\n\n ngOnInit(): void {\n this.inputId = this.inputId\n ? this.inputId\n : `datetime$${DatetimeComponent.idCounter++}`;\n this.setPatterns();\n }\n\n onLostFocus(): void {\n this.markAsTouched();\n }\n onKeyPress(event: KeyboardEvent): void {\n this.keyPress.emit(event);\n }\n\n onEventDatetime(newDate: string, newTime: string): void {\n if (this.disabled || this.readonly) {\n return;\n }\n const newValue = '' + newDate + ' ' + newTime;\n if (!newValue) {\n this.value = null;\n } else {\n const datetime = new Date(newValue);\n if (isValidDate(datetime)) {\n let datetimeString;\n if (this.localTime) {\n datetimeString = datetime.toISOString(); // YYYY-MM-DDThh:mm:ss.SSSZ\n } else {\n datetimeString = addTimezoneOffset(datetime).toISOString(); // YYYY-MM-DDThh:mm:ss.SSSZ\n }\n if (this.includeSeconds) {\n this.value = datetimeString.slice(0, 19) + 'Z'; // YYYY-MM-DDThh:mm:ssZ\n } else {\n this.value = datetimeString.slice(0, 16) + 'Z'; // YYYY-MM-DDThh:mmZ\n }\n } else {\n this.value = newValue;\n }\n }\n }\n\n checkClassName(): string {\n return this.disabled\n ? this.readonly\n ? 'disabled readonly'\n : 'disabled'\n : this.readonly\n ? 'readonly'\n : '';\n }\n\n setPatterns(): void {\n this.min = this.min || '1900-01-01';\n this.max = this.max || '2100-01-01';\n }\n}\n","import { Injectable } from '@angular/core';\n\n/**\n * A service that holds the functionality for advanced handling of regular expressions\n */\n@Injectable({ providedIn: 'root' })\nexport class RegexpService {\n constructor() {}\n\n private removeOuterRoundBrackets(regularExpressionString: string): string {\n while (\n regularExpressionString[0] === '(' &&\n regularExpressionString[regularExpressionString.length - 1] === ')'\n ) {\n regularExpressionString = regularExpressionString.slice(\n 1,\n regularExpressionString.length - 1\n );\n }\n return regularExpressionString;\n }\n\n private isQuantifier(quantifier: string): boolean {\n switch (quantifier) {\n case '{':\n case '?':\n case '+':\n case '*':\n return true;\n }\n return false;\n }\n\n private parseMinimalAmountOfQuantifier(quantifier: string): number {\n switch (quantifier[0]) {\n case '?':\n case '*':\n return 0;\n case '+':\n return 1;\n case '{':\n for (let index = 1; index < quantifier.length; ++index) {\n if (quantifier[index] < '0' || quantifier[index] > '9') {\n return Number(quantifier.slice(1, index));\n }\n }\n }\n return 0;\n }\n\n private sliceRegexByOr(regularExpressionString: string): string[] {\n const result = [];\n let slicedRegex = '';\n let lastSliceIndex = 0;\n let roundBracketCount = 0;\n let squareBracketCount = 0;\n let curlyBracketCount = 0;\n let index = 0;\n for (; index < regularExpressionString.length; ++index) {\n switch (regularExpressionString[index]) {\n case '\\\\':\n // escape sequence; skip the next character\n ++index;\n break;\n case '(':\n roundBracketCount += 1;\n break;\n case ')':\n roundBracketCount -= 1;\n break;\n case '[':\n squareBracketCount += 1;\n break;\n case ']':\n squareBracketCount -= 1;\n break;\n case '{':\n curlyBracketCount += 1;\n break;\n case '}':\n curlyBracketCount -= 1;\n break;\n case '|':\n if (\n roundBracketCount === 0 &&\n squareBracketCount === 0 &&\n curlyBracketCount === 0\n ) {\n slicedRegex = this.removeOuterRoundBrackets(\n regularExpressionString.slice(lastSliceIndex, index)\n );\n result.push(slicedRegex);\n lastSliceIndex = index + 1;\n }\n break;\n }\n }\n slicedRegex = this.removeOuterRoundBrackets(\n regularExpressionString.slice(lastSliceIndex, index)\n );\n result.push(slicedRegex);\n return result;\n }\n\n private sliceRegexByThen(regularExpressionString: string): string[][] {\n // the actual result\n const resultStart = [];\n // the remainder of the regex in each case\n const resultRemainder = [];\n let roundBracketCount = 0;\n let squareBracketCount = 0;\n let curlyBracketCount = 0;\n for (let index = 0; index < regularExpressionString.length; ++index) {\n switch (regularExpressionString[index]) {\n case '\\\\':\n // escape sequence; skip the next character\n ++index;\n break;\n case '(':\n roundBracketCount += 1;\n break;\n case ')':\n roundBracketCount -= 1;\n break;\n case '[':\n squareBracketCount += 1;\n break;\n case ']':\n squareBracketCount -= 1;\n break;\n case '{':\n curlyBracketCount += 1;\n break;\n case '}':\n curlyBracketCount -= 1;\n break;\n }\n if (\n roundBracketCount === 0 &&\n squareBracketCount === 0 &&\n curlyBracketCount === 0\n ) {\n if (!this.isQuantifier(regularExpressionString[index + 1])) {\n resultStart.push(regularExpressionString.slice(0, index + 1));\n resultRemainder.push(regularExpressionString.slice(index + 1));\n } else {\n // let minimalAmountOfRepeats = parseMinimalAmountOfQuantifier(regularExpressionString.slice(index + 1));\n // TODO\n }\n }\n }\n return [resultStart, resultRemainder];\n }\n\n suggestion(beginning: string, regularExpressionString: string): string {\n if (new RegExp(regularExpressionString).test(beginning)) {\n // TODO: RETURN AN EMPTY STRING\n return 'YA ES IGUAL, NO HAY MÁS QUE SUGERIR';\n }\n const regexOptions = this.sliceRegexByOr(regularExpressionString);\n if (regexOptions.length > 1) {\n for (\n let regexOptionIndex = 0;\n regexOptionIndex < regexOptions.length;\n ++regexOptionIndex\n ) {\n const regexParts = this.sliceRegexByThen(\n regexOptions[regexOptionIndex]\n );\n const regexPartsStarts = regexParts[0];\n const regexPartsRemainders = regexParts[1];\n // for each option, test if the first part of the regex matches\n // if it doesn't, continue\n // if it does, keep checking until what part it matches\n if (!new RegExp(regexPartsStarts[0]).test(beginning)) {\n // if there are no more options\n if (regexOptionIndex === regexOptions.length - 1) {\n // we return the first option, but we could return any option\n\n // TODO: RETURN ANY TEXT THAT MATCHES regexOptions[0]\n return regexOptions[0];\n }\n } else {\n for (\n let regexPartIndex = 1;\n regexPartIndex < regexPartsStarts.length;\n ++regexPartIndex\n ) {\n if (!new RegExp(regexPartsStarts[regexPartIndex]).test(beginning)) {\n // TODO: RETURN ANY TEXT THAT MATCHES regexPartsRemainders[regexPartIndex - 1]\n return regexPartsRemainders[regexPartIndex - 1];\n }\n }\n }\n }\n } else if (regexOptions.length === 1) {\n const regexParts = this.sliceRegexByThen(regexOptions[0]);\n const regexPartsStarts = regexParts[0];\n const regexPartsRemainders = regexParts[1];\n if (!new RegExp(regexPartsStarts[0]).test(beginning)) {\n // TODO: RETURN ANY TEXT THAT MATCHES regularExpressionString\n return regularExpressionString;\n } else {\n for (\n let regexPartIndex = 1;\n regexPartIndex < regexPartsStarts.length;\n ++regexPartIndex\n ) {\n if (!new RegExp(regexPartsStarts[regexPartIndex]).test(beginning)) {\n // TODO: RETURN ANY TEXT THAT MATCHES regexPartsRemainders[regexPartIndex - 1]\n return regexPartsRemainders[regexPartIndex - 1];\n }\n }\n }\n }\n // TODO: RETURN AN EMPTY STRING\n return 'NO DEBERÍA SER POSIBLE';\n }\n}\n","import {\n Component,\n Input,\n Output,\n EventEmitter,\n OnInit,\n ElementRef,\n ViewChild,\n forwardRef\n} from '@angular/core';\nimport {\n NG_VALUE_ACCESSOR,\n ControlValueAccessor,\n AbstractControl,\n ValidationErrors,\n Validator,\n NG_VALIDATORS\n} from '@angular/forms';\nimport {\n hasValue,\n isInitialAndEmpty,\n isValidEmail,\n isValidNumber,\n normalizeDate\n} from '../helperFns';\nimport { languageDetector } from '../lang';\nimport { RegexpService } from './regexp.service';\n@Component({\n selector: 'lux-input',\n templateUrl: './input.component.html',\n styleUrls: ['./input.component.scss'],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n multi: true,\n useExisting: forwardRef(() => InputComponent)\n },\n {\n provide: NG_VALIDATORS,\n multi: true,\n useExisting: forwardRef(() => InputComponent)\n }\n ]\n})\nexport class InputComponent implements OnInit, ControlValueAccessor, Validator {\n static idCounter = 0;\n\n @ViewChild('input', { static: false }) input: ElementRef;\n @ViewChild('textarea', { static: false }) textarea: ElementRef;\n\n touched = false;\n dirty = false;\n lastErrors: ValidationErrors | null = null;\n\n private _disabled: string | boolean;\n private _value: any = '';\n private _type: string;\n private _placeholder: string;\n private _pattern?: string = undefined;\n private _regexp?: RegExp = undefined;\n private _currency: string;\n private _required: boolean;\n\n public userErrors = {\n en: {\n required: 'Required field.',\n min: 'Minimum value is $min.',\n max: 'Maximum value is $max.',\n email: 'Format should match example@example.com.'\n },\n es: {\n required: 'El campo es obligatorio.',\n min: 'El valor mínimo es $min.',\n max: 'El valor máximo es $max.',\n email: 'El campo debe tener un formato como ejemplo@ejemplo.com.'\n }\n };\n\n public domain: string;\n @Input()\n public rows?: number | string;\n @Input()\n public cols?: number | string;\n @Input()\n public step?: number;\n @Input()\n public min?: number | string;\n @Input()\n public max?: number | string;\n\n get className(): string {\n return this.checkClassName();\n }\n\n @Input() lang = languageDetector();\n @Input() public inlineErrors = false;\n @Input() public inputId: string;\n @Input('aria-label') public ariaLabel: string;\n @Input() public readonly: boolean | null = null;\n\n @Input()\n set disabled(v: string | boolean) {\n v = typeof v === 'string' ? true : v;\n this._disabled = v;\n }\n get disabled(): string | boolean {\n return this._disabled;\n }\n\n @Input()\n set pattern(p: string | undefined) {\n this._pattern = p;\n if (p === undefined) {\n this._regexp = undefined;\n } else {\n try {\n this._regexp = new RegExp(p);\n } catch (e) {\n this._pattern = undefined;\n this._regexp = undefined;\n }\n }\n }\n get pattern(): string | undefined {\n return this._pattern;\n }\n\n @Input()\n set currency(v: string) {\n this._currency = v.toUpperCase();\n }\n get currency(): string {\n return this._currency;\n }\n\n @Input()\n set placeholder(v: string) {\n this._placeholder = v;\n }\n get placeholder(): string {\n return this._placeholder ? this._placeholder : '';\n }\n\n @Input()\n set required(v: boolean) {\n this._required = v;\n }\n get required(): boolean {\n return this._required;\n }\n\n @Input()\n set type(v: string) {\n this._type = v.toLowerCase();\n this.domain = v.toLowerCase();\n this.checkType(v);\n }\n get type(): string {\n return this._type ? this._type : 'text';\n }\n\n @Input()\n set value(v: any) {\n v = v === undefined ? null : v;\n if (v === this._value) {\n return; // prevent events when there is no changes\n }\n const initialAndEmpty = isInitialAndEmpty(this._value, v);\n if (this.type === 'date') {\n v = normalizeDate(v);\n }\n\n this._value = v;\n this.onChange(v);\n if (!initialAndEmpty) {\n this.valueChange.emit(v);\n }\n }\n get value(): any {\n if (this.isPercentage() || this.isPermillage() || this.isNumber()) {\n const numVal = parseFloat(this._value);\n if (!Number.isNaN(numVal)) {\n return numVal;\n }\n }\n return this._value;\n }\n @Output() valueChange = new EventEmitter<any>();\n @Output() keyPress = new EventEmitter<KeyboardEvent>();\n\n onChange = (value): void => {};\n onTouched = (): void => {};\n\n constructor(public regexpService: RegexpService) {}\n\n // ControlValueAccessor Interface implementation\n writeValue(value: any): void {\n this.value = value;\n this.setValueInControl(value);\n }\n\n registerOnChange(onChange: any): void {\n this.onChange = onChange;\n }\n\n registerOnTouched(onTouched: any): void {\n this.onTouched = onTouched;\n }\n\n markAsTouched(): void {\n if (!this.touched) {\n this.onTouched();\n this.touched = true;\n }\n }\n\n setDisabledState(disabled: boolean): void {\n this.disabled = disabled;\n }\n // End of ControlValueAccessor Interface implementation\n\n private setValueInControl(v: any): void {\n if (this.domain === 'date') {\n v = normalizeDate(v);\n }\n if (this.input) {\n this.input.nativeElement.value = v;\n }\n if (this.textarea) {\n this.textarea.nativeElement.value = v;\n }\n }\n\n // Validator interface\n registerOnValidatorChange(): void {}\n\n validate(control: AbstractControl): ValidationErrors | null {\n const value = control.value;\n let result: ValidationErrors | null = null;\n\n if (this.required && !hasValue(value)) {\n result = result || {};\n result.required = { value, reason: 'Required field.' };\n }\n if (this._regexp && hasValue(value) && !this._regexp.test(value)) {\n result = result || {};\n result.pattern = {\n value,\n reason: `Value must follow the pattern: ${this._pattern}`\n };\n }\n if (this.type === 'email' && hasValue(value) && !isValidEmail(value)) {\n result = result || {};\n result.email = { value, reason: 'Invalid email.' };\n }\n if (this.type === 'number' && hasValue(value) && !isValidNumber(value)) {\n result = result || {};\n result.numeric = { value, reason: 'Invalid number.' };\n }\n if (\n this.type === 'date' ||\n this.type === 'time' ||\n this.type === 'timestamp'\n ) {\n if (\n typeof this.min === 'string' &&\n hasValue(value) &&\n String(value).localeCompare(this.min) === -1\n ) {\n result = result || {};\n result.min = {\n value,\n min: this.min,\n reason: `Value is lower than minimum value: ${this.min}.`\n };\n }\n if (\n typeof this.max === 'string' &&\n hasValue(value) &&\n String(value).localeCompare(this.max) !== -1\n ) {\n result = result || {};\n result.max = {\n value,\n max: this.max,\n reason: `Value is greater than than maximum value: ${this.max}.`\n };\n }\n }\n\n if (\n this.type === 'percentage' ||\n this.type === 'permillage' ||\n this.type === 'number' ||\n this.type === 'currency'\n ) {\n if (hasValue(this.min) && hasValue(value) && value < +this.min) {\n result = result || {};\n result.min = {\n value,\n min: this.min,\n reason: `Value is lower than minimum value: ${this.min}.`\n };\n }\n if (hasValue(this.max) && hasValue(value) && value > +this.max) {\n result = result || {};\n result.max = {\n value,\n max: this.max,\n reason: `Value is greater than than maximum value: ${this.max}.`\n };\n }\n }\n this.lastErrors = result;\n return result;\n }\n // End of Validator interface\n\n ngOnInit(): void {\n this.inputId = this.inputId\n ? this.inputId\n : `${this.type}$${InputComponent.idCounter++}`;\n }\n onLostFocus(): void {\n this.markAsTouched();\n }\n onKeyUp(newValue: string): void {\n this.value = newValue;\n }\n onChangeValue(newValue: string): void {\n this.value = newValue;\n this.markAsTouched();\n }\n onKeyPress(event: KeyboardEvent): void {\n this.keyPress.emit(event);\n }\n\n isNumber(): boolean {\n return this.type === 'number';\n }\n isPercentage(): boolean {\n return this.type === 'percentage';\n }\n isPermillage(): boolean {\n return this.type === 'permillage';\n }\n hasPrefix(): boolean {\n return this.currency === 'USD';\n }\n hasPostfix(): boolean {\n return (\n this.currency === 'EUR' || this.isPercentage() || this.isPermillage()\n );\n }\n\n checkClassName(): string {\n return this.disabled\n ? this.readonly\n ? 'disabled readonly'\n : 'disabled'\n : this.readonly\n ? 'readonly'\n : '';\n }\n\n checkType(type: string): void {\n switch (type) {\n case 'email':\n this.setEmailPatterns();\n break;\n case 'date':\n this.setDatePatterns();\n break;\n case 'time':\n this.setTimePatterns();\n break;\n case 'password':\n this.setPasswordPatterns();\n break;\n case 'number':\n this.setNumberPatterns();\n break;\n case 'currency':\n this.setCurrencyPatterns();\n break;\n case 'percentage':\n this.setPercentagePatterns();\n break;\n case 'permillage':\n this.setPermillagePatterns();\n break;\n default:\n break;\n }\n }\n\n setEmailPatterns(): void {}\n\n setDatePatterns(): void {\n this.min = this.min || '1900-01-01';\n this.max = this.max || '2100-01-01';\n }\n\n setTimePatterns(): void {}\n\n setPasswordPatterns(): void {}\n\n setNumberPatterns(): void {\n this.domain = 'number';\n this.placeholder = '0';\n }\n\n setCurrencyPatterns(): void {\n this.domain = 'number';\n this.step = this.step || 0.1;\n this.min = this.min || 0.0;\n this.max = this.max || 10000.0;\n this.value = 0.0;\n }\n\n setPercentagePatterns(): void {\n this.domain = 'number';\n this.step = this.step || 0.01;\n this.min = this.min || 0.0;\n this.max = this.max || 100.0;\n this.placeholder = '0.00';\n }\n\n setPermillagePatterns(): void {\n this.domain = 'number';\n this.step = this.step || 0.01;\n this.min = this.min || 0.0;\n this.max = this.max || 1000.0;\n this.placeholder = '0.00';\n }\n}\n","import {\n Component,\n Input,\n Output,\n EventEmitter,\n OnDestroy,\n OnInit,\n forwardRef\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { Subject, Observable, Subscription } from 'rxjs';\nimport { debounceTime } from 'rxjs/operators';\n\n/** Filter component to query for objects. */\n@Component({\n selector: 'lux-filter',\n templateUrl: './filter.component.html',\n styleUrls: ['./filter.component.scss'],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n multi: true,\n useExisting: forwardRef(() => FilterComponent)\n }\n ]\n})\nexport class FilterComponent\n implements ControlValueAccessor, OnInit, OnDestroy\n{\n static idCounter = 0;\n\n private touched = false;\n private _searchValue = '';\n\n @Input() disabled = false;\n /** id for the input. If left blank, it is autogenerated */\n @Input() inputId: string;\n /** Placeholder default text. */\n @Input() placeholder = '';\n /** Search value introduced by the user. */\n @Input()\n get searchValue(): string {\n return this._searchValue;\n }\n set searchValue(v: string) {\n v = (v || '').toString();\n if (v === this._searchValue) {\n return;\n }\n this.onChange(v);\n this._searchValue = v;\n }\n /** Search on type: (default true) Auto-search when user types in. */\n @Input() searchOnType = true;\n /** Custom aria label in case of not using a label */\n @Input('aria-label') ariaLabel: string;\n\n private debounceValue = 300; // 300 ms\n /** Debounce time in milliseconds. (defaults to 300 ms) */\n @Input()\n set debounce(val: number) {\n this.debounceValue = val;\n this.recreateObservable();\n }\n get debounce(): number {\n return this.debounceValue;\n }\n\n /** Search value changed by user. */\n @Output() searchValueChange = new EventEmitter<string>();\n\n searchValue$: Observable<string>;\n\n private subject = new Subject<string>();\n private sub: Subscription;\n\n constructor() {\n this.recreateObservable();\n }\n\n // ControlValueAccessor Interface\n onChange = (value): void => {};\n onTouched = (): void => {};\n writeValue(value: any): void {\n this.searchValue = (value || '').toString();\n }\n registerOnChange(onChange: any): void {\n this.onChange = onChange;\n }\n registerOnTouched(onTouched: any): void {\n this.onTouched = onTouched;\n }\n markAsTouched(): void {\n if (!this.touched) {\n this.onTouched();\n this.touched = true;\n }\n }\n setDisabledState(disabled: boolean): void {\n this.disabled = disabled;\n }\n // End ControlValueAccessor Interface\n\n ngOnInit(): void {\n this.inputId = this.inputId\n ? this.inputId\n : `filter$${FilterComponent.idCounter++}`;\n }\n ngOnDestroy(): void {\n this.freeSubscriptions();\n }\n clear(): void {\n this.searchValue = '';\n this.search();\n }\n search(): void {\n this.searchValueChange.emit(this.searchValue);\n }\n keyup(event: KeyboardEvent, newValue: string): void {\n this.markAsTouched();\n this.searchValue = newValue;\n if (event.key === 'Enter') {\n this.searchNow(this.searchValue);\n }\n if (this.searchOnType) {\n this.addEvent();\n }\n }\n onInputValueChange(newValue: string): void {\n this.markAsTouched();\n this.searchValue = newValue;\n }\n\n private recreateObservable(): void {\n this.searchValue$ = this.subject\n .asObservable()\n .pipe(debounceTime(this.debounce));\n\n this.freeSubscriptions();\n this.sub = this.searchValue$.subscribe((value) => {\n this.searchValueChange.emit(value);\n });\n }\n private freeSubscriptions(): void {\n if (this.sub) {\n this.sub.unsubscribe();\n this.sub = null;\n }\n }\n private searchNow(value: string): void {\n this.searchValueChange.emit(value);\n }\n private addEvent(): void {\n this.subject.next(this.searchValue);\n }\n}\n","import { ComponentRef } from '@angular/core';\nimport { LuxModalWindowComponent } from './modal-window';\nimport { ContentRef } from './util';\nimport { LuxModalBackdropComponent } from './modal-backdrop';\n\nexport class ActiveModal {\n close(result?: any): void {}\n dismiss(reason?: any): void {}\n}\n\nexport class ModalRef {\n private _resolve: (result?: any) => void;\n private _reject: (reason?: any) => void;\n\n /**\n * The instance of a component used for the modal content.\n *\n * When a `TemplateRef` is used as the content, will return `undefined`.\n */\n get componentInstance(): any {\n if (this._contentRef.componentRef) {\n return this._contentRef.componentRef.instance;\n }\n }\n\n /**\n * The promise that is resolved when the modal is closed and rejected when the modal is dismissed.\n */\n result: Promise<any>;\n\n constructor(\n private _windowCmptRef: ComponentRef<LuxModalWindowComponent>,\n private _contentRef: ContentRef,\n private _backdropCmptRef?: ComponentRef<LuxModalBackdropComponent>,\n private _beforeDismiss?: () => any\n ) {\n _windowCmptRef.instance.dismissEvent.subscribe((reason: any) => {\n this.dismiss(reason);\n });\n\n this.result = new Promise((resolve, reject) => {\n this._resolve = resolve;\n this._reject = reject;\n });\n this.result.then(null, () => {});\n }\n\n /**\n * Closes the modal with an optional `result` value.\n *\n * The `NgbMobalRef.result` promise will be resolved with the provided value.\n */\n close(result?: any): void {\n if (this._windowCmptRef) {\n if (this._resolve) {\n this._resolve(result);\n }\n this._removeModalElements();\n }\n }\n\n private _dismiss(reason?: any): void {\n if (this._reject) {\n this._reject(reason);\n }\n this._removeModalElements();\n }\n\n /**\n * Dismisses the modal with an optional `reason` value.\n *\n * The `NgbModalRef.result` promise will be rejected with the provided value.\n */\n dismiss(reason?: any): void {\n if (this._windowCmptRef) {\n if (!this._beforeDismiss) {\n this._dismiss(reason);\n } else {\n const dismiss = this._beforeDismiss();\n if (dismiss && dismiss.then) {\n dismiss.then(\n (result) => {\n if (result !== false) {\n this._dismiss(reason);\n }\n },\n () => {}\n );\n } else if (dismiss !== false) {\n this._dismiss(reason);\n }\n }\n }\n }\n\n private _removeModalElements(): void {\n const windowNativeEl = this._windowCmptRef.location.nativeElement;\n windowNativeEl.parentNode.removeChild(windowNativeEl);\n this._windowCmptRef.destroy();\n\n if (this._backdropCmptRef) {\n const backdropNativeEl = this._backdropCmptRef.location.nativeElement;\n backdropNativeEl.parentNode.removeChild(backdropNativeEl);\n this._backdropCmptRef.destroy();\n }\n\n if (this._contentRef && this._contentRef.viewRef) {\n this._contentRef.viewRef.destroy();\n }\n\n this._windowCmptRef = null;\n this._backdropCmptRef = null;\n this._contentRef = null;\n }\n}\n","import { ViewRef, ComponentRef } from '@angular/core';\nimport { fromEvent, Observable } from 'rxjs';\nimport { filter, map, takeUntil, withLatestFrom } from 'rxjs/operators';\n\nexport const FOCUS = 'focus';\n\nexport enum Key {\n Tab = 9,\n Enter = 13,\n Escape = 27,\n Space = 32,\n PageUp = 33,\n PageDown = 34,\n End = 35,\n Home = 36,\n ArrowLeft = 37,\n ArrowUp = 38,\n ArrowRight = 39,\n ArrowDown = 40\n}\n\nexport const isDefined = (value: any): boolean =>\n value !== undefined && value !== null;\n\nexport class ContentRef {\n constructor(\n public nodes: any[],\n public viewRef?: ViewRef,\n public componentRef?: ComponentRef<any>\n ) {}\n}\n\nconst FOCUSABLE_ELEMENTS_SELECTOR = [\n 'a[href]',\n 'button:not([disabled])',\n 'input:not([disabled]):not([type=\"hidden\"])',\n 'select:not([disabled])',\n 'textarea:not([disabled])',\n '[contenteditable]',\n '[tabindex]:not([tabindex=\"-1\"])'\n].join(', ');\n\n/**\n * Returns first and last focusable elements inside of a given element based on specific CSS selector\n */\nexport const getFocusableBoundaryElements = (\n element: HTMLElement\n): HTMLElement[] => {\n const list: HTMLElement[] = Array.from(\n element.querySelectorAll(\n FOCUSABLE_ELEMENTS_SELECTOR\n ) as NodeListOf<HTMLElement>\n ).filter((el) => el.tabIndex !== -1);\n return [list[0], list[list.length - 1]];\n};\n\n/**\n * Function that enforces browser focus to be trapped inside a DOM element.\n *\n * Works only for clicks inside the element and navigation with 'Tab', ignoring clicks outside of the element\n *\n * @param element The element around which focus will be trapped inside\n * @param stopFocusTrap$ The observable stream. When completed the focus trap will clean up listeners\n * and free internal resources\n * @param refocusOnClick Put the focus back to the last focused element whenever a click occurs on element (default to\n * false)\n */\nexport const focusTrap = (\n element: HTMLElement,\n stopFocusTrap$: Observable<any>,\n refocusOnClick = false\n): void => {\n // last focused element\n const lastFocusedElement$ = fromEvent<FocusEvent>(element, 'focusin').pipe(\n takeUntil(stopFocusTrap$),\n map((e) => e.target)\n );\n\n // 'tab' / 'shift+tab' stream\n fromEvent<KeyboardEvent>(element, 'keydown')\n .pipe(\n takeUntil(stopFocusTrap$),\n /* eslint-disable import/no-deprecated */\n filter((e) => e.which === Key.Tab),\n /* eslint-enable import/no-deprecated */\n withLatestFrom(lastFocusedElement$)\n )\n .subscribe(([tabEvent, focusedElement]) => {\n const [first, last] = getFocusableBoundaryElements(element);\n\n if (\n (focusedElement === first || focusedElement === element) &&\n tabEvent.shiftKey\n ) {\n last.focus();\n tabEvent.preventDefault();\n }\n\n if (focusedElement === last && !tabEvent.shiftKey) {\n first.focus();\n tabEvent.preventDefault();\n }\n });\n\n // inside click\n if (refocusOnClick) {\n fromEvent(element, 'click')\n .pipe(\n takeUntil(stopFocusTrap$),\n withLatestFrom(lastFocusedElement$),\n map((arr) => arr[1] as HTMLElement)\n )\n .subscribe((lastFocusedElement) => lastFocusedElement.focus());\n }\n};\n","export enum ModalDismissReasons {\n BackdropClick,\n Esc\n}\n","import { DOCUMENT } from '@angular/common';\nimport {\n AfterViewInit,\n Component,\n ElementRef,\n EventEmitter,\n Inject,\n Input,\n OnDestroy,\n OnInit,\n Output,\n HostBinding,\n HostListener\n} from '@angular/core';\n\nimport { getFocusableBoundaryElements, FOCUS } from './util';\nimport { ModalDismissReasons } from './modal-dismiss-reasons';\n\n@Component({\n selector: 'lux-modal-window',\n template: `\n <div class=\"modal-dialog\" role=\"document\">\n <div class=\"modal-content\"><ng-content></ng-content></div>\n </div>\n `\n})\nexport class LuxModalWindowComponent\n implements OnInit, AfterViewInit, OnDestroy\n{\n private _elWithFocus: Element; // element that is focused prior to modal opening\n\n @Input() ariaDescribedBy: string;\n @Input() ariaLabelledBy: string;\n @Input() backdrop: boolean | string = false;\n @Input() keyboard = true;\n @Input() windowClass: string;\n\n @Output() dismissEvent = new EventEmitter();\n\n @HostBinding('class') get class(): string {\n return `modal ${this.windowClass || ''}`;\n }\n @HostBinding('attr.role') role = 'dialog';\n @HostBinding('tabindex') tabindex = '-1';\n @HostBinding('attr.aria-modal') ariamodal = true;\n @HostBinding('attr.aria-labelledby') get hostAriaLabelledBy(): string {\n return this.ariaLabelledBy;\n }\n @HostBinding('attr.aria-describedby') get hostAriaDescribedBy(): string {\n return this.ariaDescribedBy;\n }\n @HostListener('click', ['$event.target']) backdropClick(\n btn: HTMLElement\n ): void {\n if (this.backdrop === true && this._elRef.nativeElement === btn) {\n this.dismiss(ModalDismissReasons.BackdropClick);\n }\n }\n @HostListener('keyup.esc', ['$event']) escKey(event): void {\n if (this.keyboard && !event.defaultPrevented) {\n this.dismiss(ModalDismissReasons.Esc);\n }\n }\n\n constructor(\n @Inject(DOCUMENT) private _document: any,\n private _elRef: ElementRef<HTMLElement>\n ) {}\n\n dismiss(reason): void {\n this.dismissEvent.emit(reason);\n }\n\n ngOnInit(): void {\n this._elWithFocus = this._document.activeElement;\n }\n\n ngAfterViewInit(): void {\n if (!this._elRef.nativeElement.contains(document.activeElement)) {\n const firstFocusable = getFocusableBoundaryElements(\n this._elRef.nativeElement\n )[0];\n\n const elementToFocus = firstFocusable || this._elRef.nativeElement;\n elementToFocus.focus();\n }\n }\n\n ngOnDestroy(): void {\n const body = this._document.body;\n const elWithFocus = this._elWithFocus;\n\n let elementToFocus;\n if (elWithFocus && elWithFocus[FOCUS] && body.contains(elWithFocus)) {\n elementToFocus = elWithFocus;\n } else {\n elementToFocus = body;\n }\n elementToFocus.focus();\n this._elWithFocus = null;\n }\n}\n","import {Component, Input, HostBinding} from '@angular/core';\n\n@Component({\n selector: 'lux-modal-backdrop',\n template: ''\n})\nexport class LuxModalBackdropComponent {\n @Input() backdropClass: string;\n\n @HostBinding('class') class = 'modal-backdrop fade show';\n @HostBinding('style') style = 'z-index: 1050';\n}\n","import { Injectable } from '@angular/core';\n\nexport interface LuxModalOptions {\n ariaDescribedBy?: string;\n ariaLabelledBy?: string;\n backdrop?: boolean;\n keyboard?: boolean;\n windowClass?: string;\n backdropClass?: string;\n}\n\n@Injectable({ providedIn: 'root' })\nexport class LuxModalConfig implements LuxModalOptions {\n backdrop = true;\n}\n","import {\n Injectable,\n ApplicationRef,\n ComponentFactoryResolver,\n TemplateRef,\n ComponentRef,\n Inject,\n Injector,\n RendererFactory2\n} from '@angular/core';\nimport { DOCUMENT } from '@angular/common';\n\nimport { ActiveModal, ModalRef } from './modal-ref';\nimport { ContentRef, focusTrap, isDefined } from './util';\nimport { LuxModalWindowComponent } from './modal-window';\nimport { Subject } from 'rxjs';\nimport { LuxModalBackdropComponent } from './modal-backdrop';\nimport { LuxModalOptions, LuxModalConfig } from './modal-config';\n\n@Injectable({ providedIn: 'root' })\nexport class ModalStack {\n private _activeWindowCmptHasChanged = new Subject();\n private _modalRefs: ModalRef[] = [];\n private _windowCmpts: ComponentRef<LuxModalWindowComponent>[] = [];\n private _ariaHiddenValues: Map<Element, string> = new Map();\n private _backdropAttributes = ['backdropClass'];\n private _windowAttributes = [\n 'ariaLabelledBy',\n 'backdrop',\n 'centered',\n 'keyboard',\n 'scrollable',\n 'size',\n 'windowClass'\n ];\n\n constructor(\n private _applicationRef: ApplicationRef,\n @Inject(DOCUMENT) private _document: any,\n private _injector: Injector,\n private _rendererFactory: RendererFactory2,\n private modalConfig: LuxModalConfig\n ) {\n this._activeWindowCmptHasChanged.subscribe(() => {\n if (this._windowCmpts.length) {\n const activeWindowCmpt =\n this._windowCmpts[this._windowCmpts.length - 1];\n focusTrap(\n activeWindowCmpt.location.nativeElement,\n this._activeWindowCmptHasChanged\n );\n this._revertAriaHidden();\n this._setAriaHidden(activeWindowCmpt.location.nativeElement);\n }\n });\n }\n\n open(\n moduleCFR: ComponentFactoryResolver,\n content: any,\n options: LuxModalOptions\n ): ModalRef {\n const config = Object.assign({}, this.modalConfig, options);\n const containerEl = this._document.body;\n const renderer = this._rendererFactory.createRenderer(null, null);\n const removeBodyClass = (): void => {\n if (!this._modalRefs.length) {\n renderer.removeClass(this._document.body, 'modal-open');\n this._revertAriaHidden();\n }\n };\n const activeModal = new ActiveModal();\n const contentRef = this.getContentRef(moduleCFR, content, activeModal);\n const backdropCmptRef: ComponentRef<LuxModalBackdropComponent> =\n config.backdrop ? this._attachBackdrop(moduleCFR, containerEl) : null;\n const windowCmptRef: ComponentRef<LuxModalWindowComponent> =\n this._attachWindowComponent(moduleCFR, containerEl, contentRef);\n const modalRef: ModalRef = new ModalRef(\n windowCmptRef,\n contentRef,\n backdropCmptRef\n );\n this._registerModalRef(modalRef);\n this._registerWindowCmpt(windowCmptRef);\n modalRef.result.then(removeBodyClass, removeBodyClass);\n activeModal.close = (result: any): void => {\n modalRef.close(result);\n };\n activeModal.dismiss = (reason: any): void => {\n modalRef.dismiss(reason);\n };\n\n this._applyWindowOptions(windowCmptRef.instance, config);\n if (this._modalRefs.length === 1) {\n renderer.addClass(this._document.body, 'modal-open');\n }\n if (backdropCmptRef && backdropCmptRef.instance) {\n this._applyBackgroundOptions(backdropCmptRef.instance, config);\n backdropCmptRef.changeDetectorRef.detectChanges();\n }\n windowCmptRef.changeDetectorRef.detectChanges();\n\n return modalRef;\n }\n\n private _applyWindowOptions(\n windowInstance: LuxModalWindowComponent,\n config: LuxModalOptions\n ): void {\n this._windowAttributes.forEach((optionName: string) => {\n if (isDefined(config[optionName])) {\n windowInstance[optionName] = config[optionName];\n }\n });\n }\n\n private _applyBackgroundOptions(\n backgroudInstance: LuxModalBackdropComponent,\n config: LuxModalOptions\n ): void {\n this._backdropAttributes.forEach((optionName: string) => {\n if (isDefined(config[optionName])) {\n backgroudInstance[optionName] = config[optionName];\n }\n });\n }\n\n private _revertAriaHidden(): void {\n this._ariaHiddenValues.forEach((value, element) => {\n if (value) {\n element.setAttribute('aria-hidden', value);\n } else {\n element.removeAttribute('aria-hidden');\n }\n });\n this._ariaHiddenValues.clear();\n }\n\n private getContentRef(\n moduleCFR: ComponentFactoryResolver,\n content: any,\n activeModal: ActiveModal\n ): ContentRef {\n if (content instanceof TemplateRef) {\n return this.createFromTemplateRef(content, activeModal);\n }\n }\n\n private createFromTemplateRef(\n content: TemplateRef<any>,\n activeModal: ActiveModal\n ): ContentRef {\n const context = {\n $implicit: activeModal,\n // eslint-disable-next-line prefer-arrow/prefer-arrow-functions\n close(result): void {\n activeModal.close(result);\n },\n // eslint-disable-next-line prefer-arrow/prefer-arrow-functions\n dismiss(reason): void {\n activeModal.dismiss(reason);\n }\n };\n const viewRef = content.createEmbeddedView(context);\n this._applicationRef.attachView(viewRef);\n return new ContentRef([viewRef.rootNodes], viewRef);\n }\n\n private _attachBackdrop(\n moduleCFR: ComponentFactoryResolver,\n containerEl: any\n ): ComponentRef<LuxModalBackdropComponent> {\n const backdropFactory = moduleCFR.resolveComponentFactory(\n LuxModalBackdropComponent\n );\n const backdropCmptRef = backdropFactory.create(this._injector);\n this._applicationRef.attachView(backdropCmptRef.hostView);\n containerEl.appendChild(backdropCmptRef.location.nativeElement);\n return backdropCmptRef;\n }\n\n private _attachWindowComponent(\n moduleCFR: ComponentFactoryResolver,\n containerEl: any,\n contentRef: any\n ): ComponentRef<LuxModalWindowComponent> {\n const windowFactory = moduleCFR.resolveComponentFactory(\n LuxModalWindowComponent\n );\n const windowCmptRef = windowFactory.create(\n this._injector,\n contentRef.nodes\n );\n this._applicationRef.attachView(windowCmptRef.hostView);\n containerEl.appendChild(windowCmptRef.location.nativeElement);\n return windowCmptRef;\n }\n\n private _registerModalRef(modalRef: ModalRef): void {\n const unregisterModalRef = (): void => {\n const index = this._modalRefs.indexOf(modalRef);\n if (index > -1) {\n this._modalRefs.splice(index, 1);\n }\n };\n this._modalRefs.push(modalRef);\n modalRef.result.then(unregisterModalRef, unregisterModalRef);\n }\n\n private _registerWindowCmpt(\n windowCmpt: ComponentRef<LuxModalWindowComponent>\n ): void {\n this._windowCmpts.push(windowCmpt);\n this._activeWindowCmptHasChanged.next();\n\n windowCmpt.onDestroy(() => {\n const index = this._windowCmpts.indexOf(windowCmpt);\n if (index > -1) {\n this._windowCmpts.splice(index, 1);\n this._activeWindowCmptHasChanged.next();\n }\n });\n }\n\n private _setAriaHidden(element: Element): void {\n const parent = element.parentElement;\n if (parent && element !== this._document.body) {\n Array.from(parent.children).forEach((sibling) => {\n if (sibling !== element && sibling.nodeName !== 'SCRIPT') {\n this._ariaHiddenValues.set(\n sibling,\n sibling.getAttribute('aria-hidden')\n );\n sibling.setAttribute('aria-hidden', 'true');\n }\n });\n this._setAriaHidden(parent);\n }\n }\n}\n","import {\n Injectable,\n ComponentFactoryResolver,\n TemplateRef,\n} from '@angular/core';\nimport { ModalStack } from './modal-stack';\nimport { ModalRef } from './modal-ref';\nimport { LuxModalOptions } from './modal-config';\n\n/**\n * A service that it allow open an close modal components\n */\n@Injectable({ providedIn: 'root' })\nexport class ModalService {\n constructor(\n private modalStack: ModalStack,\n private moduleCFR: ComponentFactoryResolver\n ) {}\n\n /**Open a modal component\n * @param content TemplateRef\n */\n open(content: TemplateRef<any>, options: LuxModalOptions = {}): ModalRef {\n return this.modalStack.open(this.moduleCFR, content, options);\n }\n}\n","import { HttpClient } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\nimport { DataSource } from '../datasource';\nimport { Observable, of, Subject } from 'rxjs';\nimport {\n debounceTime,\n distinctUntilChanged,\n map,\n switchMap\n} from 'rxjs/operators';\nimport { GeoPoint } from '../map/geopoint';\n\ninterface SearchResult {\n place_id: number;\n lat: number;\n lon: number;\n display_name: string;\n icon: string;\n}\n\n@Injectable({ providedIn: 'root' })\nexport class GeolocationService {\n private debouncePeriodMs = 300; // ms\n private cacheSize = 20;\n private lastQueriesWithResults = new Map<string, SearchResult[]>();\n private lastQueriesLru: string[] = [];\n private currentSearch$: Subject<string>;\n private currentQuery$: Observable<SearchResult[]>;\n\n constructor(private http: HttpClient) {\n this.currentSearch$ = new Subject<string>();\n\n const typed$ = this.currentSearch$\n .asObservable()\n .pipe(distinctUntilChanged());\n\n this.currentQuery$ = typed$.pipe(\n debounceTime(this.debouncePeriodMs),\n\n switchMap((currentQuery) => {\n const data = this.getFromCache(currentQuery);\n if (data !== undefined) {\n return of(data);\n }\n // Nominatim search documentation:\n // https://nominatim.org/release-docs/develop/api/Search/\n const url =\n 'https://nominatim.openstreetmap.org/search?format=json&limit=20&q=' +\n encodeURIComponent(currentQuery);\n const headers = {\n 'Content-Type': 'application/json'\n };\n this.addToCache(currentQuery, []);\n\n return this.http.get(url, { headers }).pipe(\n map((response) => {\n const searchResults = response as unknown as SearchResult[];\n const uniqueResults = distinct(searchResults);\n return this.addToCache(currentQuery, uniqueResults);\n })\n );\n })\n );\n }\n\n searchGeolocation(query: string): Observable<SearchResult[]> {\n this.currentSearch$.next(query);\n return this.currentQuery$;\n }\n\n getLabels(\n instance: GeolocationService,\n keys: GeoPoint[]\n ): Observable<DataSource<GeoPoint, string>> {\n const searchResults = instance.lastQueriesWithResults\n .get(instance.getLatestQuery())\n .filter((searchResult) => samePosition(searchResult, keys));\n return of(\n searchResults.map((searchResult) => {\n const key: GeoPoint = {\n type: 'Point',\n coordinates: [searchResult.lon, searchResult.lat]\n };\n return {\n key,\n label: searchResult.display_name\n };\n })\n );\n }\n\n getData(\n instance: GeolocationService,\n search: string\n ): Observable<DataSource<GeoPoint, string>> {\n return instance.searchGeolocation(search).pipe(\n map((searchResults) =>\n searchResults.map((searchResult) => {\n const key: GeoPoint = {\n type: 'Point',\n coordinates: [searchResult.lon, searchResult.lat]\n };\n const label = searchResult.display_name;\n return { key, label };\n })\n )\n );\n }\n\n // Cache implemementation ---\n private getFromCache(query: string): SearchResult[] {\n if (this.lastQueriesWithResults.has(query)) {\n return this.lastQueriesWithResults.get(query);\n }\n return undefined;\n }\n private addToCache(query: string, data: SearchResult[]): SearchResult[] {\n if (this.lastQueriesWithResults.keys.length >= this.cacheSize) {\n const deletedQuery = this.lastQueriesLru[0];\n this.revomeFromCache(deletedQuery);\n }\n this.lastQueriesWithResults.set(query, data);\n this.lastQueriesLru.push(query);\n return data;\n }\n private revomeFromCache(query: string): void {\n this.lastQueriesWithResults.delete(query);\n const index = this.lastQueriesLru.findIndex((it) => it === query);\n this.lastQueriesLru.splice(index, 1);\n }\n private getLatestQuery(): string | null {\n return this.lastQueriesLru.length\n ? this.lastQueriesLru[this.lastQueriesLru.length - 1]\n : null;\n }\n // End cache implemementation ---\n}\n\nconst samePosition = (\n searchResult: SearchResult,\n keys: GeoPoint[]\n): boolean => {\n let found = false;\n keys.forEach((item) => {\n if (\n searchResult.lon === item.coordinates[0] &&\n searchResult.lat === item.coordinates[1]\n ) {\n found = true;\n }\n });\n return found;\n};\n\nconst distinct = (data: SearchResult[]): SearchResult[] => {\n const unique: { [key: string]: number } = {};\n return data.filter((r) => {\n if (unique[r.display_name]) {\n return false;\n }\n unique[r.display_name] = 1;\n return true;\n });\n};\n","import {\n Component,\n ElementRef,\n EventEmitter,\n forwardRef,\n Input,\n OnInit,\n Output,\n TemplateRef,\n ViewChild\n} from '@angular/core';\nimport {\n AbstractControl,\n NG_VALIDATORS,\n NG_VALUE_ACCESSOR,\n ValidationErrors\n} from '@angular/forms';\nimport { Observable } from 'rxjs';\nimport { DataSource } from '../datasource';\nimport {\n exists,\n hasValue,\n isInitialAndEmpty,\n isValidNumber,\n roundToMultipleOf\n} from '../helperFns';\nimport { languageDetector } from '../lang';\nimport { GeoPoint } from '../map/geopoint';\nimport { ModalService } from '../modal/modal.service';\nimport { GeolocationService } from './geolocation.service';\n\n@Component({\n selector: 'lux-geolocation',\n templateUrl: './geolocation.component.html',\n styleUrls: ['./geolocation.component.scss'],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n multi: true,\n useExisting: forwardRef(() => GeolocationComponent)\n },\n {\n provide: NG_VALIDATORS,\n multi: true,\n useExisting: forwardRef(() => GeolocationComponent)\n }\n ]\n})\nexport class GeolocationComponent implements OnInit {\n static idCounter = 0;\n\n @ViewChild('latitude', { static: true }) latitude: ElementRef;\n @ViewChild('longitude', { static: true }) longitude: ElementRef;\n @ViewChild('map', { static: false }) map?: ElementRef;\n\n touched = false;\n dirty = false;\n lastErrors: ValidationErrors | null = null;\n\n private _disabled: string | boolean;\n private _required: boolean;\n private _value: any;\n\n latitudeValue?: number = undefined;\n longitudeValue?: number = undefined;\n\n isValidNumber = isValidNumber;\n\n i18n = {\n en: {\n lat: 'latitude',\n lon: 'longitude',\n selectLocation: 'Select location',\n location: 'Location',\n selectAction: 'Select',\n cancelAction: 'Cancel',\n closeAction: 'Close',\n typeToSearch: 'type to search',\n cardinalPoints: {\n north: 'N',\n south: 'S',\n east: 'E',\n west: 'W'\n },\n userErrors: {\n required: 'Required field.',\n minLatitude: 'Minimum latitude is $minLatitude.',\n maxLatitude: 'Maximum latitude is $maxLatitude.',\n minLongitude: 'Minimum longitude is $minLongitude.',\n maxLongitude: 'Maximum longitude is $maxLongitude.'\n }\n },\n es: {\n lat: 'latitud',\n lon: 'longitud',\n selectLocation: 'Seleccione ubicación',\n location: 'Ubicación',\n selectAction: 'Seleccionar',\n cancelAction: 'Cancelar',\n closeAction: 'Cerrar',\n typeToSearch: 'escribe para buscar',\n cardinalPoints: {\n north: 'N',\n south: 'S',\n east: 'E',\n west: 'O'\n },\n userErrors: {\n required: 'El campo es obligatorio.',\n minLatitude: 'La latitud mínima es $minLatitude.',\n maxLatitude: 'La latitud máxima es $maxLatitude.',\n minLongitude: 'La longitud mínima es $minLongitude.',\n maxLongitude: 'La longitud máxima es $maxLongitude.'\n }\n }\n };\n\n @Input()\n public minLatitude: number;\n @Input()\n public maxLatitude: number;\n @Input()\n public minLongitude: number;\n @Input()\n public maxLongitude: number;\n @Input()\n public step: number;\n @Input()\n public zoom: number;\n\n get className(): string {\n return this.checkClassName();\n }\n\n @Input() lang = languageDetector();\n @Input() public inlineErrors = false;\n @Input() public inputId: string;\n @Input('aria-label') public ariaLabel: string;\n @Input() public readonly: boolean | null = null;\n\n @Input()\n set disabled(v: string | boolean) {\n v = typeof v === 'string' && v !== 'false' ? true : v;\n this._disabled = v;\n }\n get disabled(): string | boolean {\n return this._disabled;\n }\n\n @Input()\n set required(v: boolean) {\n this._required = v;\n }\n get required(): boolean {\n return this._required;\n }\n\n @Input()\n set value(v: GeoPoint) {\n if (v === this._value) {\n return; // prevent events when there is no changes\n }\n const initialAndEmpty = isInitialAndEmpty(this._value, v);\n if (\n v &&\n v.coordinates &&\n v.coordinates.length === 2 &&\n exists(v.coordinates[0] && exists(v.coordinates[1]))\n ) {\n this._value = v;\n this.setLatitudeInControl(v.coordinates[1]);\n this.setLongitudeInControl(v.coordinates[0]);\n } else if (!v) {\n this._value = null;\n this.setLatitudeInControl(null);\n this.setLongitudeInControl(null);\n } else {\n this._value = v;\n // we don't set value in control if the value is not valid\n // if we do, the content of the control changes and can erase what the user is typing\n }\n this.onChange(v);\n if (!initialAndEmpty) {\n this.valueChange.emit(v);\n }\n }\n get value(): GeoPoint {\n return this._value;\n }\n\n @Output() valueChange = new EventEmitter<GeoPoint>();\n @Output() keyPress = new EventEmitter<KeyboardEvent>();\n\n onChange = (value: any): void => {};\n onTouched = (): void => {};\n\n constructor(\n private modalService: ModalService,\n public locationService: GeolocationService\n ) {}\n\n // ControlValueAccessor Interface implementation\n writeValue(value: any): void {\n this.value = value;\n }\n\n registerOnChange(onChange: any): void {\n this.onChange = onChange;\n }\n\n registerOnTouched(onTouched: any): void {\n this.onTouched = onTouched;\n }\n\n markAsTouched(): void {\n if (!this.touched) {\n this.onTouched();\n this.touched = true;\n }\n }\n\n setDisabledState(disabled: boolean): void {\n this.disabled = disabled;\n }\n // End of ControlValueAccessor Interface implementation\n\n private setLatitudeInControl(latitude: number): void {\n // this.latitude.nativeElement.value = latitude;\n this.latitudeValue = latitude;\n }\n private setLongitudeInControl(longitude: number): void {\n // this.longitude.nativeElement.value = longitude;\n this.longitudeValue = longitude;\n }\n clear(): void {\n this.setLatitudeInControl(null);\n this.setLongitudeInControl(null);\n this.value = null;\n }\n\n // Validator interface\n registerOnValidatorChange(): void {}\n\n validate(control: AbstractControl): ValidationErrors | null {\n const value = control.value;\n let result: ValidationErrors | null = null;\n\n if (\n this.required &&\n !hasValue(value) &&\n !exists(this.latitudeValue) &&\n !exists(this.longitudeValue)\n ) {\n result = result || {};\n result.required = { value, reason: 'Required field.' };\n }\n if (!exists(this.latitudeValue) && exists(this.longitudeValue)) {\n result = result || {};\n result.existsLatitude = {\n value,\n reason: 'Latitude not specified.'\n };\n }\n if (exists(this.latitudeValue) && !exists(this.longitudeValue)) {\n result = result || {};\n result.existsLongitude = {\n value,\n reason: 'Longitude not specified.'\n };\n }\n if (exists(this.minLatitude) && this.latitudeValue < this.minLatitude) {\n result = result || {};\n result.minLatitude = {\n value,\n min: this.minLatitude,\n reason: `Latitude is lower than minimum value: ${this.minLatitude}.`\n };\n }\n if (exists(this.maxLatitude) && this.latitudeValue > this.maxLatitude) {\n result = result || {};\n result.maxLatitude = {\n value,\n max: this.maxLatitude,\n reason: `Latitude is higher than maximum value: ${this.maxLatitude}.`\n };\n }\n if (exists(this.minLongitude) && this.longitudeValue < this.minLongitude) {\n result = result || {};\n result.minLongitude = {\n value,\n min: this.minLongitude,\n reason: `Longitude is lower than minimum value: ${this.minLongitude}.`\n };\n }\n if (exists(this.maxLongitude) && this.longitudeValue > this.maxLongitude) {\n result = result || {};\n result.maxLongitude = {\n value,\n max: this.maxLongitude,\n reason: `Longitude is higher than maximum value: ${this.maxLongitude}.`\n };\n }\n this.lastErrors = result;\n return result;\n }\n // End of Validator interface\n\n ngOnInit(): void {\n this.inputId = this.inputId\n ? this.inputId\n : `geolocation$${GeolocationComponent.idCounter++}`;\n this.setPatterns();\n }\n\n roundToStepAndUpdateLatitudeAndLongitude(\n newLatitudeAndLongitude: number[]\n ): void {\n const newLatitude = roundToMultipleOf(\n newLatitudeAndLongitude[1],\n this.step\n );\n const newLongitude = roundToMultipleOf(\n newLatitudeAndLongitude[0],\n this.step\n );\n if (this.disabled || this.readonly) {\n return;\n }\n if (!exists(newLatitudeAndLongitude)) {\n this.value = null;\n }\n this.value = {\n type: 'Point',\n coordinates: [newLongitude, newLatitude]\n };\n }\n\n onLostFocus(): void {\n this.markAsTouched();\n }\n onEventLatitude(newLatitude: string): void {\n if (this.disabled || this.readonly) {\n return;\n }\n const newLatitudeValue = isValidNumber(newLatitude) ? +newLatitude : null;\n if (\n !(exists(this.value) && exists(this.value.coordinates[0])) &&\n !exists(newLatitudeValue)\n ) {\n this.value = null;\n } else {\n this.value = {\n type: 'Point',\n coordinates: [\n this.value ? this.value.coordinates[0] : undefined,\n newLatitudeValue\n ]\n };\n }\n this.markAsTouched();\n }\n onEventLongitude(newLongitude: string): void {\n if (this.disabled || this.readonly) {\n return;\n }\n const newLongitudeValue = isValidNumber(newLongitude)\n ? +newLongitude\n : null;\n if (\n !exists(newLongitudeValue) &&\n !(exists(this.value) && exists(this._value.coordinates[1]))\n ) {\n this.value = null;\n } else {\n this.value = {\n type: 'Point',\n coordinates: [\n newLongitudeValue,\n this.value ? this.value.coordinates[1] : undefined\n ]\n };\n }\n this.markAsTouched();\n }\n onKeyPress(event: KeyboardEvent): void {\n this.keyPress.emit(event);\n }\n\n checkClassName(): string {\n return this.disabled\n ? this.readonly\n ? 'disabled readonly'\n : 'disabled'\n : this.readonly\n ? 'readonly'\n : '';\n }\n\n openModalMap(modal: TemplateRef<any>): void {\n this.modalService.open(modal).result.then(\n (result) => {\n if (result !== 'cancel') {\n this.roundToStepAndUpdateLatitudeAndLongitude(result);\n }\n },\n (_) => {}\n );\n }\n\n onSearchLocationChanged(newValue: GeoPoint, map: any): void {\n map.markerPoint = newValue;\n map.center = map.markerPoint;\n }\n\n get mapTitle(): string {\n return this._disabled || !!this.readonly\n ? this.i18n[this.lang].location\n : this.i18n[this.lang].selectLocation;\n }\n\n get self(): GeolocationComponent {\n return this;\n }\n\n getLabels(\n instance: GeolocationComponent,\n keys: GeoPoint[]\n ): Observable<DataSource<GeoPoint, string>> {\n return instance.locationService.getLabels(instance.locationService, keys);\n }\n\n getData(\n instance: GeolocationComponent,\n search: string\n ): Observable<DataSource<GeoPoint, string>> {\n return instance.locationService.getData(instance.locationService, search);\n }\n\n setPatterns(): void {\n this.step = this.step || 0.00001; // 0.00001 degrees = 1.11 meters\n this.zoom = this.zoom || 18; // (360/2^18) degrees ~ 0.00137 degrees ~ 153 meters\n this.minLatitude = this.minLatitude || -90;\n this.maxLatitude = this.maxLatitude || +90;\n this.minLongitude = this.minLongitude || -180;\n this.maxLongitude = this.maxLongitude || +180;\n }\n}\n","export enum Placement {\n Top = 'top',\n Bottom = 'bottom',\n Left = 'left',\n Right = 'right'\n}\nexport type PlacementValue = 'left' | 'right' | 'top' | 'bottom';\n","import { Component, Input } from '@angular/core';\nimport { LuxTooltipContext } from './tooltip-context';\n\n/**\n * Default Tooltip Component\n */\n@Component({\n template: `\n <span class=\"lux-tooltip\" style=\"transition: opacity 200ms\">{{context.message}}</span>\n `\n})\nexport class TooltipComponent {\n\n @Input() context: LuxTooltipContext;\n\n constructor() { }\n\n}\n","import { ViewRef, ComponentRef } from '@angular/core';\n\nexport class TooltipContentRef {\n constructor(public viewRef?: ViewRef, public componentRef?: ComponentRef<any>) {}\n}\n","import {\n Injectable,\n Injector,\n ComponentRef,\n ComponentFactoryResolver,\n ApplicationRef,\n EmbeddedViewRef,\n ElementRef,\n TemplateRef\n} from '@angular/core';\n\nimport { PlacementValue, Placement } from './placement';\nimport { LuxTooltipContext } from './tooltip-context';\nimport { TooltipComponent } from './tooltip.component';\nimport { TooltipContentRef } from './tooltop-content';\n\n@Injectable()\nexport class TooltipService {\n constructor(\n private _injector: Injector,\n private _crf: ComponentFactoryResolver,\n private _applicationRef: ApplicationRef\n ) {}\n\n appendComponentToBody(\n content: any,\n elHost: ElementRef,\n placement: PlacementValue\n ): TooltipContentRef {\n const tooltipContentRef = this.getTooltipContentRef(content);\n if (tooltipContentRef) {\n let domElem = (tooltipContentRef.viewRef as EmbeddedViewRef<any>)\n .rootNodes[0];\n document.body.appendChild(domElem);\n if (tooltipContentRef.componentRef) {\n tooltipContentRef.componentRef.changeDetectorRef.detectChanges();\n }\n domElem = this.setStyle(domElem, placement);\n domElem = this.setPosition(domElem, elHost, placement);\n return tooltipContentRef;\n }\n return null;\n }\n\n removeComponentFromBody(tooltipContentRef: TooltipContentRef): void {\n this._applicationRef.detachView(tooltipContentRef.viewRef);\n if (tooltipContentRef.componentRef) {\n tooltipContentRef.componentRef.destroy();\n }\n }\n\n private getTooltipContentRef(content: any): TooltipContentRef {\n if (!content) {\n // nothing to show\n } else if (content instanceof TemplateRef) {\n return this.createFromTemplateRef(content);\n } else if (typeof content === 'string') {\n return this.createFromComponent(TooltipComponent, { message: content });\n } else {\n return this.createFromComponent(content);\n }\n }\n\n private createFromTemplateRef(content: TemplateRef<any>): TooltipContentRef {\n const viewRef = content.createEmbeddedView({});\n this._applicationRef.attachView(viewRef);\n return new TooltipContentRef(viewRef);\n }\n\n private createFromComponent(\n component: any,\n context?: LuxTooltipContext\n ): TooltipContentRef {\n const componentRef: ComponentRef<any> = this._crf\n .resolveComponentFactory(component)\n .create(this._injector);\n if (context) {\n componentRef.instance.context = context;\n }\n this._applicationRef.attachView(componentRef.hostView);\n return new TooltipContentRef(componentRef.hostView, componentRef);\n }\n\n private setStyle(\n domElem: HTMLElement,\n placement: PlacementValue\n ): HTMLElement {\n domElem.style.position = 'absolute';\n domElem.style.minWidth = 'min-content';\n domElem.style.minHeight = 'min-content';\n const tooltipElement = this.getTooltipElementFromHTMLElemnt(domElem);\n placement =\n placement !== undefined\n ? (placement.toLocaleLowerCase() as PlacementValue)\n : 'top'; // 'Top' is the default value of placement\n tooltipElement.classList.add(`lux-tooltip-${placement}`);\n tooltipElement.classList.add('lux-tooltip-show');\n return domElem;\n }\n\n private getTooltipElementFromHTMLElemnt(domElem: HTMLElement): any {\n const elementsArray = Array.from(domElem.classList).filter(\n (className) => className === 'lux-tooltip'\n );\n if (elementsArray.length !== 0) {\n return domElem;\n } else if (domElem.hasChildNodes()) {\n const childrenArray = Array.from(domElem.children).filter(\n (child) =>\n this.getTooltipElementFromHTMLElemnt(child as HTMLElement) !== null\n );\n if (childrenArray.length !== 0) {\n return this.getTooltipElementFromHTMLElemnt(\n childrenArray[0] as HTMLElement\n );\n } else {\n return null;\n }\n } else {\n return null;\n }\n }\n\n private setPosition(\n domElem: HTMLElement,\n elHost: ElementRef,\n placement: PlacementValue\n ): HTMLElement {\n const hostPos = elHost.nativeElement.getBoundingClientRect();\n const tooltipPos = domElem.getBoundingClientRect();\n const scrollPos =\n window.pageYOffset ||\n document.documentElement.scrollTop ||\n document.body.scrollTop ||\n 0;\n let top = 0;\n let left = 0;\n const offset = 10;\n\n switch (placement) {\n case Placement.Bottom:\n top = hostPos.bottom + offset;\n left = hostPos.left + (hostPos.width - tooltipPos.width) / 2;\n break;\n case Placement.Left:\n top = hostPos.top + (hostPos.height - tooltipPos.height) / 2;\n left = hostPos.left - tooltipPos.width - offset;\n break;\n case Placement.Right:\n top = hostPos.top + (hostPos.height - tooltipPos.height) / 2;\n left = hostPos.right + offset;\n break;\n case Placement.Top:\n default:\n top = hostPos.top - tooltipPos.height - offset;\n left = hostPos.left + (hostPos.width - tooltipPos.width) / 2;\n break;\n }\n top = Math.max(0, top);\n left = Math.max(0, left);\n domElem.style.top = `${top + scrollPos}px`;\n domElem.style.left = `${left}px`;\n return domElem;\n }\n}\n","import { HostListener, Input, Directive, ElementRef } from '@angular/core';\n\nimport { TooltipService } from './tooltip.service';\nimport { PlacementValue } from './placement';\nimport { TooltipContentRef } from './tooltop-content';\n\n/**\n * Tooltip directive\n */\n@Directive({\n selector: '[luxTooltip]'\n})\nexport class LuxTooltipDirective {\n /** Tooltip title */\n @Input() luxTooltip: any;\n\n /** Component, TemplateRef or String */\n @Input() content: any;\n\n /** Placement */\n @Input() placement: PlacementValue;\n\n tooltipRef: TooltipContentRef;\n\n constructor(\n private elHost: ElementRef,\n private tooltipService: TooltipService\n ) {}\n\n @HostListener('mouseenter') onMouseEnter(): void {\n if (!this.tooltipRef) {\n this.tooltipRef = this.show(this.content, this.elHost, this.placement);\n }\n }\n\n @HostListener('mouseleave') onMouseLeave(): void {\n if (this.tooltipRef) {\n this.remove(this.tooltipRef);\n this.tooltipRef = null;\n }\n }\n\n @HostListener('click') onClick(): void {\n if (this.tooltipRef) {\n this.remove(this.tooltipRef);\n this.tooltipRef = null;\n }\n }\n\n show(\n component: any,\n elHost: ElementRef,\n placement: PlacementValue\n ): TooltipContentRef {\n return this.tooltipService.appendComponentToBody(\n component,\n elHost,\n placement\n );\n }\n\n remove(tooltipRef: TooltipContentRef): void {\n this.tooltipService.removeComponentFromBody(tooltipRef);\n }\n}\n","import { Component, OnInit, OnDestroy, Inject } from '@angular/core';\nimport {\n Router,\n NavigationEnd,\n ActivatedRoute,\n ActivatedRouteSnapshot\n} from '@angular/router';\nimport { filter } from 'rxjs/operators';\nimport { Subscription } from 'rxjs';\n\nexport interface BreadcrumbItem {\n label: string;\n url: string;\n}\n@Component({\n selector: 'lux-breadcrumb',\n templateUrl: './breadcrumb.component.html',\n styleUrls: ['./breadcrumb.component.scss']\n})\nexport class LuxBreadcrumbComponent implements OnInit, OnDestroy {\n public breadcrumbs: BreadcrumbItem[];\n private subs: Subscription[] = [];\n public imagePath = '../assets/img/arrow-forward.svg';\n\n constructor(private route: Router, private activedRoute: ActivatedRoute) {}\n\n ngOnInit(): void {\n this.subs.push(\n this.route.events\n .pipe(filter((event) => event instanceof NavigationEnd))\n .subscribe((_) => {\n this.breadcrumbs = [];\n this.addBreadcrumbs(this.activedRoute.snapshot.root, true, null);\n })\n );\n }\n\n ngOnDestroy(): void {\n this.subs.forEach((s) => s.unsubscribe());\n this.subs = [];\n }\n\n private addBreadcrumbs(\n activedRouteSnapshot: ActivatedRouteSnapshot,\n isRoot: boolean,\n urlPrefix: string\n ): void {\n const routeConfig = activedRouteSnapshot.routeConfig;\n let url = urlPrefix || '';\n url += routeConfig ? '/' + this.getUrl(activedRouteSnapshot) : '';\n const label = routeConfig\n ? this.getLabel(activedRouteSnapshot)\n : isRoot\n ? 'Home'\n : '';\n if (label && url !== '/') {\n const breadcrumb = { label, url };\n this.breadcrumbs.push(breadcrumb);\n }\n if (activedRouteSnapshot.children.length) {\n this.addBreadcrumbs(activedRouteSnapshot.children[0], false, url);\n }\n }\n\n private getUrl(activedRouteSnapshot: ActivatedRouteSnapshot): string {\n if (!activedRouteSnapshot.url[0]) {\n return '';\n }\n const id = activedRouteSnapshot.params.id;\n return id\n ? `${activedRouteSnapshot.url[0]}/${id}`\n : activedRouteSnapshot.routeConfig.path || '';\n }\n\n private getLabel(activedRouteSnapshot: ActivatedRouteSnapshot): string {\n const routeConfig = activedRouteSnapshot.routeConfig;\n if (!routeConfig) {\n return null;\n }\n if (activedRouteSnapshot.data && activedRouteSnapshot.data.title) {\n const data = activedRouteSnapshot.data;\n if (data.objectTitle) {\n return `${data.title} ${data.objectTitle}`;\n } else {\n return data.title;\n }\n }\n return activedRouteSnapshot.params.id || routeConfig.path;\n }\n}\n","import { Injectable } from '@angular/core';\nimport { from, Observable, of } from 'rxjs';\n\nlet openLayersIsInstalled = false;\n\n@Injectable({ providedIn: 'root' })\nexport class OpenLayerLoaderService {\n load(): Observable<boolean> {\n if ((window as any).ol) {\n return of(true);\n }\n\n const openLayerJsUrl = 'https://openlayers.org/en/v5.3.0/build/ol.js';\n const openLayerCssUrl = 'https://openlayers.org/en/v5.3.0/css/ol.css';\n\n if (!openLayersIsInstalled) {\n openLayersIsInstalled = true; // only try to install it once\n loadCss(openLayerCssUrl, () => {});\n return from(\n new Promise<boolean>((resolve, _) => {\n loadScript(openLayerJsUrl, () => resolve(true));\n })\n );\n }\n return of(true);\n }\n}\n\n/** Dynamically load a script from url and return a callback */\nconst loadScript = (url: string, callback: () => void): void => {\n const script: any = document.createElement('script');\n script.type = 'text/javascript';\n\n if (script.readyState) {\n // for old IE\n script.onreadystatechange = (): void => {\n if (script.readyState === 'loaded' || script.readyState === 'complete') {\n script.onreadystatechange = null;\n callback();\n }\n };\n } else {\n // Others browsers\n script.onload = (): void => {\n callback();\n };\n }\n script.src = url;\n document.getElementsByTagName('head')[0].appendChild(script);\n};\n\n/** Dynamically load css from url and return a callback */\nconst loadCss = (url: string, callback: () => void): void => {\n const link: any = document.createElement('link');\n link.type = 'text/css';\n link.rel = 'stylesheet';\n link.type = 'text/javascript';\n link.href = url;\n link.onload = (): void => {\n callback();\n };\n document.getElementsByTagName('head')[0].appendChild(link);\n};\n","import {\n Component,\n Input,\n Output,\n EventEmitter,\n OnInit,\n AfterViewInit\n} from '@angular/core';\nimport { BehaviorSubject } from 'rxjs';\nimport { OpenLayerLoaderService } from '../geolocation/openlayer-loader.service';\n\nimport { GeoPoint } from './geopoint';\n\n// @dynamic\ndeclare const ol: any;\n\n@Component({\n selector: 'lux-map',\n templateUrl: './map.component.html',\n styleUrls: ['./map.component.scss']\n})\nexport class MapComponent implements OnInit, AfterViewInit {\n static idCounter = 0;\n\n private loaded$: BehaviorSubject<boolean> = new BehaviorSubject(false);\n\n private _map: any;\n\n @Input() mapId;\n\n _zoom: number;\n @Input()\n set zoom(zoom: number) {\n if (!isNaN(zoom)) {\n this._zoom = zoom;\n if (this._map) {\n this._map.getView().setZoom(zoom);\n }\n }\n }\n get zoom(): number {\n return this._zoom;\n }\n\n _center: GeoPoint;\n @Input()\n set center(center: GeoPoint) {\n if (center && center.coordinates && center.coordinates.length === 2) {\n this._center = center;\n if (this._map) {\n this._map.getView().setCenter(ol.proj.fromLonLat(center.coordinates));\n }\n }\n }\n get center(): GeoPoint {\n return this._center;\n }\n\n _readonly: boolean;\n @Input()\n set readonly(readonly: boolean) {\n if (!readonly) {\n if (this._map) {\n this._map.on('click', (args: any) => {\n // args.coordinate is in EPSG:3857 (meters), we transform it into EPSG:4326 (degrees)\n const coordinates = ol.proj.toLonLat(args.coordinate);\n // alternatively: const lonLat = ol.proj.transform(args.coordinate,'EPSG:3857','EPSG:4326');\n this.addMarkerAtCoordinates(coordinates);\n });\n this._map.on('pointermove', (event: any) => {\n const pixel = this._map.getEventPixel(event.originalEvent);\n const hit = this._map.hasFeatureAtPixel(pixel);\n this._map.getViewport().style.cursor = hit ? 'move' : 'grab';\n });\n }\n } else {\n if (this._map) {\n this._map.on('click', (args: any) => {});\n this._map.on('pointermove', (event: any) => {});\n this._map.getViewport().style.cursor = 'grab';\n }\n }\n this._readonly = readonly;\n // reset marker coordinates so marker interactions can be created or recreated accordingly\n // to the changes to readonly\n this.markerCoordinates = this.markerCoordinates;\n }\n get readonly(): boolean {\n return this._readonly;\n }\n\n private _marker: any;\n private _markerInteraction: any;\n private _markerCoordinates: number[];\n @Input()\n private set markerCoordinates(markerCoordinates: number[]) {\n if (markerCoordinates && markerCoordinates.length === 2) {\n this._markerCoordinates = markerCoordinates;\n if (this._map) {\n this.addMarkerAtCoordinates(markerCoordinates);\n }\n } else {\n this._markerCoordinates = undefined;\n if (this._map) {\n this.removeMarker();\n }\n }\n }\n private get markerCoordinates(): number[] {\n return this._markerCoordinates;\n }\n @Input()\n set markerPoint(markerPoint: GeoPoint) {\n if (\n !markerPoint ||\n !(markerPoint.coordinates && markerPoint.coordinates.length === 2)\n ) {\n this.markerCoordinates = undefined;\n } else {\n this.markerCoordinates = [\n +markerPoint.coordinates[0],\n +markerPoint.coordinates[1]\n ];\n }\n this.valueChange.emit(markerPoint);\n }\n get markerPoint(): GeoPoint {\n return {\n type: 'Point',\n coordinates: this.markerCoordinates\n };\n }\n @Output() valueChange = new EventEmitter<GeoPoint>();\n\n private _markerSource: any;\n private _markerStyle: any;\n\n constructor(olLoader: OpenLayerLoaderService) {\n olLoader.load().subscribe((_) => {\n // Initialize\n this._markerSource = new ol.source.Vector();\n this._markerStyle = new ol.style.Style({\n image: new ol.style.Icon({\n anchor: [0.5, 1],\n scale: 0.25,\n src: '/assets/img/marker.png'\n })\n });\n this.loaded$.next(true);\n });\n }\n\n ngOnInit(): void {\n this.mapId = this.mapId ? this.mapId : 'map' + MapComponent.idCounter++;\n }\n\n ngAfterViewInit(): void {\n this.loaded$.subscribe((loaded) => {\n if (loaded) {\n this.initMap();\n }\n });\n }\n private initMap(): void {\n this._map = new ol.Map({\n target: this.mapId,\n controls: ol.control.defaults({ attribution: false }),\n layers: [\n new ol.layer.Tile({\n source: new ol.source.OSM()\n }),\n new ol.layer.Vector({\n source: this._markerSource,\n style: this._markerStyle\n })\n ],\n view: new ol.View({\n center: ol.proj.fromLonLat(\n this.center !== undefined ? this.center.coordinates : [0, 0]\n ),\n zoom: this.zoom\n })\n });\n\n if (this.center === undefined || this.center === null) {\n // if the center is not set, we set its default value\n if ('geolocation' in navigator) {\n navigator.geolocation.getCurrentPosition(\n (position) => {\n this.center = {\n type: 'Point',\n coordinates: [position.coords.longitude, position.coords.latitude]\n };\n },\n (error) => {\n this.center = {\n type: 'Point',\n coordinates: [0, 0]\n };\n }\n );\n } else {\n this.center = {\n type: 'Point',\n coordinates: [0, 0]\n };\n }\n } else {\n // the center needs the map to be properly set, so if it was set before the map was initialized,\n // we set the center again to perform necessary adjustements\n this.center = this.center;\n }\n\n if (this.zoom === undefined || this.zoom === null) {\n // if the zoom is not set, we set its default value\n this.zoom = 18;\n } else {\n // the zoom needs the map to be properly set, so if it was set before the map was initialized,\n // we set the zoom again to perform necessary adjustements\n this.zoom = this.zoom;\n }\n\n if (this.readonly === undefined || this.readonly === null) {\n // if readonly is not set, we set its default value\n this.readonly = false;\n } else {\n // readonly needs the map to be properly set, so if it was set before the map was initialized,\n // we set readonly again to perform necessary adjustements\n this.readonly = this.readonly;\n }\n\n if (\n this.markerCoordinates !== undefined &&\n this.markerCoordinates !== null\n ) {\n // the marker coordinates need the map to be properly set, so if they were set before the map was initialized,\n // we set the marker coordinates again to perform necessary adjustements\n this.markerCoordinates = this.markerCoordinates;\n }\n }\n\n private addMarkerAtCoordinates(coordinates: number[]): void {\n if (coordinates && coordinates.length === 2) {\n if (this._marker !== undefined) {\n this.removeMarker();\n }\n this._marker = new ol.Feature({\n geometry: new ol.geom.Point(\n // [lon, lat] is in EPSG:4326 (degrees), we transform it into EPSG:3857 (meters)\n ol.proj.transform(coordinates, 'EPSG:4326', 'EPSG:3857')\n )\n });\n this._markerSource.addFeature(this._marker);\n this._markerCoordinates = this.getMarkerCoordinates();\n\n if (!this.readonly) {\n const dragInteraction = new ol.interaction.Modify({\n features: new ol.Collection([this._marker]),\n style: this._markerStyle,\n pixelTolerance: 50,\n hitDetection: true\n });\n this._markerInteraction = dragInteraction;\n this._map.addInteraction(dragInteraction);\n }\n\n this._marker.on(\n 'change',\n () => {\n this._markerCoordinates = this.getMarkerCoordinates();\n },\n this._marker\n );\n }\n }\n\n private removeMarker(): void {\n if (this._marker !== undefined) {\n this._markerSource.removeFeature(this._marker);\n this._marker = undefined;\n }\n if (this._markerInteraction !== undefined) {\n this._map.getInteractions().pop();\n this._markerInteraction = undefined;\n }\n }\n\n private getMarkerCoordinates(): number[] | null {\n if (this._marker === undefined || this._marker == null) {\n return this._marker;\n }\n const coordinates = this._marker.getGeometry().getCoordinates();\n // coordinates is in EPSG:3857 (meters), we transform it into EPSG:4326 (degrees)\n return ol.proj.transform(coordinates, 'EPSG:3857', 'EPSG:4326');\n }\n\n onResize(): void {\n if (this._map) {\n this._map.updateSize();\n }\n }\n}\n","import { Component, Input, Output, EventEmitter, OnInit } from '@angular/core';\r\nimport { languageDetector } from '../lang';\r\nimport { PaginationInfo } from './pagination';\r\n\r\n@Component({\r\n selector: 'lux-pagination',\r\n templateUrl: './pagination.component.html',\r\n styleUrls: ['./pagination.component.scss']\r\n})\r\nexport class PaginationComponent implements OnInit {\r\n literals = {\r\n en: {\r\n first: 'First',\r\n previous: 'Previous',\r\n next: 'Next',\r\n last: 'Last'\r\n },\r\n es: {\r\n first: 'Primero',\r\n previous: 'Anterior',\r\n next: 'Siguiente',\r\n last: 'Último'\r\n }\r\n };\r\n\r\n public first: string;\r\n public previous: string;\r\n public next: string;\r\n public last: string;\r\n\r\n public showPagination = false;\r\n public hidePrevious = false;\r\n public lastPage = false;\r\n public totalPages = 0;\r\n public displayNextEllipsis = false;\r\n public displayPreviousEllipsis = false;\r\n\r\n public pages: number[] = [];\r\n\r\n @Output() goToPage = new EventEmitter<number>();\r\n @Output() pageSizeChange = new EventEmitter<number>();\r\n\r\n /** Current page, total items and items to show per page */\r\n private paginationInfoValue: PaginationInfo;\r\n\r\n private _lang: string;\r\n @Input()\r\n set lang(l: string) {\r\n if (l === this._lang) {\r\n return;\r\n }\r\n if (Object.keys(this.literals).includes(l)) {\r\n this._lang = l;\r\n } else {\r\n this._lang = 'en';\r\n }\r\n this.loadLanguage();\r\n }\r\n get lang(): string {\r\n return this._lang;\r\n }\r\n\r\n @Input()\r\n set paginationInfo(value: PaginationInfo) {\r\n this.paginationInfoValue = value;\r\n this.syncState();\r\n }\r\n get paginationInfo(): PaginationInfo {\r\n return this.paginationInfoValue;\r\n }\r\n\r\n constructor() {\r\n this.lang = languageDetector();\r\n }\r\n\r\n ngOnInit(): void {\r\n this.calculatePages();\r\n }\r\n\r\n pageSizeChanged(pageSize: number): void {\r\n this.paginationInfo.pageSize = pageSize;\r\n this.syncState();\r\n this.pageSizeChange.emit(pageSize);\r\n }\r\n\r\n onPage(n: number): void {\r\n this.goToPage.emit(n);\r\n }\r\n\r\n onFirst(): void {\r\n this.goToPage.emit(0);\r\n }\r\n\r\n onLast(): void {\r\n this.goToPage.emit(this.totalPages - 1);\r\n }\r\n onNext(): void {\r\n const page = (this.paginationInfo.page || 0) + 1;\r\n this.goToPage.emit(page);\r\n }\r\n onPrevious(): void {\r\n const page = (this.paginationInfo.page || 0) - 1;\r\n this.goToPage.emit(page);\r\n }\r\n\r\n private syncState(): void {\r\n this.pages = this.calculatePages();\r\n\r\n this.showPagination =\r\n this.paginationInfo.total > this.paginationInfo.pageSize;\r\n this.hidePrevious = this.paginationInfo.page === 0;\r\n this.lastPage =\r\n this.paginationInfo.pageSize * (this.paginationInfo.page + 1) >=\r\n this.paginationInfo.total;\r\n this.totalPages =\r\n Math.ceil(this.paginationInfo.total / this.paginationInfo.pageSize) || 0;\r\n this.displayNextEllipsis = !this.pages.includes(this.totalPages - 1);\r\n this.displayPreviousEllipsis = !this.pages.includes(0);\r\n }\r\n\r\n private calculatePages(): number[] {\r\n const totalPages =\r\n Math.ceil(this.paginationInfo.total / this.paginationInfo.pageSize) - 1; // 0-index\r\n const p = this.paginationInfo.page || 0;\r\n const pagesToShow = this.paginationInfo.pagesToShow;\r\n const pages: number[] = [];\r\n pages.push(p);\r\n const times = pagesToShow - 1;\r\n for (let i = 0; i < times; i++) {\r\n if (pages.length < pagesToShow) {\r\n if (Math.min(...pages) > 0) {\r\n pages.unshift(Math.min(...pages) - 1);\r\n }\r\n }\r\n if (pages.length < pagesToShow) {\r\n if (Math.max(...pages) < totalPages) {\r\n pages.push(Math.max(...pages) + 1);\r\n }\r\n }\r\n }\r\n pages.sort((a, b) => a - b);\r\n return pages;\r\n }\r\n\r\n private loadLanguage(): void {\r\n const l = this.literals[this.lang];\r\n this.first = l.first;\r\n this.previous = l.previous;\r\n this.next = l.next;\r\n this.last = l.last;\r\n }\r\n}\r\n","import {\n Component,\n EventEmitter,\n forwardRef,\n Input,\n Output\n} from '@angular/core';\nimport {\n AbstractControl,\n ControlValueAccessor,\n NG_VALIDATORS,\n NG_VALUE_ACCESSOR,\n ValidationErrors,\n Validator\n} from '@angular/forms';\nimport { isInitialAndEmpty } from '../helperFns';\n\nexport interface RadioItem {\n name?: string;\n label: string;\n value: any;\n}\n\n@Component({\n selector: 'lux-radiogroup',\n templateUrl: './radiogroup.component.html',\n styleUrls: ['./radiogroup.component.scss'],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n multi: true,\n useExisting: forwardRef(() => RadiogroupComponent)\n },\n {\n provide: NG_VALIDATORS,\n multi: true,\n useExisting: forwardRef(() => RadiogroupComponent)\n }\n ]\n})\nexport class RadiogroupComponent implements ControlValueAccessor, Validator {\n private touched = false;\n\n @Input() name = 'radiogroup1';\n @Input() public disabled: boolean | null = false;\n @Input() public readonly: boolean | null = false;\n @Input() public required: boolean | null = false;\n\n @Input()\n set items(col: RadioItem[]) {\n this._items = (col || []).map((it, index) =>\n this.ensureHasUniqueName(it, index)\n );\n this.itemsChange.emit(col);\n }\n get items(): RadioItem[] {\n return this._items;\n }\n @Output() itemsChange = new EventEmitter<RadioItem[]>();\n\n @Input()\n set value(v: any) {\n if (v === this._value) {\n return;\n }\n const initialAndEmpty = isInitialAndEmpty(this._value, v);\n this._value = v;\n this.onChange(v);\n if (!initialAndEmpty) {\n this.valueChange.emit(v);\n }\n }\n get value(): any {\n return this._value;\n }\n @Output() valueChange = new EventEmitter<any>();\n\n private _value: any = undefined;\n private _items: RadioItem[] = [];\n\n constructor() {}\n\n // ControlValueAccessor Interface\n onChange = (value): void => {};\n onTouched = (): void => {};\n writeValue(value: any): void {\n this.value = value;\n }\n registerOnChange(onChange: any): void {\n this.onChange = onChange;\n }\n registerOnTouched(onTouched: any): void {\n this.onTouched = onTouched;\n }\n markAsTouched(): void {\n if (!this.touched) {\n this.onTouched();\n this.touched = true;\n }\n }\n setDisabledState(disabled: boolean): void {\n this.disabled = disabled;\n }\n // End ControlValueAccessor Interface\n\n // Validator interface\n registerOnValidatorChange(): void {}\n\n validate(control: AbstractControl): ValidationErrors | null {\n const value = control.value;\n if (\n this.required &&\n (value === '' || value === null || value === undefined)\n ) {\n return { required: { value, reason: 'Required field.' } };\n }\n return null;\n }\n // End of Validator interface\n\n setValue(event: MouseEvent, item: RadioItem): void {\n if (!this.disabled && !this.readonly) {\n this.value = item.value;\n this.markAsTouched();\n }\n event.preventDefault();\n }\n ensureHasUniqueName(item: RadioItem, index: number): RadioItem {\n if (!item.name) {\n item.name = `${this.name}_${index}`;\n }\n return item;\n }\n}\n","import {\n Component,\n Input,\n EventEmitter,\n Output,\n forwardRef\n} from '@angular/core';\nimport {\n AbstractControl,\n ControlValueAccessor,\n NG_VALIDATORS,\n NG_VALUE_ACCESSOR,\n ValidationErrors,\n Validator\n} from '@angular/forms';\n\nlet sequencer = 0;\n\n@Component({\n selector: 'lux-select',\n templateUrl: './select.component.html',\n styleUrls: ['./select.component.scss'],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n multi: true,\n useExisting: forwardRef(() => SelectComponent)\n },\n {\n provide: NG_VALIDATORS,\n multi: true,\n useExisting: forwardRef(() => SelectComponent)\n }\n ]\n})\nexport class SelectComponent implements ControlValueAccessor, Validator {\n @Input() id = 'stringList' + sequencer++;\n @Input() disabled = false;\n @Input() required = false;\n /** Allow multiple elements */\n @Input() multiple = true;\n @Input() value: string[] = [];\n @Output() valueChange = new EventEmitter<string[]>();\n @Input() placeholder = 'Add new';\n /** If set, check there is no duplicates in the data. */\n @Input() unique = true;\n /** Validation function for new items. Returns error or null if valid */\n @Input() validateItem: (item: string) => string = (_) => null;\n\n newEntry = '';\n error = null;\n isValidNewEntry = false;\n\n private touched = false;\n\n constructor() {}\n\n // ControlValueAccessor Interface\n onChange = (value): void => {};\n onTouched = (): void => {};\n writeValue(value: any): void {\n this.value = value;\n }\n registerOnChange(onChange: any): void {\n this.onChange = onChange;\n }\n registerOnTouched(onTouched: any): void {\n this.onTouched = onTouched;\n }\n markAsTouched(): void {\n if (!this.touched) {\n this.onTouched();\n this.touched = true;\n }\n }\n setDisabledState(disabled: boolean): void {\n this.disabled = disabled;\n }\n // End ControlValueAccessor Interface\n\n // Validator interface\n registerOnValidatorChange(): void {}\n\n validate(control: AbstractControl): ValidationErrors | null {\n const value = control.value;\n if (\n this.required &&\n (value === '' || value === null || value === undefined)\n ) {\n return { required: { value, reason: 'Required field.' } };\n }\n return null;\n }\n // End of Validator interface\n\n get canAdd(): boolean {\n return this.multiple || this.value.length === 0;\n }\n add(val: string): void {\n this.value.push(val);\n this.newEntry = '';\n this.markAsTouched();\n this.valueChange.emit(this.value);\n }\n remove(index: number): void {\n if (this.value.length > index) {\n this.value.splice(index, 1);\n this.markAsTouched();\n this.valueChange.emit(this.value);\n }\n }\n onKeyPress(event: KeyboardEvent): void {\n if (event.key === 'Enter' && !this.error && this.newEntry !== '') {\n // Add on pressing Enter/Return\n this.markAsTouched();\n this.add(this.newEntry);\n }\n }\n onChangeNewEntry(newValue: string): void {\n this.markAsTouched();\n if (!newValue) {\n this.isValidNewEntry = false;\n this.error = null;\n return;\n }\n if (this.unique) {\n const found = (this.value || []).find((it) => it === newValue);\n this.isValidNewEntry = !found;\n this.error = found\n ? `Value '${newValue}' is already in. Cannot add duplicates.`\n : null;\n if (!this.isValidNewEntry) {\n return;\n }\n }\n this.error = this.validateItem(newValue);\n this.isValidNewEntry = !this.error;\n }\n}\n","import { Directive, ElementRef, Input, OnInit, Renderer2 } from '@angular/core';\n\n@Directive({\n selector: '[luxVoiceRecognition]'\n})\nexport class VoiceRecognitionDirective implements OnInit {\n @Input() language: string;\n // See API at: https://developer.mozilla.org/en-US/docs/Web/API/SpeechRecognition\n private recognition: any;\n private isRecognizing = false;\n private mic: any;\n\n constructor(private el: ElementRef, private renderer: Renderer2) {\n const speechRecognition = (window as any).webkitSpeechRecognition;\n if (speechRecognition) {\n this.recognition = new speechRecognition();\n }\n }\n\n ngOnInit(): void {\n if (this.recognition) {\n // API is available\n this.recognition.lang = this.language || window.navigator.language;\n this.recognition.interimResults = false;\n this.recognition.maxAlternatives = 1;\n\n // Add mic icon\n this.mic = document.createElement('div');\n this.mic.setAttribute('class', 'lux-microphone');\n\n const parent = this.el.nativeElement.parentElement;\n parent.appendChild(this.mic);\n\n // Add event handlers\n this.mic.onclick = (): void => this.microphoneClick();\n this.recognition.onresult = (event): void => this.onRecognized(event);\n }\n }\n\n microphoneClick(): void {\n if (this.isRecognizing) {\n // stop\n this.isRecognizing = false;\n this.renderer.removeClass(this.mic, 'lux-recording');\n this.recognition.abort();\n } else {\n // start\n this.el.nativeElement.value = getRecordingMessage(this.language);\n this.isRecognizing = true;\n this.renderer.addClass(this.mic, 'lux-recording');\n this.recognition.start();\n }\n }\n onRecognized(event: any): void {\n const recognizedText = event.results[0][0].transcript;\n this.isRecognizing = false;\n this.el.nativeElement.value = recognizedText;\n this.renderer.removeClass(this.mic, 'lux-recording');\n }\n}\n\nconst getRecordingMessage = (lang: string): string => {\n switch (lang.toLowerCase()) {\n case 'es':\n case 'es-es':\n return 'Grabando...';\n case 'en':\n case 'en-uk':\n case 'en-us':\n default:\n return 'Recording...';\n }\n};\n","\nimport { isPlatformBrowser } from '@angular/common';\n\nimport { ClassProvider, FactoryProvider, InjectionToken, PLATFORM_ID } from '@angular/core';\n\n/* Create a new injection token for injecting the window into a component. */\nexport const WINDOW = new InjectionToken('WindowToken');\n\n/* Define abstract class for obtaining reference to the global window object. */\nexport abstract class WindowRef {\n\n // eslint-disable-next-line @typescript-eslint/ban-types\n get nativeWindow(): Window | Object {\n throw new Error('Not implemented.');\n }\n\n}\n\n/* Define class that implements the abstract class and returns the native window object. */\nexport class BrowserWindowRef extends WindowRef {\n\n constructor() {\n super();\n }\n\n // eslint-disable-next-line @typescript-eslint/ban-types\n get nativeWindow(): Window | Object {\n return window;\n }\n\n}\n\n/* Create an factory function that returns the native window object. */\n// eslint-disable-next-line @typescript-eslint/ban-types\nexport const windowFactory = (browserWindowRef: BrowserWindowRef, platformId: Object): Window | Object => {\n if (isPlatformBrowser(platformId)) {\n return browserWindowRef.nativeWindow;\n }\n return new Object();\n};\n\n/* Create a injectable provider for the WindowRef token that uses the BrowserWindowRef class. */\nconst browserWindowProvider: ClassProvider = {\n provide: WindowRef,\n useClass: BrowserWindowRef\n};\n\n/* Create an injectable provider that uses the windowFactory function for returning the native window object. */\nconst windowProvider: FactoryProvider = {\n provide: WINDOW,\n useFactory: windowFactory,\n deps: [ WindowRef, PLATFORM_ID ]\n};\n\n/* Create an array of providers. */\nexport const WINDOW_PROVIDERS = [\n browserWindowProvider,\n windowProvider\n];\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { RouterModule } from '@angular/router';\n\nimport { AngularResizedEventModule } from 'angular-resize-event';\nimport { AutocompleteComponent } from './autocomplete/autocomplete.component';\nimport { AutocompleteListComponent } from './autocomplete-list/autocomplete-list.component';\nimport { CheckboxComponent } from './checkbox/checkbox.component';\nimport { DatetimeComponent } from './datetime/datetime.component';\nimport { InputComponent } from './input/input.component';\nimport { FilterComponent } from './filter/filter.component';\nimport { GeolocationComponent } from './geolocation/geolocation.component';\nimport { HttpClientModule } from '@angular/common/http';\nimport { LuxTooltipDirective } from './tooltip/tooltip.directive';\nimport { LuxBreadcrumbComponent } from './breadcrumb/breadcrumb.component';\nimport { LuxModalWindowComponent } from './modal/modal-window';\nimport { LuxModalBackdropComponent } from './modal/modal-backdrop';\nimport { MapComponent } from './map/map.component';\nimport { ModalService } from './modal/modal.service';\nimport { PaginationComponent } from './pagination/pagination.component';\nimport { RadiogroupComponent } from './radiogroup/radiogroup.component';\nimport { SelectComponent } from './select/select.component';\nimport { TooltipComponent } from './tooltip/tooltip.component';\nimport { TooltipService } from './tooltip/tooltip.service';\nimport { VoiceRecognitionDirective } from './voice-recognition/voice-recognition.directive';\nimport { WINDOW_PROVIDERS } from './window/window.service';\n\n@NgModule({\n declarations: [\n AutocompleteComponent,\n AutocompleteListComponent,\n FilterComponent,\n CheckboxComponent,\n DatetimeComponent,\n InputComponent,\n GeolocationComponent,\n LuxTooltipDirective,\n LuxModalWindowComponent,\n LuxModalBackdropComponent,\n LuxBreadcrumbComponent,\n MapComponent,\n SelectComponent,\n TooltipComponent,\n PaginationComponent,\n RadiogroupComponent,\n VoiceRecognitionDirective\n ],\n entryComponents: [\n LuxModalWindowComponent,\n LuxModalBackdropComponent,\n TooltipComponent\n ],\n providers: [ModalService, TooltipService, WINDOW_PROVIDERS],\n imports: [\n AngularResizedEventModule,\n FormsModule,\n HttpClientModule,\n ReactiveFormsModule,\n RouterModule,\n CommonModule\n ],\n exports: [\n AutocompleteComponent,\n AutocompleteListComponent,\n FilterComponent,\n CheckboxComponent,\n DatetimeComponent,\n InputComponent,\n GeolocationComponent,\n LuxTooltipDirective,\n LuxBreadcrumbComponent,\n LuxBreadcrumbComponent,\n MapComponent,\n SelectComponent,\n PaginationComponent,\n RadiogroupComponent,\n VoiceRecognitionDirective\n ]\n})\nexport class LuxModule {}\n","/*\n * Public API Surface of lux\n */\n\nexport { LuxModule } from './lib/lux.module';\nexport {\n DataSource,\n DataSourceItem,\n DecoratedDataSource,\n DecoratedDataSourceItem\n} from './lib/datasource';\nexport { AutocompleteComponent } from './lib/autocomplete/autocomplete.component';\nexport { AutocompleteListComponent } from './lib/autocomplete-list/autocomplete-list.component';\nexport {\n LuxBreadcrumbComponent,\n BreadcrumbItem\n} from './lib/breadcrumb/breadcrumb.component';\nexport { CheckboxComponent } from './lib/checkbox/checkbox.component';\nexport { FilterComponent } from './lib/filter/filter.component';\nexport { InputComponent } from './lib/input/input.component';\nexport { PaginationComponent } from './lib/pagination/pagination.component';\nexport { LuxTooltipDirective } from './lib/tooltip/tooltip.directive';\nexport { ModalService } from './lib/modal/modal.service';\nexport {\n RadioItem,\n RadiogroupComponent\n} from './lib/radiogroup/radiogroup.component';\nexport { ModalRef } from './lib/modal/modal-ref';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n\nexport {DatetimeComponent as ɵa} from './lib/datetime/datetime.component';\nexport {GeolocationComponent as ɵc} from './lib/geolocation/geolocation.component';\nexport {GeolocationService as ɵf} from './lib/geolocation/geolocation.service';\nexport {OpenLayerLoaderService as ɵk} from './lib/geolocation/openlayer-loader.service';\nexport {RegexpService as ɵb} from './lib/input/regexp.service';\nexport {MapComponent as ɵj} from './lib/map/map.component';\nexport {LuxModalBackdropComponent as ɵi} from './lib/modal/modal-backdrop';\nexport {LuxModalConfig as ɵe} from './lib/modal/modal-config';\nexport {ModalStack as ɵd} from './lib/modal/modal-stack';\nexport {LuxModalWindowComponent as ɵh} from './lib/modal/modal-window';\nexport {ContentRef as ɵt} from './lib/modal/util';\nexport {SelectComponent as ɵl} from './lib/select/select.component';\nexport {TooltipComponent as ɵm} from './lib/tooltip/tooltip.component';\nexport {TooltipService as ɵg} from './lib/tooltip/tooltip.service';\nexport {VoiceRecognitionDirective as ɵn} from './lib/voice-recognition/voice-recognition.directive';\nexport {BrowserWindowRef as ɵq,WINDOW as ɵo,WINDOW_PROVIDERS as ɵs,WindowRef as ɵp,windowFactory as ɵr} from './lib/window/window.service';"],"names":[],"mappings":"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"}