@bpost/bp-address-auto-complete-by-component 1.0.26 → 1.0.30

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.
Files changed (41) hide show
  1. package/VERSION.md +65 -0
  2. package/bpost-bp-address-auto-complete-by-component.d.ts +3 -2
  3. package/bpost-bp-address-auto-complete-by-component.metadata.json +1 -1
  4. package/bundles/bpost-bp-address-auto-complete-by-component.umd.js +167 -17
  5. package/bundles/bpost-bp-address-auto-complete-by-component.umd.js.map +1 -1
  6. package/bundles/bpost-bp-address-auto-complete-by-component.umd.min.js +1 -1
  7. package/bundles/bpost-bp-address-auto-complete-by-component.umd.min.js.map +1 -1
  8. package/esm2015/bpost-bp-address-auto-complete-by-component.js +4 -3
  9. package/esm2015/lib/box-number/box-number.component.js +6 -2
  10. package/esm2015/lib/lib-address-autocomplete-by-component.component.js +82 -10
  11. package/esm2015/lib/locality/locality.component.js +26 -4
  12. package/esm2015/lib/services/adress.service.js +5 -1
  13. package/esm2015/lib/services/http.service.js +15 -2
  14. package/esm2015/lib/services/nis9.service.js +30 -0
  15. package/esm2015/lib/street/street.component.js +6 -2
  16. package/esm2015/lib/street-number/street-number.component.js +6 -2
  17. package/esm2015/lib/utils/prefill-data.js +3 -1
  18. package/esm5/bpost-bp-address-auto-complete-by-component.js +4 -3
  19. package/esm5/lib/box-number/box-number.component.js +6 -2
  20. package/esm5/lib/lib-address-autocomplete-by-component.component.js +83 -10
  21. package/esm5/lib/locality/locality.component.js +26 -4
  22. package/esm5/lib/services/adress.service.js +5 -1
  23. package/esm5/lib/services/http.service.js +16 -3
  24. package/esm5/lib/services/nis9.service.js +31 -0
  25. package/esm5/lib/street/street.component.js +6 -2
  26. package/esm5/lib/street-number/street-number.component.js +6 -2
  27. package/esm5/lib/utils/prefill-data.js +3 -1
  28. package/fesm2015/bpost-bp-address-auto-complete-by-component.js +164 -17
  29. package/fesm2015/bpost-bp-address-auto-complete-by-component.js.map +1 -1
  30. package/fesm5/bpost-bp-address-auto-complete-by-component.js +167 -18
  31. package/fesm5/bpost-bp-address-auto-complete-by-component.js.map +1 -1
  32. package/lib/box-number/box-number.component.d.ts +2 -0
  33. package/lib/lib-address-autocomplete-by-component.component.d.ts +10 -1
  34. package/lib/locality/locality.component.d.ts +1 -0
  35. package/lib/services/adress.service.d.ts +3 -0
  36. package/lib/services/http.service.d.ts +4 -1
  37. package/lib/services/nis9.service.d.ts +9 -0
  38. package/lib/street/street.component.d.ts +1 -0
  39. package/lib/street-number/street-number.component.d.ts +1 -0
  40. package/lib/utils/prefill-data.d.ts +1 -0
  41. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../node_modules/tslib/tslib.es6.js","ng://@bpost/bp-address-auto-complete-by-component/lib/enum/validation-message-option-type.enum.ts","ng://@bpost/bp-address-auto-complete-by-component/lib/enum/validation-message-type.enum.ts","ng://@bpost/bp-address-auto-complete-by-component/lib/enum/address-level.enum.ts","ng://@bpost/bp-address-auto-complete-by-component/lib/lib-address-autocomplete-by-component.service.ts","ng://@bpost/bp-address-auto-complete-by-component/lib/model/query-parameters.model.ts","ng://@bpost/bp-address-auto-complete-by-component/lib/enum/source-type.enum.ts","ng://@bpost/bp-address-auto-complete-by-component/lib/services/http.service.ts","ng://@bpost/bp-address-auto-complete-by-component/lib/model/Locality.ts","ng://@bpost/bp-address-auto-complete-by-component/lib/model/Street.ts","ng://@bpost/bp-address-auto-complete-by-component/lib/model/Box.ts","ng://@bpost/bp-address-auto-complete-by-component/lib/services/adress.service.ts","ng://@bpost/bp-address-auto-complete-by-component/lib/services/locale.service.ts","ng://@bpost/bp-address-auto-complete-by-component/lib/services/unicode.service.ts","ng://@bpost/bp-address-auto-complete-by-component/lib/utils/domhandler.ts","ng://@bpost/bp-address-auto-complete-by-component/lib/utils/preflll.event.ts","ng://@bpost/bp-address-auto-complete-by-component/lib/enum/input-name.enum.ts","ng://@bpost/bp-address-auto-complete-by-component/lib/locality/locality.component.ts","ng://@bpost/bp-address-auto-complete-by-component/lib/street/street.component.ts","ng://@bpost/bp-address-auto-complete-by-component/lib/street-number/street-number.component.ts","ng://@bpost/bp-address-auto-complete-by-component/lib/box-number/box-number.component.ts","ng://@bpost/bp-address-auto-complete-by-component/lib/utils/prefill-data.ts","ng://@bpost/bp-address-auto-complete-by-component/lib/lib-address-autocomplete-by-component.component.ts","ng://@bpost/bp-address-auto-complete-by-component/lib/utils/highlight-suggestion.pipe.ts","ng://@bpost/bp-address-auto-complete-by-component/lib/utils/visible-suggestion.directive.ts","ng://@bpost/bp-address-auto-complete-by-component/lib/lib-address-autocomplete-by-component.module.ts","ng://@bpost/bp-address-auto-complete-by-component/lib/utils/prefilled-parameters.ts"],"names":["__assign","Object","assign","t","s","i","n","arguments","length","p","prototype","hasOwnProperty","call","apply","this","__decorate","decorators","target","key","desc","d","c","r","getOwnPropertyDescriptor","Reflect","decorate","defineProperty","__values","o","Symbol","iterator","m","next","value","done","TypeError","ValidationMessageOptionType","ValidationMessageType","ADDRESSLEVEL","LibAddressAutocompleteByComponentService","Injectable","providedIn","SourceType","QueryParameters","init","sortByPostalCode","enable","sortByPostalCodeLocalityName","sortByLocalityname","sortByLocalityNamePostalCode","sortByStreet","sortByStreetName","sortByStreetNb","sortByStreetNumber","sortByBox","sortByBoxNumber","HttpService","httpClient","openConnections","get","url","options","request","method","_this","pipe","map","response","handleResponse","catchError","error","handleError","throwError","HttpClient","Locality","json","sequenceNumber","topSuggestions","forEach","element","push","AddressSuggestion","address","Address","municipalityId","subMunicipalityId","detectedLanguage","geoSanction","searchBarString","string","municipalityName","localityName","postalCode","Street","AddressSuggestion$1","Address$1","Box","AddressSuggestion$2","Address$2","AddressService","httpService","domain","localityURL","getLocality","baseUrl","params","tap","handleGetLocality","getStreet","locality","postalcode","replace","handleGetStreet","getBox","handleGetBox","LocaleService","inputLanguageEvent","BehaviorSubject","undefined","currentLang","asObservable","changeLang","lang","isLocaleDutch","isPreferredLocale","isLocaleFrench","isLocaleGerman","locale","getValue","window","navigator","language","indexOf","diacriticsRemovalMap","base","letters","UnicodeService","defaultDiacriticsRemovalMap","diacriticsMap","split","char","removeDiacritics","str","a","ngOnDestroy","DomHandler","findSingle","selector","querySelector","scrollInView","container","item","borderTopValue","getComputedStyle","getPropertyValue","borderTop","parseFloat","paddingTopValue","paddingTop","containerRect","getBoundingClientRect","offset","top","document","body","scrollTop","scroll","elementHeight","clientHeight","itemHeight","getOuterHeight","getInnerHeight","el","height","offsetHeight","style","paddingBottom","margin","marginTop","marginBottom","getHeight","borderTopWidth","borderBottomWidth","InputNameType","PrefillEvent","addressLevel","prefillData","LocalityComponent","addressService","localeService","translateService","unicodeService","labelResourceKey","messageOption","maxSuggesionCount","visibleSuggestionCount","sortCriteria","showDebugMessageToConsole","messageChanged","EventEmitter","addressChanged","focusEvent","blurEvent","textChangeEvent","clearInputEventEmitter","prefillEventEmitter","validationMessageCode","validationMessageOptions","prefilling","isPrefillWithNoMatch","val","use","subscribe","res","onChangedLanguage","ngOnInit","searchText","addressIsValidated","suggestionValidationMessage","suggestions","previousIndex","lastSearchValue","wordList","suggestionsWordList","bpTypeAhead","placeHolderText","skipNextBlur","errorCode","selectedIndex","typeAheadWord","collapseDropdown","consumedNumber","setSearchText","ngAfterViewChecked","selectionChanged","overlay_1","localityList","nativeElement","setTimeout","listItem","ngOnChanges","changes","firstChange","loadParams","currentValue","console","log","minLevel","LOCALITY","prefillMunicipalityName","transformMunicipalityInLowercaseAndWithoutDiacritics","parameters","onInputChange","SOURCE_PREFILLED","inputText","notEqualIgnoreCase","clearWidget","result","toLowerCase","subscription","unsubscribe","buildInputWordList","_c","_d","sug","w","start","this_1","startsWithIgnoreDiacritics","ww_1","substr","present","find","w1","_e","e_2","_f","stringStartsWithIgnoreDiacritics","prefix","_value","_prefix","slice","buildTypeAhead","source","mayAddTypeAhead","searchTextWords","lastWord","some","word","bind","appendix","clearConnectionErrorMessage","instant","clearSuggestionValidationMessage","clearTypeAhead","emitTranslatedValidationMessage","validationMessageType","Address_Not_Found","Address_Validated","Service_Unavailable","message","emit","messageType","translatedMessage","warn","generateParameters","param","id","q","maxNumberOfSuggestions","getTopSuggestions","handleGetLocalityResponse","prefillMunicipalityPerfectMatchFound","prefillAnalyzeData","handleGetLocalityError","getTextColor","data","clearSuggestions","parseTopSuggestions","onFocusShowSuggestionsAfterPrefill","setConnectionErrorMessage","isBrowserIE","test","userAgent","isDropdownClicked","ev","explicitOriginalTarget","activeElement","isString","constructor","String","concatStr","mayShowClearButton","oldVal","newVal","onBlur","localitySearchInput","focus","onFocus","onInputClick","resetArrowSelectedIndex","valueChanged","parseSingleSuggestion","suggestion","suggestionToAdd","french","dutch","german","messages","_b","translateMessage","prefillCheckForPerfectMatch","sugAddress","suggestionLocality","suggestionMunicipality","prefillMunicipalityPerfectMatchSuggestion","Array","topSuggestions_1","topSuggestions_1_1","clearInput","clearSelectedAddress","clearSearchText","clickSuggestion","event","preventDefault","setSelectedAddress","cursorIsOnSuggestionList","changeSelection","moveArrowSelectedIndexDown","setSearchTextBasedOnArrowSelection","moveArrowSelectedIndexUp","checkKeyDown","which","typeAheadIsShown","selectFirstInListOfSuggesions","ctrlKey","args","sub","principal","TranslateService","ViewChild","static","Input","Output","Component","template","StreetComponent","visibleSuggesionCount","streetList","STREET","prefillStreetName","transformStreetNameInLowercaseAndWithoutDiacritics","streetName","onClearInputEvent","streetSearchInput","mayShowDropdown","handleGetStreetResponse","prefillStreetPerfectMatchFound","handleGetStreetError","isParamsComplete","isValid","prefillStreetPerfectMatchSuggestion","showAddressIsValidated","shiftKey","suggestionMouseLeave","showAddressNotFoundMessage","isDisabled","StreetNumberComponent","emptyResponseEvent","addressIsComplete","setEmptyResponseText","emptyResponse","streetNumberList","STREET_NUMBER","prefillStreetNumber","transformStreetNumberInLowercaseAndWithoutDiacritics","streetNumber","emptyResponseText","streetNumberSearchInput","getBackgroundColor","prefillStreetNumberPerfectMatchFound","street","notInListAllowed","prefillBuildNotInListSuggestion","not-in-list","notInListSuggestion","streetSuggestion","combined","mailBoxid","suffixId","houseNumber","isComplete","bn","boxNumber","suggestionStreetNumber","prefillStreetNumberPerfectMatchSuggestion","notInList","isNotInList","modifySelectedAddress","selectedAddress","latitude","longitude","mailboxId","pdpId","notifyAddressIsValidated","onClearStreetNumberInput","BoxNumberComponent","boxNumberList","BOX_NUMBER","prefillBoxNumber","transformBoxNumberInLowercaseAndWithoutDiacritics","boxNumberSearchInput","handleGetBoxResponse","prefillBoxNumberPerfectMatchFound","handleGetBoxError","streetNumberSuggestion","suggestionBoxNumber","prefillBoxNumberPerfectMatchSuggestion","PrefillData","ts","Date","LibAddressAutocompleteByComponentComponent","selectedLanguage","localityUrl","maxSuggestionLocality","visibleSuggestionLocalityCount","localityPrefillData","streetUrl","maxSuggestionStreet","visibleSuggestionStreetCount","streetPrefillData","streetNumberUrl","maxSuggestionStreetNb","visibleSuggestionStreetNbCount","streetNumberPrefillData","boxNumberUrl","maxSuggestionBoxNb","visibleSuggestionBoxNbCount","boxNumberPrefillData","emittedAddress","validationMessage","addressCompleteEventEmitter","validationMessageEventEmitter","processingPrefillData","setLanguage","onClearInput","option","setValidationMessageOptionFromInput","addressParams","displayParametersChangesToConsole","enterPrefillMode","notifyAddressComplete","wcChanges","sortCriteriaLocality","sortCriteriaStreet","sortCriteriaStreetNb","sortCriteriaBoxNb","autocompleteBoxNb","autocompleteStreetNb","autocompleteStreet","autocompleteLocality","changeMinLevel","quitPrefillMode","setFocus","getBoxPrefix","updatePostalCodeLocality","onClearInputEventEmitter","nextAddress","streetNumberAddress","resetLocality","setAddress","resetStreet","resetStreetNumber","resetAddress","resetBoxNumber","level","doNotify","updateCompleteAddress","addressIsNotInList","streetAddress","updateStreetName","updateStreetNumber","isCompleteNotificationDone","setValidationMessage","validationMessageOptionType","EMIT","postalCodeLocality","streetNameInput","streetNumberInput","completeAddress","validationType","onLocalityPrefillEvent","suggestionAddress","suggestionAddressLocalityName","cpAndLocality","onStreetPrefillEvent","onStreetNumberPrefillEvent","onBoxNumberPrefillEvent","HighlightSuggestionPipe","sanitizer","transform","isArray","transformForArray","re","RegExp","match","replacedValue","bypassSecurityTrustHtml","query","ix","args_1","args_1_1","concat","DomSanitizer","Pipe","name","VisibleSuggestionDirective","renderer","showHeight","appVisibleSuggestion","parent","count","children","firstElementChild","sum","from","reduce","acc","ele","setStyle","ElementRef","Renderer2","Directive","LibAddressAutocompleteByComponentModule","NgModule","declarations","imports","CommonModule","HttpClientModule","FormsModule","ReactiveFormsModule","TranslateModule","exports"],"mappings":"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","sourcesContent":["/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport function __createBinding(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n}\r\n\r\nexport function __exportStar(m, exports) {\r\n for (var p in m) if (p !== \"default\" && !exports.hasOwnProperty(p)) exports[p] = m[p];\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n};\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\r\n result.default = mod;\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, privateMap) {\r\n if (!privateMap.has(receiver)) {\r\n throw new TypeError(\"attempted to get private field on non-instance\");\r\n }\r\n return privateMap.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, privateMap, value) {\r\n if (!privateMap.has(receiver)) {\r\n throw new TypeError(\"attempted to set private field on non-instance\");\r\n }\r\n privateMap.set(receiver, value);\r\n return value;\r\n}\r\n","export enum ValidationMessageOptionType {\r\n EMIT = 'EMIT',\r\n SHOW = 'SHOW'\r\n}\r\n","export enum ValidationMessageType {\r\n Address_Not_Found = 'address-not-found',\r\n Address_Validated = 'address-validated',\r\n Service_Unavailable = 'service-unavailable',\r\n}\r\n","export enum ADDRESSLEVEL {\r\n BOX_NUMBER = 1,\r\n STREET_NUMBER,\r\n STREET,\r\n LOCALITY\r\n}\r\n","import { Injectable } from '@angular/core';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class LibAddressAutocompleteByComponentService {\n\n constructor() { }\n}\n","export class QueryParameters {\r\n id: number;\r\n q: string;\r\n postalCode: string;\r\n locality: string;\r\n street: string;\r\n streetNumber: string;\r\n maxNumberOfSuggestions: number;\r\n sortByPostalCodeLocalityName: boolean;\r\n sortByLocalityNamePostalCode: boolean;\r\n sortByStreetName: boolean;\r\n sortByStreetNumber: boolean;\r\n sortByBoxNumber: boolean;\r\n\r\n constructor(init?: Partial<QueryParameters>) {\r\n Object.assign(this, init);\r\n }\r\n\r\n sortByPostalCode(enable: boolean) {\r\n this.sortByPostalCodeLocalityName = enable;\r\n }\r\n\r\n sortByLocalityname(enable: boolean) {\r\n this.sortByLocalityNamePostalCode = enable;\r\n }\r\n\r\n sortByStreet(enable: boolean) {\r\n this.sortByStreetName = enable;\r\n }\r\n\r\n sortByStreetNb(enable: boolean) {\r\n this.sortByStreetNumber = enable;\r\n }\r\n\r\n sortByBox(enable: boolean) {\r\n this.sortByBoxNumber = enable;\r\n }\r\n}\r\n","export enum SourceType\r\n{\r\n SOURCE_PREFILLED = 'Prefilled'\r\n}\r\n","import { HttpClient } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\nimport { Observable, throwError } from 'rxjs';\nimport { catchError, map } from 'rxjs/operators';\n\n\n@Injectable({\n providedIn: 'root'\n})\nexport class HttpService {\n\n private openConnections = 0;\n\n constructor(private httpClient: HttpClient) { }\n\n get(url: string, options?: any): Observable<any> {\n return this.request('GET', url, options);\n }\n\n private request(method: any, url?: string, options?: {}): Observable<any> {\n options = !!options ? options : {};\n this.openConnections++;\n return this.httpClient.request(method, url, options).pipe(\n map((response: Response) => this.handleResponse(response)),\n catchError((error: any) => this.handleError(error)));\n }\n\n private handleResponse(response: any): any {\n this.openConnections--;\n return response;\n }\n\n private handleError(error: any): any {\n this.openConnections--;\n return throwError(error);\n }\n\n}\n","export class Locality {\r\n sequenceNumber: number;\r\n topSuggestions: AddressSuggestion[];\r\n\r\n constructor(json: any) {\r\n this.sequenceNumber = json.sequenceNumber;\r\n if (json.topSuggestions && json.topSuggestions.length > 0) {\r\n this.topSuggestions = [];\r\n json.topSuggestions.forEach(element => {\r\n this.topSuggestions.push(new AddressSuggestion(element));\r\n });\r\n }\r\n }\r\n}\r\n\r\nclass AddressSuggestion {\r\n address: Address;\r\n\r\n constructor(json: any) {\r\n this.address = json.address ? new Address(json.address) : null;\r\n }\r\n}\r\n\r\nclass Address {\r\n municipalityId: string;\r\n subMunicipalityId: string;\r\n detectedLanguage: string;\r\n geoSanction: string;\r\n searchBarString: string;\r\n string: string;\r\n municipalityName: string;\r\n localityName: string;\r\n postalCode: string;\r\n\r\n constructor(json: any) {\r\n this.municipalityId = json.municipalityId;\r\n this.subMunicipalityId = json.subMunicipalityId;\r\n this.detectedLanguage = json.detectedLanguage;\r\n this.geoSanction = json.geoSanction;\r\n this.searchBarString = json.searchBarString;\r\n this.string = json.string;\r\n this.municipalityName = json.municipalityName;\r\n this.localityName = json.localityName;\r\n this.postalCode = json.postalCode;\r\n }\r\n}","export class Street {\r\n sequenceNumber: number;\r\n topSuggestions: AddressSuggestion[];\r\n\r\n constructor(json: any) {\r\n this.sequenceNumber = json.sequenceNumber;\r\n if (json.topSuggestions && json.topSuggestions.length > 0) {\r\n this.topSuggestions = [];\r\n json.topSuggestions.forEach(element => {\r\n this.topSuggestions.push(new AddressSuggestion(element));\r\n });\r\n }\r\n }\r\n}\r\n\r\nclass AddressSuggestion {\r\n address: Address;\r\n\r\n constructor(json: any) {\r\n this.address = json.address ? new Address(json.address) : null;\r\n }\r\n}\r\n\r\nclass Address {\r\n municipalityId: string;\r\n subMunicipalityId: string;\r\n detectedLanguage: string;\r\n geoSanction: string;\r\n searchBarString: string;\r\n string: string;\r\n municipalityName: string;\r\n localityName: string;\r\n postalCode: string;\r\n\r\n constructor(json: any) {\r\n this.municipalityId = json.municipalityId;\r\n this.subMunicipalityId = json.subMunicipalityId;\r\n this.detectedLanguage = json.detectedLanguage;\r\n this.geoSanction = json.geoSanction;\r\n this.searchBarString = json.searchBarString;\r\n this.string = json.string;\r\n this.municipalityName = json.municipalityName;\r\n this.localityName = json.localityName;\r\n this.postalCode = json.postalCode;\r\n }\r\n}\r\n","export class Box {\r\n sequenceNumber: number;\r\n topSuggestions: AddressSuggestion[];\r\n\r\n constructor(json: any) {\r\n this.sequenceNumber = json.sequenceNumber;\r\n if (json.topSuggestions && json.topSuggestions.length > 0) {\r\n this.topSuggestions = [];\r\n json.topSuggestions.forEach(element => {\r\n this.topSuggestions.push(new AddressSuggestion(element));\r\n });\r\n }\r\n }\r\n}\r\n\r\nclass AddressSuggestion {\r\n address: Address;\r\n\r\n constructor(json: any) {\r\n this.address = json.address ? new Address(json.address) : null;\r\n }\r\n}\r\n\r\nclass Address {\r\n municipalityId: string;\r\n subMunicipalityId: string;\r\n detectedLanguage: string;\r\n geoSanction: string;\r\n searchBarString: string;\r\n string: string;\r\n municipalityName: string;\r\n localityName: string;\r\n postalCode: string;\r\n\r\n constructor(json: any) {\r\n this.municipalityId = json.municipalityId;\r\n this.subMunicipalityId = json.subMunicipalityId;\r\n this.detectedLanguage = json.detectedLanguage;\r\n this.geoSanction = json.geoSanction;\r\n this.searchBarString = json.searchBarString;\r\n this.string = json.string;\r\n this.municipalityName = json.municipalityName;\r\n this.localityName = json.localityName;\r\n this.postalCode = json.postalCode;\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\nimport { catchError, tap } from 'rxjs/operators';\nimport { Observable, throwError } from 'rxjs';\nimport { HttpErrorResponse } from '@angular/common/http';\nimport { HttpService } from './http.service';\nimport { QueryParameters } from '../model/query-parameters.model';\nimport { Locality } from '../model/Locality';\nimport { Street } from '../model/Street';\nimport { Box } from '../model/Box';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class AddressService {\n private domain = 'http://10.194.73.9:8080';\n private localityURL = this.domain + '/AddressAutoComplete/autocomplete/locality?IncludeGeographicalSanction=true';\n\n constructor(\n private httpService: HttpService\n ) { }\n\n\n\n getLocality(baseUrl: string, params: QueryParameters): Observable<Locality> {\n const url = baseUrl !== '' ? baseUrl : this.localityURL;\n // const options = {'params': params};\n const options = {params};\n return this.httpService.get(url, options).pipe(\n tap(response => this.handleGetLocality(response)),\n catchError(error => this.handleError(error))\n );\n }\n\n private handleGetLocality(response: any): Locality {\n const locality: Locality = new Locality(response.response);\n return locality;\n }\n\n getStreet(baseUrl: string, locality: string, postalcode: string, params: QueryParameters): Observable<Street> {\n let url = baseUrl;\n // const options = { 'params': params };\n const options = {params};\n url = url.replace('$postalCode', postalcode);\n url = url.replace('$localityName', locality);\n return this.httpService.get(url, options).pipe(\n tap(response => this.handleGetStreet(response)),\n catchError(error => this.handleError(error))\n );\n }\n\n private handleGetStreet(response: any): Street {\n const street: Street = new Street(response.response);\n return street;\n }\n\n getBox(baseUrl: string, locality: string, postalcode: string, params: QueryParameters): Observable<Box> {\n let url = baseUrl;\n const options = { params };\n url = url.replace('$postalCode', postalcode);\n url = url.replace('$localityName', locality);\n return this.httpService.get(url, options).pipe(\n tap(response => this.handleGetBox(response)),\n catchError(error => this.handleError(error))\n );\n }\n\n private handleGetBox(response: any): Box {\n const street: Box = new Box(response.response);\n return street;\n }\n\n handleError(error: HttpErrorResponse) {\n return throwError(error);\n }\n\n}\n","import { Injectable } from '@angular/core';\nimport { BehaviorSubject } from 'rxjs';\nimport { TranslateService } from '@ngx-translate/core';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class LocaleService {\n\n inputLanguageEvent = new BehaviorSubject<string>(undefined);\n currentLang = this.inputLanguageEvent.asObservable();\n\n constructor(\n // private translateService: TranslateService\n ) { }\n\n changeLang(lang: string) {\n // this.translateService.use(lang);\n this.inputLanguageEvent.next(lang);\n }\n\n public isLocaleDutch(): boolean {\n return this.isPreferredLocale('nl');\n }\n\n public isLocaleFrench(): boolean {\n return this.isPreferredLocale('fr');\n }\n\n public isLocaleGerman(): boolean {\n return this.isPreferredLocale('de');\n }\n\n private isPreferredLocale(locale: string): boolean {\n return (this.inputLanguageEvent.getValue() \n || window.navigator['userSelectedLanguage'] \n || window.navigator['userLanguage'] \n || window.navigator.language).indexOf(locale) === 0;\n }\n}\n","import { Injectable, OnDestroy } from '@angular/core';\n\n// const diacriticsRemovalMap = require('../../assets/diacriticsRemovalMap.json');\n\nconst diacriticsRemovalMap = {\n 'default': [\n {\n 'base': 'A',\n 'letters': '\\u0041\\u24B6\\uFF21\\u00C0\\u00C1\\u00C2\\u1EA6\\u1EA4\\u1EAA\\u1EA8\\u00C3\\u0100\\u0102\\u1EB0\\u1EAE\\u1EB4\\u1EB2\\u0226\\u01E0\\u00C4\\u01DE\\u1EA2\\u00C5\\u01FA\\u01CD\\u0200\\u0202\\u1EA0\\u1EAC\\u1EB6\\u1E00\\u0104\\u023A\\u2C6F'\n },\n {\n 'base': 'AA',\n 'letters': '\\uA732'\n },\n {\n 'base': 'AE',\n 'letters': '\\u00C6\\u01FC\\u01E2'\n },\n {\n 'base': 'AO',\n 'letters': '\\uA734'\n },\n {\n 'base': 'AU',\n 'letters': '\\uA736'\n },\n {\n 'base': 'AV',\n 'letters': '\\uA738\\uA73A'\n },\n {\n 'base': 'AY',\n 'letters': '\\uA73C'\n },\n {\n 'base': 'B',\n 'letters': '\\u0042\\u24B7\\uFF22\\u1E02\\u1E04\\u1E06\\u0243\\u0182\\u0181'\n },\n {\n 'base': 'C',\n 'letters': '\\u0043\\u24B8\\uFF23\\u0106\\u0108\\u010A\\u010C\\u00C7\\u1E08\\u0187\\u023B\\uA73E'\n },\n {\n 'base': 'D',\n 'letters': '\\u0044\\u24B9\\uFF24\\u1E0A\\u010E\\u1E0C\\u1E10\\u1E12\\u1E0E\\u0110\\u018B\\u018A\\u0189\\uA779'\n },\n {\n 'base': 'DZ',\n 'letters': '\\u01F1\\u01C4'\n },\n {\n 'base': 'Dz',\n 'letters': '\\u01F2\\u01C5'\n },\n {\n 'base': 'E',\n 'letters': '\\u0045\\u24BA\\uFF25\\u00C8\\u00C9\\u00CA\\u1EC0\\u1EBE\\u1EC4\\u1EC2\\u1EBC\\u0112\\u1E14\\u1E16\\u0114\\u0116\\u00CB\\u1EBA\\u011A\\u0204\\u0206\\u1EB8\\u1EC6\\u0228\\u1E1C\\u0118\\u1E18\\u1E1A\\u0190\\u018E'\n },\n {\n 'base': 'F',\n 'letters': '\\u0046\\u24BB\\uFF26\\u1E1E\\u0191\\uA77B'\n },\n {\n 'base': 'G',\n 'letters': '\\u0047\\u24BC\\uFF27\\u01F4\\u011C\\u1E20\\u011E\\u0120\\u01E6\\u0122\\u01E4\\u0193\\uA7A0\\uA77D\\uA77E'\n },\n {\n 'base': 'H',\n 'letters': '\\u0048\\u24BD\\uFF28\\u0124\\u1E22\\u1E26\\u021E\\u1E24\\u1E28\\u1E2A\\u0126\\u2C67\\u2C75\\uA78D'\n },\n {\n 'base': 'I',\n 'letters': '\\u0049\\u24BE\\uFF29\\u00CC\\u00CD\\u00CE\\u0128\\u012A\\u012C\\u0130\\u00CF\\u1E2E\\u1EC8\\u01CF\\u0208\\u020A\\u1ECA\\u012E\\u1E2C\\u0197'\n },\n {\n 'base': 'J',\n 'letters': '\\u004A\\u24BF\\uFF2A\\u0134\\u0248'\n },\n {\n 'base': 'K',\n 'letters': '\\u004B\\u24C0\\uFF2B\\u1E30\\u01E8\\u1E32\\u0136\\u1E34\\u0198\\u2C69\\uA740\\uA742\\uA744\\uA7A2'\n },\n {\n 'base': 'L',\n 'letters': '\\u004C\\u24C1\\uFF2C\\u013F\\u0139\\u013D\\u1E36\\u1E38\\u013B\\u1E3C\\u1E3A\\u0141\\u023D\\u2C62\\u2C60\\uA748\\uA746\\uA780'\n },\n {\n 'base': 'LJ',\n 'letters': '\\u01C7'\n },\n {\n 'base': 'Lj',\n 'letters': '\\u01C8'\n },\n {\n 'base': 'M',\n 'letters': '\\u004D\\u24C2\\uFF2D\\u1E3E\\u1E40\\u1E42\\u2C6E\\u019C'\n },\n {\n 'base': 'N',\n 'letters': '\\u004E\\u24C3\\uFF2E\\u01F8\\u0143\\u00D1\\u1E44\\u0147\\u1E46\\u0145\\u1E4A\\u1E48\\u0220\\u019D\\uA790\\uA7A4'\n },\n {\n 'base': 'NJ',\n 'letters': '\\u01CA'\n },\n {\n 'base': 'Nj',\n 'letters': '\\u01CB'\n },\n {\n 'base': 'O',\n 'letters': '\\u004F\\u24C4\\uFF2F\\u00D2\\u00D3\\u00D4\\u1ED2\\u1ED0\\u1ED6\\u1ED4\\u00D5\\u1E4C\\u022C\\u1E4E\\u014C\\u1E50\\u1E52\\u014E\\u022E\\u0230\\u00D6\\u022A\\u1ECE\\u0150\\u01D1\\u020C\\u020E\\u01A0\\u1EDC\\u1EDA\\u1EE0\\u1EDE\\u1EE2\\u1ECC\\u1ED8\\u01EA\\u01EC\\u00D8\\u01FE\\u0186\\u019F\\uA74A\\uA74C'\n },\n {\n 'base': 'OI',\n 'letters': '\\u01A2'\n },\n {\n 'base': 'OO',\n 'letters': '\\uA74E'\n },\n {\n 'base': 'OU',\n 'letters': '\\u0222'\n },\n {\n 'base': 'OE',\n 'letters': '\\u008C\\u0152'\n },\n {\n 'base': 'oe',\n 'letters': '\\u009C\\u0153'\n },\n {\n 'base': 'P',\n 'letters': '\\u0050\\u24C5\\uFF30\\u1E54\\u1E56\\u01A4\\u2C63\\uA750\\uA752\\uA754'\n },\n {\n 'base': 'Q',\n 'letters': '\\u0051\\u24C6\\uFF31\\uA756\\uA758\\u024A'\n },\n {\n 'base': 'R',\n 'letters': '\\u0052\\u24C7\\uFF32\\u0154\\u1E58\\u0158\\u0210\\u0212\\u1E5A\\u1E5C\\u0156\\u1E5E\\u024C\\u2C64\\uA75A\\uA7A6\\uA782'\n },\n {\n 'base': 'S',\n 'letters': '\\u0053\\u24C8\\uFF33\\u1E9E\\u015A\\u1E64\\u015C\\u1E60\\u0160\\u1E66\\u1E62\\u1E68\\u0218\\u015E\\u2C7E\\uA7A8\\uA784'\n },\n {\n 'base': 'T',\n 'letters': '\\u0054\\u24C9\\uFF34\\u1E6A\\u0164\\u1E6C\\u021A\\u0162\\u1E70\\u1E6E\\u0166\\u01AC\\u01AE\\u023E\\uA786'\n },\n {\n 'base': 'TZ',\n 'letters': '\\uA728'\n },\n {\n 'base': 'U',\n 'letters': '\\u0055\\u24CA\\uFF35\\u00D9\\u00DA\\u00DB\\u0168\\u1E78\\u016A\\u1E7A\\u016C\\u00DC\\u01DB\\u01D7\\u01D5\\u01D9\\u1EE6\\u016E\\u0170\\u01D3\\u0214\\u0216\\u01AF\\u1EEA\\u1EE8\\u1EEE\\u1EEC\\u1EF0\\u1EE4\\u1E72\\u0172\\u1E76\\u1E74\\u0244'\n },\n {\n 'base': 'V',\n 'letters': '\\u0056\\u24CB\\uFF36\\u1E7C\\u1E7E\\u01B2\\uA75E\\u0245'\n },\n {\n 'base': 'VY',\n 'letters': '\\uA760'\n },\n {\n 'base': 'W',\n 'letters': '\\u0057\\u24CC\\uFF37\\u1E80\\u1E82\\u0174\\u1E86\\u1E84\\u1E88\\u2C72'\n },\n {\n 'base': 'X',\n 'letters': '\\u0058\\u24CD\\uFF38\\u1E8A\\u1E8C'\n },\n {\n 'base': 'Y',\n 'letters': '\\u0059\\u24CE\\uFF39\\u1EF2\\u00DD\\u0176\\u1EF8\\u0232\\u1E8E\\u0178\\u1EF6\\u1EF4\\u01B3\\u024E\\u1EFE'\n },\n {\n 'base': 'Z',\n 'letters': '\\u005A\\u24CF\\uFF3A\\u0179\\u1E90\\u017B\\u017D\\u1E92\\u1E94\\u01B5\\u0224\\u2C7F\\u2C6B\\uA762'\n },\n {\n 'base': 'a',\n 'letters': '\\u0061\\u24D0\\uFF41\\u1E9A\\u00E0\\u00E1\\u00E2\\u1EA7\\u1EA5\\u1EAB\\u1EA9\\u00E3\\u0101\\u0103\\u1EB1\\u1EAF\\u1EB5\\u1EB3\\u0227\\u01E1\\u00E4\\u01DF\\u1EA3\\u00E5\\u01FB\\u01CE\\u0201\\u0203\\u1EA1\\u1EAD\\u1EB7\\u1E01\\u0105\\u2C65\\u0250'\n },\n {\n 'base': 'aa',\n 'letters': '\\uA733'\n },\n {\n 'base': 'ae',\n 'letters': '\\u00E6\\u01FD\\u01E3'\n },\n {\n 'base': 'ao',\n 'letters': '\\uA735'\n },\n {\n 'base': 'au',\n 'letters': '\\uA737'\n },\n {\n 'base': 'av',\n 'letters': '\\uA739\\uA73B'\n },\n {\n 'base': 'ay',\n 'letters': '\\uA73D'\n },\n {\n 'base': 'b',\n 'letters': '\\u0062\\u24D1\\uFF42\\u1E03\\u1E05\\u1E07\\u0180\\u0183\\u0253'\n },\n {\n 'base': 'c',\n 'letters': '\\u0063\\u24D2\\uFF43\\u0107\\u0109\\u010B\\u010D\\u00E7\\u1E09\\u0188\\u023C\\uA73F\\u2184'\n },\n {\n 'base': 'd',\n 'letters': '\\u0064\\u24D3\\uFF44\\u1E0B\\u010F\\u1E0D\\u1E11\\u1E13\\u1E0F\\u0111\\u018C\\u0256\\u0257\\uA77A'\n },\n {\n 'base': 'dz',\n 'letters': '\\u01F3\\u01C6'\n },\n {\n 'base': 'e',\n 'letters': '\\u0065\\u24D4\\uFF45\\u00E8\\u00E9\\u00EA\\u1EC1\\u1EBF\\u1EC5\\u1EC3\\u1EBD\\u0113\\u1E15\\u1E17\\u0115\\u0117\\u00EB\\u1EBB\\u011B\\u0205\\u0207\\u1EB9\\u1EC7\\u0229\\u1E1D\\u0119\\u1E19\\u1E1B\\u0247\\u025B\\u01DD'\n },\n {\n 'base': 'f',\n 'letters': '\\u0066\\u24D5\\uFF46\\u1E1F\\u0192\\uA77C'\n },\n {\n 'base': 'g',\n 'letters': '\\u0067\\u24D6\\uFF47\\u01F5\\u011D\\u1E21\\u011F\\u0121\\u01E7\\u0123\\u01E5\\u0260\\uA7A1\\u1D79\\uA77F'\n },\n {\n 'base': 'h',\n 'letters': '\\u0068\\u24D7\\uFF48\\u0125\\u1E23\\u1E27\\u021F\\u1E25\\u1E29\\u1E2B\\u1E96\\u0127\\u2C68\\u2C76\\u0265'\n },\n {\n 'base': 'hv',\n 'letters': '\\u0195'\n },\n {\n 'base': 'i',\n 'letters': '\\u0069\\u24D8\\uFF49\\u00EC\\u00ED\\u00EE\\u0129\\u012B\\u012D\\u00EF\\u1E2F\\u1EC9\\u01D0\\u0209\\u020B\\u1ECB\\u012F\\u1E2D\\u0268\\u0131'\n },\n {\n 'base': 'j',\n 'letters': '\\u006A\\u24D9\\uFF4A\\u0135\\u01F0\\u0249'\n },\n {\n 'base': 'k',\n 'letters': '\\u006B\\u24DA\\uFF4B\\u1E31\\u01E9\\u1E33\\u0137\\u1E35\\u0199\\u2C6A\\uA741\\uA743\\uA745\\uA7A3'\n },\n {\n 'base': 'l',\n 'letters': '\\u006C\\u24DB\\uFF4C\\u0140\\u013A\\u013E\\u1E37\\u1E39\\u013C\\u1E3D\\u1E3B\\u017F\\u0142\\u019A\\u026B\\u2C61\\uA749\\uA781\\uA747'\n },\n {\n 'base': 'lj',\n 'letters': '\\u01C9'\n },\n {\n 'base': 'm',\n 'letters': '\\u006D\\u24DC\\uFF4D\\u1E3F\\u1E41\\u1E43\\u0271\\u026F'\n },\n {\n 'base': 'n',\n 'letters': '\\u006E\\u24DD\\uFF4E\\u01F9\\u0144\\u00F1\\u1E45\\u0148\\u1E47\\u0146\\u1E4B\\u1E49\\u019E\\u0272\\u0149\\uA791\\uA7A5'\n },\n {\n 'base': 'nj',\n 'letters': '\\u01CC'\n },\n {\n 'base': 'o',\n 'letters': '\\u006F\\u24DE\\uFF4F\\u00F2\\u00F3\\u00F4\\u1ED3\\u1ED1\\u1ED7\\u1ED5\\u00F5\\u1E4D\\u022D\\u1E4F\\u014D\\u1E51\\u1E53\\u014F\\u022F\\u0231\\u00F6\\u022B\\u1ECF\\u0151\\u01D2\\u020D\\u020F\\u01A1\\u1EDD\\u1EDB\\u1EE1\\u1EDF\\u1EE3\\u1ECD\\u1ED9\\u01EB\\u01ED\\u00F8\\u01FF\\u0254\\uA74B\\uA74D\\u0275'\n },\n {\n 'base': 'oi',\n 'letters': '\\u01A3'\n },\n {\n 'base': 'ou',\n 'letters': '\\u0223'\n },\n {\n 'base': 'oo',\n 'letters': '\\uA74F'\n },\n {\n 'base': 'p',\n 'letters': '\\u0070\\u24DF\\uFF50\\u1E55\\u1E57\\u01A5\\u1D7D\\uA751\\uA753\\uA755'\n },\n {\n 'base': 'q',\n 'letters': '\\u0071\\u24E0\\uFF51\\u024B\\uA757\\uA759'\n },\n {\n 'base': 'r',\n 'letters': '\\u0072\\u24E1\\uFF52\\u0155\\u1E59\\u0159\\u0211\\u0213\\u1E5B\\u1E5D\\u0157\\u1E5F\\u024D\\u027D\\uA75B\\uA7A7\\uA783'\n },\n {\n 'base': 's',\n 'letters': '\\u0073\\u24E2\\uFF53\\u00DF\\u015B\\u1E65\\u015D\\u1E61\\u0161\\u1E67\\u1E63\\u1E69\\u0219\\u015F\\u023F\\uA7A9\\uA785\\u1E9B'\n },\n {\n 'base': 't',\n 'letters': '\\u0074\\u24E3\\uFF54\\u1E6B\\u1E97\\u0165\\u1E6D\\u021B\\u0163\\u1E71\\u1E6F\\u0167\\u01AD\\u0288\\u2C66\\uA787'\n },\n {\n 'base': 'tz',\n 'letters': '\\uA729'\n },\n {\n 'base': 'u',\n 'letters': '\\u0075\\u24E4\\uFF55\\u00F9\\u00FA\\u00FB\\u0169\\u1E79\\u016B\\u1E7B\\u016D\\u00FC\\u01DC\\u01D8\\u01D6\\u01DA\\u1EE7\\u016F\\u0171\\u01D4\\u0215\\u0217\\u01B0\\u1EEB\\u1EE9\\u1EEF\\u1EED\\u1EF1\\u1EE5\\u1E73\\u0173\\u1E77\\u1E75\\u0289'\n },\n {\n 'base': 'v',\n 'letters': '\\u0076\\u24E5\\uFF56\\u1E7D\\u1E7F\\u028B\\uA75F\\u028C'\n },\n {\n 'base': 'vy',\n 'letters': '\\uA761'\n },\n {\n 'base': 'w',\n 'letters': '\\u0077\\u24E6\\uFF57\\u1E81\\u1E83\\u0175\\u1E87\\u1E85\\u1E98\\u1E89\\u2C73'\n },\n {\n 'base': 'x',\n 'letters': '\\u0078\\u24E7\\uFF58\\u1E8B\\u1E8D'\n },\n {\n 'base': 'y',\n 'letters': '\\u0079\\u24E8\\uFF59\\u1EF3\\u00FD\\u0177\\u1EF9\\u0233\\u1E8F\\u00FF\\u1EF7\\u1E99\\u1EF5\\u01B4\\u024F\\u1EFF'\n },\n {\n 'base': 'z',\n 'letters': '\\u007A\\u24E9\\uFF5A\\u017A\\u1E91\\u017C\\u017E\\u1E93\\u1E95\\u01B6\\u0225\\u0240\\u2C6C\\uA763'\n }\n ]\n};\n\n@Injectable({\n providedIn: 'root'\n})\nexport class UnicodeService implements OnDestroy {\n\n private defaultDiacriticsRemovalMap: any;\n private diacriticsMap: Object;\n\n constructor() {\n this.defaultDiacriticsRemovalMap = diacriticsRemovalMap.default;\n this.diacriticsMap = {};\n this.defaultDiacriticsRemovalMap.forEach(value => value.letters.split('').forEach((char) => this.diacriticsMap[char] = value.base));\n }\n\n public removeDiacritics(str: any) {\n if(str === null || str === undefined) { return str; }\n return str.replace(/[^\\u0000-\\u007E]/g, (a: string | number) => this.diacriticsMap[a] || a);\n }\n\n ngOnDestroy() {\n this.diacriticsMap = {};\n }\n\n}\n","export class DomHandler {\r\n public static findSingle(element: any, selector: string): any {\r\n if (element) {\r\n return element.querySelector(selector);\r\n }\r\n return null;\r\n }\r\n\r\n public static scrollInView(container, item) {\r\n const borderTopValue: string = getComputedStyle(container).getPropertyValue('borderTopWidth');\r\n const borderTop: number = borderTopValue ? parseFloat(borderTopValue) : 0;\r\n const paddingTopValue: string = getComputedStyle(container).getPropertyValue('paddingTop');\r\n const paddingTop: number = paddingTopValue ? parseFloat(paddingTopValue) : 0;\r\n const containerRect = container.getBoundingClientRect();\r\n const itemRect = item.getBoundingClientRect();\r\n const offset = (itemRect.top + document.body.scrollTop) - (containerRect.top + document.body.scrollTop) - borderTop - paddingTop;\r\n const scroll = container.scrollTop;\r\n const elementHeight = container.clientHeight;\r\n const itemHeight = this.getOuterHeight(item);\r\n\r\n if (offset < 0) {\r\n container.scrollTop = scroll + offset;\r\n } else if ((offset + itemHeight) > elementHeight) {\r\n container.scrollTop = scroll + offset - elementHeight + itemHeight;\r\n }\r\n }\r\n \r\n public static getInnerHeight(el) {\r\n let height = el.offsetHeight;\r\n let style = getComputedStyle(el);\r\n\r\n height += parseFloat(style.paddingTop) + parseFloat(style.paddingBottom);\r\n return height;\r\n }\r\n\r\n public static getOuterHeight(el, margin?) {\r\n let height = el.offsetHeight;\r\n\r\n if (margin) {\r\n let style = getComputedStyle(el);\r\n height += parseFloat(style.marginTop) + parseFloat(style.marginBottom);\r\n }\r\n\r\n return height;\r\n }\r\n\r\n public static getHeight(el): number {\r\n let height = el.offsetHeight;\r\n let style = getComputedStyle(el);\r\n\r\n height -= parseFloat(style.paddingTop) + parseFloat(style.paddingBottom) + parseFloat(style.borderTopWidth) + parseFloat(style.borderBottomWidth);\r\n\r\n return height;\r\n }\r\n}\r\n","import { PrefillData } from './prefill-data';\r\nimport { ADDRESSLEVEL } from '../enum/address-level.enum';\r\n\r\nexport class PrefillEvent\r\n{\r\n constructor(\r\n public addressLevel: ADDRESSLEVEL,\r\n public prefillData: PrefillData,\r\n ){}\r\n}\r\n","export enum InputNameType\r\n{\r\n LOCALITY = 'LOCALITY',\r\n STREET = 'STREET',\r\n STREET_NUMBER = 'STREET_NUMBER',\r\n BOX_NUMBER = 'BOX_NUMBER'\r\n}\r\n","import { Component, OnInit, OnChanges, OnDestroy, SimpleChanges, AfterViewChecked, ElementRef, ViewChild, Input, Output, EventEmitter } from '@angular/core';\nimport { Subscription } from 'rxjs';\nimport { ValidationMessageType } from '../enum/validation-message-type.enum';\nimport { ADDRESSLEVEL } from '../enum/address-level.enum';\nimport { QueryParameters } from '../model/query-parameters.model';\nimport { AddressService } from '../services/adress.service';\nimport { TranslateService } from '@ngx-translate/core';\nimport { LocaleService } from '../services/locale.service';\nimport { UnicodeService } from '../services/unicode.service';\nimport { DomHandler } from '../utils/domhandler';\nimport { SourceType } from '../enum/source-type.enum';\nimport { PrefillData } from '../utils/prefill-data';\nimport { PrefillEvent } from '../utils/preflll.event';\nimport { InputNameType } from '../enum/input-name.enum';\n\n@Component({\n selector: 'bp-locality',\n templateUrl: './locality.component.html',\n styleUrls: ['./locality.component.scss']\n})\nexport class LocalityComponent implements OnInit, OnChanges, OnDestroy, AfterViewChecked {\n\n @ViewChild('localitySearchInput', {static: false} ) localitySearchInput: ElementRef;\n @ViewChild('localityList', {static: false} ) localityList: ElementRef;\n\n // 2020-06-15\n/* @Input()\n onFocusShowSuggestionsAfterPrefill = true; */\n\n @Input() labelResourceKey = 'common.label.postalCode';\n @Input() messageOption = 'Y';\n @Input() maxSuggesionCount = 5;\n @Input() visibleSuggestionCount = 5;\n @Input() sortCriteria = '';\n @Input() baseUrl: string;\n @Input() inputText: string;\n // @Input() addressParams: PrefilledParameters;\n @Input() prefillData: PrefillData;\n @Input() showDebugMessageToConsole = true;\n\n// @ts-ignore\n @Input() set inputLang(val: string) {\n this.localeService.changeLang(val);\n this.translateService.use(val).subscribe(\n (res: any) => {\n this.onChangedLanguage();\n }\n );\n }\n\n @Output() messageChanged: EventEmitter<{messageType: ValidationMessageType, translatedMessage: string}> = new EventEmitter();\n @Output() addressChanged: EventEmitter<any> = new EventEmitter();\n @Output() focusEvent: EventEmitter<any> = new EventEmitter();\n @Output() blurEvent: EventEmitter<any> = new EventEmitter();\n @Output() textChangeEvent: EventEmitter<any> = new EventEmitter();\n @Output() clearInputEventEmitter: EventEmitter<string> = new EventEmitter();\n\n @Output() prefillEventEmitter: EventEmitter<PrefillEvent> = new EventEmitter<PrefillEvent>();\n\n // instance properties\n addressIsValidated: boolean;\n bpTypeAhead: string;\n collapseDropdown: boolean;\n consumedNumber: number;\n errorCode: any;\n lastSearchValue: string;\n minLevel: any;\n placeHolderText: string;\n previousIndex: number;\n searchText: string;\n selectedIndex: number;\n selectionChanged: boolean;\n sequenceNumber: number;\n skipNextBlur: boolean; // OnBlur is triggered when the user clicks suggestion/validator button\n subscription: Subscription;\n suggestions: Array<any>;\n suggestionValidationMessage: string;\n suggestionsWordList: any;\n typeAheadWord: string;\n validationMessageCode = null;\n validationMessageOptions = null;\n wordList: any;\n\n prefilling = false;\n isPrefillWithNoMatch = false;\n\n constructor(\n private addressService: AddressService,\n private localeService: LocaleService,\n private translateService: TranslateService,\n private unicodeService: UnicodeService,\n ) { }\n\n ngOnInit(): void\n {\n this.searchText = '';\n // instance properties\n this.addressIsValidated = false;\n this.suggestionValidationMessage = '';\n this.suggestions = [];\n this.previousIndex = -1;\n this.lastSearchValue = '';\n this.wordList = [];\n this.suggestionsWordList = [];\n this.bpTypeAhead = '';\n this.placeHolderText = '';\n this.skipNextBlur = false; // OnBlur is triggered when the user clicks suggestion/validator button\n this.errorCode = null;\n // scope properties\n this.selectedIndex = -1;\n // properties\n this.typeAheadWord = '';\n this.collapseDropdown = false;\n this.sequenceNumber = 0;\n this.consumedNumber = 0;\n // initialization\n this.setSearchText('');\n\n this.onChangedLanguage();\n }\n\n ngAfterViewChecked() {\n if (this.selectionChanged) {\n const overlay: HTMLDivElement = this.localityList.nativeElement;\n setTimeout(() => {\n const listItem = DomHandler.findSingle(overlay, 'li.active');\n if (listItem) {\n DomHandler.scrollInView(overlay, listItem);\n }\n }, 1);\n this.selectionChanged = false;\n }\n }\n\n ngOnChanges(changes: SimpleChanges) {\n if (changes) {\n\n if (changes.hasOwnProperty('prefillData') && !changes.prefillData.firstChange) {\n this.prefilling = true;\n this.searchText = this.loadParams(changes.prefillData.currentValue);\n if (this.showDebugMessageToConsole) { console.log('locality::ngOnChanges - loadParame result:', this.searchText); }\n this.bpTypeAhead = '';\n if (this.searchText !== '' && this.minLevel === ADDRESSLEVEL.LOCALITY) {\n this.collapseDropdown = true;\n this.prefillData.prefillMunicipalityName\n = this.transformMunicipalityInLowercaseAndWithoutDiacritics(this.prefillData.parameters.municipalityName);\n this.onInputChange(/*'prefilled'*/ SourceType.SOURCE_PREFILLED );\n }\n }\n if (changes.hasOwnProperty('inputText') && !changes.inputText.firstChange) {\n if (this.notEqualIgnoreCase(this.searchText, changes.inputText.currentValue)) {\n this.clearWidget();\n this.searchText = changes.inputText.currentValue;\n }\n }\n /*\n if (changes.hasOwnProperty('baseUrl') && !changes.baseUrl.firstChange) {\n this.clearWidget();\n this.clearSelectedAddress();\n }\n */\n }\n }\n\n transformMunicipalityInLowercaseAndWithoutDiacritics(municipalityName: string): string {\n let result: string = null;\n if (municipalityName !== null && municipalityName !== undefined )\n {\n result = this.unicodeService.removeDiacritics(municipalityName);\n result = result.toLowerCase();\n }\n if (this.showDebugMessageToConsole) {console.log('prefill municipality', result); }\n return result;\n }\n\n ngOnDestroy() {\n if (this.subscription) {\n this.subscription.unsubscribe();\n }\n }\n\n buildInputWordList() {\n this.wordList = this.searchText.split(/[\\s, ]+/);\n // console.log('LibAutocompleteLocalityComponent::buildInputWordList', this.wordList);\n if (this.suggestions && this.wordList) {\n for (const sug of this.suggestions) {\n if (!sug || !sug.hasOwnProperty('string')) {\n continue;\n }\n for (const w of this.wordList) {\n const start = this.startsWithIgnoreDiacritics(sug.string as string, w as string);\n if (start >= 0) {\n const ww = sug.string.substr(start, w.length);\n // console.log('adding word:' + ww);\n // ww is a candidate to be added to the wordlist if not already present in it\n const present = this.wordList.find( (w1: string) => w1.toLowerCase() === ww.toLowerCase() );\n if (present === null || present === undefined) {\n this.wordList.push(ww);\n }\n }\n }\n }\n }\n }\n\n stringStartsWithIgnoreDiacritics(value, prefix) {\n // tslint:disable-next-line:variable-name\n const _value = this.unicodeService.removeDiacritics( (value !== null && value !== undefined) ? value.toLowerCase() : value );\n // tslint:disable-next-line:variable-name\n const _prefix = this.unicodeService.removeDiacritics( (prefix !== null && prefix !== undefined) ? prefix.toLowerCase() : prefix);\n const start = _value.slice(0, _prefix.length).toLowerCase().indexOf(_prefix) !== -1;\n return start;\n }\n\n buildTypeAhead(source: SourceType) {\n if (source === SourceType.SOURCE_PREFILLED) { return false; }\n if (!this.mayAddTypeAhead()) {\n return;\n }\n const searchTextWords = this.searchText.split(/[\\s, ]+/);\n const lastWord = searchTextWords[searchTextWords.length - 1];\n\n if (this.suggestions.some(function(sug) {\n if (!sug || !sug.hasOwnProperty('string')) {\n return false;\n }\n return sug.string.split(/[\\s-]+/).some(function(word) {\n if (this.stringStartsWithIgnoreDiacritics(word, lastWord)) {\n this.typeAheadWord = word;\n return true;\n }\n }.bind(this));\n }.bind(this))) {\n const appendix = this.typeAheadWord.slice(lastWord.length, this.typeAheadWord.length).toLowerCase();\n this.bpTypeAhead = this.searchText + appendix;\n }\n }\n\n clearConnectionErrorMessage() {\n if (this.errorCode) {\n /*\n this.translateService.get(this.errorCode/ *, {value: 'world'}* /).subscribe((res: string) => {\n console.log(res);\n // => 'hello world'\n if (this.suggestionValidationMessage === res ) {\n this.clearSuggestionValidationMessage();\n }\n });\n */\n\n const res = this.translateService.instant(this.errorCode);\n if (this.suggestionValidationMessage === res ) {\n this.clearSuggestionValidationMessage();\n }\n /*\n if (this.suggestionValidationMessage === this.translationService.translate(this.errorCode)) {\n this.clearSuggestionValidationMessage();\n }\n */\n this.errorCode = null;\n }\n }\n\n clearTypeAhead() {\n this.bpTypeAhead = '';\n }\n\n emitTranslatedValidationMessage(validationMessageType: ValidationMessageType, options?: string[]) {\n // Momently, options are NOT used; so data type of these options will be reviewed once needed.\n if (validationMessageType === null || validationMessageType === undefined ) {\n console.warn('Unable to emit validation message - message key is invalid!', validationMessageType);\n return;\n }\n\n switch (validationMessageType) {\n\n case ValidationMessageType.Address_Not_Found:\n case ValidationMessageType.Address_Validated:\n case ValidationMessageType.Service_Unavailable: {\n const message = this.translateService.instant('common.message.' + validationMessageType);\n // this.messageChanged.emit(message);\n this.messageChanged.emit({messageType: validationMessageType, translatedMessage: message});\n }\n // tslint:disable-next-line:align\n break;\n\n default: {\n console.error('Unable to emit validation message - message key NOT supported!', validationMessageType);\n }\n // tslint:disable-next-line:align\n break;\n }\n\n }\n\n generateParameters(): QueryParameters {\n const param = new QueryParameters({\n id: this.sequenceNumber,\n q: this.searchText,\n maxNumberOfSuggestions: this.maxSuggesionCount\n });\n\n switch (this.sortCriteria) {\n case 'P':\n param.sortByPostalCode(true);\n break;\n\n case 'L':\n param.sortByLocalityname(true);\n break;\n\n default:\n break;\n }\n return param;\n }\n\n getTopSuggestions(source?: SourceType) {\n this.sequenceNumber += 1;\n const param = this.generateParameters();\n if (this.showDebugMessageToConsole) { console.log('LOCALITY calling service params', param); }\n if (this.searchText) {\n this.subscription = this.addressService.getLocality(this.baseUrl, param).subscribe(\n response => {\n if (this.showDebugMessageToConsole) { console.log('locality suggestions received:', response); }\n this.handleGetLocalityResponse(response, source);\n if (source === SourceType.SOURCE_PREFILLED)\n {\n this.isPrefillWithNoMatch = this.prefillData.prefillMunicipalityPerfectMatchFound === true ? false : true;\n this.prefillAnalyzeData();\n }\n else\n {\n this.isPrefillWithNoMatch = false;\n }\n }\n ,\n () => this.handleGetLocalityError()\n );\n }\n }\n\n getTextColor(): string {\n return ( this.isPrefillWithNoMatch === true ) ? 'orangered' : '';\n }\n\n handleGetLocalityResponse(data: any, source?: SourceType) {\n if (this.showDebugMessageToConsole) { console.log('handleGetLocalityResponse', data); }\n if (data && data.response && data.response.sequenceNumber && data.response.sequenceNumber >= this.consumedNumber &&\n data.response.topSuggestions) {\n this.consumedNumber = data.response.sequenceNumber;\n this.clearSuggestions();\n this.parseTopSuggestions(data.response.topSuggestions, source);\n this.buildTypeAhead(source);\n this.clearConnectionErrorMessage();\n this.buildInputWordList();\n }\n this.collapseDropdown = (this.prefilling === true && this.prefillData !== null)\n ? !this.prefillData.parameters.onFocusShowSuggestionsAfterPrefill : false;\n }\n\n handleGetLocalityError() {\n this.setConnectionErrorMessage();\n }\n\n isBrowserIE(): boolean {\n return /msie\\s|trident\\/|edge\\//i.test(window.navigator.userAgent);\n }\n\n isDropdownClicked(ev) {\n const target = ev.explicitOriginalTarget || document.activeElement;\n return (target.id === 'bpaac-locality-dropdown');\n }\n\n isString(val): boolean {\n return val.constructor === String;\n }\n\n loadParams(prefillData: PrefillData) {\n // this.clearWidget();\n let concatStr = '';\n if (prefillData !== null && prefillData.parameters !== null)\n {\n if (prefillData.parameters.hasOwnProperty('minLevel')) {\n this.minLevel = prefillData.parameters.minLevel;\n }\n\n /*\n if (prefillData.parameters.hasOwnProperty('unstructuredAddress') && this.isString(prefillData.parameters.unstructuredAddress)) {\n concatStr = prefillData.parameters.unstructuredAddress;\n } else {\n if (prefillData.parameters.hasOwnProperty('postalCode') && this.isString(prefillData.parameters.postalCode)) {\n concatStr = prefillData.parameters.postalCode;\n }\n if (prefillData.parameters.hasOwnProperty('municipalityName') && this.isString(prefillData.parameters.municipalityName)) {\n concatStr += ' ' + prefillData.parameters.municipalityName;\n }\n }\n */\n\n if (prefillData.parameters.hasOwnProperty('postalCode') && this.isString(prefillData.parameters.postalCode)) {\n concatStr = prefillData.parameters.postalCode;\n }\n if (prefillData.parameters.hasOwnProperty('municipalityName') && this.isString(prefillData.parameters.municipalityName)) {\n concatStr += ' ' + prefillData.parameters.municipalityName;\n }\n }\n\n return concatStr;\n }\n\n mayShowClearButton() {\n return this.searchText.length > 0;\n }\n\n mayAddTypeAhead() {\n if (this.searchText.length === 0) {\n return false;\n }\n return (/[^\\s, \\\\\\/]$/).test(this.searchText);\n }\n\n notEqualIgnoreCase(oldVal: string, newVal: string) {\n return oldVal.toLowerCase() !== newVal.toLowerCase();\n }\n\n onBlur(ev) {\n if (this.isBrowserIE() && this.isDropdownClicked(ev)) {\n this.localitySearchInput.nativeElement.focus();\n return;\n }\n if (this.skipNextBlur) {\n this.skipNextBlur = false;\n } else {\n this.collapseDropdown = true;\n this.blurEvent.emit(ADDRESSLEVEL.LOCALITY);\n }\n }\n\n onFocus() {\n this.collapseDropdown = false;\n // this.collapseDropdown = (this.prefilling === true && this.prefillData !== null)\n // ? !this.prefillData.parameters.onFocusShowSuggestionsAfterPrefill : false;\n // this.prefilling = false;\n this.skipNextBlur = false;\n this.focusEvent.emit(ADDRESSLEVEL.LOCALITY);\n }\n\n onInputClick() {\n if (this.showDebugMessageToConsole) { console.log('locality click'); }\n }\n\n onInputChange(source?: SourceType) {\n this.collapseDropdown = false;\n this.resetArrowSelectedIndex();\n if (!source) {\n this.prefilling = false;\n this.valueChanged();\n }\n this.clearSuggestionValidationMessage();\n if (this.searchText === '') {\n this.sequenceNumber += 1;\n this.consumedNumber = this.sequenceNumber;\n this.clearSuggestions();\n } else {\n this.getTopSuggestions(source);\n }\n // console.log('LibAutocompleteLocalityComponent::onInputChange - before', this.wordList);\n this.buildInputWordList();\n // console.log('LibAutocompleteLocalityComponent::onInputChange - after', this.wordList);\n }\n\n parseSingleSuggestion(suggestion: any, source: SourceType) {\n let suggestionToAdd: any;\n if (this.localeService.isLocaleFrench() && suggestion.hasOwnProperty('french')) {\n suggestionToAdd = suggestion.french;\n } else if (this.localeService.isLocaleDutch() && suggestion.hasOwnProperty('dutch')) {\n suggestionToAdd = suggestion.dutch;\n } else if (this.localeService.isLocaleGerman() && suggestion.hasOwnProperty('german')) {\n suggestionToAdd = suggestion.german;\n } else if (suggestion.hasOwnProperty('address')) {\n suggestionToAdd = suggestion.address;\n }\n if (suggestionToAdd) {\n if (suggestion.messages) {\n suggestionToAdd.messages = suggestion.messages;\n }\n this.suggestions.push(suggestionToAdd);\n if (this.messageOption === 'Y' && suggestionToAdd.hasOwnProperty('messages')) {\n for (const m of suggestionToAdd.messages) {\n const translatedMessage = this.translateMessage(m);\n if (translatedMessage !== null ) {\n m.translatedMessage = translatedMessage;\n }\n }\n }\n if (source === SourceType.SOURCE_PREFILLED)\n {\n suggestion.address = suggestionToAdd;\n this.prefillCheckForPerfectMatch(suggestion);\n }\n }\n }\n\n prefillCheckForPerfectMatch(suggestion)\n {\n const sugAddress = suggestion.address;\n if ( /*! this.prefillData.prefillMunicipalityPerfectMatchFound &&*/ sugAddress.postalCode === this.prefillData.parameters.postalCode )\n {\n if (this.showDebugMessageToConsole) {\n console.log('LOCALITY - PREFILL - checking suggestion for perfect match', this.prefillData, suggestion);\n }\n const suggestionLocality = this.transformMunicipalityInLowercaseAndWithoutDiacritics(sugAddress.localityName);\n const suggestionMunicipality = this.transformMunicipalityInLowercaseAndWithoutDiacritics(sugAddress.municipalityName);\n if (suggestionLocality === this.prefillData.prefillMunicipalityName\n || suggestionMunicipality === this.prefillData.prefillMunicipalityName)\n {\n this.prefillData.prefillMunicipalityPerfectMatchFound = true;\n this.prefillData.prefillMunicipalityPerfectMatchSuggestion = suggestion;\n this.searchText = sugAddress.postalCode + ' ' + sugAddress.localityName;\n if (this.showDebugMessageToConsole) { console.log('LOCALITY - PREFILL - Perfect match:', suggestion); }\n }\n }\n }\n\n prefillAnalyzeData()\n {\n\n if (this.prefillData.prefillMunicipalityPerfectMatchFound === true)\n {\n this.collapseDropdown = true;\n }\n this.prefillEventEmitter.emit(/*this.prefillData*/ new PrefillEvent(ADDRESSLEVEL.LOCALITY, this.prefillData) );\n }\n\n\n\n parseTopSuggestions(topSuggestions, source: SourceType) {\n if (this.showDebugMessageToConsole) { console.log('locality - parse suggestions', topSuggestions); }\n if (topSuggestions.constructor === Array) {\n // topSuggestions.forEach(this.parseSingleSuggestion.bind(this));\n for (const sug of topSuggestions)\n {\n this.parseSingleSuggestion(sug, source);\n }\n } else {\n this.parseSingleSuggestion(topSuggestions, source);\n }\n }\n\n resetArrowSelectedIndex() {\n this.selectedIndex = -1;\n }\n\n startsWithIgnoreDiacritics(value: string, prefix: string): number {\n // console.log('Searching for prefix \"' + prefix + '\" inside suggestion: ' + value);\n // tslint:disable-next-line:variable-name\n const _value = this.unicodeService.removeDiacritics( (value !== null && value !== undefined) ? value.toLowerCase() : value );\n // tslint:disable-next-line:variable-name\n const _prefix = this.unicodeService.removeDiacritics( (prefix !== null && prefix !== undefined) ? prefix.toLowerCase() : prefix);\n const start = _value.indexOf(_prefix);\n // console.log('startsWithIgnoreDiacritics: ' + start);\n return start;\n }\n\n valueChanged() {\n this.textChangeEvent.emit(this.searchText);\n }\n\n clearInput(focus?, emit: boolean = true) {\n this.clearSuggestions();\n this.bpTypeAhead = '';\n this.setSearchText('');\n this.resetArrowSelectedIndex();\n this.previousIndex = -1;\n this.lastSearchValue = '';\n this.clearSuggestionValidationMessage();\n this.clearSelectedAddress();\n this.valueChanged();\n this.clearConnectionErrorMessage();\n if (focus === true) {\n this.localitySearchInput.nativeElement.focus();\n }\n if (emit) {\n this.clearInputEventEmitter.emit(/*'LOCALITY'*/ InputNameType.LOCALITY);\n }\n }\n\n clearSearchText() {\n this.searchText = '';\n }\n\n clearSelectedAddress() {\n this.addressChanged.emit(null);\n this.addressIsValidated = false;\n }\n\n clearSuggestionValidationMessage() {\n this.addressIsValidated = false;\n this.suggestionValidationMessage = '';\n // this.messageChanged.emit(this.suggestionValidationMessage);\n this.messageChanged.emit({messageType: null, translatedMessage: this.suggestionValidationMessage});\n this.validationMessageOptions = null;\n this.validationMessageCode = null;\n }\n\n clearSuggestions() {\n this.wordList = [];\n this.suggestions = [];\n this.suggestionsWordList = [];\n // console.log('LibAutocompleteLocalityComponent::clearSuggestions', this.wordList);\n // this.suggestionMessages = [];\n }\n\n clickSuggestion(event: any, suggestion: any) {\n this.isPrefillWithNoMatch = false;\n event.preventDefault();\n this.clearTypeAhead();\n this.resetArrowSelectedIndex();\n this.setSearchText(suggestion.string);\n this.collapseDropdown = true;\n // if (suggestion.hasOwnProperty('isComplete')) {\n // this.showAddressIsValidated();\n // }\n this.addressIsValidated = true;\n this.clearSuggestions();\n this.setSelectedAddress(suggestion);\n }\n\n clearWidget() {\n this.clearSearchText();\n this.clearSuggestions();\n this.clearTypeAhead();\n this.prefillData = null;\n this.prefilling = false;\n }\n\n cursorIsOnSuggestionList() {\n return this.selectedIndex >= 0;\n }\n\n onChangedLanguage() {\n // this.placeHolderText = this.translateService.instant('locality.placeholder.input-placeholder');\n this.translateService.get('locality.placeholder.input-placeholder')\n .subscribe((res: string) => {\n // console.log('new placeholder', res);\n // => 'hello world'\n this.placeHolderText = res;\n });\n }\n\n changeSelection() {\n if (this.suggestions.length > 0) {\n this.selectionChanged = true;\n }\n }\n\n moveArrowSelectedIndexDown() {\n if (this.selectedIndex + 1 !== this.suggestions.length) {\n this.selectedIndex++;\n this.changeSelection();\n this.setSearchTextBasedOnArrowSelection(this.selectedIndex, this.selectedIndex - 1);\n }\n }\n\n moveArrowSelectedIndexUp() {\n if (this.selectedIndex - 1 !== -2) {\n this.selectedIndex--;\n this.changeSelection();\n this.setSearchTextBasedOnArrowSelection(this.selectedIndex, this.selectedIndex + 1);\n }\n }\n\n checkKeyDown(event) {\n switch (event.which) {\n // down key, increment selectedIndex\n case 40:\n event.preventDefault();\n this.moveArrowSelectedIndexDown();\n break;\n\n // up key, decrement selectedIndex\n case 38:\n event.preventDefault();\n this.moveArrowSelectedIndexUp();\n break;\n // right arrow key\n case 39:\n event.preventDefault();\n if (this.cursorIsOnSuggestionList()) {\n this.clickSuggestion(event, this.suggestions[this.selectedIndex]);\n } else {\n if (this.typeAheadWord && this.typeAheadIsShown()) {\n this.setSearchText(this.bpTypeAhead);\n this.typeAheadWord = '';\n }\n }\n break;\n // tab key\n case 9:\n if (!this.addressIsValidated) {\n event.preventDefault();\n this.selectFirstInListOfSuggesions();\n }\n break;\n\n case 46:\n if (event.ctrlKey) {\n this.clearWidget();\n }\n break;\n // enter pressed\n case 13:\n event.preventDefault();\n if (this.cursorIsOnSuggestionList()) {\n this.clickSuggestion(event, this.suggestions[this.selectedIndex]);\n } else {\n }\n break;\n\n default:\n this.clearTypeAhead();\n break;\n\n }\n }\n\n setConnectionErrorMessage() {\n this.errorCode = /*'service-unavailable'*/ ValidationMessageType.Service_Unavailable;\n // this.setValidationMessage(this.errorCode);\n this.emitTranslatedValidationMessage(ValidationMessageType.Service_Unavailable);\n }\n\n setSelectedAddress(suggestion: any) {\n this.addressChanged.emit(suggestion);\n }\n\n translateMessage(message): string {\n const messageKey = message.key;\n switch (messageKey) {\n case 'subl': {\n // args length must be 2 !\n if (message.args && message.args.length === 2 ) {\n return this.translateService.instant('locality.suggestion.message.subl', { sub: message.args[0], principal: message.args[1]});\n }\n }\n // tslint:disable-next-line:align\n break;\n }\n return null;\n }\n\n typeAheadIsShown() {\n return this.bpTypeAhead && this.bpTypeAhead.length > 0;\n }\n\n selectFirstInListOfSuggesions() {\n this.selectedIndex = 0;\n this.changeSelection();\n this.setSearchTextBasedOnArrowSelection(this.selectedIndex, this.selectedIndex - 1);\n }\n\n setSearchText(value) {\n this.searchText = value;\n }\n\n setSearchTextBasedOnArrowSelection(newVal, oldVal) {\n if (newVal === undefined || this.suggestions.length <= 0) {\n return;\n }\n if (newVal !== -1) {\n if (oldVal === -1) {\n this.lastSearchValue = this.searchText;\n }\n this.setSearchText(this.suggestions[this.selectedIndex].string);\n this.clearTypeAhead();\n } else {\n this.setSearchText(this.lastSearchValue);\n }\n }\n\n}\n","import { Component, OnInit, ViewChild, ElementRef, Input, Output, EventEmitter, SimpleChanges, AfterViewChecked, OnChanges, OnDestroy } from '@angular/core';\nimport { Subscription } from 'rxjs';\nimport { PrefilledParameters } from '../utils/prefilled-parameters';\nimport { ValidationMessageType } from '../enum/validation-message-type.enum';\nimport { AddressService } from '../services/adress.service';\nimport { LocaleService } from '../services/locale.service';\nimport { TranslateService } from '@ngx-translate/core';\nimport { UnicodeService } from '../services/unicode.service';\nimport { DomHandler } from '../utils/domhandler';\nimport { ADDRESSLEVEL } from '../enum/address-level.enum';\nimport { QueryParameters } from '../model/query-parameters.model';\nimport { PrefillData } from '../utils/prefill-data';\nimport { SourceType } from '../enum/source-type.enum';\nimport { PrefillEvent } from '../utils/preflll.event';\nimport { InputNameType } from '../enum/input-name.enum';\n\n@Component({\n selector: 'bp-street',\n templateUrl: './street.component.html',\n styleUrls: ['./street.component.scss']\n})\nexport class StreetComponent implements OnInit, AfterViewChecked, OnChanges, OnDestroy {\n\n @ViewChild('streetSearchInput', {static: false} ) streetSearchInput: ElementRef;\n @ViewChild('streetList', {static: false} ) streetList: ElementRef;\n\n private subscription: Subscription = null;\n\n // 2020-06-15\n /* @Input()\n onFocusShowSuggestionsAfterPrefill = true; */\n\n @Input() labelResourceKey = 'common.label.streetName';\n @Input() maxSuggesionCount = 5;\n @Input() visibleSuggesionCount = 5;\n @Input() sortCriteria = '';\n @Input() baseUrl: string;\n // @Input() addressParams: PrefilledParameters;\n @Input() prefillData: PrefillData;\n @Input() showDebugMessageToConsole = true;\n\n @Input() postalCode: string;\n @Input() locality: string;\n @Input() inputText: string;\n\n @Input() messageOption = 'Y';\n\n // @ts-ignore\n @Input() set inputLang(val: string) {\n this.localeService.changeLang(val);\n this.translateService.use(val).subscribe(\n (res: any) => {\n this.onChangedLanguage();\n }\n );\n }\n\n @Output() messageChanged: EventEmitter<{messageType: ValidationMessageType, translatedMessage: string}> = new EventEmitter();\n @Output() addressChanged: EventEmitter<any> = new EventEmitter();\n @Output() focusEvent: EventEmitter<any> = new EventEmitter();\n @Output() blurEvent: EventEmitter<any> = new EventEmitter();\n @Output() textChangeEvent: EventEmitter<any> = new EventEmitter();\n\n @Output() clearInputEventEmitter: EventEmitter<string> = new EventEmitter();\n\n @Output() prefillEventEmitter: EventEmitter<PrefillEvent> = new EventEmitter<PrefillEvent>();\n\n searchText: string;\n\n addressIsValidated: boolean;\n suggestionValidationMessage: string;\n suggestions: any;\n previousIndex: number;\n lastSearchValue: string;\n wordList: any;\n suggestionsWordList: any;\n bpTypeAhead: string;\n placeHolderText: string;\n skipNextBlur: boolean; // OnBlur is triggered when the user clicks suggestion/validator button\n errorCode: any;\n\n minLevel: number;\n selectedIndex: number;\n collapseDropdown: boolean;\n typeAheadWord: string;\n sequenceNumber: number;\n consumedNumber: number;\n selectionChanged: boolean;\n validationMessageCode = null;\n validationMessageOptions = null;\n\n prefilling = false;\n isPrefillWithNoMatch = false;\n\n constructor(\n private addressService: AddressService,\n private localeService: LocaleService,\n private translateService: TranslateService,\n private unicodeService: UnicodeService,\n ) { }\n\n ngOnInit(): void {\n this.searchText = '';\n // instance properties\n this.addressIsValidated = false;\n this.suggestionValidationMessage = '';\n this.suggestions = [];\n this.previousIndex = -1;\n this.lastSearchValue = '';\n this.wordList = [];\n this.suggestionsWordList = [];\n this.bpTypeAhead = '';\n this.placeHolderText = '';\n this.skipNextBlur = false; // OnBlur is triggered when the user clicks suggestion/validator button\n this.errorCode = null;\n // scope properties\n this.selectedIndex = -1;\n // properties\n this.typeAheadWord = '';\n this.collapseDropdown = false;\n this.sequenceNumber = 1;\n this.consumedNumber = 1;\n // initialization\n this.setSearchText('');\n // this.setPlaceHolderText();\n this.onChangedLanguage();\n }\n\n ngOnDestroy() {\n if (this.subscription) {\n this.subscription.unsubscribe();\n }\n }\n\n onChangedLanguage() {\n // this.placeHolderText = this.translateService.instant('street.placeholder.input-placeholder');\n this.translateService.get('street.placeholder.input-placeholder')\n .subscribe((res: string) => {\n // console.log('new placeholder', res);\n // => 'hello world'\n this.placeHolderText = res;\n });\n }\n\n ngAfterViewChecked() {\n if (this.selectionChanged) {\n const overlay: HTMLDivElement = this.streetList.nativeElement;\n setTimeout(() => {\n const listItem = DomHandler.findSingle(overlay, 'li.active');\n if (listItem) {\n DomHandler.scrollInView(overlay, listItem);\n }\n }, 1);\n this.selectionChanged = false;\n }\n }\n\n ngOnChanges(changes: SimpleChanges) {\n if (changes) {\n if (changes.hasOwnProperty('prefillData') && !changes.prefillData.firstChange) {\n this.prefilling = true;\n this.searchText = this.loadParams(changes.prefillData.currentValue);\n if (this.searchText !== '' && this.minLevel === ADDRESSLEVEL.STREET) {\n /*\n this.onInputChange('prefilled');\n this.streetSearchInput.nativeElement.focus();\n */\n /*\n this.prefilling = true;\n this.collapseDropdown = true;\n this.prefillMunicipalityName = this.transformMunicipalityInLowercaseAndWithoutDiacritics(this.addressParams.municipalityName);\n this.onInputChange(/*'prefilled'* / // this.SOURCE_PREFILLED );\n */\n this.collapseDropdown = true;\n this.prefillData.prefillStreetName\n = this.transformStreetNameInLowercaseAndWithoutDiacritics(this.prefillData.parameters.streetName);\n this.onInputChange(/*'prefilled'*/ SourceType.SOURCE_PREFILLED );\n }\n }\n\n if (changes.hasOwnProperty('inputText') && !changes.inputText.firstChange) {\n if (this.notEqualIgnoreCase(this.searchText, changes.inputText.currentValue)) {\n this.clearWidget();\n this.searchText = changes.inputText.currentValue;\n }\n }\n\n // Reset Street search bar on locality change/reset\n if (changes.hasOwnProperty('postalCode') && !changes.postalCode.firstChange && !changes.hasOwnProperty('prefillData')) {\n this.minLevel = ADDRESSLEVEL.STREET;\n if (changes.postalCode.currentValue === '') {\n this.clearWidget();\n this.valueChanged();\n }\n }\n }\n }\n\n transformStreetNameInLowercaseAndWithoutDiacritics(streetName: string): string {\n let result: string = null;\n if (streetName !== null && streetName !== undefined )\n {\n result = this.unicodeService.removeDiacritics(streetName);\n result = result.toLowerCase();\n }\n if (this.showDebugMessageToConsole) { console.log('prefill streetName', result); }\n return result;\n }\n\n onClearInputEvent(event, focus) {\n this.clearInput(focus);\n }\n\n onBlur(ev: any) {\n if (this.isBrowserIE() && this.isDropdownClicked(ev)) {\n this.streetSearchInput.nativeElement.focus();\n return;\n }\n if (this.skipNextBlur) {\n this.skipNextBlur = false;\n } else {\n this.collapseDropdown = true;\n this.blurEvent.emit(ADDRESSLEVEL.STREET);\n }\n }\n\n isBrowserIE(): boolean {\n return /msie\\s|trident\\/|edge\\//i.test(window.navigator.userAgent);\n }\n\n isDropdownClicked(ev) {\n const target = ev.explicitOriginalTarget || document.activeElement;\n return (target.id === 'bpaac-street-dropdown');\n }\n\n onFocus() {\n this.collapseDropdown = false;\n // this.collapseDropdown = (this.prefilling === true && this.prefillData !== null)\n // ? !this.prefillData.parameters.onFocusShowSuggestionsAfterPrefill : false;\n\n if (this.showDebugMessageToConsole) { console.log('street comp - onFocus', this.prefilling, this.prefillData, this.collapseDropdown); }\n\n // this.prefilling = false;\n this.skipNextBlur = false;\n this.focusEvent.emit(ADDRESSLEVEL.STREET);\n }\n\n mayShowDropdown() {\n return this.suggestions.length > 0 && !this.collapseDropdown;\n }\n\n buildInputWordList() {\n this.wordList = this.searchText.split(/[\\s, ]+/);\n // console.log('word list - street:', this.wordList);\n if (this.suggestions && this.wordList) {\n for (const sug of this.suggestions) {\n if (!sug || !sug.hasOwnProperty('string')) {\n continue;\n }\n for (const w of this.wordList) {\n const start = this.startsWithIgnoreDiacritics(sug.string as string, w as string);\n if (start >= 0) {\n const ww = sug.string.substr(start, w.length);\n // console.log('adding word:' + ww);\n // ww is a candidate to be added to the wordlist if not already present in it\n const present = this.wordList.find( (w1: string) => w1.toLowerCase() === ww.toLowerCase() );\n if (present === null || present === undefined) {\n this.wordList.push(ww);\n }\n }\n }\n }\n }\n }\n\n startsWithIgnoreDiacritics(value: string, prefix: string): number {\n // console.log('Searching for prefix \"' + prefix + '\" inside suggestion: ' + value);\n // tslint:disable-next-line:variable-name\n const _value = this.unicodeService.removeDiacritics( (value !== null && value !== undefined) ? value.toLowerCase() : value );\n // tslint:disable-next-line:variable-name\n const _prefix = this.unicodeService.removeDiacritics( (prefix !== null && prefix !== undefined) ? prefix.toLowerCase() : prefix);\n const start = _value.indexOf(_prefix);\n // console.log('startsWithIgnoreDiacritics: ' + start);\n return start;\n }\n\n mayAddTypeAhead() {\n if (this.searchText.length === 0) {\n return false;\n }\n return (/[^\\s, \\\\\\/]$/).test(this.searchText);\n }\n\n valueChanged() {\n this.textChangeEvent.emit(this.searchText);\n }\n\n buildTypeAhead(source: SourceType) {\n if (source === SourceType.SOURCE_PREFILLED) { return false; }\n if (!this.mayAddTypeAhead()) {\n return;\n }\n const searchTextWords = this.searchText.split(/[\\s, ]+/);\n const lastWord = searchTextWords[searchTextWords.length - 1];\n\n if (this.suggestions.some(function(sug) {\n if (!sug || !sug.hasOwnProperty('string')) {\n return false;\n }\n return sug.string.split(/[\\s-]+/).some(function(word) {\n if (this.stringStartsWithIgnoreDiacritics(word, lastWord)) {\n this.typeAheadWord = word;\n return true;\n }\n }.bind(this));\n }.bind(this))) {\n const appendix = this.typeAheadWord.slice(lastWord.length, this.typeAheadWord.length).toLowerCase();\n this.bpTypeAhead = this.searchText + appendix;\n }\n }\n\n stringStartsWithIgnoreDiacritics(value, prefix) {\n // tslint:disable-next-line:variable-name\n const _value = this.unicodeService.removeDiacritics( (value !== null && value !== undefined) ? value.toLowerCase() : value );\n // tslint:disable-next-line:variable-name\n const _prefix = this.unicodeService.removeDiacritics( (prefix !== null && prefix !== undefined) ? prefix.toLowerCase() : prefix);\n const start = _value.slice(0, _prefix.length).toLowerCase().indexOf(_prefix) !== -1;\n return start;\n }\n\n getTopSuggestions(source?: SourceType) {\n this.sequenceNumber += 1;\n const param = this.generateParameters();\n if (this.showDebugMessageToConsole) { console.log('STREET calling service params', param); }\n if (this.searchText) {\n this.subscription = this.addressService.getStreet(this.baseUrl, this.locality, this.postalCode, param)\n .subscribe(\n response => {\n this.handleGetStreetResponse(response, source);\n if (source === SourceType.SOURCE_PREFILLED)\n {\n this.isPrefillWithNoMatch = this.prefillData.prefillStreetPerfectMatchFound === true ? false : true;\n this.prefillAnalyzeData();\n }\n else\n {\n this.isPrefillWithNoMatch = false;\n }\n }\n ,\n () => this.handleGetStreetError()\n );\n }\n }\n\n getTextColor(): string {\n return ( this.isPrefillWithNoMatch === true ) ? 'orangered' : '';\n }\n\n loadParams(prefillData: PrefillData) {\n let concatStr = '';\n if (prefillData !== null && prefillData.parameters !== null)\n {\n if (prefillData.parameters.hasOwnProperty('minLevel')) {\n this.minLevel = prefillData.parameters.minLevel;\n }\n /*\n if (params.hasOwnProperty('unstructuredAddress') && this.isString(params.unstructuredAddress)) {\n this.valueChanged();\n }\n */\n if (prefillData.parameters.hasOwnProperty('postalCode') && this.isString(prefillData.parameters.postalCode)) {\n this.postalCode = prefillData.parameters.postalCode;\n }\n if (prefillData.parameters.hasOwnProperty('municipalityName') && this.isString(prefillData.parameters.municipalityName)) {\n this.locality = prefillData.parameters.municipalityName;\n }\n if (prefillData.parameters.hasOwnProperty('streetName')\n && this.isString(prefillData.parameters.streetName) && this.isParamsComplete()) {\n concatStr = prefillData.parameters.streetName;\n }\n }\n return concatStr;\n }\n\n isString(val): boolean {\n if (val === null || val === undefined) {\n return false;\n }\n return val.constructor === String;\n }\n\n isValid(val) {\n return this.isString(val) && val !== '';\n }\n\n isParamsComplete(): boolean {\n return this.isValid(this.postalCode) && this.isValid(this.locality);\n }\n\n generateParameters(): QueryParameters {\n const param = new QueryParameters({\n id: this.sequenceNumber,\n q: this.searchText,\n postalCode: this.postalCode,\n locality: this.locality,\n maxNumberOfSuggestions: this.maxSuggesionCount\n });\n\n if (this.sortCriteria === 'S') {\n param.sortByStreet(true);\n }\n return param;\n }\n\n handleGetStreetResponse(data: any, source?: SourceType) {\n if (data && data.response && data.response.sequenceNumber && data.response.sequenceNumber >= this.consumedNumber &&\n data.response.topSuggestions) {\n this.consumedNumber = data.response.sequenceNumber;\n this.clearSuggestions();\n this.parseTopSuggestions(data.response.topSuggestions, source);\n this.buildTypeAhead(source);\n this.clearConnectionErrorMessage();\n this.buildInputWordList();\n }\n this.collapseDropdown = (this.prefilling === true && this.prefillData !== null)\n ? !this.prefillData.parameters.onFocusShowSuggestionsAfterPrefill : false;\n }\n\n handleGetStreetError() {\n this.setConnectionErrorMessage();\n }\n\n setConnectionErrorMessage() {\n this.errorCode = /*'service-unavailable'*/ ValidationMessageType.Service_Unavailable;\n // this.setValidationMessage(this.errorCode);\n this.emitTranslatedValidationMessage(ValidationMessageType.Service_Unavailable);\n }\n\n clearConnectionErrorMessage() {\n if (this.errorCode) {\n const res = this.translateService.instant(this.errorCode);\n if (this.suggestionValidationMessage === res ) {\n this.clearSuggestionValidationMessage();\n }\n this.errorCode = null;\n }\n }\n\n parseTopSuggestions(topSuggestions, source: SourceType) {\n if (topSuggestions.constructor === Array) {\n // topSuggestions.forEach(this.parseSingleSuggestion.bind(this));\n for (const sug of topSuggestions)\n {\n this.parseSingleSuggestion(sug, source);\n }\n } else {\n this.parseSingleSuggestion(topSuggestions, source);\n }\n }\n\n parseSingleSuggestion(suggestion: any, source: SourceType) {\n let suggestionToAdd: any;\n if (this.localeService.isLocaleFrench() && suggestion.hasOwnProperty('french')) {\n suggestionToAdd = suggestion.french;\n } else if (this.localeService.isLocaleDutch() && suggestion.hasOwnProperty('dutch')) {\n suggestionToAdd = suggestion.dutch;\n } else if (this.localeService.isLocaleGerman() && suggestion.hasOwnProperty('german')) {\n suggestionToAdd = suggestion.german;\n } else if (suggestion.hasOwnProperty('address')) {\n suggestionToAdd = suggestion.address;\n }\n if (suggestionToAdd) {\n if (suggestion.messages) {\n suggestionToAdd.messages = suggestion.messages;\n }\n this.suggestions.push(suggestionToAdd);\n if (source === SourceType.SOURCE_PREFILLED)\n {\n suggestion.address = suggestionToAdd;\n this.prefillCheckForPerfectMatch(suggestion);\n }\n }\n }\n\n prefillCheckForPerfectMatch(suggestion)\n {\n if (this.showDebugMessageToConsole) {console.log('street - checking suggestion for perfect match', this.prefillData, suggestion); }\n const sugAddress = suggestion.address;\n // if (sugAddress.streetName === this.prefillData.parameters.streetName )\n const suggestionLocality = this.transformStreetNameInLowercaseAndWithoutDiacritics(sugAddress.localityName);\n const suggestionMunicipality = this.transformStreetNameInLowercaseAndWithoutDiacritics(sugAddress.municipalityName);\n if (suggestionLocality === this.prefillData.prefillMunicipalityName\n || suggestionMunicipality === this.prefillData.prefillMunicipalityName)\n {\n const suggestionStreetName = this.transformStreetNameInLowercaseAndWithoutDiacritics(sugAddress.streetName);\n // console.log('comparing street names', suggestionStreetName, this.prefillData.prefillStreetName);\n if (suggestionStreetName === this.prefillData.prefillStreetName)\n {\n this.prefillData.prefillStreetPerfectMatchFound = true;\n this.prefillData.prefillStreetPerfectMatchSuggestion = suggestion;\n this.searchText = sugAddress.streetName;\n }\n }\n }\n\n onInputChange(source?: SourceType) {\n // console.log('street onInputChange : source ', source);\n this.collapseDropdown = false;\n this.resetArrowSelectedIndex();\n if (!source) {\n this.prefilling = false;\n this.valueChanged();\n }\n this.clearSuggestionValidationMessage();\n if (this.searchText === '') {\n this.sequenceNumber += 1;\n this.consumedNumber = this.sequenceNumber;\n this.clearSuggestions();\n } else {\n this.getTopSuggestions(source);\n }\n this.buildInputWordList();\n }\n\n prefillAnalyzeData()\n {\n if (this.prefillData.prefillStreetPerfectMatchFound === true)\n {\n this.collapseDropdown = true;\n }\n this.prefillEventEmitter.emit(new PrefillEvent(ADDRESSLEVEL.STREET, this.prefillData) );\n }\n\n\n clickSuggestion(event: any, suggestion: any) {\n this.isPrefillWithNoMatch = false;\n if (this.showDebugMessageToConsole) { console.log('streetNumber::clickSuggestion', event, suggestion); }\n event?.preventDefault();\n this.clearTypeAhead();\n this.resetArrowSelectedIndex();\n this.setSearchText(suggestion.string);\n this.collapseDropdown = true;\n // if (suggestion.hasOwnProperty('isComplete')) {\n // this.showAddressIsValidated();\n // }\n this.addressIsValidated = true;\n if (event) {\n this.clearSuggestions();\n }\n this.setSelectedAddress(suggestion);\n }\n\n setSelectedAddress(suggestion: any) {\n this.addressChanged.emit(suggestion);\n }\n\n clearSelectedAddress() {\n this.addressChanged.emit(null);\n this.addressIsValidated = false;\n }\n\n emitTranslatedValidationMessage(validationMessageType: ValidationMessageType, options?: string[]) {\n // Momently, options are NOT used; so data type of these options will be reviewed once needed.\n if (validationMessageType === null || validationMessageType === undefined ) {\n console.warn('Unable to emit validation message - message key is invalid!', validationMessageType);\n return;\n }\n\n switch (validationMessageType) {\n\n case ValidationMessageType.Address_Not_Found:\n case ValidationMessageType.Address_Validated:\n case ValidationMessageType.Service_Unavailable: {\n const message = this.translateService.instant(validationMessageType);\n // this.messageChanged.emit(message);\n this.messageChanged.emit({messageType: validationMessageType, translatedMessage: message});\n }\n // tslint:disable-next-line:align\n break;\n\n default: {\n console.error('Unable to emit validation message - message key NOT supported!', validationMessageType);\n }\n // tslint:disable-next-line:align\n break;\n }\n\n }\n\n showAddressIsValidated() {\n // this.setValidationMessage('address-validated');\n this.emitTranslatedValidationMessage(ValidationMessageType.Address_Validated);\n }\n\n checkKeyDown(event) {\n switch (event.which) {\n // down key, increment selectedIndex\n case 40:\n event.preventDefault();\n this.moveArrowSelectedIndexDown();\n break;\n\n // up key, decrement selectedIndex\n case 38:\n event.preventDefault();\n this.moveArrowSelectedIndexUp();\n break;\n // right arrow key\n case 39:\n event.preventDefault();\n if (this.cursorIsOnSuggestionList()) {\n this.clickSuggestion(event, this.suggestions[this.selectedIndex]);\n } else {\n if (this.typeAheadWord && this.typeAheadIsShown()) {\n this.setSearchText(this.bpTypeAhead);\n this.typeAheadWord = '';\n }\n }\n break;\n // tab key\n case 9:\n if (!this.addressIsValidated && !event.shiftKey) {\n event.preventDefault();\n this.selectFirstInListOfSuggesions();\n }\n break;\n\n case 46:\n if (event.ctrlKey) {\n this.clearWidget();\n }\n break;\n // enter pressed\n case 13:\n event.preventDefault();\n if (this.cursorIsOnSuggestionList()) {\n this.clickSuggestion(event, this.suggestions[this.selectedIndex]);\n } else {\n }\n break;\n\n default:\n this.clearTypeAhead();\n break;\n\n }\n }\n\n clearWidget() {\n this.addressIsValidated = false;\n this.clearSearchText();\n this.clearSuggestions();\n this.clearTypeAhead();\n this.prefillData = null;\n this.prefilling = false;\n }\n\n clearSearchText() {\n this.searchText = '';\n }\n\n typeAheadIsShown() {\n return this.bpTypeAhead && this.bpTypeAhead.length > 0;\n }\n\n resetArrowSelectedIndex() {\n this.selectedIndex = -1;\n }\n\n moveArrowSelectedIndexDown() {\n if (this.selectedIndex + 1 !== this.suggestions.length) {\n this.selectedIndex++;\n this.changeSelection();\n this.setSearchTextBasedOnArrowSelection(this.selectedIndex, this.selectedIndex - 1);\n }\n }\n\n moveArrowSelectedIndexUp() {\n if (this.selectedIndex - 1 !== -2) {\n this.selectedIndex--;\n this.changeSelection();\n this.setSearchTextBasedOnArrowSelection(this.selectedIndex, this.selectedIndex + 1);\n }\n }\n\n cursorIsOnSuggestionList() {\n return this.selectedIndex >= 0;\n }\n\n setSearchTextBasedOnArrowSelection(newVal, oldVal) {\n if (newVal === undefined || this.suggestions.length <= 0) {\n return;\n }\n if (newVal !== -1) {\n if (oldVal === -1) {\n this.lastSearchValue = this.searchText;\n }\n this.setSearchText(this.suggestions[this.selectedIndex].string);\n this.clearTypeAhead();\n } else {\n this.setSearchText(this.lastSearchValue);\n }\n }\n\n mayShowClearButton() {\n return this.searchText.length > 0;\n }\n\n clearInput(focus?, emit: boolean = true) {\n // console.warn('street clearInput called ...', focus, emit);\n this.clearWidget();\n this.resetArrowSelectedIndex();\n this.previousIndex = -1;\n this.lastSearchValue = '';\n this.clearSuggestionValidationMessage();\n this.valueChanged();\n this.clearConnectionErrorMessage();\n if (focus === true) {\n // console.warn('street clearInput - set focus !!!', focus);\n this.streetSearchInput.nativeElement.focus();\n }\n if (emit) {\n this.clearInputEventEmitter.emit(/*'STREET'*/ InputNameType.STREET);\n }\n }\n\n clearSuggestions() {\n this.wordList = [];\n this.suggestions = [];\n this.suggestionsWordList = [];\n }\n\n clearTypeAhead() {\n this.bpTypeAhead = '';\n }\n\n clearSuggestionValidationMessage() {\n this.suggestionValidationMessage = '';\n this.addressIsValidated = false;\n // this.messageChanged.emit(this.suggestionValidationMessage);\n this.messageChanged.emit({messageType: null, translatedMessage: this.suggestionValidationMessage});\n this.validationMessageOptions = null;\n this.validationMessageCode = null;\n }\n\n setSearchText(value) {\n this.searchText = value;\n }\n\n selectFirstInListOfSuggesions() {\n this.selectedIndex = 0;\n this.changeSelection();\n this.setSearchTextBasedOnArrowSelection(this.selectedIndex, this.selectedIndex - 1);\n }\n\n changeSelection() {\n if (this.suggestions.length > 0) {\n this.selectionChanged = true;\n }\n }\n\n suggestionMouseLeave() {\n this.selectedIndex = -1;\n }\n\n notEqualIgnoreCase(oldVal: string, newVal: string) {\n return oldVal.toLowerCase() !== newVal.toLowerCase();\n }\n\n showAddressNotFoundMessage() {\n // this.setValidationMessage('address-not-found');\n this.emitTranslatedValidationMessage(ValidationMessageType.Address_Not_Found);\n }\n\n isDisabled() {\n return (this.locality === '' || this.postalCode === '' || this.minLevel > ADDRESSLEVEL.STREET);\n }\n\n onInputClick() {\n if (this.showDebugMessageToConsole) { console.log('street click'); }\n this.prefilling = false;\n this.collapseDropdown = false;\n }\n\n}\n","import { Component, OnInit, AfterViewChecked, OnChanges, OnDestroy, ElementRef, ViewChild, Input, Output, EventEmitter, SimpleChanges } from '@angular/core';\nimport { Subscription } from 'rxjs';\nimport { PrefilledParameters } from '../utils/prefilled-parameters';\nimport { ValidationMessageType } from '../enum/validation-message-type.enum';\nimport { AddressService } from '../services/adress.service';\nimport { LocaleService } from '../services/locale.service';\nimport { UnicodeService } from '../services/unicode.service';\nimport { TranslateService } from '@ngx-translate/core';\nimport { DomHandler } from '../utils/domhandler';\nimport { ADDRESSLEVEL } from '../enum/address-level.enum';\nimport { QueryParameters } from '../model/query-parameters.model';\nimport { PrefillData } from '../utils/prefill-data';\nimport { SourceType } from '../enum/source-type.enum';\nimport { PrefillEvent } from '../utils/preflll.event';\nimport { InputNameType } from '../enum/input-name.enum';\n\n@Component({\n selector: 'bp-street-number',\n templateUrl: './street-number.component.html',\n styleUrls: ['./street-number.component.scss']\n})\nexport class StreetNumberComponent implements OnInit, AfterViewChecked, OnChanges, OnDestroy {\n\n\n @ViewChild('streetNumberSearchInput', {static: false} ) streetNumberSearchInput: ElementRef;\n @ViewChild('streetNumberList', {static: false} ) streetNumberList: ElementRef;\n\n private subscription: Subscription;\n\n // 2020-06-15\n /* @Input()\n onFocusShowSuggestionsAfterPrefill = true; */\n @Input() prefillData: PrefillData;\n @Input() showDebugMessageToConsole = true;\n\n @Input() labelResourceKey = 'common.label.streetNumber';\n @Input() maxSuggesionCount = 5;\n @Input() visibleSuggesionCount = 5;\n @Input() sortCriteria = '';\n @Input() baseUrl: string;\n @Input() addressParams: PrefilledParameters;\n @Input() postalCode: string;\n @Input() locality: string;\n @Input() streetName: string;\n @Input() notInListAllowed: boolean;\n @Input() selectedAddress;\n\n // @ts-ignore\n @Input() set inputLang(val: string) {\n this.localeService.changeLang(val);\n this.translateService.use(val).subscribe(\n (res: any) => {\n this.onChangedLanguage();\n }\n );\n }\n @Input() messageOption = 'Y';\n @Input() inputText: string;\n\n @Output() messageChanged: EventEmitter<{messageType: ValidationMessageType, translatedMessage: string}> = new EventEmitter();\n @Output() addressChanged: EventEmitter<any> = new EventEmitter();\n @Output() focusEvent: EventEmitter<any> = new EventEmitter();\n @Output() blurEvent: EventEmitter<any> = new EventEmitter();\n @Output() textChangeEvent: EventEmitter<any> = new EventEmitter();\n @Output() emptyResponseEvent: EventEmitter<any> = new EventEmitter();\n\n\n @Output() clearInputEventEmitter: EventEmitter<string> = new EventEmitter();\n\n @Output() prefillEventEmitter: EventEmitter<PrefillEvent> = new EventEmitter<PrefillEvent>();\n\n searchText: string;\n\n addressIsValidated = false;\n addressIsComplete = false;\n suggestionValidationMessage: string;\n suggestions: any;\n previousIndex: number;\n lastSearchValue: string;\n wordList: any;\n suggestionsWordList: any;\n bpTypeAhead: string;\n placeHolderText: string;\n skipNextBlur: boolean; // OnBlur is triggered when the user clicks suggestion/validator button\n errorCode: any;\n\n minLevel: number;\n selectedIndex: number;\n collapseDropdown: boolean;\n typeAheadWord: string;\n sequenceNumber: number;\n consumedNumber: number;\n selectionChanged: boolean;\n validationMessageCode = null;\n validationMessageOptions = null;\n emptyResponseText: string;\n emptyResponse: boolean;\n\n prefilling = false;\n isPrefillWithNoMatch = false;\n\n constructor(\n private addressService: AddressService,\n private localeService: LocaleService,\n private translateService: TranslateService,\n private unicodeService: UnicodeService,\n ) { }\n\n ngOnInit() {\n this.searchText = '';\n // instance properties\n this.addressIsValidated = false;\n this.addressIsComplete = false;\n this.suggestionValidationMessage = '';\n this.suggestions = [];\n this.previousIndex = -1;\n this.lastSearchValue = '';\n this.wordList = [];\n this.suggestionsWordList = [];\n this.bpTypeAhead = '';\n this.placeHolderText = '';\n this.skipNextBlur = false; // OnBlur is triggered when the user clicks suggestion/validator button\n this.errorCode = null;\n // scope properties\n this.selectedIndex = -1;\n // properties\n this.typeAheadWord = '';\n this.collapseDropdown = true;\n this.sequenceNumber = 1;\n this.consumedNumber = 1;\n // initialization\n this.setSearchText('');\n // this.setPlaceHolderText();\n this.setEmptyResponseText();\n this.emptyResponse = true;\n this.onChangedLanguage();\n }\n\n ngOnDestroy() {\n if (this.subscription) {\n this.subscription.unsubscribe();\n }\n }\n\n\n onChangedLanguage() {\n // this.placeHolderText = this.translateService.instant('streetNumber.placeholder.input-placeholder');\n this.translateService.get('streetNumber.placeholder.input-placeholder')\n .subscribe((res: string) => {\n // console.log('new placeholder', res);\n // => 'hello world'\n this.placeHolderText = res;\n this.setEmptyResponseText();\n });\n }\n\n ngAfterViewChecked() {\n if (this.selectionChanged) {\n const overlay: HTMLDivElement = this.streetNumberList.nativeElement;\n setTimeout(() => {\n const listItem = DomHandler.findSingle(overlay, 'li.active');\n if (listItem) {\n DomHandler.scrollInView(overlay, listItem);\n }\n }, 1);\n this.selectionChanged = false;\n }\n }\n\n ngOnChanges(changes: SimpleChanges) {\n if (changes) {\n\n if (changes.hasOwnProperty('streetName')\n && !changes.streetName.firstChange\n && !changes.hasOwnProperty('prefillData') && ! this.prefilling ) {\n this.minLevel = ADDRESSLEVEL.STREET_NUMBER;\n // this.addressIsComplete = false;\n if (this.showDebugMessageToConsole) {\n console.warn('street number - ngOnchanges - streetName changes detection');\n }\n if (changes.streetName.currentValue === '') {\n this.clearWidget();\n this.valueChanged();\n }\n }\n\n if (changes.hasOwnProperty('inputText') && !changes.inputText.firstChange && ! this.prefilling ) {\n if (this.showDebugMessageToConsole) {\n console.warn('street number - ngOnchanges - inputText changes detection', this.searchText, changes.inputText.currentValue);\n }\n if (this.notEqualIgnoreCase(this.searchText, changes.inputText.currentValue)) {\n if (this.showDebugMessageToConsole) {\n console.warn('street number - ngOnchanges - inputText changes detection -> calling clearWidget() !');\n }\n this.clearWidget();\n this.searchText = changes.inputText.currentValue;\n }\n }\n\n if (changes.hasOwnProperty('prefillData') && !changes.prefillData.firstChange) {\n this.prefilling = true;\n this.addressIsComplete = false;\n // console.log('streetNumber::ngOnChanges', this.addressIsComplete);\n this.searchText = this.loadParams(changes.prefillData.currentValue);\n if (this.searchText !== '' && this.minLevel === ADDRESSLEVEL.STREET_NUMBER) {\n /*\n this.onInputChange(/*'prefilled'* / SourceType.SOURCE_PREFILLED);\n this.streetNumberSearchInput.nativeElement.focus();\n */\n\n this.collapseDropdown = true;\n this.prefillData.prefillStreetNumber\n = this.transformStreetNumberInLowercaseAndWithoutDiacritics(this.prefillData.parameters.streetNumber);\n this.onInputChange(/*'prefilled'*/ SourceType.SOURCE_PREFILLED );\n }\n // console.log('streetNumber::ngOnChanges -- after calculations', this.addressIsComplete);\n }\n\n }\n }\n\n transformStreetNumberInLowercaseAndWithoutDiacritics(streetNumber: string): string {\n let result: string = null;\n if (streetNumber !== null && streetNumber !== undefined )\n {\n result = this.unicodeService.removeDiacritics(streetNumber);\n result = result.toLowerCase();\n }\n // console.log('Transformed street number:', result);\n return result;\n }\n\n notEqualIgnoreCase(oldVal: string, newVal: string) {\n return oldVal.toLowerCase() !== newVal.toLowerCase();\n }\n\n setEmptyResponseText() {\n this.emptyResponseText = this.translateService.instant('streetNumber.message.not-in-list');\n }\n\n /*\n onClearInputEvent(event, focus) {\n this.clearInput(focus);\n }\n */\n\n /*\n retranslate() {\n this.setPlaceHolderText();\n this.setEmptyResponseText();\n if (this.errorCode) {\n this.setValidationMessage(this.errorCode);\n } else {\n if (this.validationMessageCode) {\n this.setValidationMessage(this.validationMessageCode, this.validationMessageOptions, true);\n }\n }\n }\n */\n\n onBlur(ev) {\n if (this.isBrowserIE() && this.isDropdownClicked(ev)) {\n this.streetNumberSearchInput.nativeElement.focus();\n return;\n }\n if (this.skipNextBlur) {\n this.skipNextBlur = false;\n } else {\n this.collapseDropdown = true;\n this.blurEvent.emit(ADDRESSLEVEL.STREET_NUMBER);\n }\n }\n\n isBrowserIE(): boolean {\n return /msie\\s|trident\\/|edge\\//i.test(window.navigator.userAgent);\n }\n\n isDropdownClicked(ev) {\n const target = ev.explicitOriginalTarget || document.activeElement;\n return (target.id === 'bpaac-streetnumber-dropdown');\n }\n\n onFocus() {\n this.collapseDropdown = false;\n // this.collapseDropdown = (this.prefilling === true && this.prefillData !== null)\n // ? !this.prefillData.parameters.onFocusShowSuggestionsAfterPrefill : false;\n // this.prefilling = false;\n this.skipNextBlur = false;\n this.focusEvent.emit(ADDRESSLEVEL.STREET_NUMBER);\n }\n\n valueChanged() {\n // console.warn('street-number::valueChanged DISABLED');\n this.textChangeEvent.emit(this.searchText);\n }\n\n mayShowDropdown() {\n return this.suggestions.length > 0 && !this.collapseDropdown;\n }\n\n buildInputWordList() {\n this.wordList = this.searchText.split(/[\\s, ]+/);\n }\n\n mayAddTypeAhead() {\n if (this.searchText.length === 0) {\n return false;\n }\n return (/[^\\s, \\\\\\/]$/).test(this.searchText);\n }\n\n buildTypeAhead(source: SourceType) {\n if (source === SourceType.SOURCE_PREFILLED) { return false; }\n if (!this.mayAddTypeAhead()) {\n return;\n }\n const searchTextWords = this.searchText.split(/[\\s, ]+/);\n const lastWord = searchTextWords[searchTextWords.length - 1];\n\n if (this.suggestions.some(function(sug) {\n if (!sug || !sug.hasOwnProperty('string')) {\n return false;\n }\n return sug.string.split(/[\\s-]+/).some(function(word) {\n if (this.stringStartsWithIgnoreDiacritics(word, lastWord)) {\n this.typeAheadWord = word;\n return true;\n }\n }.bind(this));\n }.bind(this))) {\n const appendix = this.typeAheadWord.slice(lastWord.length, this.typeAheadWord.length).toLowerCase();\n this.bpTypeAhead = this.searchText + appendix;\n }\n }\n\n stringStartsWithIgnoreDiacritics(value, prefix) {\n value = (value !== null && value !== undefined) ? value.toLowerCase() : value;\n prefix = (prefix !== null && prefix !== undefined) ? prefix.toLowerCase() : prefix;\n return this.unicodeService.removeDiacritics(value).slice(0, prefix.length)\n .toLowerCase().indexOf(this.unicodeService.removeDiacritics(prefix)) !== -1;\n }\n\n getBackgroundColor(): string {\n return !this.isParamsComplete() ? 'lightgrey' : '';\n }\n\n getTopSuggestions(source?: SourceType) {\n this.sequenceNumber += 1;\n const param = this.generateParameters();\n if (this.showDebugMessageToConsole) { console.log('STREET-NUMBER calling service params', param); }\n if (this.searchText) {\n this.subscription = this.addressService.getStreet(this.baseUrl, this.locality, this.postalCode, param)\n .subscribe(\n response => {\n if (this.showDebugMessageToConsole) { console.log('STREET-NUMBER service response', response); }\n this.handleGetStreetResponse(response, source);\n // console.log('street number service response', response, source);\n if (source === SourceType.SOURCE_PREFILLED)\n {\n /*\n if (this.prefillData.prefillStreetNumberPerfectMatchFound !== true )\n {\n this.searchText = this.prefillData.prefillStreetNumber;\n }\n */\n // this.addressIsComplete = this.prefillData.prefillStreetNumberPerfectMatchFound === true ? true : false;\n this.isPrefillWithNoMatch = this.prefillData.prefillStreetNumberPerfectMatchFound === true ? false : true;\n this.prefillAnalyzeData();\n }\n else\n {\n this.isPrefillWithNoMatch = false;\n }\n }\n ,\n () => this.handleGetStreetError()\n );\n }\n }\n\n getTextColor(): string {\n return ( this.isPrefillWithNoMatch === true ) ? 'orangered' : '';\n }\n\n prefillAnalyzeData()\n {\n if (this.prefillData.prefillStreetNumberPerfectMatchFound === true)\n {\n this.collapseDropdown = true;\n }\n this.prefillEventEmitter.emit(new PrefillEvent(ADDRESSLEVEL.STREET_NUMBER, this.prefillData) );\n }\n\n loadParams(prefillData: PrefillData) {\n let concatStr = '';\n if (prefillData !== null && prefillData.parameters !== null)\n {\n if (prefillData.parameters.hasOwnProperty('minLevel')) {\n this.minLevel = prefillData.parameters.minLevel;\n }\n if (prefillData.parameters.hasOwnProperty('postalCode') && this.isString(prefillData.parameters.postalCode)) {\n this.postalCode = prefillData.parameters.postalCode;\n }\n if (prefillData.parameters.hasOwnProperty('municipalityName') && this.isString(prefillData.parameters.municipalityName)) {\n this.locality = prefillData.parameters.municipalityName;\n }\n if (prefillData.parameters.hasOwnProperty('streetName') && this.isString(prefillData.parameters.streetName)) {\n this.streetName = prefillData.parameters.streetName;\n }\n if (prefillData.parameters.hasOwnProperty('streetNumber')\n && this.isString(prefillData.parameters.streetNumber) && this.isParamsComplete()) {\n concatStr = prefillData.parameters.streetNumber;\n }\n }\n return concatStr;\n }\n\n isString(val): boolean {\n if (val === null || val === undefined) {\n return false;\n }\n return val.constructor === String;\n }\n\n isValid(val) {\n return this.isString(val) && val !== '';\n }\n\n isParamsComplete(): boolean {\n/* if (this.showDebugMessageToConsole) {\n console.log('street-number::isParamsComplete', this.postalCode, this.locality, this.streetName);\n } */\n return this.isValid(this.postalCode) && this.isValid(this.locality) && this.isValid(this.streetName);\n }\n\n generateParameters(): QueryParameters {\n const param = new QueryParameters({\n id: this.sequenceNumber,\n q: this.searchText,\n postalCode: this.postalCode,\n locality: this.locality,\n street: this.streetName,\n maxNumberOfSuggestions: this.maxSuggesionCount\n });\n\n if (this.sortCriteria === 'S') {\n param.sortByStreetNb(true);\n }\n return param;\n }\n\n handleGetStreetResponse(data: any, source?: SourceType) {\n if (data && data.response && data.response.sequenceNumber && data.response.sequenceNumber >= this.consumedNumber &&\n data.response.topSuggestions) {\n this.consumedNumber = data.response.sequenceNumber;\n this.clearSuggestions();\n this.parseTopSuggestions(data.response.topSuggestions, source);\n this.buildTypeAhead(source);\n this.clearConnectionErrorMessage();\n this.buildInputWordList();\n }\n this.collapseDropdown = (this.prefilling === true && this.prefillData !== null)\n ? !this.prefillData.parameters.onFocusShowSuggestionsAfterPrefill : false;\n }\n\n handleGetStreetError() {\n this.setConnectionErrorMessage();\n }\n\n setConnectionErrorMessage() {\n this.errorCode = 'service-unavailable';\n // this.setValidationMessage(this.errorCode);\n this.emitTranslatedValidationMessage(ValidationMessageType.Service_Unavailable);\n }\n\n clearConnectionErrorMessage() {\n if (this.errorCode) {\n const res = this.translateService.instant(this.errorCode);\n if (this.suggestionValidationMessage === res ) {\n this.clearSuggestionValidationMessage();\n }\n this.errorCode = null;\n }\n }\n\n parseTopSuggestions(topSuggestions, source?: SourceType) {\n if (topSuggestions.constructor === Array) {\n // topSuggestions.forEach(this.parseSingleSuggestion.bind(this));\n for (const sug of topSuggestions)\n {\n this.parseSingleSuggestion(sug, source);\n }\n\n if (!source)\n {\n if ((topSuggestions.length === 0 || this.emptyResponse) && this.notInListAllowed) {\n this.suggestions.push({string: this.searchText, 'not-in-list': true});\n }\n }\n else\n {\n // If prefilling, then check if no match for a non-empty boxNumber\n // If this is the case, simulate the selection of the 'not-in-list' suggestion\n if (this.prefilling && this.notInListAllowed\n && this.prefillData.prefillStreetNumberPerfectMatchFound === false\n && this.prefillData.prefillStreetNumber !== null\n && this.prefillData.prefillStreetNumber !== undefined\n && this.prefillData.prefillStreetNumber.length > 0)\n {\n // const notInListSuggestion = {string: this.searchText, 'not-in-list': true};\n const suggestion = this.prefillBuildNotInListSuggestion();\n if (this.showDebugMessageToConsole) { console.log('STREET NUMBER - PREFILL NOT IN LIST SUGGESTION:', suggestion); }\n this.prefillCheckForPerfectMatch(suggestion);\n }\n\n }\n } else {\n this.parseSingleSuggestion(topSuggestions, source);\n }\n }\n\n prefillBuildNotInListSuggestion(): any {\n const notInListSuggestion = {string: this.searchText, 'not-in-list': true};\n const streetSuggestion = this.prefillData.prefillStreetPerfectMatchSuggestion;\n const combined = {...streetSuggestion.address, ...notInListSuggestion};\n delete combined.mailBoxid;\n delete combined.suffixId;\n // combined.boxNumber = combined.string;\n combined.houseNumber = combined.string;\n combined.searchBarString = combined.string;\n let isComplete = false;\n if (this.prefillData.parameters.hasOwnProperty('boxNumber') )\n {\n const bn = this.prefillData.parameters.boxNumber;\n isComplete = (bn !== null && bn !== undefined && bn.length > 0 ) ? false : true;\n }\n else\n {\n isComplete = true;\n }\n if (isComplete === true) {\n combined.isComplete = isComplete;\n }\n streetSuggestion.address = combined;\n return streetSuggestion;\n }\n\n parseSingleSuggestion(suggestion: any, source: SourceType) {\n let suggestionToAdd: any;\n if (this.localeService.isLocaleFrench() && suggestion.hasOwnProperty('french')) {\n suggestionToAdd = suggestion.french;\n } else if (this.localeService.isLocaleDutch() && suggestion.hasOwnProperty('dutch')) {\n suggestionToAdd = suggestion.dutch;\n } else if (this.localeService.isLocaleGerman() && suggestion.hasOwnProperty('german')) {\n suggestionToAdd = suggestion.german;\n } else if (suggestion.hasOwnProperty('address')) {\n suggestionToAdd = suggestion.address;\n }\n if (suggestionToAdd) {\n if (suggestion.messages) {\n suggestionToAdd.messages = suggestion.messages;\n }\n if (suggestionToAdd.houseNumber === this.searchText) {\n this.emptyResponse = false;\n }\n this.suggestions.push(suggestionToAdd);\n if (this.showDebugMessageToConsole) {\n console.log('streetNumber - add suggestion to list', suggestionToAdd);\n }\n if (source === SourceType.SOURCE_PREFILLED)\n {\n suggestion.address = suggestionToAdd;\n this.prefillCheckForPerfectMatch(suggestion);\n }\n }\n }\n\n prefillCheckForPerfectMatch(suggestion)\n {\n if ( !this.addressIsComplete )\n {\n if (this.showDebugMessageToConsole) {\n console.log('streetNumber - checking suggestion for perfect match', this.prefillData, suggestion);\n }\n const sugAddress = suggestion.address;\n const suggestionStreetNumber = this.transformStreetNumberInLowercaseAndWithoutDiacritics('' + sugAddress.houseNumber);\n if (this.showDebugMessageToConsole) {\n console.log('comparing street numbers', suggestionStreetNumber, this.prefillData.prefillStreetNumber);\n }\n if (suggestionStreetNumber === ('' + this.prefillData.prefillStreetNumber) )\n {\n this.prefillData.prefillStreetNumberPerfectMatchFound = true;\n this.prefillData.prefillStreetNumberPerfectMatchSuggestion = suggestion;\n this.searchText = sugAddress.houseNumber;\n if (sugAddress.hasOwnProperty('isComplete') && sugAddress.isComplete === true ) {\n this.clickSuggestion(null, sugAddress);\n this.addressIsComplete = true;\n // console.log('streetNumber::prefillCheckForPerfectMatch', this.addressIsComplete);\n if (this.showDebugMessageToConsole && this.addressIsComplete === true) {\n console.log('ADDRESS COMPLETE ON STREET NUMBER !');\n }\n }\n }\n }\n else\n {\n if (this.showDebugMessageToConsole) {\n console.log('streetNumber::prefillCheckForPerfectMatch - Address complete, skipping suggestion check', suggestion);\n }\n }\n }\n\n onInputChange(source?: SourceType) {\n if (this.showDebugMessageToConsole) {\n console.log('streetNumber::onInputChange', source);\n }\n this.collapseDropdown = false;\n this.addressIsValidated = false;\n this.addressIsComplete = false;\n // console.log('streetNumber::onInputChange', this.addressIsComplete);\n this.emptyResponse = true;\n this.resetArrowSelectedIndex();\n if (!source) {\n this.prefilling = false;\n if (this.showDebugMessageToConsole) {\n console.log('streetNumber::onInputChange -> calling valueChanged');\n }\n this.valueChanged();\n }\n this.clearSuggestionValidationMessage();\n if (this.searchText === '') {\n this.sequenceNumber += 1;\n this.consumedNumber = this.sequenceNumber;\n this.clearSuggestions();\n } else {\n this.getTopSuggestions(source);\n }\n this.buildInputWordList();\n }\n\n clickSuggestion(event: any, suggestion?: any) {\n this.isPrefillWithNoMatch = false;\n if (this.showDebugMessageToConsole) { console.log('streetNumber::clickSuggestion', event, suggestion); }\n event?.preventDefault();\n if (suggestion) {\n this.clearTypeAhead();\n this.resetArrowSelectedIndex();\n if (suggestion.string) {\n this.setSearchText(suggestion.string);\n }\n this.collapseDropdown = true;\n\n const notInList = suggestion['not-in-list'];\n const isNotInList = notInList !== null && notInList !== undefined && notInList === true;\n\n if (suggestion['not-in-list']) {\n suggestion = this.modifySelectedAddress(suggestion);\n if (this.showDebugMessageToConsole) { console.log('streetNumber::clickSuggestion - NOT-IN-LIST', event, suggestion); }\n }\n if (suggestion.hasOwnProperty('isComplete') && suggestion.isComplete === true && !isNotInList ) {\n this.addressIsComplete = true;\n // this.notifyAddressIsValidated();\n }\n this.addressIsValidated = true;\n if (event) {\n this.clearSuggestions();\n }\n this.setSelectedAddress(suggestion);\n }\n }\n\n modifySelectedAddress(suggestion: object) {\n if (this.showDebugMessageToConsole) {\n console.log('street number - combine selectedAddress with not in list', suggestion, this.selectedAddress);\n }\n const combined = {...this.selectedAddress, ...suggestion};\n delete combined.latitude;\n delete combined.longitude;\n delete combined.mailboxId;\n delete combined.pdpId;\n delete combined.suffixId;\n delete combined.pdpId;\n delete combined.pdpId;\n combined.houseNumber = combined.string;\n combined.searchBarString = combined.string;\n combined.isComplete = true;\n return combined;\n }\n\n setSelectedAddress(suggestion: any) {\n // console.log('street number - emit suggestion', suggestion);\n const notInList = suggestion['not-in-list'];\n const isNotInList = notInList !== null && notInList !== undefined && notInList === true;\n this.addressIsComplete = (suggestion.hasOwnProperty('isComplete') && suggestion.isComplete === true && !isNotInList) ? true : false;\n this.addressChanged.emit(suggestion);\n }\n\n clearSelectedAddress() {\n this.addressChanged.emit(null);\n this.addressIsValidated = false;\n this.addressIsComplete = false;\n // console.log('streetNumber::clearSelectedAddress', this.addressIsComplete);\n }\n\n emitTranslatedValidationMessage(validationMessageType: ValidationMessageType, options?: string[]) {\n // Momently, options are NOT used; so data type of these options will be reviewed once needed.\n if (validationMessageType === null || validationMessageType === undefined ) {\n console.warn('Unable to emit validation message - message key is invalid!', validationMessageType);\n return;\n }\n\n switch (validationMessageType) {\n\n case ValidationMessageType.Address_Not_Found:\n case ValidationMessageType.Address_Validated:\n case ValidationMessageType.Service_Unavailable: {\n const message = this.translateService.instant(validationMessageType);\n // this.messageChanged.emit(message);\n this.messageChanged.emit({messageType: validationMessageType, translatedMessage: message});\n }\n // tslint:disable-next-line:align\n break;\n\n default: {\n console.error('Unable to emit validation message - message key NOT supported!', validationMessageType);\n }\n // tslint:disable-next-line:align\n break;\n }\n\n }\n\n notifyAddressIsValidated() {\n this.addressIsComplete = true;\n // console.log('streetNumber::notifyAddressIsValidated', this.addressIsComplete);\n // this.setValidationMessage('address-validated');\n this.emitTranslatedValidationMessage(ValidationMessageType.Address_Validated);\n }\n\n checkKeyDown(event) {\n switch (event.which) {\n // down key, increment selectedIndex\n case 40:\n event.preventDefault();\n this.moveArrowSelectedIndexDown();\n break;\n\n // up key, decrement selectedIndex\n case 38:\n event.preventDefault();\n this.moveArrowSelectedIndexUp();\n break;\n // right arrow key\n case 39:\n event.preventDefault();\n if (this.cursorIsOnSuggestionList()) {\n this.clickSuggestion(event, this.suggestions[this.selectedIndex]);\n } else {\n if (this.typeAheadWord && this.typeAheadIsShown()) {\n this.setSearchText(this.bpTypeAhead);\n this.typeAheadWord = '';\n }\n }\n break;\n // tab key\n case 9:\n if (!this.addressIsValidated && !event.shiftKey) {\n event.preventDefault();\n this.selectFirstInListOfSuggesions();\n }\n break;\n\n case 46:\n if (event.ctrlKey) {\n this.clearWidget();\n }\n break;\n // enter pressed\n case 13:\n event.preventDefault();\n if (this.cursorIsOnSuggestionList()) {\n this.clickSuggestion(event, this.suggestions[this.selectedIndex]);\n } else {\n }\n break;\n\n default:\n this.clearTypeAhead();\n break;\n\n }\n }\n\n clearWidget() {\n if (this.showDebugMessageToConsole) { console.log('street number:: clearWidget'); }\n this.addressIsValidated = false;\n this.addressIsComplete = false;\n // console.log('streetNumber::clearWidget', this.addressIsComplete);\n this.clearSearchText();\n this.clearSuggestions();\n this.clearTypeAhead();\n this.prefillData = null;\n // this.prefilling = false;\n }\n\n clearSearchText() {\n this.searchText = '';\n }\n\n typeAheadIsShown() {\n return this.bpTypeAhead && this.bpTypeAhead.length > 0;\n }\n\n resetArrowSelectedIndex() {\n this.selectedIndex = -1;\n }\n\n moveArrowSelectedIndexDown() {\n if (this.selectedIndex + 1 !== this.suggestions.length) {\n this.selectedIndex++;\n this.changeSelection();\n this.setSearchTextBasedOnArrowSelection(this.selectedIndex, this.selectedIndex - 1);\n }\n }\n\n moveArrowSelectedIndexUp() {\n if (this.selectedIndex - 1 !== -2) {\n this.selectedIndex--;\n this.changeSelection();\n this.setSearchTextBasedOnArrowSelection(this.selectedIndex, this.selectedIndex + 1);\n }\n }\n\n cursorIsOnSuggestionList() {\n return this.selectedIndex >= 0;\n }\n\n setSearchTextBasedOnArrowSelection(newVal, oldVal) {\n if (newVal === undefined || this.suggestions.length <= 0) {\n return;\n }\n if (newVal !== -1) {\n if (oldVal === -1) {\n this.lastSearchValue = this.searchText;\n }\n this.setSearchText(this.suggestions[this.selectedIndex].string);\n this.clearTypeAhead();\n } else {\n this.setSearchText(this.lastSearchValue);\n }\n }\n\n mayShowClearButton() {\n return this.searchText && this.searchText.length > 0;\n }\n\n onClearStreetNumberInput(focus: boolean, emit: boolean = true) {\n // console.warn('street number :: clearInput');\n this.clearWidget();\n this.resetArrowSelectedIndex();\n this.previousIndex = -1;\n this.lastSearchValue = '';\n this.clearSuggestionValidationMessage();\n this.valueChanged();\n this.clearConnectionErrorMessage();\n if (focus === true) {\n this.streetNumberSearchInput.nativeElement.focus();\n }\n // this.addressChanged.emit(null);\n if (emit) {\n this.clearInputEventEmitter.emit(/*'STREET_NUMBER'*/ InputNameType.STREET_NUMBER);\n }\n }\n /*\n clearInput(focus?) {\n console.warn('street number :: clearInput');\n this.clearWidget();\n this.resetArrowSelectedIndex();\n this.previousIndex = -1;\n this.lastSearchValue = '';\n this.clearSuggestionValidationMessage();\n this.valueChanged();\n this.clearConnectionErrorMessage();\n if (focus) {\n this.streetNumberSearchInput.nativeElement.focus();\n }\n this.addressChanged.emit(null);\n }\n */\n\n clearSuggestions() {\n this.wordList = [];\n this.suggestions = [];\n this.suggestionsWordList = [];\n }\n\n clearTypeAhead() {\n this.bpTypeAhead = '';\n }\n\n clearSuggestionValidationMessage() {\n this.suggestionValidationMessage = '';\n this.addressIsValidated = false;\n // this.messageChanged.emit(this.suggestionValidationMessage);\n this.messageChanged.emit({messageType: null, translatedMessage: this.suggestionValidationMessage});\n this.validationMessageOptions = null;\n this.validationMessageCode = null;\n }\n\n setSearchText(value) {\n this.searchText = value;\n }\n\n selectFirstInListOfSuggesions() {\n this.selectedIndex = 0;\n this.changeSelection();\n this.setSearchTextBasedOnArrowSelection(this.selectedIndex, this.selectedIndex - 1);\n }\n\n changeSelection() {\n if (this.suggestions.length > 0) {\n this.selectionChanged = true;\n }\n }\n\n suggestionMouseLeave() {\n this.selectedIndex = -1;\n }\n\n showAddressNotFoundMessage() {\n // this.setValidationMessage('address-not-found');\n this.emitTranslatedValidationMessage(ValidationMessageType.Address_Not_Found);\n }\n\n isDisabled() {\n return (this.locality === '' || this.postalCode === '' || this.minLevel > ADDRESSLEVEL.STREET_NUMBER);\n }\n\n onInputClick() {\n if (this.showDebugMessageToConsole) { console.log('street number click'); }\n }\n\n}\n","import { Component, OnInit, AfterViewChecked, OnChanges, OnDestroy, ViewChild, ElementRef, Input, Output, EventEmitter, SimpleChanges } from '@angular/core';\nimport { Subscription } from 'rxjs';\nimport { PrefilledParameters } from '../utils/prefilled-parameters';\nimport { ValidationMessageType } from '../enum/validation-message-type.enum';\nimport { AddressService } from '../services/adress.service';\nimport { LocaleService } from '../services/locale.service';\nimport { TranslateService } from '@ngx-translate/core';\nimport { UnicodeService } from '../services/unicode.service';\nimport { DomHandler } from '../utils/domhandler';\nimport { ADDRESSLEVEL } from '../enum/address-level.enum';\nimport { QueryParameters } from '../model/query-parameters.model';\nimport { PrefillData } from '../utils/prefill-data';\nimport { SourceType } from '../enum/source-type.enum';\nimport { PrefillEvent } from '../utils/preflll.event';\nimport { InputNameType } from '../enum/input-name.enum';\n\n@Component({\n selector: 'bp-box-number',\n templateUrl: './box-number.component.html',\n styleUrls: ['./box-number.component.scss']\n})\nexport class BoxNumberComponent implements OnInit, AfterViewChecked, OnChanges, OnDestroy {\n\n @ViewChild('boxNumberSearchInput', {static: false} ) boxNumberSearchInput: ElementRef;\n @ViewChild('boxNumberList', {static: false} ) boxNumberList: ElementRef;\n\n private subscription: Subscription;\n\n // 2020-06-15\n // @Input()\n // onFocusShowSuggestionsAfterPrefill = true;\n\n @Input() prefillData: PrefillData;\n @Input() showDebugMessageToConsole = false;\n\n @Input() labelResourceKey = 'common.label.boxNumber';\n @Input() maxSuggesionCount = 5;\n @Input() visibleSuggesionCount = 5;\n @Input() sortCriteria = '';\n @Input() baseUrl: string;\n @Input() addressParams: PrefilledParameters;\n @Input() postalCode: string;\n @Input() locality: string;\n @Input() streetName: string;\n @Input() streetNumber: string;\n @Input() selectedAddress;\n @Input() notInListAllowed: boolean;\n\n // @ts-ignore\n @Input() set inputLang(val: string) {\n // console.log('set lang', val);\n this.localeService.changeLang(val);\n this.translateService.use(val).subscribe(\n (res: any) => {\n // console.log('set lang after subscribe', res);\n this.onChangedLanguage();\n // if (res !== undefined ) {\n // }\n }\n );\n }\n\n @Input() messageOption = 'Y';\n\n @Output() messageChanged: EventEmitter<{messageType: ValidationMessageType, translatedMessage: string}> = new EventEmitter();\n @Output() addressChanged: EventEmitter<any> = new EventEmitter();\n @Output() focusEvent: EventEmitter<any> = new EventEmitter();\n @Output() blurEvent: EventEmitter<any> = new EventEmitter();\n @Output() textChangeEvent: EventEmitter<any> = new EventEmitter();\n @Output() emptyResponseEvent: EventEmitter<any> = new EventEmitter();\n\n @Output() clearInputEventEmitter: EventEmitter<string> = new EventEmitter();\n\n @Output() prefillEventEmitter: EventEmitter<PrefillEvent> = new EventEmitter<PrefillEvent>();\n\n searchText: string;\n\n addressIsValidated: boolean;\n suggestionValidationMessage: string;\n suggestions: any;\n previousIndex: number;\n lastSearchValue: string;\n wordList: any;\n suggestionsWordList: any;\n bpTypeAhead: string;\n placeHolderText: string;\n skipNextBlur: boolean; // OnBlur is triggered when the user clicks suggestion/validator button\n errorCode: any;\n\n minLevel: number;\n selectedIndex: number;\n collapseDropdown: boolean;\n typeAheadWord: string;\n sequenceNumber: number;\n consumedNumber: number;\n selectionChanged: boolean;\n validationMessageCode = null;\n validationMessageOptions = null;\n emptyResponseText: string;\n emptyResponse: boolean;\n\n prefilling = false;\n isPrefillWithNoMatch = false;\n\n constructor(\n private addressService: AddressService,\n private localeService: LocaleService,\n private translateService: TranslateService,\n private unicodeService: UnicodeService,\n ) { }\n\n ngOnInit() {\n this.searchText = '';\n // instance properties\n this.addressIsValidated = false;\n this.suggestionValidationMessage = '';\n this.suggestions = [];\n this.previousIndex = -1;\n this.lastSearchValue = '';\n this.wordList = [];\n this.suggestionsWordList = [];\n this.bpTypeAhead = '';\n this.placeHolderText = '';\n this.skipNextBlur = false; // OnBlur is triggered when the user clicks suggestion/validator button\n this.errorCode = null;\n // scope properties\n this.selectedIndex = -1;\n // properties\n this.typeAheadWord = '';\n this.collapseDropdown = true;\n this.sequenceNumber = 1;\n this.consumedNumber = 1;\n // initialization\n this.setSearchText('');\n // this.setPlaceHolderText();\n this.setEmptyResponseText();\n this.emptyResponse = true;\n this.onChangedLanguage();\n }\n\n ngAfterViewChecked() {\n if (this.selectionChanged) {\n const overlay: HTMLDivElement = this.boxNumberList.nativeElement;\n setTimeout(() => {\n const listItem = DomHandler.findSingle(overlay, 'li.active');\n if (listItem) {\n DomHandler.scrollInView(overlay, listItem);\n }\n }, 1);\n this.selectionChanged = false;\n }\n }\n\n ngOnChanges(changes: SimpleChanges) {\n if (changes) {\n if (changes.hasOwnProperty('prefillData') && !changes.prefillData.firstChange) {\n this.prefilling = true;\n this.searchText = this.loadParams(changes.prefillData.currentValue);\n if (this.searchText !== '' && this.minLevel === ADDRESSLEVEL.BOX_NUMBER) {\n // this.onInputChange('prefilled');\n // this.boxNumberSearchInput.nativeElement.focus();\n this.collapseDropdown = true;\n this.prefillData.prefillBoxNumber\n = this.transformBoxNumberInLowercaseAndWithoutDiacritics(this.prefillData.parameters.boxNumber);\n this.onInputChange(/*'prefilled'*/ SourceType.SOURCE_PREFILLED );\n }\n }\n\n if (changes.hasOwnProperty('streetNumber') && !changes.streetNumber.firstChange && !changes.hasOwnProperty('prefillData')) {\n this.minLevel = ADDRESSLEVEL.BOX_NUMBER;\n this.clearWidget();\n this.valueChanged();\n }\n\n /*\n if (changes.hasOwnProperty('inputLang') / *&& !changes.addressParams.firstChange* /) {\n const lang = changes.inputLang.currentValue;\n console.log('on changes - inputLang', lang);\n if (changes.inputLang.currentValue !== undefined) {\n this.translateService.setDefaultLang(lang);\n this.translateService.use(lang);\n this.localeService.changeLang(lang);\n this.onChangedLanguage();\n }\n }\n */\n }\n }\n\n transformBoxNumberInLowercaseAndWithoutDiacritics(boxNumber: string): string {\n let result: string = null;\n if (boxNumber !== null && boxNumber !== undefined )\n {\n result = this.unicodeService.removeDiacritics(boxNumber);\n result = result.toLowerCase();\n }\n // console.log('Transformed street number:', result);\n return result;\n }\n\n ngOnDestroy() {\n if (this.subscription) {\n this.subscription.unsubscribe();\n }\n }\n\n\n onChangedLanguage() {\n // this.placeHolderText = this.translateService.instant('boxNumber.placeholder.input-placeholder');\n // console.log('place holder', this.placeHolderText);\n this.translateService.get('boxNumber.placeholder.input-placeholder')\n .subscribe((res: string) => {\n // console.log('new placeholder', res);\n // => 'hello world'\n this.placeHolderText = res;\n this.setEmptyResponseText();\n });\n }\n\n setEmptyResponseText() {\n // this.emptyResponseText = this.translationService.translate('not-in-list');\n this.emptyResponseText = this.translateService.instant('boxNumber.message.not-in-list');\n }\n\n onClearInputEvent(event, focus) {\n this.clearInput(focus);\n }\n\n onBlur(ev) {\n if (this.isBrowserIE() && this.isDropdownClicked(ev)) {\n this.boxNumberSearchInput.nativeElement.focus();\n return;\n }\n if (this.skipNextBlur) {\n this.skipNextBlur = false;\n } else {\n this.collapseDropdown = true;\n this.blurEvent.emit(ADDRESSLEVEL.BOX_NUMBER);\n }\n }\n\n isBrowserIE(): boolean {\n return /msie\\s|trident\\/|edge\\//i.test(window.navigator.userAgent);\n }\n\n isDropdownClicked(ev) {\n const target = ev.explicitOriginalTarget || document.activeElement;\n return (target.id === 'bpaac-box-dropdown');\n }\n\n onFocus() {\n this.collapseDropdown = false;\n // this.collapseDropdown = (this.prefilling === true && this.prefillData !== null)\n // ? !this.prefillData.parameters.onFocusShowSuggestionsAfterPrefill : false;\n // this.prefilling = false;\n this.skipNextBlur = false;\n this.focusEvent.emit(ADDRESSLEVEL.BOX_NUMBER);\n }\n\n valueChanged() {\n this.textChangeEvent.emit(this.searchText);\n }\n\n mayShowDropdown() {\n return this.suggestions.length > 0 && !this.collapseDropdown;\n }\n\n buildInputWordList() {\n this.wordList = this.searchText.split(/[\\s, ]+/);\n }\n\n mayAddTypeAhead(source?: SourceType) {\n if (source === SourceType.SOURCE_PREFILLED ) { return false; }\n if (this.searchText.length === 0) {\n return false;\n }\n return (/[^\\s, \\\\\\/]$/).test(this.searchText);\n }\n\n buildTypeAhead(source?: SourceType) {\n if (!this.mayAddTypeAhead(source)) {\n return;\n }\n const searchTextWords = this.searchText.split(/[\\s, ]+/);\n const lastWord = searchTextWords[searchTextWords.length - 1];\n\n if (this.suggestions.some(function(sug) {\n if (!sug || !sug.hasOwnProperty('string')) {\n return false;\n }\n return sug.string.split(/[\\s-]+/).some(function(word) {\n if (this.stringStartsWithIgnoreDiacritics(word, lastWord)) {\n this.typeAheadWord = word;\n return true;\n }\n }.bind(this));\n }.bind(this))) {\n const appendix = this.typeAheadWord.slice(lastWord.length, this.typeAheadWord.length).toLowerCase();\n this.bpTypeAhead = this.searchText + appendix;\n }\n }\n\n stringStartsWithIgnoreDiacritics(value, prefix) {\n value = (value !== null && value !== undefined) ? value.toLowerCase() : value;\n prefix = (prefix !== null && prefix !== undefined) ? prefix.toLowerCase() : prefix;\n return this.unicodeService.removeDiacritics(value).slice(0, prefix.length)\n .toLowerCase().indexOf(this.unicodeService.removeDiacritics(prefix)) !== -1;\n }\n\n getTopSuggestions(source?: SourceType) {\n this.sequenceNumber += 1;\n const param = this.generateParameters();\n if (this.showDebugMessageToConsole) { console.log('BOX-NUMBER calling service params', param); }\n if (this.searchText) {\n this.subscription = this.addressService.getBox(this.baseUrl, this.locality, this.postalCode, param)\n .subscribe(\n response => {\n this.handleGetBoxResponse(response, source);\n if (source === SourceType.SOURCE_PREFILLED)\n {\n this.isPrefillWithNoMatch = this.prefillData.prefillBoxNumberPerfectMatchFound === true ? false : true;\n this.prefillAnalyzeData();\n }\n else\n {\n this.isPrefillWithNoMatch = false;\n }\n }\n ,\n () => this.handleGetBoxError()\n );\n }\n }\n\n getTextColor(): string {\n return ( this.isPrefillWithNoMatch === true ) ? 'orangered' : '';\n }\n\n prefillAnalyzeData()\n {\n if (this.prefillData.prefillBoxNumberPerfectMatchFound === true)\n {\n this.collapseDropdown = true;\n }\n this.prefillEventEmitter.emit(new PrefillEvent(ADDRESSLEVEL.BOX_NUMBER, this.prefillData) );\n }\n\n loadParams(prefillData: PrefillData) {\n let concatStr = '';\n if (prefillData !== null && prefillData.parameters !== null)\n {\n if (prefillData.parameters.hasOwnProperty('minLevel')) {\n this.minLevel = prefillData.parameters.minLevel;\n }\n if (prefillData.parameters.hasOwnProperty('postalCode') && this.isString(prefillData.parameters.postalCode)) {\n this.postalCode = prefillData.parameters.postalCode;\n }\n if (prefillData.parameters.hasOwnProperty('municipalityName') && this.isString(prefillData.parameters.municipalityName)) {\n this.locality = prefillData.parameters.municipalityName;\n }\n if (prefillData.parameters.hasOwnProperty('streetName') && this.isString(prefillData.parameters.streetName)) {\n this.streetName = prefillData.parameters.streetName;\n }\n if (prefillData.parameters.hasOwnProperty('streetNumber') && this.isString(prefillData.parameters.streetNumber)) {\n this.streetNumber = prefillData.parameters.streetNumber;\n }\n if (prefillData.parameters.hasOwnProperty('boxNumber')\n && this.isString(prefillData.parameters.boxNumber) && this.isParamsComplete()) {\n concatStr = prefillData.parameters.boxNumber;\n }\n }\n return concatStr;\n }\n\n isString(val): boolean {\n if (val === null || val === undefined) {\n return false;\n }\n return val.constructor === String;\n }\n\n isValid(val) {\n return this.isString(val) && val !== '';\n }\n\n isParamsComplete(): boolean {\n return this.isValid(this.postalCode) && this.isValid(this.locality) && this.isValid(this.streetName) && this.isValid(this.streetNumber);\n }\n\n generateParameters(): QueryParameters {\n // tslint:disable\n const param = new QueryParameters({\n id: this.sequenceNumber,\n q: this.searchText,\n postalCode: this.postalCode,\n locality: this.locality,\n street: this.streetName,\n streetNumber: this.streetNumber,\n maxNumberOfSuggestions: this.maxSuggesionCount\n });\n\n if (this.sortCriteria === 'B') {\n param.sortByBox(true);\n }\n return param;\n }\n\n handleGetBoxResponse(data: any, source?: SourceType) {\n if (data && data.response && data.response.sequenceNumber && data.response.sequenceNumber >= this.consumedNumber &&\n data.response.topSuggestions) {\n this.consumedNumber = data.response.sequenceNumber;\n this.clearSuggestions();\n this.parseTopSuggestions(data.response.topSuggestions, source);\n this.buildTypeAhead(source);\n this.clearConnectionErrorMessage();\n this.buildInputWordList();\n }\n this.collapseDropdown = (this.prefilling === true && this.prefillData !== null)\n ? !this.prefillData.parameters.onFocusShowSuggestionsAfterPrefill : false;\n }\n\n handleGetBoxError() {\n this.setConnectionErrorMessage();\n }\n\n setConnectionErrorMessage() {\n this.errorCode = 'service-unavailable';\n // this.setValidationMessage(this.errorCode);\n this.emitTranslatedValidationMessage(ValidationMessageType.Service_Unavailable);\n }\n\n clearConnectionErrorMessage() {\n if (this.errorCode) {\n const res = this.translateService.instant(this.errorCode);\n if (this.suggestionValidationMessage === res ) {\n this.clearSuggestionValidationMessage();\n }\n this.errorCode = null;\n }\n }\n\n parseTopSuggestions(topSuggestions, source?: SourceType) {\n if (topSuggestions.constructor === Array) {\n // topSuggestions.forEach(this.parseSingleSuggestion.bind(this));\n for (const sug of topSuggestions)\n {\n this.parseSingleSuggestion(sug, source);\n }\n if(!source)\n {\n if ((topSuggestions.length === 0 || this.emptyResponse) && this.notInListAllowed) {\n this.suggestions.push({string: this.searchText, 'not-in-list': true});\n }\n }\n else\n {\n // If prefilling, then check if no match for a non-empty boxNumber\n // If this is the case, simulate the selection of the 'not-in-list' suggestion\n if(this.prefilling && this.notInListAllowed\n && this.prefillData.prefillBoxNumberPerfectMatchFound === false \n && this.prefillData.prefillBoxNumber !== null \n && this.prefillData.prefillBoxNumber !== undefined\n && this.prefillData.prefillBoxNumber.length > 0)\n {\n // const notInListSuggestion = {string: this.searchText, 'not-in-list': true};\n const suggestion = this.prefillBuildNotInListSuggestion();\n if (this.showDebugMessageToConsole) { console.log('BOX NUMBER - PREFILL NOT IN LIST SUGGESTION:', suggestion); }\n this.prefillCheckForPerfectMatch(suggestion);\n }\n\n }\n } else {\n this.parseSingleSuggestion(topSuggestions, source);\n }\n }\n\n prefillBuildNotInListSuggestion(): any {\n const notInListSuggestion = {string: this.searchText, 'not-in-list': true};\n const streetNumberSuggestion = this.prefillData.prefillStreetNumberPerfectMatchSuggestion;\n const combined = {...streetNumberSuggestion.address, ...notInListSuggestion};\n delete combined.mailBoxid;\n delete combined.suffixId;\n combined.boxNumber = combined.string;\n combined.searchBarString = combined.string;\n combined.isComplete = true;\n streetNumberSuggestion.address = combined;\n return streetNumberSuggestion;\n }\n\n parseSingleSuggestion(suggestion: any, source: SourceType) {\n let suggestionToAdd: any;\n if (this.localeService.isLocaleFrench() && suggestion.hasOwnProperty('french')) {\n suggestionToAdd = suggestion.french;\n } else if (this.localeService.isLocaleDutch() && suggestion.hasOwnProperty('dutch')) {\n suggestionToAdd = suggestion.dutch;\n } else if (this.localeService.isLocaleGerman() && suggestion.hasOwnProperty('german')) {\n suggestionToAdd = suggestion.german;\n } else if (suggestion.hasOwnProperty('address')) {\n suggestionToAdd = suggestion.address;\n }\n if (suggestionToAdd) {\n if (suggestion.messages) {\n suggestionToAdd.messages = suggestion.messages;\n }\n if (suggestionToAdd.boxNumber === this.searchText) {\n this.emptyResponse = false;\n }\n this.suggestions.push(suggestionToAdd);\n if (source === SourceType.SOURCE_PREFILLED)\n {\n suggestion.address = suggestionToAdd;\n this.prefillCheckForPerfectMatch(suggestion);\n }\n }\n }\n\n prefillCheckForPerfectMatch(suggestion)\n {\n //if ( !this.addressIsComplete )\n {\n if (this.showDebugMessageToConsole) {\n console.log('box number - checking suggestion for perfect match', this.prefillData, suggestion);\n }\n const sugAddress = suggestion.address;\n const suggestionBoxNumber = this.transformBoxNumberInLowercaseAndWithoutDiacritics('' + sugAddress.boxNumber);\n if (this.showDebugMessageToConsole) {\n console.log('comparing box numbers', suggestionBoxNumber, this.prefillData.prefillBoxNumber);\n }\n if (suggestionBoxNumber === ('' + this.prefillData.prefillBoxNumber) )\n {\n this.prefillData.prefillBoxNumberPerfectMatchFound = true;\n this.prefillData.prefillBoxNumberPerfectMatchSuggestion = suggestion;\n this.searchText = sugAddress.boxNumber;\n if (sugAddress.hasOwnProperty('isComplete') && sugAddress.isComplete === true) {\n this.clickSuggestion(null, sugAddress);\n // this.addressIsComplete = true;\n if (this.showDebugMessageToConsole) {\n console.log('ADDRESS COMPLETE ON BOX NUMBER !');\n }\n }\n }\n }\n /* else\n {\n if (this.showDebugMessageToConsole) {\n console.log('Address complete, skipping suggestion check', suggestion);\n }\n } */\n }\n\n onInputChange(source?: SourceType) {\n this.collapseDropdown = false;\n this.emptyResponse = true;\n this.resetArrowSelectedIndex();\n if (!source) {\n this.prefilling = false;\n this.valueChanged();\n }\n this.clearSuggestionValidationMessage();\n if (this.searchText === '') {\n this.sequenceNumber += 1;\n this.consumedNumber = this.sequenceNumber;\n this.clearSuggestions();\n } else {\n this.getTopSuggestions(source);\n }\n this.buildInputWordList();\n }\n\n clickSuggestion(event: any, suggestion?: any) {\n this.isPrefillWithNoMatch = false;\n event?.preventDefault();\n if (suggestion) {\n this.clearTypeAhead();\n this.resetArrowSelectedIndex();\n if (suggestion.string) {\n this.setSearchText(suggestion.string);\n }\n this.collapseDropdown = true;\n // if (suggestion.hasOwnProperty('isComplete')) {\n // this.showAddressIsValidated();\n // }\n if (suggestion['not-in-list']) {\n suggestion = this.modifySelectedAddress(suggestion);\n }\n this.addressIsValidated = true;\n suggestion.isComplete = true;\n this.setSelectedAddress(suggestion);\n }\n }\n\n modifySelectedAddress(suggestion: object) {\n const combined = {...this.selectedAddress, ...suggestion};\n delete combined.mailBoxid;\n delete combined.suffixId;\n combined.boxNumber = combined.string;\n combined.searchBarString = combined.string;\n combined.isComplete = true;\n return combined;\n }\n\n setSelectedAddress(suggestion: any) {\n // console.log('box number::setSelectedAddress', suggestion);\n this.addressIsValidated = (suggestion.hasOwnProperty('isComplete') && suggestion.isComplete === true) ? true : false;\n this.addressChanged.emit(suggestion);\n }\n\n clearSelectedAddress() {\n this.addressChanged.emit(null);\n this.addressIsValidated = false;\n }\n\n /*\n setValidationMessage(translationCode, options?, retranslateOptions?) {\n this.validationMessageOptions = options;\n if (retranslateOptions && this.validationMessageOptions && Array.isArray(this.validationMessageOptions['untranslated-sprintf']) &&\n this.validationMessageOptions.sprintf) {\n const translatedElements = [];\n this.validationMessageOptions['untranslated-sprintf'].forEach(function(element) {\n translatedElements.push(this.translationService.translate(element));\n }.bind(this)\n );\n this.validationMessageOptions.sprintf = translatedElements;\n }\n this.validationMessageCode = translationCode;\n // emit translation key to wrapper component for customized translations\n if (options) {\n this.suggestionValidationMessage = this.translationService.translate(this.validationMessageCode, this.validationMessageOptions);\n this.messageChanged.emit(this.suggestionValidationMessage);\n } else {\n this.messageChanged.emit(this.validationMessageCode);\n }\n }\n */\n\n emitTranslatedValidationMessage(validationMessageType: ValidationMessageType, options?: string[]) {\n // Momently, options are NOT used; so data type of these options will be reviewed once needed.\n if (validationMessageType === null || validationMessageType === undefined ) {\n console.warn('Unable to emit validation message - message key is invalid!', validationMessageType);\n return;\n }\n\n switch (validationMessageType) {\n\n case ValidationMessageType.Address_Not_Found:\n case ValidationMessageType.Address_Validated:\n case ValidationMessageType.Service_Unavailable: {\n const message = this.translateService.instant(validationMessageType);\n // this.messageChanged.emit(message);\n this.messageChanged.emit({messageType: validationMessageType, translatedMessage: message});\n }\n // tslint:disable-next-line:align\n break;\n\n default: {\n console.error('Unable to emit validation message - message key NOT supported!', validationMessageType);\n }\n // tslint:disable-next-line:align\n break;\n }\n\n }\n showAddressIsValidated() {\n // this.setValidationMessage('address-validated');\n this.emitTranslatedValidationMessage(ValidationMessageType.Address_Validated);\n }\n\n checkKeyDown(event) {\n switch (event.which) {\n // down key, increment selectedIndex\n case 40:\n event.preventDefault();\n this.moveArrowSelectedIndexDown();\n break;\n\n // up key, decrement selectedIndex\n case 38:\n event.preventDefault();\n this.moveArrowSelectedIndexUp();\n break;\n // right arrow key\n case 39:\n event.preventDefault();\n if (this.cursorIsOnSuggestionList()) {\n this.clickSuggestion(event, this.suggestions[this.selectedIndex]);\n } else {\n if (this.typeAheadWord && this.typeAheadIsShown()) {\n this.setSearchText(this.bpTypeAhead);\n this.typeAheadWord = '';\n }\n }\n break;\n // tab key\n case 9:\n if (!this.addressIsValidated && !event.shiftKey) {\n event.preventDefault();\n this.selectFirstInListOfSuggesions();\n }\n break;\n\n case 46:\n if (event.ctrlKey) {\n this.clearWidget();\n }\n break;\n // enter pressed\n case 13:\n event.preventDefault();\n if (this.cursorIsOnSuggestionList()) {\n this.clickSuggestion(event, this.suggestions[this.selectedIndex]);\n } else {\n }\n break;\n\n default:\n this.clearTypeAhead();\n break;\n\n }\n }\n\n clearWidget() {\n this.addressIsValidated = false;\n this.clearSearchText();\n this.clearSuggestions();\n this.clearTypeAhead();\n this.prefillData = null;\n // this.prefilling = false;\n }\n\n clearSearchText() {\n this.searchText = '';\n }\n\n typeAheadIsShown() {\n return this.bpTypeAhead && this.bpTypeAhead.length > 0;\n }\n\n resetArrowSelectedIndex() {\n this.selectedIndex = -1;\n }\n\n moveArrowSelectedIndexDown() {\n if (this.selectedIndex + 1 !== this.suggestions.length) {\n this.selectedIndex++;\n this.changeSelection();\n this.setSearchTextBasedOnArrowSelection(this.selectedIndex, this.selectedIndex - 1);\n }\n }\n\n moveArrowSelectedIndexUp() {\n if (this.selectedIndex - 1 !== -2) {\n this.selectedIndex--;\n this.changeSelection();\n this.setSearchTextBasedOnArrowSelection(this.selectedIndex, this.selectedIndex + 1);\n }\n }\n\n cursorIsOnSuggestionList() {\n return this.selectedIndex >= 0;\n }\n\n setSearchTextBasedOnArrowSelection(newVal, oldVal) {\n if (newVal === undefined || this.suggestions.length <= 0) {\n return;\n }\n if (newVal !== -1) {\n if (oldVal === -1) {\n this.lastSearchValue = this.searchText;\n }\n this.setSearchText(this.suggestions[this.selectedIndex].string);\n this.clearTypeAhead();\n } else {\n this.setSearchText(this.lastSearchValue);\n }\n }\n\n mayShowClearButton() {\n return this.searchText.length > 0;\n }\n\n clearInput(focus?, emit: boolean = true) {\n this.clearWidget();\n this.resetArrowSelectedIndex();\n this.previousIndex = -1;\n this.lastSearchValue = '';\n this.clearSuggestionValidationMessage();\n this.valueChanged();\n this.clearConnectionErrorMessage();\n if (focus === true) {\n this.boxNumberSearchInput.nativeElement.focus();\n }\n // this.addressChanged.emit(null);\n if(emit) {\n this.clearInputEventEmitter.emit(/*'BOX_NUMBER'*/ InputNameType.BOX_NUMBER);\n }\n }\n\n clearSuggestions() {\n this.wordList = [];\n this.suggestions = [];\n this.suggestionsWordList = [];\n }\n\n clearTypeAhead() {\n this.bpTypeAhead = '';\n }\n\n clearSuggestionValidationMessage() {\n this.suggestionValidationMessage = '';\n this.addressIsValidated = false;\n this.messageChanged.emit({messageType: null, translatedMessage: this.suggestionValidationMessage});\n this.validationMessageOptions = null;\n this.validationMessageCode = null;\n }\n\n setSearchText(value) {\n this.searchText = value;\n }\n\n selectFirstInListOfSuggesions() {\n this.selectedIndex = 0;\n this.changeSelection();\n this.setSearchTextBasedOnArrowSelection(this.selectedIndex, this.selectedIndex - 1);\n }\n\n changeSelection() {\n if (this.suggestions.length > 0) {\n this.selectionChanged = true;\n }\n }\n\n suggestionMouseLeave() {\n this.selectedIndex = -1;\n }\n\n showAddressNotFoundMessage() {\n // this.setValidationMessage('address-not-found');\n this.emitTranslatedValidationMessage(ValidationMessageType.Address_Not_Found);\n }\n\n isDisabled() {\n return (this.locality === '' || this.postalCode === '' || this.minLevel > ADDRESSLEVEL.BOX_NUMBER);\n }\n\n onInputClick() {\n if (this.showDebugMessageToConsole) { console.log('box number click'); }\n }\n}\n","import { PrefilledParameters } from './prefilled-parameters';\r\n\r\nexport class PrefillData // extends PrefilledParameters\r\n{\r\n // parameters: PrefilledParameters;\r\n\r\n prefillMunicipalityName: string = null;\r\n prefillMunicipalityPerfectMatchFound = false;\r\n prefillMunicipalityPerfectMatchSuggestion: any = null;\r\n\r\n prefillStreetName: string = null;\r\n prefillStreetPerfectMatchFound = false;\r\n prefillStreetPerfectMatchSuggestion: any = null;\r\n\r\n prefillStreetNumber: string = null;\r\n prefillStreetNumberPerfectMatchFound = false;\r\n prefillStreetNumberPerfectMatchSuggestion: any = null;\r\n\r\n prefillBoxNumber: string = null;\r\n prefillBoxNumberPerfectMatchFound = false;\r\n prefillBoxNumberPerfectMatchSuggestion: any = null;\r\n\r\n ts: Date = null;\r\n\r\n constructor(\r\n public parameters: PrefilledParameters\r\n ){\r\n this.ts = new Date();\r\n }\r\n}\r\n","import { Component, OnInit, Input, Output, EventEmitter, OnDestroy, ViewChild, SimpleChanges, OnChanges } from '@angular/core';\nimport { Subscription } from 'rxjs';\nimport { PrefilledParameters } from './utils/prefilled-parameters';\nimport { ValidationMessageOptionType } from './enum/validation-message-option-type.enum';\nimport { ValidationMessageType } from './enum/validation-message-type.enum';\nimport { LocalityComponent } from './locality/locality.component';\nimport { StreetComponent } from './street/street.component';\nimport { StreetNumberComponent } from './street-number/street-number.component';\nimport { BoxNumberComponent } from './box-number/box-number.component';\nimport { ADDRESSLEVEL } from './enum';\nimport { PrefillData } from './utils/prefill-data';\nimport { PrefillEvent } from './utils/preflll.event';\nimport { InputNameType } from './enum/input-name.enum';\n\n@Component({\n selector: 'bp-lib-address-autocomplete-by-component',\n templateUrl: './lib-address-autocomplete-by-component.component.html',\n styleUrls: [ './lib-address-autocomplete-by-component.component.scss']\n})\nexport class LibAddressAutocompleteByComponentComponent implements OnInit, OnDestroy, OnChanges {\n\n @ViewChild(LocalityComponent, {static: false} ) autocompleteLocality;\n @ViewChild(StreetComponent, {static: false} ) autocompleteStreet;\n @ViewChild(StreetNumberComponent, {static: false} ) autocompleteStreetNb;\n @ViewChild(BoxNumberComponent, {static: false} ) autocompleteBoxNb;\n\n selectedLanguage: string = null;\n private subscription: Subscription;\n\n // @ts-ignore\n @Input() set inputLang(val: string) {\n this.setLanguage(val);\n }\n\n // @ts-ignore\n @Input() set clearInput(focus: {setFocus: boolean, timestamp: Date}) {\n this.onClearInput(focus);\n }\n\n // @ts-ignore\n @Input() set validationMessageOption(option: {validationType: ValidationMessageOptionType, timestamp: Date}) {\n this.setValidationMessageOptionFromInput(option);\n }\n\n @Input()\n defaultLang: string;\n\n @Input() showDebugMessageToConsole = false;\n @Input() minLevel: number;\n @Input() notInListAllowed = true;\n @Input() addressParams: PrefilledParameters;\n @Input() messageOption = 'Y';\n\n // LOCALITY\n @Input() localityUrl = 'https://webservices-pub.bpost.be/ws/ExternalMailingAddressProofingCSREST_v1/address/autocomplete/locality';\n @Input() maxSuggestionLocality = 5;\n @Input() visibleSuggestionLocalityCount = 5;\n @Input() sortCriteriaLocality: string;\n postalCodeLocality: string;\n // localityParams: PrefilledParameters;\n localityPrefillData: PrefillData = null;\n\n // STREET\n @Input() streetUrl = 'https://webservices-pub.bpost.be/ws/ExternalMailingAddressProofingCSREST_v1/address/autocomplete/street';\n @Input() maxSuggestionStreet = 5;\n @Input() visibleSuggestionStreetCount = 5;\n @Input() sortCriteriaStreet: string;\n // streetParams: PrefilledParameters;\n streetPrefillData: PrefillData = null;\n\n // STREET NUMBER\n // tslint:disable-next-line:max-line-length\n @Input() streetNumberUrl = 'https://webservices-pub.bpost.be/ws/ExternalMailingAddressProofingCSREST_v1/address/autocomplete/streetNumber';\n @Input() maxSuggestionStreetNb = 5;\n @Input() visibleSuggestionStreetNbCount = 5;\n @Input() sortCriteriaStreetNb: string;\n // streetNumberParams: PrefilledParameters;\n streetNumberPrefillData: PrefillData = null;\n\n // BOX NUMBER\n @Input() boxNumberUrl = 'https://webservices-pub.bpost.be/ws/ExternalMailingAddressProofingCSREST_v1/address/autocomplete/boxNumber';\n @Input() maxSuggestionBoxNb = 5;\n @Input() visibleSuggestionBoxNbCount = 5;\n @Input() sortCriteriaBoxNb: string;\n // boxParams: PrefilledParameters;\n boxNumberPrefillData: PrefillData = null;\n\n\n boxNumber: string;\n completeAddress: string;\n emittedAddress: any = null;\n locality: string;\n postalCode: string;\n selectedAddress: any;\n street: string;\n streetAddress: any;\n streetNameInput: string;\n streetNumber: string;\n streetNumberAddress: any;\n streetNumberInput: string;\n validationMessage: {messageType: ValidationMessageType, translatedMessage: string} = {messageType: null, translatedMessage: ''};\n validationMessageOptionType: ValidationMessageOptionType;\n\n\n @Output() addressCompleteEventEmitter: EventEmitter<any> = new EventEmitter();\n @Output() validationMessageEventEmitter: EventEmitter<any> = new EventEmitter();\n @Output() clearInputEventEmitter: EventEmitter<string> = new EventEmitter();\n\n\n prefillData: PrefillData;\n processingPrefillData = false;\n\n\n constructor() { }\n\n ngOnInit(): void\n {\n if (this.addressParams)\n {\n this.prefillData = this.addressParams as any as PrefillData;\n }\n }\n\n ngOnDestroy()\n {\n if (this.subscription)\n {\n this.subscription.unsubscribe();\n }\n }\n\n ngOnChanges(changes: SimpleChanges)\n {\n if (changes)\n {\n // code for tracing\n // visibleSuggestionStreetNbCount\n if (this.showDebugMessageToConsole) {\n this.displayParametersChangesToConsole(changes);\n }\n\n if (changes.hasOwnProperty('addressParams') && !changes.addressParams.firstChange) {\n // if (changes.hasOwnProperty('addressParams')) {\n this.processingPrefillData = true;\n this.enterPrefillMode();\n this.selectedAddress = null;\n this.notifyAddressComplete();\n this.clearWidget();\n /*\n if (this.localityPrefillData !== null && this.localityPrefillData !== undefined) {\n // this.onClearInputEventEmitter(InputNameType.LOCALITY);\n this.clearWidget();\n }\n */\n this.boxNumberPrefillData = null;\n this.streetNumberPrefillData = null;\n this.streetPrefillData = null;\n\n if (this.showDebugMessageToConsole) {console.log('lib::widget detected prefilling', this.addressParams); }\n this.addressParams.minLevel = /*4*/ ADDRESSLEVEL.LOCALITY;\n // this.localityPrefillData = this.addressParams; // as any as PrefillData;\n this.localityPrefillData = new PrefillData(this.addressParams);\n // Object.assign(this.localityPrefillData, this.addressParams);\n if (this.showDebugMessageToConsole) {console.log('lib::checking locality match... ', this.localityPrefillData); }\n }\n }\n }\n\n displayParametersChangesToConsole(changes: SimpleChanges)\n {\n // messageOption\n if (changes.hasOwnProperty('messageOption') && !changes.messageOption.firstChange) {\n const wcChanges = changes.messageOption.currentValue;\n console.log('lib widget9 - messageOption', wcChanges);\n }\n\n // maxSuggestionLocality\n if (changes.hasOwnProperty('maxSuggestionLocality') && !changes.maxSuggestionLocality.firstChange) {\n const wcChanges = changes.maxSuggestionLocality.currentValue;\n console.log('lib widget9 - maxSuggestionLocality', wcChanges);\n }\n\n // visibleSuggestionLocalityCount\n if (changes.hasOwnProperty('visibleSuggestionLocalityCount') && !changes.visibleSuggestionLocalityCount.firstChange) {\n const wcChanges = changes.visibleSuggestionLocalityCount.currentValue;\n console.log('lib widget9 - visibleSuggestionLocalityCount', wcChanges);\n }\n\n // sortCriteriaLocality\n if (changes.hasOwnProperty('sortCriteriaLocality') && !changes.sortCriteriaLocality.firstChange) {\n const wcChanges = changes.sortCriteriaLocality.currentValue;\n console.log('lib widget9 - sortCriteriaLocality', wcChanges);\n }\n\n // maxSuggestionStreet\n if (changes.hasOwnProperty('maxSuggestionStreet') && !changes.maxSuggestionStreet.firstChange) {\n const wcChanges = changes.maxSuggestionStreet.currentValue;\n console.log('lib widget9 - maxSuggestionStreet', wcChanges);\n }\n // visibleSuggestionStreetCount\n if (changes.hasOwnProperty('visibleSuggestionStreetCount') && !changes.visibleSuggestionStreetCount.firstChange) {\n const wcChanges = changes.visibleSuggestionStreetCount.currentValue;\n console.log('lib widget9 - visibleSuggestionStreetCount', wcChanges);\n }\n // sortCriteriaStreet\n if (changes.hasOwnProperty('sortCriteriaStreet') && !changes.sortCriteriaStreet.firstChange) {\n const wcChanges = changes.sortCriteriaStreet.currentValue;\n console.log('lib widget9 - sortCriteriaStreet', wcChanges);\n }\n\n // maxSuggestionStreetNb\n if (changes.hasOwnProperty('maxSuggestionStreetNb') && !changes.maxSuggestionStreetNb.firstChange) {\n const wcChanges = changes.maxSuggestionStreetNb.currentValue;\n console.log('lib widget9 - maxSuggestionStreetNb', wcChanges);\n }\n // visibleSuggestionStreetNbCount\n if (changes.hasOwnProperty('visibleSuggestionStreetNbCount') && !changes.visibleSuggestionStreetNbCount.firstChange) {\n const wcChanges = changes.visibleSuggestionStreetNbCount.currentValue;\n console.log('lib widget9 - visibleSuggestionStreetNbCount', wcChanges);\n }\n // sortCriteriaStreetNb\n if (changes.hasOwnProperty('sortCriteriaStreetNb') && !changes.sortCriteriaStreetNb.firstChange) {\n const wcChanges = changes.sortCriteriaStreetNb.currentValue;\n console.log('lib widget9 - sortCriteriaStreetNb', wcChanges);\n }\n\n // maxSuggestionBoxNb\n if (changes.hasOwnProperty('maxSuggestionBoxNb') && !changes.maxSuggestionBoxNb.firstChange) {\n const wcChanges = changes.maxSuggestionBoxNb.currentValue;\n console.log('lib widget9 - maxSuggestionBoxNb', wcChanges);\n }\n // visibleSuggestionBoxNbCount\n if (changes.hasOwnProperty('visibleSuggestionBoxNbCount') && !changes.visibleSuggestionBoxNbCount.firstChange) {\n const wcChanges = changes.visibleSuggestionBoxNbCount.currentValue;\n console.log('lib widget9 - visibleSuggestionBoxNbCount', wcChanges);\n }\n // sortCriteriaBoxNb\n if (changes.hasOwnProperty('sortCriteriaBoxNb') && !changes.sortCriteriaBoxNb.firstChange) {\n const wcChanges = changes.sortCriteriaBoxNb.currentValue;\n console.log('lib widget9 - sortCriteriaBoxNb', wcChanges);\n }\n }\n\n clearWidget() {\n this.autocompleteBoxNb.clearWidget();\n this.autocompleteStreetNb.clearWidget();\n this.autocompleteStreet.clearWidget();\n this.autocompleteLocality.clearWidget();\n }\n\n changeMinLevel(minLevel: number) {\n this.minLevel = minLevel;\n }\n\n // Called by the specific buttons in the app\n onClearInput(focus: {setFocus: boolean, timestamp: Date}) {\n if (this.showDebugMessageToConsole) { console.log('lib::onClearInput', focus); }\n\n /*\n if (focus === null || focus === undefined) {\n return;\n }*/\n\n this.quitPrefillMode();\n\n const setFocus = (focus === null || focus === undefined) ? false : focus.setFocus;\n\n switch (this.minLevel) {\n case 1:\n this.boxNumber = '';\n this.autocompleteBoxNb.clearInput(setFocus, false);\n this.clearInputEventEmitter.emit('BOX_NUMBER');\n break;\n case 2:\n this.boxNumber = '';\n this.streetNumber = '';\n this.autocompleteBoxNb.searchText = '';\n this.autocompleteBoxNb.streetNumber = '';\n this.autocompleteBoxNb.clearInput(setFocus, false);\n this.autocompleteStreetNb.onClearStreetNumberInput(setFocus, false);\n this.clearInputEventEmitter.emit('STREET_NUMBER');\n break;\n case 3:\n this.boxNumber = '';\n this.streetNumber = '';\n this.street = '';\n this.autocompleteBoxNb.searchText = '';\n this.autocompleteBoxNb.streetNumber = '';\n this.autocompleteBoxNb.clearInput(setFocus, false);\n this.autocompleteBoxNb.clearWidget();\n this.autocompleteStreetNb.searchText = '';\n this.autocompleteStreetNb.streetName = '';\n this.autocompleteStreetNb.onClearStreetNumberInput(setFocus, false);\n this.autocompleteStreet.clearInput(setFocus, false);\n this.clearInputEventEmitter.emit('STREET');\n break;\n default:\n // Box number\n this.boxNumber = '';\n if (this.autocompleteBoxNb)\n {\n this.autocompleteBoxNb.searchText = '';\n this.autocompleteBoxNb.streetNumber = '';\n this.autocompleteBoxNb.clearInput(setFocus, false);\n }\n // Street number\n this.streetNumber = '';\n if (this.autocompleteStreetNb)\n {\n this.autocompleteStreetNb.searchText = '';\n this.autocompleteStreetNb.streetName = '';\n this.autocompleteStreetNb.onClearStreetNumberInput(setFocus, false);\n }\n // Street name\n this.street = '';\n if (this.autocompleteStreet)\n {\n this.autocompleteStreet.searchText = '';\n this.autocompleteStreet.clearInput(setFocus, false);\n }\n // Locality\n this.locality = '';\n if (this.autocompleteLocality)\n {\n this.autocompleteLocality.searchText = '';\n this.autocompleteLocality.clearInput(setFocus, false);\n }\n\n this.clearInputEventEmitter.emit('LOCALITY');\n break;\n }\n }\n\n getBoxPrefix(): string {\n let prefix = '';\n switch (this.selectedLanguage) {\n case 'fr':\n prefix = 'BTE';\n break;\n case 'nl':\n prefix = 'BUS';\n break;\n default:\n prefix = 'BOX';\n break;\n }\n return prefix;\n }\n\n notifyAddressComplete() {\n // console.log('notify for address complete');\n this.addressCompleteEventEmitter.emit(this.selectedAddress);\n this.emittedAddress = this.selectedAddress;\n this.updatePostalCodeLocality(this.emittedAddress);\n }\n\n onClearInputEventEmitter(event) {\n\n if (this.showDebugMessageToConsole) { console.log('lib::onClearInputEventEmitter', event); }\n\n this.quitPrefillMode();\n\n let nextAddress = this.selectedAddress; // this.emittedAddress;\n\n if (event === InputNameType.LOCALITY)\n {\n // Box number\n this.boxNumber = '';\n if (this.autocompleteBoxNb)\n {\n this.autocompleteBoxNb.searchText = '';\n this.autocompleteBoxNb.streetNumber = '';\n this.autocompleteBoxNb.clearInput(false, false);\n }\n // Street number\n this.streetNumber = '';\n if (this.autocompleteStreetNb)\n {\n this.autocompleteStreetNb.searchText = '';\n this.autocompleteStreetNb.streetName = '';\n this.autocompleteStreetNb.onClearStreetNumberInput(false, false);\n }\n // Street name\n this.street = '';\n if (this.autocompleteStreet)\n {\n this.autocompleteStreet.searchText = '';\n this.autocompleteStreet.clearInput(false, false);\n }\n // Locality\n this.locality = '';\n if (this.autocompleteLocality)\n {\n this.autocompleteLocality.searchText = '';\n this.autocompleteLocality.clearInput(false, false);\n }\n\n nextAddress = null;\n }\n else if (event === InputNameType.STREET)\n {\n // Box number\n this.boxNumber = '';\n if (this.autocompleteBoxNb)\n {\n this.autocompleteBoxNb.searchText = '';\n this.autocompleteBoxNb.streetNumber = '';\n this.autocompleteBoxNb.clearInput(false, false);\n }\n // Street number\n this.streetNumber = '';\n if (this.autocompleteStreetNb)\n {\n this.autocompleteStreetNb.searchText = '';\n this.autocompleteStreetNb.streetName = '';\n this.autocompleteStreetNb.onClearStreetNumberInput(false, false);\n }\n // Street name\n this.street = '';\n if (this.autocompleteStreet)\n {\n this.autocompleteStreet.searchText = '';\n this.autocompleteStreet.clearInput(false, false);\n }\n\n nextAddress = null;\n }\n else if (event === InputNameType.STREET_NUMBER)\n {\n // Box number\n this.boxNumber = '';\n if (this.autocompleteBoxNb)\n {\n this.autocompleteBoxNb.searchText = '';\n this.autocompleteBoxNb.streetNumber = '';\n this.autocompleteBoxNb.clearInput(false, false);\n }\n // Street number\n this.streetNumber = '';\n if (this.autocompleteStreetNb)\n {\n this.autocompleteStreetNb.searchText = '';\n // this.autocompleteStreetNb.streetName = '';\n this.autocompleteStreetNb.onClearStreetNumberInput(false, false);\n }\n\n nextAddress = null;\n }\n else if (event === InputNameType.BOX_NUMBER)\n {\n // Box number\n this.boxNumber = '';\n if (this.autocompleteBoxNb)\n {\n this.autocompleteBoxNb.searchText = '';\n // this.autocompleteBoxNb.streetNumber = '';\n this.autocompleteBoxNb.clearInput(false, false);\n }\n\n // Attention: if not-in-list don't reset the address, just modify it\n const addressIsNotInList\n = nextAddress !== undefined && nextAddress !== null\n && nextAddress.hasOwnProperty('not-in-list') && nextAddress['not-in-list'] === true\n ? true : false;\n\n /*\n if (addressIsNotInList)\n {\n delete nextAddress.boxNumber;\n nextAddress.isCompleteNotificationDone = false;\n if (this.streetNumberAddress !== null )\n {\n console.warn('reset box on not-in-list', this.streetNumberAddress);\n\n }\n }\n else\n {\n nextAddress = null;\n }\n */\n\n nextAddress = this.streetNumberAddress !== null ? this.streetNumberAddress : null;\n /*\n const addressIsNotInList\n = nextAddress !== null && nextAddress.hasOwnProperty('not-in-list') && nextAddress['not-in-list'] === true\n ? true : false;\n */\n const addressIsComplete\n = nextAddress !== undefined && nextAddress !== null\n && nextAddress.hasOwnProperty('isComplete') && nextAddress.isComplete === true ? true : false;\n this.autocompleteStreetNb.addressIsComplete = addressIsComplete;\n }\n\n this.clearInputEventEmitter.emit(event);\n\n if (this.emittedAddress !== null ) {\n this.addressCompleteEventEmitter.emit(nextAddress);\n this.emittedAddress = nextAddress;\n }\n\n\n // gka\n /*\n if (event === InputNameType.LOCALITY)\n {\n this.minLevel = ADDRESSLEVEL.LOCALITY;\n this.boxNumberPrefillData = null;\n this.streetNumberPrefillData = null;\n this.streetPrefillData = null;\n this.localityPrefillData = null;\n // this.clearInput(focus: {setFocus: boolean, timestamp: Date});\n this.locality = '';\n this.postalCode = '';\n this.street = null;\n this.streetNumber = null;\n this.boxNumber = null;\n this.autocompleteBoxNb.clearInput(false, false);\n this.autocompleteBoxNb.streetName = '';\n this.autocompleteStreetNb.onClearStreetNumberInput(false, false);\n this.autocompleteStreetNb.streetName = '';\n this.autocompleteStreet.clearInput(false, false);\n this.autocompleteStreet.locality = '';\n this.autocompleteLocality.clearInput(false, false);\n }\n if (event === InputNameType.STREET)\n {\n this.minLevel = ADDRESSLEVEL.STREET;\n this.boxNumberPrefillData = null;\n this.streetNumberPrefillData = null;\n this.streetPrefillData = null;\n // this.clearInput(focus: {setFocus: boolean, timestamp: Date});\n this.street = null;\n this.streetNumber = null;\n this.boxNumber = null;\n this.autocompleteBoxNb.clearInput(false, false);\n this.autocompleteBoxNb.streetName = '';\n this.autocompleteStreetNb.onClearStreetNumberInput(false, false);\n this.autocompleteStreetNb.streetName = '';\n this.autocompleteStreet.clearInput(false, false);\n // this.autocompleteLocality.clearInput(false, false);\n }\n if (event === InputNameType.STREET_NUMBER)\n {\n this.minLevel = ADDRESSLEVEL.STREET_NUMBER;\n this.boxNumberPrefillData = null;\n this.streetNumberPrefillData = null;\n // this.clearInput(focus: {setFocus: boolean, timestamp: Date});\n this.streetNumber = null;\n this.boxNumber = null;\n this.autocompleteBoxNb.clearInput(false, false);\n this.autocompleteBoxNb.streetName = '';\n this.autocompleteStreetNb.onClearStreetNumberInput(false, false);\n // this.autocompleteStreet.clearInput(false, false);\n // this.autocompleteLocality.clearInput(false, false);\n }\n if (event === InputNameType.BOX_NUMBER)\n {\n this.minLevel = ADDRESSLEVEL.BOX_NUMBER;\n this.boxNumberPrefillData = null;\n this.boxNumber = null;\n // this.clearInput(focus: {setFocus: boolean, timestamp: Date});\n this.autocompleteBoxNb.clearInput(false, false);\n // this.autocompleteStreetNb.onClearStreetNumberInput(false, false);\n // this.autocompleteStreet.clearInput(false, false);\n // this.autocompleteLocality.clearInput(false, false);\n }\n */\n }\n\n resetLocality(event) {\n this.postalCode = '';\n this.locality = '';\n this.quitPrefillMode();\n this.onClearInputEventEmitter(InputNameType.STREET);\n this.setAddress(null, 4);\n }\n\n resetStreet(event) {\n this.street = '';\n this.quitPrefillMode();\n this.onClearInputEventEmitter(InputNameType.STREET_NUMBER);\n this.autocompleteStreetNb.addressIsComplete = false;\n this.autocompleteStreetNb.streetName = '';\n this.setAddress(null, 3);\n }\n\n resetStreetNumber(event, resetAddress: boolean = false) {\n // console.log('reset street numner!', event, resetAddress);\n this.streetNumber = '';\n this.quitPrefillMode();\n this.onClearInputEventEmitter(InputNameType.BOX_NUMBER);\n\n this.autocompleteBoxNb.addressIsComplete = false;\n this.autocompleteBoxNb.streetNumber = '';\n this.setAddress(null, 2);\n // $$ 7 this.setAddress(null, 2); // $$ ?????\n /*\n if (resetAddress === true) {\n this.setAddress(/ *null* / this.selectedAddress);\n }*/\n }\n\n resetBoxNumber(event, resetAddress: boolean = false) {\n // console.log('reset street numner!', event, resetAddress);\n this.boxNumber = '';\n this.quitPrefillMode();\n this.autocompleteBoxNb.addressIsComplete = false;\n this.setAddress(null, 1);\n // this.onClearInputEventEmitter(InputNameType.BOX_NUMBER);\n // $$ 7 this.setAddress(null, 1); // $$ ?????\n /*\n if (resetAddress === true) {\n this.setAddress(/ *null* / this.selectedAddress);\n }*/\n }\n\n enterPrefillMode() {\n if (this.showDebugMessageToConsole) {console.log('lib::enterPrefillMode()'); }\n if (this.autocompleteBoxNb && this.autocompleteStreetNb && this.autocompleteStreet && this.autocompleteLocality )\n {\n this.autocompleteBoxNb.prefilling = true;\n this.autocompleteStreetNb.prefilling = true;\n this.autocompleteStreet.prefilling = true;\n this.autocompleteLocality.prefilling = true;\n\n this.autocompleteStreet.locality = '';\n this.autocompleteStreetNb.streetName = '';\n this.autocompleteBoxNb.streetNumber = '';\n }\n\n }\n\n quitPrefillMode() {\n if (this.showDebugMessageToConsole) {console.log('lib::quitPrefillMode()'); }\n if (this.autocompleteBoxNb && this.autocompleteStreetNb && this.autocompleteStreet && this.autocompleteLocality )\n {\n this.autocompleteBoxNb.prefilling = false;\n this.autocompleteStreetNb.prefilling = false;\n this.autocompleteStreet.prefilling = false;\n this.autocompleteLocality.prefilling = false;\n }\n\n this.processingPrefillData = false;\n }\n\n setAddress(address: any, level?: number) {\n if (this.showDebugMessageToConsole) {console.log('lib::setAddress - address part, level', address, level); }\n\n /* $$ $$\n if (this.selectedAddress && !address) {\n // console.log('reset address!');\n this.selectedAddress = null;\n this.streetAddress = null;\n this.streetNumberAddress = null;\n this.notifyAddressComplete();\n return;\n }\n */\n if (address === null || address === undefined )\n {\n const doNotify = (this.selectedAddress !== null && this.selectedAddress !== undefined) ? true : false;\n this.selectedAddress = null;\n this.autocompleteStreetNb.addressIsComplete = false;\n this.autocompleteBoxNb.addressIsComplete = false;\n if (doNotify) {\n this.notifyAddressComplete();\n }\n }\n\n if (address) {\n delete address.messages;\n this.selectedAddress = address;\n this.updateCompleteAddress();\n this.postalCode = address.postalCode ? address.postalCode : '';\n this.locality = address.localityName ? address.localityName : '';\n this.street = address.streetName ? address.streetName : '';\n // const notInList = address['not-in-list'];\n // const isNotInList = notInList !== null && notInList !== undefined && notInList === true;\n /*\n if (address.houseNumber) {\n if (!address.isComplete || isNotInList) {\n this.streetNumber = address.houseNumber ? address.houseNumber : '';\n } else {\n if (!address.boxNumber) {\n // console.log('calling reset street number !');\n if ( !this.processingPrefillData ) {\n this.resetStreetNumber(null, false);\n }\n // this.streetNumber = '';\n }\n }\n }\n */\n\n const addressIsComplete = address !== null && address !== undefined\n && address.hasOwnProperty('isComplete') && address.isComplete === true ? true : false;\n const addressIsNotInList = address !== null && address !== undefined\n && address.hasOwnProperty('not-in-list') && address['not-in-list'] === true ? true : false;\n\n switch (level) {\n\n // Locality / Municipality and POstalCode\n case 4:\n this.updatePostalCodeLocality(address);\n /*\n this.autocompleteStreet.clearWidget();\n this.autocompleteStreetNb.searchText = '';\n this.autocompleteStreetNb.clearWidget();\n this.autocompleteStreetNb.searchText = '';\n this.autocompleteBoxNb.clearWidget();\n this.autocompleteBoxNb.searchText = '';\n */\n this.streetAddress = null;\n this.streetNumberAddress = null;\n //\n this.autocompleteStreet.searchText = '';\n this.autocompleteStreetNb.searchText = '';\n this.autocompleteStreetNb.streetName = '';\n this.autocompleteBoxNb.searchText = '';\n this.autocompleteBoxNb.streetNumber = '';\n break;\n\n // Street Name\n case 3:\n this.updatePostalCodeLocality(address);\n this.updateStreetName(address);\n this.streetAddress = address;\n this.streetNumberAddress = null;\n /*\n this.autocompleteStreetNb.clearWidget();\n this.autocompleteStreetNb.searchText = '';\n this.autocompleteBoxNb.clearWidget();\n this.autocompleteBoxNb.searchText = '';\n */\n this.autocompleteStreetNb.searchText = '';\n this.autocompleteBoxNb.searchText = '';\n this.autocompleteBoxNb.streetNumber = '';\n break;\n\n // STREET Number\n case 2:\n this.updatePostalCodeLocality(address);\n this.updateStreetName(address);\n this.updateStreetNumber(address); // $$\n this.streetAddress = address;\n this.streetNumberAddress = address;\n if (address.hasOwnProperty('isComplete') && address.isComplete === true )\n {\n this.autocompleteStreetNb.addressIsComplete = true;\n if (addressIsNotInList)\n {\n this.autocompleteBoxNb.streetNumber = address.houseNumber;\n }\n else\n {\n this.autocompleteBoxNb.streetNumber = '';\n }\n }\n else\n {\n this.autocompleteBoxNb.streetNumber = address.houseNumber;\n }\n /*\n this.autocompleteBoxNb.clearWidget();\n this.autocompleteBoxNb.searchText = '';\n */\n this.autocompleteBoxNb.searchText = '';\n break;\n\n // BOX Number\n case 1:\n {\n if (addressIsNotInList)\n {\n this.autocompleteStreetNb.addressIsComplete = false;\n }\n }\n break;\n\n default:\n break;\n }\n\n if ( this.selectedAddress && this.selectedAddress.isComplete === undefined) {\n this.selectedAddress.isComplete = false;\n }\n\n /*\n if (address.isComplete === true ) {\n if (!this.selectedAddress.isCompleteNotificationDone) {\n this.selectedAddress.isCompleteNotificationDone = true;\n this.notifyAddressComplete();\n }\n } else {\n this.notifyAddressComplete();\n }\n */\n\n this.selectedAddress.isCompleteNotificationDone = true;\n this.notifyAddressComplete();\n }\n }\n\n setLanguage(lang: string) {\n this.selectedLanguage = lang;\n }\n\n setValidationMessage(/*message: string*/message: {messageType: ValidationMessageType, translatedMessage: string}) {\n this.validationMessage = message;\n if (this.validationMessageOptionType === ValidationMessageOptionType.EMIT) {\n this.validationMessageEventEmitter.emit(message);\n }\n }\n\n\n updatePostalCodeLocality(address) {\n if (address && address.postalCode && address.localityName) {\n this.postalCodeLocality = address.postalCode + ' ' + address.localityName;\n this.autocompleteLocality.searchText = this.postalCodeLocality;\n }\n }\n\n updateStreetName(address) {\n if (address && address.streetName) {\n this.streetNameInput = address.streetName;\n }\n }\n\n updateStreetNumber(address) {\n if (address && address.houseNumber) {\n this.streetNumberInput = address.houseNumber;\n }\n }\n\n updateCompleteAddress() {\n let concatStr = '';\n concatStr += this.selectedAddress.streetName ? `${this.selectedAddress.streetName} ` : '';\n concatStr += this.selectedAddress.houseNumber ? `${this.selectedAddress.houseNumber} ` : '';\n concatStr += this.selectedAddress.boxNumber ? `${this.getBoxPrefix()} ${this.selectedAddress.boxNumber} ` : '';\n concatStr += this.selectedAddress.postalCode ? `${this.selectedAddress.postalCode} ` : '';\n concatStr += this.selectedAddress.municipalityName ? `${this.selectedAddress.municipalityName} ` : '';\n this.completeAddress = concatStr;\n }\n\n setValidationMessageOptionFromInput(option: {validationType: ValidationMessageOptionType, timestamp: Date}) {\n this.validationMessageOptionType = option.validationType;\n // console.log('addresse autocomplete - validation message option', this.validationMessageOptionType);\n }\n\n onLocalityPrefillEvent(event: PrefillEvent) {\n if (this.showDebugMessageToConsole) {console.log('lib::locality prefill event received:', event); }\n /*\n if (event.perfectMatch)\n {\n this.addressParams.minLevel = / *3* / ADDRESSLEVEL.STREET;\n this.streetParams = this.addressParams;\n }\n */\n const data = event.prefillData;\n if (event.prefillData.prefillMunicipalityPerfectMatchFound === true )\n {\n const suggestion = data.prefillMunicipalityPerfectMatchSuggestion;\n const address = suggestion.address;\n this.updatePostalCodeLocality(address);\n this.addressParams.minLevel = /*4*/ ADDRESSLEVEL.STREET;\n // this.localityPrefillData = this.addressParams; // as any as PrefillData;\n // this.localityPrefillData = new PrefillData(this.addressParams);\n // Object.assign(this.localityPrefillData, this.addressParams);\n this.prefillData = event.prefillData;\n this.prefillData.ts = new Date();\n this.prefillData.parameters.minLevel = ADDRESSLEVEL.STREET;\n // Be sure to propagate the localityName in place of the municipalityName !\n const suggestionAddress = this.prefillData.prefillMunicipalityPerfectMatchSuggestion.address;\n const suggestionAddressLocalityName = suggestionAddress.localityName;\n this.prefillData.parameters.municipalityName = suggestionAddressLocalityName;\n this.prefillData.parameters.postalCode = suggestionAddress.postalCode;\n // this.updatePostalCodeLocality(suggestionAddress);\n\n const streetName = this.prefillData.parameters.streetName;\n if (streetName === null || streetName === undefined || streetName === '')\n {\n this.setAddress(address, ADDRESSLEVEL.LOCALITY);\n // this.quitPrefillMode();\n // this.updatePostalCodeLocality(suggestionAddress);\n }\n\n /*\n const streetName = this.prefillData.parameters.streetName;\n if (streetName === null || streetName === undefined || streetName === '')\n {\n this.setAddress(address, ADDRESSLEVEL.LOCALITY);\n this.quitPrefillMode();\n // this.updatePostalCodeLocality(suggestionAddress);\n }\n else\n {\n if (this.showDebugMessageToConsole) { console.log('lib::prefill: trigger checking street match... ', this.prefillData); }\n this.streetPrefillData = this.prefillData;\n }\n */\n\n this.streetPrefillData = this.prefillData;\n }\n else\n {\n // const cpAndLocality = this.prefillData.parameters.postalCode + this.prefillData.parameters.municipalityName;\n const cpAndLocality = data.parameters.postalCode + data.parameters.municipalityName;\n this.autocompleteStreet.locality = '';\n if ( cpAndLocality === null || cpAndLocality === undefined || cpAndLocality.length === 0 )\n {\n this.setAddress(null, ADDRESSLEVEL.LOCALITY);\n }\n this.quitPrefillMode();\n }\n }\n\n onStreetPrefillEvent(event: PrefillEvent) {\n if (this.showDebugMessageToConsole) {console.log('lib::street: prefill event received', event); }\n /*\n const data: PrefillData = event.prefillData;\n if (data.prefillStreetPerfectMatchFound === true )\n {\n console.log('lib::onStreetPrefillEvent: MATCH FOUND', data);\n this.postalCodeLocality = 'TRUC-MUCHE';\n this.postalCodeLocality = 'TRUC-MUCHE 2';\n this.autocompleteLocality.searchText = this.postalCodeLocality;\n }\n */\n const data = event.prefillData;\n if (event.prefillData.prefillStreetPerfectMatchFound === true )\n {\n // if (this.showDebugMessageToConsole) { console.log('lib::onStreetPrefillEvent: MATCH FOUND', data); }\n const suggestion = data.prefillStreetPerfectMatchSuggestion;\n const address = suggestion.address;\n this.updateStreetName(address);\n this.addressParams.minLevel = ADDRESSLEVEL.STREET_NUMBER;\n // this.localityPrefillData = this.addressParams; // as any as PrefillData;\n // this.localityPrefillData = new PrefillData(this.addressParams);\n // Object.assign(this.localityPrefillData, this.addressParams);\n this.prefillData = event.prefillData;\n this.prefillData.ts = new Date();\n this.prefillData.parameters.minLevel = ADDRESSLEVEL.STREET_NUMBER;\n const suggestionAddress = this.prefillData.prefillStreetPerfectMatchSuggestion.address;\n const suggestionAddressLocalityName = suggestionAddress.localityName;\n this.prefillData.parameters.municipalityName = suggestionAddressLocalityName;\n this.prefillData.parameters.postalCode = suggestionAddress.postalCode;\n this.prefillData.parameters.streetName = suggestionAddress.streetName;\n // this.updatePostalCodeLocality(suggestionAddress);\n // this.updatePostalCodeLocality(suggestionAddress);\n\n const streetNumber = this.prefillData.parameters.streetNumber;\n if (streetNumber === null || streetNumber === undefined || streetNumber === '')\n {\n this.setAddress(address, ADDRESSLEVEL.STREET);\n // this.quitPrefillMode();\n }\n\n /*\n const streetNumber = this.prefillData.parameters.streetNumber;\n if (streetNumber === null || streetNumber === undefined || streetNumber === '')\n {\n this.setAddress(address, ADDRESSLEVEL.STREET);\n this.quitPrefillMode();\n }\n else\n {\n if (this.showDebugMessageToConsole) {console.log('lib::prefill: trigger checking street number match... ', this.prefillData);}\n this.streetNumberPrefillData = this.prefillData;\n }\n */\n\n this.streetNumberPrefillData = this.prefillData;\n }\n else\n {\n const prefillStreetName = this.prefillData.parameters.streetName;\n const address = this.prefillData.prefillMunicipalityPerfectMatchSuggestion.address;\n this.autocompleteStreetNb.streetName = '';\n\n if (this.showDebugMessageToConsole) {\n console.error('lib::onStreetPrefillEvent - NO MATCH AT STREET LEVEL', prefillStreetName );\n }\n\n if ( prefillStreetName === null || prefillStreetName === undefined || prefillStreetName.length === 0 )\n {\n // if (this.showDebugMessageToConsole) {console.log('lib::onStreetPrefillEvent: NO MATCH FOUND - set address', data, address); }\n this.setAddress(address, ADDRESSLEVEL.LOCALITY);\n }\n else\n {\n // address.streetName = prefillStreetName;\n address.searchBarString = prefillStreetName;\n this.setAddress(address, ADDRESSLEVEL.STREET);\n }\n this.quitPrefillMode();\n }\n }\n\n onStreetNumberPrefillEvent(event: PrefillEvent) {\n if (this.showDebugMessageToConsole) { console.log('lib::street number prefill event received:', event); }\n const data = event.prefillData;\n if (data.prefillStreetNumberPerfectMatchFound === true)\n {\n const suggestion = data.prefillStreetNumberPerfectMatchSuggestion;\n const address = suggestion.address;\n this.updateStreetNumber(address);\n this.autocompleteStreetNb.selectedAddress = address;\n\n const addressIsComplete = address && address.hasOwnProperty('isComplete') && address.isComplete === true ? true : false;\n const addressIsNotInList = address && address.hasOwnProperty('not-in-list') && address['not-in-list'] === true ? true : false;\n\n if (addressIsComplete && ! addressIsNotInList )\n {\n // found address - perfect matchat street number level\n // Nothing to do anymore\n this.autocompleteStreetNb.addressIsComplete = true;\n this.quitPrefillMode();\n }\n else\n {\n this.addressParams.minLevel = ADDRESSLEVEL.BOX_NUMBER;\n this.prefillData = event.prefillData;\n this.prefillData.ts = new Date();\n this.prefillData.parameters.minLevel = ADDRESSLEVEL.BOX_NUMBER;\n // const suggestionAddressLocalityName\n // = this.prefillData.prefillStreetNumberPerfectMatchSuggestion.address.localityName;\n\n const suggestionAddress = this.prefillData.prefillStreetNumberPerfectMatchSuggestion.address;\n const suggestionAddressLocalityName = suggestionAddress.localityName;\n this.prefillData.parameters.municipalityName = suggestionAddressLocalityName;\n this.prefillData.parameters.municipalityName = suggestionAddressLocalityName;\n this.prefillData.parameters.postalCode = suggestionAddress.postalCode;\n this.prefillData.parameters.streetName = suggestionAddress.streetName;\n this.prefillData.parameters.streetNumber = suggestionAddress.houseNumber;\n // this.updatePostalCodeLocality(suggestionAddress);\n // this.updatePostalCodeLocality(suggestionAddress);\n\n const boxNumber = this.prefillData.parameters.boxNumber;\n if ( ! addressIsNotInList && (boxNumber === null || boxNumber === undefined || boxNumber === '') )\n {\n this.setAddress(address, ADDRESSLEVEL.STREET_NUMBER);\n // this.quitPrefillMode();\n }\n\n /*\n const boxNumber = this.prefillData.parameters.boxNumber;\n if ( ! addressIsNotInList && (boxNumber === null || boxNumber === undefined || boxNumber === '') )\n {\n this.setAddress(address, ADDRESSLEVEL.STREET_NUMBER);\n this.quitPrefillMode();\n }\n else\n {\n if (this.showDebugMessageToConsole) { console.log('lib::prefill: trigger checking box number match... ', this.prefillData); }\n this.boxNumberPrefillData = this.prefillData;\n }\n */\n\n this.boxNumberPrefillData = this.prefillData;\n }\n }\n else\n {\n const prefillStreetNumber = this.prefillData.parameters.streetNumber;\n const address = this.prefillData.prefillStreetPerfectMatchSuggestion.address;\n this.autocompleteBoxNb.streetNumber = '';\n if ( prefillStreetNumber === null || prefillStreetNumber === undefined || prefillStreetNumber.length === 0 )\n {\n this.setAddress(address, ADDRESSLEVEL.STREET);\n }\n else\n {\n // address.houseNumber = prefillStreetNumber;\n address.searchBarString = prefillStreetNumber;\n this.setAddress(address, ADDRESSLEVEL.STREET_NUMBER);\n }\n this.quitPrefillMode();\n }\n }\n\n onBoxNumberPrefillEvent(event: PrefillEvent) {\n if (this.showDebugMessageToConsole) { console.log('lib::prefill: box number event received:', event); }\n const data = event.prefillData;\n if (data.prefillBoxNumberPerfectMatchFound === true)\n {\n const suggestion = data.prefillBoxNumberPerfectMatchSuggestion;\n const address = suggestion.address;\n this.autocompleteBoxNb.selectedAddress = address;\n this.setAddress(address, ADDRESSLEVEL.BOX_NUMBER);\n }\n else\n {\n const prefillBoxNumber = this.prefillData.parameters.boxNumber;\n const address = this.prefillData.prefillStreetNumberPerfectMatchSuggestion.address;\n if ( prefillBoxNumber === null || prefillBoxNumber === undefined || prefillBoxNumber.length === 0 )\n {\n this.setAddress(address, ADDRESSLEVEL.STREET_NUMBER);\n }\n else\n {\n // address.boxNumber = prefillBoxNumber;\n address.searchBarString = prefillBoxNumber;\n this.setAddress(address, ADDRESSLEVEL.BOX_NUMBER);\n }\n }\n this.quitPrefillMode();\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { DomSanitizer } from '@angular/platform-browser';\n\n@Pipe({\n name: 'highlightSuggestion'\n})\nexport class HighlightSuggestionPipe implements PipeTransform {\n\n constructor(private sanitizer: DomSanitizer) {}\n\n transform(value: any, args?: any): any {\n\n if (!args) {\n return value;\n }\n\n if (Array.isArray(args) && args.length > 1 ) {\n return this.transformForArray(value, args);\n }\n\n if (args === '.') {\n args = '\\\\.';\n } else if (Array.isArray(args) && args.length === 1 ) {\n if (args[0] === '.') {\n args[0] = '\\\\.';\n }\n }\n\n // Match in a case insensitive manner\n const re = new RegExp(args, 'gi');\n const match = value.match(re);\n\n // If there's no match, just return the original value.\n if (!match) {\n return value;\n }\n\n /* console.warn('HighlightSuggestionPipe::transform: value=' + value);\n console.warn('HighlightSuggestionPipe::transform: args=' + args);\n console.warn('HighlightSuggestionPipe::transform: match=' + match); */\n\n const replacedValue = value.replace(re, '<span style=\\'font-weight: bold;\\'>' + match[0] + '</span>');\n // console.warn('HighlightSuggestionPipe::transform: replacedValue=' + replacedValue);\n return this.sanitizer.bypassSecurityTrustHtml(replacedValue);\n }\n\n private transformForArray(value: any, args: any): any {\n\n let query = '';\n let ix = 0;\n for (const word of args) {\n ix++;\n if (ix < args.length) {\n query = query.concat( word + '|');\n } else {\n query = query.concat( word );\n }\n }\n\n // console.warn('HighlightSuggestionPipe::transformForArray', value, args, query);\n\n const replacedValue = value.replace(new RegExp('(' + query + ')', 'gi'), '<span style=\"font-weight: bold;\">$1</span>');\n return this.sanitizer.bypassSecurityTrustHtml(replacedValue);\n }\n}\n","import { Directive, Input, ElementRef, AfterViewChecked, Renderer2 } from '@angular/core';\nimport { DomHandler } from './domhandler';\n\n@Directive({\n selector: '[appVisibleSuggestion]'\n})\nexport class VisibleSuggestionDirective implements AfterViewChecked {\n\n @Input()\n appVisibleSuggestion: number;\n\n constructor(private el: ElementRef, private renderer: Renderer2) { }\n\n ngAfterViewChecked() {\n this.showHeight(this.el.nativeElement, this.appVisibleSuggestion);\n }\n\n showHeight(parent: HTMLElement, count: number) {\n if (!parent) { return; }\n\n // const children = parent.getElementsByClassName('list-option');\n // const children = parent.querySelectorAll('li');\n const children = parent.firstElementChild.children;\n\n if (!children || children.length === 0) { return; }\n\n const sum = Array.from(children).slice(0, count).reduce((acc, ele) => {\n return acc + DomHandler.getOuterHeight(ele);\n }, 7);\n\n this.renderer.setStyle(this.el.nativeElement, 'maxHeight', `${sum}px`);\n\n // this.el.nativeElement.style.maxHeight = `${sum}px`;\n }\n\n}\n","import { NgModule } from '@angular/core';\nimport { LibAddressAutocompleteByComponentComponent } from './lib-address-autocomplete-by-component.component';\nimport { LocalityComponent } from './locality/locality.component';\nimport { StreetComponent } from './street/street.component';\nimport { StreetNumberComponent } from './street-number/street-number.component';\nimport { BoxNumberComponent } from './box-number/box-number.component';\nimport { CommonModule } from '@angular/common';\nimport { BrowserModule } from '@angular/platform-browser';\nimport { BrowserAnimationsModule } from '@angular/platform-browser/animations';\nimport { HttpClientModule } from '@angular/common/http';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { TranslateModule } from '@ngx-translate/core';\nimport { HighlightSuggestionPipe } from './utils/highlight-suggestion.pipe';\nimport { VisibleSuggestionDirective } from './utils/visible-suggestion.directive';\nimport { PrefilledParameters } from './utils/prefilled-parameters';\n\n\n\n@NgModule({\n declarations: [\n HighlightSuggestionPipe,\n VisibleSuggestionDirective,\n LibAddressAutocompleteByComponentComponent,\n LocalityComponent,\n StreetComponent,\n StreetNumberComponent,\n BoxNumberComponent\n ],\n imports: [\n CommonModule,\n // BrowserModule,\n // BrowserAnimationsModule,\n HttpClientModule,\n FormsModule,\n ReactiveFormsModule,\n TranslateModule,\n ],\n exports: [\n LibAddressAutocompleteByComponentComponent,\n ]\n})\nexport class LibAddressAutocompleteByComponentModule { }\n","import { ADDRESSLEVEL } from '../enum/address-level.enum';\r\n\r\nexport class PrefilledParameters {\r\n\r\n // unstructuredAddress: string;\r\n streetName: string;\r\n streetNumber: string;\r\n boxNumber: string;\r\n postalCode: string;\r\n municipalityName: string;\r\n state: boolean;\r\n minLevel: number;\r\n\r\n // used by the prefill address evaluation process\r\n onFocusShowSuggestionsAfterPrefill = false; // 2020-06-15\r\n\r\n ts: Date = null;\r\n\r\n constructor(init?: Partial<PrefilledParameters>) {\r\n Object.assign(this, init);\r\n if (this.boxNumber && this.boxNumber !== '') {\r\n this.minLevel = ADDRESSLEVEL.BOX_NUMBER;\r\n } else if (this.streetNumber && this.streetNumber !== '') {\r\n this.minLevel = ADDRESSLEVEL.STREET_NUMBER;\r\n } else if (this.streetName && this.streetName !== '') {\r\n this.minLevel = ADDRESSLEVEL.STREET;\r\n } else {\r\n this.minLevel = ADDRESSLEVEL.LOCALITY;\r\n }\r\n\r\n this.ts = new Date();\r\n }\r\n}\r\n"]}
1
+ {"version":3,"sources":["../../../node_modules/tslib/tslib.es6.js","ng://@bpost/bp-address-auto-complete-by-component/lib/enum/validation-message-option-type.enum.ts","ng://@bpost/bp-address-auto-complete-by-component/lib/enum/validation-message-type.enum.ts","ng://@bpost/bp-address-auto-complete-by-component/lib/enum/address-level.enum.ts","ng://@bpost/bp-address-auto-complete-by-component/lib/lib-address-autocomplete-by-component.service.ts","ng://@bpost/bp-address-auto-complete-by-component/lib/model/query-parameters.model.ts","ng://@bpost/bp-address-auto-complete-by-component/lib/enum/source-type.enum.ts","ng://@bpost/bp-address-auto-complete-by-component/lib/services/http.service.ts","ng://@bpost/bp-address-auto-complete-by-component/lib/model/Locality.ts","ng://@bpost/bp-address-auto-complete-by-component/lib/model/Street.ts","ng://@bpost/bp-address-auto-complete-by-component/lib/model/Box.ts","ng://@bpost/bp-address-auto-complete-by-component/lib/services/adress.service.ts","ng://@bpost/bp-address-auto-complete-by-component/lib/services/locale.service.ts","ng://@bpost/bp-address-auto-complete-by-component/lib/services/unicode.service.ts","ng://@bpost/bp-address-auto-complete-by-component/lib/utils/domhandler.ts","ng://@bpost/bp-address-auto-complete-by-component/lib/utils/preflll.event.ts","ng://@bpost/bp-address-auto-complete-by-component/lib/enum/input-name.enum.ts","ng://@bpost/bp-address-auto-complete-by-component/lib/locality/locality.component.ts","ng://@bpost/bp-address-auto-complete-by-component/lib/street/street.component.ts","ng://@bpost/bp-address-auto-complete-by-component/lib/street-number/street-number.component.ts","ng://@bpost/bp-address-auto-complete-by-component/lib/box-number/box-number.component.ts","ng://@bpost/bp-address-auto-complete-by-component/lib/utils/prefill-data.ts","ng://@bpost/bp-address-auto-complete-by-component/lib/services/nis9.service.ts","ng://@bpost/bp-address-auto-complete-by-component/lib/lib-address-autocomplete-by-component.component.ts","ng://@bpost/bp-address-auto-complete-by-component/lib/utils/highlight-suggestion.pipe.ts","ng://@bpost/bp-address-auto-complete-by-component/lib/utils/visible-suggestion.directive.ts","ng://@bpost/bp-address-auto-complete-by-component/lib/lib-address-autocomplete-by-component.module.ts","ng://@bpost/bp-address-auto-complete-by-component/lib/utils/prefilled-parameters.ts"],"names":["__assign","Object","assign","t","s","i","n","arguments","length","p","prototype","hasOwnProperty","call","apply","this","__decorate","decorators","target","key","desc","d","c","r","getOwnPropertyDescriptor","Reflect","decorate","defineProperty","__values","o","Symbol","iterator","m","next","value","done","TypeError","ValidationMessageOptionType","ValidationMessageType","ADDRESSLEVEL","LibAddressAutocompleteByComponentService","Injectable","providedIn","SourceType","QueryParameters","init","sortByPostalCode","enable","sortByPostalCodeLocalityName","sortByLocalityname","sortByLocalityNamePostalCode","sortByStreet","sortByStreetName","sortByStreetNb","sortByStreetNumber","sortByBox","sortByBoxNumber","HttpService","httpClient","openConnections","apiKey","setApiKey","getHttpHeaders","headers","HttpHeaders","set","get","url","options","request","method","_this","console","log","JSON","stringify","pipe","map","response","handleResponse","catchError","error","handleError","throwError","HttpClient","Locality","json","sequenceNumber","topSuggestions","forEach","element","push","AddressSuggestion","address","Address","municipalityId","subMunicipalityId","detectedLanguage","geoSanction","searchBarString","string","municipalityName","localityName","postalCode","Street","AddressSuggestion$1","Address$1","Box","AddressSuggestion$2","Address$2","AddressService","httpService","domain","localityURL","nis9InResponse","nis9ServiceURL","getLocality","baseUrl","params","tap","handleGetLocality","getStreet","locality","postalcode","replace","handleGetStreet","getBox","handleGetBox","LocaleService","inputLanguageEvent","BehaviorSubject","undefined","currentLang","asObservable","changeLang","lang","isLocaleDutch","isPreferredLocale","isLocaleFrench","isLocaleGerman","locale","getValue","window","navigator","language","indexOf","diacriticsRemovalMap","base","letters","UnicodeService","defaultDiacriticsRemovalMap","diacriticsMap","split","char","removeDiacritics","str","a","ngOnDestroy","DomHandler","findSingle","selector","querySelector","scrollInView","container","item","borderTopValue","getComputedStyle","getPropertyValue","borderTop","parseFloat","paddingTopValue","paddingTop","containerRect","getBoundingClientRect","offset","top","document","body","scrollTop","scroll","elementHeight","clientHeight","itemHeight","getOuterHeight","getInnerHeight","el","height","offsetHeight","style","paddingBottom","margin","marginTop","marginBottom","getHeight","borderTopWidth","borderBottomWidth","InputNameType","PrefillEvent","addressLevel","prefillData","LocalityComponent","addressService","localeService","translateService","unicodeService","labelResourceKey","messageOption","maxSuggesionCount","visibleSuggestionCount","sortCriteria","showDebugMessageToConsole","isReadonly","messageChanged","EventEmitter","addressChanged","focusEvent","blurEvent","textChangeEvent","clearInputEventEmitter","prefillEventEmitter","validationMessageCode","validationMessageOptions","prefilling","isPrefillWithNoMatch","val","use","subscribe","res","onChangedLanguage","ngOnInit","searchText","addressIsValidated","suggestionValidationMessage","suggestions","previousIndex","lastSearchValue","wordList","suggestionsWordList","bpTypeAhead","placeHolderText","skipNextBlur","errorCode","selectedIndex","typeAheadWord","collapseDropdown","consumedNumber","setSearchText","ngAfterViewChecked","selectionChanged","overlay_1","localityList","nativeElement","setTimeout","listItem","ngOnChanges","changes","firstChange","loadParams","currentValue","minLevel","LOCALITY","prefillMunicipalityName","transformMunicipalityInLowercaseAndWithoutDiacritics","parameters","onInputChange","SOURCE_PREFILLED","inputText","notEqualIgnoreCase","clearWidget","result","toLowerCase","subscription","unsubscribe","buildInputWordList","_c","_d","sug","w","start","this_1","startsWithIgnoreDiacritics","ww_1","substr","present","find","w1","_e","e_2","_f","stringStartsWithIgnoreDiacritics","prefix","_value","_prefix","slice","buildTypeAhead","source","mayAddTypeAhead","searchTextWords","lastWord","some","word","bind","appendix","clearConnectionErrorMessage","instant","clearSuggestionValidationMessage","clearTypeAhead","emitTranslatedValidationMessage","validationMessageType","Address_Not_Found","Address_Validated","Service_Unavailable","message","emit","messageType","translatedMessage","warn","generateParameters","param","id","q","maxNumberOfSuggestions","getTopSuggestions","handleGetLocalityResponse","prefillMunicipalityPerfectMatchFound","prefillAnalyzeData","handleGetLocalityError","getTextColor","data","clearSuggestions","parseTopSuggestions","onFocusShowSuggestionsAfterPrefill","setConnectionErrorMessage","isBrowserIE","test","userAgent","isDropdownClicked","ev","explicitOriginalTarget","activeElement","isString","constructor","String","concatStr","mayShowClearButton","oldVal","newVal","onBlur","localitySearchInput","focus","onFocus","onInputClick","resetArrowSelectedIndex","valueChanged","parseSingleSuggestion","suggestion","suggestionToAdd","french","dutch","german","messages","_b","translateMessage","prefillCheckForPerfectMatch","sugAddress","suggestionLocality","suggestionMunicipality","prefillMunicipalityAndLocalityPerfectMatchFound","prefillMunicipalityPerfectMatchSuggestion","Array","topSuggestions_1","topSuggestions_1_1","clearInput","clearSelectedAddress","clearSearchText","clickSuggestion","event","preventDefault","setSelectedAddress","cursorIsOnSuggestionList","changeSelection","moveArrowSelectedIndexDown","setSearchTextBasedOnArrowSelection","moveArrowSelectedIndexUp","checkKeyDown","which","typeAheadIsShown","selectFirstInListOfSuggesions","ctrlKey","args","sub","principal","TranslateService","ViewChild","static","Input","Output","Component","template","StreetComponent","visibleSuggesionCount","streetList","STREET","prefillStreetName","transformStreetNameInLowercaseAndWithoutDiacritics","streetName","onClearInputEvent","streetSearchInput","mayShowDropdown","handleGetStreetResponse","prefillStreetPerfectMatchFound","handleGetStreetError","isParamsComplete","isValid","prefillStreetPerfectMatchSuggestion","showAddressIsValidated","shiftKey","suggestionMouseLeave","showAddressNotFoundMessage","isDisabled","StreetNumberComponent","emptyResponseEvent","addressIsComplete","setEmptyResponseText","emptyResponse","streetNumberList","STREET_NUMBER","prefillStreetNumber","transformStreetNumberInLowercaseAndWithoutDiacritics","streetNumber","emptyResponseText","streetNumberSearchInput","getBackgroundColor","prefillStreetNumberPerfectMatchFound","street","notInListAllowed","prefillBuildNotInListSuggestion","not-in-list","notInListSuggestion","streetSuggestion","combined","mailBoxid","suffixId","houseNumber","isComplete","bn","boxNumber","suggestionStreetNumber","prefillStreetNumberPerfectMatchSuggestion","notInList","isNotInList","modifySelectedAddress","selectedAddress","latitude","longitude","mailboxId","pdpId","notifyAddressIsValidated","onClearStreetNumberInput","BoxNumberComponent","boxNumberList","BOX_NUMBER","prefillBoxNumber","transformBoxNumberInLowercaseAndWithoutDiacritics","boxNumberSearchInput","handleGetBoxResponse","prefillBoxNumberPerfectMatchFound","handleGetBoxError","streetNumberSuggestion","suggestionBoxNumber","prefillBoxNumberPerfectMatchSuggestion","PrefillData","ts","Date","Nis9Service","setNis9ServiceURL","determineNis9Data","apiUrl","LibAddressAutocompleteByComponentComponent","nis9Service","selectedLanguage","localityUrl","maxSuggestionLocality","visibleSuggestionLocalityCount","localityPrefillData","streetUrl","maxSuggestionStreet","visibleSuggestionStreetCount","streetPrefillData","streetNumberUrl","maxSuggestionStreetNb","visibleSuggestionStreetNbCount","streetNumberPrefillData","boxNumberUrl","maxSuggestionBoxNb","visibleSuggestionBoxNbCount","boxNumberPrefillData","emittedAddress","validationMessage","addressCompleteEventEmitter","validationMessageEventEmitter","processingPrefillData","setLanguage","onClearInput","option","setValidationMessageOptionFromInput","addressParams","displayParametersChangesToConsole","enterPrefillMode","notifyAddressComplete","wcChanges","sortCriteriaLocality","sortCriteriaStreet","sortCriteriaStreetNb","sortCriteriaBoxNb","autocompleteBoxNb","autocompleteStreetNb","autocompleteStreet","autocompleteLocality","changeMinLevel","quitPrefillMode","setFocus","getBoxPrefix","Status","nis9Data","isArray","nis9","updatePostalCodeLocality","onClearInputEventEmitter","nextAddress","streetNumberAddress","resetLocality","setAddress","resetStreet","resetStreetNumber","resetAddress","resetBoxNumber","level","doNotify","updateCompleteAddress","addressIsNotInList","streetAddress","updateStreetName","updateStreetNumber","isCompleteNotificationDone","setValidationMessage","validationMessageOptionType","EMIT","postalCodeLocality","streetNameInput","streetNumberInput","completeAddress","validationType","onLocalityPrefillEvent","suggestionAddress","suggestionAddressLocalityName","cpAndLocality","onStreetPrefillEvent","onStreetNumberPrefillEvent","onBoxNumberPrefillEvent","HighlightSuggestionPipe","sanitizer","transform","transformForArray","re","RegExp","match","replacedValue","bypassSecurityTrustHtml","query","ix","args_1","args_1_1","concat","DomSanitizer","Pipe","name","VisibleSuggestionDirective","renderer","showHeight","appVisibleSuggestion","parent","count","children","firstElementChild","sum","from","reduce","acc","ele","setStyle","ElementRef","Renderer2","Directive","LibAddressAutocompleteByComponentModule","NgModule","declarations","imports","CommonModule","HttpClientModule","FormsModule","ReactiveFormsModule","TranslateModule","exports"],"mappings":";;;;;;;;;;;;;;oFA6BO,IAAIA,EAAW,WAQlB,OAPAA,EAAWC,OAAOC,QAAU,SAAkBC,GAC1C,IAAK,IAAIC,EAAGC,EAAI,EAAGC,EAAIC,UAAUC,OAAQH,EAAIC,EAAGD,IAE5C,IAAK,IAAII,KADTL,EAAIG,UAAUF,GACOJ,OAAOS,UAAUC,eAAeC,KAAKR,EAAGK,KAAIN,EAAEM,GAAKL,EAAEK,IAE9E,OAAON,IAEKU,MAAMC,KAAMP,YAezB,SAASQ,EAAWC,EAAYC,EAAQC,EAAKC,GAChD,IAA2HC,EAAvHC,EAAId,UAAUC,OAAQc,EAAID,EAAI,EAAIJ,EAAkB,OAATE,EAAgBA,EAAOlB,OAAOsB,yBAAyBN,EAAQC,GAAOC,EACrH,GAAuB,iBAAZK,SAAoD,mBAArBA,QAAQC,SAAyBH,EAAIE,QAAQC,SAAST,EAAYC,EAAQC,EAAKC,QACpH,IAAK,IAAId,EAAIW,EAAWR,OAAS,EAAGH,GAAK,EAAGA,KAASe,EAAIJ,EAAWX,MAAIiB,GAAKD,EAAI,EAAID,EAAEE,GAAKD,EAAI,EAAID,EAAEH,EAAQC,EAAKI,GAAKF,EAAEH,EAAQC,KAASI,GAChJ,OAAOD,EAAI,GAAKC,GAAKrB,OAAOyB,eAAeT,EAAQC,EAAKI,GAAIA,EA0DzD,SAASK,EAASC,GACrB,IAAIxB,EAAsB,mBAAXyB,QAAyBA,OAAOC,SAAUC,EAAI3B,GAAKwB,EAAExB,GAAIC,EAAI,EAC5E,GAAI0B,EAAG,OAAOA,EAAEnB,KAAKgB,GACrB,GAAIA,GAAyB,iBAAbA,EAAEpB,OAAqB,MAAO,CAC1CwB,KAAM,WAEF,OADIJ,GAAKvB,GAAKuB,EAAEpB,SAAQoB,OAAI,GACrB,CAAEK,MAAOL,GAAKA,EAAEvB,KAAM6B,MAAON,KAG5C,MAAM,IAAIO,UAAU/B,EAAI,0BAA4B,uCC3H5CgC,ECAAC,ECAAC,eCOV,SAAAC,uGAFWA,EAAwCxB,EAAA,CAHpDyB,EAAAA,WAAW,CACVC,WAAY,UAEDF,OHLDH,EAAAA,EAAAA,8BAAAA,EAAAA,4BAA2B,KACnC,KAAA,OACAA,EAAA,KAAA,QCFQC,EAAAA,EAAAA,wBAAAA,EAAAA,sBAAqB,KAC7B,kBAAA,oBACAA,EAAA,kBAAA,oBACAA,EAAA,oBAAA,uBCHQC,EAAAA,EAAAA,eAAAA,EAAAA,aAAY,KACpBA,EAAA,WAAA,GAAA,aACAA,EAAAA,EAAA,cAAA,GAAA,gBACAA,EAAAA,EAAA,OAAA,GAAA,SACAA,EAAAA,EAAA,SAAA,GAAA,WEJJ,ICAYI,EDAZC,EAAA,WAcI,SAAAA,EAAYC,GACR3C,OAAOC,OAAOY,KAAM8B,GAsB5B,OAnBID,EAAAjC,UAAAmC,iBAAA,SAAiBC,GACbhC,KAAKiC,6BAA+BD,GAGxCH,EAAAjC,UAAAsC,mBAAA,SAAmBF,GACfhC,KAAKmC,6BAA+BH,GAGxCH,EAAAjC,UAAAwC,aAAA,SAAaJ,GACThC,KAAKqC,iBAAmBL,GAG5BH,EAAAjC,UAAA0C,eAAA,SAAeN,GACXhC,KAAKuC,mBAAqBP,GAG9BH,EAAAjC,UAAA4C,UAAA,SAAUR,GACNhC,KAAKyC,gBAAkBT,GAE/BH,EArCA,gBEaE,SAAAa,EAAoBC,GAAA3C,KAAA2C,WAAAA,EAFZ3C,KAAA4C,gBAAkB,EAIlB5C,KAAA6C,OAAS,kBAEjBH,EAAA9C,UAAAkD,UAAA,SAAUD,GAER7C,KAAK6C,OAASA,GAGhBH,EAAA9C,UAAAmD,eAAA,WAEE,IAAIC,EAAQ,IAAIC,EAAAA,YAIhB,OADAD,EAAQA,EAAQE,IAAI,YAA4DlD,KAAK6C,SAIvFH,EAAA9C,UAAAuD,IAAA,SAAIC,EAAaC,GACf,OAAOrD,KAAKsD,QAAQ,MAAOF,EAAKC,IAG1BX,EAAA9C,UAAA0D,QAAR,SAAgBC,EAAaH,EAAcC,GAA3C,IAAAG,EAAAxD,KAME,OAJAqD,EAAOnE,EAAAA,EAAA,GADPmE,EAAYA,GAAoB,IACX,CAAEL,QAAUhD,KAAK+C,mBACtCU,QAAQC,IAAI,WAAYC,KAAKC,UAAUP,IAEvCrD,KAAK4C,kBACE5C,KAAK2C,WAAWW,QAAQC,EAAQH,EAAKC,GAASQ,KACnDC,EAAAA,KAAI,SAACC,GAAuB,OAAAP,EAAKQ,eAAeD,MAChDE,EAAAA,YAAW,SAACC,GAAe,OAAAV,EAAKW,YAAYD,QAGxCxB,EAAA9C,UAAAoE,eAAR,SAAuBD,GAErB,OADA/D,KAAK4C,kBACEmB,GAGDrB,EAAA9C,UAAAuE,YAAR,SAAoBD,GAElB,OADAlE,KAAK4C,kBACEwB,EAAAA,WAAWF,6CAxCYG,EAAAA,mIAJrB3B,EAAWzC,EAAA,CAHvByB,EAAAA,WAAW,CACVC,WAAY,UAEDe,MCTb4B,EAII,SAAYC,GAAZ,IAAAf,EAAAxD,KACIA,KAAKwE,eAAiBD,EAAKC,eACvBD,EAAKE,gBAAkBF,EAAKE,eAAe/E,OAAS,IACpDM,KAAKyE,eAAiB,GACtBF,EAAKE,eAAeC,SAAQ,SAAAC,GACxBnB,EAAKiB,eAAeG,KAAK,IAAIC,EAAkBF,SAM/DE,EAGI,SAAYN,GACRvE,KAAK8E,QAAUP,EAAKO,QAAU,IAAIC,EAAQR,EAAKO,SAAW,MAIlEC,EAWI,SAAYR,GACRvE,KAAKgF,eAAiBT,EAAKS,eAC3BhF,KAAKiF,kBAAoBV,EAAKU,kBAC9BjF,KAAKkF,iBAAmBX,EAAKW,iBAC7BlF,KAAKmF,YAAcZ,EAAKY,YACxBnF,KAAKoF,gBAAkBb,EAAKa,gBAC5BpF,KAAKqF,OAASd,EAAKc,OACnBrF,KAAKsF,iBAAmBf,EAAKe,iBAC7BtF,KAAKuF,aAAehB,EAAKgB,aACzBvF,KAAKwF,WAAajB,EAAKiB,YC3C/BC,EAII,SAAYlB,GAAZ,IAAAf,EAAAxD,KACIA,KAAKwE,eAAiBD,EAAKC,eACvBD,EAAKE,gBAAkBF,EAAKE,eAAe/E,OAAS,IACpDM,KAAKyE,eAAiB,GACtBF,EAAKE,eAAeC,SAAQ,SAAAC,GACxBnB,EAAKiB,eAAeG,KAAK,IAAIC,EAAkBF,SAM/De,EAGI,SAAYnB,GACRvE,KAAK8E,QAAUP,EAAKO,QAAU,IAAIC,EAAQR,EAAKO,SAAW,MAIlEa,EAWI,SAAYpB,GACRvE,KAAKgF,eAAiBT,EAAKS,eAC3BhF,KAAKiF,kBAAoBV,EAAKU,kBAC9BjF,KAAKkF,iBAAmBX,EAAKW,iBAC7BlF,KAAKmF,YAAcZ,EAAKY,YACxBnF,KAAKoF,gBAAkBb,EAAKa,gBAC5BpF,KAAKqF,OAASd,EAAKc,OACnBrF,KAAKsF,iBAAmBf,EAAKe,iBAC7BtF,KAAKuF,aAAehB,EAAKgB,aACzBvF,KAAKwF,WAAajB,EAAKiB,YC3C/BI,EAII,SAAYrB,GAAZ,IAAAf,EAAAxD,KACIA,KAAKwE,eAAiBD,EAAKC,eACvBD,EAAKE,gBAAkBF,EAAKE,eAAe/E,OAAS,IACpDM,KAAKyE,eAAiB,GACtBF,EAAKE,eAAeC,SAAQ,SAAAC,GACxBnB,EAAKiB,eAAeG,KAAK,IAAIC,EAAkBF,SAM/DkB,EAGI,SAAYtB,GACRvE,KAAK8E,QAAUP,EAAKO,QAAU,IAAIC,EAAQR,EAAKO,SAAW,MAIlEgB,EAWI,SAAYvB,GACRvE,KAAKgF,eAAiBT,EAAKS,eAC3BhF,KAAKiF,kBAAoBV,EAAKU,kBAC9BjF,KAAKkF,iBAAmBX,EAAKW,iBAC7BlF,KAAKmF,YAAcZ,EAAKY,YACxBnF,KAAKoF,gBAAkBb,EAAKa,gBAC5BpF,KAAKqF,OAASd,EAAKc,OACnBrF,KAAKsF,iBAAmBf,EAAKe,iBAC7BtF,KAAKuF,aAAehB,EAAKgB,aACzBvF,KAAKwF,WAAajB,EAAKiB,yBCnB7B,SAAAO,EACUC,GAAAhG,KAAAgG,YAAAA,EAXFhG,KAAAiG,OAAS,0BACTjG,KAAAkG,YAAclG,KAAKiG,OAAS,8EAEnBjG,KAAA0D,KAAI,EAEb1D,KAAAmG,gBAAe,EAGfnG,KAAAoG,eAAe,UAMvBL,EAAAnG,UAAAyG,YAAA,SAAYC,EAAiBC,GAA7B,IAAA/C,EAAAxD,KACQoD,EAAkB,KAAZkD,EAAiBA,EAAUtG,KAAKkG,YAEtC7C,EAAU,CAACkD,OAAMA,GACvB,OAAOvG,KAAKgG,YAAY7C,IAAIC,EAAKC,GAASQ,KACxC2C,EAAAA,KAAI,SAAAzC,GAAY,OAAAP,EAAKiD,kBAAkB1C,MACvCE,EAAAA,YAAW,SAAAC,GAAS,OAAAV,EAAKW,YAAYD,QAIjC6B,EAAAnG,UAAA6G,kBAAR,SAA0B1C,GAExB,OAD2B,IAAIO,EAASP,EAASA,WAInDgC,EAAAnG,UAAA8G,UAAA,SAAUJ,EAAiBK,EAAkBC,EAAoBL,GAAjE,IAAA/C,EAAAxD,KACMoD,EAAMkD,EAEJjD,EAAU,CAACkD,OAAMA,GAGvB,OADAnD,GADAA,EAAMA,EAAIyD,QAAQ,cAAeD,IACvBC,QAAQ,gBAAiBF,GAC5B3G,KAAKgG,YAAY7C,IAAIC,EAAKC,GAASQ,KACxC2C,EAAAA,KAAI,SAAAzC,GAAY,OAAAP,EAAKsD,gBAAgB/C,MACrCE,EAAAA,YAAW,SAAAC,GAAS,OAAAV,EAAKW,YAAYD,QAIjC6B,EAAAnG,UAAAkH,gBAAR,SAAwB/C,GAEtB,OADuB,IAAI0B,EAAO1B,EAASA,WAI7CgC,EAAAnG,UAAAmH,OAAA,SAAOT,EAAiBK,EAAkBC,EAAoBL,GAA9D,IAAA/C,EAAAxD,KACMoD,EAAMkD,EACJjD,EAAU,CAACkD,OAAMA,GAGvB,OADAnD,GADAA,EAAMA,EAAIyD,QAAQ,cAAeD,IACvBC,QAAQ,gBAAiBF,GAC5B3G,KAAKgG,YAAY7C,IAAIC,EAAKC,GAASQ,KACxC2C,EAAAA,KAAI,SAAAzC,GAAY,OAAAP,EAAKwD,aAAajD,MAClCE,EAAAA,YAAW,SAAAC,GAAS,OAAAV,EAAKW,YAAYD,QAIjC6B,EAAAnG,UAAAoH,aAAR,SAAqBjD,GAEnB,OADoB,IAAI6B,EAAI7B,EAASA,WAIvCgC,EAAAnG,UAAAuE,YAAA,SAAYD,GACV,OAAOE,EAAAA,WAAWF,6CApDGxB,+GAZZqD,EAAc9F,EAAA,CAH1ByB,EAAAA,WAAW,CACVC,WAAY,UAEDoE,mBCDX,SAAAkB,IAHAjH,KAAAkH,mBAAqB,IAAIC,EAAAA,qBAAwBC,GACjDpH,KAAAqH,YAAcrH,KAAKkH,mBAAmBI,sBAMtCL,EAAArH,UAAA2H,WAAA,SAAWC,GAETxH,KAAKkH,mBAAmBhG,KAAKsG,IAGxBP,EAAArH,UAAA6H,cAAP,WACE,OAAOzH,KAAK0H,kBAAkB,OAGzBT,EAAArH,UAAA+H,eAAP,WACE,OAAO3H,KAAK0H,kBAAkB,OAGzBT,EAAArH,UAAAgI,eAAP,WACE,OAAO5H,KAAK0H,kBAAkB,OAGxBT,EAAArH,UAAA8H,kBAAR,SAA0BG,GACxB,OAGoD,KAH5C7H,KAAKkH,mBAAmBY,YAC3BC,OAAOC,UAAgC,sBACvCD,OAAOC,UAAwB,cAC/BD,OAAOC,UAAUC,UAAUC,QAAQL,+FA9B/BZ,EAAahH,EAAA,CAHzByB,EAAAA,WAAW,CACVC,WAAY,UAEDsF,MCHPkB,EACO,CACP,CACIC,KAAQ,IACRC,QAAW,sCAEf,CACID,KAAQ,KACRC,QAAW,KAEf,CACID,KAAQ,KACRC,QAAW,OAEf,CACID,KAAQ,KACRC,QAAW,KAEf,CACID,KAAQ,KACRC,QAAW,KAEf,CACID,KAAQ,KACRC,QAAW,MAEf,CACID,KAAQ,KACRC,QAAW,KAEf,CACID,KAAQ,IACRC,QAAW,aAEf,CACID,KAAQ,IACRC,QAAW,gBAEf,CACID,KAAQ,IACRC,QAAW,kBAEf,CACID,KAAQ,KACRC,QAAW,MAEf,CACID,KAAQ,KACRC,QAAW,MAEf,CACID,KAAQ,IACRC,QAAW,kCAEf,CACID,KAAQ,IACRC,QAAW,UAEf,CACID,KAAQ,IACRC,QAAW,mBAEf,CACID,KAAQ,IACRC,QAAW,kBAEf,CACID,KAAQ,IACRC,QAAW,wBAEf,CACID,KAAQ,IACRC,QAAW,SAEf,CACID,KAAQ,IACRC,QAAW,kBAEf,CACID,KAAQ,IACRC,QAAW,sBAEf,CACID,KAAQ,KACRC,QAAW,KAEf,CACID,KAAQ,KACRC,QAAW,KAEf,CACID,KAAQ,IACRC,QAAW,YAEf,CACID,KAAQ,IACRC,QAAW,oBAEf,CACID,KAAQ,KACRC,QAAW,KAEf,CACID,KAAQ,KACRC,QAAW,KAEf,CACID,KAAQ,IACRC,QAAW,+CAEf,CACID,KAAQ,KACRC,QAAW,KAEf,CACID,KAAQ,KACRC,QAAW,KAEf,CACID,KAAQ,KACRC,QAAW,KAEf,CACID,KAAQ,KACRC,QAAW,MAEf,CACID,KAAQ,KACRC,QAAW,MAEf,CACID,KAAQ,IACRC,QAAW,cAEf,CACID,KAAQ,IACRC,QAAW,UAEf,CACID,KAAQ,IACRC,QAAW,qBAEf,CACID,KAAQ,IACRC,QAAW,qBAEf,CACID,KAAQ,IACRC,QAAW,mBAEf,CACID,KAAQ,KACRC,QAAW,KAEf,CACID,KAAQ,IACRC,QAAW,sCAEf,CACID,KAAQ,IACRC,QAAW,YAEf,CACID,KAAQ,KACRC,QAAW,KAEf,CACID,KAAQ,IACRC,QAAW,cAEf,CACID,KAAQ,IACRC,QAAW,SAEf,CACID,KAAQ,IACRC,QAAW,mBAEf,CACID,KAAQ,IACRC,QAAW,kBAEf,CACID,KAAQ,IACRC,QAAW,uCAEf,CACID,KAAQ,KACRC,QAAW,KAEf,CACID,KAAQ,KACRC,QAAW,OAEf,CACID,KAAQ,KACRC,QAAW,KAEf,CACID,KAAQ,KACRC,QAAW,KAEf,CACID,KAAQ,KACRC,QAAW,MAEf,CACID,KAAQ,KACRC,QAAW,KAEf,CACID,KAAQ,IACRC,QAAW,aAEf,CACID,KAAQ,IACRC,QAAW,iBAEf,CACID,KAAQ,IACRC,QAAW,kBAEf,CACID,KAAQ,KACRC,QAAW,MAEf,CACID,KAAQ,IACRC,QAAW,mCAEf,CACID,KAAQ,IACRC,QAAW,UAEf,CACID,KAAQ,IACRC,QAAW,mBAEf,CACID,KAAQ,IACRC,QAAW,mBAEf,CACID,KAAQ,KACRC,QAAW,KAEf,CACID,KAAQ,IACRC,QAAW,wBAEf,CACID,KAAQ,IACRC,QAAW,UAEf,CACID,KAAQ,IACRC,QAAW,kBAEf,CACID,KAAQ,IACRC,QAAW,uBAEf,CACID,KAAQ,KACRC,QAAW,KAEf,CACID,KAAQ,IACRC,QAAW,YAEf,CACID,KAAQ,IACRC,QAAW,qBAEf,CACID,KAAQ,KACRC,QAAW,KAEf,CACID,KAAQ,IACRC,QAAW,+CAEf,CACID,KAAQ,KACRC,QAAW,KAEf,CACID,KAAQ,KACRC,QAAW,KAEf,CACID,KAAQ,KACRC,QAAW,KAEf,CACID,KAAQ,IACRC,QAAW,cAEf,CACID,KAAQ,IACRC,QAAW,UAEf,CACID,KAAQ,IACRC,QAAW,qBAEf,CACID,KAAQ,IACRC,QAAW,sBAEf,CACID,KAAQ,IACRC,QAAW,oBAEf,CACID,KAAQ,KACRC,QAAW,KAEf,CACID,KAAQ,IACRC,QAAW,sCAEf,CACID,KAAQ,IACRC,QAAW,YAEf,CACID,KAAQ,KACRC,QAAW,KAEf,CACID,KAAQ,IACRC,QAAW,eAEf,CACID,KAAQ,IACRC,QAAW,SAEf,CACID,KAAQ,IACRC,QAAW,oBAEf,CACID,KAAQ,IACRC,QAAW,gCAanB,SAAAC,IAAA,IAAA9E,EAAAxD,KACEA,KAAKuI,4BAA8BJ,EACnCnI,KAAKwI,cAAgB,GACrBxI,KAAKuI,4BAA4B7D,SAAQ,SAAAvD,GAAS,OAAAA,EAAMkH,QAAQI,MAAM,IAAI/D,SAAQ,SAACgE,GAAS,OAAAlF,EAAKgF,cAAcE,GAAQvH,EAAMiH,kBAGxHE,EAAA1I,UAAA+I,iBAAP,SAAwBC,GAAxB,IAAApF,EAAAxD,KACE,OAAG4I,MAAAA,EAA4CA,EACxCA,EAAI/B,QAAQ,qBAAqB,SAACgC,GAAuB,OAAArF,EAAKgF,cAAcK,IAAMA,MAG3FP,EAAA1I,UAAAkJ,YAAA,WACE9I,KAAKwI,cAAgB,+FAjBZF,EAAcrI,EAAA,CAH1ByB,EAAAA,WAAW,CACVC,WAAY,UAED2G,MCpWbS,EAAA,WAAA,SAAAA,KAsDA,OArDkBA,EAAAC,WAAd,SAAyBrE,EAAcsE,GACnC,OAAItE,EACOA,EAAQuE,cAAcD,GAE1B,MAGGF,EAAAI,aAAd,SAA2BC,EAAWC,GAClC,IAAMC,EAAyBC,iBAAiBH,GAAWI,iBAAiB,kBACtEC,EAAoBH,EAAiBI,WAAWJ,GAAkB,EAClEK,EAA0BJ,iBAAiBH,GAAWI,iBAAiB,cACvEI,EAAqBD,EAAkBD,WAAWC,GAAmB,EACrEE,EAAgBT,EAAUU,wBAE1BC,EADWV,EAAKS,wBACGE,IAAMC,SAASC,KAAKC,WAAcN,EAAcG,IAAMC,SAASC,KAAKC,WAAaV,EAAYG,EAChHQ,EAAShB,EAAUe,UACnBE,EAAgBjB,EAAUkB,aAC1BC,EAAavK,KAAKwK,eAAenB,GAEnCU,EAAS,EACTX,EAAUe,UAAYC,EAASL,EACvBA,EAASQ,EAAcF,IAC/BjB,EAAUe,UAAYC,EAASL,EAASM,EAAgBE,IAIlDxB,EAAA0B,eAAd,SAA6BC,GACzB,IAAIC,EAASD,EAAGE,aACZC,EAAQtB,iBAAiBmB,GAG7B,OADAC,GAAUjB,WAAWmB,EAAMjB,YAAcF,WAAWmB,EAAMC,gBAIhD/B,EAAAyB,eAAd,SAA6BE,EAAIK,GAC7B,IAAIJ,EAASD,EAAGE,aAEhB,GAAIG,EAAQ,CACR,IAAIF,EAAQtB,iBAAiBmB,GAC7BC,GAAUjB,WAAWmB,EAAMG,WAAatB,WAAWmB,EAAMI,cAG7D,OAAON,GAGG5B,EAAAmC,UAAd,SAAwBR,GACpB,IAAIC,EAASD,EAAGE,aACZC,EAAQtB,iBAAiBmB,GAI7B,OAFAC,GAAUjB,WAAWmB,EAAMjB,YAAcF,WAAWmB,EAAMC,eAAiBpB,WAAWmB,EAAMM,gBAAkBzB,WAAWmB,EAAMO,oBAIvIrC,EAtDA,IRAA,SAAYnH,GAERA,EAAA,iBAAA,YAFJ,CAAYA,IAAAA,EAAU,KSGtB,ICHYyJ,EDGZC,EAEI,SACWC,EACAC,GADAxL,KAAAuL,aAAAA,EACAvL,KAAAwL,YAAAA,ICPf,SAAYH,GAERA,EAAA,SAAA,WACAA,EAAA,OAAA,SACAA,EAAA,cAAA,gBACAA,EAAA,WAAA,aALJ,CAAYA,IAAAA,EAAa,sBCyFvB,SAAAI,EACUC,EACAC,EACAC,EACAC,GAHA7L,KAAA0L,eAAAA,EACA1L,KAAA2L,cAAAA,EACA3L,KAAA4L,iBAAAA,EACA5L,KAAA6L,eAAAA,EAhED7L,KAAA8L,iBAAmB,0BACnB9L,KAAA+L,cAAgB,IAChB/L,KAAAgM,kBAAoB,EACpBhM,KAAAiM,uBAAyB,EACzBjM,KAAAkM,aAAe,GAKflM,KAAAmM,2BAA4B,EAarCnM,KAAAoM,YAAW,EAEDpM,KAAAqM,eAAgG,IAAIC,EAAAA,aACpGtM,KAAAuM,eAAoC,IAAID,EAAAA,aACxCtM,KAAAwM,WAAgC,IAAIF,EAAAA,aACpCtM,KAAAyM,UAA+B,IAAIH,EAAAA,aACnCtM,KAAA0M,gBAAqC,IAAIJ,EAAAA,aACzCtM,KAAA2M,uBAA+C,IAAIL,EAAAA,aAEnDtM,KAAA4M,oBAAkD,IAAIN,EAAAA,aAsBhEtM,KAAA6M,sBAAwB,KACxB7M,KAAA8M,yBAA2B,KAG3B9M,KAAA+M,YAAa,EACb/M,KAAAgN,sBAAuB,EA4sBzB,OA1vBW7N,OAAAyB,eAAI6K,EAAA7L,UAAA,YAAS,KAAb,SAAcqN,GAAvB,IAAAzJ,EAAAxD,KACEA,KAAK2L,cAAcpE,WAAW0F,GAC9BjN,KAAK4L,iBAAiBsB,IAAID,GAAKE,WAC7B,SAACC,GACC5J,EAAK6J,wDAmDX5B,EAAA7L,UAAA0N,SAAA,WAEEtN,KAAKuN,WAAa,GAElBvN,KAAKwN,oBAAqB,EAC1BxN,KAAKyN,4BAA8B,GACnCzN,KAAK0N,YAAc,GACnB1N,KAAK2N,eAAiB,EACtB3N,KAAK4N,gBAAkB,GACvB5N,KAAK6N,SAAW,GAChB7N,KAAK8N,oBAAsB,GAC3B9N,KAAK+N,YAAc,GACnB/N,KAAKgO,gBAAkB,GACvBhO,KAAKiO,cAAe,EACpBjO,KAAKkO,UAAY,KAEjBlO,KAAKmO,eAAiB,EAEtBnO,KAAKoO,cAAgB,GACrBpO,KAAKqO,kBAAmB,EACxBrO,KAAKwE,eAAiB,EACtBxE,KAAKsO,eAAiB,EAEtBtO,KAAKuO,cAAc,IAEnBvO,KAAKqN,qBAGP5B,EAAA7L,UAAA4O,mBAAA,WACE,GAAIxO,KAAKyO,iBAAkB,CACzB,IAAMC,EAA0B1O,KAAK2O,aAAaC,cAClDC,YAAW,WACT,IAAMC,EAAW/F,EAAWC,WAAW0F,EAAS,aAC5CI,GACF/F,EAAWI,aAAauF,EAASI,KAElC,GACH9O,KAAKyO,kBAAmB,IAI5BhD,EAAA7L,UAAAmP,YAAA,SAAYC,GACNA,IAEEA,EAAQnP,eAAe,iBAAmBmP,EAAQxD,YAAYyD,cAChEjP,KAAK+M,YAAa,EAClB/M,KAAKuN,WAAavN,KAAKkP,WAAWF,EAAQxD,YAAY2D,cAClDnP,KAAKmM,2BAA6B1I,QAAQC,IAAI,6CAA8C1D,KAAKuN,YACrGvN,KAAK+N,YAAc,GACK,KAApB/N,KAAKuN,YAAqBvN,KAAKoP,WAAa5N,EAAAA,aAAa6N,WAC3DrP,KAAKqO,kBAAmB,EACxBrO,KAAKwL,YAAY8D,wBACbtP,KAAKuP,qDAAqDvP,KAAKwL,YAAYgE,WAAWlK,kBAC1FtF,KAAKyP,cAA8B7N,EAAW8N,oBAG9CV,EAAQnP,eAAe,eAAiBmP,EAAQW,UAAUV,aACxDjP,KAAK4P,mBAAmB5P,KAAKuN,WAAYyB,EAAQW,UAAUR,gBAC7DnP,KAAK6P,cACL7P,KAAKuN,WAAayB,EAAQW,UAAUR,gBAY5C1D,EAAA7L,UAAA2P,qDAAA,SAAqDjK,GACnD,IAAIwK,EAAiB,KAOrB,OANIxK,MAAAA,IAGFwK,GADAA,EAAS9P,KAAK6L,eAAelD,iBAAiBrD,IAC9ByK,eAEd/P,KAAKmM,2BAA4B1I,QAAQC,IAAI,uBAAwBoM,GAClEA,GAGTrE,EAAA7L,UAAAkJ,YAAA,WACM9I,KAAKgQ,cACPhQ,KAAKgQ,aAAaC,eAItBxE,EAAA7L,UAAAsQ,mBAAA,uBAGE,GAFAlQ,KAAK6N,SAAW7N,KAAKuN,WAAW9E,MAAM,WAElCzI,KAAK0N,aAAe1N,KAAK6N,aAC3B,IAAkB,IAAAsC,EAAAtP,EAAAb,KAAK0N,aAAW0C,EAAAD,EAAAjP,QAAAkP,EAAAhP,KAAAgP,EAAAD,EAAAjP,OAAE,CAA/B,IAAMmP,EAAGD,EAAAjP,MACZ,GAAKkP,GAAQA,EAAIxQ,eAAe,UAAhC,gBAGWyQ,GACT,IAAMC,EAAQC,EAAKC,2BAA2BJ,EAAIhL,OAAkBiL,GACpE,GAAIC,GAAS,EAAG,CACd,IAAMG,EAAKL,EAAIhL,OAAOsL,OAAOJ,EAAOD,EAAE5Q,QAGhCkR,EAAUJ,EAAK3C,SAASgD,MAAM,SAACC,GAAgB,OAAAA,EAAGf,gBAAkBW,EAAGX,iBACzEa,MAAAA,GACFJ,EAAK3C,SAASjJ,KAAK8L,gBARzB,IAAgB,IAAAK,GAAAC,OAAA,EAAAnQ,EAAAb,KAAK6N,WAAQoD,EAAAF,EAAA7P,QAAA+P,EAAA7P,KAAA6P,EAAAF,EAAA7P,OAAA,GAAjB+P,EAAA9P,+MAgBlBsK,EAAA7L,UAAAsR,iCAAA,SAAiC/P,EAAOgQ,GAEtC,IAAMC,EAASpR,KAAK6L,eAAelD,iBAAkB,MAACxH,EAAyCA,EAAM4O,cAAgB5O,GAE/GkQ,EAAUrR,KAAK6L,eAAelD,iBAAkB,MAACwI,EAA2CA,EAAOpB,cAAgBoB,GAEzH,OADkF,IAApEC,EAAOE,MAAM,EAAGD,EAAQ3R,QAAQqQ,cAAc7H,QAAQmJ,IAItE5F,EAAA7L,UAAA2R,eAAA,SAAeC,GACb,GAAIA,IAAW5P,EAAW8N,iBAAoB,OAAO,EACrD,GAAK1P,KAAKyR,kBAAV,CAGA,IAAMC,EAAkB1R,KAAKuN,WAAW9E,MAAM,WACxCkJ,EAAWD,EAAgBA,EAAgBhS,OAAS,GAE1D,GAAIM,KAAK0N,YAAYkE,KAAK,SAASvB,GACjC,SAAKA,IAAQA,EAAIxQ,eAAe,YAGzBwQ,EAAIhL,OAAOoD,MAAM,UAAUmJ,KAAK,SAASC,GAC9C,GAAI7R,KAAKkR,iCAAiCW,EAAMF,GAE9C,OADA3R,KAAKoO,cAAgByD,GACd,GAETC,KAAK9R,QACP8R,KAAK9R,OAAQ,CACb,IAAM+R,EAAW/R,KAAKoO,cAAckD,MAAMK,EAASjS,OAAQM,KAAKoO,cAAc1O,QAAQqQ,cACtF/P,KAAK+N,YAAc/N,KAAKuN,WAAawE,KAIzCtG,EAAA7L,UAAAoS,4BAAA,WACE,GAAIhS,KAAKkO,UAAW,CAWlB,IAAMd,EAAMpN,KAAK4L,iBAAiBqG,QAAQjS,KAAKkO,WAC3ClO,KAAKyN,8BAAgCL,GACvCpN,KAAKkS,mCAOPlS,KAAKkO,UAAY,OAIrBzC,EAAA7L,UAAAuS,eAAA,WACEnS,KAAK+N,YAAc,IAGrBtC,EAAA7L,UAAAwS,gCAAA,SAAgCC,EAA8ChP,GAE5E,GAAIgP,MAAAA,EAKJ,OAAQA,GAEN,KAAK9Q,EAAAA,sBAAsB+Q,kBAC3B,KAAK/Q,EAAAA,sBAAsBgR,kBAC3B,KAAKhR,EAAAA,sBAAsBiR,oBACvB,IAAMC,EAAUzS,KAAK4L,iBAAiBqG,QAAQ,kBAAoBI,GAElErS,KAAKqM,eAAeqG,KAAK,CAACC,YAAaN,EAAuBO,kBAAmBH,IAGnF,MAEF,QACIhP,QAAQS,MAAM,iEAAkEmO,QAjBpF5O,QAAQoP,KAAK,8DAA+DR,IAyBhF5G,EAAA7L,UAAAkT,mBAAA,WACE,IAAMC,EAAQ,IAAIlR,EAAgB,CAChCmR,GAAIhT,KAAKwE,eACTyO,EAAGjT,KAAKuN,WACR2F,uBAAwBlT,KAAKgM,oBAG/B,OAAQhM,KAAKkM,cACX,IAAK,IACH6G,EAAMhR,kBAAiB,GACvB,MAEF,IAAK,IACHgR,EAAM7Q,oBAAmB,GAM7B,OAAO6Q,GAGTtH,EAAA7L,UAAAuT,kBAAA,SAAkB3B,GAAlB,IAAAhO,EAAAxD,KACEA,KAAKwE,gBAAkB,EACvB,IAAMuO,EAAQ/S,KAAK8S,qBACf9S,KAAKmM,2BAA6B1I,QAAQC,IAAI,kCAAmCqP,GACjF/S,KAAKuN,aACPvN,KAAKgQ,aAAehQ,KAAK0L,eAAerF,YAAYrG,KAAKsG,QAASyM,GAAO5F,WACvE,SAAApJ,GACMP,EAAK2I,2BAA6B1I,QAAQC,IAAI,iCAAkCK,GACpFP,EAAK4P,0BAA0BrP,EAAUyN,GACrCA,IAAW5P,EAAW8N,kBAExBlM,EAAKwJ,sBAAiF,IAA1DxJ,EAAKgI,YAAY6H,qCAC7C7P,EAAK8P,sBAIL9P,EAAKwJ,sBAAuB,KAIhC,WAAM,OAAAxJ,EAAK+P,8BAKjB9H,EAAA7L,UAAA4T,aAAA,WACE,OAAuC,IAA9BxT,KAAKgN,qBAAkC,YAAc,IAGhEvB,EAAA7L,UAAAwT,0BAAA,SAA0BK,EAAWjC,GAC/BxR,KAAKmM,2BAA6B1I,QAAQC,IAAI,4BAA6B+P,GAC3EA,GAAQA,EAAK1P,UAAY0P,EAAK1P,SAASS,gBAAkBiP,EAAK1P,SAASS,gBAAkBxE,KAAKsO,gBAChGmF,EAAK1P,SAASU,iBACdzE,KAAKsO,eAAiBmF,EAAK1P,SAASS,eACpCxE,KAAK0T,mBACL1T,KAAK2T,oBAAoBF,EAAK1P,SAASU,eAAgB+M,GACvDxR,KAAKuR,eAAeC,GACpBxR,KAAKgS,8BACLhS,KAAKkQ,sBAEPlQ,KAAKqO,kBAAwC,IAApBrO,KAAK+M,YAA4C,OAArB/M,KAAKwL,cAC/BxL,KAAKwL,YAAYgE,WAAWoE,oCAGzDnI,EAAA7L,UAAA2T,uBAAA,WACEvT,KAAK6T,6BAGPpI,EAAA7L,UAAAkU,YAAA,WACE,MAAO,2BAA2BC,KAAKhM,OAAOC,UAAUgM,YAG1DvI,EAAA7L,UAAAqU,kBAAA,SAAkBC,GAEhB,MAAsB,6BADPA,EAAGC,wBAA0BlK,SAASmK,eACtCpB,IAGjBvH,EAAA7L,UAAAyU,SAAA,SAASpH,GACP,OAAOA,EAAIqH,cAAgBC,QAG7B9I,EAAA7L,UAAAsP,WAAA,SAAW1D,GAET,IAAIgJ,EAAY,GA4BhB,OA3BoB,OAAhBhJ,GAAmD,OAA3BA,EAAYgE,aAElChE,EAAYgE,WAAW3P,eAAe,cACxCG,KAAKoP,SAAW5D,EAAYgE,WAAWJ,UAgBrC5D,EAAYgE,WAAW3P,eAAe,eAAiBG,KAAKqU,SAAS7I,EAAYgE,WAAWhK,cAC9FgP,EAAYhJ,EAAYgE,WAAWhK,YAEjCgG,EAAYgE,WAAW3P,eAAe,qBAAuBG,KAAKqU,SAAS7I,EAAYgE,WAAWlK,oBACpGkP,GAAa,IAAMhJ,EAAYgE,WAAWlK,mBAIvCkP,GAGT/I,EAAA7L,UAAA6U,mBAAA,WACE,OAAOzU,KAAKuN,WAAW7N,OAAS,GAGlC+L,EAAA7L,UAAA6R,gBAAA,WACE,OAA+B,IAA3BzR,KAAKuN,WAAW7N,QAGb,eAAiBqU,KAAK/T,KAAKuN,aAGpC9B,EAAA7L,UAAAgQ,mBAAA,SAAmB8E,EAAgBC,GACjC,OAAOD,EAAO3E,gBAAkB4E,EAAO5E,eAGzCtE,EAAA7L,UAAAgV,OAAA,SAAOV,GACDlU,KAAK8T,eAAiB9T,KAAKiU,kBAAkBC,GAC/ClU,KAAK6U,oBAAoBjG,cAAckG,QAGrC9U,KAAKiO,aACPjO,KAAKiO,cAAe,GAEpBjO,KAAKqO,kBAAmB,EACxBrO,KAAKyM,UAAUiG,KAAKlR,EAAAA,aAAa6N,YAIrC5D,EAAA7L,UAAAmV,QAAA,WACE/U,KAAKqO,kBAAmB,EAIxBrO,KAAKiO,cAAe,EACpBjO,KAAKwM,WAAWkG,KAAKlR,EAAAA,aAAa6N,WAGpC5D,EAAA7L,UAAAoV,aAAA,WACMhV,KAAKmM,2BAA6B1I,QAAQC,IAAI,mBAGpD+H,EAAA7L,UAAA6P,cAAA,SAAc+B,GACZxR,KAAKqO,kBAAmB,EACxBrO,KAAKiV,0BACAzD,IACHxR,KAAK+M,YAAa,EAClB/M,KAAKkV,gBAEPlV,KAAKkS,mCACmB,KAApBlS,KAAKuN,YACPvN,KAAKwE,gBAAkB,EACvBxE,KAAKsO,eAAiBtO,KAAKwE,eAC3BxE,KAAK0T,oBAEL1T,KAAKmT,kBAAkB3B,GAGzBxR,KAAKkQ,sBAIPzE,EAAA7L,UAAAuV,sBAAA,SAAsBC,EAAiB5D,WACjC6D,EAUJ,GATIrV,KAAK2L,cAAchE,kBAAoByN,EAAWvV,eAAe,UACnEwV,EAAkBD,EAAWE,OACpBtV,KAAK2L,cAAclE,iBAAmB2N,EAAWvV,eAAe,SACzEwV,EAAkBD,EAAWG,MACpBvV,KAAK2L,cAAc/D,kBAAoBwN,EAAWvV,eAAe,UAC1EwV,EAAkBD,EAAWI,OACpBJ,EAAWvV,eAAe,aACnCwV,EAAkBD,EAAWtQ,SAE3BuQ,EAAiB,CAKnB,GAJID,EAAWK,WACbJ,EAAgBI,SAAWL,EAAWK,UAExCzV,KAAK0N,YAAY9I,KAAKyQ,GACK,MAAvBrV,KAAK+L,eAAyBsJ,EAAgBxV,eAAe,gBAC/D,IAAgB,IAAA6V,EAAA7U,EAAAwU,EAAgBI,UAAQtF,EAAAuF,EAAAxU,QAAAiP,EAAA/O,KAAA+O,EAAAuF,EAAAxU,OAAE,CAArC,IAAMD,EAACkP,EAAAhP,MACJyR,EAAoB5S,KAAK2V,iBAAiB1U,GACtB,OAAtB2R,IACF3R,EAAE2R,kBAAoBA,qGAIxBpB,IAAW5P,EAAW8N,mBAExB0F,EAAWtQ,QAAUuQ,EACrBrV,KAAK4V,4BAA4BR,MAKvC3J,EAAA7L,UAAAgW,4BAAA,SAA4BR,GAE1B,IAAMS,EAAaT,EAAWtQ,QAC9B,iEAAoE+Q,EAAWrQ,aAAexF,KAAKwL,YAAYgE,WAAWhK,WAC1H,CACMxF,KAAKmM,2BACP1I,QAAQC,IAAI,6DAA8D1D,KAAKwL,YAAa4J,GAE9F,IAAMU,EAAqB9V,KAAKuP,qDAAqDsG,EAAWtQ,cAC1FwQ,EAAyB/V,KAAKuP,qDAAqDsG,EAAWvQ,kBACpG,GAAIwQ,IAAuB9V,KAAKwL,YAAY8D,yBACrCyG,IAA2B/V,KAAKwL,YAAY8D,wBACnD,CACE,IAA0E,IAAtEtP,KAAKwL,YAAYwK,gDAKnB,OAHIhW,KAAKmM,2BAA6B1I,QAAQC,IAAI,4CAA6C0R,QAC3FpV,KAAKmM,2BAA6B1I,QAAQC,IAAI,2CACpC1D,KAAKwL,YAAYyK,4CAIjCjW,KAAKwL,YAAY6H,sCAAuC,EACxDrT,KAAKwL,YAAYyK,0CAA4Cb,EAC7DpV,KAAKuN,WAAasI,EAAWrQ,WAAa,IAAMqQ,EAAWtQ,aAE3DvF,KAAKwL,YAAYwK,gDAAmDF,IAAuB9V,KAAKwL,YAAY8D,yBACrFyG,IAA2B/V,KAAKwL,YAAY8D,yBAEO,IAAtEtP,KAAKwL,YAAYwK,gDAEfhW,KAAKmM,2BAA6B1I,QAAQC,IAAI,gEAAiE0R,GAI/GpV,KAAKmM,2BAA6B1I,QAAQC,IAAI,sCAAuC0R,MAMjG3J,EAAA7L,UAAA0T,mBAAA,YAGgE,IAA1DtT,KAAKwL,YAAY6H,uCAEnBrT,KAAKqO,kBAAmB,GAE1BrO,KAAK4M,oBAAoB8F,KAA0B,IAAIpH,EAAa9J,EAAAA,aAAa6N,SAAUrP,KAAKwL,eAKlGC,EAAA7L,UAAA+T,oBAAA,SAAoBlP,EAAgB+M,WAElC,GADIxR,KAAKmM,2BAA6B1I,QAAQC,IAAI,+BAAgCe,GAC9EA,EAAe6P,cAAgB4B,UAEjC,IAAkB,IAAAC,EAAAtV,EAAA4D,GAAc2R,EAAAD,EAAAjV,QAAAkV,EAAAhV,KAAAgV,EAAAD,EAAAjV,OAChC,CADK,IAAMmP,EAAG+F,EAAAjV,MAEZnB,KAAKmV,sBAAsB9E,EAAKmB,0GAGlCxR,KAAKmV,sBAAsB1Q,EAAgB+M,IAI/C/F,EAAA7L,UAAAqV,wBAAA,WACEjV,KAAKmO,eAAiB,GAGxB1C,EAAA7L,UAAA6Q,2BAAA,SAA2BtP,EAAegQ,GAGxC,IAAMC,EAASpR,KAAK6L,eAAelD,iBAAkB,MAACxH,EAAyCA,EAAM4O,cAAgB5O,GAE/GkQ,EAAUrR,KAAK6L,eAAelD,iBAAkB,MAACwI,EAA2CA,EAAOpB,cAAgBoB,GAGzH,OAFcC,EAAOlJ,QAAQmJ,IAK/B5F,EAAA7L,UAAAsV,aAAA,WACElV,KAAK0M,gBAAgBgG,KAAK1S,KAAKuN,aAGjC9B,EAAA7L,UAAAyW,WAAA,SAAWvB,EAAQpC,QAAA,IAAAA,IAAAA,GAAA,GACjB1S,KAAK0T,mBACL1T,KAAK+N,YAAc,GACnB/N,KAAKuO,cAAc,IACnBvO,KAAKiV,0BACLjV,KAAK2N,eAAiB,EACtB3N,KAAK4N,gBAAkB,GACvB5N,KAAKkS,mCACLlS,KAAKsW,uBACLtW,KAAKkV,eACLlV,KAAKgS,+BACS,IAAV8C,GACF9U,KAAK6U,oBAAoBjG,cAAckG,QAErCpC,GACF1S,KAAK2M,uBAAuB+F,KAAoBrH,EAAcgE,WAIlE5D,EAAA7L,UAAA2W,gBAAA,WACEvW,KAAKuN,WAAa,IAGpB9B,EAAA7L,UAAA0W,qBAAA,WACEtW,KAAKuM,eAAemG,KAAK,MACzB1S,KAAKwN,oBAAqB,GAG5B/B,EAAA7L,UAAAsS,iCAAA,WACElS,KAAKwN,oBAAqB,EAC1BxN,KAAKyN,4BAA8B,GAEnCzN,KAAKqM,eAAeqG,KAAK,CAACC,YAAa,KAAMC,kBAAmB5S,KAAKyN,8BACrEzN,KAAK8M,yBAA2B,KAChC9M,KAAK6M,sBAAwB,MAG/BpB,EAAA7L,UAAA8T,iBAAA,WACE1T,KAAK6N,SAAW,GAChB7N,KAAK0N,YAAc,GACnB1N,KAAK8N,oBAAsB,IAK7BrC,EAAA7L,UAAA4W,gBAAA,SAAgBC,EAAYrB,GAC1BpV,KAAKgN,sBAAuB,EAC5ByJ,EAAMC,iBACN1W,KAAKmS,iBACLnS,KAAKiV,0BACLjV,KAAKuO,cAAc6G,EAAW/P,QAC9BrF,KAAKqO,kBAAmB,EAIxBrO,KAAKwN,oBAAqB,EAC1BxN,KAAK0T,mBACL1T,KAAK2W,mBAAmBvB,IAG1B3J,EAAA7L,UAAAiQ,YAAA,WACE7P,KAAKuW,kBACLvW,KAAK0T,mBACL1T,KAAKmS,iBACLnS,KAAKwL,YAAc,KACnBxL,KAAK+M,YAAa,GAGpBtB,EAAA7L,UAAAgX,yBAAA,WACE,OAAO5W,KAAKmO,eAAiB,GAG/B1C,EAAA7L,UAAAyN,kBAAA,WAAA,IAAA7J,EAAAxD,KAEEA,KAAK4L,iBAAiBzI,IAAI,0CACvBgK,WAAU,SAACC,GAGV5J,EAAKwK,gBAAkBZ,MAI7B3B,EAAA7L,UAAAiX,gBAAA,WACM7W,KAAK0N,YAAYhO,OAAS,IAC5BM,KAAKyO,kBAAmB,IAI5BhD,EAAA7L,UAAAkX,2BAAA,WACM9W,KAAKmO,cAAgB,IAAMnO,KAAK0N,YAAYhO,SAC9CM,KAAKmO,gBACLnO,KAAK6W,kBACL7W,KAAK+W,mCAAmC/W,KAAKmO,cAAenO,KAAKmO,cAAgB,KAIrF1C,EAAA7L,UAAAoX,yBAAA,WACMhX,KAAKmO,cAAgB,IAAO,IAC9BnO,KAAKmO,gBACLnO,KAAK6W,kBACL7W,KAAK+W,mCAAmC/W,KAAKmO,cAAenO,KAAKmO,cAAgB,KAIrF1C,EAAA7L,UAAAqX,aAAA,SAAaR,GACX,OAAQA,EAAMS,OAEZ,KAAK,GACHT,EAAMC,iBACN1W,KAAK8W,6BACL,MAGF,KAAK,GACHL,EAAMC,iBACN1W,KAAKgX,2BACL,MAEF,KAAK,GACHP,EAAMC,iBACF1W,KAAK4W,2BACP5W,KAAKwW,gBAAgBC,EAAOzW,KAAK0N,YAAY1N,KAAKmO,gBAE9CnO,KAAKoO,eAAiBpO,KAAKmX,qBAC7BnX,KAAKuO,cAAcvO,KAAK+N,aACxB/N,KAAKoO,cAAgB,IAGzB,MAEF,KAAK,EACEpO,KAAKwN,qBACRiJ,EAAMC,iBACN1W,KAAKoX,iCAEP,MAEF,KAAK,GACCX,EAAMY,SACRrX,KAAK6P,cAEP,MAEF,KAAK,GACH4G,EAAMC,iBACF1W,KAAK4W,4BACP5W,KAAKwW,gBAAgBC,EAAOzW,KAAK0N,YAAY1N,KAAKmO,gBAGpD,MAEF,QACEnO,KAAKmS,mBAMX1G,EAAA7L,UAAAiU,0BAAA,WACE7T,KAAKkO,UAAsC3M,EAAAA,sBAAsBiR,oBAEjExS,KAAKoS,gCAAgC7Q,EAAAA,sBAAsBiR,sBAG7D/G,EAAA7L,UAAA+W,mBAAA,SAAmBvB,GACjBpV,KAAKuM,eAAemG,KAAK0C,IAG3B3J,EAAA7L,UAAA+V,iBAAA,SAAiBlD,GAEf,OADmBA,EAAQrS,KAEzB,IAAK,OAEH,GAAIqS,EAAQ6E,MAAgC,IAAxB7E,EAAQ6E,KAAK5X,OAC/B,OAAOM,KAAK4L,iBAAiBqG,QAAQ,mCAAoC,CAAEsF,IAAK9E,EAAQ6E,KAAK,GAAIE,UAAW/E,EAAQ6E,KAAK,KAM/H,OAAO,MAGT7L,EAAA7L,UAAAuX,iBAAA,WACE,OAAOnX,KAAK+N,aAAe/N,KAAK+N,YAAYrO,OAAS,GAGvD+L,EAAA7L,UAAAwX,8BAAA,WACEpX,KAAKmO,cAAgB,EACrBnO,KAAK6W,kBACL7W,KAAK+W,mCAAmC/W,KAAKmO,cAAenO,KAAKmO,cAAgB,IAGnF1C,EAAA7L,UAAA2O,cAAA,SAAcpN,GACZnB,KAAKuN,WAAapM,GAGpBsK,EAAA7L,UAAAmX,mCAAA,SAAmCpC,EAAQD,QAC1BtN,IAAXuN,GAAwB3U,KAAK0N,YAAYhO,QAAU,KAGvC,IAAZiV,IACc,IAAZD,IACF1U,KAAK4N,gBAAkB5N,KAAKuN,YAE9BvN,KAAKuO,cAAcvO,KAAK0N,YAAY1N,KAAKmO,eAAe9I,QACxDrF,KAAKmS,kBAELnS,KAAKuO,cAAcvO,KAAK4N,4DArsBF7H,SACDkB,SACGwQ,EAAAA,wBACFnP,KAvE0BrI,EAAA,CAAnDyX,EAAAA,UAAU,sBAAuB,CAACC,QAAQ,+CACE1X,EAAA,CAA5CyX,EAAAA,UAAU,eAAgB,CAACC,QAAQ,wCAM3B1X,EAAA,CAAR2X,EAAAA,gDACQ3X,EAAA,CAAR2X,EAAAA,6CACQ3X,EAAA,CAAR2X,EAAAA,iDACQ3X,EAAA,CAAR2X,EAAAA,sDACQ3X,EAAA,CAAR2X,EAAAA,4CACQ3X,EAAA,CAAR2X,EAAAA,uCACQ3X,EAAA,CAAR2X,EAAAA,yCAEQ3X,EAAA,CAAR2X,EAAAA,2CACQ3X,EAAA,CAAR2X,EAAAA,yDAGQ3X,EAAA,CAAR2X,EAAAA,uCAUD3X,EAAA,CADC2X,EAAAA,0CAGS3X,EAAA,CAAT4X,EAAAA,+CACS5X,EAAA,CAAT4X,EAAAA,+CACS5X,EAAA,CAAT4X,EAAAA,2CACS5X,EAAA,CAAT4X,EAAAA,0CACS5X,EAAA,CAAT4X,EAAAA,gDACS5X,EAAA,CAAT4X,EAAAA,uDAES5X,EAAA,CAAT4X,EAAAA,oDAxCUpM,EAAiBxL,EAAA,CAL7B6X,EAAAA,UAAU,CACT7O,SAAU,cACV8O,SAAA,wxEAGWtM,mBC6EX,SAAAuM,EACUtM,EACAC,EACAC,EACAC,GAHA7L,KAAA0L,eAAAA,EACA1L,KAAA2L,cAAAA,EACA3L,KAAA4L,iBAAAA,EACA5L,KAAA6L,eAAAA,EA3EF7L,KAAAgQ,aAA6B,KAM5BhQ,KAAA8L,iBAAmB,0BACnB9L,KAAAgM,kBAAoB,EACpBhM,KAAAiY,sBAAwB,EACxBjY,KAAAkM,aAAe,GAIflM,KAAAmM,2BAA4B,EAM5BnM,KAAA+L,cAAgB,IAazB/L,KAAAoM,YAAW,EAEDpM,KAAAqM,eAAgG,IAAIC,EAAAA,aACpGtM,KAAAuM,eAAoC,IAAID,EAAAA,aACxCtM,KAAAwM,WAAgC,IAAIF,EAAAA,aACpCtM,KAAAyM,UAA+B,IAAIH,EAAAA,aACnCtM,KAAA0M,gBAAqC,IAAIJ,EAAAA,aAEzCtM,KAAA2M,uBAA+C,IAAIL,EAAAA,aAEnDtM,KAAA4M,oBAAkD,IAAIN,EAAAA,aAuBhEtM,KAAA6M,sBAAwB,KACxB7M,KAAA8M,yBAA2B,KAE3B9M,KAAA+M,YAAa,EACb/M,KAAAgN,sBAAuB,EAqrBzB,OApuBW7N,OAAAyB,eAAIoX,EAAApY,UAAA,YAAS,KAAb,SAAcqN,GAAvB,IAAAzJ,EAAAxD,KACEA,KAAK2L,cAAcpE,WAAW0F,GAC9BjN,KAAK4L,iBAAiBsB,IAAID,GAAKE,WAC7B,SAACC,GACC5J,EAAK6J,wDAoDX2K,EAAApY,UAAA0N,SAAA,WACEtN,KAAKuN,WAAa,GAElBvN,KAAKwN,oBAAqB,EAC1BxN,KAAKyN,4BAA8B,GACnCzN,KAAK0N,YAAc,GACnB1N,KAAK2N,eAAiB,EACtB3N,KAAK4N,gBAAkB,GACvB5N,KAAK6N,SAAW,GAChB7N,KAAK8N,oBAAsB,GAC3B9N,KAAK+N,YAAc,GACnB/N,KAAKgO,gBAAkB,GACvBhO,KAAKiO,cAAe,EACpBjO,KAAKkO,UAAY,KAEjBlO,KAAKmO,eAAiB,EAEtBnO,KAAKoO,cAAgB,GACrBpO,KAAKqO,kBAAmB,EACxBrO,KAAKwE,eAAiB,EACtBxE,KAAKsO,eAAiB,EAEtBtO,KAAKuO,cAAc,IAEnBvO,KAAKqN,qBAGP2K,EAAApY,UAAAkJ,YAAA,WACM9I,KAAKgQ,cACPhQ,KAAKgQ,aAAaC,eAItB+H,EAAApY,UAAAyN,kBAAA,WAAA,IAAA7J,EAAAxD,KAEEA,KAAK4L,iBAAiBzI,IAAI,wCACvBgK,WAAU,SAACC,GAGV5J,EAAKwK,gBAAkBZ,MAI7B4K,EAAApY,UAAA4O,mBAAA,WACE,GAAIxO,KAAKyO,iBAAkB,CACzB,IAAMC,EAA0B1O,KAAKkY,WAAWtJ,cAChDC,YAAW,WACT,IAAMC,EAAW/F,EAAWC,WAAW0F,EAAS,aAC5CI,GACF/F,EAAWI,aAAauF,EAASI,KAElC,GACH9O,KAAKyO,kBAAmB,IAI5BuJ,EAAApY,UAAAmP,YAAA,SAAYC,GACNA,IACEA,EAAQnP,eAAe,iBAAmBmP,EAAQxD,YAAYyD,cAChEjP,KAAK+M,YAAa,EAClB/M,KAAKuN,WAAavN,KAAKkP,WAAWF,EAAQxD,YAAY2D,cAC9B,KAApBnP,KAAKuN,YAAqBvN,KAAKoP,WAAa5N,EAAAA,aAAa2W,SAW3DnY,KAAKqO,kBAAmB,EACxBrO,KAAKwL,YAAY4M,kBACbpY,KAAKqY,mDAAmDrY,KAAKwL,YAAYgE,WAAW8I,YACxFtY,KAAKyP,cAA8B7N,EAAW8N,oBAI9CV,EAAQnP,eAAe,eAAiBmP,EAAQW,UAAUV,aACxDjP,KAAK4P,mBAAmB5P,KAAKuN,WAAYyB,EAAQW,UAAUR,gBAC7DnP,KAAK6P,cACL7P,KAAKuN,WAAayB,EAAQW,UAAUR,eAKpCH,EAAQnP,eAAe,eAAkBmP,EAAQxJ,WAAWyJ,aAAgBD,EAAQnP,eAAe,iBACrGG,KAAKoP,SAAW5N,EAAAA,aAAa2W,OACW,KAApCnJ,EAAQxJ,WAAW2J,eACrBnP,KAAK6P,cACL7P,KAAKkV,mBAMb8C,EAAApY,UAAAyY,mDAAA,SAAmDC,GACjD,IAAIxI,EAAiB,KAOrB,OANIwI,MAAAA,IAGFxI,GADAA,EAAS9P,KAAK6L,eAAelD,iBAAiB2P,IAC9BvI,eAEd/P,KAAKmM,2BAA6B1I,QAAQC,IAAI,qBAAsBoM,GACjEA,GAGTkI,EAAApY,UAAA2Y,kBAAA,SAAkB9B,EAAO3B,GACvB9U,KAAKqW,WAAWvB,IAGlBkD,EAAApY,UAAAgV,OAAA,SAAOV,GACDlU,KAAK8T,eAAiB9T,KAAKiU,kBAAkBC,GAC/ClU,KAAKwY,kBAAkB5J,cAAckG,QAGnC9U,KAAKiO,aACPjO,KAAKiO,cAAe,GAEpBjO,KAAKqO,kBAAmB,EACxBrO,KAAKyM,UAAUiG,KAAKlR,EAAAA,aAAa2W,UAIrCH,EAAApY,UAAAkU,YAAA,WACE,MAAO,2BAA2BC,KAAKhM,OAAOC,UAAUgM,YAG1DgE,EAAApY,UAAAqU,kBAAA,SAAkBC,GAEhB,MAAsB,2BADPA,EAAGC,wBAA0BlK,SAASmK,eACtCpB,IAGjBgF,EAAApY,UAAAmV,QAAA,WACE/U,KAAKqO,kBAAmB,EAIpBrO,KAAKmM,2BAA6B1I,QAAQC,IAAI,wBAAyB1D,KAAK+M,WAAY/M,KAAKwL,YAAaxL,KAAKqO,kBAGnHrO,KAAKiO,cAAe,EACpBjO,KAAKwM,WAAWkG,KAAKlR,EAAAA,aAAa2W,SAGpCH,EAAApY,UAAA6Y,gBAAA,WACE,OAAOzY,KAAK0N,YAAYhO,OAAS,IAAMM,KAAKqO,kBAG9C2J,EAAApY,UAAAsQ,mBAAA,uBAGE,GAFAlQ,KAAK6N,SAAW7N,KAAKuN,WAAW9E,MAAM,WAElCzI,KAAK0N,aAAe1N,KAAK6N,aAC3B,IAAkB,IAAAsC,EAAAtP,EAAAb,KAAK0N,aAAW0C,EAAAD,EAAAjP,QAAAkP,EAAAhP,KAAAgP,EAAAD,EAAAjP,OAAE,CAA/B,IAAMmP,EAAGD,EAAAjP,MACZ,GAAKkP,GAAQA,EAAIxQ,eAAe,UAAhC,gBAGWyQ,GACT,IAAMC,EAAQC,EAAKC,2BAA2BJ,EAAIhL,OAAkBiL,GACpE,GAAIC,GAAS,EAAG,CACd,IAAMG,EAAKL,EAAIhL,OAAOsL,OAAOJ,EAAOD,EAAE5Q,QAGhCkR,EAAUJ,EAAK3C,SAASgD,MAAM,SAACC,GAAgB,OAAAA,EAAGf,gBAAkBW,EAAGX,iBACzEa,MAAAA,GACFJ,EAAK3C,SAASjJ,KAAK8L,gBARzB,IAAgB,IAAAK,GAAAC,OAAA,EAAAnQ,EAAAb,KAAK6N,WAAQoD,EAAAF,EAAA7P,QAAA+P,EAAA7P,KAAA6P,EAAAF,EAAA7P,OAAA,GAAjB+P,EAAA9P,+MAgBlB6W,EAAApY,UAAA6Q,2BAAA,SAA2BtP,EAAegQ,GAGxC,IAAMC,EAASpR,KAAK6L,eAAelD,iBAAkB,MAACxH,EAAyCA,EAAM4O,cAAgB5O,GAE/GkQ,EAAUrR,KAAK6L,eAAelD,iBAAkB,MAACwI,EAA2CA,EAAOpB,cAAgBoB,GAGzH,OAFcC,EAAOlJ,QAAQmJ,IAK/B2G,EAAApY,UAAA6R,gBAAA,WACE,OAA+B,IAA3BzR,KAAKuN,WAAW7N,QAGb,eAAiBqU,KAAK/T,KAAKuN,aAGpCyK,EAAApY,UAAAsV,aAAA,WACElV,KAAK0M,gBAAgBgG,KAAK1S,KAAKuN,aAGjCyK,EAAApY,UAAA2R,eAAA,SAAeC,GACb,GAAIA,IAAW5P,EAAW8N,iBAAoB,OAAO,EACrD,GAAK1P,KAAKyR,kBAAV,CAGA,IAAMC,EAAkB1R,KAAKuN,WAAW9E,MAAM,WACxCkJ,EAAWD,EAAgBA,EAAgBhS,OAAS,GAE1D,GAAIM,KAAK0N,YAAYkE,KAAK,SAASvB,GACjC,SAAKA,IAAQA,EAAIxQ,eAAe,YAGzBwQ,EAAIhL,OAAOoD,MAAM,UAAUmJ,KAAK,SAASC,GAC9C,GAAI7R,KAAKkR,iCAAiCW,EAAMF,GAE9C,OADA3R,KAAKoO,cAAgByD,GACd,GAETC,KAAK9R,QACP8R,KAAK9R,OAAQ,CACb,IAAM+R,EAAW/R,KAAKoO,cAAckD,MAAMK,EAASjS,OAAQM,KAAKoO,cAAc1O,QAAQqQ,cACtF/P,KAAK+N,YAAc/N,KAAKuN,WAAawE,KAIzCiG,EAAApY,UAAAsR,iCAAA,SAAiC/P,EAAOgQ,GAEtC,IAAMC,EAASpR,KAAK6L,eAAelD,iBAAkB,MAACxH,EAAyCA,EAAM4O,cAAgB5O,GAE/GkQ,EAAUrR,KAAK6L,eAAelD,iBAAkB,MAACwI,EAA2CA,EAAOpB,cAAgBoB,GAEzH,OADkF,IAApEC,EAAOE,MAAM,EAAGD,EAAQ3R,QAAQqQ,cAAc7H,QAAQmJ,IAItE2G,EAAApY,UAAAuT,kBAAA,SAAkB3B,GAAlB,IAAAhO,EAAAxD,KACEA,KAAKwE,gBAAkB,EACvB,IAAMuO,EAAQ/S,KAAK8S,qBACf9S,KAAKmM,2BAA6B1I,QAAQC,IAAI,gCAAiCqP,GAC/E/S,KAAKuN,aACPvN,KAAKgQ,aAAehQ,KAAK0L,eAAehF,UAAU1G,KAAKsG,QAAStG,KAAK2G,SAAU3G,KAAKwF,WAAYuN,GAC7F5F,WACC,SAAApJ,GACEP,EAAKkV,wBAAwB3U,EAAUyN,GACnCA,IAAW5P,EAAW8N,kBAExBlM,EAAKwJ,sBAA2E,IAApDxJ,EAAKgI,YAAYmN,+BAC7CnV,EAAK8P,sBAIL9P,EAAKwJ,sBAAuB,KAIhC,WAAM,OAAAxJ,EAAKoV,4BAKnBZ,EAAApY,UAAA4T,aAAA,WACE,OAAuC,IAA9BxT,KAAKgN,qBAAkC,YAAc,IAGhEgL,EAAApY,UAAAsP,WAAA,SAAW1D,GACT,IAAIgJ,EAAY,GAsBhB,OArBoB,OAAhBhJ,GAAmD,OAA3BA,EAAYgE,aAElChE,EAAYgE,WAAW3P,eAAe,cACxCG,KAAKoP,SAAW5D,EAAYgE,WAAWJ,UAOrC5D,EAAYgE,WAAW3P,eAAe,eAAiBG,KAAKqU,SAAS7I,EAAYgE,WAAWhK,cAC9FxF,KAAKwF,WAAagG,EAAYgE,WAAWhK,YAEvCgG,EAAYgE,WAAW3P,eAAe,qBAAuBG,KAAKqU,SAAS7I,EAAYgE,WAAWlK,oBACpGtF,KAAK2G,SAAW6E,EAAYgE,WAAWlK,kBAErCkG,EAAYgE,WAAW3P,eAAe,eACnCG,KAAKqU,SAAS7I,EAAYgE,WAAW8I,aAAetY,KAAK6Y,qBAC9DrE,EAAYhJ,EAAYgE,WAAW8I,aAGhC9D,GAGTwD,EAAApY,UAAAyU,SAAA,SAASpH,GACP,OAAIA,MAAAA,GAGGA,EAAIqH,cAAgBC,QAG7ByD,EAAApY,UAAAkZ,QAAA,SAAQ7L,GACN,OAAOjN,KAAKqU,SAASpH,IAAgB,KAARA,GAG/B+K,EAAApY,UAAAiZ,iBAAA,WACE,OAAO7Y,KAAK8Y,QAAQ9Y,KAAKwF,aAAexF,KAAK8Y,QAAQ9Y,KAAK2G,WAG5DqR,EAAApY,UAAAkT,mBAAA,WACE,IAAMC,EAAQ,IAAIlR,EAAgB,CAChCmR,GAAIhT,KAAKwE,eACTyO,EAAGjT,KAAKuN,WACR/H,WAAYxF,KAAKwF,WACjBmB,SAAU3G,KAAK2G,SACfuM,uBAAwBlT,KAAKgM,oBAM/B,MAH0B,MAAtBhM,KAAKkM,cACP6G,EAAM3Q,cAAa,GAEd2Q,GAGTiF,EAAApY,UAAA8Y,wBAAA,SAAwBjF,EAAWjC,GAC7BiC,GAAQA,EAAK1P,UAAY0P,EAAK1P,SAASS,gBAAkBiP,EAAK1P,SAASS,gBAAkBxE,KAAKsO,gBAChGmF,EAAK1P,SAASU,iBACdzE,KAAKsO,eAAiBmF,EAAK1P,SAASS,eACpCxE,KAAK0T,mBACL1T,KAAK2T,oBAAoBF,EAAK1P,SAASU,eAAgB+M,GACvDxR,KAAKuR,eAAeC,GACpBxR,KAAKgS,8BACLhS,KAAKkQ,sBAEPlQ,KAAKqO,kBAAwC,IAApBrO,KAAK+M,YAA4C,OAArB/M,KAAKwL,cAC/BxL,KAAKwL,YAAYgE,WAAWoE,oCAGzDoE,EAAApY,UAAAgZ,qBAAA,WACE5Y,KAAK6T,6BAGPmE,EAAApY,UAAAiU,0BAAA,WACE7T,KAAKkO,UAAsC3M,EAAAA,sBAAsBiR,oBAEjExS,KAAKoS,gCAAgC7Q,EAAAA,sBAAsBiR,sBAG7DwF,EAAApY,UAAAoS,4BAAA,WACE,GAAIhS,KAAKkO,UAAW,CAClB,IAAMd,EAAMpN,KAAK4L,iBAAiBqG,QAAQjS,KAAKkO,WAC3ClO,KAAKyN,8BAAgCL,GACvCpN,KAAKkS,mCAEPlS,KAAKkO,UAAY,OAIrB8J,EAAApY,UAAA+T,oBAAA,SAAoBlP,EAAgB+M,WAClC,GAAI/M,EAAe6P,cAAgB4B,UAEjC,IAAkB,IAAAC,EAAAtV,EAAA4D,GAAc2R,EAAAD,EAAAjV,QAAAkV,EAAAhV,KAAAgV,EAAAD,EAAAjV,OAChC,CADK,IAAMmP,EAAG+F,EAAAjV,MAEZnB,KAAKmV,sBAAsB9E,EAAKmB,0GAGlCxR,KAAKmV,sBAAsB1Q,EAAgB+M,IAI/CwG,EAAApY,UAAAuV,sBAAA,SAAsBC,EAAiB5D,GACrC,IAAI6D,EACArV,KAAK2L,cAAchE,kBAAoByN,EAAWvV,eAAe,UACnEwV,EAAkBD,EAAWE,OACpBtV,KAAK2L,cAAclE,iBAAmB2N,EAAWvV,eAAe,SACzEwV,EAAkBD,EAAWG,MACpBvV,KAAK2L,cAAc/D,kBAAoBwN,EAAWvV,eAAe,UAC1EwV,EAAkBD,EAAWI,OACpBJ,EAAWvV,eAAe,aACnCwV,EAAkBD,EAAWtQ,SAE3BuQ,IACED,EAAWK,WACbJ,EAAgBI,SAAWL,EAAWK,UAExCzV,KAAK0N,YAAY9I,KAAKyQ,GAClB7D,IAAW5P,EAAW8N,mBAExB0F,EAAWtQ,QAAUuQ,EACrBrV,KAAK4V,4BAA4BR,MAKvC4C,EAAApY,UAAAgW,4BAAA,SAA4BR,GAEtBpV,KAAKmM,2BAA4B1I,QAAQC,IAAI,iDAAkD1D,KAAKwL,YAAa4J,GACrH,IAAMS,EAAaT,EAAWtQ,QAExBgR,EAAqB9V,KAAKqY,mDAAmDxC,EAAWtQ,cACxFwQ,EAAyB/V,KAAKqY,mDAAmDxC,EAAWvQ,kBAC9FwQ,IAAuB9V,KAAKwL,YAAY8D,yBACvCyG,IAA2B/V,KAAKwL,YAAY8D,yBAElBtP,KAAKqY,mDAAmDxC,EAAWyC,cAEnEtY,KAAKwL,YAAY4M,oBAE5CpY,KAAKwL,YAAYmN,gCAAiC,EAClD3Y,KAAKwL,YAAYuN,oCAAsC3D,EACvDpV,KAAKuN,WAAasI,EAAWyC,aAKnCN,EAAApY,UAAA6P,cAAA,SAAc+B,GAEZxR,KAAKqO,kBAAmB,EACxBrO,KAAKiV,0BACAzD,IACHxR,KAAK+M,YAAa,EAClB/M,KAAKkV,gBAEPlV,KAAKkS,mCACmB,KAApBlS,KAAKuN,YACPvN,KAAKwE,gBAAkB,EACvBxE,KAAKsO,eAAiBtO,KAAKwE,eAC3BxE,KAAK0T,oBAEL1T,KAAKmT,kBAAkB3B,GAEzBxR,KAAKkQ,sBAGP8H,EAAApY,UAAA0T,mBAAA,YAE0D,IAApDtT,KAAKwL,YAAYmN,iCAEnB3Y,KAAKqO,kBAAmB,GAE1BrO,KAAK4M,oBAAoB8F,KAAK,IAAIpH,EAAa9J,EAAAA,aAAa2W,OAAQnY,KAAKwL,eAI3EwM,EAAApY,UAAA4W,gBAAA,SAAgBC,EAAYrB,GAC1BpV,KAAKgN,sBAAuB,EACxBhN,KAAKmM,2BAA6B1I,QAAQC,IAAI,gCAAiC+S,EAAOrB,GAC1FqB,MAAAA,GAAAA,EAAOC,iBACP1W,KAAKmS,iBACLnS,KAAKiV,0BACLjV,KAAKuO,cAAc6G,EAAW/P,QAC9BrF,KAAKqO,kBAAmB,EAIxBrO,KAAKwN,oBAAqB,EACtBiJ,GACFzW,KAAK0T,mBAEP1T,KAAK2W,mBAAmBvB,IAG1B4C,EAAApY,UAAA+W,mBAAA,SAAmBvB,GACjBpV,KAAKuM,eAAemG,KAAK0C,IAG3B4C,EAAApY,UAAA0W,qBAAA,WACEtW,KAAKuM,eAAemG,KAAK,MACzB1S,KAAKwN,oBAAqB,GAG5BwK,EAAApY,UAAAwS,gCAAA,SAAgCC,EAA8ChP,GAE5E,GAAIgP,MAAAA,EAKJ,OAAQA,GAEN,KAAK9Q,EAAAA,sBAAsB+Q,kBAC3B,KAAK/Q,EAAAA,sBAAsBgR,kBAC3B,KAAKhR,EAAAA,sBAAsBiR,oBACvB,IAAMC,EAAUzS,KAAK4L,iBAAiBqG,QAAQI,GAE9CrS,KAAKqM,eAAeqG,KAAK,CAACC,YAAaN,EAAuBO,kBAAmBH,IAGnF,MAEF,QACIhP,QAAQS,MAAM,iEAAkEmO,QAjBpF5O,QAAQoP,KAAK,8DAA+DR,IAyBhF2F,EAAApY,UAAAoZ,uBAAA,WAEEhZ,KAAKoS,gCAAgC7Q,EAAAA,sBAAsBgR,oBAG7DyF,EAAApY,UAAAqX,aAAA,SAAaR,GACX,OAAQA,EAAMS,OAEZ,KAAK,GACHT,EAAMC,iBACN1W,KAAK8W,6BACL,MAGF,KAAK,GACHL,EAAMC,iBACN1W,KAAKgX,2BACL,MAEF,KAAK,GACHP,EAAMC,iBACF1W,KAAK4W,2BACP5W,KAAKwW,gBAAgBC,EAAOzW,KAAK0N,YAAY1N,KAAKmO,gBAE9CnO,KAAKoO,eAAiBpO,KAAKmX,qBAC7BnX,KAAKuO,cAAcvO,KAAK+N,aACxB/N,KAAKoO,cAAgB,IAGzB,MAEF,KAAK,EACEpO,KAAKwN,oBAAuBiJ,EAAMwC,WACrCxC,EAAMC,iBACN1W,KAAKoX,iCAEP,MAEF,KAAK,GACCX,EAAMY,SACRrX,KAAK6P,cAEP,MAEF,KAAK,GACH4G,EAAMC,iBACF1W,KAAK4W,4BACP5W,KAAKwW,gBAAgBC,EAAOzW,KAAK0N,YAAY1N,KAAKmO,gBAGpD,MAEF,QACEnO,KAAKmS,mBAMX6F,EAAApY,UAAAiQ,YAAA,WACE7P,KAAKwN,oBAAqB,EAC1BxN,KAAKuW,kBACLvW,KAAK0T,mBACL1T,KAAKmS,iBACLnS,KAAKwL,YAAc,KACnBxL,KAAK+M,YAAa,GAGpBiL,EAAApY,UAAA2W,gBAAA,WACEvW,KAAKuN,WAAa,IAGpByK,EAAApY,UAAAuX,iBAAA,WACE,OAAOnX,KAAK+N,aAAe/N,KAAK+N,YAAYrO,OAAS,GAGvDsY,EAAApY,UAAAqV,wBAAA,WACEjV,KAAKmO,eAAiB,GAGxB6J,EAAApY,UAAAkX,2BAAA,WACM9W,KAAKmO,cAAgB,IAAMnO,KAAK0N,YAAYhO,SAC9CM,KAAKmO,gBACLnO,KAAK6W,kBACL7W,KAAK+W,mCAAmC/W,KAAKmO,cAAenO,KAAKmO,cAAgB,KAIrF6J,EAAApY,UAAAoX,yBAAA,WACMhX,KAAKmO,cAAgB,IAAO,IAC9BnO,KAAKmO,gBACLnO,KAAK6W,kBACL7W,KAAK+W,mCAAmC/W,KAAKmO,cAAenO,KAAKmO,cAAgB,KAIrF6J,EAAApY,UAAAgX,yBAAA,WACE,OAAO5W,KAAKmO,eAAiB,GAG/B6J,EAAApY,UAAAmX,mCAAA,SAAmCpC,EAAQD,QAC1BtN,IAAXuN,GAAwB3U,KAAK0N,YAAYhO,QAAU,KAGvC,IAAZiV,IACc,IAAZD,IACF1U,KAAK4N,gBAAkB5N,KAAKuN,YAE9BvN,KAAKuO,cAAcvO,KAAK0N,YAAY1N,KAAKmO,eAAe9I,QACxDrF,KAAKmS,kBAELnS,KAAKuO,cAAcvO,KAAK4N,mBAI5BoK,EAAApY,UAAA6U,mBAAA,WACE,OAAOzU,KAAKuN,WAAW7N,OAAS,GAGlCsY,EAAApY,UAAAyW,WAAA,SAAWvB,EAAQpC,QAAA,IAAAA,IAAAA,GAAA,GAEjB1S,KAAK6P,cACL7P,KAAKiV,0BACLjV,KAAK2N,eAAiB,EACtB3N,KAAK4N,gBAAkB,GACvB5N,KAAKkS,mCACLlS,KAAKkV,eACLlV,KAAKgS,+BACS,IAAV8C,GAEF9U,KAAKwY,kBAAkB5J,cAAckG,QAEnCpC,GACF1S,KAAK2M,uBAAuB+F,KAAkBrH,EAAc8M,SAIhEH,EAAApY,UAAA8T,iBAAA,WACE1T,KAAK6N,SAAW,GAChB7N,KAAK0N,YAAc,GACnB1N,KAAK8N,oBAAsB,IAG7BkK,EAAApY,UAAAuS,eAAA,WACEnS,KAAK+N,YAAc,IAGrBiK,EAAApY,UAAAsS,iCAAA,WACElS,KAAKyN,4BAA8B,GACnCzN,KAAKwN,oBAAqB,EAE1BxN,KAAKqM,eAAeqG,KAAK,CAACC,YAAa,KAAMC,kBAAmB5S,KAAKyN,8BACrEzN,KAAK8M,yBAA2B,KAChC9M,KAAK6M,sBAAwB,MAG/BmL,EAAApY,UAAA2O,cAAA,SAAcpN,GACZnB,KAAKuN,WAAapM,GAGpB6W,EAAApY,UAAAwX,8BAAA,WACEpX,KAAKmO,cAAgB,EACrBnO,KAAK6W,kBACL7W,KAAK+W,mCAAmC/W,KAAKmO,cAAenO,KAAKmO,cAAgB,IAGnF6J,EAAApY,UAAAiX,gBAAA,WACM7W,KAAK0N,YAAYhO,OAAS,IAC5BM,KAAKyO,kBAAmB,IAI5BuJ,EAAApY,UAAAsZ,qBAAA,WACElZ,KAAKmO,eAAiB,GAGxB6J,EAAApY,UAAAgQ,mBAAA,SAAmB8E,EAAgBC,GACjC,OAAOD,EAAO3E,gBAAkB4E,EAAO5E,eAGzCiI,EAAApY,UAAAuZ,2BAAA,WAEEnZ,KAAKoS,gCAAgC7Q,EAAAA,sBAAsB+Q,oBAG7D0F,EAAApY,UAAAwZ,WAAA,WACE,MAA0B,KAAlBpZ,KAAK2G,UAAuC,KAApB3G,KAAKwF,YAAqBxF,KAAKoP,SAAW5N,EAAAA,aAAa2W,QAGzFH,EAAApY,UAAAoV,aAAA,WACMhV,KAAKmM,2BAA6B1I,QAAQC,IAAI,gBAClD1D,KAAK+M,YAAa,EAClB/M,KAAKqO,kBAAmB,4CA/qBAtI,SACDkB,SACGwQ,EAAAA,wBACFnP,KA9EwBrI,EAAA,CAAjDyX,EAAAA,UAAU,oBAAqB,CAACC,QAAQ,6CACE1X,EAAA,CAA1CyX,EAAAA,UAAU,aAAc,CAACC,QAAQ,sCAQzB1X,EAAA,CAAR2X,EAAAA,gDACQ3X,EAAA,CAAR2X,EAAAA,iDACQ3X,EAAA,CAAR2X,EAAAA,qDACQ3X,EAAA,CAAR2X,EAAAA,4CACQ3X,EAAA,CAAR2X,EAAAA,uCAEQ3X,EAAA,CAAR2X,EAAAA,2CACQ3X,EAAA,CAAR2X,EAAAA,yDAEQ3X,EAAA,CAAR2X,EAAAA,0CACQ3X,EAAA,CAAR2X,EAAAA,wCACQ3X,EAAA,CAAR2X,EAAAA,yCAEQ3X,EAAA,CAAR2X,EAAAA,6CAGQ3X,EAAA,CAAR2X,EAAAA,uCAUD3X,EAAA,CADC2X,EAAAA,0CAGS3X,EAAA,CAAT4X,EAAAA,+CACS5X,EAAA,CAAT4X,EAAAA,+CACS5X,EAAA,CAAT4X,EAAAA,2CACS5X,EAAA,CAAT4X,EAAAA,0CACS5X,EAAA,CAAT4X,EAAAA,gDAES5X,EAAA,CAAT4X,EAAAA,uDAES5X,EAAA,CAAT4X,EAAAA,oDA/CUG,EAAe/X,EAAA,CAL3B6X,EAAAA,UAAU,CACT7O,SAAU,YACV8O,SAAA,k+DAGWC,mBCmFX,SAAAqB,EACU3N,EACAC,EACAC,EACAC,GAHA7L,KAAA0L,eAAAA,EACA1L,KAAA2L,cAAAA,EACA3L,KAAA4L,iBAAAA,EACA5L,KAAA6L,eAAAA,EA3ED7L,KAAAmM,2BAA4B,EAE5BnM,KAAA8L,iBAAmB,4BACnB9L,KAAAgM,kBAAoB,EACpBhM,KAAAiY,sBAAwB,EACxBjY,KAAAkM,aAAe,GAkBflM,KAAA+L,cAAgB,IAIzB/L,KAAAoM,YAAW,EAEDpM,KAAAqM,eAAgG,IAAIC,EAAAA,aACpGtM,KAAAuM,eAAoC,IAAID,EAAAA,aACxCtM,KAAAwM,WAAgC,IAAIF,EAAAA,aACpCtM,KAAAyM,UAA+B,IAAIH,EAAAA,aACnCtM,KAAA0M,gBAAqC,IAAIJ,EAAAA,aACzCtM,KAAAsZ,mBAAwC,IAAIhN,EAAAA,aAG5CtM,KAAA2M,uBAA+C,IAAIL,EAAAA,aAEnDtM,KAAA4M,oBAAkD,IAAIN,EAAAA,aAIhEtM,KAAAwN,oBAAqB,EACrBxN,KAAAuZ,mBAAoB,EAmBpBvZ,KAAA6M,sBAAwB,KACxB7M,KAAA8M,yBAA2B,KAI3B9M,KAAA+M,YAAa,EACb/M,KAAAgN,sBAAuB,EA20BzB,OAj4BW7N,OAAAyB,eAAIyY,EAAAzZ,UAAA,YAAS,KAAb,SAAcqN,GAAvB,IAAAzJ,EAAAxD,KACEA,KAAK2L,cAAcpE,WAAW0F,GAC9BjN,KAAK4L,iBAAiBsB,IAAID,GAAKE,WAC7B,SAACC,GACC5J,EAAK6J,wDA2DXgM,EAAAzZ,UAAA0N,SAAA,WACEtN,KAAKuN,WAAa,GAElBvN,KAAKwN,oBAAqB,EAC1BxN,KAAKuZ,mBAAoB,EACzBvZ,KAAKyN,4BAA8B,GACnCzN,KAAK0N,YAAc,GACnB1N,KAAK2N,eAAiB,EACtB3N,KAAK4N,gBAAkB,GACvB5N,KAAK6N,SAAW,GAChB7N,KAAK8N,oBAAsB,GAC3B9N,KAAK+N,YAAc,GACnB/N,KAAKgO,gBAAkB,GACvBhO,KAAKiO,cAAe,EACpBjO,KAAKkO,UAAY,KAEjBlO,KAAKmO,eAAiB,EAEtBnO,KAAKoO,cAAgB,GACrBpO,KAAKqO,kBAAmB,EACxBrO,KAAKwE,eAAiB,EACtBxE,KAAKsO,eAAiB,EAEtBtO,KAAKuO,cAAc,IAEnBvO,KAAKwZ,uBACLxZ,KAAKyZ,eAAgB,EACrBzZ,KAAKqN,qBAGPgM,EAAAzZ,UAAAkJ,YAAA,WACM9I,KAAKgQ,cACPhQ,KAAKgQ,aAAaC,eAKtBoJ,EAAAzZ,UAAAyN,kBAAA,WAAA,IAAA7J,EAAAxD,KAEEA,KAAK4L,iBAAiBzI,IAAI,8CACvBgK,WAAU,SAACC,GAGV5J,EAAKwK,gBAAkBZ,EACvB5J,EAAKgW,2BAIXH,EAAAzZ,UAAA4O,mBAAA,WACE,GAAIxO,KAAKyO,iBAAkB,CACzB,IAAMC,EAA0B1O,KAAK0Z,iBAAiB9K,cACtDC,YAAW,WACT,IAAMC,EAAW/F,EAAWC,WAAW0F,EAAS,aAC5CI,GACF/F,EAAWI,aAAauF,EAASI,KAElC,GACH9O,KAAKyO,kBAAmB,IAI5B4K,EAAAzZ,UAAAmP,YAAA,SAAYC,GACNA,KAEEA,EAAQnP,eAAe,eACnBmP,EAAQsJ,WAAWrJ,aACnBD,EAAQnP,eAAe,gBAAoBG,KAAK+M,aACtD/M,KAAKoP,SAAW5N,EAAAA,aAAamY,cAEzB3Z,KAAKmM,2BACP1I,QAAQoP,KAAK,8DAEyB,KAApC7D,EAAQsJ,WAAWnJ,eACrBnP,KAAK6P,cACL7P,KAAKkV,kBAILlG,EAAQnP,eAAe,cAAiBmP,EAAQW,UAAUV,aAAiBjP,KAAK+M,aAC9E/M,KAAKmM,2BACP1I,QAAQoP,KAAK,4DAA6D7S,KAAKuN,WAAYyB,EAAQW,UAAUR,cAE3GnP,KAAK4P,mBAAmB5P,KAAKuN,WAAYyB,EAAQW,UAAUR,gBACzDnP,KAAKmM,2BACP1I,QAAQoP,KAAK,wFAEf7S,KAAK6P,cACL7P,KAAKuN,WAAayB,EAAQW,UAAUR,eAIpCH,EAAQnP,eAAe,iBAAmBmP,EAAQxD,YAAYyD,cAChEjP,KAAK+M,YAAa,EAClB/M,KAAKuZ,mBAAoB,EAEzBvZ,KAAKuN,WAAavN,KAAKkP,WAAWF,EAAQxD,YAAY2D,cAC9B,KAApBnP,KAAKuN,YAAqBvN,KAAKoP,WAAa5N,EAAAA,aAAamY,gBAM3D3Z,KAAKqO,kBAAmB,EACxBrO,KAAKwL,YAAYoO,oBACb5Z,KAAK6Z,qDAAqD7Z,KAAKwL,YAAYgE,WAAWsK,cAC1F9Z,KAAKyP,cAA8B7N,EAAW8N,sBAQtD2J,EAAAzZ,UAAAia,qDAAA,SAAqDC,GACnD,IAAIhK,EAAiB,KAOrB,OANIgK,MAAAA,IAGFhK,GADAA,EAAS9P,KAAK6L,eAAelD,iBAAiBmR,IAC9B/J,eAGXD,GAGTuJ,EAAAzZ,UAAAgQ,mBAAA,SAAmB8E,EAAgBC,GACjC,OAAOD,EAAO3E,gBAAkB4E,EAAO5E,eAGzCsJ,EAAAzZ,UAAA4Z,qBAAA,WACExZ,KAAK+Z,kBAAoB/Z,KAAK4L,iBAAiBqG,QAAQ,qCAuBzDoH,EAAAzZ,UAAAgV,OAAA,SAAOV,GACDlU,KAAK8T,eAAiB9T,KAAKiU,kBAAkBC,GAC/ClU,KAAKga,wBAAwBpL,cAAckG,QAGzC9U,KAAKiO,aACPjO,KAAKiO,cAAe,GAEpBjO,KAAKqO,kBAAmB,EACxBrO,KAAKyM,UAAUiG,KAAKlR,EAAAA,aAAamY,iBAIrCN,EAAAzZ,UAAAkU,YAAA,WACE,MAAO,2BAA2BC,KAAKhM,OAAOC,UAAUgM,YAG1DqF,EAAAzZ,UAAAqU,kBAAA,SAAkBC,GAEhB,MAAsB,iCADPA,EAAGC,wBAA0BlK,SAASmK,eACtCpB,IAGjBqG,EAAAzZ,UAAAmV,QAAA,WACE/U,KAAKqO,kBAAmB,EAIxBrO,KAAKiO,cAAe,EACpBjO,KAAKwM,WAAWkG,KAAKlR,EAAAA,aAAamY,gBAGpCN,EAAAzZ,UAAAsV,aAAA,WAEElV,KAAK0M,gBAAgBgG,KAAK1S,KAAKuN,aAGjC8L,EAAAzZ,UAAA6Y,gBAAA,WACE,OAAOzY,KAAK0N,YAAYhO,OAAS,IAAMM,KAAKqO,kBAG9CgL,EAAAzZ,UAAAsQ,mBAAA,WACElQ,KAAK6N,SAAW7N,KAAKuN,WAAW9E,MAAM,YAGxC4Q,EAAAzZ,UAAA6R,gBAAA,WACE,OAA+B,IAA3BzR,KAAKuN,WAAW7N,QAGb,eAAiBqU,KAAK/T,KAAKuN,aAGpC8L,EAAAzZ,UAAA2R,eAAA,SAAeC,GACb,GAAIA,IAAW5P,EAAW8N,iBAAoB,OAAO,EACrD,GAAK1P,KAAKyR,kBAAV,CAGA,IAAMC,EAAkB1R,KAAKuN,WAAW9E,MAAM,WACxCkJ,EAAWD,EAAgBA,EAAgBhS,OAAS,GAE1D,GAAIM,KAAK0N,YAAYkE,KAAK,SAASvB,GACjC,SAAKA,IAAQA,EAAIxQ,eAAe,YAGzBwQ,EAAIhL,OAAOoD,MAAM,UAAUmJ,KAAK,SAASC,GAC9C,GAAI7R,KAAKkR,iCAAiCW,EAAMF,GAE9C,OADA3R,KAAKoO,cAAgByD,GACd,GAETC,KAAK9R,QACP8R,KAAK9R,OAAQ,CACb,IAAM+R,EAAW/R,KAAKoO,cAAckD,MAAMK,EAASjS,OAAQM,KAAKoO,cAAc1O,QAAQqQ,cACtF/P,KAAK+N,YAAc/N,KAAKuN,WAAawE,KAIzCsH,EAAAzZ,UAAAsR,iCAAA,SAAiC/P,EAAOgQ,GAGtC,OAFAhQ,EAAQ,MAACA,EAAyCA,EAAM4O,cAAgB5O,EACxEgQ,EAAS,MAACA,EAA2CA,EAAOpB,cAAgBoB,GAEA,IADrEnR,KAAK6L,eAAelD,iBAAiBxH,GAAOmQ,MAAM,EAAGH,EAAOzR,QAChEqQ,cAAc7H,QAAQlI,KAAK6L,eAAelD,iBAAiBwI,KAGhEkI,EAAAzZ,UAAAqa,mBAAA,WACE,OAAQja,KAAK6Y,mBAAmC,GAAd,aAGpCQ,EAAAzZ,UAAAuT,kBAAA,SAAkB3B,GAAlB,IAAAhO,EAAAxD,KACEA,KAAKwE,gBAAkB,EACvB,IAAMuO,EAAQ/S,KAAK8S,qBACf9S,KAAKmM,2BAA6B1I,QAAQC,IAAI,uCAAwCqP,GACtF/S,KAAKuN,aACPvN,KAAKgQ,aAAehQ,KAAK0L,eAAehF,UAAU1G,KAAKsG,QAAStG,KAAK2G,SAAU3G,KAAKwF,WAAYuN,GAC7F5F,WACC,SAAApJ,GACMP,EAAK2I,2BAA6B1I,QAAQC,IAAI,iCAAkCK,GACpFP,EAAKkV,wBAAwB3U,EAAUyN,GAEnCA,IAAW5P,EAAW8N,kBASxBlM,EAAKwJ,sBAAiF,IAA1DxJ,EAAKgI,YAAY0O,qCAC7C1W,EAAK8P,sBAIL9P,EAAKwJ,sBAAuB,KAIhC,WAAM,OAAAxJ,EAAKoV,4BAKnBS,EAAAzZ,UAAA4T,aAAA,WACE,OAAuC,IAA9BxT,KAAKgN,qBAAkC,YAAc,IAGhEqM,EAAAzZ,UAAA0T,mBAAA,YAEgE,IAA1DtT,KAAKwL,YAAY0O,uCAEnBla,KAAKqO,kBAAmB,GAE1BrO,KAAK4M,oBAAoB8F,KAAK,IAAIpH,EAAa9J,EAAAA,aAAamY,cAAe3Z,KAAKwL,eAGlF6N,EAAAzZ,UAAAsP,WAAA,SAAW1D,GACT,IAAIgJ,EAAY,GAoBhB,OAnBoB,OAAhBhJ,GAAmD,OAA3BA,EAAYgE,aAEhChE,EAAYgE,WAAW3P,eAAe,cACxCG,KAAKoP,SAAW5D,EAAYgE,WAAWJ,UAErC5D,EAAYgE,WAAW3P,eAAe,eAAiBG,KAAKqU,SAAS7I,EAAYgE,WAAWhK,cAC9FxF,KAAKwF,WAAagG,EAAYgE,WAAWhK,YAEvCgG,EAAYgE,WAAW3P,eAAe,qBAAuBG,KAAKqU,SAAS7I,EAAYgE,WAAWlK,oBACpGtF,KAAK2G,SAAW6E,EAAYgE,WAAWlK,kBAErCkG,EAAYgE,WAAW3P,eAAe,eAAiBG,KAAKqU,SAAS7I,EAAYgE,WAAW8I,cAC9FtY,KAAKsY,WAAa9M,EAAYgE,WAAW8I,YAEvC9M,EAAYgE,WAAW3P,eAAe,iBACnCG,KAAKqU,SAAS7I,EAAYgE,WAAWsK,eAAiB9Z,KAAK6Y,qBAChErE,EAAYhJ,EAAYgE,WAAWsK,eAGlCtF,GAGT6E,EAAAzZ,UAAAyU,SAAA,SAASpH,GACP,OAAIA,MAAAA,GAGGA,EAAIqH,cAAgBC,QAG7B8E,EAAAzZ,UAAAkZ,QAAA,SAAQ7L,GACN,OAAOjN,KAAKqU,SAASpH,IAAgB,KAARA,GAG/BoM,EAAAzZ,UAAAiZ,iBAAA,WAIE,OAAO7Y,KAAK8Y,QAAQ9Y,KAAKwF,aAAexF,KAAK8Y,QAAQ9Y,KAAK2G,WAAa3G,KAAK8Y,QAAQ9Y,KAAKsY,aAG3Fe,EAAAzZ,UAAAkT,mBAAA,WACE,IAAMC,EAAQ,IAAIlR,EAAgB,CAChCmR,GAAIhT,KAAKwE,eACTyO,EAAGjT,KAAKuN,WACR/H,WAAYxF,KAAKwF,WACjBmB,SAAU3G,KAAK2G,SACfwT,OAAQna,KAAKsY,WACbpF,uBAAwBlT,KAAKgM,oBAM/B,MAH0B,MAAtBhM,KAAKkM,cACP6G,EAAMzQ,gBAAe,GAEhByQ,GAGTsG,EAAAzZ,UAAA8Y,wBAAA,SAAwBjF,EAAWjC,GAC7BiC,GAAQA,EAAK1P,UAAY0P,EAAK1P,SAASS,gBAAkBiP,EAAK1P,SAASS,gBAAkBxE,KAAKsO,gBAChGmF,EAAK1P,SAASU,iBACdzE,KAAKsO,eAAiBmF,EAAK1P,SAASS,eACpCxE,KAAK0T,mBACL1T,KAAK2T,oBAAoBF,EAAK1P,SAASU,eAAgB+M,GACvDxR,KAAKuR,eAAeC,GACpBxR,KAAKgS,8BACLhS,KAAKkQ,sBAEPlQ,KAAKqO,kBAAwC,IAApBrO,KAAK+M,YAA4C,OAArB/M,KAAKwL,cAC/BxL,KAAKwL,YAAYgE,WAAWoE,oCAGzDyF,EAAAzZ,UAAAgZ,qBAAA,WACE5Y,KAAK6T,6BAGPwF,EAAAzZ,UAAAiU,0BAAA,WACE7T,KAAKkO,UAAY,sBAEjBlO,KAAKoS,gCAAgC7Q,EAAAA,sBAAsBiR,sBAG7D6G,EAAAzZ,UAAAoS,4BAAA,WACE,GAAIhS,KAAKkO,UAAW,CAClB,IAAMd,EAAMpN,KAAK4L,iBAAiBqG,QAAQjS,KAAKkO,WAC3ClO,KAAKyN,8BAAgCL,GACvCpN,KAAKkS,mCAEPlS,KAAKkO,UAAY,OAIrBmL,EAAAzZ,UAAA+T,oBAAA,SAAoBlP,EAAgB+M,WAClC,GAAI/M,EAAe6P,cAAgB4B,MAAO,KAExC,IAAkB,IAAAC,EAAAtV,EAAA4D,GAAc2R,EAAAD,EAAAjV,QAAAkV,EAAAhV,KAAAgV,EAAAD,EAAAjV,OAChC,CADK,IAAMmP,EAAG+F,EAAAjV,MAEZnB,KAAKmV,sBAAsB9E,EAAKmB,qGAGlC,GAAKA,GAUH,GAAIxR,KAAK+M,YAAc/M,KAAKoa,mBACqC,IAA1Dpa,KAAKwL,YAAY0O,sCACwB,OAAzCla,KAAKwL,YAAYoO,0BACwBxS,IAAzCpH,KAAKwL,YAAYoO,qBACjB5Z,KAAKwL,YAAYoO,oBAAoBla,OAAS,EACrD,CAEE,IAAM0V,EAAapV,KAAKqa,kCACpBra,KAAKmM,2BAA6B1I,QAAQC,IAAI,kDAAmD0R,GACrGpV,KAAK4V,4BAA4BR,SAjBJ,IAA1B3Q,EAAe/E,QAAgBM,KAAKyZ,gBAAkBzZ,KAAKoa,kBAC9Dpa,KAAK0N,YAAY9I,KAAK,CAACS,OAAQrF,KAAKuN,WAAY+M,eAAe,SAqBnEta,KAAKmV,sBAAsB1Q,EAAgB+M,IAI/C6H,EAAAzZ,UAAAya,gCAAA,WACE,IAAME,EAAsB,CAAClV,OAAQrF,KAAKuN,WAAY+M,eAAe,GAC/DE,EAAmBxa,KAAKwL,YAAYuN,oCACpC0B,EAAQvb,EAAAA,EAAA,GAAOsb,EAAiB1V,SAAYyV,UAC3CE,EAASC,iBACTD,EAASE,SAEhBF,EAASG,YAAcH,EAASpV,OAChCoV,EAASrV,gBAAkBqV,EAASpV,OACpC,IAAIwV,GAAa,EACjB,GAAI7a,KAAKwL,YAAYgE,WAAW3P,eAAe,aAC/C,CACE,IAAMib,EAAK9a,KAAKwL,YAAYgE,WAAWuL,UACvCF,IAAcC,MAAAA,GAAmCA,EAAGpb,OAAS,QAI7Dmb,GAAa,EAMf,OAJmB,IAAfA,IACFJ,EAASI,WAAaA,GAExBL,EAAiB1V,QAAU2V,EACpBD,GAGTnB,EAAAzZ,UAAAuV,sBAAA,SAAsBC,EAAiB5D,GACrC,IAAI6D,EACArV,KAAK2L,cAAchE,kBAAoByN,EAAWvV,eAAe,UACnEwV,EAAkBD,EAAWE,OACpBtV,KAAK2L,cAAclE,iBAAmB2N,EAAWvV,eAAe,SACzEwV,EAAkBD,EAAWG,MACpBvV,KAAK2L,cAAc/D,kBAAoBwN,EAAWvV,eAAe,UAC1EwV,EAAkBD,EAAWI,OACpBJ,EAAWvV,eAAe,aACnCwV,EAAkBD,EAAWtQ,SAE3BuQ,IACED,EAAWK,WACbJ,EAAgBI,SAAWL,EAAWK,UAEpCJ,EAAgBuF,cAAgB5a,KAAKuN,aACvCvN,KAAKyZ,eAAgB,GAEvBzZ,KAAK0N,YAAY9I,KAAKyQ,GAClBrV,KAAKmM,2BACP1I,QAAQC,IAAI,wCAAyC2R,GAEnD7D,IAAW5P,EAAW8N,mBAExB0F,EAAWtQ,QAAUuQ,EACrBrV,KAAK4V,4BAA4BR,MAKvCiE,EAAAzZ,UAAAgW,4BAAA,SAA4BR,GAE1B,GAAMpV,KAAKuZ,kBA2BLvZ,KAAKmM,2BACP1I,QAAQC,IAAI,0FAA2F0R,OA3B3G,CACMpV,KAAKmM,2BACP1I,QAAQC,IAAI,uDAAwD1D,KAAKwL,YAAa4J,GAExF,IAAMS,EAAaT,EAAWtQ,QACxBkW,EAAyBhb,KAAK6Z,qDAAqD,GAAKhE,EAAW+E,aACrG5a,KAAKmM,2BACP1I,QAAQC,IAAI,2BAA4BsX,EAAwBhb,KAAKwL,YAAYoO,qBAE/EoB,IAA4B,GAAKhb,KAAKwL,YAAYoO,sBAEpD5Z,KAAKwL,YAAY0O,sCAAuC,EACxDla,KAAKwL,YAAYyP,0CAA4C7F,EAC7DpV,KAAKuN,WAAasI,EAAW+E,YACzB/E,EAAWhW,eAAe,gBAA2C,IAA1BgW,EAAWgF,aACxD7a,KAAKwW,gBAAgB,KAAMX,GAC3B7V,KAAKuZ,mBAAoB,EAErBvZ,KAAKmM,4BAAwD,IAA3BnM,KAAKuZ,mBACzC9V,QAAQC,IAAI,2CAatB2V,EAAAzZ,UAAA6P,cAAA,SAAc+B,GACRxR,KAAKmM,2BACP1I,QAAQC,IAAI,8BAA+B8N,GAE7CxR,KAAKqO,kBAAmB,EACxBrO,KAAKwN,oBAAqB,EAC1BxN,KAAKuZ,mBAAoB,EAEzBvZ,KAAKyZ,eAAgB,EACrBzZ,KAAKiV,0BACAzD,IACHxR,KAAK+M,YAAa,EACd/M,KAAKmM,2BACP1I,QAAQC,IAAI,uDAEd1D,KAAKkV,gBAEPlV,KAAKkS,mCACmB,KAApBlS,KAAKuN,YACPvN,KAAKwE,gBAAkB,EACvBxE,KAAKsO,eAAiBtO,KAAKwE,eAC3BxE,KAAK0T,oBAEL1T,KAAKmT,kBAAkB3B,GAEzBxR,KAAKkQ,sBAGPmJ,EAAAzZ,UAAA4W,gBAAA,SAAgBC,EAAYrB,GAI1B,GAHApV,KAAKgN,sBAAuB,EACxBhN,KAAKmM,2BAA6B1I,QAAQC,IAAI,gCAAiC+S,EAAOrB,GAC1FqB,MAAAA,GAAAA,EAAOC,iBACHtB,EAAY,CACdpV,KAAKmS,iBACLnS,KAAKiV,0BACDG,EAAW/P,QACbrF,KAAKuO,cAAc6G,EAAW/P,QAEhCrF,KAAKqO,kBAAmB,EAExB,IAAM6M,EAAY9F,EAAW,eACvB+F,EAAcD,MAAAA,IAA+D,IAAdA,EAEjE9F,EAAW,iBACbA,EAAapV,KAAKob,sBAAsBhG,GACpCpV,KAAKmM,2BAA6B1I,QAAQC,IAAI,8CAA+C+S,EAAOrB,IAEtGA,EAAWvV,eAAe,gBAA2C,IAA1BuV,EAAWyF,aAAwBM,IAChFnb,KAAKuZ,mBAAoB,GAG3BvZ,KAAKwN,oBAAqB,EACtBiJ,GACFzW,KAAK0T,mBAEP1T,KAAK2W,mBAAmBvB,KAI5BiE,EAAAzZ,UAAAwb,sBAAA,SAAsBhG,GAChBpV,KAAKmM,2BACP1I,QAAQC,IAAI,2DAA4D0R,EAAYpV,KAAKqb,iBAE3F,IAAMZ,EAAQvb,EAAAA,EAAA,GAAOc,KAAKqb,iBAAoBjG,GAW9C,cAVOqF,EAASa,gBACTb,EAASc,iBACTd,EAASe,iBACTf,EAASgB,aACThB,EAASE,gBACTF,EAASgB,aACThB,EAASgB,MAChBhB,EAASG,YAAcH,EAASpV,OAChCoV,EAASrV,gBAAkBqV,EAASpV,OACpCoV,EAASI,YAAa,EACfJ,GAGTpB,EAAAzZ,UAAA+W,mBAAA,SAAmBvB,GAEjB,IAAM8F,EAAY9F,EAAW,eACvB+F,EAAcD,MAAAA,IAA+D,IAAdA,EACrElb,KAAKuZ,qBAAqBnE,EAAWvV,eAAe,gBAA2C,IAA1BuV,EAAWyF,YAAwBM,GACxGnb,KAAKuM,eAAemG,KAAK0C,IAG3BiE,EAAAzZ,UAAA0W,qBAAA,WACEtW,KAAKuM,eAAemG,KAAK,MACzB1S,KAAKwN,oBAAqB,EAC1BxN,KAAKuZ,mBAAoB,GAI3BF,EAAAzZ,UAAAwS,gCAAA,SAAgCC,EAA8ChP,GAE5E,GAAIgP,MAAAA,EAKJ,OAAQA,GAEN,KAAK9Q,EAAAA,sBAAsB+Q,kBAC3B,KAAK/Q,EAAAA,sBAAsBgR,kBAC3B,KAAKhR,EAAAA,sBAAsBiR,oBACvB,IAAMC,EAAUzS,KAAK4L,iBAAiBqG,QAAQI,GAE9CrS,KAAKqM,eAAeqG,KAAK,CAACC,YAAaN,EAAuBO,kBAAmBH,IAGnF,MAEF,QACIhP,QAAQS,MAAM,iEAAkEmO,QAjBpF5O,QAAQoP,KAAK,8DAA+DR,IAyBhFgH,EAAAzZ,UAAA8b,yBAAA,WACE1b,KAAKuZ,mBAAoB,EAGzBvZ,KAAKoS,gCAAgC7Q,EAAAA,sBAAsBgR,oBAG7D8G,EAAAzZ,UAAAqX,aAAA,SAAaR,GACX,OAAQA,EAAMS,OAEZ,KAAK,GACHT,EAAMC,iBACN1W,KAAK8W,6BACL,MAGF,KAAK,GACHL,EAAMC,iBACN1W,KAAKgX,2BACL,MAEF,KAAK,GACHP,EAAMC,iBACF1W,KAAK4W,2BACP5W,KAAKwW,gBAAgBC,EAAOzW,KAAK0N,YAAY1N,KAAKmO,gBAE9CnO,KAAKoO,eAAiBpO,KAAKmX,qBAC7BnX,KAAKuO,cAAcvO,KAAK+N,aACxB/N,KAAKoO,cAAgB,IAGzB,MAEF,KAAK,EACEpO,KAAKwN,oBAAuBiJ,EAAMwC,WACrCxC,EAAMC,iBACN1W,KAAKoX,iCAEP,MAEF,KAAK,GACCX,EAAMY,SACRrX,KAAK6P,cAEP,MAEF,KAAK,GACH4G,EAAMC,iBACF1W,KAAK4W,4BACP5W,KAAKwW,gBAAgBC,EAAOzW,KAAK0N,YAAY1N,KAAKmO,gBAGpD,MAEF,QACEnO,KAAKmS,mBAMXkH,EAAAzZ,UAAAiQ,YAAA,WACM7P,KAAKmM,2BAA6B1I,QAAQC,IAAI,+BAClD1D,KAAKwN,oBAAqB,EAC1BxN,KAAKuZ,mBAAoB,EAEzBvZ,KAAKuW,kBACLvW,KAAK0T,mBACL1T,KAAKmS,iBACLnS,KAAKwL,YAAc,MAIrB6N,EAAAzZ,UAAA2W,gBAAA,WACEvW,KAAKuN,WAAa,IAGpB8L,EAAAzZ,UAAAuX,iBAAA,WACE,OAAOnX,KAAK+N,aAAe/N,KAAK+N,YAAYrO,OAAS,GAGvD2Z,EAAAzZ,UAAAqV,wBAAA,WACEjV,KAAKmO,eAAiB,GAGxBkL,EAAAzZ,UAAAkX,2BAAA,WACM9W,KAAKmO,cAAgB,IAAMnO,KAAK0N,YAAYhO,SAC9CM,KAAKmO,gBACLnO,KAAK6W,kBACL7W,KAAK+W,mCAAmC/W,KAAKmO,cAAenO,KAAKmO,cAAgB,KAIrFkL,EAAAzZ,UAAAoX,yBAAA,WACMhX,KAAKmO,cAAgB,IAAO,IAC9BnO,KAAKmO,gBACLnO,KAAK6W,kBACL7W,KAAK+W,mCAAmC/W,KAAKmO,cAAenO,KAAKmO,cAAgB,KAIrFkL,EAAAzZ,UAAAgX,yBAAA,WACE,OAAO5W,KAAKmO,eAAiB,GAG/BkL,EAAAzZ,UAAAmX,mCAAA,SAAmCpC,EAAQD,QAC1BtN,IAAXuN,GAAwB3U,KAAK0N,YAAYhO,QAAU,KAGvC,IAAZiV,IACc,IAAZD,IACF1U,KAAK4N,gBAAkB5N,KAAKuN,YAE9BvN,KAAKuO,cAAcvO,KAAK0N,YAAY1N,KAAKmO,eAAe9I,QACxDrF,KAAKmS,kBAELnS,KAAKuO,cAAcvO,KAAK4N,mBAI5ByL,EAAAzZ,UAAA6U,mBAAA,WACE,OAAOzU,KAAKuN,YAAcvN,KAAKuN,WAAW7N,OAAS,GAGrD2Z,EAAAzZ,UAAA+b,yBAAA,SAAyB7G,EAAgBpC,QAAA,IAAAA,IAAAA,GAAA,GAEvC1S,KAAK6P,cACL7P,KAAKiV,0BACLjV,KAAK2N,eAAiB,EACtB3N,KAAK4N,gBAAkB,GACvB5N,KAAKkS,mCACLlS,KAAKkV,eACLlV,KAAKgS,+BACS,IAAV8C,GACF9U,KAAKga,wBAAwBpL,cAAckG,QAGzCpC,GACF1S,KAAK2M,uBAAuB+F,KAAyBrH,EAAcsO,gBAoBvEN,EAAAzZ,UAAA8T,iBAAA,WACE1T,KAAK6N,SAAW,GAChB7N,KAAK0N,YAAc,GACnB1N,KAAK8N,oBAAsB,IAG7BuL,EAAAzZ,UAAAuS,eAAA,WACEnS,KAAK+N,YAAc,IAGrBsL,EAAAzZ,UAAAsS,iCAAA,WACElS,KAAKyN,4BAA8B,GACnCzN,KAAKwN,oBAAqB,EAE1BxN,KAAKqM,eAAeqG,KAAK,CAACC,YAAa,KAAMC,kBAAmB5S,KAAKyN,8BACrEzN,KAAK8M,yBAA2B,KAChC9M,KAAK6M,sBAAwB,MAG/BwM,EAAAzZ,UAAA2O,cAAA,SAAcpN,GACZnB,KAAKuN,WAAapM,GAGpBkY,EAAAzZ,UAAAwX,8BAAA,WACEpX,KAAKmO,cAAgB,EACrBnO,KAAK6W,kBACL7W,KAAK+W,mCAAmC/W,KAAKmO,cAAenO,KAAKmO,cAAgB,IAGnFkL,EAAAzZ,UAAAiX,gBAAA,WACM7W,KAAK0N,YAAYhO,OAAS,IAC5BM,KAAKyO,kBAAmB,IAI5B4K,EAAAzZ,UAAAsZ,qBAAA,WACElZ,KAAKmO,eAAiB,GAGxBkL,EAAAzZ,UAAAuZ,2BAAA,WAEEnZ,KAAKoS,gCAAgC7Q,EAAAA,sBAAsB+Q,oBAG7D+G,EAAAzZ,UAAAwZ,WAAA,WACE,MAA0B,KAAlBpZ,KAAK2G,UAAuC,KAApB3G,KAAKwF,YAAqBxF,KAAKoP,SAAW5N,EAAAA,aAAamY,eAGzFN,EAAAzZ,UAAAoV,aAAA,WACMhV,KAAKmM,2BAA6B1I,QAAQC,IAAI,iEAr0B1BqC,SACDkB,SACGwQ,EAAAA,wBACFnP,KApF8BrI,EAAA,CAAvDyX,EAAAA,UAAU,0BAA2B,CAACC,QAAQ,mDACE1X,EAAA,CAAhDyX,EAAAA,UAAU,mBAAoB,CAACC,QAAQ,4CAO/B1X,EAAA,CAAR2X,EAAAA,2CACQ3X,EAAA,CAAR2X,EAAAA,yDAEQ3X,EAAA,CAAR2X,EAAAA,gDACQ3X,EAAA,CAAR2X,EAAAA,iDACQ3X,EAAA,CAAR2X,EAAAA,qDACQ3X,EAAA,CAAR2X,EAAAA,4CACQ3X,EAAA,CAAR2X,EAAAA,uCACQ3X,EAAA,CAAR2X,EAAAA,6CACQ3X,EAAA,CAAR2X,EAAAA,0CACQ3X,EAAA,CAAR2X,EAAAA,wCACQ3X,EAAA,CAAR2X,EAAAA,0CACQ3X,EAAA,CAAR2X,EAAAA,gDACQ3X,EAAA,CAAR2X,EAAAA,+CAGQ3X,EAAA,CAAR2X,EAAAA,uCAQQ3X,EAAA,CAAR2X,EAAAA,6CACQ3X,EAAA,CAAR2X,EAAAA,yCAGD3X,EAAA,CADC2X,EAAAA,0CAGS3X,EAAA,CAAT4X,EAAAA,+CACS5X,EAAA,CAAT4X,EAAAA,+CACS5X,EAAA,CAAT4X,EAAAA,2CACS5X,EAAA,CAAT4X,EAAAA,0CACS5X,EAAA,CAAT4X,EAAAA,gDACS5X,EAAA,CAAT4X,EAAAA,mDAGS5X,EAAA,CAAT4X,EAAAA,uDAES5X,EAAA,CAAT4X,EAAAA,oDAnDUwB,EAAqBpZ,EAAA,CALjC6X,EAAAA,UAAU,CACT7O,SAAU,mBACV8O,SAAA,q4EAGWsB,mBCsFX,SAAAuC,EACUlQ,EACAC,EACAC,EACAC,GAHA7L,KAAA0L,eAAAA,EACA1L,KAAA2L,cAAAA,EACA3L,KAAA4L,iBAAAA,EACA5L,KAAA6L,eAAAA,EA9ED7L,KAAAmM,2BAA4B,EAE5BnM,KAAA8L,iBAAmB,yBACnB9L,KAAAgM,kBAAoB,EACpBhM,KAAAiY,sBAAwB,EACxBjY,KAAAkM,aAAe,GAwBflM,KAAA+L,cAAgB,IAGzB/L,KAAAoM,YAAW,EAEDpM,KAAAqM,eAAgG,IAAIC,EAAAA,aACpGtM,KAAAuM,eAAoC,IAAID,EAAAA,aACxCtM,KAAAwM,WAAgC,IAAIF,EAAAA,aACpCtM,KAAAyM,UAA+B,IAAIH,EAAAA,aACnCtM,KAAA0M,gBAAqC,IAAIJ,EAAAA,aACzCtM,KAAAsZ,mBAAwC,IAAIhN,EAAAA,aAE5CtM,KAAA2M,uBAA+C,IAAIL,EAAAA,aAEnDtM,KAAA4M,oBAAkD,IAAIN,EAAAA,aAuBhEtM,KAAA6M,sBAAwB,KACxB7M,KAAA8M,yBAA2B,KAI3B9M,KAAA+M,YAAa,EACb/M,KAAAgN,sBAAuB,EA0uBzB,OAlyBW7N,OAAAyB,eAAIgb,EAAAhc,UAAA,YAAS,KAAb,SAAcqN,GAAvB,IAAAzJ,EAAAxD,KAEEA,KAAK2L,cAAcpE,WAAW0F,GAC9BjN,KAAK4L,iBAAiBsB,IAAID,GAAKE,WAC7B,SAACC,GAEC5J,EAAK6J,wDA2DXuO,EAAAhc,UAAA0N,SAAA,WACEtN,KAAKuN,WAAa,GAElBvN,KAAKwN,oBAAqB,EAC1BxN,KAAKyN,4BAA8B,GACnCzN,KAAK0N,YAAc,GACnB1N,KAAK2N,eAAiB,EACtB3N,KAAK4N,gBAAkB,GACvB5N,KAAK6N,SAAW,GAChB7N,KAAK8N,oBAAsB,GAC3B9N,KAAK+N,YAAc,GACnB/N,KAAKgO,gBAAkB,GACvBhO,KAAKiO,cAAe,EACpBjO,KAAKkO,UAAY,KAEjBlO,KAAKmO,eAAiB,EAEtBnO,KAAKoO,cAAgB,GACrBpO,KAAKqO,kBAAmB,EACxBrO,KAAKwE,eAAiB,EACtBxE,KAAKsO,eAAiB,EAEtBtO,KAAKuO,cAAc,IAEnBvO,KAAKwZ,uBACLxZ,KAAKyZ,eAAgB,EACrBzZ,KAAKqN,qBAGPuO,EAAAhc,UAAA4O,mBAAA,WACE,GAAIxO,KAAKyO,iBAAkB,CACzB,IAAMC,EAA0B1O,KAAK6b,cAAcjN,cACnDC,YAAW,WACT,IAAMC,EAAW/F,EAAWC,WAAW0F,EAAS,aAC5CI,GACF/F,EAAWI,aAAauF,EAASI,KAElC,GACH9O,KAAKyO,kBAAmB,IAI5BmN,EAAAhc,UAAAmP,YAAA,SAAYC,GACNA,IACEA,EAAQnP,eAAe,iBAAmBmP,EAAQxD,YAAYyD,cAChEjP,KAAK+M,YAAa,EAClB/M,KAAKuN,WAAavN,KAAKkP,WAAWF,EAAQxD,YAAY2D,cAC9B,KAApBnP,KAAKuN,YAAqBvN,KAAKoP,WAAa5N,EAAAA,aAAasa,aAG3D9b,KAAKqO,kBAAmB,EACxBrO,KAAKwL,YAAYuQ,iBACb/b,KAAKgc,kDAAkDhc,KAAKwL,YAAYgE,WAAWuL,WACvF/a,KAAKyP,cAA8B7N,EAAW8N,qBAI9CV,EAAQnP,eAAe,iBAAoBmP,EAAQ8K,aAAa7K,aAAgBD,EAAQnP,eAAe,iBACzGG,KAAKoP,SAAW5N,EAAAA,aAAasa,WAC7B9b,KAAK6P,cACL7P,KAAKkV,kBAkBX0G,EAAAhc,UAAAoc,kDAAA,SAAkDjB,GAChD,IAAIjL,EAAiB,KAOrB,OANIiL,MAAAA,IAGFjL,GADAA,EAAS9P,KAAK6L,eAAelD,iBAAiBoS,IAC9BhL,eAGXD,GAGT8L,EAAAhc,UAAAkJ,YAAA,WACM9I,KAAKgQ,cACPhQ,KAAKgQ,aAAaC,eAKtB2L,EAAAhc,UAAAyN,kBAAA,WAAA,IAAA7J,EAAAxD,KAGEA,KAAK4L,iBAAiBzI,IAAI,2CACvBgK,WAAU,SAACC,GAGV5J,EAAKwK,gBAAkBZ,EACvB5J,EAAKgW,2BAIXoC,EAAAhc,UAAA4Z,qBAAA,WAEExZ,KAAK+Z,kBAAoB/Z,KAAK4L,iBAAiBqG,QAAQ,kCAGzD2J,EAAAhc,UAAA2Y,kBAAA,SAAkB9B,EAAO3B,GACvB9U,KAAKqW,WAAWvB,IAGlB8G,EAAAhc,UAAAgV,OAAA,SAAOV,GACDlU,KAAK8T,eAAiB9T,KAAKiU,kBAAkBC,GAC/ClU,KAAKic,qBAAqBrN,cAAckG,QAGtC9U,KAAKiO,aACPjO,KAAKiO,cAAe,GAEpBjO,KAAKqO,kBAAmB,EACxBrO,KAAKyM,UAAUiG,KAAKlR,EAAAA,aAAasa,cAIrCF,EAAAhc,UAAAkU,YAAA,WACE,MAAO,2BAA2BC,KAAKhM,OAAOC,UAAUgM,YAG1D4H,EAAAhc,UAAAqU,kBAAA,SAAkBC,GAEhB,MAAsB,wBADPA,EAAGC,wBAA0BlK,SAASmK,eACtCpB,IAGjB4I,EAAAhc,UAAAmV,QAAA,WACE/U,KAAKqO,kBAAmB,EAIxBrO,KAAKiO,cAAe,EACpBjO,KAAKwM,WAAWkG,KAAKlR,EAAAA,aAAasa,aAGpCF,EAAAhc,UAAAsV,aAAA,WACElV,KAAK0M,gBAAgBgG,KAAK1S,KAAKuN,aAGjCqO,EAAAhc,UAAA6Y,gBAAA,WACE,OAAOzY,KAAK0N,YAAYhO,OAAS,IAAMM,KAAKqO,kBAG9CuN,EAAAhc,UAAAsQ,mBAAA,WACElQ,KAAK6N,SAAW7N,KAAKuN,WAAW9E,MAAM,YAGxCmT,EAAAhc,UAAA6R,gBAAA,SAAgBD,GACd,OAAIA,IAAW5P,EAAW8N,mBACK,IAA3B1P,KAAKuN,WAAW7N,QAGb,eAAiBqU,KAAK/T,KAAKuN,cAGpCqO,EAAAhc,UAAA2R,eAAA,SAAeC,GACb,GAAKxR,KAAKyR,gBAAgBD,GAA1B,CAGA,IAAME,EAAkB1R,KAAKuN,WAAW9E,MAAM,WACxCkJ,EAAWD,EAAgBA,EAAgBhS,OAAS,GAE1D,GAAIM,KAAK0N,YAAYkE,KAAK,SAASvB,GACjC,SAAKA,IAAQA,EAAIxQ,eAAe,YAGzBwQ,EAAIhL,OAAOoD,MAAM,UAAUmJ,KAAK,SAASC,GAC9C,GAAI7R,KAAKkR,iCAAiCW,EAAMF,GAE9C,OADA3R,KAAKoO,cAAgByD,GACd,GAETC,KAAK9R,QACP8R,KAAK9R,OAAQ,CACb,IAAM+R,EAAW/R,KAAKoO,cAAckD,MAAMK,EAASjS,OAAQM,KAAKoO,cAAc1O,QAAQqQ,cACtF/P,KAAK+N,YAAc/N,KAAKuN,WAAawE,KAIzC6J,EAAAhc,UAAAsR,iCAAA,SAAiC/P,EAAOgQ,GAGtC,OAFAhQ,EAAQ,MAACA,EAAyCA,EAAM4O,cAAgB5O,EACxEgQ,EAAS,MAACA,EAA2CA,EAAOpB,cAAgBoB,GAEA,IADrEnR,KAAK6L,eAAelD,iBAAiBxH,GAAOmQ,MAAM,EAAGH,EAAOzR,QAChEqQ,cAAc7H,QAAQlI,KAAK6L,eAAelD,iBAAiBwI,KAGhEyK,EAAAhc,UAAAuT,kBAAA,SAAkB3B,GAAlB,IAAAhO,EAAAxD,KACEA,KAAKwE,gBAAkB,EACvB,IAAMuO,EAAQ/S,KAAK8S,qBACf9S,KAAKmM,2BAA6B1I,QAAQC,IAAI,oCAAqCqP,GACnF/S,KAAKuN,aACPvN,KAAKgQ,aAAehQ,KAAK0L,eAAe3E,OAAO/G,KAAKsG,QAAStG,KAAK2G,SAAU3G,KAAKwF,WAAYuN,GAC1F5F,WACC,SAAApJ,GACEP,EAAK0Y,qBAAqBnY,EAAUyN,GAChCA,IAAW5P,EAAW8N,kBAExBlM,EAAKwJ,sBAA8E,IAAvDxJ,EAAKgI,YAAY2Q,kCAC7C3Y,EAAK8P,sBAIL9P,EAAKwJ,sBAAuB,KAIhC,WAAM,OAAAxJ,EAAK4Y,yBAKnBR,EAAAhc,UAAA4T,aAAA,WACE,OAAuC,IAA9BxT,KAAKgN,qBAAkC,YAAc,IAGhE4O,EAAAhc,UAAA0T,mBAAA,YAE6D,IAAvDtT,KAAKwL,YAAY2Q,oCAEnBnc,KAAKqO,kBAAmB,GAE1BrO,KAAK4M,oBAAoB8F,KAAK,IAAIpH,EAAa9J,EAAAA,aAAasa,WAAY9b,KAAKwL,eAG/EoQ,EAAAhc,UAAAsP,WAAA,SAAW1D,GACT,IAAIgJ,EAAY,GAuBhB,OAtBoB,OAAhBhJ,GAAmD,OAA3BA,EAAYgE,aAElChE,EAAYgE,WAAW3P,eAAe,cACxCG,KAAKoP,SAAW5D,EAAYgE,WAAWJ,UAErC5D,EAAYgE,WAAW3P,eAAe,eAAiBG,KAAKqU,SAAS7I,EAAYgE,WAAWhK,cAC9FxF,KAAKwF,WAAagG,EAAYgE,WAAWhK,YAEvCgG,EAAYgE,WAAW3P,eAAe,qBAAuBG,KAAKqU,SAAS7I,EAAYgE,WAAWlK,oBACpGtF,KAAK2G,SAAW6E,EAAYgE,WAAWlK,kBAErCkG,EAAYgE,WAAW3P,eAAe,eAAiBG,KAAKqU,SAAS7I,EAAYgE,WAAW8I,cAC9FtY,KAAKsY,WAAa9M,EAAYgE,WAAW8I,YAEvC9M,EAAYgE,WAAW3P,eAAe,iBAAmBG,KAAKqU,SAAS7I,EAAYgE,WAAWsK,gBAChG9Z,KAAK8Z,aAAetO,EAAYgE,WAAWsK,cAEzCtO,EAAYgE,WAAW3P,eAAe,cACnCG,KAAKqU,SAAS7I,EAAYgE,WAAWuL,YAAc/a,KAAK6Y,qBAC7DrE,EAAYhJ,EAAYgE,WAAWuL,YAGhCvG,GAGToH,EAAAhc,UAAAyU,SAAA,SAASpH,GACP,OAAIA,MAAAA,GAGGA,EAAIqH,cAAgBC,QAG7BqH,EAAAhc,UAAAkZ,QAAA,SAAQ7L,GACN,OAAOjN,KAAKqU,SAASpH,IAAgB,KAARA,GAG/B2O,EAAAhc,UAAAiZ,iBAAA,WACE,OAAO7Y,KAAK8Y,QAAQ9Y,KAAKwF,aAAexF,KAAK8Y,QAAQ9Y,KAAK2G,WAAa3G,KAAK8Y,QAAQ9Y,KAAKsY,aAAetY,KAAK8Y,QAAQ9Y,KAAK8Z,eAG5H8B,EAAAhc,UAAAkT,mBAAA,WAEE,IAAMC,EAAQ,IAAIlR,EAAgB,CAChCmR,GAAIhT,KAAKwE,eACTyO,EAAGjT,KAAKuN,WACR/H,WAAYxF,KAAKwF,WACjBmB,SAAU3G,KAAK2G,SACfwT,OAAQna,KAAKsY,WACbwB,aAAc9Z,KAAK8Z,aACnB5G,uBAAwBlT,KAAKgM,oBAM/B,MAH0B,MAAtBhM,KAAKkM,cACP6G,EAAMvQ,WAAU,GAEXuQ,GAGT6I,EAAAhc,UAAAsc,qBAAA,SAAqBzI,EAAWjC,GAC1BiC,GAAQA,EAAK1P,UAAY0P,EAAK1P,SAASS,gBAAkBiP,EAAK1P,SAASS,gBAAkBxE,KAAKsO,gBAChGmF,EAAK1P,SAASU,iBACdzE,KAAKsO,eAAiBmF,EAAK1P,SAASS,eACpCxE,KAAK0T,mBACL1T,KAAK2T,oBAAoBF,EAAK1P,SAASU,eAAgB+M,GACvDxR,KAAKuR,eAAeC,GACpBxR,KAAKgS,8BACLhS,KAAKkQ,sBAEPlQ,KAAKqO,kBAAwC,IAApBrO,KAAK+M,YAA4C,OAArB/M,KAAKwL,cAC/BxL,KAAKwL,YAAYgE,WAAWoE,oCAGzDgI,EAAAhc,UAAAwc,kBAAA,WACEpc,KAAK6T,6BAGP+H,EAAAhc,UAAAiU,0BAAA,WACE7T,KAAKkO,UAAY,sBAEjBlO,KAAKoS,gCAAgC7Q,EAAAA,sBAAsBiR,sBAG7DoJ,EAAAhc,UAAAoS,4BAAA,WACE,GAAIhS,KAAKkO,UAAW,CAClB,IAAMd,EAAMpN,KAAK4L,iBAAiBqG,QAAQjS,KAAKkO,WAC3ClO,KAAKyN,8BAAgCL,GACvCpN,KAAKkS,mCAEPlS,KAAKkO,UAAY,OAIrB0N,EAAAhc,UAAA+T,oBAAA,SAAoBlP,EAAgB+M,WAClC,GAAI/M,EAAe6P,cAAgB4B,MAAO,KAExC,IAAkB,IAAAC,EAAAtV,EAAA4D,GAAc2R,EAAAD,EAAAjV,QAAAkV,EAAAhV,KAAAgV,EAAAD,EAAAjV,OAChC,CADK,IAAMmP,EAAG+F,EAAAjV,MAEZnB,KAAKmV,sBAAsB9E,EAAKmB,qGAElC,GAAIA,GAUF,GAAGxR,KAAK+M,YAAc/M,KAAKoa,mBACmC,IAAvDpa,KAAKwL,YAAY2Q,mCACqB,OAAtCnc,KAAKwL,YAAYuQ,uBACqB3U,IAAtCpH,KAAKwL,YAAYuQ,kBACjB/b,KAAKwL,YAAYuQ,iBAAiBrc,OAAS,EAClD,CAEE,IAAM0V,EAAapV,KAAKqa,kCACpBra,KAAKmM,2BAA6B1I,QAAQC,IAAI,+CAAgD0R,GAClGpV,KAAK4V,4BAA4BR,SAjBJ,IAA1B3Q,EAAe/E,QAAgBM,KAAKyZ,gBAAkBzZ,KAAKoa,kBAC9Dpa,KAAK0N,YAAY9I,KAAK,CAACS,OAAQrF,KAAKuN,WAAY+M,eAAe,SAqBnEta,KAAKmV,sBAAsB1Q,EAAgB+M,IAI/CoK,EAAAhc,UAAAya,gCAAA,WACE,IAAME,EAAsB,CAAClV,OAAQrF,KAAKuN,WAAY+M,eAAe,GAC/D+B,EAAyBrc,KAAKwL,YAAYyP,0CAC1CR,EAAQvb,EAAAA,EAAA,GAAOmd,EAAuBvX,SAAYyV,GAOxD,cANOE,EAASC,iBACTD,EAASE,SAChBF,EAASM,UAAYN,EAASpV,OAC9BoV,EAASrV,gBAAkBqV,EAASpV,OACpCoV,EAASI,YAAa,EACtBwB,EAAuBvX,QAAU2V,EAC1B4B,GAGTT,EAAAhc,UAAAuV,sBAAA,SAAsBC,EAAiB5D,GACrC,IAAI6D,EACArV,KAAK2L,cAAchE,kBAAoByN,EAAWvV,eAAe,UACnEwV,EAAkBD,EAAWE,OACpBtV,KAAK2L,cAAclE,iBAAmB2N,EAAWvV,eAAe,SACzEwV,EAAkBD,EAAWG,MACpBvV,KAAK2L,cAAc/D,kBAAoBwN,EAAWvV,eAAe,UAC1EwV,EAAkBD,EAAWI,OACpBJ,EAAWvV,eAAe,aACnCwV,EAAkBD,EAAWtQ,SAE3BuQ,IACED,EAAWK,WACbJ,EAAgBI,SAAWL,EAAWK,UAEpCJ,EAAgB0F,YAAc/a,KAAKuN,aACrCvN,KAAKyZ,eAAgB,GAEvBzZ,KAAK0N,YAAY9I,KAAKyQ,GAClB7D,IAAW5P,EAAW8N,mBAExB0F,EAAWtQ,QAAUuQ,EACrBrV,KAAK4V,4BAA4BR,MAKvCwG,EAAAhc,UAAAgW,4BAAA,SAA4BR,GAIpBpV,KAAKmM,2BACP1I,QAAQC,IAAI,qDAAsD1D,KAAKwL,YAAa4J,GAEtF,IAAMS,EAAaT,EAAWtQ,QACxBwX,EAAsBtc,KAAKgc,kDAAkD,GAAKnG,EAAWkF,WAC/F/a,KAAKmM,2BACP1I,QAAQC,IAAI,wBAAyB4Y,EAAqBtc,KAAKwL,YAAYuQ,kBAEzEO,IAAyB,GAAKtc,KAAKwL,YAAYuQ,mBAEjD/b,KAAKwL,YAAY2Q,mCAAoC,EACrDnc,KAAKwL,YAAY+Q,uCAAyCnH,EAC1DpV,KAAKuN,WAAasI,EAAWkF,UACzBlF,EAAWhW,eAAe,gBAA2C,IAA1BgW,EAAWgF,aACxD7a,KAAKwW,gBAAgB,KAAMX,GAEvB7V,KAAKmM,2BACP1I,QAAQC,IAAI,uCAatBkY,EAAAhc,UAAA6P,cAAA,SAAc+B,GACZxR,KAAKqO,kBAAmB,EACxBrO,KAAKyZ,eAAgB,EACrBzZ,KAAKiV,0BACAzD,IACHxR,KAAK+M,YAAa,EAClB/M,KAAKkV,gBAEPlV,KAAKkS,mCACmB,KAApBlS,KAAKuN,YACPvN,KAAKwE,gBAAkB,EACvBxE,KAAKsO,eAAiBtO,KAAKwE,eAC3BxE,KAAK0T,oBAEL1T,KAAKmT,kBAAkB3B,GAEzBxR,KAAKkQ,sBAGP0L,EAAAhc,UAAA4W,gBAAA,SAAgBC,EAAYrB,GAC1BpV,KAAKgN,sBAAuB,EAC5ByJ,MAAAA,GAAAA,EAAOC,iBACHtB,IACFpV,KAAKmS,iBACLnS,KAAKiV,0BACDG,EAAW/P,QACbrF,KAAKuO,cAAc6G,EAAW/P,QAEhCrF,KAAKqO,kBAAmB,EAIpB+G,EAAW,iBACbA,EAAapV,KAAKob,sBAAsBhG,IAE1CpV,KAAKwN,oBAAqB,EAC1B4H,EAAWyF,YAAa,EACxB7a,KAAK2W,mBAAmBvB,KAI5BwG,EAAAhc,UAAAwb,sBAAA,SAAsBhG,GACpB,IAAMqF,EAAQvb,EAAAA,EAAA,GAAOc,KAAKqb,iBAAoBjG,GAM9C,cALOqF,EAASC,iBACTD,EAASE,SAChBF,EAASM,UAAYN,EAASpV,OAC9BoV,EAASrV,gBAAkBqV,EAASpV,OACpCoV,EAASI,YAAa,EACfJ,GAGTmB,EAAAhc,UAAA+W,mBAAA,SAAmBvB,GAEjBpV,KAAKwN,sBAAsB4H,EAAWvV,eAAe,gBAA2C,IAA1BuV,EAAWyF,YACjF7a,KAAKuM,eAAemG,KAAK0C,IAG3BwG,EAAAhc,UAAA0W,qBAAA,WACEtW,KAAKuM,eAAemG,KAAK,MACzB1S,KAAKwN,oBAAqB,GA0B5BoO,EAAAhc,UAAAwS,gCAAA,SAAgCC,EAA8ChP,GAE5E,GAAIgP,MAAAA,EAKJ,OAAQA,GAEN,KAAK9Q,EAAAA,sBAAsB+Q,kBAC3B,KAAK/Q,EAAAA,sBAAsBgR,kBAC3B,KAAKhR,EAAAA,sBAAsBiR,oBACvB,IAAMC,EAAUzS,KAAK4L,iBAAiBqG,QAAQI,GAE9CrS,KAAKqM,eAAeqG,KAAK,CAACC,YAAaN,EAAuBO,kBAAmBH,IAGnF,MAEF,QACIhP,QAAQS,MAAM,iEAAkEmO,QAjBpF5O,QAAQoP,KAAK,8DAA+DR,IAwBhFuJ,EAAAhc,UAAAoZ,uBAAA,WAEEhZ,KAAKoS,gCAAgC7Q,EAAAA,sBAAsBgR,oBAG7DqJ,EAAAhc,UAAAqX,aAAA,SAAaR,GACX,OAAQA,EAAMS,OAEZ,KAAK,GACHT,EAAMC,iBACN1W,KAAK8W,6BACL,MAGF,KAAK,GACHL,EAAMC,iBACN1W,KAAKgX,2BACL,MAEF,KAAK,GACHP,EAAMC,iBACF1W,KAAK4W,2BACP5W,KAAKwW,gBAAgBC,EAAOzW,KAAK0N,YAAY1N,KAAKmO,gBAE9CnO,KAAKoO,eAAiBpO,KAAKmX,qBAC7BnX,KAAKuO,cAAcvO,KAAK+N,aACxB/N,KAAKoO,cAAgB,IAGzB,MAEF,KAAK,EACEpO,KAAKwN,oBAAuBiJ,EAAMwC,WACrCxC,EAAMC,iBACN1W,KAAKoX,iCAEP,MAEF,KAAK,GACCX,EAAMY,SACRrX,KAAK6P,cAEP,MAEF,KAAK,GACH4G,EAAMC,iBACF1W,KAAK4W,4BACP5W,KAAKwW,gBAAgBC,EAAOzW,KAAK0N,YAAY1N,KAAKmO,gBAGpD,MAEF,QACEnO,KAAKmS,mBAMXyJ,EAAAhc,UAAAiQ,YAAA,WACE7P,KAAKwN,oBAAqB,EAC1BxN,KAAKuW,kBACLvW,KAAK0T,mBACL1T,KAAKmS,iBACLnS,KAAKwL,YAAc,MAIrBoQ,EAAAhc,UAAA2W,gBAAA,WACEvW,KAAKuN,WAAa,IAGpBqO,EAAAhc,UAAAuX,iBAAA,WACE,OAAOnX,KAAK+N,aAAe/N,KAAK+N,YAAYrO,OAAS,GAGvDkc,EAAAhc,UAAAqV,wBAAA,WACEjV,KAAKmO,eAAiB,GAGxByN,EAAAhc,UAAAkX,2BAAA,WACM9W,KAAKmO,cAAgB,IAAMnO,KAAK0N,YAAYhO,SAC9CM,KAAKmO,gBACLnO,KAAK6W,kBACL7W,KAAK+W,mCAAmC/W,KAAKmO,cAAenO,KAAKmO,cAAgB,KAIrFyN,EAAAhc,UAAAoX,yBAAA,WACMhX,KAAKmO,cAAgB,IAAO,IAC9BnO,KAAKmO,gBACLnO,KAAK6W,kBACL7W,KAAK+W,mCAAmC/W,KAAKmO,cAAenO,KAAKmO,cAAgB,KAIrFyN,EAAAhc,UAAAgX,yBAAA,WACE,OAAO5W,KAAKmO,eAAiB,GAG/ByN,EAAAhc,UAAAmX,mCAAA,SAAmCpC,EAAQD,QAC1BtN,IAAXuN,GAAwB3U,KAAK0N,YAAYhO,QAAU,KAGvC,IAAZiV,IACc,IAAZD,IACF1U,KAAK4N,gBAAkB5N,KAAKuN,YAE9BvN,KAAKuO,cAAcvO,KAAK0N,YAAY1N,KAAKmO,eAAe9I,QACxDrF,KAAKmS,kBAELnS,KAAKuO,cAAcvO,KAAK4N,mBAI5BgO,EAAAhc,UAAA6U,mBAAA,WACE,OAAOzU,KAAKuN,WAAW7N,OAAS,GAGlCkc,EAAAhc,UAAAyW,WAAA,SAAWvB,EAAQpC,QAAA,IAAAA,IAAAA,GAAA,GACjB1S,KAAK6P,cACL7P,KAAKiV,0BACLjV,KAAK2N,eAAiB,EACtB3N,KAAK4N,gBAAkB,GACvB5N,KAAKkS,mCACLlS,KAAKkV,eACLlV,KAAKgS,+BACS,IAAV8C,GACF9U,KAAKic,qBAAqBrN,cAAckG,QAGvCpC,GACD1S,KAAK2M,uBAAuB+F,KAAsBrH,EAAcyQ,aAIpEF,EAAAhc,UAAA8T,iBAAA,WACE1T,KAAK6N,SAAW,GAChB7N,KAAK0N,YAAc,GACnB1N,KAAK8N,oBAAsB,IAG7B8N,EAAAhc,UAAAuS,eAAA,WACEnS,KAAK+N,YAAc,IAGrB6N,EAAAhc,UAAAsS,iCAAA,WACElS,KAAKyN,4BAA8B,GACnCzN,KAAKwN,oBAAqB,EAC1BxN,KAAKqM,eAAeqG,KAAK,CAACC,YAAa,KAAMC,kBAAmB5S,KAAKyN,8BACrEzN,KAAK8M,yBAA2B,KAChC9M,KAAK6M,sBAAwB,MAG/B+O,EAAAhc,UAAA2O,cAAA,SAAcpN,GACZnB,KAAKuN,WAAapM,GAGpBya,EAAAhc,UAAAwX,8BAAA,WACEpX,KAAKmO,cAAgB,EACrBnO,KAAK6W,kBACL7W,KAAK+W,mCAAmC/W,KAAKmO,cAAenO,KAAKmO,cAAgB,IAGnFyN,EAAAhc,UAAAiX,gBAAA,WACM7W,KAAK0N,YAAYhO,OAAS,IAC5BM,KAAKyO,kBAAmB,IAI5BmN,EAAAhc,UAAAsZ,qBAAA,WACElZ,KAAKmO,eAAiB,GAGxByN,EAAAhc,UAAAuZ,2BAAA,WAEEnZ,KAAKoS,gCAAgC7Q,EAAAA,sBAAsB+Q,oBAG7DsJ,EAAAhc,UAAAwZ,WAAA,WACE,MAA0B,KAAlBpZ,KAAK2G,UAAuC,KAApB3G,KAAKwF,YAAqBxF,KAAKoP,SAAW5N,EAAAA,aAAasa,YAGzFF,EAAAhc,UAAAoV,aAAA,WACMhV,KAAKmM,2BAA6B1I,QAAQC,IAAI,8DAruB1BqC,SACDkB,SACGwQ,EAAAA,wBACFnP,KAxF2BrI,EAAA,CAApDyX,EAAAA,UAAU,uBAAwB,CAACC,QAAQ,gDACE1X,EAAA,CAA7CyX,EAAAA,UAAU,gBAAiB,CAACC,QAAQ,yCAQ5B1X,EAAA,CAAR2X,EAAAA,2CACQ3X,EAAA,CAAR2X,EAAAA,yDAEQ3X,EAAA,CAAR2X,EAAAA,gDACQ3X,EAAA,CAAR2X,EAAAA,iDACQ3X,EAAA,CAAR2X,EAAAA,qDACQ3X,EAAA,CAAR2X,EAAAA,4CACQ3X,EAAA,CAAR2X,EAAAA,uCACQ3X,EAAA,CAAR2X,EAAAA,6CACQ3X,EAAA,CAAR2X,EAAAA,0CACQ3X,EAAA,CAAR2X,EAAAA,wCACQ3X,EAAA,CAAR2X,EAAAA,0CACQ3X,EAAA,CAAR2X,EAAAA,4CACQ3X,EAAA,CAAR2X,EAAAA,+CACQ3X,EAAA,CAAR2X,EAAAA,gDAGQ3X,EAAA,CAAR2X,EAAAA,uCAaQ3X,EAAA,CAAR2X,EAAAA,6CAGD3X,EAAA,CADC2X,EAAAA,0CAGS3X,EAAA,CAAT4X,EAAAA,+CACS5X,EAAA,CAAT4X,EAAAA,+CACS5X,EAAA,CAAT4X,EAAAA,2CACS5X,EAAA,CAAT4X,EAAAA,0CACS5X,EAAA,CAAT4X,EAAAA,gDACS5X,EAAA,CAAT4X,EAAAA,mDAES5X,EAAA,CAAT4X,EAAAA,uDAES5X,EAAA,CAAT4X,EAAAA,oDAvDU+D,EAAkB3b,EAAA,CAL9B6X,EAAAA,UAAU,CACT7O,SAAU,gBACV8O,SAAA,upEAGW6D,MCnBbY,EAwBI,SACWhN,GAAAxP,KAAAwP,WAAAA,EArBXxP,KAAAsP,wBAAkC,KAClCtP,KAAAqT,sCAAuC,EACvCrT,KAAAiW,0CAAiD,KAEjDjW,KAAAgW,iDAAkD,EAElDhW,KAAAoY,kBAA4B,KAC5BpY,KAAA2Y,gCAAiC,EACjC3Y,KAAA+Y,oCAA2C,KAE3C/Y,KAAA4Z,oBAA8B,KAC9B5Z,KAAAka,sCAAuC,EACvCla,KAAAib,0CAAiD,KAEjDjb,KAAA+b,iBAA2B,KAC3B/b,KAAAmc,mCAAoC,EACpCnc,KAAAuc,uCAA8C,KAE9Cvc,KAAAyc,GAAW,KAKPzc,KAAKyc,GAAM,IAAIC,mBChBnB,SAAAC,EAAoBha,GAAA3C,KAAA2C,WAAAA,EAFZ3C,KAAAoG,eAAe,UAIvBuW,EAAA/c,UAAAgd,kBAAA,SAAkBxW,GACdpG,KAAKoG,eAAeA,GAGxBuW,EAAA/c,UAAAid,kBAAA,SAAkBtB,EAAWD,GAEzB,IAAMwB,EAAO,iDAAiDvB,EAAS,QAAQD,EAAQ,gBACvF,OAAOtb,KAAK2C,WAAWQ,IAAU2Z,6CATLzY,EAAAA,mIALvBsY,EAAW1c,EAAA,CAHvByB,EAAAA,WAAW,CACRC,WAAY,UAEHgb,mBC6HX,SAAAI,EACUC,EACAhX,GADAhG,KAAAgd,YAAAA,EACAhd,KAAAgG,YAAAA,EA3GVhG,KAAAid,iBAA2B,KAGnBjd,KAAAsG,QAAU,4FAoBTtG,KAAAmM,2BAA4B,EAE5BnM,KAAAoa,kBAAmB,EAEnBpa,KAAA+L,cAAgB,IAGhB/L,KAAAkd,YAAcld,KAAKsG,QAAU,WAC7BtG,KAAAmd,sBAAwB,EACxBnd,KAAAod,+BAAiC,EAI1Cpd,KAAAqd,oBAAmC,KAG1Brd,KAAAsd,UAAYtd,KAAKsG,QAAU,SAC3BtG,KAAAud,oBAAsB,EACtBvd,KAAAwd,6BAA+B,EAGxCxd,KAAAyd,kBAAiC,KAIxBzd,KAAA0d,gBAAkB1d,KAAKsG,QAAU,eACjCtG,KAAA2d,sBAAwB,EACxB3d,KAAA4d,+BAAiC,EAG1C5d,KAAA6d,wBAAuC,KAG9B7d,KAAA8d,aAAe9d,KAAKsG,QAAU,YAC9BtG,KAAA+d,mBAAqB,EACrB/d,KAAAge,4BAA8B,EAGvChe,KAAAie,qBAAoC,KAKpCje,KAAAke,eAAsB,KAUtBle,KAAAme,kBAAqF,CAACxL,YAAa,KAAMC,kBAAmB,IAIlH5S,KAAAoe,4BAAiD,IAAI9R,EAAAA,aACrDtM,KAAAqe,8BAAmD,IAAI/R,EAAAA,aACvDtM,KAAA2M,uBAA+C,IAAIL,EAAAA,aAI7DtM,KAAAse,uBAAwB,EAKxBte,KAAA6C,OAAO,2CAKP7C,KAAAoM,YAAW,EAGXpM,KAAAmG,gBAAe,EAIfnG,KAAAoG,eAAe,GA8hCjB,OA/nCWjH,OAAAyB,eAAImc,EAAAnd,UAAA,YAAS,KAAb,SAAcqN,GACrBjN,KAAKue,YAAYtR,oCAIV9N,OAAAyB,eAAImc,EAAAnd,UAAA,aAAU,KAAd,SAAekV,GACtB9U,KAAKwe,aAAa1J,oCAIX3V,OAAAyB,eAAImc,EAAAnd,UAAA,0BAAuB,KAA3B,SAA4B6e,GACnCze,KAAK0e,oCAAoCD,oCA6F3C1B,EAAAnd,UAAA0N,SAAA,WAEEtN,KAAKgd,YAAYJ,kBAAkB5c,KAAKoG,gBAExCpG,KAAKgG,YAAYlD,UAAW9C,KAAK6C,QAE7B7C,KAAK2e,gBAEP3e,KAAKwL,YAAcxL,KAAK2e,gBAI5B5B,EAAAnd,UAAAkJ,YAAA,WAEM9I,KAAKgQ,cAEPhQ,KAAKgQ,aAAaC,eAItB8M,EAAAnd,UAAAmP,YAAA,SAAYC,GAENA,IAIEhP,KAAKmM,2BACPnM,KAAK4e,kCAAkC5P,GAGrCA,EAAQnP,eAAe,YAAcmP,EAAQnM,OAAOoM,aACtDjP,KAAKgG,YAAYlD,UAAW9C,KAAK6C,QAG/BmM,EAAQnP,eAAe,mBAAqBmP,EAAQ2P,cAAc1P,cAEpEjP,KAAKse,uBAAwB,EAC7Bte,KAAK6e,mBACL7e,KAAKqb,gBAAkB,KACvBrb,KAAK8e,wBACL9e,KAAK6P,cAOL7P,KAAKie,qBAAuB,KAC5Bje,KAAK6d,wBAA0B,KAC/B7d,KAAKyd,kBAAoB,KAErBzd,KAAKmM,2BAA4B1I,QAAQC,IAAI,kCAAmC1D,KAAK2e,eACzF3e,KAAK2e,cAAcvP,SAAiB5N,EAAAA,aAAa6N,SAEjDrP,KAAKqd,oBAAsB,IAAIb,EAAYxc,KAAK2e,eAE5C3e,KAAKmM,2BAA4B1I,QAAQC,IAAI,mCAAoC1D,KAAKqd,wBAKhGN,EAAAnd,UAAAgf,kCAAA,SAAkC5P,GAGhC,GAAIA,EAAQnP,eAAe,mBAAqBmP,EAAQjD,cAAckD,YAAa,CACjF,IAAM8P,EAAY/P,EAAQjD,cAAcoD,aACxC1L,QAAQC,IAAI,8BAA+Bqb,GAI7C,GAAI/P,EAAQnP,eAAe,2BAA6BmP,EAAQmO,sBAAsBlO,YAAa,CAC3F8P,EAAY/P,EAAQmO,sBAAsBhO,aAChD1L,QAAQC,IAAI,sCAAuCqb,GAIrD,GAAI/P,EAAQnP,eAAe,oCAAsCmP,EAAQoO,+BAA+BnO,YAAa,CAC7G8P,EAAY/P,EAAQoO,+BAA+BjO,aACzD1L,QAAQC,IAAI,+CAAgDqb,GAI9D,GAAI/P,EAAQnP,eAAe,0BAA4BmP,EAAQgQ,qBAAqB/P,YAAa,CACzF8P,EAAY/P,EAAQgQ,qBAAqB7P,aAC/C1L,QAAQC,IAAI,qCAAsCqb,GAIpD,GAAI/P,EAAQnP,eAAe,yBAA2BmP,EAAQuO,oBAAoBtO,YAAa,CACvF8P,EAAY/P,EAAQuO,oBAAoBpO,aAC9C1L,QAAQC,IAAI,oCAAqCqb,GAGnD,GAAI/P,EAAQnP,eAAe,kCAAoCmP,EAAQwO,6BAA6BvO,YAAa,CACzG8P,EAAY/P,EAAQwO,6BAA6BrO,aACvD1L,QAAQC,IAAI,6CAA8Cqb,GAG5D,GAAI/P,EAAQnP,eAAe,wBAA0BmP,EAAQiQ,mBAAmBhQ,YAAa,CACrF8P,EAAY/P,EAAQiQ,mBAAmB9P,aAC7C1L,QAAQC,IAAI,mCAAoCqb,GAIlD,GAAI/P,EAAQnP,eAAe,2BAA6BmP,EAAQ2O,sBAAsB1O,YAAa,CAC3F8P,EAAY/P,EAAQ2O,sBAAsBxO,aAChD1L,QAAQC,IAAI,sCAAuCqb,GAGrD,GAAI/P,EAAQnP,eAAe,oCAAsCmP,EAAQ4O,+BAA+B3O,YAAa,CAC7G8P,EAAY/P,EAAQ4O,+BAA+BzO,aACzD1L,QAAQC,IAAI,+CAAgDqb,GAG9D,GAAI/P,EAAQnP,eAAe,0BAA4BmP,EAAQkQ,qBAAqBjQ,YAAa,CACzF8P,EAAY/P,EAAQkQ,qBAAqB/P,aAC/C1L,QAAQC,IAAI,qCAAsCqb,GAIpD,GAAI/P,EAAQnP,eAAe,wBAA0BmP,EAAQ+O,mBAAmB9O,YAAa,CACrF8P,EAAY/P,EAAQ+O,mBAAmB5O,aAC7C1L,QAAQC,IAAI,mCAAoCqb,GAGlD,GAAI/P,EAAQnP,eAAe,iCAAmCmP,EAAQgP,4BAA4B/O,YAAa,CACvG8P,EAAY/P,EAAQgP,4BAA4B7O,aACtD1L,QAAQC,IAAI,4CAA6Cqb,GAG3D,GAAI/P,EAAQnP,eAAe,uBAAyBmP,EAAQmQ,kBAAkBlQ,YAAa,CACnF8P,EAAY/P,EAAQmQ,kBAAkBhQ,aAC5C1L,QAAQC,IAAI,kCAAmCqb,KAInDhC,EAAAnd,UAAAiQ,YAAA,WACE7P,KAAKof,kBAAkBvP,cACvB7P,KAAKqf,qBAAqBxP,cAC1B7P,KAAKsf,mBAAmBzP,cACxB7P,KAAKuf,qBAAqB1P,eAG5BkN,EAAAnd,UAAA4f,eAAA,SAAepQ,GACbpP,KAAKoP,SAAWA,GAIlB2N,EAAAnd,UAAA4e,aAAA,SAAa1J,GACP9U,KAAKmM,2BAA6B1I,QAAQC,IAAI,oBAAqBoR,GAOvE9U,KAAKyf,kBAEL,IAAMC,EAAW,MAAC5K,GAAiDA,EAAM4K,SAEzE,OAAQ1f,KAAKoP,UACT,KAAK,EACHpP,KAAK+a,UAAY,GACjB/a,KAAKof,kBAAkB/I,WAAWqJ,GAAU,GAC5C1f,KAAK2M,uBAAuB+F,KAAK,cACjC,MACF,KAAK,EACH1S,KAAK+a,UAAY,GACjB/a,KAAK8Z,aAAe,GACpB9Z,KAAKof,kBAAkB7R,WAAa,GACpCvN,KAAKof,kBAAkBtF,aAAe,GACtC9Z,KAAKof,kBAAkB/I,WAAWqJ,GAAU,GAC5C1f,KAAKqf,qBAAqB1D,yBAAyB+D,GAAU,GAC7D1f,KAAK2M,uBAAuB+F,KAAK,iBACjC,MACF,KAAK,EACH1S,KAAK+a,UAAY,GACjB/a,KAAK8Z,aAAe,GACpB9Z,KAAKma,OAAS,GACdna,KAAKof,kBAAkB7R,WAAa,GACpCvN,KAAKof,kBAAkBtF,aAAe,GACtC9Z,KAAKof,kBAAkB/I,WAAWqJ,GAAU,GAC5C1f,KAAKof,kBAAkBvP,cACvB7P,KAAKqf,qBAAqB9R,WAAa,GACvCvN,KAAKqf,qBAAqB/G,WAAa,GACvCtY,KAAKqf,qBAAqB1D,yBAAyB+D,GAAU,GAC7D1f,KAAKsf,mBAAmBjJ,WAAWqJ,GAAU,GAC7C1f,KAAK2M,uBAAuB+F,KAAK,UACjC,MACF,QAEE1S,KAAK+a,UAAY,GACb/a,KAAKof,oBAEPpf,KAAKof,kBAAkB7R,WAAa,GACpCvN,KAAKof,kBAAkBtF,aAAe,GACtC9Z,KAAKof,kBAAkB/I,WAAWqJ,GAAU,IAG9C1f,KAAK8Z,aAAe,GAChB9Z,KAAKqf,uBAEPrf,KAAKqf,qBAAqB9R,WAAa,GACvCvN,KAAKqf,qBAAqB/G,WAAa,GACvCtY,KAAKqf,qBAAqB1D,yBAAyB+D,GAAU,IAG/D1f,KAAKma,OAAS,GACVna,KAAKsf,qBAEPtf,KAAKsf,mBAAmB/R,WAAa,GACrCvN,KAAKsf,mBAAmBjJ,WAAWqJ,GAAU,IAG/C1f,KAAK2G,SAAW,GACZ3G,KAAKuf,uBAEPvf,KAAKuf,qBAAqBhS,WAAa,GACvCvN,KAAKuf,qBAAqBlJ,WAAWqJ,GAAU,IAGjD1f,KAAK2M,uBAAuB+F,KAAK,cAKzCqK,EAAAnd,UAAA+f,aAAA,WACE,IAAIxO,EAAS,GACb,OAAQnR,KAAKid,kBACX,IAAK,KACH9L,EAAS,MACT,MACF,IAAK,KACDA,EAAS,MACT,MACJ,QACEA,EAAS,MAGb,OAAOA,GAGT4L,EAAAnd,UAAAkf,sBAAA,WAAA,IAAAtb,EAAAxD,KAEE,IAA2B,IAAxBA,KAAKmG,gBAA2BnG,KAAKqb,gBAAgBxb,eAAe,aAAeG,KAAKqb,gBAAgBxb,eAAe,aAC1H,CACE,IAAMyb,EAAWtb,KAAKqb,gBAAgBC,SAChCC,EAAYvb,KAAKqb,gBAAgBE,UACnCvb,KAAKmM,2BAA2B1I,QAAQC,IAAI,6CAA8C6X,EAAWD,GAEzGtb,KAAKgd,YAAYH,kBAAkBtB,EAAWD,GAC7CnO,WACC,SAAAsG,GAQE,GAPAhQ,QAAQC,IAAI,YAAa+P,GAOtBA,MAAAA,GAAoCA,EAAK5T,eAAe,WAA2B,YAAd4T,EAAKmM,OAC7E,CACE,IAAMC,EAAWpM,EAAKA,KACnByC,MAAM4J,QAAQD,IAAiC,IAApBA,EAASngB,SAErC8D,EAAK6X,gBAAgB0E,KAAOF,EAAS,IAIzCrc,EAAK4a,4BAA4B1L,KAAKlP,EAAK6X,iBAC3C7X,EAAK0a,eAAiB1a,EAAK6X,gBAC3B7X,EAAKwc,yBAAyBxc,EAAK0a,wBAMnCle,KAAKmM,2BAA2B1I,QAAQC,IAAI,iDAChD1D,KAAKoe,4BAA4B1L,KAAK1S,KAAKqb,iBAC3Crb,KAAKke,eAAiBle,KAAKqb,gBAC3Brb,KAAKggB,yBAAyBhgB,KAAKke,iBAKvCnB,EAAAnd,UAAAqgB,yBAAA,SAAyBxJ,GAEnBzW,KAAKmM,2BAA6B1I,QAAQC,IAAI,gCAAiC+S,GAEnFzW,KAAKyf,kBAEL,IAAIS,EAAclgB,KAAKqb,gBAEvB,GAAI5E,IAAUpL,EAAcgE,SAG1BrP,KAAK+a,UAAY,GACb/a,KAAKof,oBAEPpf,KAAKof,kBAAkB7R,WAAa,GACpCvN,KAAKof,kBAAkBtF,aAAe,GACtC9Z,KAAKof,kBAAkB/I,YAAW,GAAO,IAG3CrW,KAAK8Z,aAAe,GAChB9Z,KAAKqf,uBAEPrf,KAAKqf,qBAAqB9R,WAAa,GACvCvN,KAAKqf,qBAAqB/G,WAAa,GACvCtY,KAAKqf,qBAAqB1D,0BAAyB,GAAO,IAG5D3b,KAAKma,OAAS,GACVna,KAAKsf,qBAEPtf,KAAKsf,mBAAmB/R,WAAa,GACrCvN,KAAKsf,mBAAmBjJ,YAAW,GAAO,IAG5CrW,KAAK2G,SAAW,GACZ3G,KAAKuf,uBAEPvf,KAAKuf,qBAAqBhS,WAAa,GACvCvN,KAAKuf,qBAAqBlJ,YAAW,GAAO,IAG9C6J,EAAc,UAEX,GAAIzJ,IAAUpL,EAAc8M,OAG/BnY,KAAK+a,UAAY,GACb/a,KAAKof,oBAEPpf,KAAKof,kBAAkB7R,WAAa,GACpCvN,KAAKof,kBAAkBtF,aAAe,GACtC9Z,KAAKof,kBAAkB/I,YAAW,GAAO,IAG3CrW,KAAK8Z,aAAe,GAChB9Z,KAAKqf,uBAEPrf,KAAKqf,qBAAqB9R,WAAa,GACvCvN,KAAKqf,qBAAqB/G,WAAa,GACvCtY,KAAKqf,qBAAqB1D,0BAAyB,GAAO,IAG5D3b,KAAKma,OAAS,GACVna,KAAKsf,qBAEPtf,KAAKsf,mBAAmB/R,WAAa,GACrCvN,KAAKsf,mBAAmBjJ,YAAW,GAAO,IAG5C6J,EAAc,UAEX,GAAIzJ,IAAUpL,EAAcsO,cAG/B3Z,KAAK+a,UAAY,GACb/a,KAAKof,oBAEPpf,KAAKof,kBAAkB7R,WAAa,GACpCvN,KAAKof,kBAAkBtF,aAAe,GACtC9Z,KAAKof,kBAAkB/I,YAAW,GAAO,IAG3CrW,KAAK8Z,aAAe,GAChB9Z,KAAKqf,uBAEPrf,KAAKqf,qBAAqB9R,WAAa,GAEvCvN,KAAKqf,qBAAqB1D,0BAAyB,GAAO,IAG5DuE,EAAc,UAEX,GAAIzJ,IAAUpL,EAAcyQ,WACjC,CAEE9b,KAAK+a,UAAY,GACb/a,KAAKof,oBAEPpf,KAAKof,kBAAkB7R,WAAa,GAEpCvN,KAAKof,kBAAkB/I,YAAW,GAAO,IAKvC6J,MAAAA,IACGA,EAAYrgB,eAAe,gBAAkBqgB,EAAY,eAFhE,IA4BM3G,IACF2G,OAPJA,EAA2C,OAA7BlgB,KAAKmgB,oBAA+BngB,KAAKmgB,oBAAsB,QAQtED,EAAYrgB,eAAe,gBAA4C,IAA3BqgB,EAAYrF,YAC/D7a,KAAKqf,qBAAqB9F,kBAAoBA,EAKhD,GAFAvZ,KAAK2M,uBAAuB+F,KAAK+D,GAEL,OAAxBzW,KAAKke,eAA0B,CACjC,GAAGgC,MAAAA,GAAqDA,EAAYrgB,eAAe,aAAeqgB,EAAYrgB,eAAe,aAC7H,CACE,IAAMyb,EAAW4E,EAAY5E,SACvBC,EAAY2E,EAAY3E,UAC1Bvb,KAAKmM,2BAA2B1I,QAAQC,IAAI,4CAA6C6X,EAAWD,QAIpGtb,KAAKmM,2BAA2B1I,QAAQC,IAAI,iDAElD1D,KAAKoe,4BAA4B1L,KAAKwN,GACtClgB,KAAKke,eAAiBgC,IAwE1BnD,EAAAnd,UAAAwgB,cAAA,SAAc3J,GACZzW,KAAKwF,WAAa,GAClBxF,KAAK2G,SAAW,GAChB3G,KAAKyf,kBACLzf,KAAKigB,yBAAyB5U,EAAc8M,QAC5CnY,KAAKqgB,WAAW,KAAM,IAGxBtD,EAAAnd,UAAA0gB,YAAA,SAAY7J,GACVzW,KAAKma,OAAS,GACdna,KAAKyf,kBACLzf,KAAKigB,yBAAyB5U,EAAcsO,eAC5C3Z,KAAKqf,qBAAqB9F,mBAAoB,EAC9CvZ,KAAKqf,qBAAqB/G,WAAa,GACvCtY,KAAKqgB,WAAW,KAAM,IAGxBtD,EAAAnd,UAAA2gB,kBAAA,SAAkB9J,EAAO+J,QAAA,IAAAA,IAAAA,GAAA,GAEvBxgB,KAAK8Z,aAAe,GACpB9Z,KAAKyf,kBACLzf,KAAKigB,yBAAyB5U,EAAcyQ,YAE5C9b,KAAKof,kBAAkB7F,mBAAoB,EAC3CvZ,KAAKof,kBAAkBtF,aAAe,GACtC9Z,KAAKqgB,WAAW,KAAM,IAQxBtD,EAAAnd,UAAA6gB,eAAA,SAAehK,EAAO+J,QAAA,IAAAA,IAAAA,GAAA,GAEpBxgB,KAAK+a,UAAY,GACjB/a,KAAKyf,kBACLzf,KAAKof,kBAAkB7F,mBAAoB,EAC3CvZ,KAAKqgB,WAAW,KAAM,IASxBtD,EAAAnd,UAAAif,iBAAA,WACM7e,KAAKmM,2BAA4B1I,QAAQC,IAAI,2BAC7C1D,KAAKof,mBAAqBpf,KAAKqf,sBAAwBrf,KAAKsf,oBAAsBtf,KAAKuf,uBAEzFvf,KAAKof,kBAAkBrS,YAAa,EACpC/M,KAAKqf,qBAAqBtS,YAAa,EACvC/M,KAAKsf,mBAAmBvS,YAAa,EACrC/M,KAAKuf,qBAAqBxS,YAAa,EAEvC/M,KAAKsf,mBAAmB3Y,SAAW,GACnC3G,KAAKqf,qBAAqB/G,WAAa,GACvCtY,KAAKof,kBAAkBtF,aAAe,KAK1CiD,EAAAnd,UAAA6f,gBAAA,WACMzf,KAAKmM,2BAA4B1I,QAAQC,IAAI,0BAC7C1D,KAAKof,mBAAqBpf,KAAKqf,sBAAwBrf,KAAKsf,oBAAsBtf,KAAKuf,uBAEzFvf,KAAKof,kBAAkBrS,YAAa,EACpC/M,KAAKqf,qBAAqBtS,YAAa,EACvC/M,KAAKsf,mBAAmBvS,YAAa,EACrC/M,KAAKuf,qBAAqBxS,YAAa,GAGzC/M,KAAKse,uBAAwB,GAG/BvB,EAAAnd,UAAAygB,WAAA,SAAWvb,EAAc4b,GAavB,GAZI1gB,KAAKmM,2BAA4B1I,QAAQC,IAAI,wCAAyCoB,EAAS4b,GAY/F5b,MAAAA,EACJ,CACE,IAAM6b,EAAqC,OAAzB3gB,KAAKqb,sBAAqDjU,IAAzBpH,KAAKqb,gBACxDrb,KAAKqb,gBAAkB,KACvBrb,KAAKqf,qBAAqB9F,mBAAoB,EAC9CvZ,KAAKof,kBAAkB7F,mBAAoB,EACvCoH,GACF3gB,KAAK8e,wBAIT,GAAIha,EAAS,QACJA,EAAQ2Q,SACfzV,KAAKqb,gBAAkBvW,EACvB9E,KAAK4gB,wBACL5gB,KAAKwF,WAAaV,EAAQU,WAAaV,EAAQU,WAAa,GAC5DxF,KAAK2G,SAAW7B,EAAQS,aAAeT,EAAQS,aAAe,GAC9DvF,KAAKma,OAASrV,EAAQwT,WAAaxT,EAAQwT,WAAa,GAmB9BxT,MAAAA,IACrBA,EAAQjF,eAAe,eAAiBiF,EAAQ+V,WADrD,IAEMgG,IAAqB/b,MAAAA,IACtBA,EAAQjF,eAAe,iBAA6C,IAA3BiF,EAAQ,gBAEtD,OAAQ4b,GAGN,KAAK,EACH1gB,KAAKggB,yBAAyBlb,GAS9B9E,KAAK8gB,cAAgB,KACrB9gB,KAAKmgB,oBAAsB,KAE3BngB,KAAKsf,mBAAmB/R,WAAa,GACrCvN,KAAKqf,qBAAqB9R,WAAa,GACvCvN,KAAKqf,qBAAqB/G,WAAa,GACvCtY,KAAKof,kBAAkB7R,WAAa,GACpCvN,KAAKof,kBAAkBtF,aAAe,GACtC,MAGF,KAAK,EACH9Z,KAAKggB,yBAAyBlb,GAC9B9E,KAAK+gB,iBAAiBjc,GACtB9E,KAAK8gB,cAAgBhc,EACrB9E,KAAKmgB,oBAAsB,KAO3BngB,KAAKqf,qBAAqB9R,WAAa,GACvCvN,KAAKof,kBAAkB7R,WAAa,GACpCvN,KAAKof,kBAAkBtF,aAAe,GACtC,MAGF,KAAK,EACH9Z,KAAKggB,yBAAyBlb,GAC9B9E,KAAK+gB,iBAAiBjc,GACtB9E,KAAKghB,mBAAmBlc,GACxB9E,KAAK8gB,cAAgBhc,EACrB9E,KAAKmgB,oBAAsBrb,EACvBA,EAAQjF,eAAe,gBAAwC,IAAvBiF,EAAQ+V,YAElD7a,KAAKqf,qBAAqB9F,mBAAoB,EAG5CvZ,KAAKof,kBAAkBtF,aAFrB+G,EAEoC/b,EAAQ8V,YAIR,IAKxC5a,KAAKof,kBAAkBtF,aAAehV,EAAQ8V,YAMhD5a,KAAKof,kBAAkB7R,WAAa,GACpC,MAGF,KAAK,EAEGsT,IAEF7gB,KAAKqf,qBAAqB9F,mBAAoB,GASjDvZ,KAAKqb,sBAAuDjU,IAApCpH,KAAKqb,gBAAgBR,aAChD7a,KAAKqb,gBAAgBR,YAAa,GAcpC7a,KAAKqb,gBAAgB4F,4BAA6B,EAClDjhB,KAAK8e,0BAIT/B,EAAAnd,UAAA2e,YAAA,SAAY/W,GACVxH,KAAKid,iBAAmBzV,GAG1BuV,EAAAnd,UAAAshB,qBAAA,SAAwCzO,GACtCzS,KAAKme,kBAAoB1L,EACrBzS,KAAKmhB,8BAAgC7f,EAAAA,4BAA4B8f,MACnEphB,KAAKqe,8BAA8B3L,KAAKD,IAK5CsK,EAAAnd,UAAAogB,yBAAA,SAAyBlb,GACnBA,GAAWA,EAAQU,YAAcV,EAAQS,eAC3CvF,KAAKqhB,mBAAsBvc,EAAQU,WAAc,IAAMV,EAAQS,aAC/DvF,KAAKuf,qBAAqBhS,WAAavN,KAAKqhB,qBAIhDtE,EAAAnd,UAAAmhB,iBAAA,SAAiBjc,GACXA,GAAWA,EAAQwT,aACrBtY,KAAKshB,gBAAkBxc,EAAQwT,aAInCyE,EAAAnd,UAAAohB,mBAAA,SAAmBlc,GACbA,GAAWA,EAAQ8V,cACrB5a,KAAKuhB,kBAAoBzc,EAAQ8V,cAIrCmC,EAAAnd,UAAAghB,sBAAA,WACE,IAAIpM,EAAY,GAChBA,GAAaxU,KAAKqb,gBAAgB/C,WAAgBtY,KAAKqb,gBAAgB/C,WAAU,IAAM,GACvF9D,GAAaxU,KAAKqb,gBAAgBT,YAAiB5a,KAAKqb,gBAAgBT,YAAW,IAAM,GACzFpG,GAAaxU,KAAKqb,gBAAgBN,UAAe/a,KAAK2f,eAAc,IAAI3f,KAAKqb,gBAAgBN,UAAS,IAAM,GAC5GvG,GAAaxU,KAAKqb,gBAAgB7V,WAAgBxF,KAAKqb,gBAAgB7V,WAAU,IAAM,GACvFgP,GAAaxU,KAAKqb,gBAAgB/V,iBAAsBtF,KAAKqb,gBAAgB/V,iBAAgB,IAAM,GACnGtF,KAAKwhB,gBAAkBhN,GAGzBuI,EAAAnd,UAAA8e,oCAAA,SAAoCD,GAClCze,KAAKmhB,4BAA8B1C,EAAOgD,gBAI5C1E,EAAAnd,UAAA8hB,uBAAA,SAAuBjL,GACjBzW,KAAKmM,2BAA4B1I,QAAQC,IAAI,wCAAyC+S,GAQ1F,IAAMhD,EAAOgD,EAAMjL,YACnB,IAA+D,IAA3DiL,EAAMjL,YAAY6H,qCACtB,CACE,IACMvO,EADa2O,EAAKwC,0CACGnR,QAC3B9E,KAAKggB,yBAAyBlb,GAC9B9E,KAAK2e,cAAcvP,SAAiB5N,EAAAA,aAAa2W,OAIjDnY,KAAKwL,YAAciL,EAAMjL,YACzBxL,KAAKwL,YAAYiR,GAAK,IAAIC,KAC1B1c,KAAKwL,YAAYgE,WAAWJ,SAAW5N,EAAAA,aAAa2W,OAEpD,IAAMwJ,EAAoB3hB,KAAKwL,YAAYyK,0CAA0CnR,QAC/E8c,EAAgCD,EAAkBpc,aACxDvF,KAAKwL,YAAYgE,WAAWlK,iBAAmBsc,EAC/C5hB,KAAKwL,YAAYgE,WAAWhK,WAAamc,EAAkBnc,WAG3D,IAAM8S,EAAatY,KAAKwL,YAAYgE,WAAW8I,WAC3CA,MAAAA,GAAkE,KAAfA,GAErDtY,KAAKqgB,WAAWvb,EAAStD,EAAAA,aAAa6N,UAoBxCrP,KAAKyd,kBAAoBzd,KAAKwL,gBAGhC,CAEE,IAAMqW,EAAgBpO,EAAKjE,WAAWhK,WAAaiO,EAAKjE,WAAWlK,iBACnEtF,KAAKsf,mBAAmB3Y,SAAW,GAC9Bkb,MAAAA,GAAkF,IAAzBA,EAAcniB,QAE1EM,KAAKqgB,WAAW,KAAM7e,EAAAA,aAAa6N,UAErCrP,KAAKyf,oBAIT1C,EAAAnd,UAAAkiB,qBAAA,SAAqBrL,GACfzW,KAAKmM,2BAA4B1I,QAAQC,IAAI,sCAAuC+S,GAWxF,IAAMhD,EAAOgD,EAAMjL,YACnB,IAAyD,IAArDiL,EAAMjL,YAAYmN,+BACtB,CAEE,IACM7T,EADa2O,EAAKsF,oCACGjU,QAC3B9E,KAAK+gB,iBAAiBjc,GACtB9E,KAAK2e,cAAcvP,SAAW5N,EAAAA,aAAamY,cAI3C3Z,KAAKwL,YAAciL,EAAMjL,YACzBxL,KAAKwL,YAAYiR,GAAK,IAAIC,KAC1B1c,KAAKwL,YAAYgE,WAAWJ,SAAW5N,EAAAA,aAAamY,cACpD,IAAMgI,EAAoB3hB,KAAKwL,YAAYuN,oCAAoCjU,QACzE8c,EAAgCD,EAAkBpc,aACxDvF,KAAKwL,YAAYgE,WAAWlK,iBAAmBsc,EAC/C5hB,KAAKwL,YAAYgE,WAAWhK,WAAamc,EAAkBnc,WAC3DxF,KAAKwL,YAAYgE,WAAW8I,WAAaqJ,EAAkBrJ,WAI3D,IAAMwB,EAAe9Z,KAAKwL,YAAYgE,WAAWsK,aAC7CA,MAAAA,GAAwE,KAAjBA,GAEzD9Z,KAAKqgB,WAAWvb,EAAStD,EAAAA,aAAa2W,QAkBxCnY,KAAK6d,wBAA0B7d,KAAKwL,gBAGtC,CACE,IAAM4M,EAAoBpY,KAAKwL,YAAYgE,WAAW8I,WAChDxT,EAAU9E,KAAKwL,YAAYyK,0CAA0CnR,QAC3E9E,KAAKqf,qBAAqB/G,WAAa,GAEnCtY,KAAKmM,2BACP1I,QAAQS,MAAM,uDAAwDkU,GAGnEA,MAAAA,GAA8F,IAA7BA,EAAkB1Y,OAGtFM,KAAKqgB,WAAWvb,EAAStD,EAAAA,aAAa6N,WAKtCvK,EAAQM,gBAAkBgT,EAC1BpY,KAAKqgB,WAAWvb,EAAStD,EAAAA,aAAa2W,SAExCnY,KAAKyf,oBAIT1C,EAAAnd,UAAAmiB,2BAAA,SAA2BtL,GACrBzW,KAAKmM,2BAA6B1I,QAAQC,IAAI,6CAA8C+S,GAChG,IAAMhD,EAAOgD,EAAMjL,YACnB,IAAkD,IAA9CiI,EAAKyG,qCACT,CACE,IACMpV,EADa2O,EAAKwH,0CACGnW,QAC3B9E,KAAKghB,mBAAmBlc,GACxB9E,KAAKqf,qBAAqBhE,gBAAkBvW,EAE5C,IAAMyU,KAAoBzU,IAAWA,EAAQjF,eAAe,gBAAwC,IAAvBiF,EAAQ+V,YAC/EgG,KAAqB/b,IAAWA,EAAQjF,eAAe,iBAA6C,IAA3BiF,EAAQ,gBAEvF,GAAIyU,IAAuBsH,EAIzB7gB,KAAKqf,qBAAqB9F,mBAAoB,EAC9CvZ,KAAKyf,sBAGP,CACEzf,KAAK2e,cAAcvP,SAAW5N,EAAAA,aAAasa,WAC3C9b,KAAKwL,YAAciL,EAAMjL,YACzBxL,KAAKwL,YAAYiR,GAAK,IAAIC,KAC1B1c,KAAKwL,YAAYgE,WAAWJ,SAAW5N,EAAAA,aAAasa,WAIpD,IAAM6F,EAAoB3hB,KAAKwL,YAAYyP,0CAA0CnW,QAC/E8c,EAAgCD,EAAkBpc,aACxDvF,KAAKwL,YAAYgE,WAAWlK,iBAAmBsc,EAC/C5hB,KAAKwL,YAAYgE,WAAWlK,iBAAmBsc,EAC/C5hB,KAAKwL,YAAYgE,WAAWhK,WAAamc,EAAkBnc,WAC3DxF,KAAKwL,YAAYgE,WAAW8I,WAAaqJ,EAAkBrJ,WAC3DtY,KAAKwL,YAAYgE,WAAWsK,aAAe6H,EAAkB/G,YAI7D,IAAMG,EAAY/a,KAAKwL,YAAYgE,WAAWuL,UACvC8F,GAAuB9F,MAAAA,GAA+D,KAAdA,GAE7E/a,KAAKqgB,WAAWvb,EAAStD,EAAAA,aAAamY,eAkBxC3Z,KAAKie,qBAAuBje,KAAKwL,iBAIrC,CACE,IAAMoO,EAAsB5Z,KAAKwL,YAAYgE,WAAWsK,aAClDhV,EAAU9E,KAAKwL,YAAYuN,oCAAoCjU,QACrE9E,KAAKof,kBAAkBtF,aAAe,GACjCF,MAAAA,GAAoG,IAA/BA,EAAoBla,OAE5FM,KAAKqgB,WAAWvb,EAAStD,EAAAA,aAAa2W,SAKtCrT,EAAQM,gBAAkBwU,EAC1B5Z,KAAKqgB,WAAWvb,EAAStD,EAAAA,aAAamY,gBAExC3Z,KAAKyf,oBAIT1C,EAAAnd,UAAAoiB,wBAAA,SAAwBvL,GAClBzW,KAAKmM,2BAA6B1I,QAAQC,IAAI,2CAA4C+S,GAC9F,IAAMhD,EAAOgD,EAAMjL,YACnB,IAA+C,IAA3CiI,EAAK0I,kCACT,CACE,IACMrX,EADa2O,EAAK8I,uCACGzX,QAC3B9E,KAAKof,kBAAkB/D,gBAAkBvW,EACzC9E,KAAKqgB,WAAWvb,EAAStD,EAAAA,aAAasa,gBAGxC,CACE,IAAMC,EAAmB/b,KAAKwL,YAAYgE,WAAWuL,UAC/CjW,EAAU9E,KAAKwL,YAAYyP,0CAA0CnW,QACtEiX,MAAAA,GAA2F,IAA5BA,EAAiBrc,OAEnFM,KAAKqgB,WAAWvb,EAAStD,EAAAA,aAAamY,gBAKtC7U,EAAQM,gBAAkB2W,EAC1B/b,KAAKqgB,WAAWvb,EAAStD,EAAAA,aAAasa,aAG1C9b,KAAKyf,4DAzhCgB9C,SACAja,KAhHyBzC,EAAA,CAA/CyX,EAAAA,UAAUjM,EAAmB,CAACkM,QAAQ,gDACO1X,EAAA,CAA7CyX,EAAAA,UAAUM,EAAiB,CAACL,QAAQ,8CACe1X,EAAA,CAAnDyX,EAAAA,UAAU2B,EAAuB,CAAC1B,QAAQ,gDACM1X,EAAA,CAAhDyX,EAAAA,UAAUkE,EAAoB,CAACjE,QAAQ,6CAQ/B1X,EAAA,CAAR2X,EAAAA,uCAKQ3X,EAAA,CAAR2X,EAAAA,wCAKQ3X,EAAA,CAAR2X,EAAAA,qDAKD3X,EAAA,CADC2X,EAAAA,2CAGQ3X,EAAA,CAAR2X,EAAAA,yDACQ3X,EAAA,CAAR2X,EAAAA,wCACQ3X,EAAA,CAAR2X,EAAAA,gDACQ3X,EAAA,CAAR2X,EAAAA,6CACQ3X,EAAA,CAAR2X,EAAAA,6CAGQ3X,EAAA,CAAR2X,EAAAA,2CACQ3X,EAAA,CAAR2X,EAAAA,qDACQ3X,EAAA,CAAR2X,EAAAA,8DACQ3X,EAAA,CAAR2X,EAAAA,oDAMQ3X,EAAA,CAAR2X,EAAAA,yCACQ3X,EAAA,CAAR2X,EAAAA,mDACQ3X,EAAA,CAAR2X,EAAAA,4DACQ3X,EAAA,CAAR2X,EAAAA,kDAMQ3X,EAAA,CAAR2X,EAAAA,+CACQ3X,EAAA,CAAR2X,EAAAA,qDACQ3X,EAAA,CAAR2X,EAAAA,8DACQ3X,EAAA,CAAR2X,EAAAA,oDAKQ3X,EAAA,CAAR2X,EAAAA,4CACQ3X,EAAA,CAAR2X,EAAAA,kDACQ3X,EAAA,CAAR2X,EAAAA,2DACQ3X,EAAA,CAAR2X,EAAAA,iDAqBS3X,EAAA,CAAT4X,EAAAA,4DACS5X,EAAA,CAAT4X,EAAAA,8DACS5X,EAAA,CAAT4X,EAAAA,uDASD5X,EAAA,CADC2X,EAAAA,sCAMD3X,EAAA,CADC2X,EAAAA,0CAID3X,EAAA,CADC2X,EAAAA,8CAKD3X,EAAA,CADC2X,EAAAA,8CA7GUmF,EAA0C9c,EAAA,CALtD6X,EAAAA,UAAU,CACT7O,SAAU,2CACV8O,SAAA,4yJAGWgF,mBCbX,SAAAkF,EAAoBC,GAAAliB,KAAAkiB,UAAAA,EAwDtB,OAtDED,EAAAriB,UAAAuiB,UAAA,SAAUhhB,EAAYmW,GAEpB,IAAKA,EACH,OAAOnW,EAGT,GAAI+U,MAAM4J,QAAQxI,IAASA,EAAK5X,OAAS,EACvC,OAAOM,KAAKoiB,kBAAkBjhB,EAAOmW,GAG1B,MAATA,EACFA,EAAO,MACEpB,MAAM4J,QAAQxI,IAAyB,IAAhBA,EAAK5X,QACrB,MAAZ4X,EAAK,KACPA,EAAK,GAAK,OAKd,IAAM+K,EAAK,IAAIC,OAAOhL,EAAM,MACtBiL,EAAQphB,EAAMohB,MAAMF,GAG1B,IAAKE,EACH,OAAOphB,EAOT,IAAMqhB,EAAgBrhB,EAAM0F,QAAQwb,EAAI,oCAAwCE,EAAM,GAAK,WAE3F,OAAOviB,KAAKkiB,UAAUO,wBAAwBD,IAGxCP,EAAAriB,UAAAwiB,kBAAR,SAA0BjhB,EAAYmW,WAEhCoL,EAAQ,GACRC,EAAK,MACT,IAAmB,IAAAC,EAAA/hB,EAAAyW,GAAIuL,EAAAD,EAAA1hB,QAAA2hB,EAAAzhB,KAAAyhB,EAAAD,EAAA1hB,OAAE,CAApB,IAAM2Q,EAAIgR,EAAA1hB,MAGXuhB,IAFFC,EACSrL,EAAK5X,OACJgjB,EAAMI,OAAQjR,EAAO,KAErB6Q,EAAMI,OAAQjR,qGAM1B,IAAM2Q,EAAiBrhB,EAAM0F,QAAQ,IAAIyb,OAAO,IAAMI,EAAQ,IAAK,MAAO,8CAC1E,OAAO1iB,KAAKkiB,UAAUO,wBAAwBD,6CAtDjBO,EAAAA,gBAFpBd,EAAuBhiB,EAAA,CAHnC+iB,EAAAA,KAAK,CACJC,KAAM,yBAEKhB,mBCKX,SAAAiB,EAAoBxY,EAAwByY,GAAxBnjB,KAAA0K,GAAAA,EAAwB1K,KAAAmjB,SAAAA,EAwB9C,OAtBED,EAAAtjB,UAAA4O,mBAAA,WACExO,KAAKojB,WAAWpjB,KAAK0K,GAAGkE,cAAe5O,KAAKqjB,uBAG9CH,EAAAtjB,UAAAwjB,WAAA,SAAWE,EAAqBC,GAC9B,GAAKD,EAAL,CAIA,IAAME,EAAWF,EAAOG,kBAAkBD,SAE1C,GAAKA,GAAgC,IAApBA,EAAS9jB,OAA1B,CAEA,IAAMgkB,EAAMxN,MAAMyN,KAAKH,GAAUlS,MAAM,EAAGiS,GAAOK,QAAO,SAACC,EAAKC,GAC5D,OAAOD,EAAM9a,EAAWyB,eAAesZ,KACtC,GAEH9jB,KAAKmjB,SAASY,SAAS/jB,KAAK0K,GAAGkE,cAAe,YAAgB8U,EAAG,kDAnB3CM,EAAAA,kBAA8BC,EAAAA,aAFtDhkB,EAAA,CADC2X,EAAAA,oDAFUsL,EAA0BjjB,EAAA,CAHtCikB,EAAAA,UAAU,CACTjb,SAAU,4BAECia,mBCmCb,SAAAiB,KAAuD,OAA1CA,EAAuClkB,EAAA,CAvBnDmkB,EAAAA,SAAS,CACRC,aAAc,CACZpC,EACAiB,EACAnG,EACAtR,EACAuM,EACAqB,EACAuC,GAEF0I,QAAS,CACPC,EAAAA,aAGAC,EAAAA,iBACAC,EAAAA,YACAC,EAAAA,oBACAC,EAAAA,iBAEFC,QAAS,CACP7H,MAGSoH,QCvBT,SAAYriB,GAJZ9B,KAAA4T,oCAAqC,EAErC5T,KAAAyc,GAAW,KAGPtd,OAAOC,OAAOY,KAAM8B,GAChB9B,KAAK+a,WAAgC,KAAnB/a,KAAK+a,UACvB/a,KAAKoP,SAAW5N,EAAAA,aAAasa,WACtB9b,KAAK8Z,cAAsC,KAAtB9Z,KAAK8Z,aACjC9Z,KAAKoP,SAAW5N,EAAAA,aAAamY,cACtB3Z,KAAKsY,YAAkC,KAApBtY,KAAKsY,WAC/BtY,KAAKoP,SAAW5N,EAAAA,aAAa2W,OAE7BnY,KAAKoP,SAAW5N,EAAAA,aAAa6N,SAGjCrP,KAAKyc,GAAK,IAAIC","sourcesContent":["/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport function __createBinding(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n}\r\n\r\nexport function __exportStar(m, exports) {\r\n for (var p in m) if (p !== \"default\" && !exports.hasOwnProperty(p)) exports[p] = m[p];\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n};\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\r\n result.default = mod;\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, privateMap) {\r\n if (!privateMap.has(receiver)) {\r\n throw new TypeError(\"attempted to get private field on non-instance\");\r\n }\r\n return privateMap.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, privateMap, value) {\r\n if (!privateMap.has(receiver)) {\r\n throw new TypeError(\"attempted to set private field on non-instance\");\r\n }\r\n privateMap.set(receiver, value);\r\n return value;\r\n}\r\n","export enum ValidationMessageOptionType {\r\n EMIT = 'EMIT',\r\n SHOW = 'SHOW'\r\n}\r\n","export enum ValidationMessageType {\r\n Address_Not_Found = 'address-not-found',\r\n Address_Validated = 'address-validated',\r\n Service_Unavailable = 'service-unavailable',\r\n}\r\n","export enum ADDRESSLEVEL {\r\n BOX_NUMBER = 1,\r\n STREET_NUMBER,\r\n STREET,\r\n LOCALITY\r\n}\r\n","import { Injectable } from '@angular/core';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class LibAddressAutocompleteByComponentService {\n\n constructor() { }\n}\n","export class QueryParameters {\r\n id: number;\r\n q: string;\r\n postalCode: string;\r\n locality: string;\r\n street: string;\r\n streetNumber: string;\r\n maxNumberOfSuggestions: number;\r\n sortByPostalCodeLocalityName: boolean;\r\n sortByLocalityNamePostalCode: boolean;\r\n sortByStreetName: boolean;\r\n sortByStreetNumber: boolean;\r\n sortByBoxNumber: boolean;\r\n\r\n constructor(init?: Partial<QueryParameters>) {\r\n Object.assign(this, init);\r\n }\r\n\r\n sortByPostalCode(enable: boolean) {\r\n this.sortByPostalCodeLocalityName = enable;\r\n }\r\n\r\n sortByLocalityname(enable: boolean) {\r\n this.sortByLocalityNamePostalCode = enable;\r\n }\r\n\r\n sortByStreet(enable: boolean) {\r\n this.sortByStreetName = enable;\r\n }\r\n\r\n sortByStreetNb(enable: boolean) {\r\n this.sortByStreetNumber = enable;\r\n }\r\n\r\n sortByBox(enable: boolean) {\r\n this.sortByBoxNumber = enable;\r\n }\r\n}\r\n","export enum SourceType\r\n{\r\n SOURCE_PREFILLED = 'Prefilled'\r\n}\r\n","import { HttpClient, HttpHeaders } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\nimport { Observable, throwError } from 'rxjs';\nimport { catchError, map } from 'rxjs/operators';\n\n\n@Injectable({\n providedIn: 'root'\n})\nexport class HttpService {\n\n private openConnections = 0;\n\n constructor(private httpClient: HttpClient) { }\n\n private apiKey = 'no-value';\n\n setApiKey(apiKey: string): void\n {\n this.apiKey = apiKey;\n }\n\n getHttpHeaders(): HttpHeaders\n {\n let headers=new HttpHeaders();\n // Attention !\n // Need to reassign as the 'set' is returning a clone of the headera object !!!\n headers=headers.set('x-api-key', /*'bBkvimXYnAaEEKMyGqoWO2XiaZCQyqUi7VReYzPJ'*/ this.apiKey);\n return headers;\n }\n \n get(url: string, options?: any): Observable<any> {\n return this.request('GET', url, options);\n }\n\n private request(method: any, url?: string, options?: {}): Observable<any> {\n options = !!options ? options : {};\n options = {...options, headers: this.getHttpHeaders()};\n console.log('options:', JSON.stringify(options));\n\n this.openConnections++;\n return this.httpClient.request(method, url, options).pipe(\n map((response: Response) => this.handleResponse(response)),\n catchError((error: any) => this.handleError(error)));\n }\n\n private handleResponse(response: any): any {\n this.openConnections--;\n return response;\n }\n\n private handleError(error: any): any {\n this.openConnections--;\n return throwError(error);\n }\n\n}\n","export class Locality {\r\n sequenceNumber: number;\r\n topSuggestions: AddressSuggestion[];\r\n\r\n constructor(json: any) {\r\n this.sequenceNumber = json.sequenceNumber;\r\n if (json.topSuggestions && json.topSuggestions.length > 0) {\r\n this.topSuggestions = [];\r\n json.topSuggestions.forEach(element => {\r\n this.topSuggestions.push(new AddressSuggestion(element));\r\n });\r\n }\r\n }\r\n}\r\n\r\nclass AddressSuggestion {\r\n address: Address;\r\n\r\n constructor(json: any) {\r\n this.address = json.address ? new Address(json.address) : null;\r\n }\r\n}\r\n\r\nclass Address {\r\n municipalityId: string;\r\n subMunicipalityId: string;\r\n detectedLanguage: string;\r\n geoSanction: string;\r\n searchBarString: string;\r\n string: string;\r\n municipalityName: string;\r\n localityName: string;\r\n postalCode: string;\r\n\r\n constructor(json: any) {\r\n this.municipalityId = json.municipalityId;\r\n this.subMunicipalityId = json.subMunicipalityId;\r\n this.detectedLanguage = json.detectedLanguage;\r\n this.geoSanction = json.geoSanction;\r\n this.searchBarString = json.searchBarString;\r\n this.string = json.string;\r\n this.municipalityName = json.municipalityName;\r\n this.localityName = json.localityName;\r\n this.postalCode = json.postalCode;\r\n }\r\n}","export class Street {\r\n sequenceNumber: number;\r\n topSuggestions: AddressSuggestion[];\r\n\r\n constructor(json: any) {\r\n this.sequenceNumber = json.sequenceNumber;\r\n if (json.topSuggestions && json.topSuggestions.length > 0) {\r\n this.topSuggestions = [];\r\n json.topSuggestions.forEach(element => {\r\n this.topSuggestions.push(new AddressSuggestion(element));\r\n });\r\n }\r\n }\r\n}\r\n\r\nclass AddressSuggestion {\r\n address: Address;\r\n\r\n constructor(json: any) {\r\n this.address = json.address ? new Address(json.address) : null;\r\n }\r\n}\r\n\r\nclass Address {\r\n municipalityId: string;\r\n subMunicipalityId: string;\r\n detectedLanguage: string;\r\n geoSanction: string;\r\n searchBarString: string;\r\n string: string;\r\n municipalityName: string;\r\n localityName: string;\r\n postalCode: string;\r\n\r\n constructor(json: any) {\r\n this.municipalityId = json.municipalityId;\r\n this.subMunicipalityId = json.subMunicipalityId;\r\n this.detectedLanguage = json.detectedLanguage;\r\n this.geoSanction = json.geoSanction;\r\n this.searchBarString = json.searchBarString;\r\n this.string = json.string;\r\n this.municipalityName = json.municipalityName;\r\n this.localityName = json.localityName;\r\n this.postalCode = json.postalCode;\r\n }\r\n}\r\n","export class Box {\r\n sequenceNumber: number;\r\n topSuggestions: AddressSuggestion[];\r\n\r\n constructor(json: any) {\r\n this.sequenceNumber = json.sequenceNumber;\r\n if (json.topSuggestions && json.topSuggestions.length > 0) {\r\n this.topSuggestions = [];\r\n json.topSuggestions.forEach(element => {\r\n this.topSuggestions.push(new AddressSuggestion(element));\r\n });\r\n }\r\n }\r\n}\r\n\r\nclass AddressSuggestion {\r\n address: Address;\r\n\r\n constructor(json: any) {\r\n this.address = json.address ? new Address(json.address) : null;\r\n }\r\n}\r\n\r\nclass Address {\r\n municipalityId: string;\r\n subMunicipalityId: string;\r\n detectedLanguage: string;\r\n geoSanction: string;\r\n searchBarString: string;\r\n string: string;\r\n municipalityName: string;\r\n localityName: string;\r\n postalCode: string;\r\n\r\n constructor(json: any) {\r\n this.municipalityId = json.municipalityId;\r\n this.subMunicipalityId = json.subMunicipalityId;\r\n this.detectedLanguage = json.detectedLanguage;\r\n this.geoSanction = json.geoSanction;\r\n this.searchBarString = json.searchBarString;\r\n this.string = json.string;\r\n this.municipalityName = json.municipalityName;\r\n this.localityName = json.localityName;\r\n this.postalCode = json.postalCode;\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\nimport { catchError, tap } from 'rxjs/operators';\nimport { Observable, throwError } from 'rxjs';\nimport { HttpErrorResponse, HttpHeaders } from '@angular/common/http';\nimport { HttpService } from './http.service';\nimport { QueryParameters } from '../model/query-parameters.model';\nimport { Locality } from '../model/Locality';\nimport { Street } from '../model/Street';\nimport { Box } from '../model/Box';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class AddressService {\n private domain = 'http://10.194.73.9:8080';\n private localityURL = this.domain + '/AddressAutoComplete/autocomplete/locality?IncludeGeographicalSanction=true';\n\n private readonly log=true;\n\n private nis9InResponse=false;\n\n // https://bgs.bpost.be/set-selection-circle?lng=4.360537572541948&lat=50.84063582806037&radius=0.001\n private nis9ServiceURL='';\n\n constructor(\n private httpService: HttpService\n ) { }\n\n getLocality(baseUrl: string, params: QueryParameters): Observable<Locality> {\n const url = baseUrl !== '' ? baseUrl : this.localityURL;\n // const options = {'params': params};\n const options = {params};\n return this.httpService.get(url, options).pipe(\n tap(response => this.handleGetLocality(response)),\n catchError(error => this.handleError(error))\n );\n }\n\n private handleGetLocality(response: any): Locality {\n const locality: Locality = new Locality(response.response);\n return locality;\n }\n\n getStreet(baseUrl: string, locality: string, postalcode: string, params: QueryParameters): Observable<Street> {\n let url = baseUrl;\n // const options = { 'params': params };\n const options = {params};\n url = url.replace('$postalCode', postalcode);\n url = url.replace('$localityName', locality);\n return this.httpService.get(url, options).pipe(\n tap(response => this.handleGetStreet(response)),\n catchError(error => this.handleError(error))\n );\n }\n\n private handleGetStreet(response: any): Street {\n const street: Street = new Street(response.response);\n return street;\n }\n\n getBox(baseUrl: string, locality: string, postalcode: string, params: QueryParameters): Observable<Box> {\n let url = baseUrl;\n const options = {params};\n url = url.replace('$postalCode', postalcode);\n url = url.replace('$localityName', locality);\n return this.httpService.get(url, options).pipe(\n tap(response => this.handleGetBox(response)),\n catchError(error => this.handleError(error))\n );\n }\n\n private handleGetBox(response: any): Box {\n const street: Box = new Box(response.response);\n return street;\n }\n\n handleError(error: HttpErrorResponse) {\n return throwError(error);\n }\n\n \n}\n","import { Injectable } from '@angular/core';\nimport { BehaviorSubject } from 'rxjs';\nimport { TranslateService } from '@ngx-translate/core';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class LocaleService {\n\n inputLanguageEvent = new BehaviorSubject<string>(undefined);\n currentLang = this.inputLanguageEvent.asObservable();\n\n constructor(\n // private translateService: TranslateService\n ) { }\n\n changeLang(lang: string) {\n // this.translateService.use(lang);\n this.inputLanguageEvent.next(lang);\n }\n\n public isLocaleDutch(): boolean {\n return this.isPreferredLocale('nl');\n }\n\n public isLocaleFrench(): boolean {\n return this.isPreferredLocale('fr');\n }\n\n public isLocaleGerman(): boolean {\n return this.isPreferredLocale('de');\n }\n\n private isPreferredLocale(locale: string): boolean {\n return (this.inputLanguageEvent.getValue() \n || window.navigator['userSelectedLanguage'] \n || window.navigator['userLanguage'] \n || window.navigator.language).indexOf(locale) === 0;\n }\n}\n","import { Injectable, OnDestroy } from '@angular/core';\n\n// const diacriticsRemovalMap = require('../../assets/diacriticsRemovalMap.json');\n\nconst diacriticsRemovalMap = {\n 'default': [\n {\n 'base': 'A',\n 'letters': '\\u0041\\u24B6\\uFF21\\u00C0\\u00C1\\u00C2\\u1EA6\\u1EA4\\u1EAA\\u1EA8\\u00C3\\u0100\\u0102\\u1EB0\\u1EAE\\u1EB4\\u1EB2\\u0226\\u01E0\\u00C4\\u01DE\\u1EA2\\u00C5\\u01FA\\u01CD\\u0200\\u0202\\u1EA0\\u1EAC\\u1EB6\\u1E00\\u0104\\u023A\\u2C6F'\n },\n {\n 'base': 'AA',\n 'letters': '\\uA732'\n },\n {\n 'base': 'AE',\n 'letters': '\\u00C6\\u01FC\\u01E2'\n },\n {\n 'base': 'AO',\n 'letters': '\\uA734'\n },\n {\n 'base': 'AU',\n 'letters': '\\uA736'\n },\n {\n 'base': 'AV',\n 'letters': '\\uA738\\uA73A'\n },\n {\n 'base': 'AY',\n 'letters': '\\uA73C'\n },\n {\n 'base': 'B',\n 'letters': '\\u0042\\u24B7\\uFF22\\u1E02\\u1E04\\u1E06\\u0243\\u0182\\u0181'\n },\n {\n 'base': 'C',\n 'letters': '\\u0043\\u24B8\\uFF23\\u0106\\u0108\\u010A\\u010C\\u00C7\\u1E08\\u0187\\u023B\\uA73E'\n },\n {\n 'base': 'D',\n 'letters': '\\u0044\\u24B9\\uFF24\\u1E0A\\u010E\\u1E0C\\u1E10\\u1E12\\u1E0E\\u0110\\u018B\\u018A\\u0189\\uA779'\n },\n {\n 'base': 'DZ',\n 'letters': '\\u01F1\\u01C4'\n },\n {\n 'base': 'Dz',\n 'letters': '\\u01F2\\u01C5'\n },\n {\n 'base': 'E',\n 'letters': '\\u0045\\u24BA\\uFF25\\u00C8\\u00C9\\u00CA\\u1EC0\\u1EBE\\u1EC4\\u1EC2\\u1EBC\\u0112\\u1E14\\u1E16\\u0114\\u0116\\u00CB\\u1EBA\\u011A\\u0204\\u0206\\u1EB8\\u1EC6\\u0228\\u1E1C\\u0118\\u1E18\\u1E1A\\u0190\\u018E'\n },\n {\n 'base': 'F',\n 'letters': '\\u0046\\u24BB\\uFF26\\u1E1E\\u0191\\uA77B'\n },\n {\n 'base': 'G',\n 'letters': '\\u0047\\u24BC\\uFF27\\u01F4\\u011C\\u1E20\\u011E\\u0120\\u01E6\\u0122\\u01E4\\u0193\\uA7A0\\uA77D\\uA77E'\n },\n {\n 'base': 'H',\n 'letters': '\\u0048\\u24BD\\uFF28\\u0124\\u1E22\\u1E26\\u021E\\u1E24\\u1E28\\u1E2A\\u0126\\u2C67\\u2C75\\uA78D'\n },\n {\n 'base': 'I',\n 'letters': '\\u0049\\u24BE\\uFF29\\u00CC\\u00CD\\u00CE\\u0128\\u012A\\u012C\\u0130\\u00CF\\u1E2E\\u1EC8\\u01CF\\u0208\\u020A\\u1ECA\\u012E\\u1E2C\\u0197'\n },\n {\n 'base': 'J',\n 'letters': '\\u004A\\u24BF\\uFF2A\\u0134\\u0248'\n },\n {\n 'base': 'K',\n 'letters': '\\u004B\\u24C0\\uFF2B\\u1E30\\u01E8\\u1E32\\u0136\\u1E34\\u0198\\u2C69\\uA740\\uA742\\uA744\\uA7A2'\n },\n {\n 'base': 'L',\n 'letters': '\\u004C\\u24C1\\uFF2C\\u013F\\u0139\\u013D\\u1E36\\u1E38\\u013B\\u1E3C\\u1E3A\\u0141\\u023D\\u2C62\\u2C60\\uA748\\uA746\\uA780'\n },\n {\n 'base': 'LJ',\n 'letters': '\\u01C7'\n },\n {\n 'base': 'Lj',\n 'letters': '\\u01C8'\n },\n {\n 'base': 'M',\n 'letters': '\\u004D\\u24C2\\uFF2D\\u1E3E\\u1E40\\u1E42\\u2C6E\\u019C'\n },\n {\n 'base': 'N',\n 'letters': '\\u004E\\u24C3\\uFF2E\\u01F8\\u0143\\u00D1\\u1E44\\u0147\\u1E46\\u0145\\u1E4A\\u1E48\\u0220\\u019D\\uA790\\uA7A4'\n },\n {\n 'base': 'NJ',\n 'letters': '\\u01CA'\n },\n {\n 'base': 'Nj',\n 'letters': '\\u01CB'\n },\n {\n 'base': 'O',\n 'letters': '\\u004F\\u24C4\\uFF2F\\u00D2\\u00D3\\u00D4\\u1ED2\\u1ED0\\u1ED6\\u1ED4\\u00D5\\u1E4C\\u022C\\u1E4E\\u014C\\u1E50\\u1E52\\u014E\\u022E\\u0230\\u00D6\\u022A\\u1ECE\\u0150\\u01D1\\u020C\\u020E\\u01A0\\u1EDC\\u1EDA\\u1EE0\\u1EDE\\u1EE2\\u1ECC\\u1ED8\\u01EA\\u01EC\\u00D8\\u01FE\\u0186\\u019F\\uA74A\\uA74C'\n },\n {\n 'base': 'OI',\n 'letters': '\\u01A2'\n },\n {\n 'base': 'OO',\n 'letters': '\\uA74E'\n },\n {\n 'base': 'OU',\n 'letters': '\\u0222'\n },\n {\n 'base': 'OE',\n 'letters': '\\u008C\\u0152'\n },\n {\n 'base': 'oe',\n 'letters': '\\u009C\\u0153'\n },\n {\n 'base': 'P',\n 'letters': '\\u0050\\u24C5\\uFF30\\u1E54\\u1E56\\u01A4\\u2C63\\uA750\\uA752\\uA754'\n },\n {\n 'base': 'Q',\n 'letters': '\\u0051\\u24C6\\uFF31\\uA756\\uA758\\u024A'\n },\n {\n 'base': 'R',\n 'letters': '\\u0052\\u24C7\\uFF32\\u0154\\u1E58\\u0158\\u0210\\u0212\\u1E5A\\u1E5C\\u0156\\u1E5E\\u024C\\u2C64\\uA75A\\uA7A6\\uA782'\n },\n {\n 'base': 'S',\n 'letters': '\\u0053\\u24C8\\uFF33\\u1E9E\\u015A\\u1E64\\u015C\\u1E60\\u0160\\u1E66\\u1E62\\u1E68\\u0218\\u015E\\u2C7E\\uA7A8\\uA784'\n },\n {\n 'base': 'T',\n 'letters': '\\u0054\\u24C9\\uFF34\\u1E6A\\u0164\\u1E6C\\u021A\\u0162\\u1E70\\u1E6E\\u0166\\u01AC\\u01AE\\u023E\\uA786'\n },\n {\n 'base': 'TZ',\n 'letters': '\\uA728'\n },\n {\n 'base': 'U',\n 'letters': '\\u0055\\u24CA\\uFF35\\u00D9\\u00DA\\u00DB\\u0168\\u1E78\\u016A\\u1E7A\\u016C\\u00DC\\u01DB\\u01D7\\u01D5\\u01D9\\u1EE6\\u016E\\u0170\\u01D3\\u0214\\u0216\\u01AF\\u1EEA\\u1EE8\\u1EEE\\u1EEC\\u1EF0\\u1EE4\\u1E72\\u0172\\u1E76\\u1E74\\u0244'\n },\n {\n 'base': 'V',\n 'letters': '\\u0056\\u24CB\\uFF36\\u1E7C\\u1E7E\\u01B2\\uA75E\\u0245'\n },\n {\n 'base': 'VY',\n 'letters': '\\uA760'\n },\n {\n 'base': 'W',\n 'letters': '\\u0057\\u24CC\\uFF37\\u1E80\\u1E82\\u0174\\u1E86\\u1E84\\u1E88\\u2C72'\n },\n {\n 'base': 'X',\n 'letters': '\\u0058\\u24CD\\uFF38\\u1E8A\\u1E8C'\n },\n {\n 'base': 'Y',\n 'letters': '\\u0059\\u24CE\\uFF39\\u1EF2\\u00DD\\u0176\\u1EF8\\u0232\\u1E8E\\u0178\\u1EF6\\u1EF4\\u01B3\\u024E\\u1EFE'\n },\n {\n 'base': 'Z',\n 'letters': '\\u005A\\u24CF\\uFF3A\\u0179\\u1E90\\u017B\\u017D\\u1E92\\u1E94\\u01B5\\u0224\\u2C7F\\u2C6B\\uA762'\n },\n {\n 'base': 'a',\n 'letters': '\\u0061\\u24D0\\uFF41\\u1E9A\\u00E0\\u00E1\\u00E2\\u1EA7\\u1EA5\\u1EAB\\u1EA9\\u00E3\\u0101\\u0103\\u1EB1\\u1EAF\\u1EB5\\u1EB3\\u0227\\u01E1\\u00E4\\u01DF\\u1EA3\\u00E5\\u01FB\\u01CE\\u0201\\u0203\\u1EA1\\u1EAD\\u1EB7\\u1E01\\u0105\\u2C65\\u0250'\n },\n {\n 'base': 'aa',\n 'letters': '\\uA733'\n },\n {\n 'base': 'ae',\n 'letters': '\\u00E6\\u01FD\\u01E3'\n },\n {\n 'base': 'ao',\n 'letters': '\\uA735'\n },\n {\n 'base': 'au',\n 'letters': '\\uA737'\n },\n {\n 'base': 'av',\n 'letters': '\\uA739\\uA73B'\n },\n {\n 'base': 'ay',\n 'letters': '\\uA73D'\n },\n {\n 'base': 'b',\n 'letters': '\\u0062\\u24D1\\uFF42\\u1E03\\u1E05\\u1E07\\u0180\\u0183\\u0253'\n },\n {\n 'base': 'c',\n 'letters': '\\u0063\\u24D2\\uFF43\\u0107\\u0109\\u010B\\u010D\\u00E7\\u1E09\\u0188\\u023C\\uA73F\\u2184'\n },\n {\n 'base': 'd',\n 'letters': '\\u0064\\u24D3\\uFF44\\u1E0B\\u010F\\u1E0D\\u1E11\\u1E13\\u1E0F\\u0111\\u018C\\u0256\\u0257\\uA77A'\n },\n {\n 'base': 'dz',\n 'letters': '\\u01F3\\u01C6'\n },\n {\n 'base': 'e',\n 'letters': '\\u0065\\u24D4\\uFF45\\u00E8\\u00E9\\u00EA\\u1EC1\\u1EBF\\u1EC5\\u1EC3\\u1EBD\\u0113\\u1E15\\u1E17\\u0115\\u0117\\u00EB\\u1EBB\\u011B\\u0205\\u0207\\u1EB9\\u1EC7\\u0229\\u1E1D\\u0119\\u1E19\\u1E1B\\u0247\\u025B\\u01DD'\n },\n {\n 'base': 'f',\n 'letters': '\\u0066\\u24D5\\uFF46\\u1E1F\\u0192\\uA77C'\n },\n {\n 'base': 'g',\n 'letters': '\\u0067\\u24D6\\uFF47\\u01F5\\u011D\\u1E21\\u011F\\u0121\\u01E7\\u0123\\u01E5\\u0260\\uA7A1\\u1D79\\uA77F'\n },\n {\n 'base': 'h',\n 'letters': '\\u0068\\u24D7\\uFF48\\u0125\\u1E23\\u1E27\\u021F\\u1E25\\u1E29\\u1E2B\\u1E96\\u0127\\u2C68\\u2C76\\u0265'\n },\n {\n 'base': 'hv',\n 'letters': '\\u0195'\n },\n {\n 'base': 'i',\n 'letters': '\\u0069\\u24D8\\uFF49\\u00EC\\u00ED\\u00EE\\u0129\\u012B\\u012D\\u00EF\\u1E2F\\u1EC9\\u01D0\\u0209\\u020B\\u1ECB\\u012F\\u1E2D\\u0268\\u0131'\n },\n {\n 'base': 'j',\n 'letters': '\\u006A\\u24D9\\uFF4A\\u0135\\u01F0\\u0249'\n },\n {\n 'base': 'k',\n 'letters': '\\u006B\\u24DA\\uFF4B\\u1E31\\u01E9\\u1E33\\u0137\\u1E35\\u0199\\u2C6A\\uA741\\uA743\\uA745\\uA7A3'\n },\n {\n 'base': 'l',\n 'letters': '\\u006C\\u24DB\\uFF4C\\u0140\\u013A\\u013E\\u1E37\\u1E39\\u013C\\u1E3D\\u1E3B\\u017F\\u0142\\u019A\\u026B\\u2C61\\uA749\\uA781\\uA747'\n },\n {\n 'base': 'lj',\n 'letters': '\\u01C9'\n },\n {\n 'base': 'm',\n 'letters': '\\u006D\\u24DC\\uFF4D\\u1E3F\\u1E41\\u1E43\\u0271\\u026F'\n },\n {\n 'base': 'n',\n 'letters': '\\u006E\\u24DD\\uFF4E\\u01F9\\u0144\\u00F1\\u1E45\\u0148\\u1E47\\u0146\\u1E4B\\u1E49\\u019E\\u0272\\u0149\\uA791\\uA7A5'\n },\n {\n 'base': 'nj',\n 'letters': '\\u01CC'\n },\n {\n 'base': 'o',\n 'letters': '\\u006F\\u24DE\\uFF4F\\u00F2\\u00F3\\u00F4\\u1ED3\\u1ED1\\u1ED7\\u1ED5\\u00F5\\u1E4D\\u022D\\u1E4F\\u014D\\u1E51\\u1E53\\u014F\\u022F\\u0231\\u00F6\\u022B\\u1ECF\\u0151\\u01D2\\u020D\\u020F\\u01A1\\u1EDD\\u1EDB\\u1EE1\\u1EDF\\u1EE3\\u1ECD\\u1ED9\\u01EB\\u01ED\\u00F8\\u01FF\\u0254\\uA74B\\uA74D\\u0275'\n },\n {\n 'base': 'oi',\n 'letters': '\\u01A3'\n },\n {\n 'base': 'ou',\n 'letters': '\\u0223'\n },\n {\n 'base': 'oo',\n 'letters': '\\uA74F'\n },\n {\n 'base': 'p',\n 'letters': '\\u0070\\u24DF\\uFF50\\u1E55\\u1E57\\u01A5\\u1D7D\\uA751\\uA753\\uA755'\n },\n {\n 'base': 'q',\n 'letters': '\\u0071\\u24E0\\uFF51\\u024B\\uA757\\uA759'\n },\n {\n 'base': 'r',\n 'letters': '\\u0072\\u24E1\\uFF52\\u0155\\u1E59\\u0159\\u0211\\u0213\\u1E5B\\u1E5D\\u0157\\u1E5F\\u024D\\u027D\\uA75B\\uA7A7\\uA783'\n },\n {\n 'base': 's',\n 'letters': '\\u0073\\u24E2\\uFF53\\u00DF\\u015B\\u1E65\\u015D\\u1E61\\u0161\\u1E67\\u1E63\\u1E69\\u0219\\u015F\\u023F\\uA7A9\\uA785\\u1E9B'\n },\n {\n 'base': 't',\n 'letters': '\\u0074\\u24E3\\uFF54\\u1E6B\\u1E97\\u0165\\u1E6D\\u021B\\u0163\\u1E71\\u1E6F\\u0167\\u01AD\\u0288\\u2C66\\uA787'\n },\n {\n 'base': 'tz',\n 'letters': '\\uA729'\n },\n {\n 'base': 'u',\n 'letters': '\\u0075\\u24E4\\uFF55\\u00F9\\u00FA\\u00FB\\u0169\\u1E79\\u016B\\u1E7B\\u016D\\u00FC\\u01DC\\u01D8\\u01D6\\u01DA\\u1EE7\\u016F\\u0171\\u01D4\\u0215\\u0217\\u01B0\\u1EEB\\u1EE9\\u1EEF\\u1EED\\u1EF1\\u1EE5\\u1E73\\u0173\\u1E77\\u1E75\\u0289'\n },\n {\n 'base': 'v',\n 'letters': '\\u0076\\u24E5\\uFF56\\u1E7D\\u1E7F\\u028B\\uA75F\\u028C'\n },\n {\n 'base': 'vy',\n 'letters': '\\uA761'\n },\n {\n 'base': 'w',\n 'letters': '\\u0077\\u24E6\\uFF57\\u1E81\\u1E83\\u0175\\u1E87\\u1E85\\u1E98\\u1E89\\u2C73'\n },\n {\n 'base': 'x',\n 'letters': '\\u0078\\u24E7\\uFF58\\u1E8B\\u1E8D'\n },\n {\n 'base': 'y',\n 'letters': '\\u0079\\u24E8\\uFF59\\u1EF3\\u00FD\\u0177\\u1EF9\\u0233\\u1E8F\\u00FF\\u1EF7\\u1E99\\u1EF5\\u01B4\\u024F\\u1EFF'\n },\n {\n 'base': 'z',\n 'letters': '\\u007A\\u24E9\\uFF5A\\u017A\\u1E91\\u017C\\u017E\\u1E93\\u1E95\\u01B6\\u0225\\u0240\\u2C6C\\uA763'\n }\n ]\n};\n\n@Injectable({\n providedIn: 'root'\n})\nexport class UnicodeService implements OnDestroy {\n\n private defaultDiacriticsRemovalMap: any;\n private diacriticsMap: Object;\n\n constructor() {\n this.defaultDiacriticsRemovalMap = diacriticsRemovalMap.default;\n this.diacriticsMap = {};\n this.defaultDiacriticsRemovalMap.forEach(value => value.letters.split('').forEach((char) => this.diacriticsMap[char] = value.base));\n }\n\n public removeDiacritics(str: any) {\n if(str === null || str === undefined) { return str; }\n return str.replace(/[^\\u0000-\\u007E]/g, (a: string | number) => this.diacriticsMap[a] || a);\n }\n\n ngOnDestroy() {\n this.diacriticsMap = {};\n }\n\n}\n","export class DomHandler {\r\n public static findSingle(element: any, selector: string): any {\r\n if (element) {\r\n return element.querySelector(selector);\r\n }\r\n return null;\r\n }\r\n\r\n public static scrollInView(container, item) {\r\n const borderTopValue: string = getComputedStyle(container).getPropertyValue('borderTopWidth');\r\n const borderTop: number = borderTopValue ? parseFloat(borderTopValue) : 0;\r\n const paddingTopValue: string = getComputedStyle(container).getPropertyValue('paddingTop');\r\n const paddingTop: number = paddingTopValue ? parseFloat(paddingTopValue) : 0;\r\n const containerRect = container.getBoundingClientRect();\r\n const itemRect = item.getBoundingClientRect();\r\n const offset = (itemRect.top + document.body.scrollTop) - (containerRect.top + document.body.scrollTop) - borderTop - paddingTop;\r\n const scroll = container.scrollTop;\r\n const elementHeight = container.clientHeight;\r\n const itemHeight = this.getOuterHeight(item);\r\n\r\n if (offset < 0) {\r\n container.scrollTop = scroll + offset;\r\n } else if ((offset + itemHeight) > elementHeight) {\r\n container.scrollTop = scroll + offset - elementHeight + itemHeight;\r\n }\r\n }\r\n \r\n public static getInnerHeight(el) {\r\n let height = el.offsetHeight;\r\n let style = getComputedStyle(el);\r\n\r\n height += parseFloat(style.paddingTop) + parseFloat(style.paddingBottom);\r\n return height;\r\n }\r\n\r\n public static getOuterHeight(el, margin?) {\r\n let height = el.offsetHeight;\r\n\r\n if (margin) {\r\n let style = getComputedStyle(el);\r\n height += parseFloat(style.marginTop) + parseFloat(style.marginBottom);\r\n }\r\n\r\n return height;\r\n }\r\n\r\n public static getHeight(el): number {\r\n let height = el.offsetHeight;\r\n let style = getComputedStyle(el);\r\n\r\n height -= parseFloat(style.paddingTop) + parseFloat(style.paddingBottom) + parseFloat(style.borderTopWidth) + parseFloat(style.borderBottomWidth);\r\n\r\n return height;\r\n }\r\n}\r\n","import { PrefillData } from './prefill-data';\r\nimport { ADDRESSLEVEL } from '../enum/address-level.enum';\r\n\r\nexport class PrefillEvent\r\n{\r\n constructor(\r\n public addressLevel: ADDRESSLEVEL,\r\n public prefillData: PrefillData,\r\n ){}\r\n}\r\n","export enum InputNameType\r\n{\r\n LOCALITY = 'LOCALITY',\r\n STREET = 'STREET',\r\n STREET_NUMBER = 'STREET_NUMBER',\r\n BOX_NUMBER = 'BOX_NUMBER'\r\n}\r\n","import { Component, OnInit, OnChanges, OnDestroy, SimpleChanges, AfterViewChecked, ElementRef, ViewChild, Input, Output, EventEmitter } from '@angular/core';\nimport { Subscription } from 'rxjs';\nimport { ValidationMessageType } from '../enum/validation-message-type.enum';\nimport { ADDRESSLEVEL } from '../enum/address-level.enum';\nimport { QueryParameters } from '../model/query-parameters.model';\nimport { AddressService } from '../services/adress.service';\nimport { TranslateService } from '@ngx-translate/core';\nimport { LocaleService } from '../services/locale.service';\nimport { UnicodeService } from '../services/unicode.service';\nimport { DomHandler } from '../utils/domhandler';\nimport { SourceType } from '../enum/source-type.enum';\nimport { PrefillData } from '../utils/prefill-data';\nimport { PrefillEvent } from '../utils/preflll.event';\nimport { InputNameType } from '../enum/input-name.enum';\n\n@Component({\n selector: 'bp-locality',\n templateUrl: './locality.component.html',\n styleUrls: ['./locality.component.scss']\n})\nexport class LocalityComponent implements OnInit, OnChanges, OnDestroy, AfterViewChecked {\n\n @ViewChild('localitySearchInput', {static: false} ) localitySearchInput: ElementRef;\n @ViewChild('localityList', {static: false} ) localityList: ElementRef;\n\n // 2020-06-15\n/* @Input()\n onFocusShowSuggestionsAfterPrefill = true; */\n\n @Input() labelResourceKey = 'common.label.postalCode';\n @Input() messageOption = 'Y';\n @Input() maxSuggesionCount = 5;\n @Input() visibleSuggestionCount = 5;\n @Input() sortCriteria = '';\n @Input() baseUrl: string;\n @Input() inputText: string;\n // @Input() addressParams: PrefilledParameters;\n @Input() prefillData: PrefillData;\n @Input() showDebugMessageToConsole = true;\n\n// @ts-ignore\n @Input() set inputLang(val: string) {\n this.localeService.changeLang(val);\n this.translateService.use(val).subscribe(\n (res: any) => {\n this.onChangedLanguage();\n }\n );\n }\n\n @Input()\n isReadonly=false;\n \n @Output() messageChanged: EventEmitter<{messageType: ValidationMessageType, translatedMessage: string}> = new EventEmitter();\n @Output() addressChanged: EventEmitter<any> = new EventEmitter();\n @Output() focusEvent: EventEmitter<any> = new EventEmitter();\n @Output() blurEvent: EventEmitter<any> = new EventEmitter();\n @Output() textChangeEvent: EventEmitter<any> = new EventEmitter();\n @Output() clearInputEventEmitter: EventEmitter<string> = new EventEmitter();\n\n @Output() prefillEventEmitter: EventEmitter<PrefillEvent> = new EventEmitter<PrefillEvent>();\n\n // instance properties\n addressIsValidated: boolean;\n bpTypeAhead: string;\n collapseDropdown: boolean;\n consumedNumber: number;\n errorCode: any;\n lastSearchValue: string;\n minLevel: any;\n placeHolderText: string;\n previousIndex: number;\n searchText: string;\n selectedIndex: number;\n selectionChanged: boolean;\n sequenceNumber: number;\n skipNextBlur: boolean; // OnBlur is triggered when the user clicks suggestion/validator button\n subscription: Subscription;\n suggestions: Array<any>;\n suggestionValidationMessage: string;\n suggestionsWordList: any;\n typeAheadWord: string;\n validationMessageCode = null;\n validationMessageOptions = null;\n wordList: any;\n\n prefilling = false;\n isPrefillWithNoMatch = false;\n\n constructor(\n private addressService: AddressService,\n private localeService: LocaleService,\n private translateService: TranslateService,\n private unicodeService: UnicodeService,\n ) { }\n\n ngOnInit(): void\n {\n this.searchText = '';\n // instance properties\n this.addressIsValidated = false;\n this.suggestionValidationMessage = '';\n this.suggestions = [];\n this.previousIndex = -1;\n this.lastSearchValue = '';\n this.wordList = [];\n this.suggestionsWordList = [];\n this.bpTypeAhead = '';\n this.placeHolderText = '';\n this.skipNextBlur = false; // OnBlur is triggered when the user clicks suggestion/validator button\n this.errorCode = null;\n // scope properties\n this.selectedIndex = -1;\n // properties\n this.typeAheadWord = '';\n this.collapseDropdown = false;\n this.sequenceNumber = 0;\n this.consumedNumber = 0;\n // initialization\n this.setSearchText('');\n\n this.onChangedLanguage();\n }\n\n ngAfterViewChecked() {\n if (this.selectionChanged) {\n const overlay: HTMLDivElement = this.localityList.nativeElement;\n setTimeout(() => {\n const listItem = DomHandler.findSingle(overlay, 'li.active');\n if (listItem) {\n DomHandler.scrollInView(overlay, listItem);\n }\n }, 1);\n this.selectionChanged = false;\n }\n }\n\n ngOnChanges(changes: SimpleChanges) {\n if (changes) {\n\n if (changes.hasOwnProperty('prefillData') && !changes.prefillData.firstChange) {\n this.prefilling = true;\n this.searchText = this.loadParams(changes.prefillData.currentValue);\n if (this.showDebugMessageToConsole) { console.log('locality::ngOnChanges - loadParame result:', this.searchText); }\n this.bpTypeAhead = '';\n if (this.searchText !== '' && this.minLevel === ADDRESSLEVEL.LOCALITY) {\n this.collapseDropdown = true;\n this.prefillData.prefillMunicipalityName\n = this.transformMunicipalityInLowercaseAndWithoutDiacritics(this.prefillData.parameters.municipalityName);\n this.onInputChange(/*'prefilled'*/ SourceType.SOURCE_PREFILLED );\n }\n }\n if (changes.hasOwnProperty('inputText') && !changes.inputText.firstChange) {\n if (this.notEqualIgnoreCase(this.searchText, changes.inputText.currentValue)) {\n this.clearWidget();\n this.searchText = changes.inputText.currentValue;\n }\n }\n /*\n if (changes.hasOwnProperty('baseUrl') && !changes.baseUrl.firstChange) {\n this.clearWidget();\n this.clearSelectedAddress();\n }\n */\n }\n }\n\n transformMunicipalityInLowercaseAndWithoutDiacritics(municipalityName: string): string {\n let result: string = null;\n if (municipalityName !== null && municipalityName !== undefined )\n {\n result = this.unicodeService.removeDiacritics(municipalityName);\n result = result.toLowerCase();\n }\n if (this.showDebugMessageToConsole) {console.log('prefill municipality', result); }\n return result;\n }\n\n ngOnDestroy() {\n if (this.subscription) {\n this.subscription.unsubscribe();\n }\n }\n\n buildInputWordList() {\n this.wordList = this.searchText.split(/[\\s, ]+/);\n // console.log('LibAutocompleteLocalityComponent::buildInputWordList', this.wordList);\n if (this.suggestions && this.wordList) {\n for (const sug of this.suggestions) {\n if (!sug || !sug.hasOwnProperty('string')) {\n continue;\n }\n for (const w of this.wordList) {\n const start = this.startsWithIgnoreDiacritics(sug.string as string, w as string);\n if (start >= 0) {\n const ww = sug.string.substr(start, w.length);\n // console.log('adding word:' + ww);\n // ww is a candidate to be added to the wordlist if not already present in it\n const present = this.wordList.find( (w1: string) => w1.toLowerCase() === ww.toLowerCase() );\n if (present === null || present === undefined) {\n this.wordList.push(ww);\n }\n }\n }\n }\n }\n }\n\n stringStartsWithIgnoreDiacritics(value, prefix) {\n // tslint:disable-next-line:variable-name\n const _value = this.unicodeService.removeDiacritics( (value !== null && value !== undefined) ? value.toLowerCase() : value );\n // tslint:disable-next-line:variable-name\n const _prefix = this.unicodeService.removeDiacritics( (prefix !== null && prefix !== undefined) ? prefix.toLowerCase() : prefix);\n const start = _value.slice(0, _prefix.length).toLowerCase().indexOf(_prefix) !== -1;\n return start;\n }\n\n buildTypeAhead(source: SourceType) {\n if (source === SourceType.SOURCE_PREFILLED) { return false; }\n if (!this.mayAddTypeAhead()) {\n return;\n }\n const searchTextWords = this.searchText.split(/[\\s, ]+/);\n const lastWord = searchTextWords[searchTextWords.length - 1];\n\n if (this.suggestions.some(function(sug) {\n if (!sug || !sug.hasOwnProperty('string')) {\n return false;\n }\n return sug.string.split(/[\\s-]+/).some(function(word) {\n if (this.stringStartsWithIgnoreDiacritics(word, lastWord)) {\n this.typeAheadWord = word;\n return true;\n }\n }.bind(this));\n }.bind(this))) {\n const appendix = this.typeAheadWord.slice(lastWord.length, this.typeAheadWord.length).toLowerCase();\n this.bpTypeAhead = this.searchText + appendix;\n }\n }\n\n clearConnectionErrorMessage() {\n if (this.errorCode) {\n /*\n this.translateService.get(this.errorCode/ *, {value: 'world'}* /).subscribe((res: string) => {\n console.log(res);\n // => 'hello world'\n if (this.suggestionValidationMessage === res ) {\n this.clearSuggestionValidationMessage();\n }\n });\n */\n\n const res = this.translateService.instant(this.errorCode);\n if (this.suggestionValidationMessage === res ) {\n this.clearSuggestionValidationMessage();\n }\n /*\n if (this.suggestionValidationMessage === this.translationService.translate(this.errorCode)) {\n this.clearSuggestionValidationMessage();\n }\n */\n this.errorCode = null;\n }\n }\n\n clearTypeAhead() {\n this.bpTypeAhead = '';\n }\n\n emitTranslatedValidationMessage(validationMessageType: ValidationMessageType, options?: string[]) {\n // Momently, options are NOT used; so data type of these options will be reviewed once needed.\n if (validationMessageType === null || validationMessageType === undefined ) {\n console.warn('Unable to emit validation message - message key is invalid!', validationMessageType);\n return;\n }\n\n switch (validationMessageType) {\n\n case ValidationMessageType.Address_Not_Found:\n case ValidationMessageType.Address_Validated:\n case ValidationMessageType.Service_Unavailable: {\n const message = this.translateService.instant('common.message.' + validationMessageType);\n // this.messageChanged.emit(message);\n this.messageChanged.emit({messageType: validationMessageType, translatedMessage: message});\n }\n // tslint:disable-next-line:align\n break;\n\n default: {\n console.error('Unable to emit validation message - message key NOT supported!', validationMessageType);\n }\n // tslint:disable-next-line:align\n break;\n }\n\n }\n\n generateParameters(): QueryParameters {\n const param = new QueryParameters({\n id: this.sequenceNumber,\n q: this.searchText,\n maxNumberOfSuggestions: this.maxSuggesionCount\n });\n\n switch (this.sortCriteria) {\n case 'P':\n param.sortByPostalCode(true);\n break;\n\n case 'L':\n param.sortByLocalityname(true);\n break;\n\n default:\n break;\n }\n return param;\n }\n\n getTopSuggestions(source?: SourceType) {\n this.sequenceNumber += 1;\n const param = this.generateParameters();\n if (this.showDebugMessageToConsole) { console.log('LOCALITY calling service params', param); }\n if (this.searchText) {\n this.subscription = this.addressService.getLocality(this.baseUrl, param).subscribe(\n response => {\n if (this.showDebugMessageToConsole) { console.log('locality suggestions received:', response); }\n this.handleGetLocalityResponse(response, source);\n if (source === SourceType.SOURCE_PREFILLED)\n {\n this.isPrefillWithNoMatch = this.prefillData.prefillMunicipalityPerfectMatchFound === true ? false : true;\n this.prefillAnalyzeData();\n }\n else\n {\n this.isPrefillWithNoMatch = false;\n }\n }\n ,\n () => this.handleGetLocalityError()\n );\n }\n }\n\n getTextColor(): string {\n return ( this.isPrefillWithNoMatch === true ) ? 'orangered' : '';\n }\n\n handleGetLocalityResponse(data: any, source?: SourceType) {\n if (this.showDebugMessageToConsole) { console.log('handleGetLocalityResponse', data); }\n if (data && data.response && data.response.sequenceNumber && data.response.sequenceNumber >= this.consumedNumber &&\n data.response.topSuggestions) {\n this.consumedNumber = data.response.sequenceNumber;\n this.clearSuggestions();\n this.parseTopSuggestions(data.response.topSuggestions, source);\n this.buildTypeAhead(source);\n this.clearConnectionErrorMessage();\n this.buildInputWordList();\n }\n this.collapseDropdown = (this.prefilling === true && this.prefillData !== null)\n ? !this.prefillData.parameters.onFocusShowSuggestionsAfterPrefill : false;\n }\n\n handleGetLocalityError() {\n this.setConnectionErrorMessage();\n }\n\n isBrowserIE(): boolean {\n return /msie\\s|trident\\/|edge\\//i.test(window.navigator.userAgent);\n }\n\n isDropdownClicked(ev) {\n const target = ev.explicitOriginalTarget || document.activeElement;\n return (target.id === 'bpaac-locality-dropdown');\n }\n\n isString(val): boolean {\n return val.constructor === String;\n }\n\n loadParams(prefillData: PrefillData) {\n // this.clearWidget();\n let concatStr = '';\n if (prefillData !== null && prefillData.parameters !== null)\n {\n if (prefillData.parameters.hasOwnProperty('minLevel')) {\n this.minLevel = prefillData.parameters.minLevel;\n }\n\n /*\n if (prefillData.parameters.hasOwnProperty('unstructuredAddress') && this.isString(prefillData.parameters.unstructuredAddress)) {\n concatStr = prefillData.parameters.unstructuredAddress;\n } else {\n if (prefillData.parameters.hasOwnProperty('postalCode') && this.isString(prefillData.parameters.postalCode)) {\n concatStr = prefillData.parameters.postalCode;\n }\n if (prefillData.parameters.hasOwnProperty('municipalityName') && this.isString(prefillData.parameters.municipalityName)) {\n concatStr += ' ' + prefillData.parameters.municipalityName;\n }\n }\n */\n\n if (prefillData.parameters.hasOwnProperty('postalCode') && this.isString(prefillData.parameters.postalCode)) {\n concatStr = prefillData.parameters.postalCode;\n }\n if (prefillData.parameters.hasOwnProperty('municipalityName') && this.isString(prefillData.parameters.municipalityName)) {\n concatStr += ' ' + prefillData.parameters.municipalityName;\n }\n }\n\n return concatStr;\n }\n\n mayShowClearButton() {\n return this.searchText.length > 0;\n }\n\n mayAddTypeAhead() {\n if (this.searchText.length === 0) {\n return false;\n }\n return (/[^\\s, \\\\\\/]$/).test(this.searchText);\n }\n\n notEqualIgnoreCase(oldVal: string, newVal: string) {\n return oldVal.toLowerCase() !== newVal.toLowerCase();\n }\n\n onBlur(ev) {\n if (this.isBrowserIE() && this.isDropdownClicked(ev)) {\n this.localitySearchInput.nativeElement.focus();\n return;\n }\n if (this.skipNextBlur) {\n this.skipNextBlur = false;\n } else {\n this.collapseDropdown = true;\n this.blurEvent.emit(ADDRESSLEVEL.LOCALITY);\n }\n }\n\n onFocus() {\n this.collapseDropdown = false;\n // this.collapseDropdown = (this.prefilling === true && this.prefillData !== null)\n // ? !this.prefillData.parameters.onFocusShowSuggestionsAfterPrefill : false;\n // this.prefilling = false;\n this.skipNextBlur = false;\n this.focusEvent.emit(ADDRESSLEVEL.LOCALITY);\n }\n\n onInputClick() {\n if (this.showDebugMessageToConsole) { console.log('locality click'); }\n }\n\n onInputChange(source?: SourceType) {\n this.collapseDropdown = false;\n this.resetArrowSelectedIndex();\n if (!source) {\n this.prefilling = false;\n this.valueChanged();\n }\n this.clearSuggestionValidationMessage();\n if (this.searchText === '') {\n this.sequenceNumber += 1;\n this.consumedNumber = this.sequenceNumber;\n this.clearSuggestions();\n } else {\n this.getTopSuggestions(source);\n }\n // console.log('LibAutocompleteLocalityComponent::onInputChange - before', this.wordList);\n this.buildInputWordList();\n // console.log('LibAutocompleteLocalityComponent::onInputChange - after', this.wordList);\n }\n\n parseSingleSuggestion(suggestion: any, source: SourceType) {\n let suggestionToAdd: any;\n if (this.localeService.isLocaleFrench() && suggestion.hasOwnProperty('french')) {\n suggestionToAdd = suggestion.french;\n } else if (this.localeService.isLocaleDutch() && suggestion.hasOwnProperty('dutch')) {\n suggestionToAdd = suggestion.dutch;\n } else if (this.localeService.isLocaleGerman() && suggestion.hasOwnProperty('german')) {\n suggestionToAdd = suggestion.german;\n } else if (suggestion.hasOwnProperty('address')) {\n suggestionToAdd = suggestion.address;\n }\n if (suggestionToAdd) {\n if (suggestion.messages) {\n suggestionToAdd.messages = suggestion.messages;\n }\n this.suggestions.push(suggestionToAdd);\n if (this.messageOption === 'Y' && suggestionToAdd.hasOwnProperty('messages')) {\n for (const m of suggestionToAdd.messages) {\n const translatedMessage = this.translateMessage(m);\n if (translatedMessage !== null ) {\n m.translatedMessage = translatedMessage;\n }\n }\n }\n if (source === SourceType.SOURCE_PREFILLED)\n {\n suggestion.address = suggestionToAdd;\n this.prefillCheckForPerfectMatch(suggestion);\n }\n }\n }\n\n prefillCheckForPerfectMatch(suggestion)\n {\n const sugAddress = suggestion.address;\n if ( /*! this.prefillData.prefillMunicipalityPerfectMatchFound &&*/ sugAddress.postalCode === this.prefillData.parameters.postalCode )\n {\n if (this.showDebugMessageToConsole) {\n console.log('LOCALITY - PREFILL - checking suggestion for perfect match', this.prefillData, suggestion);\n }\n const suggestionLocality = this.transformMunicipalityInLowercaseAndWithoutDiacritics(sugAddress.localityName);\n const suggestionMunicipality = this.transformMunicipalityInLowercaseAndWithoutDiacritics(sugAddress.municipalityName);\n if (suggestionLocality === this.prefillData.prefillMunicipalityName\n || suggestionMunicipality === this.prefillData.prefillMunicipalityName)\n {\n if (this.prefillData.prefillMunicipalityAndLocalityPerfectMatchFound === true)\n {\n if (this.showDebugMessageToConsole) { console.log('LOCALITY - PREFILL - skipping suggestion:', suggestion); }\n if (this.showDebugMessageToConsole) { console.log('LOCALITY - PREFILL - keeping suggestion:',\n this.prefillData.prefillMunicipalityPerfectMatchSuggestion); }\n return;\n }\n\n this.prefillData.prefillMunicipalityPerfectMatchFound = true;\n this.prefillData.prefillMunicipalityPerfectMatchSuggestion = suggestion;\n this.searchText = sugAddress.postalCode + ' ' + sugAddress.localityName;\n\n this.prefillData.prefillMunicipalityAndLocalityPerfectMatchFound = (suggestionLocality === this.prefillData.prefillMunicipalityName\n && suggestionMunicipality === this.prefillData.prefillMunicipalityName) ? true : false;\n\n if (this.prefillData.prefillMunicipalityAndLocalityPerfectMatchFound === true)\n {\n if (this.showDebugMessageToConsole) { console.log('LOCALITY - PREFILL - Perfect match - Municipality & location:', suggestion); }\n }\n else\n {\n if (this.showDebugMessageToConsole) { console.log('LOCALITY - PREFILL - Perfect match:', suggestion); }\n }\n }\n }\n }\n\n prefillAnalyzeData()\n {\n\n if (this.prefillData.prefillMunicipalityPerfectMatchFound === true)\n {\n this.collapseDropdown = true;\n }\n this.prefillEventEmitter.emit(/*this.prefillData*/ new PrefillEvent(ADDRESSLEVEL.LOCALITY, this.prefillData) );\n }\n\n\n\n parseTopSuggestions(topSuggestions, source: SourceType) {\n if (this.showDebugMessageToConsole) { console.log('locality - parse suggestions', topSuggestions); }\n if (topSuggestions.constructor === Array) {\n // topSuggestions.forEach(this.parseSingleSuggestion.bind(this));\n for (const sug of topSuggestions)\n {\n this.parseSingleSuggestion(sug, source);\n }\n } else {\n this.parseSingleSuggestion(topSuggestions, source);\n }\n }\n\n resetArrowSelectedIndex() {\n this.selectedIndex = -1;\n }\n\n startsWithIgnoreDiacritics(value: string, prefix: string): number {\n // console.log('Searching for prefix \"' + prefix + '\" inside suggestion: ' + value);\n // tslint:disable-next-line:variable-name\n const _value = this.unicodeService.removeDiacritics( (value !== null && value !== undefined) ? value.toLowerCase() : value );\n // tslint:disable-next-line:variable-name\n const _prefix = this.unicodeService.removeDiacritics( (prefix !== null && prefix !== undefined) ? prefix.toLowerCase() : prefix);\n const start = _value.indexOf(_prefix);\n // console.log('startsWithIgnoreDiacritics: ' + start);\n return start;\n }\n\n valueChanged() {\n this.textChangeEvent.emit(this.searchText);\n }\n\n clearInput(focus?, emit: boolean = true) {\n this.clearSuggestions();\n this.bpTypeAhead = '';\n this.setSearchText('');\n this.resetArrowSelectedIndex();\n this.previousIndex = -1;\n this.lastSearchValue = '';\n this.clearSuggestionValidationMessage();\n this.clearSelectedAddress();\n this.valueChanged();\n this.clearConnectionErrorMessage();\n if (focus === true) {\n this.localitySearchInput.nativeElement.focus();\n }\n if (emit) {\n this.clearInputEventEmitter.emit(/*'LOCALITY'*/ InputNameType.LOCALITY);\n }\n }\n\n clearSearchText() {\n this.searchText = '';\n }\n\n clearSelectedAddress() {\n this.addressChanged.emit(null);\n this.addressIsValidated = false;\n }\n\n clearSuggestionValidationMessage() {\n this.addressIsValidated = false;\n this.suggestionValidationMessage = '';\n // this.messageChanged.emit(this.suggestionValidationMessage);\n this.messageChanged.emit({messageType: null, translatedMessage: this.suggestionValidationMessage});\n this.validationMessageOptions = null;\n this.validationMessageCode = null;\n }\n\n clearSuggestions() {\n this.wordList = [];\n this.suggestions = [];\n this.suggestionsWordList = [];\n // console.log('LibAutocompleteLocalityComponent::clearSuggestions', this.wordList);\n // this.suggestionMessages = [];\n }\n\n clickSuggestion(event: any, suggestion: any) {\n this.isPrefillWithNoMatch = false;\n event.preventDefault();\n this.clearTypeAhead();\n this.resetArrowSelectedIndex();\n this.setSearchText(suggestion.string);\n this.collapseDropdown = true;\n // if (suggestion.hasOwnProperty('isComplete')) {\n // this.showAddressIsValidated();\n // }\n this.addressIsValidated = true;\n this.clearSuggestions();\n this.setSelectedAddress(suggestion);\n }\n\n clearWidget() {\n this.clearSearchText();\n this.clearSuggestions();\n this.clearTypeAhead();\n this.prefillData = null;\n this.prefilling = false;\n }\n\n cursorIsOnSuggestionList() {\n return this.selectedIndex >= 0;\n }\n\n onChangedLanguage() {\n // this.placeHolderText = this.translateService.instant('locality.placeholder.input-placeholder');\n this.translateService.get('locality.placeholder.input-placeholder')\n .subscribe((res: string) => {\n // console.log('new placeholder', res);\n // => 'hello world'\n this.placeHolderText = res;\n });\n }\n\n changeSelection() {\n if (this.suggestions.length > 0) {\n this.selectionChanged = true;\n }\n }\n\n moveArrowSelectedIndexDown() {\n if (this.selectedIndex + 1 !== this.suggestions.length) {\n this.selectedIndex++;\n this.changeSelection();\n this.setSearchTextBasedOnArrowSelection(this.selectedIndex, this.selectedIndex - 1);\n }\n }\n\n moveArrowSelectedIndexUp() {\n if (this.selectedIndex - 1 !== -2) {\n this.selectedIndex--;\n this.changeSelection();\n this.setSearchTextBasedOnArrowSelection(this.selectedIndex, this.selectedIndex + 1);\n }\n }\n\n checkKeyDown(event) {\n switch (event.which) {\n // down key, increment selectedIndex\n case 40:\n event.preventDefault();\n this.moveArrowSelectedIndexDown();\n break;\n\n // up key, decrement selectedIndex\n case 38:\n event.preventDefault();\n this.moveArrowSelectedIndexUp();\n break;\n // right arrow key\n case 39:\n event.preventDefault();\n if (this.cursorIsOnSuggestionList()) {\n this.clickSuggestion(event, this.suggestions[this.selectedIndex]);\n } else {\n if (this.typeAheadWord && this.typeAheadIsShown()) {\n this.setSearchText(this.bpTypeAhead);\n this.typeAheadWord = '';\n }\n }\n break;\n // tab key\n case 9:\n if (!this.addressIsValidated) {\n event.preventDefault();\n this.selectFirstInListOfSuggesions();\n }\n break;\n\n case 46:\n if (event.ctrlKey) {\n this.clearWidget();\n }\n break;\n // enter pressed\n case 13:\n event.preventDefault();\n if (this.cursorIsOnSuggestionList()) {\n this.clickSuggestion(event, this.suggestions[this.selectedIndex]);\n } else {\n }\n break;\n\n default:\n this.clearTypeAhead();\n break;\n\n }\n }\n\n setConnectionErrorMessage() {\n this.errorCode = /*'service-unavailable'*/ ValidationMessageType.Service_Unavailable;\n // this.setValidationMessage(this.errorCode);\n this.emitTranslatedValidationMessage(ValidationMessageType.Service_Unavailable);\n }\n\n setSelectedAddress(suggestion: any) {\n this.addressChanged.emit(suggestion);\n }\n\n translateMessage(message): string {\n const messageKey = message.key;\n switch (messageKey) {\n case 'subl': {\n // args length must be 2 !\n if (message.args && message.args.length === 2 ) {\n return this.translateService.instant('locality.suggestion.message.subl', { sub: message.args[0], principal: message.args[1]});\n }\n }\n // tslint:disable-next-line:align\n break;\n }\n return null;\n }\n\n typeAheadIsShown() {\n return this.bpTypeAhead && this.bpTypeAhead.length > 0;\n }\n\n selectFirstInListOfSuggesions() {\n this.selectedIndex = 0;\n this.changeSelection();\n this.setSearchTextBasedOnArrowSelection(this.selectedIndex, this.selectedIndex - 1);\n }\n\n setSearchText(value) {\n this.searchText = value;\n }\n\n setSearchTextBasedOnArrowSelection(newVal, oldVal) {\n if (newVal === undefined || this.suggestions.length <= 0) {\n return;\n }\n if (newVal !== -1) {\n if (oldVal === -1) {\n this.lastSearchValue = this.searchText;\n }\n this.setSearchText(this.suggestions[this.selectedIndex].string);\n this.clearTypeAhead();\n } else {\n this.setSearchText(this.lastSearchValue);\n }\n }\n\n}\n","import { Component, OnInit, ViewChild, ElementRef, Input, Output, EventEmitter, SimpleChanges, AfterViewChecked, OnChanges, OnDestroy } from '@angular/core';\nimport { Subscription } from 'rxjs';\nimport { PrefilledParameters } from '../utils/prefilled-parameters';\nimport { ValidationMessageType } from '../enum/validation-message-type.enum';\nimport { AddressService } from '../services/adress.service';\nimport { LocaleService } from '../services/locale.service';\nimport { TranslateService } from '@ngx-translate/core';\nimport { UnicodeService } from '../services/unicode.service';\nimport { DomHandler } from '../utils/domhandler';\nimport { ADDRESSLEVEL } from '../enum/address-level.enum';\nimport { QueryParameters } from '../model/query-parameters.model';\nimport { PrefillData } from '../utils/prefill-data';\nimport { SourceType } from '../enum/source-type.enum';\nimport { PrefillEvent } from '../utils/preflll.event';\nimport { InputNameType } from '../enum/input-name.enum';\n\n@Component({\n selector: 'bp-street',\n templateUrl: './street.component.html',\n styleUrls: ['./street.component.scss']\n})\nexport class StreetComponent implements OnInit, AfterViewChecked, OnChanges, OnDestroy {\n\n @ViewChild('streetSearchInput', {static: false} ) streetSearchInput: ElementRef;\n @ViewChild('streetList', {static: false} ) streetList: ElementRef;\n\n private subscription: Subscription = null;\n\n // 2020-06-15\n /* @Input()\n onFocusShowSuggestionsAfterPrefill = true; */\n\n @Input() labelResourceKey = 'common.label.streetName';\n @Input() maxSuggesionCount = 5;\n @Input() visibleSuggesionCount = 5;\n @Input() sortCriteria = '';\n @Input() baseUrl: string;\n // @Input() addressParams: PrefilledParameters;\n @Input() prefillData: PrefillData;\n @Input() showDebugMessageToConsole = true;\n\n @Input() postalCode: string;\n @Input() locality: string;\n @Input() inputText: string;\n\n @Input() messageOption = 'Y';\n\n // @ts-ignore\n @Input() set inputLang(val: string) {\n this.localeService.changeLang(val);\n this.translateService.use(val).subscribe(\n (res: any) => {\n this.onChangedLanguage();\n }\n );\n }\n\n @Input()\n isReadonly=false;\n\n @Output() messageChanged: EventEmitter<{messageType: ValidationMessageType, translatedMessage: string}> = new EventEmitter();\n @Output() addressChanged: EventEmitter<any> = new EventEmitter();\n @Output() focusEvent: EventEmitter<any> = new EventEmitter();\n @Output() blurEvent: EventEmitter<any> = new EventEmitter();\n @Output() textChangeEvent: EventEmitter<any> = new EventEmitter();\n\n @Output() clearInputEventEmitter: EventEmitter<string> = new EventEmitter();\n\n @Output() prefillEventEmitter: EventEmitter<PrefillEvent> = new EventEmitter<PrefillEvent>();\n\n searchText: string;\n\n addressIsValidated: boolean;\n suggestionValidationMessage: string;\n suggestions: any;\n previousIndex: number;\n lastSearchValue: string;\n wordList: any;\n suggestionsWordList: any;\n bpTypeAhead: string;\n placeHolderText: string;\n skipNextBlur: boolean; // OnBlur is triggered when the user clicks suggestion/validator button\n errorCode: any;\n\n minLevel: number;\n selectedIndex: number;\n collapseDropdown: boolean;\n typeAheadWord: string;\n sequenceNumber: number;\n consumedNumber: number;\n selectionChanged: boolean;\n validationMessageCode = null;\n validationMessageOptions = null;\n\n prefilling = false;\n isPrefillWithNoMatch = false;\n\n constructor(\n private addressService: AddressService,\n private localeService: LocaleService,\n private translateService: TranslateService,\n private unicodeService: UnicodeService,\n ) { }\n\n ngOnInit(): void {\n this.searchText = '';\n // instance properties\n this.addressIsValidated = false;\n this.suggestionValidationMessage = '';\n this.suggestions = [];\n this.previousIndex = -1;\n this.lastSearchValue = '';\n this.wordList = [];\n this.suggestionsWordList = [];\n this.bpTypeAhead = '';\n this.placeHolderText = '';\n this.skipNextBlur = false; // OnBlur is triggered when the user clicks suggestion/validator button\n this.errorCode = null;\n // scope properties\n this.selectedIndex = -1;\n // properties\n this.typeAheadWord = '';\n this.collapseDropdown = false;\n this.sequenceNumber = 1;\n this.consumedNumber = 1;\n // initialization\n this.setSearchText('');\n // this.setPlaceHolderText();\n this.onChangedLanguage();\n }\n\n ngOnDestroy() {\n if (this.subscription) {\n this.subscription.unsubscribe();\n }\n }\n\n onChangedLanguage() {\n // this.placeHolderText = this.translateService.instant('street.placeholder.input-placeholder');\n this.translateService.get('street.placeholder.input-placeholder')\n .subscribe((res: string) => {\n // console.log('new placeholder', res);\n // => 'hello world'\n this.placeHolderText = res;\n });\n }\n\n ngAfterViewChecked() {\n if (this.selectionChanged) {\n const overlay: HTMLDivElement = this.streetList.nativeElement;\n setTimeout(() => {\n const listItem = DomHandler.findSingle(overlay, 'li.active');\n if (listItem) {\n DomHandler.scrollInView(overlay, listItem);\n }\n }, 1);\n this.selectionChanged = false;\n }\n }\n\n ngOnChanges(changes: SimpleChanges) {\n if (changes) {\n if (changes.hasOwnProperty('prefillData') && !changes.prefillData.firstChange) {\n this.prefilling = true;\n this.searchText = this.loadParams(changes.prefillData.currentValue);\n if (this.searchText !== '' && this.minLevel === ADDRESSLEVEL.STREET) {\n /*\n this.onInputChange('prefilled');\n this.streetSearchInput.nativeElement.focus();\n */\n /*\n this.prefilling = true;\n this.collapseDropdown = true;\n this.prefillMunicipalityName = this.transformMunicipalityInLowercaseAndWithoutDiacritics(this.addressParams.municipalityName);\n this.onInputChange(/*'prefilled'* / // this.SOURCE_PREFILLED );\n */\n this.collapseDropdown = true;\n this.prefillData.prefillStreetName\n = this.transformStreetNameInLowercaseAndWithoutDiacritics(this.prefillData.parameters.streetName);\n this.onInputChange(/*'prefilled'*/ SourceType.SOURCE_PREFILLED );\n }\n }\n\n if (changes.hasOwnProperty('inputText') && !changes.inputText.firstChange) {\n if (this.notEqualIgnoreCase(this.searchText, changes.inputText.currentValue)) {\n this.clearWidget();\n this.searchText = changes.inputText.currentValue;\n }\n }\n\n // Reset Street search bar on locality change/reset\n if (changes.hasOwnProperty('postalCode') && !changes.postalCode.firstChange && !changes.hasOwnProperty('prefillData')) {\n this.minLevel = ADDRESSLEVEL.STREET;\n if (changes.postalCode.currentValue === '') {\n this.clearWidget();\n this.valueChanged();\n }\n }\n }\n }\n\n transformStreetNameInLowercaseAndWithoutDiacritics(streetName: string): string {\n let result: string = null;\n if (streetName !== null && streetName !== undefined )\n {\n result = this.unicodeService.removeDiacritics(streetName);\n result = result.toLowerCase();\n }\n if (this.showDebugMessageToConsole) { console.log('prefill streetName', result); }\n return result;\n }\n\n onClearInputEvent(event, focus) {\n this.clearInput(focus);\n }\n\n onBlur(ev: any) {\n if (this.isBrowserIE() && this.isDropdownClicked(ev)) {\n this.streetSearchInput.nativeElement.focus();\n return;\n }\n if (this.skipNextBlur) {\n this.skipNextBlur = false;\n } else {\n this.collapseDropdown = true;\n this.blurEvent.emit(ADDRESSLEVEL.STREET);\n }\n }\n\n isBrowserIE(): boolean {\n return /msie\\s|trident\\/|edge\\//i.test(window.navigator.userAgent);\n }\n\n isDropdownClicked(ev) {\n const target = ev.explicitOriginalTarget || document.activeElement;\n return (target.id === 'bpaac-street-dropdown');\n }\n\n onFocus() {\n this.collapseDropdown = false;\n // this.collapseDropdown = (this.prefilling === true && this.prefillData !== null)\n // ? !this.prefillData.parameters.onFocusShowSuggestionsAfterPrefill : false;\n\n if (this.showDebugMessageToConsole) { console.log('street comp - onFocus', this.prefilling, this.prefillData, this.collapseDropdown); }\n\n // this.prefilling = false;\n this.skipNextBlur = false;\n this.focusEvent.emit(ADDRESSLEVEL.STREET);\n }\n\n mayShowDropdown() {\n return this.suggestions.length > 0 && !this.collapseDropdown;\n }\n\n buildInputWordList() {\n this.wordList = this.searchText.split(/[\\s, ]+/);\n // console.log('word list - street:', this.wordList);\n if (this.suggestions && this.wordList) {\n for (const sug of this.suggestions) {\n if (!sug || !sug.hasOwnProperty('string')) {\n continue;\n }\n for (const w of this.wordList) {\n const start = this.startsWithIgnoreDiacritics(sug.string as string, w as string);\n if (start >= 0) {\n const ww = sug.string.substr(start, w.length);\n // console.log('adding word:' + ww);\n // ww is a candidate to be added to the wordlist if not already present in it\n const present = this.wordList.find( (w1: string) => w1.toLowerCase() === ww.toLowerCase() );\n if (present === null || present === undefined) {\n this.wordList.push(ww);\n }\n }\n }\n }\n }\n }\n\n startsWithIgnoreDiacritics(value: string, prefix: string): number {\n // console.log('Searching for prefix \"' + prefix + '\" inside suggestion: ' + value);\n // tslint:disable-next-line:variable-name\n const _value = this.unicodeService.removeDiacritics( (value !== null && value !== undefined) ? value.toLowerCase() : value );\n // tslint:disable-next-line:variable-name\n const _prefix = this.unicodeService.removeDiacritics( (prefix !== null && prefix !== undefined) ? prefix.toLowerCase() : prefix);\n const start = _value.indexOf(_prefix);\n // console.log('startsWithIgnoreDiacritics: ' + start);\n return start;\n }\n\n mayAddTypeAhead() {\n if (this.searchText.length === 0) {\n return false;\n }\n return (/[^\\s, \\\\\\/]$/).test(this.searchText);\n }\n\n valueChanged() {\n this.textChangeEvent.emit(this.searchText);\n }\n\n buildTypeAhead(source: SourceType) {\n if (source === SourceType.SOURCE_PREFILLED) { return false; }\n if (!this.mayAddTypeAhead()) {\n return;\n }\n const searchTextWords = this.searchText.split(/[\\s, ]+/);\n const lastWord = searchTextWords[searchTextWords.length - 1];\n\n if (this.suggestions.some(function(sug) {\n if (!sug || !sug.hasOwnProperty('string')) {\n return false;\n }\n return sug.string.split(/[\\s-]+/).some(function(word) {\n if (this.stringStartsWithIgnoreDiacritics(word, lastWord)) {\n this.typeAheadWord = word;\n return true;\n }\n }.bind(this));\n }.bind(this))) {\n const appendix = this.typeAheadWord.slice(lastWord.length, this.typeAheadWord.length).toLowerCase();\n this.bpTypeAhead = this.searchText + appendix;\n }\n }\n\n stringStartsWithIgnoreDiacritics(value, prefix) {\n // tslint:disable-next-line:variable-name\n const _value = this.unicodeService.removeDiacritics( (value !== null && value !== undefined) ? value.toLowerCase() : value );\n // tslint:disable-next-line:variable-name\n const _prefix = this.unicodeService.removeDiacritics( (prefix !== null && prefix !== undefined) ? prefix.toLowerCase() : prefix);\n const start = _value.slice(0, _prefix.length).toLowerCase().indexOf(_prefix) !== -1;\n return start;\n }\n\n getTopSuggestions(source?: SourceType) {\n this.sequenceNumber += 1;\n const param = this.generateParameters();\n if (this.showDebugMessageToConsole) { console.log('STREET calling service params', param); }\n if (this.searchText) {\n this.subscription = this.addressService.getStreet(this.baseUrl, this.locality, this.postalCode, param)\n .subscribe(\n response => {\n this.handleGetStreetResponse(response, source);\n if (source === SourceType.SOURCE_PREFILLED)\n {\n this.isPrefillWithNoMatch = this.prefillData.prefillStreetPerfectMatchFound === true ? false : true;\n this.prefillAnalyzeData();\n }\n else\n {\n this.isPrefillWithNoMatch = false;\n }\n }\n ,\n () => this.handleGetStreetError()\n );\n }\n }\n\n getTextColor(): string {\n return ( this.isPrefillWithNoMatch === true ) ? 'orangered' : '';\n }\n\n loadParams(prefillData: PrefillData) {\n let concatStr = '';\n if (prefillData !== null && prefillData.parameters !== null)\n {\n if (prefillData.parameters.hasOwnProperty('minLevel')) {\n this.minLevel = prefillData.parameters.minLevel;\n }\n /*\n if (params.hasOwnProperty('unstructuredAddress') && this.isString(params.unstructuredAddress)) {\n this.valueChanged();\n }\n */\n if (prefillData.parameters.hasOwnProperty('postalCode') && this.isString(prefillData.parameters.postalCode)) {\n this.postalCode = prefillData.parameters.postalCode;\n }\n if (prefillData.parameters.hasOwnProperty('municipalityName') && this.isString(prefillData.parameters.municipalityName)) {\n this.locality = prefillData.parameters.municipalityName;\n }\n if (prefillData.parameters.hasOwnProperty('streetName')\n && this.isString(prefillData.parameters.streetName) && this.isParamsComplete()) {\n concatStr = prefillData.parameters.streetName;\n }\n }\n return concatStr;\n }\n\n isString(val): boolean {\n if (val === null || val === undefined) {\n return false;\n }\n return val.constructor === String;\n }\n\n isValid(val) {\n return this.isString(val) && val !== '';\n }\n\n isParamsComplete(): boolean {\n return this.isValid(this.postalCode) && this.isValid(this.locality);\n }\n\n generateParameters(): QueryParameters {\n const param = new QueryParameters({\n id: this.sequenceNumber,\n q: this.searchText,\n postalCode: this.postalCode,\n locality: this.locality,\n maxNumberOfSuggestions: this.maxSuggesionCount\n });\n\n if (this.sortCriteria === 'S') {\n param.sortByStreet(true);\n }\n return param;\n }\n\n handleGetStreetResponse(data: any, source?: SourceType) {\n if (data && data.response && data.response.sequenceNumber && data.response.sequenceNumber >= this.consumedNumber &&\n data.response.topSuggestions) {\n this.consumedNumber = data.response.sequenceNumber;\n this.clearSuggestions();\n this.parseTopSuggestions(data.response.topSuggestions, source);\n this.buildTypeAhead(source);\n this.clearConnectionErrorMessage();\n this.buildInputWordList();\n }\n this.collapseDropdown = (this.prefilling === true && this.prefillData !== null)\n ? !this.prefillData.parameters.onFocusShowSuggestionsAfterPrefill : false;\n }\n\n handleGetStreetError() {\n this.setConnectionErrorMessage();\n }\n\n setConnectionErrorMessage() {\n this.errorCode = /*'service-unavailable'*/ ValidationMessageType.Service_Unavailable;\n // this.setValidationMessage(this.errorCode);\n this.emitTranslatedValidationMessage(ValidationMessageType.Service_Unavailable);\n }\n\n clearConnectionErrorMessage() {\n if (this.errorCode) {\n const res = this.translateService.instant(this.errorCode);\n if (this.suggestionValidationMessage === res ) {\n this.clearSuggestionValidationMessage();\n }\n this.errorCode = null;\n }\n }\n\n parseTopSuggestions(topSuggestions, source: SourceType) {\n if (topSuggestions.constructor === Array) {\n // topSuggestions.forEach(this.parseSingleSuggestion.bind(this));\n for (const sug of topSuggestions)\n {\n this.parseSingleSuggestion(sug, source);\n }\n } else {\n this.parseSingleSuggestion(topSuggestions, source);\n }\n }\n\n parseSingleSuggestion(suggestion: any, source: SourceType) {\n let suggestionToAdd: any;\n if (this.localeService.isLocaleFrench() && suggestion.hasOwnProperty('french')) {\n suggestionToAdd = suggestion.french;\n } else if (this.localeService.isLocaleDutch() && suggestion.hasOwnProperty('dutch')) {\n suggestionToAdd = suggestion.dutch;\n } else if (this.localeService.isLocaleGerman() && suggestion.hasOwnProperty('german')) {\n suggestionToAdd = suggestion.german;\n } else if (suggestion.hasOwnProperty('address')) {\n suggestionToAdd = suggestion.address;\n }\n if (suggestionToAdd) {\n if (suggestion.messages) {\n suggestionToAdd.messages = suggestion.messages;\n }\n this.suggestions.push(suggestionToAdd);\n if (source === SourceType.SOURCE_PREFILLED)\n {\n suggestion.address = suggestionToAdd;\n this.prefillCheckForPerfectMatch(suggestion);\n }\n }\n }\n\n prefillCheckForPerfectMatch(suggestion)\n {\n if (this.showDebugMessageToConsole) {console.log('street - checking suggestion for perfect match', this.prefillData, suggestion); }\n const sugAddress = suggestion.address;\n // if (sugAddress.streetName === this.prefillData.parameters.streetName )\n const suggestionLocality = this.transformStreetNameInLowercaseAndWithoutDiacritics(sugAddress.localityName);\n const suggestionMunicipality = this.transformStreetNameInLowercaseAndWithoutDiacritics(sugAddress.municipalityName);\n if (suggestionLocality === this.prefillData.prefillMunicipalityName\n || suggestionMunicipality === this.prefillData.prefillMunicipalityName)\n {\n const suggestionStreetName = this.transformStreetNameInLowercaseAndWithoutDiacritics(sugAddress.streetName);\n // console.log('comparing street names', suggestionStreetName, this.prefillData.prefillStreetName);\n if (suggestionStreetName === this.prefillData.prefillStreetName)\n {\n this.prefillData.prefillStreetPerfectMatchFound = true;\n this.prefillData.prefillStreetPerfectMatchSuggestion = suggestion;\n this.searchText = sugAddress.streetName;\n }\n }\n }\n\n onInputChange(source?: SourceType) {\n // console.log('street onInputChange : source ', source);\n this.collapseDropdown = false;\n this.resetArrowSelectedIndex();\n if (!source) {\n this.prefilling = false;\n this.valueChanged();\n }\n this.clearSuggestionValidationMessage();\n if (this.searchText === '') {\n this.sequenceNumber += 1;\n this.consumedNumber = this.sequenceNumber;\n this.clearSuggestions();\n } else {\n this.getTopSuggestions(source);\n }\n this.buildInputWordList();\n }\n\n prefillAnalyzeData()\n {\n if (this.prefillData.prefillStreetPerfectMatchFound === true)\n {\n this.collapseDropdown = true;\n }\n this.prefillEventEmitter.emit(new PrefillEvent(ADDRESSLEVEL.STREET, this.prefillData) );\n }\n\n\n clickSuggestion(event: any, suggestion: any) {\n this.isPrefillWithNoMatch = false;\n if (this.showDebugMessageToConsole) { console.log('streetNumber::clickSuggestion', event, suggestion); }\n event?.preventDefault();\n this.clearTypeAhead();\n this.resetArrowSelectedIndex();\n this.setSearchText(suggestion.string);\n this.collapseDropdown = true;\n // if (suggestion.hasOwnProperty('isComplete')) {\n // this.showAddressIsValidated();\n // }\n this.addressIsValidated = true;\n if (event) {\n this.clearSuggestions();\n }\n this.setSelectedAddress(suggestion);\n }\n\n setSelectedAddress(suggestion: any) {\n this.addressChanged.emit(suggestion);\n }\n\n clearSelectedAddress() {\n this.addressChanged.emit(null);\n this.addressIsValidated = false;\n }\n\n emitTranslatedValidationMessage(validationMessageType: ValidationMessageType, options?: string[]) {\n // Momently, options are NOT used; so data type of these options will be reviewed once needed.\n if (validationMessageType === null || validationMessageType === undefined ) {\n console.warn('Unable to emit validation message - message key is invalid!', validationMessageType);\n return;\n }\n\n switch (validationMessageType) {\n\n case ValidationMessageType.Address_Not_Found:\n case ValidationMessageType.Address_Validated:\n case ValidationMessageType.Service_Unavailable: {\n const message = this.translateService.instant(validationMessageType);\n // this.messageChanged.emit(message);\n this.messageChanged.emit({messageType: validationMessageType, translatedMessage: message});\n }\n // tslint:disable-next-line:align\n break;\n\n default: {\n console.error('Unable to emit validation message - message key NOT supported!', validationMessageType);\n }\n // tslint:disable-next-line:align\n break;\n }\n\n }\n\n showAddressIsValidated() {\n // this.setValidationMessage('address-validated');\n this.emitTranslatedValidationMessage(ValidationMessageType.Address_Validated);\n }\n\n checkKeyDown(event) {\n switch (event.which) {\n // down key, increment selectedIndex\n case 40:\n event.preventDefault();\n this.moveArrowSelectedIndexDown();\n break;\n\n // up key, decrement selectedIndex\n case 38:\n event.preventDefault();\n this.moveArrowSelectedIndexUp();\n break;\n // right arrow key\n case 39:\n event.preventDefault();\n if (this.cursorIsOnSuggestionList()) {\n this.clickSuggestion(event, this.suggestions[this.selectedIndex]);\n } else {\n if (this.typeAheadWord && this.typeAheadIsShown()) {\n this.setSearchText(this.bpTypeAhead);\n this.typeAheadWord = '';\n }\n }\n break;\n // tab key\n case 9:\n if (!this.addressIsValidated && !event.shiftKey) {\n event.preventDefault();\n this.selectFirstInListOfSuggesions();\n }\n break;\n\n case 46:\n if (event.ctrlKey) {\n this.clearWidget();\n }\n break;\n // enter pressed\n case 13:\n event.preventDefault();\n if (this.cursorIsOnSuggestionList()) {\n this.clickSuggestion(event, this.suggestions[this.selectedIndex]);\n } else {\n }\n break;\n\n default:\n this.clearTypeAhead();\n break;\n\n }\n }\n\n clearWidget() {\n this.addressIsValidated = false;\n this.clearSearchText();\n this.clearSuggestions();\n this.clearTypeAhead();\n this.prefillData = null;\n this.prefilling = false;\n }\n\n clearSearchText() {\n this.searchText = '';\n }\n\n typeAheadIsShown() {\n return this.bpTypeAhead && this.bpTypeAhead.length > 0;\n }\n\n resetArrowSelectedIndex() {\n this.selectedIndex = -1;\n }\n\n moveArrowSelectedIndexDown() {\n if (this.selectedIndex + 1 !== this.suggestions.length) {\n this.selectedIndex++;\n this.changeSelection();\n this.setSearchTextBasedOnArrowSelection(this.selectedIndex, this.selectedIndex - 1);\n }\n }\n\n moveArrowSelectedIndexUp() {\n if (this.selectedIndex - 1 !== -2) {\n this.selectedIndex--;\n this.changeSelection();\n this.setSearchTextBasedOnArrowSelection(this.selectedIndex, this.selectedIndex + 1);\n }\n }\n\n cursorIsOnSuggestionList() {\n return this.selectedIndex >= 0;\n }\n\n setSearchTextBasedOnArrowSelection(newVal, oldVal) {\n if (newVal === undefined || this.suggestions.length <= 0) {\n return;\n }\n if (newVal !== -1) {\n if (oldVal === -1) {\n this.lastSearchValue = this.searchText;\n }\n this.setSearchText(this.suggestions[this.selectedIndex].string);\n this.clearTypeAhead();\n } else {\n this.setSearchText(this.lastSearchValue);\n }\n }\n\n mayShowClearButton() {\n return this.searchText.length > 0;\n }\n\n clearInput(focus?, emit: boolean = true) {\n // console.warn('street clearInput called ...', focus, emit);\n this.clearWidget();\n this.resetArrowSelectedIndex();\n this.previousIndex = -1;\n this.lastSearchValue = '';\n this.clearSuggestionValidationMessage();\n this.valueChanged();\n this.clearConnectionErrorMessage();\n if (focus === true) {\n // console.warn('street clearInput - set focus !!!', focus);\n this.streetSearchInput.nativeElement.focus();\n }\n if (emit) {\n this.clearInputEventEmitter.emit(/*'STREET'*/ InputNameType.STREET);\n }\n }\n\n clearSuggestions() {\n this.wordList = [];\n this.suggestions = [];\n this.suggestionsWordList = [];\n }\n\n clearTypeAhead() {\n this.bpTypeAhead = '';\n }\n\n clearSuggestionValidationMessage() {\n this.suggestionValidationMessage = '';\n this.addressIsValidated = false;\n // this.messageChanged.emit(this.suggestionValidationMessage);\n this.messageChanged.emit({messageType: null, translatedMessage: this.suggestionValidationMessage});\n this.validationMessageOptions = null;\n this.validationMessageCode = null;\n }\n\n setSearchText(value) {\n this.searchText = value;\n }\n\n selectFirstInListOfSuggesions() {\n this.selectedIndex = 0;\n this.changeSelection();\n this.setSearchTextBasedOnArrowSelection(this.selectedIndex, this.selectedIndex - 1);\n }\n\n changeSelection() {\n if (this.suggestions.length > 0) {\n this.selectionChanged = true;\n }\n }\n\n suggestionMouseLeave() {\n this.selectedIndex = -1;\n }\n\n notEqualIgnoreCase(oldVal: string, newVal: string) {\n return oldVal.toLowerCase() !== newVal.toLowerCase();\n }\n\n showAddressNotFoundMessage() {\n // this.setValidationMessage('address-not-found');\n this.emitTranslatedValidationMessage(ValidationMessageType.Address_Not_Found);\n }\n\n isDisabled() {\n return (this.locality === '' || this.postalCode === '' || this.minLevel > ADDRESSLEVEL.STREET);\n }\n\n onInputClick() {\n if (this.showDebugMessageToConsole) { console.log('street click'); }\n this.prefilling = false;\n this.collapseDropdown = false;\n }\n\n}\n","import { Component, OnInit, AfterViewChecked, OnChanges, OnDestroy, ElementRef, ViewChild, Input, Output, EventEmitter, SimpleChanges } from '@angular/core';\nimport { Subscription } from 'rxjs';\nimport { PrefilledParameters } from '../utils/prefilled-parameters';\nimport { ValidationMessageType } from '../enum/validation-message-type.enum';\nimport { AddressService } from '../services/adress.service';\nimport { LocaleService } from '../services/locale.service';\nimport { UnicodeService } from '../services/unicode.service';\nimport { TranslateService } from '@ngx-translate/core';\nimport { DomHandler } from '../utils/domhandler';\nimport { ADDRESSLEVEL } from '../enum/address-level.enum';\nimport { QueryParameters } from '../model/query-parameters.model';\nimport { PrefillData } from '../utils/prefill-data';\nimport { SourceType } from '../enum/source-type.enum';\nimport { PrefillEvent } from '../utils/preflll.event';\nimport { InputNameType } from '../enum/input-name.enum';\n\n@Component({\n selector: 'bp-street-number',\n templateUrl: './street-number.component.html',\n styleUrls: ['./street-number.component.scss']\n})\nexport class StreetNumberComponent implements OnInit, AfterViewChecked, OnChanges, OnDestroy {\n\n\n @ViewChild('streetNumberSearchInput', {static: false} ) streetNumberSearchInput: ElementRef;\n @ViewChild('streetNumberList', {static: false} ) streetNumberList: ElementRef;\n\n private subscription: Subscription;\n\n // 2020-06-15\n /* @Input()\n onFocusShowSuggestionsAfterPrefill = true; */\n @Input() prefillData: PrefillData;\n @Input() showDebugMessageToConsole = true;\n\n @Input() labelResourceKey = 'common.label.streetNumber';\n @Input() maxSuggesionCount = 5;\n @Input() visibleSuggesionCount = 5;\n @Input() sortCriteria = '';\n @Input() baseUrl: string;\n @Input() addressParams: PrefilledParameters;\n @Input() postalCode: string;\n @Input() locality: string;\n @Input() streetName: string;\n @Input() notInListAllowed: boolean;\n @Input() selectedAddress;\n\n // @ts-ignore\n @Input() set inputLang(val: string) {\n this.localeService.changeLang(val);\n this.translateService.use(val).subscribe(\n (res: any) => {\n this.onChangedLanguage();\n }\n );\n }\n @Input() messageOption = 'Y';\n @Input() inputText: string;\n\n @Input()\n isReadonly=false;\n\n @Output() messageChanged: EventEmitter<{messageType: ValidationMessageType, translatedMessage: string}> = new EventEmitter();\n @Output() addressChanged: EventEmitter<any> = new EventEmitter();\n @Output() focusEvent: EventEmitter<any> = new EventEmitter();\n @Output() blurEvent: EventEmitter<any> = new EventEmitter();\n @Output() textChangeEvent: EventEmitter<any> = new EventEmitter();\n @Output() emptyResponseEvent: EventEmitter<any> = new EventEmitter();\n\n\n @Output() clearInputEventEmitter: EventEmitter<string> = new EventEmitter();\n\n @Output() prefillEventEmitter: EventEmitter<PrefillEvent> = new EventEmitter<PrefillEvent>();\n\n searchText: string;\n\n addressIsValidated = false;\n addressIsComplete = false;\n suggestionValidationMessage: string;\n suggestions: any;\n previousIndex: number;\n lastSearchValue: string;\n wordList: any;\n suggestionsWordList: any;\n bpTypeAhead: string;\n placeHolderText: string;\n skipNextBlur: boolean; // OnBlur is triggered when the user clicks suggestion/validator button\n errorCode: any;\n\n minLevel: number;\n selectedIndex: number;\n collapseDropdown: boolean;\n typeAheadWord: string;\n sequenceNumber: number;\n consumedNumber: number;\n selectionChanged: boolean;\n validationMessageCode = null;\n validationMessageOptions = null;\n emptyResponseText: string;\n emptyResponse: boolean;\n\n prefilling = false;\n isPrefillWithNoMatch = false;\n\n constructor(\n private addressService: AddressService,\n private localeService: LocaleService,\n private translateService: TranslateService,\n private unicodeService: UnicodeService,\n ) { }\n\n ngOnInit() {\n this.searchText = '';\n // instance properties\n this.addressIsValidated = false;\n this.addressIsComplete = false;\n this.suggestionValidationMessage = '';\n this.suggestions = [];\n this.previousIndex = -1;\n this.lastSearchValue = '';\n this.wordList = [];\n this.suggestionsWordList = [];\n this.bpTypeAhead = '';\n this.placeHolderText = '';\n this.skipNextBlur = false; // OnBlur is triggered when the user clicks suggestion/validator button\n this.errorCode = null;\n // scope properties\n this.selectedIndex = -1;\n // properties\n this.typeAheadWord = '';\n this.collapseDropdown = true;\n this.sequenceNumber = 1;\n this.consumedNumber = 1;\n // initialization\n this.setSearchText('');\n // this.setPlaceHolderText();\n this.setEmptyResponseText();\n this.emptyResponse = true;\n this.onChangedLanguage();\n }\n\n ngOnDestroy() {\n if (this.subscription) {\n this.subscription.unsubscribe();\n }\n }\n\n\n onChangedLanguage() {\n // this.placeHolderText = this.translateService.instant('streetNumber.placeholder.input-placeholder');\n this.translateService.get('streetNumber.placeholder.input-placeholder')\n .subscribe((res: string) => {\n // console.log('new placeholder', res);\n // => 'hello world'\n this.placeHolderText = res;\n this.setEmptyResponseText();\n });\n }\n\n ngAfterViewChecked() {\n if (this.selectionChanged) {\n const overlay: HTMLDivElement = this.streetNumberList.nativeElement;\n setTimeout(() => {\n const listItem = DomHandler.findSingle(overlay, 'li.active');\n if (listItem) {\n DomHandler.scrollInView(overlay, listItem);\n }\n }, 1);\n this.selectionChanged = false;\n }\n }\n\n ngOnChanges(changes: SimpleChanges) {\n if (changes) {\n\n if (changes.hasOwnProperty('streetName')\n && !changes.streetName.firstChange\n && !changes.hasOwnProperty('prefillData') && ! this.prefilling ) {\n this.minLevel = ADDRESSLEVEL.STREET_NUMBER;\n // this.addressIsComplete = false;\n if (this.showDebugMessageToConsole) {\n console.warn('street number - ngOnchanges - streetName changes detection');\n }\n if (changes.streetName.currentValue === '') {\n this.clearWidget();\n this.valueChanged();\n }\n }\n\n if (changes.hasOwnProperty('inputText') && !changes.inputText.firstChange && ! this.prefilling ) {\n if (this.showDebugMessageToConsole) {\n console.warn('street number - ngOnchanges - inputText changes detection', this.searchText, changes.inputText.currentValue);\n }\n if (this.notEqualIgnoreCase(this.searchText, changes.inputText.currentValue)) {\n if (this.showDebugMessageToConsole) {\n console.warn('street number - ngOnchanges - inputText changes detection -> calling clearWidget() !');\n }\n this.clearWidget();\n this.searchText = changes.inputText.currentValue;\n }\n }\n\n if (changes.hasOwnProperty('prefillData') && !changes.prefillData.firstChange) {\n this.prefilling = true;\n this.addressIsComplete = false;\n // console.log('streetNumber::ngOnChanges', this.addressIsComplete);\n this.searchText = this.loadParams(changes.prefillData.currentValue);\n if (this.searchText !== '' && this.minLevel === ADDRESSLEVEL.STREET_NUMBER) {\n /*\n this.onInputChange(/*'prefilled'* / SourceType.SOURCE_PREFILLED);\n this.streetNumberSearchInput.nativeElement.focus();\n */\n\n this.collapseDropdown = true;\n this.prefillData.prefillStreetNumber\n = this.transformStreetNumberInLowercaseAndWithoutDiacritics(this.prefillData.parameters.streetNumber);\n this.onInputChange(/*'prefilled'*/ SourceType.SOURCE_PREFILLED );\n }\n // console.log('streetNumber::ngOnChanges -- after calculations', this.addressIsComplete);\n }\n\n }\n }\n\n transformStreetNumberInLowercaseAndWithoutDiacritics(streetNumber: string): string {\n let result: string = null;\n if (streetNumber !== null && streetNumber !== undefined )\n {\n result = this.unicodeService.removeDiacritics(streetNumber);\n result = result.toLowerCase();\n }\n // console.log('Transformed street number:', result);\n return result;\n }\n\n notEqualIgnoreCase(oldVal: string, newVal: string) {\n return oldVal.toLowerCase() !== newVal.toLowerCase();\n }\n\n setEmptyResponseText() {\n this.emptyResponseText = this.translateService.instant('streetNumber.message.not-in-list');\n }\n\n /*\n onClearInputEvent(event, focus) {\n this.clearInput(focus);\n }\n */\n\n /*\n retranslate() {\n this.setPlaceHolderText();\n this.setEmptyResponseText();\n if (this.errorCode) {\n this.setValidationMessage(this.errorCode);\n } else {\n if (this.validationMessageCode) {\n this.setValidationMessage(this.validationMessageCode, this.validationMessageOptions, true);\n }\n }\n }\n */\n\n onBlur(ev) {\n if (this.isBrowserIE() && this.isDropdownClicked(ev)) {\n this.streetNumberSearchInput.nativeElement.focus();\n return;\n }\n if (this.skipNextBlur) {\n this.skipNextBlur = false;\n } else {\n this.collapseDropdown = true;\n this.blurEvent.emit(ADDRESSLEVEL.STREET_NUMBER);\n }\n }\n\n isBrowserIE(): boolean {\n return /msie\\s|trident\\/|edge\\//i.test(window.navigator.userAgent);\n }\n\n isDropdownClicked(ev) {\n const target = ev.explicitOriginalTarget || document.activeElement;\n return (target.id === 'bpaac-streetnumber-dropdown');\n }\n\n onFocus() {\n this.collapseDropdown = false;\n // this.collapseDropdown = (this.prefilling === true && this.prefillData !== null)\n // ? !this.prefillData.parameters.onFocusShowSuggestionsAfterPrefill : false;\n // this.prefilling = false;\n this.skipNextBlur = false;\n this.focusEvent.emit(ADDRESSLEVEL.STREET_NUMBER);\n }\n\n valueChanged() {\n // console.warn('street-number::valueChanged DISABLED');\n this.textChangeEvent.emit(this.searchText);\n }\n\n mayShowDropdown() {\n return this.suggestions.length > 0 && !this.collapseDropdown;\n }\n\n buildInputWordList() {\n this.wordList = this.searchText.split(/[\\s, ]+/);\n }\n\n mayAddTypeAhead() {\n if (this.searchText.length === 0) {\n return false;\n }\n return (/[^\\s, \\\\\\/]$/).test(this.searchText);\n }\n\n buildTypeAhead(source: SourceType) {\n if (source === SourceType.SOURCE_PREFILLED) { return false; }\n if (!this.mayAddTypeAhead()) {\n return;\n }\n const searchTextWords = this.searchText.split(/[\\s, ]+/);\n const lastWord = searchTextWords[searchTextWords.length - 1];\n\n if (this.suggestions.some(function(sug) {\n if (!sug || !sug.hasOwnProperty('string')) {\n return false;\n }\n return sug.string.split(/[\\s-]+/).some(function(word) {\n if (this.stringStartsWithIgnoreDiacritics(word, lastWord)) {\n this.typeAheadWord = word;\n return true;\n }\n }.bind(this));\n }.bind(this))) {\n const appendix = this.typeAheadWord.slice(lastWord.length, this.typeAheadWord.length).toLowerCase();\n this.bpTypeAhead = this.searchText + appendix;\n }\n }\n\n stringStartsWithIgnoreDiacritics(value, prefix) {\n value = (value !== null && value !== undefined) ? value.toLowerCase() : value;\n prefix = (prefix !== null && prefix !== undefined) ? prefix.toLowerCase() : prefix;\n return this.unicodeService.removeDiacritics(value).slice(0, prefix.length)\n .toLowerCase().indexOf(this.unicodeService.removeDiacritics(prefix)) !== -1;\n }\n\n getBackgroundColor(): string {\n return !this.isParamsComplete() ? 'lightgrey' : '';\n }\n\n getTopSuggestions(source?: SourceType) {\n this.sequenceNumber += 1;\n const param = this.generateParameters();\n if (this.showDebugMessageToConsole) { console.log('STREET-NUMBER calling service params', param); }\n if (this.searchText) {\n this.subscription = this.addressService.getStreet(this.baseUrl, this.locality, this.postalCode, param)\n .subscribe(\n response => {\n if (this.showDebugMessageToConsole) { console.log('STREET-NUMBER service response', response); }\n this.handleGetStreetResponse(response, source);\n // console.log('street number service response', response, source);\n if (source === SourceType.SOURCE_PREFILLED)\n {\n /*\n if (this.prefillData.prefillStreetNumberPerfectMatchFound !== true )\n {\n this.searchText = this.prefillData.prefillStreetNumber;\n }\n */\n // this.addressIsComplete = this.prefillData.prefillStreetNumberPerfectMatchFound === true ? true : false;\n this.isPrefillWithNoMatch = this.prefillData.prefillStreetNumberPerfectMatchFound === true ? false : true;\n this.prefillAnalyzeData();\n }\n else\n {\n this.isPrefillWithNoMatch = false;\n }\n }\n ,\n () => this.handleGetStreetError()\n );\n }\n }\n\n getTextColor(): string {\n return ( this.isPrefillWithNoMatch === true ) ? 'orangered' : '';\n }\n\n prefillAnalyzeData()\n {\n if (this.prefillData.prefillStreetNumberPerfectMatchFound === true)\n {\n this.collapseDropdown = true;\n }\n this.prefillEventEmitter.emit(new PrefillEvent(ADDRESSLEVEL.STREET_NUMBER, this.prefillData) );\n }\n\n loadParams(prefillData: PrefillData) {\n let concatStr = '';\n if (prefillData !== null && prefillData.parameters !== null)\n {\n if (prefillData.parameters.hasOwnProperty('minLevel')) {\n this.minLevel = prefillData.parameters.minLevel;\n }\n if (prefillData.parameters.hasOwnProperty('postalCode') && this.isString(prefillData.parameters.postalCode)) {\n this.postalCode = prefillData.parameters.postalCode;\n }\n if (prefillData.parameters.hasOwnProperty('municipalityName') && this.isString(prefillData.parameters.municipalityName)) {\n this.locality = prefillData.parameters.municipalityName;\n }\n if (prefillData.parameters.hasOwnProperty('streetName') && this.isString(prefillData.parameters.streetName)) {\n this.streetName = prefillData.parameters.streetName;\n }\n if (prefillData.parameters.hasOwnProperty('streetNumber')\n && this.isString(prefillData.parameters.streetNumber) && this.isParamsComplete()) {\n concatStr = prefillData.parameters.streetNumber;\n }\n }\n return concatStr;\n }\n\n isString(val): boolean {\n if (val === null || val === undefined) {\n return false;\n }\n return val.constructor === String;\n }\n\n isValid(val) {\n return this.isString(val) && val !== '';\n }\n\n isParamsComplete(): boolean {\n/* if (this.showDebugMessageToConsole) {\n console.log('street-number::isParamsComplete', this.postalCode, this.locality, this.streetName);\n } */\n return this.isValid(this.postalCode) && this.isValid(this.locality) && this.isValid(this.streetName);\n }\n\n generateParameters(): QueryParameters {\n const param = new QueryParameters({\n id: this.sequenceNumber,\n q: this.searchText,\n postalCode: this.postalCode,\n locality: this.locality,\n street: this.streetName,\n maxNumberOfSuggestions: this.maxSuggesionCount\n });\n\n if (this.sortCriteria === 'S') {\n param.sortByStreetNb(true);\n }\n return param;\n }\n\n handleGetStreetResponse(data: any, source?: SourceType) {\n if (data && data.response && data.response.sequenceNumber && data.response.sequenceNumber >= this.consumedNumber &&\n data.response.topSuggestions) {\n this.consumedNumber = data.response.sequenceNumber;\n this.clearSuggestions();\n this.parseTopSuggestions(data.response.topSuggestions, source);\n this.buildTypeAhead(source);\n this.clearConnectionErrorMessage();\n this.buildInputWordList();\n }\n this.collapseDropdown = (this.prefilling === true && this.prefillData !== null)\n ? !this.prefillData.parameters.onFocusShowSuggestionsAfterPrefill : false;\n }\n\n handleGetStreetError() {\n this.setConnectionErrorMessage();\n }\n\n setConnectionErrorMessage() {\n this.errorCode = 'service-unavailable';\n // this.setValidationMessage(this.errorCode);\n this.emitTranslatedValidationMessage(ValidationMessageType.Service_Unavailable);\n }\n\n clearConnectionErrorMessage() {\n if (this.errorCode) {\n const res = this.translateService.instant(this.errorCode);\n if (this.suggestionValidationMessage === res ) {\n this.clearSuggestionValidationMessage();\n }\n this.errorCode = null;\n }\n }\n\n parseTopSuggestions(topSuggestions, source?: SourceType) {\n if (topSuggestions.constructor === Array) {\n // topSuggestions.forEach(this.parseSingleSuggestion.bind(this));\n for (const sug of topSuggestions)\n {\n this.parseSingleSuggestion(sug, source);\n }\n\n if (!source)\n {\n if ((topSuggestions.length === 0 || this.emptyResponse) && this.notInListAllowed) {\n this.suggestions.push({string: this.searchText, 'not-in-list': true});\n }\n }\n else\n {\n // If prefilling, then check if no match for a non-empty boxNumber\n // If this is the case, simulate the selection of the 'not-in-list' suggestion\n if (this.prefilling && this.notInListAllowed\n && this.prefillData.prefillStreetNumberPerfectMatchFound === false\n && this.prefillData.prefillStreetNumber !== null\n && this.prefillData.prefillStreetNumber !== undefined\n && this.prefillData.prefillStreetNumber.length > 0)\n {\n // const notInListSuggestion = {string: this.searchText, 'not-in-list': true};\n const suggestion = this.prefillBuildNotInListSuggestion();\n if (this.showDebugMessageToConsole) { console.log('STREET NUMBER - PREFILL NOT IN LIST SUGGESTION:', suggestion); }\n this.prefillCheckForPerfectMatch(suggestion);\n }\n\n }\n } else {\n this.parseSingleSuggestion(topSuggestions, source);\n }\n }\n\n prefillBuildNotInListSuggestion(): any {\n const notInListSuggestion = {string: this.searchText, 'not-in-list': true};\n const streetSuggestion = this.prefillData.prefillStreetPerfectMatchSuggestion;\n const combined = {...streetSuggestion.address, ...notInListSuggestion};\n delete combined.mailBoxid;\n delete combined.suffixId;\n // combined.boxNumber = combined.string;\n combined.houseNumber = combined.string;\n combined.searchBarString = combined.string;\n let isComplete = false;\n if (this.prefillData.parameters.hasOwnProperty('boxNumber') )\n {\n const bn = this.prefillData.parameters.boxNumber;\n isComplete = (bn !== null && bn !== undefined && bn.length > 0 ) ? false : true;\n }\n else\n {\n isComplete = true;\n }\n if (isComplete === true) {\n combined.isComplete = isComplete;\n }\n streetSuggestion.address = combined;\n return streetSuggestion;\n }\n\n parseSingleSuggestion(suggestion: any, source: SourceType) {\n let suggestionToAdd: any;\n if (this.localeService.isLocaleFrench() && suggestion.hasOwnProperty('french')) {\n suggestionToAdd = suggestion.french;\n } else if (this.localeService.isLocaleDutch() && suggestion.hasOwnProperty('dutch')) {\n suggestionToAdd = suggestion.dutch;\n } else if (this.localeService.isLocaleGerman() && suggestion.hasOwnProperty('german')) {\n suggestionToAdd = suggestion.german;\n } else if (suggestion.hasOwnProperty('address')) {\n suggestionToAdd = suggestion.address;\n }\n if (suggestionToAdd) {\n if (suggestion.messages) {\n suggestionToAdd.messages = suggestion.messages;\n }\n if (suggestionToAdd.houseNumber === this.searchText) {\n this.emptyResponse = false;\n }\n this.suggestions.push(suggestionToAdd);\n if (this.showDebugMessageToConsole) {\n console.log('streetNumber - add suggestion to list', suggestionToAdd);\n }\n if (source === SourceType.SOURCE_PREFILLED)\n {\n suggestion.address = suggestionToAdd;\n this.prefillCheckForPerfectMatch(suggestion);\n }\n }\n }\n\n prefillCheckForPerfectMatch(suggestion)\n {\n if ( !this.addressIsComplete )\n {\n if (this.showDebugMessageToConsole) {\n console.log('streetNumber - checking suggestion for perfect match', this.prefillData, suggestion);\n }\n const sugAddress = suggestion.address;\n const suggestionStreetNumber = this.transformStreetNumberInLowercaseAndWithoutDiacritics('' + sugAddress.houseNumber);\n if (this.showDebugMessageToConsole) {\n console.log('comparing street numbers', suggestionStreetNumber, this.prefillData.prefillStreetNumber);\n }\n if (suggestionStreetNumber === ('' + this.prefillData.prefillStreetNumber) )\n {\n this.prefillData.prefillStreetNumberPerfectMatchFound = true;\n this.prefillData.prefillStreetNumberPerfectMatchSuggestion = suggestion;\n this.searchText = sugAddress.houseNumber;\n if (sugAddress.hasOwnProperty('isComplete') && sugAddress.isComplete === true ) {\n this.clickSuggestion(null, sugAddress);\n this.addressIsComplete = true;\n // console.log('streetNumber::prefillCheckForPerfectMatch', this.addressIsComplete);\n if (this.showDebugMessageToConsole && this.addressIsComplete === true) {\n console.log('ADDRESS COMPLETE ON STREET NUMBER !');\n }\n }\n }\n }\n else\n {\n if (this.showDebugMessageToConsole) {\n console.log('streetNumber::prefillCheckForPerfectMatch - Address complete, skipping suggestion check', suggestion);\n }\n }\n }\n\n onInputChange(source?: SourceType) {\n if (this.showDebugMessageToConsole) {\n console.log('streetNumber::onInputChange', source);\n }\n this.collapseDropdown = false;\n this.addressIsValidated = false;\n this.addressIsComplete = false;\n // console.log('streetNumber::onInputChange', this.addressIsComplete);\n this.emptyResponse = true;\n this.resetArrowSelectedIndex();\n if (!source) {\n this.prefilling = false;\n if (this.showDebugMessageToConsole) {\n console.log('streetNumber::onInputChange -> calling valueChanged');\n }\n this.valueChanged();\n }\n this.clearSuggestionValidationMessage();\n if (this.searchText === '') {\n this.sequenceNumber += 1;\n this.consumedNumber = this.sequenceNumber;\n this.clearSuggestions();\n } else {\n this.getTopSuggestions(source);\n }\n this.buildInputWordList();\n }\n\n clickSuggestion(event: any, suggestion?: any) {\n this.isPrefillWithNoMatch = false;\n if (this.showDebugMessageToConsole) { console.log('streetNumber::clickSuggestion', event, suggestion); }\n event?.preventDefault();\n if (suggestion) {\n this.clearTypeAhead();\n this.resetArrowSelectedIndex();\n if (suggestion.string) {\n this.setSearchText(suggestion.string);\n }\n this.collapseDropdown = true;\n\n const notInList = suggestion['not-in-list'];\n const isNotInList = notInList !== null && notInList !== undefined && notInList === true;\n\n if (suggestion['not-in-list']) {\n suggestion = this.modifySelectedAddress(suggestion);\n if (this.showDebugMessageToConsole) { console.log('streetNumber::clickSuggestion - NOT-IN-LIST', event, suggestion); }\n }\n if (suggestion.hasOwnProperty('isComplete') && suggestion.isComplete === true && !isNotInList ) {\n this.addressIsComplete = true;\n // this.notifyAddressIsValidated();\n }\n this.addressIsValidated = true;\n if (event) {\n this.clearSuggestions();\n }\n this.setSelectedAddress(suggestion);\n }\n }\n\n modifySelectedAddress(suggestion: object) {\n if (this.showDebugMessageToConsole) {\n console.log('street number - combine selectedAddress with not in list', suggestion, this.selectedAddress);\n }\n const combined = {...this.selectedAddress, ...suggestion};\n delete combined.latitude;\n delete combined.longitude;\n delete combined.mailboxId;\n delete combined.pdpId;\n delete combined.suffixId;\n delete combined.pdpId;\n delete combined.pdpId;\n combined.houseNumber = combined.string;\n combined.searchBarString = combined.string;\n combined.isComplete = true;\n return combined;\n }\n\n setSelectedAddress(suggestion: any) {\n // console.log('street number - emit suggestion', suggestion);\n const notInList = suggestion['not-in-list'];\n const isNotInList = notInList !== null && notInList !== undefined && notInList === true;\n this.addressIsComplete = (suggestion.hasOwnProperty('isComplete') && suggestion.isComplete === true && !isNotInList) ? true : false;\n this.addressChanged.emit(suggestion);\n }\n\n clearSelectedAddress() {\n this.addressChanged.emit(null);\n this.addressIsValidated = false;\n this.addressIsComplete = false;\n // console.log('streetNumber::clearSelectedAddress', this.addressIsComplete);\n }\n\n emitTranslatedValidationMessage(validationMessageType: ValidationMessageType, options?: string[]) {\n // Momently, options are NOT used; so data type of these options will be reviewed once needed.\n if (validationMessageType === null || validationMessageType === undefined ) {\n console.warn('Unable to emit validation message - message key is invalid!', validationMessageType);\n return;\n }\n\n switch (validationMessageType) {\n\n case ValidationMessageType.Address_Not_Found:\n case ValidationMessageType.Address_Validated:\n case ValidationMessageType.Service_Unavailable: {\n const message = this.translateService.instant(validationMessageType);\n // this.messageChanged.emit(message);\n this.messageChanged.emit({messageType: validationMessageType, translatedMessage: message});\n }\n // tslint:disable-next-line:align\n break;\n\n default: {\n console.error('Unable to emit validation message - message key NOT supported!', validationMessageType);\n }\n // tslint:disable-next-line:align\n break;\n }\n\n }\n\n notifyAddressIsValidated() {\n this.addressIsComplete = true;\n // console.log('streetNumber::notifyAddressIsValidated', this.addressIsComplete);\n // this.setValidationMessage('address-validated');\n this.emitTranslatedValidationMessage(ValidationMessageType.Address_Validated);\n }\n\n checkKeyDown(event) {\n switch (event.which) {\n // down key, increment selectedIndex\n case 40:\n event.preventDefault();\n this.moveArrowSelectedIndexDown();\n break;\n\n // up key, decrement selectedIndex\n case 38:\n event.preventDefault();\n this.moveArrowSelectedIndexUp();\n break;\n // right arrow key\n case 39:\n event.preventDefault();\n if (this.cursorIsOnSuggestionList()) {\n this.clickSuggestion(event, this.suggestions[this.selectedIndex]);\n } else {\n if (this.typeAheadWord && this.typeAheadIsShown()) {\n this.setSearchText(this.bpTypeAhead);\n this.typeAheadWord = '';\n }\n }\n break;\n // tab key\n case 9:\n if (!this.addressIsValidated && !event.shiftKey) {\n event.preventDefault();\n this.selectFirstInListOfSuggesions();\n }\n break;\n\n case 46:\n if (event.ctrlKey) {\n this.clearWidget();\n }\n break;\n // enter pressed\n case 13:\n event.preventDefault();\n if (this.cursorIsOnSuggestionList()) {\n this.clickSuggestion(event, this.suggestions[this.selectedIndex]);\n } else {\n }\n break;\n\n default:\n this.clearTypeAhead();\n break;\n\n }\n }\n\n clearWidget() {\n if (this.showDebugMessageToConsole) { console.log('street number:: clearWidget'); }\n this.addressIsValidated = false;\n this.addressIsComplete = false;\n // console.log('streetNumber::clearWidget', this.addressIsComplete);\n this.clearSearchText();\n this.clearSuggestions();\n this.clearTypeAhead();\n this.prefillData = null;\n // this.prefilling = false;\n }\n\n clearSearchText() {\n this.searchText = '';\n }\n\n typeAheadIsShown() {\n return this.bpTypeAhead && this.bpTypeAhead.length > 0;\n }\n\n resetArrowSelectedIndex() {\n this.selectedIndex = -1;\n }\n\n moveArrowSelectedIndexDown() {\n if (this.selectedIndex + 1 !== this.suggestions.length) {\n this.selectedIndex++;\n this.changeSelection();\n this.setSearchTextBasedOnArrowSelection(this.selectedIndex, this.selectedIndex - 1);\n }\n }\n\n moveArrowSelectedIndexUp() {\n if (this.selectedIndex - 1 !== -2) {\n this.selectedIndex--;\n this.changeSelection();\n this.setSearchTextBasedOnArrowSelection(this.selectedIndex, this.selectedIndex + 1);\n }\n }\n\n cursorIsOnSuggestionList() {\n return this.selectedIndex >= 0;\n }\n\n setSearchTextBasedOnArrowSelection(newVal, oldVal) {\n if (newVal === undefined || this.suggestions.length <= 0) {\n return;\n }\n if (newVal !== -1) {\n if (oldVal === -1) {\n this.lastSearchValue = this.searchText;\n }\n this.setSearchText(this.suggestions[this.selectedIndex].string);\n this.clearTypeAhead();\n } else {\n this.setSearchText(this.lastSearchValue);\n }\n }\n\n mayShowClearButton() {\n return this.searchText && this.searchText.length > 0;\n }\n\n onClearStreetNumberInput(focus: boolean, emit: boolean = true) {\n // console.warn('street number :: clearInput');\n this.clearWidget();\n this.resetArrowSelectedIndex();\n this.previousIndex = -1;\n this.lastSearchValue = '';\n this.clearSuggestionValidationMessage();\n this.valueChanged();\n this.clearConnectionErrorMessage();\n if (focus === true) {\n this.streetNumberSearchInput.nativeElement.focus();\n }\n // this.addressChanged.emit(null);\n if (emit) {\n this.clearInputEventEmitter.emit(/*'STREET_NUMBER'*/ InputNameType.STREET_NUMBER);\n }\n }\n /*\n clearInput(focus?) {\n console.warn('street number :: clearInput');\n this.clearWidget();\n this.resetArrowSelectedIndex();\n this.previousIndex = -1;\n this.lastSearchValue = '';\n this.clearSuggestionValidationMessage();\n this.valueChanged();\n this.clearConnectionErrorMessage();\n if (focus) {\n this.streetNumberSearchInput.nativeElement.focus();\n }\n this.addressChanged.emit(null);\n }\n */\n\n clearSuggestions() {\n this.wordList = [];\n this.suggestions = [];\n this.suggestionsWordList = [];\n }\n\n clearTypeAhead() {\n this.bpTypeAhead = '';\n }\n\n clearSuggestionValidationMessage() {\n this.suggestionValidationMessage = '';\n this.addressIsValidated = false;\n // this.messageChanged.emit(this.suggestionValidationMessage);\n this.messageChanged.emit({messageType: null, translatedMessage: this.suggestionValidationMessage});\n this.validationMessageOptions = null;\n this.validationMessageCode = null;\n }\n\n setSearchText(value) {\n this.searchText = value;\n }\n\n selectFirstInListOfSuggesions() {\n this.selectedIndex = 0;\n this.changeSelection();\n this.setSearchTextBasedOnArrowSelection(this.selectedIndex, this.selectedIndex - 1);\n }\n\n changeSelection() {\n if (this.suggestions.length > 0) {\n this.selectionChanged = true;\n }\n }\n\n suggestionMouseLeave() {\n this.selectedIndex = -1;\n }\n\n showAddressNotFoundMessage() {\n // this.setValidationMessage('address-not-found');\n this.emitTranslatedValidationMessage(ValidationMessageType.Address_Not_Found);\n }\n\n isDisabled() {\n return (this.locality === '' || this.postalCode === '' || this.minLevel > ADDRESSLEVEL.STREET_NUMBER);\n }\n\n onInputClick() {\n if (this.showDebugMessageToConsole) { console.log('street number click'); }\n }\n\n}\n","import { Component, OnInit, AfterViewChecked, OnChanges, OnDestroy, ViewChild, ElementRef, Input, Output, EventEmitter, SimpleChanges } from '@angular/core';\nimport { Subscription } from 'rxjs';\nimport { PrefilledParameters } from '../utils/prefilled-parameters';\nimport { ValidationMessageType } from '../enum/validation-message-type.enum';\nimport { AddressService } from '../services/adress.service';\nimport { LocaleService } from '../services/locale.service';\nimport { TranslateService } from '@ngx-translate/core';\nimport { UnicodeService } from '../services/unicode.service';\nimport { DomHandler } from '../utils/domhandler';\nimport { ADDRESSLEVEL } from '../enum/address-level.enum';\nimport { QueryParameters } from '../model/query-parameters.model';\nimport { PrefillData } from '../utils/prefill-data';\nimport { SourceType } from '../enum/source-type.enum';\nimport { PrefillEvent } from '../utils/preflll.event';\nimport { InputNameType } from '../enum/input-name.enum';\n\n@Component({\n selector: 'bp-box-number',\n templateUrl: './box-number.component.html',\n styleUrls: ['./box-number.component.scss']\n})\nexport class BoxNumberComponent implements OnInit, AfterViewChecked, OnChanges, OnDestroy {\n\n @ViewChild('boxNumberSearchInput', {static: false} ) boxNumberSearchInput: ElementRef;\n @ViewChild('boxNumberList', {static: false} ) boxNumberList: ElementRef;\n\n private subscription: Subscription;\n\n // 2020-06-15\n // @Input()\n // onFocusShowSuggestionsAfterPrefill = true;\n\n @Input() prefillData: PrefillData;\n @Input() showDebugMessageToConsole = false;\n\n @Input() labelResourceKey = 'common.label.boxNumber';\n @Input() maxSuggesionCount = 5;\n @Input() visibleSuggesionCount = 5;\n @Input() sortCriteria = '';\n @Input() baseUrl: string;\n @Input() addressParams: PrefilledParameters;\n @Input() postalCode: string;\n @Input() locality: string;\n @Input() streetName: string;\n @Input() streetNumber: string;\n @Input() selectedAddress;\n @Input() notInListAllowed: boolean;\n\n // @ts-ignore\n @Input() set inputLang(val: string) {\n // console.log('set lang', val);\n this.localeService.changeLang(val);\n this.translateService.use(val).subscribe(\n (res: any) => {\n // console.log('set lang after subscribe', res);\n this.onChangedLanguage();\n // if (res !== undefined ) {\n // }\n }\n );\n }\n\n @Input() messageOption = 'Y';µ\n\n @Input()\n isReadonly=false;\n\n @Output() messageChanged: EventEmitter<{messageType: ValidationMessageType, translatedMessage: string}> = new EventEmitter();\n @Output() addressChanged: EventEmitter<any> = new EventEmitter();\n @Output() focusEvent: EventEmitter<any> = new EventEmitter();\n @Output() blurEvent: EventEmitter<any> = new EventEmitter();\n @Output() textChangeEvent: EventEmitter<any> = new EventEmitter();\n @Output() emptyResponseEvent: EventEmitter<any> = new EventEmitter();\n\n @Output() clearInputEventEmitter: EventEmitter<string> = new EventEmitter();\n\n @Output() prefillEventEmitter: EventEmitter<PrefillEvent> = new EventEmitter<PrefillEvent>();\n\n searchText: string;\n\n addressIsValidated: boolean;\n suggestionValidationMessage: string;\n suggestions: any;\n previousIndex: number;\n lastSearchValue: string;\n wordList: any;\n suggestionsWordList: any;\n bpTypeAhead: string;\n placeHolderText: string;\n skipNextBlur: boolean; // OnBlur is triggered when the user clicks suggestion/validator button\n errorCode: any;\n\n minLevel: number;\n selectedIndex: number;\n collapseDropdown: boolean;\n typeAheadWord: string;\n sequenceNumber: number;\n consumedNumber: number;\n selectionChanged: boolean;\n validationMessageCode = null;\n validationMessageOptions = null;\n emptyResponseText: string;\n emptyResponse: boolean;\n\n prefilling = false;\n isPrefillWithNoMatch = false;\n\n constructor(\n private addressService: AddressService,\n private localeService: LocaleService,\n private translateService: TranslateService,\n private unicodeService: UnicodeService,\n ) { }\n\n ngOnInit() {\n this.searchText = '';\n // instance properties\n this.addressIsValidated = false;\n this.suggestionValidationMessage = '';\n this.suggestions = [];\n this.previousIndex = -1;\n this.lastSearchValue = '';\n this.wordList = [];\n this.suggestionsWordList = [];\n this.bpTypeAhead = '';\n this.placeHolderText = '';\n this.skipNextBlur = false; // OnBlur is triggered when the user clicks suggestion/validator button\n this.errorCode = null;\n // scope properties\n this.selectedIndex = -1;\n // properties\n this.typeAheadWord = '';\n this.collapseDropdown = true;\n this.sequenceNumber = 1;\n this.consumedNumber = 1;\n // initialization\n this.setSearchText('');\n // this.setPlaceHolderText();\n this.setEmptyResponseText();\n this.emptyResponse = true;\n this.onChangedLanguage();\n }\n\n ngAfterViewChecked() {\n if (this.selectionChanged) {\n const overlay: HTMLDivElement = this.boxNumberList.nativeElement;\n setTimeout(() => {\n const listItem = DomHandler.findSingle(overlay, 'li.active');\n if (listItem) {\n DomHandler.scrollInView(overlay, listItem);\n }\n }, 1);\n this.selectionChanged = false;\n }\n }\n\n ngOnChanges(changes: SimpleChanges) {\n if (changes) {\n if (changes.hasOwnProperty('prefillData') && !changes.prefillData.firstChange) {\n this.prefilling = true;\n this.searchText = this.loadParams(changes.prefillData.currentValue);\n if (this.searchText !== '' && this.minLevel === ADDRESSLEVEL.BOX_NUMBER) {\n // this.onInputChange('prefilled');\n // this.boxNumberSearchInput.nativeElement.focus();\n this.collapseDropdown = true;\n this.prefillData.prefillBoxNumber\n = this.transformBoxNumberInLowercaseAndWithoutDiacritics(this.prefillData.parameters.boxNumber);\n this.onInputChange(/*'prefilled'*/ SourceType.SOURCE_PREFILLED );\n }\n }\n\n if (changes.hasOwnProperty('streetNumber') && !changes.streetNumber.firstChange && !changes.hasOwnProperty('prefillData')) {\n this.minLevel = ADDRESSLEVEL.BOX_NUMBER;\n this.clearWidget();\n this.valueChanged();\n }\n\n /*\n if (changes.hasOwnProperty('inputLang') / *&& !changes.addressParams.firstChange* /) {\n const lang = changes.inputLang.currentValue;\n console.log('on changes - inputLang', lang);\n if (changes.inputLang.currentValue !== undefined) {\n this.translateService.setDefaultLang(lang);\n this.translateService.use(lang);\n this.localeService.changeLang(lang);\n this.onChangedLanguage();\n }\n }\n */\n }\n }\n\n transformBoxNumberInLowercaseAndWithoutDiacritics(boxNumber: string): string {\n let result: string = null;\n if (boxNumber !== null && boxNumber !== undefined )\n {\n result = this.unicodeService.removeDiacritics(boxNumber);\n result = result.toLowerCase();\n }\n // console.log('Transformed street number:', result);\n return result;\n }\n\n ngOnDestroy() {\n if (this.subscription) {\n this.subscription.unsubscribe();\n }\n }\n\n\n onChangedLanguage() {\n // this.placeHolderText = this.translateService.instant('boxNumber.placeholder.input-placeholder');\n // console.log('place holder', this.placeHolderText);\n this.translateService.get('boxNumber.placeholder.input-placeholder')\n .subscribe((res: string) => {\n // console.log('new placeholder', res);\n // => 'hello world'\n this.placeHolderText = res;\n this.setEmptyResponseText();\n });\n }\n\n setEmptyResponseText() {\n // this.emptyResponseText = this.translationService.translate('not-in-list');\n this.emptyResponseText = this.translateService.instant('boxNumber.message.not-in-list');\n }\n\n onClearInputEvent(event, focus) {\n this.clearInput(focus);\n }\n\n onBlur(ev) {\n if (this.isBrowserIE() && this.isDropdownClicked(ev)) {\n this.boxNumberSearchInput.nativeElement.focus();\n return;\n }\n if (this.skipNextBlur) {\n this.skipNextBlur = false;\n } else {\n this.collapseDropdown = true;\n this.blurEvent.emit(ADDRESSLEVEL.BOX_NUMBER);\n }\n }\n\n isBrowserIE(): boolean {\n return /msie\\s|trident\\/|edge\\//i.test(window.navigator.userAgent);\n }\n\n isDropdownClicked(ev) {\n const target = ev.explicitOriginalTarget || document.activeElement;\n return (target.id === 'bpaac-box-dropdown');\n }\n\n onFocus() {\n this.collapseDropdown = false;\n // this.collapseDropdown = (this.prefilling === true && this.prefillData !== null)\n // ? !this.prefillData.parameters.onFocusShowSuggestionsAfterPrefill : false;\n // this.prefilling = false;\n this.skipNextBlur = false;\n this.focusEvent.emit(ADDRESSLEVEL.BOX_NUMBER);\n }\n\n valueChanged() {\n this.textChangeEvent.emit(this.searchText);\n }\n\n mayShowDropdown() {\n return this.suggestions.length > 0 && !this.collapseDropdown;\n }\n\n buildInputWordList() {\n this.wordList = this.searchText.split(/[\\s, ]+/);\n }\n\n mayAddTypeAhead(source?: SourceType) {\n if (source === SourceType.SOURCE_PREFILLED ) { return false; }\n if (this.searchText.length === 0) {\n return false;\n }\n return (/[^\\s, \\\\\\/]$/).test(this.searchText);\n }\n\n buildTypeAhead(source?: SourceType) {\n if (!this.mayAddTypeAhead(source)) {\n return;\n }\n const searchTextWords = this.searchText.split(/[\\s, ]+/);\n const lastWord = searchTextWords[searchTextWords.length - 1];\n\n if (this.suggestions.some(function(sug) {\n if (!sug || !sug.hasOwnProperty('string')) {\n return false;\n }\n return sug.string.split(/[\\s-]+/).some(function(word) {\n if (this.stringStartsWithIgnoreDiacritics(word, lastWord)) {\n this.typeAheadWord = word;\n return true;\n }\n }.bind(this));\n }.bind(this))) {\n const appendix = this.typeAheadWord.slice(lastWord.length, this.typeAheadWord.length).toLowerCase();\n this.bpTypeAhead = this.searchText + appendix;\n }\n }\n\n stringStartsWithIgnoreDiacritics(value, prefix) {\n value = (value !== null && value !== undefined) ? value.toLowerCase() : value;\n prefix = (prefix !== null && prefix !== undefined) ? prefix.toLowerCase() : prefix;\n return this.unicodeService.removeDiacritics(value).slice(0, prefix.length)\n .toLowerCase().indexOf(this.unicodeService.removeDiacritics(prefix)) !== -1;\n }\n\n getTopSuggestions(source?: SourceType) {\n this.sequenceNumber += 1;\n const param = this.generateParameters();\n if (this.showDebugMessageToConsole) { console.log('BOX-NUMBER calling service params', param); }\n if (this.searchText) {\n this.subscription = this.addressService.getBox(this.baseUrl, this.locality, this.postalCode, param)\n .subscribe(\n response => {\n this.handleGetBoxResponse(response, source);\n if (source === SourceType.SOURCE_PREFILLED)\n {\n this.isPrefillWithNoMatch = this.prefillData.prefillBoxNumberPerfectMatchFound === true ? false : true;\n this.prefillAnalyzeData();\n }\n else\n {\n this.isPrefillWithNoMatch = false;\n }\n }\n ,\n () => this.handleGetBoxError()\n );\n }\n }\n\n getTextColor(): string {\n return ( this.isPrefillWithNoMatch === true ) ? 'orangered' : '';\n }\n\n prefillAnalyzeData()\n {\n if (this.prefillData.prefillBoxNumberPerfectMatchFound === true)\n {\n this.collapseDropdown = true;\n }\n this.prefillEventEmitter.emit(new PrefillEvent(ADDRESSLEVEL.BOX_NUMBER, this.prefillData) );\n }\n\n loadParams(prefillData: PrefillData) {\n let concatStr = '';\n if (prefillData !== null && prefillData.parameters !== null)\n {\n if (prefillData.parameters.hasOwnProperty('minLevel')) {\n this.minLevel = prefillData.parameters.minLevel;\n }\n if (prefillData.parameters.hasOwnProperty('postalCode') && this.isString(prefillData.parameters.postalCode)) {\n this.postalCode = prefillData.parameters.postalCode;\n }\n if (prefillData.parameters.hasOwnProperty('municipalityName') && this.isString(prefillData.parameters.municipalityName)) {\n this.locality = prefillData.parameters.municipalityName;\n }\n if (prefillData.parameters.hasOwnProperty('streetName') && this.isString(prefillData.parameters.streetName)) {\n this.streetName = prefillData.parameters.streetName;\n }\n if (prefillData.parameters.hasOwnProperty('streetNumber') && this.isString(prefillData.parameters.streetNumber)) {\n this.streetNumber = prefillData.parameters.streetNumber;\n }\n if (prefillData.parameters.hasOwnProperty('boxNumber')\n && this.isString(prefillData.parameters.boxNumber) && this.isParamsComplete()) {\n concatStr = prefillData.parameters.boxNumber;\n }\n }\n return concatStr;\n }\n\n isString(val): boolean {\n if (val === null || val === undefined) {\n return false;\n }\n return val.constructor === String;\n }\n\n isValid(val) {\n return this.isString(val) && val !== '';\n }\n\n isParamsComplete(): boolean {\n return this.isValid(this.postalCode) && this.isValid(this.locality) && this.isValid(this.streetName) && this.isValid(this.streetNumber);\n }\n\n generateParameters(): QueryParameters {\n // tslint:disable\n const param = new QueryParameters({\n id: this.sequenceNumber,\n q: this.searchText,\n postalCode: this.postalCode,\n locality: this.locality,\n street: this.streetName,\n streetNumber: this.streetNumber,\n maxNumberOfSuggestions: this.maxSuggesionCount\n });\n\n if (this.sortCriteria === 'B') {\n param.sortByBox(true);\n }\n return param;\n }\n\n handleGetBoxResponse(data: any, source?: SourceType) {\n if (data && data.response && data.response.sequenceNumber && data.response.sequenceNumber >= this.consumedNumber &&\n data.response.topSuggestions) {\n this.consumedNumber = data.response.sequenceNumber;\n this.clearSuggestions();\n this.parseTopSuggestions(data.response.topSuggestions, source);\n this.buildTypeAhead(source);\n this.clearConnectionErrorMessage();\n this.buildInputWordList();\n }\n this.collapseDropdown = (this.prefilling === true && this.prefillData !== null)\n ? !this.prefillData.parameters.onFocusShowSuggestionsAfterPrefill : false;\n }\n\n handleGetBoxError() {\n this.setConnectionErrorMessage();\n }\n\n setConnectionErrorMessage() {\n this.errorCode = 'service-unavailable';\n // this.setValidationMessage(this.errorCode);\n this.emitTranslatedValidationMessage(ValidationMessageType.Service_Unavailable);\n }\n\n clearConnectionErrorMessage() {\n if (this.errorCode) {\n const res = this.translateService.instant(this.errorCode);\n if (this.suggestionValidationMessage === res ) {\n this.clearSuggestionValidationMessage();\n }\n this.errorCode = null;\n }\n }\n\n parseTopSuggestions(topSuggestions, source?: SourceType) {\n if (topSuggestions.constructor === Array) {\n // topSuggestions.forEach(this.parseSingleSuggestion.bind(this));\n for (const sug of topSuggestions)\n {\n this.parseSingleSuggestion(sug, source);\n }\n if(!source)\n {\n if ((topSuggestions.length === 0 || this.emptyResponse) && this.notInListAllowed) {\n this.suggestions.push({string: this.searchText, 'not-in-list': true});\n }\n }\n else\n {\n // If prefilling, then check if no match for a non-empty boxNumber\n // If this is the case, simulate the selection of the 'not-in-list' suggestion\n if(this.prefilling && this.notInListAllowed\n && this.prefillData.prefillBoxNumberPerfectMatchFound === false \n && this.prefillData.prefillBoxNumber !== null \n && this.prefillData.prefillBoxNumber !== undefined\n && this.prefillData.prefillBoxNumber.length > 0)\n {\n // const notInListSuggestion = {string: this.searchText, 'not-in-list': true};\n const suggestion = this.prefillBuildNotInListSuggestion();\n if (this.showDebugMessageToConsole) { console.log('BOX NUMBER - PREFILL NOT IN LIST SUGGESTION:', suggestion); }\n this.prefillCheckForPerfectMatch(suggestion);\n }\n\n }\n } else {\n this.parseSingleSuggestion(topSuggestions, source);\n }\n }\n\n prefillBuildNotInListSuggestion(): any {\n const notInListSuggestion = {string: this.searchText, 'not-in-list': true};\n const streetNumberSuggestion = this.prefillData.prefillStreetNumberPerfectMatchSuggestion;\n const combined = {...streetNumberSuggestion.address, ...notInListSuggestion};\n delete combined.mailBoxid;\n delete combined.suffixId;\n combined.boxNumber = combined.string;\n combined.searchBarString = combined.string;\n combined.isComplete = true;\n streetNumberSuggestion.address = combined;\n return streetNumberSuggestion;\n }\n\n parseSingleSuggestion(suggestion: any, source: SourceType) {\n let suggestionToAdd: any;\n if (this.localeService.isLocaleFrench() && suggestion.hasOwnProperty('french')) {\n suggestionToAdd = suggestion.french;\n } else if (this.localeService.isLocaleDutch() && suggestion.hasOwnProperty('dutch')) {\n suggestionToAdd = suggestion.dutch;\n } else if (this.localeService.isLocaleGerman() && suggestion.hasOwnProperty('german')) {\n suggestionToAdd = suggestion.german;\n } else if (suggestion.hasOwnProperty('address')) {\n suggestionToAdd = suggestion.address;\n }\n if (suggestionToAdd) {\n if (suggestion.messages) {\n suggestionToAdd.messages = suggestion.messages;\n }\n if (suggestionToAdd.boxNumber === this.searchText) {\n this.emptyResponse = false;\n }\n this.suggestions.push(suggestionToAdd);\n if (source === SourceType.SOURCE_PREFILLED)\n {\n suggestion.address = suggestionToAdd;\n this.prefillCheckForPerfectMatch(suggestion);\n }\n }\n }\n\n prefillCheckForPerfectMatch(suggestion)\n {\n //if ( !this.addressIsComplete )\n {\n if (this.showDebugMessageToConsole) {\n console.log('box number - checking suggestion for perfect match', this.prefillData, suggestion);\n }\n const sugAddress = suggestion.address;\n const suggestionBoxNumber = this.transformBoxNumberInLowercaseAndWithoutDiacritics('' + sugAddress.boxNumber);\n if (this.showDebugMessageToConsole) {\n console.log('comparing box numbers', suggestionBoxNumber, this.prefillData.prefillBoxNumber);\n }\n if (suggestionBoxNumber === ('' + this.prefillData.prefillBoxNumber) )\n {\n this.prefillData.prefillBoxNumberPerfectMatchFound = true;\n this.prefillData.prefillBoxNumberPerfectMatchSuggestion = suggestion;\n this.searchText = sugAddress.boxNumber;\n if (sugAddress.hasOwnProperty('isComplete') && sugAddress.isComplete === true) {\n this.clickSuggestion(null, sugAddress);\n // this.addressIsComplete = true;\n if (this.showDebugMessageToConsole) {\n console.log('ADDRESS COMPLETE ON BOX NUMBER !');\n }\n }\n }\n }\n /* else\n {\n if (this.showDebugMessageToConsole) {\n console.log('Address complete, skipping suggestion check', suggestion);\n }\n } */\n }\n\n onInputChange(source?: SourceType) {\n this.collapseDropdown = false;\n this.emptyResponse = true;\n this.resetArrowSelectedIndex();\n if (!source) {\n this.prefilling = false;\n this.valueChanged();\n }\n this.clearSuggestionValidationMessage();\n if (this.searchText === '') {\n this.sequenceNumber += 1;\n this.consumedNumber = this.sequenceNumber;\n this.clearSuggestions();\n } else {\n this.getTopSuggestions(source);\n }\n this.buildInputWordList();\n }\n\n clickSuggestion(event: any, suggestion?: any) {\n this.isPrefillWithNoMatch = false;\n event?.preventDefault();\n if (suggestion) {\n this.clearTypeAhead();\n this.resetArrowSelectedIndex();\n if (suggestion.string) {\n this.setSearchText(suggestion.string);\n }\n this.collapseDropdown = true;\n // if (suggestion.hasOwnProperty('isComplete')) {\n // this.showAddressIsValidated();\n // }\n if (suggestion['not-in-list']) {\n suggestion = this.modifySelectedAddress(suggestion);\n }\n this.addressIsValidated = true;\n suggestion.isComplete = true;\n this.setSelectedAddress(suggestion);\n }\n }\n\n modifySelectedAddress(suggestion: object) {\n const combined = {...this.selectedAddress, ...suggestion};\n delete combined.mailBoxid;\n delete combined.suffixId;\n combined.boxNumber = combined.string;\n combined.searchBarString = combined.string;\n combined.isComplete = true;\n return combined;\n }\n\n setSelectedAddress(suggestion: any) {\n // console.log('box number::setSelectedAddress', suggestion);\n this.addressIsValidated = (suggestion.hasOwnProperty('isComplete') && suggestion.isComplete === true) ? true : false;\n this.addressChanged.emit(suggestion);\n }\n\n clearSelectedAddress() {\n this.addressChanged.emit(null);\n this.addressIsValidated = false;\n }\n\n /*\n setValidationMessage(translationCode, options?, retranslateOptions?) {\n this.validationMessageOptions = options;\n if (retranslateOptions && this.validationMessageOptions && Array.isArray(this.validationMessageOptions['untranslated-sprintf']) &&\n this.validationMessageOptions.sprintf) {\n const translatedElements = [];\n this.validationMessageOptions['untranslated-sprintf'].forEach(function(element) {\n translatedElements.push(this.translationService.translate(element));\n }.bind(this)\n );\n this.validationMessageOptions.sprintf = translatedElements;\n }\n this.validationMessageCode = translationCode;\n // emit translation key to wrapper component for customized translations\n if (options) {\n this.suggestionValidationMessage = this.translationService.translate(this.validationMessageCode, this.validationMessageOptions);\n this.messageChanged.emit(this.suggestionValidationMessage);\n } else {\n this.messageChanged.emit(this.validationMessageCode);\n }\n }\n */\n\n emitTranslatedValidationMessage(validationMessageType: ValidationMessageType, options?: string[]) {\n // Momently, options are NOT used; so data type of these options will be reviewed once needed.\n if (validationMessageType === null || validationMessageType === undefined ) {\n console.warn('Unable to emit validation message - message key is invalid!', validationMessageType);\n return;\n }\n\n switch (validationMessageType) {\n\n case ValidationMessageType.Address_Not_Found:\n case ValidationMessageType.Address_Validated:\n case ValidationMessageType.Service_Unavailable: {\n const message = this.translateService.instant(validationMessageType);\n // this.messageChanged.emit(message);\n this.messageChanged.emit({messageType: validationMessageType, translatedMessage: message});\n }\n // tslint:disable-next-line:align\n break;\n\n default: {\n console.error('Unable to emit validation message - message key NOT supported!', validationMessageType);\n }\n // tslint:disable-next-line:align\n break;\n }\n\n }\n showAddressIsValidated() {\n // this.setValidationMessage('address-validated');\n this.emitTranslatedValidationMessage(ValidationMessageType.Address_Validated);\n }\n\n checkKeyDown(event) {\n switch (event.which) {\n // down key, increment selectedIndex\n case 40:\n event.preventDefault();\n this.moveArrowSelectedIndexDown();\n break;\n\n // up key, decrement selectedIndex\n case 38:\n event.preventDefault();\n this.moveArrowSelectedIndexUp();\n break;\n // right arrow key\n case 39:\n event.preventDefault();\n if (this.cursorIsOnSuggestionList()) {\n this.clickSuggestion(event, this.suggestions[this.selectedIndex]);\n } else {\n if (this.typeAheadWord && this.typeAheadIsShown()) {\n this.setSearchText(this.bpTypeAhead);\n this.typeAheadWord = '';\n }\n }\n break;\n // tab key\n case 9:\n if (!this.addressIsValidated && !event.shiftKey) {\n event.preventDefault();\n this.selectFirstInListOfSuggesions();\n }\n break;\n\n case 46:\n if (event.ctrlKey) {\n this.clearWidget();\n }\n break;\n // enter pressed\n case 13:\n event.preventDefault();\n if (this.cursorIsOnSuggestionList()) {\n this.clickSuggestion(event, this.suggestions[this.selectedIndex]);\n } else {\n }\n break;\n\n default:\n this.clearTypeAhead();\n break;\n\n }\n }\n\n clearWidget() {\n this.addressIsValidated = false;\n this.clearSearchText();\n this.clearSuggestions();\n this.clearTypeAhead();\n this.prefillData = null;\n // this.prefilling = false;\n }\n\n clearSearchText() {\n this.searchText = '';\n }\n\n typeAheadIsShown() {\n return this.bpTypeAhead && this.bpTypeAhead.length > 0;\n }\n\n resetArrowSelectedIndex() {\n this.selectedIndex = -1;\n }\n\n moveArrowSelectedIndexDown() {\n if (this.selectedIndex + 1 !== this.suggestions.length) {\n this.selectedIndex++;\n this.changeSelection();\n this.setSearchTextBasedOnArrowSelection(this.selectedIndex, this.selectedIndex - 1);\n }\n }\n\n moveArrowSelectedIndexUp() {\n if (this.selectedIndex - 1 !== -2) {\n this.selectedIndex--;\n this.changeSelection();\n this.setSearchTextBasedOnArrowSelection(this.selectedIndex, this.selectedIndex + 1);\n }\n }\n\n cursorIsOnSuggestionList() {\n return this.selectedIndex >= 0;\n }\n\n setSearchTextBasedOnArrowSelection(newVal, oldVal) {\n if (newVal === undefined || this.suggestions.length <= 0) {\n return;\n }\n if (newVal !== -1) {\n if (oldVal === -1) {\n this.lastSearchValue = this.searchText;\n }\n this.setSearchText(this.suggestions[this.selectedIndex].string);\n this.clearTypeAhead();\n } else {\n this.setSearchText(this.lastSearchValue);\n }\n }\n\n mayShowClearButton() {\n return this.searchText.length > 0;\n }\n\n clearInput(focus?, emit: boolean = true) {\n this.clearWidget();\n this.resetArrowSelectedIndex();\n this.previousIndex = -1;\n this.lastSearchValue = '';\n this.clearSuggestionValidationMessage();\n this.valueChanged();\n this.clearConnectionErrorMessage();\n if (focus === true) {\n this.boxNumberSearchInput.nativeElement.focus();\n }\n // this.addressChanged.emit(null);\n if(emit) {\n this.clearInputEventEmitter.emit(/*'BOX_NUMBER'*/ InputNameType.BOX_NUMBER);\n }\n }\n\n clearSuggestions() {\n this.wordList = [];\n this.suggestions = [];\n this.suggestionsWordList = [];\n }\n\n clearTypeAhead() {\n this.bpTypeAhead = '';\n }\n\n clearSuggestionValidationMessage() {\n this.suggestionValidationMessage = '';\n this.addressIsValidated = false;\n this.messageChanged.emit({messageType: null, translatedMessage: this.suggestionValidationMessage});\n this.validationMessageOptions = null;\n this.validationMessageCode = null;\n }\n\n setSearchText(value) {\n this.searchText = value;\n }\n\n selectFirstInListOfSuggesions() {\n this.selectedIndex = 0;\n this.changeSelection();\n this.setSearchTextBasedOnArrowSelection(this.selectedIndex, this.selectedIndex - 1);\n }\n\n changeSelection() {\n if (this.suggestions.length > 0) {\n this.selectionChanged = true;\n }\n }\n\n suggestionMouseLeave() {\n this.selectedIndex = -1;\n }\n\n showAddressNotFoundMessage() {\n // this.setValidationMessage('address-not-found');\n this.emitTranslatedValidationMessage(ValidationMessageType.Address_Not_Found);\n }\n\n isDisabled() {\n return (this.locality === '' || this.postalCode === '' || this.minLevel > ADDRESSLEVEL.BOX_NUMBER);\n }\n\n onInputClick() {\n if (this.showDebugMessageToConsole) { console.log('box number click'); }\n }\n}\n","import { PrefilledParameters } from './prefilled-parameters';\r\n\r\nexport class PrefillData // extends PrefilledParameters\r\n{\r\n // parameters: PrefilledParameters;\r\n\r\n prefillMunicipalityName: string = null;\r\n prefillMunicipalityPerfectMatchFound = false;\r\n prefillMunicipalityPerfectMatchSuggestion: any = null;\r\n // This is a working field, do not document\r\n prefillMunicipalityAndLocalityPerfectMatchFound = false;\r\n\r\n prefillStreetName: string = null;\r\n prefillStreetPerfectMatchFound = false;\r\n prefillStreetPerfectMatchSuggestion: any = null;\r\n\r\n prefillStreetNumber: string = null;\r\n prefillStreetNumberPerfectMatchFound = false;\r\n prefillStreetNumberPerfectMatchSuggestion: any = null;\r\n\r\n prefillBoxNumber: string = null;\r\n prefillBoxNumberPerfectMatchFound = false;\r\n prefillBoxNumberPerfectMatchSuggestion: any = null;\r\n\r\n ts: Date = null;\r\n\r\n constructor(\r\n public parameters: PrefilledParameters\r\n ){\r\n this.ts = new Date();\r\n }\r\n}\r\n","import { HttpClient } from \"@angular/common/http\";\r\nimport { Injectable } from \"@angular/core\";\r\nimport { Observable } from \"rxjs\";\r\n\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class Nis9Service {\r\n\r\n // https://bgs.bpost.be/set-selection-circle?lng=4.360537572541948&lat=50.84063582806037&radius=0.001\r\n private nis9ServiceURL='';\r\n \r\n constructor(private httpClient: HttpClient) { }\r\n \r\n setNis9ServiceURL(nis9ServiceURL: string) {\r\n this.nis9ServiceURL=nis9ServiceURL;\r\n }\r\n\r\n determineNis9Data(longitude, latitude): Observable<any>\r\n {\r\n const apiUrl=`https://bgs.bpost.be/set-selection-circle?lng=${longitude}&lat=${latitude}&radius=0.001`;\r\n return this.httpClient.get<any>( apiUrl );\r\n }\r\n}","import { Component, OnInit, Input, Output, EventEmitter, OnDestroy, ViewChild, SimpleChanges, OnChanges } from '@angular/core';\nimport { Subscription } from 'rxjs';\nimport { PrefilledParameters } from './utils/prefilled-parameters';\nimport { ValidationMessageOptionType } from './enum/validation-message-option-type.enum';\nimport { ValidationMessageType } from './enum/validation-message-type.enum';\nimport { LocalityComponent } from './locality/locality.component';\nimport { StreetComponent } from './street/street.component';\nimport { StreetNumberComponent } from './street-number/street-number.component';\nimport { BoxNumberComponent } from './box-number/box-number.component';\nimport { ADDRESSLEVEL } from './enum';\nimport { PrefillData } from './utils/prefill-data';\nimport { PrefillEvent } from './utils/preflll.event';\nimport { InputNameType } from './enum/input-name.enum';\nimport { HttpService } from './services/http.service';\nimport { Nis9Service } from './services/nis9.service';\n\n@Component({\n selector: 'bp-lib-address-autocomplete-by-component',\n templateUrl: './lib-address-autocomplete-by-component.component.html',\n styleUrls: [ './lib-address-autocomplete-by-component.component.scss']\n})\nexport class LibAddressAutocompleteByComponentComponent implements OnInit, OnDestroy, OnChanges {\n\n @ViewChild(LocalityComponent, {static: false} ) autocompleteLocality;\n @ViewChild(StreetComponent, {static: false} ) autocompleteStreet;\n @ViewChild(StreetNumberComponent, {static: false} ) autocompleteStreetNb;\n @ViewChild(BoxNumberComponent, {static: false} ) autocompleteBoxNb;\n\n selectedLanguage: string = null;\n private subscription: Subscription;\n\n private baseUrl = \"https://api.mailops.bpost.cloud/roa-info/externalMailingAddressProofingRest/autocomplete/\";\n\n // @ts-ignore\n @Input() set inputLang(val: string) {\n this.setLanguage(val);\n }\n\n // @ts-ignore\n @Input() set clearInput(focus: {setFocus: boolean, timestamp: Date}) {\n this.onClearInput(focus);\n }\n\n // @ts-ignore\n @Input() set validationMessageOption(option: {validationType: ValidationMessageOptionType, timestamp: Date}) {\n this.setValidationMessageOptionFromInput(option);\n }\n\n @Input()\n defaultLang: string;\n\n @Input() showDebugMessageToConsole = false;\n @Input() minLevel: number;\n @Input() notInListAllowed = true;\n @Input() addressParams: PrefilledParameters;\n @Input() messageOption = 'Y';\n\n // LOCALITY\n @Input() localityUrl = this.baseUrl + 'locality';\n @Input() maxSuggestionLocality = 5;\n @Input() visibleSuggestionLocalityCount = 5;\n @Input() sortCriteriaLocality: string;\n postalCodeLocality: string;\n // localityParams: PrefilledParameters;\n localityPrefillData: PrefillData = null;\n\n // STREET\n @Input() streetUrl = this.baseUrl + 'street';\n @Input() maxSuggestionStreet = 5;\n @Input() visibleSuggestionStreetCount = 5;\n @Input() sortCriteriaStreet: string;\n // streetParams: PrefilledParameters;\n streetPrefillData: PrefillData = null;\n\n // STREET NUMBER\n // tslint:disable-next-line:max-line-length\n @Input() streetNumberUrl = this.baseUrl + 'streetNumber';\n @Input() maxSuggestionStreetNb = 5;\n @Input() visibleSuggestionStreetNbCount = 5;\n @Input() sortCriteriaStreetNb: string;\n // streetNumberParams: PrefilledParameters;\n streetNumberPrefillData: PrefillData = null;\n\n // BOX NUMBER\n @Input() boxNumberUrl = this.baseUrl + 'boxNumber';\n @Input() maxSuggestionBoxNb = 5;\n @Input() visibleSuggestionBoxNbCount = 5;\n @Input() sortCriteriaBoxNb: string;\n // boxParams: PrefilledParameters;\n boxNumberPrefillData: PrefillData = null;\n\n\n boxNumber: string;\n completeAddress: string;\n emittedAddress: any = null;\n locality: string;\n postalCode: string;\n selectedAddress: any;\n street: string;\n streetAddress: any;\n streetNameInput: string;\n streetNumber: string;\n streetNumberAddress: any;\n streetNumberInput: string;\n validationMessage: {messageType: ValidationMessageType, translatedMessage: string} = {messageType: null, translatedMessage: ''};\n validationMessageOptionType: ValidationMessageOptionType;\n\n\n @Output() addressCompleteEventEmitter: EventEmitter<any> = new EventEmitter();\n @Output() validationMessageEventEmitter: EventEmitter<any> = new EventEmitter();\n @Output() clearInputEventEmitter: EventEmitter<string> = new EventEmitter();\n\n\n prefillData: PrefillData;\n processingPrefillData = false;\n\n\n // Pass the API key as a property of the library !\n @Input()\n apiKey='cyRkKOD73O1DOdgcDLLnsaOiDh6OyOkt3BBT5JU1';\n\n\n // set the widget as readonly and add NIS9 query parameter\n @Input()\n isReadonly=false;\n\n @Input()\n nis9InResponse=false;\n\n // https://bgs.bpost.be/set-selection-circle?lng=4.360537572541948&lat=50.84063582806037&radius=0.001\n @Input()\n nis9ServiceURL='';\n\n constructor(\n private nis9Service: Nis9Service,\n private httpService: HttpService\n ) { }\n\n ngOnInit(): void\n {\n this.nis9Service.setNis9ServiceURL(this.nis9ServiceURL);\n\n this.httpService.setApiKey( this.apiKey );\n \n if (this.addressParams)\n {\n this.prefillData = this.addressParams as any as PrefillData;\n }\n }\n\n ngOnDestroy()\n {\n if (this.subscription)\n {\n this.subscription.unsubscribe();\n }\n }\n\n ngOnChanges(changes: SimpleChanges)\n {\n if (changes)\n {\n // code for tracing\n // visibleSuggestionStreetNbCount\n if (this.showDebugMessageToConsole) {\n this.displayParametersChangesToConsole(changes);\n }\n\n if (changes.hasOwnProperty('apiKey') && !changes.apiKey.firstChange) {\n this.httpService.setApiKey( this.apiKey );\n }\n\n if (changes.hasOwnProperty('addressParams') && !changes.addressParams.firstChange) {\n // if (changes.hasOwnProperty('addressParams')) {\n this.processingPrefillData = true;\n this.enterPrefillMode();\n this.selectedAddress = null;\n this.notifyAddressComplete();\n this.clearWidget();\n /*\n if (this.localityPrefillData !== null && this.localityPrefillData !== undefined) {\n // this.onClearInputEventEmitter(InputNameType.LOCALITY);\n this.clearWidget();\n }\n */\n this.boxNumberPrefillData = null;\n this.streetNumberPrefillData = null;\n this.streetPrefillData = null;\n\n if (this.showDebugMessageToConsole) {console.log('lib::widget detected prefilling', this.addressParams); }\n this.addressParams.minLevel = /*4*/ ADDRESSLEVEL.LOCALITY;\n // this.localityPrefillData = this.addressParams; // as any as PrefillData;\n this.localityPrefillData = new PrefillData(this.addressParams);\n // Object.assign(this.localityPrefillData, this.addressParams);\n if (this.showDebugMessageToConsole) {console.log('lib::checking locality match... ', this.localityPrefillData); }\n }\n }\n }\n\n displayParametersChangesToConsole(changes: SimpleChanges)\n {\n // messageOption\n if (changes.hasOwnProperty('messageOption') && !changes.messageOption.firstChange) {\n const wcChanges = changes.messageOption.currentValue;\n console.log('lib widget9 - messageOption', wcChanges);\n }\n\n // maxSuggestionLocality\n if (changes.hasOwnProperty('maxSuggestionLocality') && !changes.maxSuggestionLocality.firstChange) {\n const wcChanges = changes.maxSuggestionLocality.currentValue;\n console.log('lib widget9 - maxSuggestionLocality', wcChanges);\n }\n\n // visibleSuggestionLocalityCount\n if (changes.hasOwnProperty('visibleSuggestionLocalityCount') && !changes.visibleSuggestionLocalityCount.firstChange) {\n const wcChanges = changes.visibleSuggestionLocalityCount.currentValue;\n console.log('lib widget9 - visibleSuggestionLocalityCount', wcChanges);\n }\n\n // sortCriteriaLocality\n if (changes.hasOwnProperty('sortCriteriaLocality') && !changes.sortCriteriaLocality.firstChange) {\n const wcChanges = changes.sortCriteriaLocality.currentValue;\n console.log('lib widget9 - sortCriteriaLocality', wcChanges);\n }\n\n // maxSuggestionStreet\n if (changes.hasOwnProperty('maxSuggestionStreet') && !changes.maxSuggestionStreet.firstChange) {\n const wcChanges = changes.maxSuggestionStreet.currentValue;\n console.log('lib widget9 - maxSuggestionStreet', wcChanges);\n }\n // visibleSuggestionStreetCount\n if (changes.hasOwnProperty('visibleSuggestionStreetCount') && !changes.visibleSuggestionStreetCount.firstChange) {\n const wcChanges = changes.visibleSuggestionStreetCount.currentValue;\n console.log('lib widget9 - visibleSuggestionStreetCount', wcChanges);\n }\n // sortCriteriaStreet\n if (changes.hasOwnProperty('sortCriteriaStreet') && !changes.sortCriteriaStreet.firstChange) {\n const wcChanges = changes.sortCriteriaStreet.currentValue;\n console.log('lib widget9 - sortCriteriaStreet', wcChanges);\n }\n\n // maxSuggestionStreetNb\n if (changes.hasOwnProperty('maxSuggestionStreetNb') && !changes.maxSuggestionStreetNb.firstChange) {\n const wcChanges = changes.maxSuggestionStreetNb.currentValue;\n console.log('lib widget9 - maxSuggestionStreetNb', wcChanges);\n }\n // visibleSuggestionStreetNbCount\n if (changes.hasOwnProperty('visibleSuggestionStreetNbCount') && !changes.visibleSuggestionStreetNbCount.firstChange) {\n const wcChanges = changes.visibleSuggestionStreetNbCount.currentValue;\n console.log('lib widget9 - visibleSuggestionStreetNbCount', wcChanges);\n }\n // sortCriteriaStreetNb\n if (changes.hasOwnProperty('sortCriteriaStreetNb') && !changes.sortCriteriaStreetNb.firstChange) {\n const wcChanges = changes.sortCriteriaStreetNb.currentValue;\n console.log('lib widget9 - sortCriteriaStreetNb', wcChanges);\n }\n\n // maxSuggestionBoxNb\n if (changes.hasOwnProperty('maxSuggestionBoxNb') && !changes.maxSuggestionBoxNb.firstChange) {\n const wcChanges = changes.maxSuggestionBoxNb.currentValue;\n console.log('lib widget9 - maxSuggestionBoxNb', wcChanges);\n }\n // visibleSuggestionBoxNbCount\n if (changes.hasOwnProperty('visibleSuggestionBoxNbCount') && !changes.visibleSuggestionBoxNbCount.firstChange) {\n const wcChanges = changes.visibleSuggestionBoxNbCount.currentValue;\n console.log('lib widget9 - visibleSuggestionBoxNbCount', wcChanges);\n }\n // sortCriteriaBoxNb\n if (changes.hasOwnProperty('sortCriteriaBoxNb') && !changes.sortCriteriaBoxNb.firstChange) {\n const wcChanges = changes.sortCriteriaBoxNb.currentValue;\n console.log('lib widget9 - sortCriteriaBoxNb', wcChanges);\n }\n }\n\n clearWidget() {\n this.autocompleteBoxNb.clearWidget();\n this.autocompleteStreetNb.clearWidget();\n this.autocompleteStreet.clearWidget();\n this.autocompleteLocality.clearWidget();\n }\n\n changeMinLevel(minLevel: number) {\n this.minLevel = minLevel;\n }\n\n // Called by the specific buttons in the app\n onClearInput(focus: {setFocus: boolean, timestamp: Date}) {\n if (this.showDebugMessageToConsole) { console.log('lib::onClearInput', focus); }\n\n /*\n if (focus === null || focus === undefined) {\n return;\n }*/\n\n this.quitPrefillMode();\n\n const setFocus = (focus === null || focus === undefined) ? false : focus.setFocus;\n\n switch (this.minLevel) {\n case 1:\n this.boxNumber = '';\n this.autocompleteBoxNb.clearInput(setFocus, false);\n this.clearInputEventEmitter.emit('BOX_NUMBER');\n break;\n case 2:\n this.boxNumber = '';\n this.streetNumber = '';\n this.autocompleteBoxNb.searchText = '';\n this.autocompleteBoxNb.streetNumber = '';\n this.autocompleteBoxNb.clearInput(setFocus, false);\n this.autocompleteStreetNb.onClearStreetNumberInput(setFocus, false);\n this.clearInputEventEmitter.emit('STREET_NUMBER');\n break;\n case 3:\n this.boxNumber = '';\n this.streetNumber = '';\n this.street = '';\n this.autocompleteBoxNb.searchText = '';\n this.autocompleteBoxNb.streetNumber = '';\n this.autocompleteBoxNb.clearInput(setFocus, false);\n this.autocompleteBoxNb.clearWidget();\n this.autocompleteStreetNb.searchText = '';\n this.autocompleteStreetNb.streetName = '';\n this.autocompleteStreetNb.onClearStreetNumberInput(setFocus, false);\n this.autocompleteStreet.clearInput(setFocus, false);\n this.clearInputEventEmitter.emit('STREET');\n break;\n default:\n // Box number\n this.boxNumber = '';\n if (this.autocompleteBoxNb)\n {\n this.autocompleteBoxNb.searchText = '';\n this.autocompleteBoxNb.streetNumber = '';\n this.autocompleteBoxNb.clearInput(setFocus, false);\n }\n // Street number\n this.streetNumber = '';\n if (this.autocompleteStreetNb)\n {\n this.autocompleteStreetNb.searchText = '';\n this.autocompleteStreetNb.streetName = '';\n this.autocompleteStreetNb.onClearStreetNumberInput(setFocus, false);\n }\n // Street name\n this.street = '';\n if (this.autocompleteStreet)\n {\n this.autocompleteStreet.searchText = '';\n this.autocompleteStreet.clearInput(setFocus, false);\n }\n // Locality\n this.locality = '';\n if (this.autocompleteLocality)\n {\n this.autocompleteLocality.searchText = '';\n this.autocompleteLocality.clearInput(setFocus, false);\n }\n\n this.clearInputEventEmitter.emit('LOCALITY');\n break;\n }\n }\n\n getBoxPrefix(): string {\n let prefix = '';\n switch (this.selectedLanguage) {\n case 'fr':\n prefix = 'BTE';\n break;\n case 'nl':\n prefix = 'BUS';\n break;\n default:\n prefix = 'BOX';\n break;\n }\n return prefix;\n }\n\n notifyAddressComplete() {\n // console.log('notify for address complete');\n if(this.nis9InResponse === true && this.selectedAddress.hasOwnProperty('latitude') && this.selectedAddress.hasOwnProperty('longitude'))\n {\n const latitude = this.selectedAddress.latitude;\n const longitude = this.selectedAddress.longitude;\n if (this.showDebugMessageToConsole) console.log('calling nis9 service to get nis9 data (1):', longitude, latitude);\n\n this.nis9Service.determineNis9Data(longitude, latitude)\n .subscribe(\n data => {\n console.log('nis DATA:', data);\n /*\n nis DATA: \n {Status: 'success', data: Array(1)}\n Status: \"success\"\n data: ['25112A21-']\n */\n if(data!==undefined && data !==null && data.hasOwnProperty('Status') && data.Status==='success')\n {\n const nis9Data = data.data;\n if(Array.isArray(nis9Data) && nis9Data.length === 1)\n {\n this.selectedAddress.nis9 = nis9Data[0];\n }\n }\n\n this.addressCompleteEventEmitter.emit(this.selectedAddress);\n this.emittedAddress = this.selectedAddress;\n this.updatePostalCodeLocality(this.emittedAddress);\n }\n );\n }\n else\n {\n if (this.showDebugMessageToConsole) console.log('NOT calling nis9 service to get nis9 data (1)');\n this.addressCompleteEventEmitter.emit(this.selectedAddress);\n this.emittedAddress = this.selectedAddress;\n this.updatePostalCodeLocality(this.emittedAddress);\n }\n\n }\n\n onClearInputEventEmitter(event) {\n\n if (this.showDebugMessageToConsole) { console.log('lib::onClearInputEventEmitter', event); }\n\n this.quitPrefillMode();\n\n let nextAddress = this.selectedAddress; // this.emittedAddress;\n\n if (event === InputNameType.LOCALITY)\n {\n // Box number\n this.boxNumber = '';\n if (this.autocompleteBoxNb)\n {\n this.autocompleteBoxNb.searchText = '';\n this.autocompleteBoxNb.streetNumber = '';\n this.autocompleteBoxNb.clearInput(false, false);\n }\n // Street number\n this.streetNumber = '';\n if (this.autocompleteStreetNb)\n {\n this.autocompleteStreetNb.searchText = '';\n this.autocompleteStreetNb.streetName = '';\n this.autocompleteStreetNb.onClearStreetNumberInput(false, false);\n }\n // Street name\n this.street = '';\n if (this.autocompleteStreet)\n {\n this.autocompleteStreet.searchText = '';\n this.autocompleteStreet.clearInput(false, false);\n }\n // Locality\n this.locality = '';\n if (this.autocompleteLocality)\n {\n this.autocompleteLocality.searchText = '';\n this.autocompleteLocality.clearInput(false, false);\n }\n\n nextAddress = null;\n }\n else if (event === InputNameType.STREET)\n {\n // Box number\n this.boxNumber = '';\n if (this.autocompleteBoxNb)\n {\n this.autocompleteBoxNb.searchText = '';\n this.autocompleteBoxNb.streetNumber = '';\n this.autocompleteBoxNb.clearInput(false, false);\n }\n // Street number\n this.streetNumber = '';\n if (this.autocompleteStreetNb)\n {\n this.autocompleteStreetNb.searchText = '';\n this.autocompleteStreetNb.streetName = '';\n this.autocompleteStreetNb.onClearStreetNumberInput(false, false);\n }\n // Street name\n this.street = '';\n if (this.autocompleteStreet)\n {\n this.autocompleteStreet.searchText = '';\n this.autocompleteStreet.clearInput(false, false);\n }\n\n nextAddress = null;\n }\n else if (event === InputNameType.STREET_NUMBER)\n {\n // Box number\n this.boxNumber = '';\n if (this.autocompleteBoxNb)\n {\n this.autocompleteBoxNb.searchText = '';\n this.autocompleteBoxNb.streetNumber = '';\n this.autocompleteBoxNb.clearInput(false, false);\n }\n // Street number\n this.streetNumber = '';\n if (this.autocompleteStreetNb)\n {\n this.autocompleteStreetNb.searchText = '';\n // this.autocompleteStreetNb.streetName = '';\n this.autocompleteStreetNb.onClearStreetNumberInput(false, false);\n }\n\n nextAddress = null;\n }\n else if (event === InputNameType.BOX_NUMBER)\n {\n // Box number\n this.boxNumber = '';\n if (this.autocompleteBoxNb)\n {\n this.autocompleteBoxNb.searchText = '';\n // this.autocompleteBoxNb.streetNumber = '';\n this.autocompleteBoxNb.clearInput(false, false);\n }\n\n // Attention: if not-in-list don't reset the address, just modify it\n const addressIsNotInList\n = nextAddress !== undefined && nextAddress !== null\n && nextAddress.hasOwnProperty('not-in-list') && nextAddress['not-in-list'] === true\n ? true : false;\n\n /*\n if (addressIsNotInList)\n {\n delete nextAddress.boxNumber;\n nextAddress.isCompleteNotificationDone = false;\n if (this.streetNumberAddress !== null )\n {\n console.warn('reset box on not-in-list', this.streetNumberAddress);\n\n }\n }\n else\n {\n nextAddress = null;\n }\n */\n\n nextAddress = this.streetNumberAddress !== null ? this.streetNumberAddress : null;\n /*\n const addressIsNotInList\n = nextAddress !== null && nextAddress.hasOwnProperty('not-in-list') && nextAddress['not-in-list'] === true\n ? true : false;\n */\n const addressIsComplete\n = nextAddress !== undefined && nextAddress !== null\n && nextAddress.hasOwnProperty('isComplete') && nextAddress.isComplete === true ? true : false;\n this.autocompleteStreetNb.addressIsComplete = addressIsComplete;\n }\n\n this.clearInputEventEmitter.emit(event);\n\n if (this.emittedAddress !== null ) {\n if(nextAddress !== undefined && nextAddress !== null && nextAddress.hasOwnProperty('latitude') && nextAddress.hasOwnProperty('longitude'))\n {\n const latitude = nextAddress.latitude;\n const longitude = nextAddress.longitude;\n if (this.showDebugMessageToConsole) console.log('calling nis9 service to get nis9 data (2)', longitude, latitude);\n }\n else\n {\n if (this.showDebugMessageToConsole) console.log('NOT calling nis9 service to get nis9 data (2)');\n }\n this.addressCompleteEventEmitter.emit(nextAddress);\n this.emittedAddress = nextAddress;\n }\n\n\n // gka\n /*\n if (event === InputNameType.LOCALITY)\n {\n this.minLevel = ADDRESSLEVEL.LOCALITY;\n this.boxNumberPrefillData = null;\n this.streetNumberPrefillData = null;\n this.streetPrefillData = null;\n this.localityPrefillData = null;\n // this.clearInput(focus: {setFocus: boolean, timestamp: Date});\n this.locality = '';\n this.postalCode = '';\n this.street = null;\n this.streetNumber = null;\n this.boxNumber = null;\n this.autocompleteBoxNb.clearInput(false, false);\n this.autocompleteBoxNb.streetName = '';\n this.autocompleteStreetNb.onClearStreetNumberInput(false, false);\n this.autocompleteStreetNb.streetName = '';\n this.autocompleteStreet.clearInput(false, false);\n this.autocompleteStreet.locality = '';\n this.autocompleteLocality.clearInput(false, false);\n }\n if (event === InputNameType.STREET)\n {\n this.minLevel = ADDRESSLEVEL.STREET;\n this.boxNumberPrefillData = null;\n this.streetNumberPrefillData = null;\n this.streetPrefillData = null;\n // this.clearInput(focus: {setFocus: boolean, timestamp: Date});\n this.street = null;\n this.streetNumber = null;\n this.boxNumber = null;\n this.autocompleteBoxNb.clearInput(false, false);\n this.autocompleteBoxNb.streetName = '';\n this.autocompleteStreetNb.onClearStreetNumberInput(false, false);\n this.autocompleteStreetNb.streetName = '';\n this.autocompleteStreet.clearInput(false, false);\n // this.autocompleteLocality.clearInput(false, false);\n }\n if (event === InputNameType.STREET_NUMBER)\n {\n this.minLevel = ADDRESSLEVEL.STREET_NUMBER;\n this.boxNumberPrefillData = null;\n this.streetNumberPrefillData = null;\n // this.clearInput(focus: {setFocus: boolean, timestamp: Date});\n this.streetNumber = null;\n this.boxNumber = null;\n this.autocompleteBoxNb.clearInput(false, false);\n this.autocompleteBoxNb.streetName = '';\n this.autocompleteStreetNb.onClearStreetNumberInput(false, false);\n // this.autocompleteStreet.clearInput(false, false);\n // this.autocompleteLocality.clearInput(false, false);\n }\n if (event === InputNameType.BOX_NUMBER)\n {\n this.minLevel = ADDRESSLEVEL.BOX_NUMBER;\n this.boxNumberPrefillData = null;\n this.boxNumber = null;\n // this.clearInput(focus: {setFocus: boolean, timestamp: Date});\n this.autocompleteBoxNb.clearInput(false, false);\n // this.autocompleteStreetNb.onClearStreetNumberInput(false, false);\n // this.autocompleteStreet.clearInput(false, false);\n // this.autocompleteLocality.clearInput(false, false);\n }\n */\n }\n\n resetLocality(event) {\n this.postalCode = '';\n this.locality = '';\n this.quitPrefillMode();\n this.onClearInputEventEmitter(InputNameType.STREET);\n this.setAddress(null, 4);\n }\n\n resetStreet(event) {\n this.street = '';\n this.quitPrefillMode();\n this.onClearInputEventEmitter(InputNameType.STREET_NUMBER);\n this.autocompleteStreetNb.addressIsComplete = false;\n this.autocompleteStreetNb.streetName = '';\n this.setAddress(null, 3);\n }\n\n resetStreetNumber(event, resetAddress: boolean = false) {\n // console.log('reset street numner!', event, resetAddress);\n this.streetNumber = '';\n this.quitPrefillMode();\n this.onClearInputEventEmitter(InputNameType.BOX_NUMBER);\n\n this.autocompleteBoxNb.addressIsComplete = false;\n this.autocompleteBoxNb.streetNumber = '';\n this.setAddress(null, 2);\n // $$ 7 this.setAddress(null, 2); // $$ ?????\n /*\n if (resetAddress === true) {\n this.setAddress(/ *null* / this.selectedAddress);\n }*/\n }\n\n resetBoxNumber(event, resetAddress: boolean = false) {\n // console.log('reset street numner!', event, resetAddress);\n this.boxNumber = '';\n this.quitPrefillMode();\n this.autocompleteBoxNb.addressIsComplete = false;\n this.setAddress(null, 1);\n // this.onClearInputEventEmitter(InputNameType.BOX_NUMBER);\n // $$ 7 this.setAddress(null, 1); // $$ ?????\n /*\n if (resetAddress === true) {\n this.setAddress(/ *null* / this.selectedAddress);\n }*/\n }\n\n enterPrefillMode() {\n if (this.showDebugMessageToConsole) {console.log('lib::enterPrefillMode()'); }\n if (this.autocompleteBoxNb && this.autocompleteStreetNb && this.autocompleteStreet && this.autocompleteLocality )\n {\n this.autocompleteBoxNb.prefilling = true;\n this.autocompleteStreetNb.prefilling = true;\n this.autocompleteStreet.prefilling = true;\n this.autocompleteLocality.prefilling = true;\n\n this.autocompleteStreet.locality = '';\n this.autocompleteStreetNb.streetName = '';\n this.autocompleteBoxNb.streetNumber = '';\n }\n\n }\n\n quitPrefillMode() {\n if (this.showDebugMessageToConsole) {console.log('lib::quitPrefillMode()'); }\n if (this.autocompleteBoxNb && this.autocompleteStreetNb && this.autocompleteStreet && this.autocompleteLocality )\n {\n this.autocompleteBoxNb.prefilling = false;\n this.autocompleteStreetNb.prefilling = false;\n this.autocompleteStreet.prefilling = false;\n this.autocompleteLocality.prefilling = false;\n }\n\n this.processingPrefillData = false;\n }\n\n setAddress(address: any, level?: number) {\n if (this.showDebugMessageToConsole) {console.log('lib::setAddress - address part, level', address, level); }\n\n /* $$ $$\n if (this.selectedAddress && !address) {\n // console.log('reset address!');\n this.selectedAddress = null;\n this.streetAddress = null;\n this.streetNumberAddress = null;\n this.notifyAddressComplete();\n return;\n }\n */\n if (address === null || address === undefined )\n {\n const doNotify = (this.selectedAddress !== null && this.selectedAddress !== undefined) ? true : false;\n this.selectedAddress = null;\n this.autocompleteStreetNb.addressIsComplete = false;\n this.autocompleteBoxNb.addressIsComplete = false;\n if (doNotify) {\n this.notifyAddressComplete();\n }\n }\n\n if (address) {\n delete address.messages;\n this.selectedAddress = address;\n this.updateCompleteAddress();\n this.postalCode = address.postalCode ? address.postalCode : '';\n this.locality = address.localityName ? address.localityName : '';\n this.street = address.streetName ? address.streetName : '';\n // const notInList = address['not-in-list'];\n // const isNotInList = notInList !== null && notInList !== undefined && notInList === true;\n /*\n if (address.houseNumber) {\n if (!address.isComplete || isNotInList) {\n this.streetNumber = address.houseNumber ? address.houseNumber : '';\n } else {\n if (!address.boxNumber) {\n // console.log('calling reset street number !');\n if ( !this.processingPrefillData ) {\n this.resetStreetNumber(null, false);\n }\n // this.streetNumber = '';\n }\n }\n }\n */\n\n const addressIsComplete = address !== null && address !== undefined\n && address.hasOwnProperty('isComplete') && address.isComplete === true ? true : false;\n const addressIsNotInList = address !== null && address !== undefined\n && address.hasOwnProperty('not-in-list') && address['not-in-list'] === true ? true : false;\n\n switch (level) {\n\n // Locality / Municipality and POstalCode\n case 4:\n this.updatePostalCodeLocality(address);\n /*\n this.autocompleteStreet.clearWidget();\n this.autocompleteStreetNb.searchText = '';\n this.autocompleteStreetNb.clearWidget();\n this.autocompleteStreetNb.searchText = '';\n this.autocompleteBoxNb.clearWidget();\n this.autocompleteBoxNb.searchText = '';\n */\n this.streetAddress = null;\n this.streetNumberAddress = null;\n //\n this.autocompleteStreet.searchText = '';\n this.autocompleteStreetNb.searchText = '';\n this.autocompleteStreetNb.streetName = '';\n this.autocompleteBoxNb.searchText = '';\n this.autocompleteBoxNb.streetNumber = '';\n break;\n\n // Street Name\n case 3:\n this.updatePostalCodeLocality(address);\n this.updateStreetName(address);\n this.streetAddress = address;\n this.streetNumberAddress = null;\n /*\n this.autocompleteStreetNb.clearWidget();\n this.autocompleteStreetNb.searchText = '';\n this.autocompleteBoxNb.clearWidget();\n this.autocompleteBoxNb.searchText = '';\n */\n this.autocompleteStreetNb.searchText = '';\n this.autocompleteBoxNb.searchText = '';\n this.autocompleteBoxNb.streetNumber = '';\n break;\n\n // STREET Number\n case 2:\n this.updatePostalCodeLocality(address);\n this.updateStreetName(address);\n this.updateStreetNumber(address); // $$\n this.streetAddress = address;\n this.streetNumberAddress = address;\n if (address.hasOwnProperty('isComplete') && address.isComplete === true )\n {\n this.autocompleteStreetNb.addressIsComplete = true;\n if (addressIsNotInList)\n {\n this.autocompleteBoxNb.streetNumber = address.houseNumber;\n }\n else\n {\n this.autocompleteBoxNb.streetNumber = '';\n }\n }\n else\n {\n this.autocompleteBoxNb.streetNumber = address.houseNumber;\n }\n /*\n this.autocompleteBoxNb.clearWidget();\n this.autocompleteBoxNb.searchText = '';\n */\n this.autocompleteBoxNb.searchText = '';\n break;\n\n // BOX Number\n case 1:\n {\n if (addressIsNotInList)\n {\n this.autocompleteStreetNb.addressIsComplete = false;\n }\n }\n break;\n\n default:\n break;\n }\n\n if ( this.selectedAddress && this.selectedAddress.isComplete === undefined) {\n this.selectedAddress.isComplete = false;\n }\n\n /*\n if (address.isComplete === true ) {\n if (!this.selectedAddress.isCompleteNotificationDone) {\n this.selectedAddress.isCompleteNotificationDone = true;\n this.notifyAddressComplete();\n }\n } else {\n this.notifyAddressComplete();\n }\n */\n\n this.selectedAddress.isCompleteNotificationDone = true;\n this.notifyAddressComplete();\n }\n }\n\n setLanguage(lang: string) {\n this.selectedLanguage = lang;\n }\n\n setValidationMessage(/*message: string*/message: {messageType: ValidationMessageType, translatedMessage: string}) {\n this.validationMessage = message;\n if (this.validationMessageOptionType === ValidationMessageOptionType.EMIT) {\n this.validationMessageEventEmitter.emit(message);\n }\n }\n\n\n updatePostalCodeLocality(address) {\n if (address && address.postalCode && address.localityName) {\n this.postalCodeLocality = address.postalCode + ' ' + address.localityName;\n this.autocompleteLocality.searchText = this.postalCodeLocality;\n }\n }\n\n updateStreetName(address) {\n if (address && address.streetName) {\n this.streetNameInput = address.streetName;\n }\n }\n\n updateStreetNumber(address) {\n if (address && address.houseNumber) {\n this.streetNumberInput = address.houseNumber;\n }\n }\n\n updateCompleteAddress() {\n let concatStr = '';\n concatStr += this.selectedAddress.streetName ? `${this.selectedAddress.streetName} ` : '';\n concatStr += this.selectedAddress.houseNumber ? `${this.selectedAddress.houseNumber} ` : '';\n concatStr += this.selectedAddress.boxNumber ? `${this.getBoxPrefix()} ${this.selectedAddress.boxNumber} ` : '';\n concatStr += this.selectedAddress.postalCode ? `${this.selectedAddress.postalCode} ` : '';\n concatStr += this.selectedAddress.municipalityName ? `${this.selectedAddress.municipalityName} ` : '';\n this.completeAddress = concatStr;\n }\n\n setValidationMessageOptionFromInput(option: {validationType: ValidationMessageOptionType, timestamp: Date}) {\n this.validationMessageOptionType = option.validationType;\n // console.log('addresse autocomplete - validation message option', this.validationMessageOptionType);\n }\n\n onLocalityPrefillEvent(event: PrefillEvent) {\n if (this.showDebugMessageToConsole) {console.log('lib::locality prefill event received:', event); }\n /*\n if (event.perfectMatch)\n {\n this.addressParams.minLevel = / *3* / ADDRESSLEVEL.STREET;\n this.streetParams = this.addressParams;\n }\n */\n const data = event.prefillData;\n if (event.prefillData.prefillMunicipalityPerfectMatchFound === true )\n {\n const suggestion = data.prefillMunicipalityPerfectMatchSuggestion;\n const address = suggestion.address;\n this.updatePostalCodeLocality(address);\n this.addressParams.minLevel = /*4*/ ADDRESSLEVEL.STREET;\n // this.localityPrefillData = this.addressParams; // as any as PrefillData;\n // this.localityPrefillData = new PrefillData(this.addressParams);\n // Object.assign(this.localityPrefillData, this.addressParams);\n this.prefillData = event.prefillData;\n this.prefillData.ts = new Date();\n this.prefillData.parameters.minLevel = ADDRESSLEVEL.STREET;\n // Be sure to propagate the localityName in place of the municipalityName !\n const suggestionAddress = this.prefillData.prefillMunicipalityPerfectMatchSuggestion.address;\n const suggestionAddressLocalityName = suggestionAddress.localityName;\n this.prefillData.parameters.municipalityName = suggestionAddressLocalityName;\n this.prefillData.parameters.postalCode = suggestionAddress.postalCode;\n // this.updatePostalCodeLocality(suggestionAddress);\n\n const streetName = this.prefillData.parameters.streetName;\n if (streetName === null || streetName === undefined || streetName === '')\n {\n this.setAddress(address, ADDRESSLEVEL.LOCALITY);\n // this.quitPrefillMode();\n // this.updatePostalCodeLocality(suggestionAddress);\n }\n\n /*\n const streetName = this.prefillData.parameters.streetName;\n if (streetName === null || streetName === undefined || streetName === '')\n {\n this.setAddress(address, ADDRESSLEVEL.LOCALITY);\n this.quitPrefillMode();\n // this.updatePostalCodeLocality(suggestionAddress);\n }\n else\n {\n if (this.showDebugMessageToConsole) { console.log('lib::prefill: trigger checking street match... ', this.prefillData); }\n this.streetPrefillData = this.prefillData;\n }\n */\n\n this.streetPrefillData = this.prefillData;\n }\n else\n {\n // const cpAndLocality = this.prefillData.parameters.postalCode + this.prefillData.parameters.municipalityName;\n const cpAndLocality = data.parameters.postalCode + data.parameters.municipalityName;\n this.autocompleteStreet.locality = '';\n if ( cpAndLocality === null || cpAndLocality === undefined || cpAndLocality.length === 0 )\n {\n this.setAddress(null, ADDRESSLEVEL.LOCALITY);\n }\n this.quitPrefillMode();\n }\n }\n\n onStreetPrefillEvent(event: PrefillEvent) {\n if (this.showDebugMessageToConsole) {console.log('lib::street: prefill event received', event); }\n /*\n const data: PrefillData = event.prefillData;\n if (data.prefillStreetPerfectMatchFound === true )\n {\n console.log('lib::onStreetPrefillEvent: MATCH FOUND', data);\n this.postalCodeLocality = 'TRUC-MUCHE';\n this.postalCodeLocality = 'TRUC-MUCHE 2';\n this.autocompleteLocality.searchText = this.postalCodeLocality;\n }\n */\n const data = event.prefillData;\n if (event.prefillData.prefillStreetPerfectMatchFound === true )\n {\n // if (this.showDebugMessageToConsole) { console.log('lib::onStreetPrefillEvent: MATCH FOUND', data); }\n const suggestion = data.prefillStreetPerfectMatchSuggestion;\n const address = suggestion.address;\n this.updateStreetName(address);\n this.addressParams.minLevel = ADDRESSLEVEL.STREET_NUMBER;\n // this.localityPrefillData = this.addressParams; // as any as PrefillData;\n // this.localityPrefillData = new PrefillData(this.addressParams);\n // Object.assign(this.localityPrefillData, this.addressParams);\n this.prefillData = event.prefillData;\n this.prefillData.ts = new Date();\n this.prefillData.parameters.minLevel = ADDRESSLEVEL.STREET_NUMBER;\n const suggestionAddress = this.prefillData.prefillStreetPerfectMatchSuggestion.address;\n const suggestionAddressLocalityName = suggestionAddress.localityName;\n this.prefillData.parameters.municipalityName = suggestionAddressLocalityName;\n this.prefillData.parameters.postalCode = suggestionAddress.postalCode;\n this.prefillData.parameters.streetName = suggestionAddress.streetName;\n // this.updatePostalCodeLocality(suggestionAddress);\n // this.updatePostalCodeLocality(suggestionAddress);\n\n const streetNumber = this.prefillData.parameters.streetNumber;\n if (streetNumber === null || streetNumber === undefined || streetNumber === '')\n {\n this.setAddress(address, ADDRESSLEVEL.STREET);\n // this.quitPrefillMode();\n }\n\n /*\n const streetNumber = this.prefillData.parameters.streetNumber;\n if (streetNumber === null || streetNumber === undefined || streetNumber === '')\n {\n this.setAddress(address, ADDRESSLEVEL.STREET);\n this.quitPrefillMode();\n }\n else\n {\n if (this.showDebugMessageToConsole) {console.log('lib::prefill: trigger checking street number match... ', this.prefillData);}\n this.streetNumberPrefillData = this.prefillData;\n }\n */\n\n this.streetNumberPrefillData = this.prefillData;\n }\n else\n {\n const prefillStreetName = this.prefillData.parameters.streetName;\n const address = this.prefillData.prefillMunicipalityPerfectMatchSuggestion.address;\n this.autocompleteStreetNb.streetName = '';\n\n if (this.showDebugMessageToConsole) {\n console.error('lib::onStreetPrefillEvent - NO MATCH AT STREET LEVEL', prefillStreetName );\n }\n\n if ( prefillStreetName === null || prefillStreetName === undefined || prefillStreetName.length === 0 )\n {\n // if (this.showDebugMessageToConsole) {console.log('lib::onStreetPrefillEvent: NO MATCH FOUND - set address', data, address); }\n this.setAddress(address, ADDRESSLEVEL.LOCALITY);\n }\n else\n {\n // address.streetName = prefillStreetName;\n address.searchBarString = prefillStreetName;\n this.setAddress(address, ADDRESSLEVEL.STREET);\n }\n this.quitPrefillMode();\n }\n }\n\n onStreetNumberPrefillEvent(event: PrefillEvent) {\n if (this.showDebugMessageToConsole) { console.log('lib::street number prefill event received:', event); }\n const data = event.prefillData;\n if (data.prefillStreetNumberPerfectMatchFound === true)\n {\n const suggestion = data.prefillStreetNumberPerfectMatchSuggestion;\n const address = suggestion.address;\n this.updateStreetNumber(address);\n this.autocompleteStreetNb.selectedAddress = address;\n\n const addressIsComplete = address && address.hasOwnProperty('isComplete') && address.isComplete === true ? true : false;\n const addressIsNotInList = address && address.hasOwnProperty('not-in-list') && address['not-in-list'] === true ? true : false;\n\n if (addressIsComplete && ! addressIsNotInList )\n {\n // found address - perfect matchat street number level\n // Nothing to do anymore\n this.autocompleteStreetNb.addressIsComplete = true;\n this.quitPrefillMode();\n }\n else\n {\n this.addressParams.minLevel = ADDRESSLEVEL.BOX_NUMBER;\n this.prefillData = event.prefillData;\n this.prefillData.ts = new Date();\n this.prefillData.parameters.minLevel = ADDRESSLEVEL.BOX_NUMBER;\n // const suggestionAddressLocalityName\n // = this.prefillData.prefillStreetNumberPerfectMatchSuggestion.address.localityName;\n\n const suggestionAddress = this.prefillData.prefillStreetNumberPerfectMatchSuggestion.address;\n const suggestionAddressLocalityName = suggestionAddress.localityName;\n this.prefillData.parameters.municipalityName = suggestionAddressLocalityName;\n this.prefillData.parameters.municipalityName = suggestionAddressLocalityName;\n this.prefillData.parameters.postalCode = suggestionAddress.postalCode;\n this.prefillData.parameters.streetName = suggestionAddress.streetName;\n this.prefillData.parameters.streetNumber = suggestionAddress.houseNumber;\n // this.updatePostalCodeLocality(suggestionAddress);\n // this.updatePostalCodeLocality(suggestionAddress);\n\n const boxNumber = this.prefillData.parameters.boxNumber;\n if ( ! addressIsNotInList && (boxNumber === null || boxNumber === undefined || boxNumber === '') )\n {\n this.setAddress(address, ADDRESSLEVEL.STREET_NUMBER);\n // this.quitPrefillMode();\n }\n\n /*\n const boxNumber = this.prefillData.parameters.boxNumber;\n if ( ! addressIsNotInList && (boxNumber === null || boxNumber === undefined || boxNumber === '') )\n {\n this.setAddress(address, ADDRESSLEVEL.STREET_NUMBER);\n this.quitPrefillMode();\n }\n else\n {\n if (this.showDebugMessageToConsole) { console.log('lib::prefill: trigger checking box number match... ', this.prefillData); }\n this.boxNumberPrefillData = this.prefillData;\n }\n */\n\n this.boxNumberPrefillData = this.prefillData;\n }\n }\n else\n {\n const prefillStreetNumber = this.prefillData.parameters.streetNumber;\n const address = this.prefillData.prefillStreetPerfectMatchSuggestion.address;\n this.autocompleteBoxNb.streetNumber = '';\n if ( prefillStreetNumber === null || prefillStreetNumber === undefined || prefillStreetNumber.length === 0 )\n {\n this.setAddress(address, ADDRESSLEVEL.STREET);\n }\n else\n {\n // address.houseNumber = prefillStreetNumber;\n address.searchBarString = prefillStreetNumber;\n this.setAddress(address, ADDRESSLEVEL.STREET_NUMBER);\n }\n this.quitPrefillMode();\n }\n }\n\n onBoxNumberPrefillEvent(event: PrefillEvent) {\n if (this.showDebugMessageToConsole) { console.log('lib::prefill: box number event received:', event); }\n const data = event.prefillData;\n if (data.prefillBoxNumberPerfectMatchFound === true)\n {\n const suggestion = data.prefillBoxNumberPerfectMatchSuggestion;\n const address = suggestion.address;\n this.autocompleteBoxNb.selectedAddress = address;\n this.setAddress(address, ADDRESSLEVEL.BOX_NUMBER);\n }\n else\n {\n const prefillBoxNumber = this.prefillData.parameters.boxNumber;\n const address = this.prefillData.prefillStreetNumberPerfectMatchSuggestion.address;\n if ( prefillBoxNumber === null || prefillBoxNumber === undefined || prefillBoxNumber.length === 0 )\n {\n this.setAddress(address, ADDRESSLEVEL.STREET_NUMBER);\n }\n else\n {\n // address.boxNumber = prefillBoxNumber;\n address.searchBarString = prefillBoxNumber;\n this.setAddress(address, ADDRESSLEVEL.BOX_NUMBER);\n }\n }\n this.quitPrefillMode();\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { DomSanitizer } from '@angular/platform-browser';\n\n@Pipe({\n name: 'highlightSuggestion'\n})\nexport class HighlightSuggestionPipe implements PipeTransform {\n\n constructor(private sanitizer: DomSanitizer) {}\n\n transform(value: any, args?: any): any {\n\n if (!args) {\n return value;\n }\n\n if (Array.isArray(args) && args.length > 1 ) {\n return this.transformForArray(value, args);\n }\n\n if (args === '.') {\n args = '\\\\.';\n } else if (Array.isArray(args) && args.length === 1 ) {\n if (args[0] === '.') {\n args[0] = '\\\\.';\n }\n }\n\n // Match in a case insensitive manner\n const re = new RegExp(args, 'gi');\n const match = value.match(re);\n\n // If there's no match, just return the original value.\n if (!match) {\n return value;\n }\n\n /* console.warn('HighlightSuggestionPipe::transform: value=' + value);\n console.warn('HighlightSuggestionPipe::transform: args=' + args);\n console.warn('HighlightSuggestionPipe::transform: match=' + match); */\n\n const replacedValue = value.replace(re, '<span style=\\'font-weight: bold;\\'>' + match[0] + '</span>');\n // console.warn('HighlightSuggestionPipe::transform: replacedValue=' + replacedValue);\n return this.sanitizer.bypassSecurityTrustHtml(replacedValue);\n }\n\n private transformForArray(value: any, args: any): any {\n\n let query = '';\n let ix = 0;\n for (const word of args) {\n ix++;\n if (ix < args.length) {\n query = query.concat( word + '|');\n } else {\n query = query.concat( word );\n }\n }\n\n // console.warn('HighlightSuggestionPipe::transformForArray', value, args, query);\n\n const replacedValue = value.replace(new RegExp('(' + query + ')', 'gi'), '<span style=\"font-weight: bold;\">$1</span>');\n return this.sanitizer.bypassSecurityTrustHtml(replacedValue);\n }\n}\n","import { Directive, Input, ElementRef, AfterViewChecked, Renderer2 } from '@angular/core';\nimport { DomHandler } from './domhandler';\n\n@Directive({\n selector: '[appVisibleSuggestion]'\n})\nexport class VisibleSuggestionDirective implements AfterViewChecked {\n\n @Input()\n appVisibleSuggestion: number;\n\n constructor(private el: ElementRef, private renderer: Renderer2) { }\n\n ngAfterViewChecked() {\n this.showHeight(this.el.nativeElement, this.appVisibleSuggestion);\n }\n\n showHeight(parent: HTMLElement, count: number) {\n if (!parent) { return; }\n\n // const children = parent.getElementsByClassName('list-option');\n // const children = parent.querySelectorAll('li');\n const children = parent.firstElementChild.children;\n\n if (!children || children.length === 0) { return; }\n\n const sum = Array.from(children).slice(0, count).reduce((acc, ele) => {\n return acc + DomHandler.getOuterHeight(ele);\n }, 7);\n\n this.renderer.setStyle(this.el.nativeElement, 'maxHeight', `${sum}px`);\n\n // this.el.nativeElement.style.maxHeight = `${sum}px`;\n }\n\n}\n","import { NgModule } from '@angular/core';\nimport { LibAddressAutocompleteByComponentComponent } from './lib-address-autocomplete-by-component.component';\nimport { LocalityComponent } from './locality/locality.component';\nimport { StreetComponent } from './street/street.component';\nimport { StreetNumberComponent } from './street-number/street-number.component';\nimport { BoxNumberComponent } from './box-number/box-number.component';\nimport { CommonModule } from '@angular/common';\nimport { BrowserModule } from '@angular/platform-browser';\nimport { BrowserAnimationsModule } from '@angular/platform-browser/animations';\nimport { HttpClientModule } from '@angular/common/http';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { TranslateModule } from '@ngx-translate/core';\nimport { HighlightSuggestionPipe } from './utils/highlight-suggestion.pipe';\nimport { VisibleSuggestionDirective } from './utils/visible-suggestion.directive';\nimport { PrefilledParameters } from './utils/prefilled-parameters';\n\n\n\n@NgModule({\n declarations: [\n HighlightSuggestionPipe,\n VisibleSuggestionDirective,\n LibAddressAutocompleteByComponentComponent,\n LocalityComponent,\n StreetComponent,\n StreetNumberComponent,\n BoxNumberComponent\n ],\n imports: [\n CommonModule,\n // BrowserModule,\n // BrowserAnimationsModule,\n HttpClientModule,\n FormsModule,\n ReactiveFormsModule,\n TranslateModule,\n ],\n exports: [\n LibAddressAutocompleteByComponentComponent,\n ]\n})\nexport class LibAddressAutocompleteByComponentModule { }\n","import { ADDRESSLEVEL } from '../enum/address-level.enum';\r\n\r\nexport class PrefilledParameters {\r\n\r\n // unstructuredAddress: string;\r\n streetName: string;\r\n streetNumber: string;\r\n boxNumber: string;\r\n postalCode: string;\r\n municipalityName: string;\r\n state: boolean;\r\n minLevel: number;\r\n\r\n // used by the prefill address evaluation process\r\n onFocusShowSuggestionsAfterPrefill = false; // 2020-06-15\r\n\r\n ts: Date = null;\r\n\r\n constructor(init?: Partial<PrefilledParameters>) {\r\n Object.assign(this, init);\r\n if (this.boxNumber && this.boxNumber !== '') {\r\n this.minLevel = ADDRESSLEVEL.BOX_NUMBER;\r\n } else if (this.streetNumber && this.streetNumber !== '') {\r\n this.minLevel = ADDRESSLEVEL.STREET_NUMBER;\r\n } else if (this.streetName && this.streetName !== '') {\r\n this.minLevel = ADDRESSLEVEL.STREET;\r\n } else {\r\n this.minLevel = ADDRESSLEVEL.LOCALITY;\r\n }\r\n\r\n this.ts = new Date();\r\n }\r\n}\r\n"]}