@metadev/lux 0.18.0 → 0.19.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.
- package/esm2020/lib/autocomplete/autocomplete.component.mjs +479 -0
- package/esm2020/lib/autocomplete-list/autocomplete-list.component.mjs +254 -0
- package/esm2020/lib/breadcrumb/breadcrumb.component.mjs +75 -0
- package/esm2020/lib/checkbox/checkbox.component.mjs +154 -0
- package/{esm2015/lib/datasource.js → esm2020/lib/datasource.mjs} +0 -0
- package/esm2020/lib/datetime/datetime.component.mjs +306 -0
- package/esm2020/lib/filter/filter.component.mjs +152 -0
- package/esm2020/lib/geolocation/geolocation.component.mjs +407 -0
- package/{esm2015/lib/geolocation/geolocation.service.js → esm2020/lib/geolocation/geolocation.service.mjs} +7 -11
- package/esm2020/lib/geolocation/openlayer-loader.service.mjs +62 -0
- package/{esm2015/lib/helperFns.js → esm2020/lib/helperFns.mjs} +0 -0
- package/esm2020/lib/input/input.component.mjs +452 -0
- package/{esm2015/lib/input/regexp.service.js → esm2020/lib/input/regexp.service.mjs} +7 -6
- package/{esm2015/lib/lang.js → esm2020/lib/lang.mjs} +0 -0
- package/esm2020/lib/lux.module.mjs +130 -0
- package/{esm2015/lib/map/geopoint.js → esm2020/lib/map/geopoint.mjs} +0 -0
- package/esm2020/lib/map/map.component.mjs +265 -0
- package/esm2020/lib/modal/modal-backdrop.mjs +26 -0
- package/esm2020/lib/modal/modal-config.mjs +14 -0
- package/{esm2015/lib/modal/modal-dismiss-reasons.js → esm2020/lib/modal/modal-dismiss-reasons.mjs} +0 -0
- package/{esm2015/lib/modal/modal-ref.js → esm2020/lib/modal/modal-ref.mjs} +0 -0
- package/esm2020/lib/modal/modal-stack.mjs +179 -0
- package/esm2020/lib/modal/modal-window.mjs +119 -0
- package/esm2020/lib/modal/modal.service.mjs +26 -0
- package/{esm2015/lib/modal/util.js → esm2020/lib/modal/util.mjs} +0 -0
- package/esm2020/lib/pagination/pagination.component.mjs +137 -0
- package/{esm2015/lib/pagination/pagination.js → esm2020/lib/pagination/pagination.mjs} +0 -0
- package/esm2020/lib/radiogroup/radiogroup.component.mjs +130 -0
- package/esm2020/lib/select/select.component.mjs +149 -0
- package/{esm2015/lib/tooltip/placement.js → esm2020/lib/tooltip/placement.mjs} +0 -0
- package/{esm2015/lib/tooltip/tooltip-context.js → esm2020/lib/tooltip/tooltip-context.mjs} +0 -0
- package/esm2020/lib/tooltip/tooltip.component.mjs +23 -0
- package/esm2020/lib/tooltip/tooltip.directive.mjs +60 -0
- package/{esm2015/lib/tooltip/tooltip.service.js → esm2020/lib/tooltip/tooltip.service.mjs} +7 -9
- package/{esm2015/lib/tooltip/tooltop-content.js → esm2020/lib/tooltip/tooltop-content.mjs} +0 -0
- package/esm2020/lib/voice-recognition/voice-recognition.directive.mjs +73 -0
- package/{esm2015/lib/window/window.service.js → esm2020/lib/window/window.service.mjs} +0 -0
- package/esm2020/metadev-lux.mjs +5 -0
- package/esm2020/public-api.mjs +21 -0
- package/fesm2015/metadev-lux.mjs +4345 -0
- package/fesm2015/metadev-lux.mjs.map +1 -0
- package/fesm2020/metadev-lux.mjs +4343 -0
- package/fesm2020/metadev-lux.mjs.map +1 -0
- package/lib/autocomplete/autocomplete.component.d.ts +3 -0
- package/lib/autocomplete-list/autocomplete-list.component.d.ts +3 -0
- package/lib/breadcrumb/breadcrumb.component.d.ts +3 -0
- package/lib/checkbox/checkbox.component.d.ts +3 -0
- package/lib/datetime/datetime.component.d.ts +4 -0
- package/lib/filter/filter.component.d.ts +3 -0
- package/lib/geolocation/geolocation.component.d.ts +4 -0
- package/lib/geolocation/geolocation.service.d.ts +3 -0
- package/lib/geolocation/openlayer-loader.service.d.ts +3 -0
- package/lib/input/input.component.d.ts +3 -0
- package/lib/input/regexp.service.d.ts +3 -0
- package/lib/lux.module.d.ts +26 -0
- package/lib/map/map.component.d.ts +3 -0
- package/lib/modal/modal-backdrop.d.ts +3 -0
- package/lib/modal/modal-config.d.ts +3 -0
- package/lib/modal/modal-stack.d.ts +3 -0
- package/lib/modal/modal-window.d.ts +3 -0
- package/lib/modal/modal.service.d.ts +3 -0
- package/lib/pagination/pagination.component.d.ts +3 -0
- package/lib/radiogroup/radiogroup.component.d.ts +3 -0
- package/lib/select/select.component.d.ts +3 -0
- package/lib/tooltip/tooltip.component.d.ts +3 -0
- package/lib/tooltip/tooltip.directive.d.ts +3 -0
- package/lib/tooltip/tooltip.service.d.ts +3 -0
- package/lib/voice-recognition/voice-recognition.directive.d.ts +3 -0
- package/metadev-lux.d.ts +1 -16
- package/package.json +20 -8
- package/public-api.d.ts +12 -7
- package/bundles/metadev-lux.umd.js +0 -4715
- package/bundles/metadev-lux.umd.js.map +0 -1
- package/esm2015/lib/autocomplete/autocomplete.component.js +0 -455
- package/esm2015/lib/autocomplete-list/autocomplete-list.component.js +0 -230
- package/esm2015/lib/breadcrumb/breadcrumb.component.js +0 -77
- package/esm2015/lib/checkbox/checkbox.component.js +0 -142
- package/esm2015/lib/datetime/datetime.component.js +0 -275
- package/esm2015/lib/filter/filter.component.js +0 -140
- package/esm2015/lib/geolocation/geolocation.component.js +0 -371
- package/esm2015/lib/geolocation/openlayer-loader.service.js +0 -63
- package/esm2015/lib/input/input.component.js +0 -419
- package/esm2015/lib/lux.module.js +0 -83
- package/esm2015/lib/map/map.component.js +0 -261
- package/esm2015/lib/modal/modal-backdrop.js +0 -19
- package/esm2015/lib/modal/modal-config.js +0 -12
- package/esm2015/lib/modal/modal-stack.js +0 -182
- package/esm2015/lib/modal/modal-window.js +0 -92
- package/esm2015/lib/modal/modal.service.js +0 -28
- package/esm2015/lib/pagination/pagination.component.js +0 -134
- package/esm2015/lib/radiogroup/radiogroup.component.js +0 -114
- package/esm2015/lib/select/select.component.js +0 -131
- package/esm2015/lib/tooltip/tooltip.component.js +0 -19
- package/esm2015/lib/tooltip/tooltip.directive.js +0 -52
- package/esm2015/lib/voice-recognition/voice-recognition.directive.js +0 -76
- package/esm2015/metadev-lux.js +0 -21
- package/esm2015/public-api.js +0 -16
- package/fesm2015/metadev-lux.js +0 -4089
- package/fesm2015/metadev-lux.js.map +0 -1
- package/metadev-lux.metadata.json +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"metadev-lux.mjs","sources":["../../../projects/lux/src/lib/helperFns.ts","../../../projects/lux/src/lib/lang.ts","../../../projects/lux/src/lib/autocomplete/autocomplete.component.ts","../../../projects/lux/src/lib/autocomplete/autocomplete.component.html","../../../projects/lux/src/lib/autocomplete-list/autocomplete-list.component.ts","../../../projects/lux/src/lib/autocomplete-list/autocomplete-list.component.html","../../../projects/lux/src/lib/breadcrumb/breadcrumb.component.ts","../../../projects/lux/src/lib/breadcrumb/breadcrumb.component.html","../../../projects/lux/src/lib/checkbox/checkbox.component.ts","../../../projects/lux/src/lib/checkbox/checkbox.component.html","../../../projects/lux/src/lib/datetime/datetime.component.ts","../../../projects/lux/src/lib/datetime/datetime.component.html","../../../projects/lux/src/lib/filter/filter.component.ts","../../../projects/lux/src/lib/filter/filter.component.html","../../../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/openlayer-loader.service.ts","../../../projects/lux/src/lib/map/map.component.ts","../../../projects/lux/src/lib/map/map.component.html","../../../projects/lux/src/lib/geolocation/geolocation.component.ts","../../../projects/lux/src/lib/geolocation/geolocation.component.html","../../../projects/lux/src/lib/input/regexp.service.ts","../../../projects/lux/src/lib/input/input.component.ts","../../../projects/lux/src/lib/input/input.component.html","../../../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/pagination/pagination.component.ts","../../../projects/lux/src/lib/pagination/pagination.component.html","../../../projects/lux/src/lib/radiogroup/radiogroup.component.ts","../../../projects/lux/src/lib/radiogroup/radiogroup.component.html","../../../projects/lux/src/lib/select/select.component.ts","../../../projects/lux/src/lib/select/select.component.html","../../../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\nexport const isValidUrl = (value: string): boolean => {\r\n const re =\r\n /^([a-z]+?:\\/\\/)?((([a-z\\d]([a-z\\d-]*[a-z\\d])*)\\.)+[a-z]{2,}|((\\d{1,3}\\.){3}\\d{1,3}))(\\:\\d+)?(\\/[-a-z\\d%_.~+]*)*(\\?[;&a-z\\d%_.~+=-]*)?(\\#[-a-z\\d_]*)?$/i;\r\n return re.test(String(value).toLowerCase().trim());\r\n};\r\n\r\nexport const isValidColor = (value: string): boolean => {\r\n value = String(value).toLowerCase();\r\n // valid values for CSS color property, yet not valid colors by themselves\r\n if (\r\n value === 'currentcolor' ||\r\n value === 'inherit' ||\r\n value === 'initial' ||\r\n value === 'revert' ||\r\n value === 'unset'\r\n ) {\r\n return false;\r\n }\r\n return CSS.supports('color', value);\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","/** 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 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","<div class=\"lux-autocomplete\" (blur)=\"toggleCompletion(false, i0.value)\">\n <div class=\"lux-autocomplete-box\">\n <input\n #i0\n [id]=\"inputId\"\n [(ngModel)]=\"label\"\n [placeholder]=\"placeholder\"\n [attr.disabled]=\"disabled || null\"\n [attr.readonly]=\"readonly || null\"\n (keydown)=\"onKeydown($event, i0.value)\"\n (keypress)=\"onKeypress($event, i0.value)\"\n (keyup)=\"onKeyup($event, i0.value)\"\n (blur)=\"onLostFocus(i0.value)\"\n (focus)=\"toggleCompletion(true, i0.value)\"\n (click)=\"toggleCompletion(true, i0.value)\"\n (resized)=\"onInputResized()\"\n (window:resize)=\"onInputResized()\"\n role=\"combobox\"\n aria-autocomplete=\"list\"\n [attr.aria-expanded]=\"showCompletion\"\n aria-haspopup=\"true\"\n attr.aria-owns=\"{{ inputId + '_list' }}\"\n [attr.aria-activedescendant]=\"selectedOption\"\n />\n <div *ngIf=\"canAddNewValues\" class=\"icon-suggestions\"></div>\n <div *ngIf=\"showSpinner; else noLoading\" class=\"icon-spinner\"></div>\n <ng-template #noLoading>\n <button\n *ngIf=\"!disabled && i0.value && !showCompletion; else dropdown\"\n type=\"button\"\n class=\"icon-clear\"\n aria-label=\"Clear\"\n (click)=\"clear()\"\n ></button>\n <ng-template #dropdown>\n <div\n class=\"icon-dropdown\"\n (click)=\"toggleCompletion(!showCompletion, i0.value)\"\n ></div>\n </ng-template>\n </ng-template>\n </div>\n <div\n #completeDiv\n [class.showCompletion]=\"showCompletion\"\n class=\"lux-completion-list\"\n id=\"{{ inputId + '_list' }}\"\n >\n <ul>\n <li\n *ngFor=\"let item of completionList; let index = index\"\n id=\"{{ inputId + '_' + index }}\"\n class=\"lux-completion-item\"\n [class.selected]=\"focusItem && item.key === focusItem.key\"\n (click)=\"complete(item)\"\n [attr.aria-label]=\"item.label\"\n >\n <span>{{ item.labelPrefix }}</span>\n <span class=\"bold\">{{ item.labelMatch }}</span>\n <span>{{ item.labelPostfix }}</span>\n </li>\n </ul>\n </div>\n</div>\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","<div [id]=\"inputId\">\n <ul>\n <li *ngFor=\"let label of labels; let index = index\">\n <span>{{ label }}</span>\n <button\n *ngIf=\"!disabled\"\n class=\"remove-item\"\n (click)=\"removeAt(index)\"\n attr.aria-label=\"{{ getDeleteMessage(label) }}\"\n ></button>\n </li>\n </ul>\n <div *ngIf=\"!disabled\" class=\"new-entry\">\n <lux-autocomplete\n #auto\n [dataSource]=\"internalDataSource\"\n [placeholder]=\"placeholder ?? literals[lang].placeholder\"\n [(value)]=\"newEntry\"\n (valueChange)=\"onValueChange()\"\n (keypress)=\"onNewEntryChange($event, auto)\"\n >\n </lux-autocomplete>\n <button\n *ngIf=\"canAdd\"\n type=\"button\"\n class=\"add-item\"\n attr.aria-label=\"addMessage ?? literals[lang].addMessage\"\n (click)=\"addNew(auto)\"\n ></button>\n </div>\n</div>\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","<ul class=\"lux-breadcrumb\">\n <li *ngFor=\"let breadcrumb of breadcrumbs; last as isLast; first as isFirst\"\n class=\"lux-breadcrumb-item\">\n <a [class.first]=\"isFirst\" routerLink=\"{{ breadcrumb.url }}\">{{ breadcrumb.label }}</a>\n <div *ngIf=\"!isLast\" class=\"lux-breadcrumb-separator\"></div>\n </li>\n</ul>\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","<div class=\"switch\">\n <div>\n <label *ngIf=\"label\" [for]=\"inputId\">{{ label }}</label>\n </div>\n <div *ngIf=\"!disabled\" class=\"switch-item\" (click)=\"clicked()\">\n <input #ck [name]=\"name\" type=\"checkbox\" [id]=\"inputId\" />\n <div\n class=\"slider round\"\n [class.on]=\"value\"\n [class.disabled]=\"disabled\"\n [tabindex]=\"tabindexValue\"\n (keyup)=\"onKey($event)\"\n ></div>\n </div>\n <div>\n <span class=\"checkbox-label\" *ngIf=\"value\">{{\n literals[lang].yesLabel\n }}</span>\n <span class=\"checkbox-label\" *ngIf=\"!value\">{{\n literals[lang].noLabel\n }}</span>\n </div>\n</div>\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 isClearable(): boolean {\n return hasValue(this.value);\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","<input\n #dateInput\n class=\"rounded-left prefix\"\n [ngClass]=\"className\"\n type=\"date\"\n [id]=\"inputId + '$date'\"\n [(ngModel)]=\"dateValue\"\n [attr.aria-label]=\"ariaLabel\"\n [attr.disabled]=\"disabled === true ? 'true' : undefined\"\n [attr.readonly]=\"readonly === true ? 'true' : undefined\"\n [placeholder]=\"\"\n (keyup)=\"onEventDatetime(dateInput.value, timeInput.value)\"\n (change)=\"onEventDatetime(dateInput.value, timeInput.value)\"\n (keypress)=\"onKeyPress($event)\"\n (blur)=\"onLostFocus()\"\n/>\n<input\n #timeInput\n [class]=\"(disabled || readonly || !isClearable()) && localTime ? 'rounded-right' : ''\"\n [ngClass]=\"className\"\n type=\"time\"\n [id]=\"inputId + '$time'\"\n [(ngModel)]=\"timeValue\"\n [attr.aria-label]=\"ariaLabel\"\n [attr.disabled]=\"disabled === true ? 'true' : undefined\"\n [attr.readonly]=\"readonly === true ? 'true' : undefined\"\n [placeholder]=\"\"\n [step]=\"includeSeconds ? 1 : 60\"\n (keyup)=\"onEventDatetime(dateInput.value, timeInput.value)\"\n (change)=\"onEventDatetime(dateInput.value, timeInput.value)\"\n (keypress)=\"onKeyPress($event)\"\n (blur)=\"onLostFocus()\"\n/>\n<ng-container\n *ngIf=\"!localTime\"\n>\n <div\n [class]=\"disabled || readonly || !isClearable() ? 'rounded-right postfix symbol' : 'postfix symbol'\"\n [ngClass]=\"className\"\n >\n <span>{{ localTime ? '' : 'UTC' }}</span>\n </div>\n</ng-container>\n<button\n #clearButton\n *ngIf=\"!disabled && !readonly && isClearable()\"\n type=\"button\"\n class=\"rounded-right postfix bordered icon-clear\"\n [id]=\"inputId + '$clear'\"\n (click)=\"clear()\"\n aria-label=\"clear\"\n></button>\n\n<div *ngIf=\"inlineErrors && lastErrors && (dirty || touched)\" class=\"alert\">\n <div *ngIf=\"lastErrors.required\">\n {{ userErrors[lang].required }}\n </div>\n <div *ngIf=\"lastErrors.min\">\n {{ userErrors[lang].min.replace('$min', lastErrors.min.min) }}\n </div>\n <div *ngIf=\"lastErrors.max\">\n {{ userErrors[lang].max.replace('$max', lastErrors.max.max) }}\n </div>\n</div>\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","<div class=\"filter\">\n <input\n #i0\n type=\"text\"\n [attr.aria-label]=\"ariaLabel\"\n [placeholder]=\"placeholder\"\n [id]=\"inputId\"\n [disabled]=\"disabled\"\n [value]=\"searchValue\"\n (valueChange)=\"onInputValueChange(i0.value)\"\n (keyup)=\"keyup($event, i0.value)\"\n />\n\n <button\n [class.hide]=\"!searchValue\"\n aria-label=\"Clear\"\n class=\"clear-indicator icon icon-clear\"\n type=\"button\"\n (click)=\"clear()\"\n ></button>\n <i *ngIf=\"1 || searchOnType\" class=\"search-indicator icon icon-search\"></i>\n <button\n class=\"btn-search\"\n *ngIf=\"!searchOnType\"\n type=\"button\"\n [disabled]=\"disabled\"\n (click)=\"search()\"\n >\n Search\n </button>\n</div>\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(null);\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(null);\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 { 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","<div [id]=\"mapId\" class=\"map\" (resized)=\"onResize()\"></div>\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 isClearable(): boolean {\n return (\n isValidNumber(this.latitudeValue) || isValidNumber(this.longitudeValue)\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 (\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","<input\n #latitude\n class=\"rounded-left prefix\"\n [ngClass]=\"className\"\n type=\"number\"\n [id]=\"inputId + '$latitude'\"\n [(ngModel)]=\"latitudeValue\"\n [attr.aria-label]=\"ariaLabel\"\n [attr.disabled]=\"disabled === true ? 'true' : undefined\"\n [attr.readonly]=\"readonly === true ? 'true' : undefined\"\n [attr.min]=\"\n minLatitude !== undefined && minLatitude !== null\n ? minLatitude.toString()\n : undefined\n \"\n [attr.max]=\"\n maxLatitude !== undefined && maxLatitude !== null\n ? maxLatitude.toString()\n : undefined\n \"\n [attr.step]=\"\n step !== undefined && step !== null ? step.toString() : undefined\n \"\n [placeholder]=\"i18n[lang].lat\"\n (keyup)=\"onEventLatitude(latitude.value)\"\n (change)=\"onEventLatitude(latitude.value)\"\n (keypress)=\"onKeyPress($event)\"\n (blur)=\"onLostFocus()\"\n/>\n<div\n class=\"infix symbol monospace clickable\"\n [ngClass]=\"className\"\n (click)=\"openModalMap(modalMap)\">\n <span *ngIf=\"isValidNumber(latitudeValue) && latitudeValue >= 0\">{{\n i18n[lang].cardinalPoints.north\n }}</span>\n <span *ngIf=\"isValidNumber(latitudeValue) && latitudeValue < 0\">{{\n i18n[lang].cardinalPoints.south\n }}</span>\n <span *ngIf=\"!isValidNumber(latitudeValue)\">-</span>\n</div>\n<input\n #longitude\n class=\"prefix\"\n [ngClass]=\"className\"\n type=\"number\"\n [id]=\"inputId + '$longitude'\"\n [(ngModel)]=\"longitudeValue\"\n [attr.aria-label]=\"ariaLabel\"\n [attr.disabled]=\"disabled === true ? 'true' : undefined\"\n [attr.readonly]=\"readonly === true ? 'true' : undefined\"\n [attr.min]=\"\n minLongitude !== undefined && minLongitude !== null\n ? minLongitude.toString()\n : undefined\n \"\n [attr.max]=\"\n maxLongitude !== undefined && maxLongitude !== null\n ? maxLongitude.toString()\n : undefined\n \"\n [attr.step]=\"\n step !== undefined && step !== null ? step.toString() : undefined\n \"\n [placeholder]=\"i18n[lang].lon\"\n (keyup)=\"onEventLongitude(longitude.value)\"\n (change)=\"onEventLongitude(longitude.value)\"\n (keypress)=\"onKeyPress($event)\"\n (blur)=\"onLostFocus()\"\n/>\n<div\n class=\"infix symbol monospace clickable\"\n [ngClass]=\"className\"\n (click)=\"openModalMap(modalMap)\"\n>\n <span *ngIf=\"isValidNumber(longitudeValue) && longitudeValue >= 0\">{{\n i18n[lang].cardinalPoints.east\n }}</span>\n <span *ngIf=\"isValidNumber(longitudeValue) && longitudeValue < 0\">{{\n i18n[lang].cardinalPoints.west\n }}</span>\n <span *ngIf=\"!isValidNumber(longitudeValue)\">-</span>\n</div>\n<div\n [class]=\"\n disabled || readonly || !isClearable()\n ? 'clickable rounded-right postfix symbol'\n : 'clickable postfix symbol'\n \"\n [ngClass]=\"className\"\n (click)=\"openModalMap(modalMap)\"\n>\n <span class=\"icon-globe\"></span>\n</div>\n<button\n #clearButton\n *ngIf=\"!disabled && !readonly && isClearable()\"\n class=\"rounded-right postfix bordered icon icon-clear\"\n [id]=\"inputId + '$clear'\"\n type=\"button\"\n (click)=\"clear()\"\n aria-label=\"clear\"\n></button>\n\n<div *ngIf=\"inlineErrors && lastErrors && (dirty || touched)\" class=\"alert\">\n <div *ngIf=\"lastErrors.required\">\n {{ i18n[lang].userErrors.required }}\n </div>\n <div *ngIf=\"lastErrors.minLatitude\">\n {{\n i18n[lang].userErrors.minLatitude.replace(\n '$minLatitude',\n lastErrors.minLatitude.min\n )\n }}\n </div>\n <div *ngIf=\"lastErrors.maxLatitude\">\n {{\n i18n[lang].userErrors.maxLatitude.replace(\n '$maxLatitude',\n lastErrors.maxLatitude.max\n )\n }}\n </div>\n <div *ngIf=\"lastErrors.minLongitude\">\n {{\n i18n[lang].userErrors.minLongitude.replace(\n '$minLongitude',\n lastErrors.minLongitude.min\n )\n }}\n </div>\n <div *ngIf=\"lastErrors.maxLongitude\">\n {{\n i18n[lang].userErrors.maxLongitude.replace(\n '$maxLongitude',\n lastErrors.maxLongitude.max\n )\n }}\n </div>\n</div>\n\n<ng-template #modalMap let-modal>\n <div class=\"lux-modal-header\">\n <h4 class=\"modal-title default-font\" id=\"modal-basic-title\">{{ mapTitle }}</h4>\n <button\n type=\"button\"\n class=\"close\"\n aria-label=\"Close\"\n (click)=\"modal.dismiss('Cross click')\"\n >\n <span aria-hidden=\"true\">×</span>\n </button>\n </div>\n <div class=\"lux-modal-body content\">\n <lux-autocomplete\n #searchBar\n [attr.aria-label]=\"i18n[lang].typeToSearch\"\n [placeholder]=\"i18n[lang].typeToSearch\"\n *ngIf=\"!disabled && !readonly\"\n [instance]=\"self\"\n [resolveLabelsFunction]=\"getLabels\"\n [populateFunction]=\"getData\"\n (valueChange)=\"onSearchLocationChanged(searchBar.value, map)\"\n ></lux-autocomplete>\n <div class=\"map-container\">\n <lux-map\n #map\n [center]=\"value\"\n [markerPoint]=\"value\"\n [zoom]=\"zoom\"\n [readonly]=\"readonly === true || disabled === true ? true : false\"\n ></lux-map>\n </div>\n </div>\n <div class=\"lux-modal-footer\">\n <button\n *ngIf=\"disabled || readonly\"\n type=\"button\"\n class=\"btn btn-cancel\"\n (click)=\"modal.close('cancel')\"\n >\n {{ i18n[lang].closeAction }}\n </button>\n <button\n *ngIf=\"!disabled && !readonly\"\n type=\"button\"\n class=\"btn btn-cancel\"\n (click)=\"modal.close('cancel')\"\n >\n {{ i18n[lang].cancelAction }}\n </button>\n <button\n *ngIf=\"!disabled && !readonly\"\n type=\"button\"\n class=\"btn btn-select\"\n (click)=\"modal.close(map.markerPoint.coordinates)\"\n >\n {{ i18n[lang].selectAction }}\n </button>\n </div>\n</ng-template>\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 isValidUrl,\n isValidColor,\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 @ViewChild('colorpicker', { static: false }) colorpicker: 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 url: 'Format should match https://example.com.',\n color: 'Format should match #XXXXXX.'\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 url: 'El campo debe tener un formato como https://ejemplo.com.',\n color: 'El campo debe tener un formato como #XXXXXX.'\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 get color(): string {\n return this.checkColor();\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 === 'url' && hasValue(value) && !isValidUrl(value)) {\n result = result || {};\n result.url = { value, reason: 'Invalid URL.' };\n }\n if (this.type === 'color' && hasValue(value) && !isValidColor(value)) {\n result = result || {};\n result.color = { value, reason: 'Invalid color.' };\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 if (this.isColor()) {\n this.colorpicker.nativeElement.value = undefined;\n }\n this.markAsTouched();\n }\n onKeyPress(event: KeyboardEvent): void {\n this.keyPress.emit(event);\n }\n onColorPicked(newValue: string): void {\n this.onChangeValue(newValue);\n this.setValueInControl(newValue);\n }\n\n isUrl(): boolean {\n return this.type === 'url';\n }\n isColor(): boolean {\n return this.type === 'color';\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' ||\n this.isPercentage() ||\n this.isPermillage() ||\n (this.isUrl() && !!this.value) ||\n this.isColor()\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 checkColor(): string {\n return this.type === 'color' && isValidColor(this.value)\n ? this.value\n : 'initial';\n }\n\n checkType(type: string): void {\n switch (type) {\n case 'email':\n this.setEmailPatterns();\n break;\n case 'url':\n this.setUrlPatterns();\n break;\n case 'color':\n this.setColorPatterns();\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 setUrlPatterns(): void {}\n\n setColorPatterns(): void {\n this.domain = 'text';\n }\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","<div *ngIf=\"currency && currency === 'USD'\" class=\"prefix rounded-left symbol\" [ngClass]=\"className\">\n <span>$</span>\n</div>\n<input\n #input\n *ngIf=\"type !== 'textarea'\"\n [class]=\"hasPrefix() ? (hasPostfix() ? 'infix' : 'postfix rounded-right') : (hasPostfix() ? 'prefix rounded-left' : 'rounded')\"\n [ngClass]=\"className\"\n placement=\"top\"\n [id]=\"inputId\"\n [type]=\"domain\"\n [attr.value]=\"value\"\n [attr.aria-label]=\"ariaLabel\"\n [attr.disabled]=\"disabled === true ? 'true' : undefined\"\n [attr.readonly]=\"readonly === true ? 'true' : undefined\"\n [attr.min]=\"min?.toString() || undefined\"\n [attr.max]=\"max?.toString() || undefined\"\n [attr.step]=\"step?.toString() || undefined\"\n [attr.pattern]=\"pattern || undefined\"\n [placeholder]=\"placeholder\"\n (keyup)=\"onKeyUp(input.value)\"\n (change)=\"onChangeValue(input.value)\"\n (keypress)=\"onKeyPress($event)\"\n (blur)=\"onLostFocus()\"\n/>\n<textarea\n #textarea\n *ngIf=\"type === 'textarea'\"\n class=\"rounded\"\n [ngClass]=\"className\"\n placement=\"top\"\n [id]=\"inputId\"\n [attr.value]=\"value\"\n [attr.aria-label]=\"ariaLabel\"\n [attr.disabled]=\"disabled === true ? 'true' : undefined\"\n [attr.readonly]=\"readonly === true ? 'true' : undefined\"\n [attr.cols]=\"cols?.toString() || undefined\"\n [attr.rows]=\"rows?.toString() || undefined\"\n [placeholder]=\"placeholder\"\n (keyup)=\"onKeyUp(textarea.value)\"\n (change)=\"onChangeValue(textarea.value)\"\n (keypress)=\"onKeyPress($event)\"\n (blur)=\"onLostFocus()\"\n></textarea>\n<div *ngIf=\"currency && currency === 'EUR'\" class=\"postfix rounded-right symbol\" [ngClass]=\"className\">\n <span>€</span>\n</div>\n<div *ngIf=\"isPercentage()\" class=\"postfix rounded-right symbol\" [ngClass]=\"className\">\n <span>%</span>\n</div>\n<div *ngIf=\"isPermillage()\" class=\"postfix rounded-right symbol\" [ngClass]=\"className\">\n <span>‰</span>\n</div>\n<div *ngIf=\"isUrl() && !!value\" class=\"postfix rounded-right symbol clickable\" [ngClass]=\"className\">\n <a href=\"{{ value }}\" target=\"_blank\">\n <span class=\"icon-external\"></span>\n </a>\n</div>\n<div *ngIf=\"isColor()\" class=\"postfix rounded-right bordered transparency\" [ngClass]=\"className\">\n <div class=\"rounded-right full-space\" [ngStyle]=\"{'background-color': color}\">\n <input\n #colorpicker\n class=\"minimal-space clickable invisible rounded-right full-space\"\n [id]=\"inputId + '$colorpicker'\"\n type=\"color\"\n [attr.value]=\"value\"\n [attr.disabled]=\"disabled === true ? 'true' : undefined\"\n [attr.readonly]=\"readonly === true ? 'true' : undefined\"\n (change)=\"onColorPicked(colorpicker.value)\"\n (keypress)=\"onKeyPress($event)\"\n (blur)=\"onLostFocus()\"\n />\n </div>\n</div>\n\n<div *ngIf=\"inlineErrors && lastErrors && (dirty || touched)\" class=\"alert\">\n <div *ngIf=\"lastErrors.required\">\n {{ userErrors[this.lang].required }}\n </div>\n <div *ngIf=\"lastErrors.email\">{{ userErrors[this.lang].email }}</div>\n <div *ngIf=\"lastErrors.url\">{{ userErrors[this.lang].url }}</div>\n <div *ngIf=\"lastErrors.min\">\n {{ userErrors[this.lang].min.replace('$min', lastErrors.min.min) }}\n </div>\n <div *ngIf=\"lastErrors.max\">\n {{ userErrors[this.lang].max.replace('$max', lastErrors.max.max) }}\n </div>\n</div>\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, 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","<div class=\"lux-pagination\" *ngIf=\"showPagination\">\n <ng-container *ngIf=\"!hidePrevious\">\n <a\n luxTooltip\n [content]=\"first\"\n placement=\"top\"\n delay=\"500\"\n (click)=\"onFirst()\"\n [ngClass]=\"{\n enabledFirstLast: !hidePrevious\n }\"\n class=\"button-pagination icon arrow-left-end\"\n ></a>\n <a\n luxTooltip\n [content]=\"previous\"\n placement=\"top\"\n delay=\"500\"\n (click)=\"onPrevious()\"\n [ngClass]=\"{\n enabledFirstLast: !hidePrevious\n }\"\n class=\"button-pagination icon arrow-left\"\n ></a>\n </ng-container>\n\n <span class=\"ellipsis\" *ngIf=\"displayPreviousEllipsis\">...</span>\n\n <ng-container *ngFor=\"let pageNum of pages\">\n <a\n placement=\"top\"\n delay=\"500\"\n [ngClass]=\"{\n disabled: pageNum === paginationInfo.page,\n enabled: pageNum !== paginationInfo.page\n }\"\n class=\"button-pagination\"\n (click)=\"onPage(pageNum)\"\n >{{ pageNum + 1 }}</a\n >\n </ng-container>\n\n <span class=\"ellipsis\" *ngIf=\"displayNextEllipsis\">...</span>\n\n <ng-container *ngIf=\"!lastPage\">\n <a\n luxTooltip\n [content]=\"next\"\n placement=\"top\"\n delay=\"500\"\n (click)=\"onNext()\"\n [ngClass]=\"{\n enabledFirstLast: !lastPage\n }\"\n class=\"button-pagination icon arrow-right\"\n ></a>\n <a\n luxTooltip\n [content]=\"last\"\n placement=\"top\"\n delay=\"500\"\n (click)=\"onLast()\"\n [ngClass]=\"{\n enabledFirstLast: !lastPage\n }\"\n class=\"button-pagination icon arrow-right-end\"\n ></a>\n </ng-container>\n</div>\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","<div class=\"radiogroup\"\n [class.disabled]=\"disabled || readonly\"\n >\n <ng-container *ngFor=\"let item of items; let first=first; let last=last\">\n <div [class.radio-start]=\"first\"\n [class.radio-end]=\"last\"\n class=\"radio-item\"\n [class.selected]=\"item.value === value\"\n (click)=\"setValue($event, item)\"\n >\n <input [id]=\"item.name\"\n type=\"radio\"\n [name]=\"name\"\n [attr.disabled]=\"disabled || null\"\n [attr.readonly]=\"readonly || null\"\n [value]=\"item.value\">\n <label [for]=\"item.name\"\n class=\"unselectable\"\n >{{ item.label }}</label>\n </div>\n</ng-container>\n</div>\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","<div class=\"lux-select\">\n <ul class=\"list\">\n <li *ngFor=\"let item of value; let i = index\">\n <span>{{ item }}</span>\n <button *ngIf=\"!disabled\"\n class=\"remove\"\n type=\"button\"\n (click)=\"remove(i)\"\n [attr.aria-label]=\"'Remove ' + item\"\n >Remove</button>\n </li>\n </ul>\n <div class=\"add-new-item\" *ngIf=\"!disabled\">\n <lux-input\n id=\"{{ id + 'addNew' }}\"\n type=\"string\"\n [placeholder]=\"placeholder\"\n [attr.aria-label]=\"placeholder\"\n [disabled]=\"disabled\"\n [(value)]=\"newEntry\"\n (keyPress)=\"onKeyPress($event)\"\n (valueChange)=\"onChangeNewEntry($event)\"\n >\n </lux-input>\n <div *ngIf=\"canAdd\">\n <button *ngIf=\"isValidNewEntry\" type=\"button\" (click)=\"add(newEntry)\">Add</button>\n </div>\n <div class=\"error\">\n {{ error }}\n </div>\n </div>\n</div>\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 { AutocompleteListComponent } from './lib/autocomplete-list/autocomplete-list.component';\nexport { AutocompleteComponent } from './lib/autocomplete/autocomplete.component';\nexport {\n BreadcrumbItem,\n LuxBreadcrumbComponent\n} from './lib/breadcrumb/breadcrumb.component';\nexport { CheckboxComponent } from './lib/checkbox/checkbox.component';\nexport {\n DataSource,\n DataSourceItem,\n DecoratedDataSource,\n DecoratedDataSourceItem\n} from './lib/datasource';\nexport { DatetimeComponent } from './lib/datetime/datetime.component';\nexport { FilterComponent } from './lib/filter/filter.component';\nexport { GeolocationComponent } from './lib/geolocation/geolocation.component';\nexport { InputComponent } from './lib/input/input.component';\nexport { LuxModule } from './lib/lux.module';\nexport { MapComponent } from './lib/map/map.component';\nexport { ModalRef } from './lib/modal/modal-ref';\nexport { ModalService } from './lib/modal/modal.service';\nexport { PaginationComponent } from './lib/pagination/pagination.component';\nexport {\n RadiogroupComponent,\n RadioItem\n} from './lib/radiogroup/radiogroup.component';\nexport { SelectComponent } from './lib/select/select.component';\nexport { LuxTooltipDirective } from './lib/tooltip/tooltip.directive';\nexport { VoiceRecognitionDirective } from './lib/voice-recognition/voice-recognition.directive';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|