{"version":3,"file":"app-5d3f7ed2.xxxxxxxxxxxxxxxxxxxx.bundle.js","mappings":";;;;;;;;;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;ACtIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;ACVA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;ACtCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;ACjBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;ACjDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;ACPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;ACdA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;ACxDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;ACxDA;;;;;;;;;;ACAA;;;;;;;;;;ACAA;;;;;;;;;;ACAA;;;;;;;;;;ACAA;;;;;;;;;;ACAA;;;;;;;;;;ACAA;;;;;;;;;;ACAA;;;;;;;;;;ACAA;;;;;;;;;;ACAA;;;;;;;;;;ACAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC3SA;AACA;AACA;AAEA;AACA;AACA;AACA;AAGA;AAKA;AACA;AACA;AACA;AACA;AARA;AACA;AAOA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;;AACA;AACA;AAEA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AACA;AA3FA;AADA;AAOA;AACA;AACA;AACA;AATA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACTA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AAMA;AACA;AACA;AACA;AACA;AATA;AACA;AASA;AAEA;AACA;AACA;AACA;AAEA;;AACA;AACA;AACA;AAAA;AACA;AACA;AAGA;AACA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AApEA;AADA;AAQA;AACA;AACA;AACA;AAVA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACXA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAUA;AACA;AACA;AACA;AAZA;AAEA;AAEA;AACA;AAEA;AAMA;AACA;AACA;AAEA;;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAEA;;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AAAA;AACA;AACA;AACA;AAAA;AAEA;;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AApSA;AADA;AAYA;AACA;AACA;AAbA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACXA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AAUA;AACA;AACA;AACA;AACA;AAVA;AACA;AAEA;AACA;AAQA;AAEA;;AACA;AAEA;AACA;AAGA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AAAA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAlEA;AADA;AAYA;AACA;AACA;AACA;AAdA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACbA;AACA;AAEA;AACA;AAGA;AAYA;AACA;AAZA;AAKA;AAGA;AACA;AAIA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAAA;AAEA;;AACA;AACA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AAEA;AACA;AACA;AAEA;AAEA;AACA;AACA;AAjGA;AADA;AAcA;AAbA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACPA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAGA;AAgBA;AACA;AACA;AACA;AACA;AACA;AAjBA;AACA;AAIA;AACA;AAGA;AACA;AAQA;AAEA;;AACA;AACA;AACA;AACA;AAAA;AAEA;;AACA;AACA;AACA;AACA;AAAA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AAAA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAAA;AACA;AACA;AAEA;AACA;AACA;AACA;AAAA;AACA;AACA;AAEA;AAAA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AAAA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AAEA;AACA;AAAA;AACA;AACA;AAEA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AA/LA;AADA;AAkBA;AACA;AACA;AACA;AACA;AArBA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACdA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAGA;AAUA;AACA;AACA;AACA;AACA;AAZA;AACA;AAGA;AAEA;AAMA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AAGA;AACA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AA3EA;AADA;AAYA;AACA;AACA;AACA;AAdA;;;;;;;;;;;;;;;;;ACXA;AAEA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACFA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AAuBA;AACA;AACA;AACA;AArBA;AAEA;AACA;AACA;AACA;AACA;AAIA;AAEA;AAEA;AAEA;AAMA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AAAA;AACA;AACA;AAEA;AACA;AACA;AAAA;AACA;AACA;AAEA;AACA;AACA;AAAA;AACA;AACA;AACA;AAEA;;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAAA;AACA;AAEA;AACA;AAGA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;;AACA;AACA;AAGA;AAAA;AACA;AACA;AACA;AACA;AAAA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AAtOA;AAAA;AAAA;AAAA;AAFA;AADA;AAyBA;AACA;AACA;AA1BA;;;;;;;;;;;;;;;;;ACZA;;AACA;AACA;AACA;AAEA;AAEA;AAEA;AAEA;AAEA;AAEA;AAEA;AAEA;AAEA;AAEA;AAEA;AAEA;AAEA;AAEA;AAEA;AAEA;AAEA;AAEA;AAEA;;;;;;;;;;;;;;;;ACzCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA","sources":["webpack://contact-management-web/./src/app.scss","webpack://contact-management-web/./src/components/column-mapping-view/column-mapping-view.scss","webpack://contact-management-web/./src/components/contact-details-view/contact-details.scss","webpack://contact-management-web/./src/components/get-status-view/get-status-view.scss","webpack://contact-management-web/./src/components/help-view/help-view.scss","webpack://contact-management-web/./src/components/home/home.scss","webpack://contact-management-web/./src/components/preview-view/preview-view.scss","webpack://contact-management-web/./src/components/settings-view/settings-view.scss","webpack://contact-management-web/./src/components/start-import-view/start-import-view.scss","webpack://contact-management-web/./src/app.html","webpack://contact-management-web/./src/components/audit-log-view/audit-log-view.html","webpack://contact-management-web/./src/components/column-mapping-view/column-mapping-view.html","webpack://contact-management-web/./src/components/contact-details-view/contact-details-view.html","webpack://contact-management-web/./src/components/get-status-view/get-status-view.html","webpack://contact-management-web/./src/components/help-view/help-view.html","webpack://contact-management-web/./src/components/home/home.html","webpack://contact-management-web/./src/components/preview-view/preview-view.html","webpack://contact-management-web/./src/components/settings-view/settings-view.html","webpack://contact-management-web/./src/components/start-import-view/start-import-view.html","webpack://contact-management-web/./node_modules/moment/locale/ sync ^\\.\\/.*$","webpack://contact-management-web/./src/app.ts","webpack://contact-management-web/./src/components/audit-log-view/audit-log-view.ts","webpack://contact-management-web/./src/components/column-mapping-view/column-mapping-view.ts","webpack://contact-management-web/./src/components/contact-details-view/contact-details-view.ts","webpack://contact-management-web/./src/components/get-status-view/get-status-view.ts","webpack://contact-management-web/./src/components/home/home.ts","webpack://contact-management-web/./src/components/preview-view/preview-view.ts","webpack://contact-management-web/./src/components/settings-view/settings-view.ts","webpack://contact-management-web/./src/components/start-import-view/start-import-view.ts","webpack://contact-management-web/./src/constants/map-constants.ts","webpack://contact-management-web/./src/environment.ts"],"sourcesContent":["// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n___CSS_LOADER_EXPORT___.push([module.id, \"@import url(https://fonts.googleapis.com/css?family=Open+Sans);\"]);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `body,\nhtml {\n height: 100%;\n font-family: \"Open Sans\";\n background-color: #f0f3f5;\n}\n\nh2 {\n font-weight: bold;\n margin-top: 15px;\n}\n\n.button-default {\n background-color: #eb1562;\n border-color: #eb1562;\n color: #ffffff;\n outline: none !important;\n margin-top: -2px;\n text-shadow: none;\n line-height: 1.42857143;\n text-align: center;\n white-space: nowrap;\n vertical-align: middle;\n touch-action: manipulation;\n cursor: pointer;\n border: none;\n border-radius: 3px;\n position: relative;\n padding: 5px 15px;\n margin: 10px 1px;\n font-size: 15px;\n font-weight: 400;\n letter-spacing: 0;\n will-change: box-shadow, transform;\n transition: box-shadow 0.2s cubic-bezier(0.4, 0, 1, 1), background-color 0.2s cubic-bezier(0.4, 0, 0.2, 1);\n}\n\n.button-default:hover,\n.button-default:focus,\n.button-default:active {\n background-color: #d01458;\n border-color: #d01458;\n color: #ffffff;\n}\n\n.button-secondary {\n background-color: #32424f;\n border-color: #32424f;\n color: #ffffff;\n outline: none !important;\n margin-top: -2px;\n text-shadow: none;\n line-height: 1.42857143;\n text-align: center;\n white-space: nowrap;\n vertical-align: middle;\n touch-action: manipulation;\n cursor: pointer;\n border: none;\n border-radius: 3px;\n position: relative;\n padding: 5px 15px;\n margin: 10px 1px;\n font-size: 15px;\n font-weight: 400;\n letter-spacing: 0;\n will-change: box-shadow, transform;\n transition: box-shadow 0.2s cubic-bezier(0.4, 0, 1, 1), background-color 0.2s cubic-bezier(0.4, 0, 0.2, 1);\n}\n\n.button-secondary:hover,\n.button-secondary:active,\nux-dialog > ux-dialog-footer button:hover:enabled {\n background-color: #eb1562;\n border-color: #eb1562;\n color: #ffffff;\n}\n\n.button-disabled,\n.button-disabled:hover {\n background-color: #32424f;\n border-color: #32424f;\n color: #ffffff;\n opacity: 0.5;\n outline: none !important;\n margin-top: -2px;\n text-shadow: none;\n line-height: 1.42857143;\n text-align: center;\n white-space: nowrap;\n vertical-align: middle;\n border: none;\n border-radius: 3px;\n position: relative;\n padding: 5px 15px;\n margin: 10px 1px;\n font-size: 15px;\n font-weight: 400;\n letter-spacing: 0;\n will-change: box-shadow, transform;\n transition: box-shadow 0.2s cubic-bezier(0.4, 0, 1, 1), background-color 0.2s cubic-bezier(0.4, 0, 0.2, 1);\n}\n\n.href-buttons {\n font-weight: bolder;\n text-decoration: underline;\n}\n\n.inner-container {\n margin: 0 16px;\n}\n\n.disabled {\n pointer-events: none;\n background-color: #e9ecef !important;\n opacity: 1;\n}\n\n.table {\n width: calc(100% + 60px);\n margin: 0 -31px;\n}\n\n.table-hover tbody tr:hover {\n color: #212529;\n background-color: #E7ECEF;\n}`, \"\",{\"version\":3,\"sources\":[\"webpack://./src/app.scss\"],\"names\":[],\"mappings\":\"AAGA;;EAEE,YAAA;EACA,wBAAA;EACA,yBAAA;AADF;;AAIA;EACE,iBAAA;EACA,gBAAA;AADF;;AAIA;EACE,yBAAA;EACA,qBAAA;EACA,cAAA;EACA,wBAAA;EACA,gBAAA;EACA,iBAAA;EACA,uBAAA;EACA,kBAAA;EACA,mBAAA;EACA,sBAAA;EACA,0BAAA;EACA,eAAA;EACA,YAAA;EACA,kBAAA;EACA,kBAAA;EACA,iBAAA;EACA,gBAAA;EACA,eAAA;EACA,gBAAA;EACA,iBAAA;EACA,kCAAA;EACA,0GAAA;AADF;;AAIA;;;EAGE,yBAAA;EACA,qBAAA;EACA,cAAA;AADF;;AAKA;EACE,yBAAA;EACA,qBAAA;EACA,cAAA;EACA,wBAAA;EACA,gBAAA;EACA,iBAAA;EACA,uBAAA;EACA,kBAAA;EACA,mBAAA;EACA,sBAAA;EACA,0BAAA;EACA,eAAA;EACA,YAAA;EACA,kBAAA;EACA,kBAAA;EACA,iBAAA;EACA,gBAAA;EACA,eAAA;EACA,gBAAA;EACA,iBAAA;EACA,kCAAA;EACA,0GAAA;AAFF;;AAKA;;;EAGE,yBAAA;EACA,qBAAA;EACA,cAAA;AAFF;;AAKA;;EAEE,yBAAA;EACA,qBAAA;EACA,cAAA;EACA,YAAA;EACA,wBAAA;EACA,gBAAA;EACA,iBAAA;EACA,uBAAA;EACA,kBAAA;EACA,mBAAA;EACA,sBAAA;EACA,YAAA;EACA,kBAAA;EACA,kBAAA;EACA,iBAAA;EACA,gBAAA;EACA,eAAA;EACA,gBAAA;EACA,iBAAA;EACA,kCAAA;EACA,0GAAA;AAFF;;AAKA;EACE,mBAAA;EACA,0BAAA;AAFF;;AAKA;EACE,cAAA;AAFF;;AAKA;EACE,oBAAA;EACA,oCAAA;EACA,UAAA;AAFF;;AAKA;EACE,wBAAA;EACA,eAAA;AAFF;;AAKA;EACE,cAAA;EACA,yBAAA;AAFF\",\"sourcesContent\":[\"@import url('https://fonts.googleapis.com/css?family=Open+Sans');\\n$font-stack: \\\"Open Sans\\\"-serif;\\n\\nbody,\\nhtml {\\n height: 100%;\\n font-family: \\\"Open Sans\\\";\\n background-color: #f0f3f5;\\n}\\n\\nh2 {\\n font-weight: bold;\\n margin-top: 15px;\\n}\\n\\n.button-default {\\n background-color: #eb1562;\\n border-color: #eb1562;\\n color: #ffffff;\\n outline: none !important;\\n margin-top: -2px;\\n text-shadow: none;\\n line-height: 1.42857143;\\n text-align: center;\\n white-space: nowrap;\\n vertical-align: middle;\\n touch-action: manipulation;\\n cursor: pointer;\\n border: none;\\n border-radius: 3px;\\n position: relative;\\n padding: 5px 15px;\\n margin: 10px 1px;\\n font-size: 15px;\\n font-weight: 400;\\n letter-spacing: 0;\\n will-change: box-shadow, transform;\\n transition: box-shadow 0.2s cubic-bezier(0.4, 0, 1, 1), background-color 0.2s cubic-bezier(0.4, 0, 0.2, 1);\\n}\\n\\n.button-default:hover,\\n.button-default:focus,\\n.button-default:active {\\n background-color: #d01458;\\n border-color: #d01458;\\n color: #ffffff;\\n}\\n\\n\\n.button-secondary {\\n background-color: #32424f;\\n border-color: #32424f;\\n color: #ffffff;\\n outline: none !important;\\n margin-top: -2px;\\n text-shadow: none;\\n line-height: 1.42857143;\\n text-align: center;\\n white-space: nowrap;\\n vertical-align: middle;\\n touch-action: manipulation;\\n cursor: pointer;\\n border: none;\\n border-radius: 3px;\\n position: relative;\\n padding: 5px 15px;\\n margin: 10px 1px;\\n font-size: 15px;\\n font-weight: 400;\\n letter-spacing: 0;\\n will-change: box-shadow, transform;\\n transition: box-shadow 0.2s cubic-bezier(0.4, 0, 1, 1), background-color 0.2s cubic-bezier(0.4, 0, 0.2, 1);\\n}\\n\\n.button-secondary:hover,\\n.button-secondary:active,\\nux-dialog>ux-dialog-footer button:hover:enabled {\\n background-color: #eb1562;\\n border-color: #eb1562;\\n color: #ffffff;\\n}\\n\\n.button-disabled,\\n.button-disabled:hover {\\n background-color: #32424f;\\n border-color: #32424f;\\n color: #ffffff;\\n opacity: 0.5;\\n outline: none !important;\\n margin-top: -2px;\\n text-shadow: none;\\n line-height: 1.42857143;\\n text-align: center;\\n white-space: nowrap;\\n vertical-align: middle;\\n border: none;\\n border-radius: 3px;\\n position: relative;\\n padding: 5px 15px;\\n margin: 10px 1px;\\n font-size: 15px;\\n font-weight: 400;\\n letter-spacing: 0;\\n will-change: box-shadow, transform;\\n transition: box-shadow 0.2s cubic-bezier(0.4, 0, 1, 1), background-color 0.2s cubic-bezier(0.4, 0, 0.2, 1);\\n}\\n\\n.href-buttons {\\n font-weight: bolder;\\n text-decoration: underline;\\n}\\n\\n.inner-container {\\n margin: 0 16px;\\n}\\n\\n.disabled {\\n pointer-events: none;\\n background-color: #e9ecef !important;\\n opacity: 1;\\n}\\n\\n.table {\\n width: calc(100% + 60px);\\n margin: 0 -31px;\\n}\\n\\n.table-hover tbody tr:hover {\\n color: #212529;\\n background-color: #E7ECEF;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `.column-margin {\n margin-top: 30px;\n display: block;\n}`, \"\",{\"version\":3,\"sources\":[\"webpack://./src/components/column-mapping-view/column-mapping-view.scss\"],\"names\":[],\"mappings\":\"AAAA;EACE,gBAAA;EACA,cAAA;AACF\",\"sourcesContent\":[\".column-margin {\\n margin-top: 30px;\\n display: block;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `th,\ntd {\n padding: 5px;\n text-align: left;\n}\n\ntd {\n padding-right: 60px;\n}\n\nth {\n padding-right: 15px;\n}\n\n.table-contacts-margin {\n height: 30px;\n}\n\n.contacts-margin {\n margin-top: 3px;\n display: block;\n}\n\n.contact-details-notes {\n max-height: 100px;\n max-width: 500px;\n overflow: auto;\n}\n\n.contact-detail-table th {\n vertical-align: top;\n}`, \"\",{\"version\":3,\"sources\":[\"webpack://./src/components/contact-details-view/contact-details.scss\"],\"names\":[],\"mappings\":\"AAAA;;EAEE,YAAA;EACA,gBAAA;AACF;;AAEA;EACE,mBAAA;AACF;;AAEA;EACE,mBAAA;AACF;;AAEA;EACE,YAAA;AACF;;AAEA;EACE,eAAA;EACA,cAAA;AACF;;AAEA;EACE,iBAAA;EACA,gBAAA;EACA,cAAA;AACF;;AAEA;EACE,mBAAA;AACF\",\"sourcesContent\":[\"th,\\ntd {\\n padding: 5px;\\n text-align: left;\\n}\\n\\ntd {\\n padding-right: 60px;\\n}\\n\\nth {\\n padding-right: 15px;\\n}\\n\\n.table-contacts-margin {\\n height: 30px;\\n}\\n\\n.contacts-margin {\\n margin-top: 3px;\\n display: block;\\n}\\n\\n.contact-details-notes {\\n max-height: 100px;\\n max-width: 500px;\\n overflow: auto;\\n}\\n\\n.contact-detail-table th {\\n vertical-align: top;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `.progress {\n width: 50%;\n}\n\n.status-view-row {\n width: 51%;\n display: flex;\n flex-wrap: wrap;\n margin-right: -15px;\n margin-left: -15px;\n}`, \"\",{\"version\":3,\"sources\":[\"webpack://./src/components/get-status-view/get-status-view.scss\"],\"names\":[],\"mappings\":\"AAAA;EAEE,UAAA;AAAF;;AAGA;EAEE,UAAA;EACA,aAAA;EACA,eAAA;EACA,mBAAA;EACA,kBAAA;AADF\",\"sourcesContent\":[\".progress\\n{\\n width: 50%; \\n}\\n\\n.status-view-row\\n{\\n width: 51%;\\n display: flex;\\n flex-wrap: wrap;\\n margin-right: -15px;\\n margin-left: -15px;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `.bold {\n font-weight: bold;\n}\n\n.italic {\n font-style: italic;\n}\n\n.underline {\n text-decoration: underline;\n}\n\narticle {\n margin: 0 30px;\n}\narticle h2 {\n margin-bottom: 1.5rem;\n}\narticle ul {\n list-style-type: disc;\n padding-left: 2rem;\n}\narticle ol ul {\n list-style-type: circle;\n}\narticle .accordion .card-header {\n padding: 0.5rem 1rem;\n}\narticle .accordion .card-header h2 {\n margin-top: 0;\n}\narticle .accordion .card-header h2 button {\n color: black;\n font-weight: bold;\n}\narticle .accordion .card-header h2 button i {\n margin: 5px;\n transition: 0.2s ease-in-out;\n}\narticle .accordion .card-header h2 button:not(.collapsed) i {\n transform: rotate(90deg);\n transition: 0.2s ease-in-out;\n}`, \"\",{\"version\":3,\"sources\":[\"webpack://./src/components/help-view/help-view.scss\"],\"names\":[],\"mappings\":\"AAAA;EACE,iBAAA;AACF;;AACA;EACE,kBAAA;AAEF;;AAAA;EACE,0BAAA;AAGF;;AAAA;EACE,cAAA;AAGF;AAFE;EACE,qBAAA;AAIJ;AAFE;EACE,qBAAA;EACA,kBAAA;AAIJ;AAFE;EACE,uBAAA;AAIJ;AADI;EACE,oBAAA;AAGN;AAFM;EACE,aAAA;AAIR;AAHQ;EACE,YAAA;EACA,iBAAA;AAKV;AAJU;EACE,WAAA;EACA,4BAAA;AAMZ;AAHY;EACE,wBAAA;EACA,4BAAA;AAKd\",\"sourcesContent\":[\".bold {\\n font-weight: bold;\\n}\\n.italic {\\n font-style: italic;\\n}\\n.underline {\\n text-decoration: underline;\\n}\\n\\narticle {\\n margin: 0 30px;\\n h2 {\\n margin-bottom: 1.5rem;\\n }\\n ul {\\n list-style-type: disc;\\n padding-left: 2rem;\\n }\\n ol ul {\\n list-style-type: circle;\\n }\\n .accordion {\\n .card-header {\\n padding: 0.5rem 1rem;\\n h2 {\\n margin-top: 0;\\n button {\\n color: black;\\n font-weight: bold;\\n i {\\n margin: 5px;\\n transition: 0.2s ease-in-out;\\n }\\n &:not(.collapsed) {\\n i {\\n transform: rotate(90deg);\\n transition: 0.2s ease-in-out;\\n }\\n }\\n }\\n }\\n }\\n }\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, ``, \"\",{\"version\":3,\"sources\":[],\"names\":[],\"mappings\":\"\",\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `.container-fluid {\n overflow: auto;\n}\n\n.column-spacer {\n min-width: 20px;\n padding: 0 !important;\n}`, \"\",{\"version\":3,\"sources\":[\"webpack://./src/components/preview-view/preview-view.scss\"],\"names\":[],\"mappings\":\"AAAA;EACE,cAAA;AACF;;AAEA;EACE,eAAA;EACA,qBAAA;AACF\",\"sourcesContent\":[\".container-fluid {\\n overflow: auto;\\n}\\n\\n.column-spacer {\\n min-width: 20px;\\n padding: 0 !important;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `.settings-columns-field {\n border-width: 1px;\n border-radius: 3px;\n width: 70px;\n}\n\n.settings-file-name-field {\n border-width: 1px;\n border-radius: 3px;\n width: 200px;\n}\n\n.settings-sheet-name-field {\n border-width: 1px;\n border-radius: 3px;\n width: 120px;\n}\n\n.setting-path-field {\n color: #6c757d;\n}\n\n.settings-header-rows {\n padding-left: 15px;\n font-weight: bold;\n}\n\n.settings-ml-4,\n.settings-mx-4 {\n margin-left: 26.7px !important;\n}\n\n.settings-ml-5,\n.settings-mx-5 {\n margin-left: 4.8rem !important;\n}\n\n.settings-margin {\n margin-top: 25px;\n display: block;\n}\n\n.settings-table {\n width: 50%;\n}\n\n.settings-table-hover tbody tr:hover {\n color: #212529;\n background-color: #E7ECEF;\n}`, \"\",{\"version\":3,\"sources\":[\"webpack://./src/components/settings-view/settings-view.scss\"],\"names\":[],\"mappings\":\"AAAA;EACE,iBAAA;EACA,kBAAA;EACA,WAAA;AACF;;AACA;EACE,iBAAA;EACA,kBAAA;EACA,YAAA;AAEF;;AAAA;EACE,iBAAA;EACA,kBAAA;EACA,YAAA;AAGF;;AADA;EACE,cAAA;AAIF;;AAFA;EACE,kBAAA;EACA,iBAAA;AAKF;;AAHA;;EAEE,8BAAA;AAMF;;AAJA;;EAEE,8BAAA;AAOF;;AALA;EACE,gBAAA;EACA,cAAA;AAQF;;AALA;EACE,UAAA;AAQF;;AALA;EACE,cAAA;EACA,yBAAA;AAQF\",\"sourcesContent\":[\".settings-columns-field {\\n border-width: 1px;\\n border-radius: 3px;\\n width: 70px;\\n}\\n.settings-file-name-field {\\n border-width: 1px;\\n border-radius: 3px;\\n width: 200px;\\n}\\n.settings-sheet-name-field {\\n border-width: 1px;\\n border-radius: 3px;\\n width: 120px;\\n}\\n.setting-path-field {\\n color: #6c757d;\\n}\\n.settings-header-rows {\\n padding-left: 15px;\\n font-weight: bold;\\n}\\n.settings-ml-4,\\n.settings-mx-4 {\\n margin-left: 26.7px !important;\\n}\\n.settings-ml-5,\\n.settings-mx-5 {\\n margin-left: 4.8rem !important;\\n}\\n.settings-margin {\\n margin-top: 25px;\\n display: block;\\n}\\n\\n.settings-table {\\n width: 50%;\\n}\\n\\n.settings-table-hover tbody tr:hover {\\n color: #212529;\\n background-color: #E7ECEF;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `section {\n margin: 0 20px;\n}\n\na:focus {\n outline: none;\n}\n\n.navbar-nav li.loader {\n margin: 12px 24px 0 6px;\n}\n\n.no-selection {\n margin: 20px;\n}\n\n.contact-list {\n overflow-y: auto;\n border: 1px solid #ddd;\n padding: 10px;\n}\n\n.panel {\n margin: 20px;\n}\n\n.button-bar {\n right: 0;\n left: 0;\n bottom: 0;\n border-top: 1px solid #ddd;\n background: white;\n}\n\n.button-bar > button {\n float: right;\n margin: 20px;\n}\n\nli.list-group-item {\n list-style: none;\n}\n\nli.list-group-item > a {\n text-decoration: none;\n}\n\nli.list-group-item.active > a {\n color: white;\n}`, \"\",{\"version\":3,\"sources\":[\"webpack://./src/components/start-import-view/start-import-view.scss\"],\"names\":[],\"mappings\":\"AAAA;EACE,cAAA;AACF;;AAEA;EACE,aAAA;AACF;;AAEA;EACI,uBAAA;AACJ;;AAEA;EACE,YAAA;AACF;;AAEA;EACE,gBAAA;EACA,sBAAA;EACA,aAAA;AACF;;AAEA;EACE,YAAA;AACF;;AAEA;EACE,QAAA;EACA,OAAA;EACA,SAAA;EACA,0BAAA;EACA,iBAAA;AACF;;AAEA;EACE,YAAA;EACA,YAAA;AACF;;AAEA;EACE,gBAAA;AACF;;AAEA;EACE,qBAAA;AACF;;AAEA;EACE,YAAA;AACF\",\"sourcesContent\":[\"section {\\n margin: 0 20px;\\n}\\n\\na:focus {\\n outline: none;\\n}\\n\\n.navbar-nav li.loader {\\n margin: 12px 24px 0 6px;\\n}\\n\\n.no-selection {\\n margin: 20px;\\n}\\n\\n.contact-list {\\n overflow-y: auto;\\n border: 1px solid #ddd;\\n padding: 10px;\\n}\\n\\n.panel {\\n margin: 20px;\\n}\\n\\n.button-bar {\\n right: 0;\\n left: 0;\\n bottom: 0;\\n border-top: 1px solid #ddd;\\n background: white;\\n}\\n\\n.button-bar > button {\\n float: right;\\n margin: 20px;\\n}\\n\\nli.list-group-item {\\n list-style: none;\\n}\\n\\nli.list-group-item > a {\\n text-decoration: none;\\n}\\n\\nli.list-group-item.active > a {\\n color: white;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","module.exports = \"\\n\";","module.exports = \"\\n\";","module.exports = \"\\n\";","module.exports = \"\\n\";","module.exports = \"\\n\";","module.exports = \"\\n\";","module.exports = \"\\n\";","module.exports = \"\\n\";","module.exports = \"\\n\";","module.exports = \"\\n\";","var map = {\n\t\"./af\": \"./node_modules/moment/locale/af.js\",\n\t\"./af.js\": \"./node_modules/moment/locale/af.js\",\n\t\"./am-et\": \"./node_modules/moment/locale/am-et.js\",\n\t\"./am-et.js\": \"./node_modules/moment/locale/am-et.js\",\n\t\"./ar\": \"./node_modules/moment/locale/ar.js\",\n\t\"./ar-dz\": \"./node_modules/moment/locale/ar-dz.js\",\n\t\"./ar-dz.js\": \"./node_modules/moment/locale/ar-dz.js\",\n\t\"./ar-kw\": \"./node_modules/moment/locale/ar-kw.js\",\n\t\"./ar-kw.js\": \"./node_modules/moment/locale/ar-kw.js\",\n\t\"./ar-ly\": \"./node_modules/moment/locale/ar-ly.js\",\n\t\"./ar-ly.js\": \"./node_modules/moment/locale/ar-ly.js\",\n\t\"./ar-ma\": \"./node_modules/moment/locale/ar-ma.js\",\n\t\"./ar-ma.js\": \"./node_modules/moment/locale/ar-ma.js\",\n\t\"./ar-ps\": \"./node_modules/moment/locale/ar-ps.js\",\n\t\"./ar-ps.js\": \"./node_modules/moment/locale/ar-ps.js\",\n\t\"./ar-sa\": \"./node_modules/moment/locale/ar-sa.js\",\n\t\"./ar-sa.js\": \"./node_modules/moment/locale/ar-sa.js\",\n\t\"./ar-tn\": \"./node_modules/moment/locale/ar-tn.js\",\n\t\"./ar-tn.js\": \"./node_modules/moment/locale/ar-tn.js\",\n\t\"./ar.js\": \"./node_modules/moment/locale/ar.js\",\n\t\"./az\": \"./node_modules/moment/locale/az.js\",\n\t\"./az.js\": \"./node_modules/moment/locale/az.js\",\n\t\"./be\": \"./node_modules/moment/locale/be.js\",\n\t\"./be.js\": \"./node_modules/moment/locale/be.js\",\n\t\"./bg\": \"./node_modules/moment/locale/bg.js\",\n\t\"./bg.js\": \"./node_modules/moment/locale/bg.js\",\n\t\"./bm\": \"./node_modules/moment/locale/bm.js\",\n\t\"./bm.js\": \"./node_modules/moment/locale/bm.js\",\n\t\"./bn\": \"./node_modules/moment/locale/bn.js\",\n\t\"./bn-bd\": \"./node_modules/moment/locale/bn-bd.js\",\n\t\"./bn-bd.js\": \"./node_modules/moment/locale/bn-bd.js\",\n\t\"./bn.js\": \"./node_modules/moment/locale/bn.js\",\n\t\"./bo\": \"./node_modules/moment/locale/bo.js\",\n\t\"./bo.js\": \"./node_modules/moment/locale/bo.js\",\n\t\"./br\": \"./node_modules/moment/locale/br.js\",\n\t\"./br.js\": \"./node_modules/moment/locale/br.js\",\n\t\"./bs\": \"./node_modules/moment/locale/bs.js\",\n\t\"./bs.js\": \"./node_modules/moment/locale/bs.js\",\n\t\"./ca\": \"./node_modules/moment/locale/ca.js\",\n\t\"./ca.js\": \"./node_modules/moment/locale/ca.js\",\n\t\"./cs\": \"./node_modules/moment/locale/cs.js\",\n\t\"./cs.js\": \"./node_modules/moment/locale/cs.js\",\n\t\"./cv\": \"./node_modules/moment/locale/cv.js\",\n\t\"./cv.js\": \"./node_modules/moment/locale/cv.js\",\n\t\"./cy\": \"./node_modules/moment/locale/cy.js\",\n\t\"./cy.js\": \"./node_modules/moment/locale/cy.js\",\n\t\"./da\": \"./node_modules/moment/locale/da.js\",\n\t\"./da.js\": \"./node_modules/moment/locale/da.js\",\n\t\"./de\": \"./node_modules/moment/locale/de.js\",\n\t\"./de-at\": \"./node_modules/moment/locale/de-at.js\",\n\t\"./de-at.js\": \"./node_modules/moment/locale/de-at.js\",\n\t\"./de-ch\": \"./node_modules/moment/locale/de-ch.js\",\n\t\"./de-ch.js\": \"./node_modules/moment/locale/de-ch.js\",\n\t\"./de.js\": \"./node_modules/moment/locale/de.js\",\n\t\"./dv\": \"./node_modules/moment/locale/dv.js\",\n\t\"./dv.js\": \"./node_modules/moment/locale/dv.js\",\n\t\"./el\": \"./node_modules/moment/locale/el.js\",\n\t\"./el.js\": \"./node_modules/moment/locale/el.js\",\n\t\"./en-au\": \"./node_modules/moment/locale/en-au.js\",\n\t\"./en-au.js\": \"./node_modules/moment/locale/en-au.js\",\n\t\"./en-ca\": \"./node_modules/moment/locale/en-ca.js\",\n\t\"./en-ca.js\": \"./node_modules/moment/locale/en-ca.js\",\n\t\"./en-gb\": \"./node_modules/moment/locale/en-gb.js\",\n\t\"./en-gb.js\": \"./node_modules/moment/locale/en-gb.js\",\n\t\"./en-ie\": \"./node_modules/moment/locale/en-ie.js\",\n\t\"./en-ie.js\": \"./node_modules/moment/locale/en-ie.js\",\n\t\"./en-il\": \"./node_modules/moment/locale/en-il.js\",\n\t\"./en-il.js\": \"./node_modules/moment/locale/en-il.js\",\n\t\"./en-in\": \"./node_modules/moment/locale/en-in.js\",\n\t\"./en-in.js\": \"./node_modules/moment/locale/en-in.js\",\n\t\"./en-nz\": \"./node_modules/moment/locale/en-nz.js\",\n\t\"./en-nz.js\": \"./node_modules/moment/locale/en-nz.js\",\n\t\"./en-sg\": \"./node_modules/moment/locale/en-sg.js\",\n\t\"./en-sg.js\": \"./node_modules/moment/locale/en-sg.js\",\n\t\"./eo\": \"./node_modules/moment/locale/eo.js\",\n\t\"./eo.js\": \"./node_modules/moment/locale/eo.js\",\n\t\"./es\": \"./node_modules/moment/locale/es.js\",\n\t\"./es-do\": \"./node_modules/moment/locale/es-do.js\",\n\t\"./es-do.js\": \"./node_modules/moment/locale/es-do.js\",\n\t\"./es-mx\": \"./node_modules/moment/locale/es-mx.js\",\n\t\"./es-mx.js\": \"./node_modules/moment/locale/es-mx.js\",\n\t\"./es-us\": \"./node_modules/moment/locale/es-us.js\",\n\t\"./es-us.js\": \"./node_modules/moment/locale/es-us.js\",\n\t\"./es.js\": \"./node_modules/moment/locale/es.js\",\n\t\"./et\": \"./node_modules/moment/locale/et.js\",\n\t\"./et.js\": \"./node_modules/moment/locale/et.js\",\n\t\"./eu\": \"./node_modules/moment/locale/eu.js\",\n\t\"./eu.js\": \"./node_modules/moment/locale/eu.js\",\n\t\"./fa\": \"./node_modules/moment/locale/fa.js\",\n\t\"./fa.js\": \"./node_modules/moment/locale/fa.js\",\n\t\"./fi\": \"./node_modules/moment/locale/fi.js\",\n\t\"./fi.js\": \"./node_modules/moment/locale/fi.js\",\n\t\"./fil\": \"./node_modules/moment/locale/fil.js\",\n\t\"./fil.js\": \"./node_modules/moment/locale/fil.js\",\n\t\"./fo\": \"./node_modules/moment/locale/fo.js\",\n\t\"./fo.js\": \"./node_modules/moment/locale/fo.js\",\n\t\"./fr\": \"./node_modules/moment/locale/fr.js\",\n\t\"./fr-ca\": \"./node_modules/moment/locale/fr-ca.js\",\n\t\"./fr-ca.js\": \"./node_modules/moment/locale/fr-ca.js\",\n\t\"./fr-ch\": \"./node_modules/moment/locale/fr-ch.js\",\n\t\"./fr-ch.js\": \"./node_modules/moment/locale/fr-ch.js\",\n\t\"./fr.js\": \"./node_modules/moment/locale/fr.js\",\n\t\"./fy\": \"./node_modules/moment/locale/fy.js\",\n\t\"./fy.js\": \"./node_modules/moment/locale/fy.js\",\n\t\"./ga\": \"./node_modules/moment/locale/ga.js\",\n\t\"./ga.js\": \"./node_modules/moment/locale/ga.js\",\n\t\"./gd\": \"./node_modules/moment/locale/gd.js\",\n\t\"./gd.js\": \"./node_modules/moment/locale/gd.js\",\n\t\"./gl\": \"./node_modules/moment/locale/gl.js\",\n\t\"./gl.js\": \"./node_modules/moment/locale/gl.js\",\n\t\"./gom-deva\": \"./node_modules/moment/locale/gom-deva.js\",\n\t\"./gom-deva.js\": \"./node_modules/moment/locale/gom-deva.js\",\n\t\"./gom-latn\": \"./node_modules/moment/locale/gom-latn.js\",\n\t\"./gom-latn.js\": \"./node_modules/moment/locale/gom-latn.js\",\n\t\"./gu\": \"./node_modules/moment/locale/gu.js\",\n\t\"./gu.js\": \"./node_modules/moment/locale/gu.js\",\n\t\"./he\": \"./node_modules/moment/locale/he.js\",\n\t\"./he.js\": \"./node_modules/moment/locale/he.js\",\n\t\"./hi\": \"./node_modules/moment/locale/hi.js\",\n\t\"./hi.js\": \"./node_modules/moment/locale/hi.js\",\n\t\"./hr\": \"./node_modules/moment/locale/hr.js\",\n\t\"./hr.js\": \"./node_modules/moment/locale/hr.js\",\n\t\"./hu\": \"./node_modules/moment/locale/hu.js\",\n\t\"./hu.js\": \"./node_modules/moment/locale/hu.js\",\n\t\"./hy-am\": \"./node_modules/moment/locale/hy-am.js\",\n\t\"./hy-am.js\": \"./node_modules/moment/locale/hy-am.js\",\n\t\"./id\": \"./node_modules/moment/locale/id.js\",\n\t\"./id.js\": \"./node_modules/moment/locale/id.js\",\n\t\"./is\": \"./node_modules/moment/locale/is.js\",\n\t\"./is.js\": \"./node_modules/moment/locale/is.js\",\n\t\"./it\": \"./node_modules/moment/locale/it.js\",\n\t\"./it-ch\": \"./node_modules/moment/locale/it-ch.js\",\n\t\"./it-ch.js\": \"./node_modules/moment/locale/it-ch.js\",\n\t\"./it.js\": \"./node_modules/moment/locale/it.js\",\n\t\"./ja\": \"./node_modules/moment/locale/ja.js\",\n\t\"./ja.js\": \"./node_modules/moment/locale/ja.js\",\n\t\"./jv\": \"./node_modules/moment/locale/jv.js\",\n\t\"./jv.js\": \"./node_modules/moment/locale/jv.js\",\n\t\"./ka\": \"./node_modules/moment/locale/ka.js\",\n\t\"./ka.js\": \"./node_modules/moment/locale/ka.js\",\n\t\"./kk\": \"./node_modules/moment/locale/kk.js\",\n\t\"./kk.js\": \"./node_modules/moment/locale/kk.js\",\n\t\"./km\": \"./node_modules/moment/locale/km.js\",\n\t\"./km.js\": \"./node_modules/moment/locale/km.js\",\n\t\"./kn\": \"./node_modules/moment/locale/kn.js\",\n\t\"./kn.js\": \"./node_modules/moment/locale/kn.js\",\n\t\"./ko\": \"./node_modules/moment/locale/ko.js\",\n\t\"./ko.js\": \"./node_modules/moment/locale/ko.js\",\n\t\"./ku\": \"./node_modules/moment/locale/ku.js\",\n\t\"./ku-kmr\": \"./node_modules/moment/locale/ku-kmr.js\",\n\t\"./ku-kmr.js\": \"./node_modules/moment/locale/ku-kmr.js\",\n\t\"./ku.js\": \"./node_modules/moment/locale/ku.js\",\n\t\"./ky\": \"./node_modules/moment/locale/ky.js\",\n\t\"./ky.js\": \"./node_modules/moment/locale/ky.js\",\n\t\"./lb\": \"./node_modules/moment/locale/lb.js\",\n\t\"./lb.js\": \"./node_modules/moment/locale/lb.js\",\n\t\"./lo\": \"./node_modules/moment/locale/lo.js\",\n\t\"./lo.js\": \"./node_modules/moment/locale/lo.js\",\n\t\"./lt\": \"./node_modules/moment/locale/lt.js\",\n\t\"./lt.js\": \"./node_modules/moment/locale/lt.js\",\n\t\"./lv\": \"./node_modules/moment/locale/lv.js\",\n\t\"./lv.js\": \"./node_modules/moment/locale/lv.js\",\n\t\"./me\": \"./node_modules/moment/locale/me.js\",\n\t\"./me.js\": \"./node_modules/moment/locale/me.js\",\n\t\"./mi\": \"./node_modules/moment/locale/mi.js\",\n\t\"./mi.js\": \"./node_modules/moment/locale/mi.js\",\n\t\"./mk\": \"./node_modules/moment/locale/mk.js\",\n\t\"./mk.js\": \"./node_modules/moment/locale/mk.js\",\n\t\"./ml\": \"./node_modules/moment/locale/ml.js\",\n\t\"./ml.js\": \"./node_modules/moment/locale/ml.js\",\n\t\"./mn\": \"./node_modules/moment/locale/mn.js\",\n\t\"./mn.js\": \"./node_modules/moment/locale/mn.js\",\n\t\"./mr\": \"./node_modules/moment/locale/mr.js\",\n\t\"./mr.js\": \"./node_modules/moment/locale/mr.js\",\n\t\"./ms\": \"./node_modules/moment/locale/ms.js\",\n\t\"./ms-my\": \"./node_modules/moment/locale/ms-my.js\",\n\t\"./ms-my.js\": \"./node_modules/moment/locale/ms-my.js\",\n\t\"./ms.js\": \"./node_modules/moment/locale/ms.js\",\n\t\"./mt\": \"./node_modules/moment/locale/mt.js\",\n\t\"./mt.js\": \"./node_modules/moment/locale/mt.js\",\n\t\"./my\": \"./node_modules/moment/locale/my.js\",\n\t\"./my.js\": \"./node_modules/moment/locale/my.js\",\n\t\"./nb\": \"./node_modules/moment/locale/nb.js\",\n\t\"./nb.js\": \"./node_modules/moment/locale/nb.js\",\n\t\"./ne\": \"./node_modules/moment/locale/ne.js\",\n\t\"./ne.js\": \"./node_modules/moment/locale/ne.js\",\n\t\"./nl\": \"./node_modules/moment/locale/nl.js\",\n\t\"./nl-be\": \"./node_modules/moment/locale/nl-be.js\",\n\t\"./nl-be.js\": \"./node_modules/moment/locale/nl-be.js\",\n\t\"./nl.js\": \"./node_modules/moment/locale/nl.js\",\n\t\"./nn\": \"./node_modules/moment/locale/nn.js\",\n\t\"./nn.js\": \"./node_modules/moment/locale/nn.js\",\n\t\"./oc-lnc\": \"./node_modules/moment/locale/oc-lnc.js\",\n\t\"./oc-lnc.js\": \"./node_modules/moment/locale/oc-lnc.js\",\n\t\"./pa-in\": \"./node_modules/moment/locale/pa-in.js\",\n\t\"./pa-in.js\": \"./node_modules/moment/locale/pa-in.js\",\n\t\"./pl\": \"./node_modules/moment/locale/pl.js\",\n\t\"./pl.js\": \"./node_modules/moment/locale/pl.js\",\n\t\"./ps\": \"./node_modules/moment/locale/ps.js\",\n\t\"./ps.js\": \"./node_modules/moment/locale/ps.js\",\n\t\"./pt\": \"./node_modules/moment/locale/pt.js\",\n\t\"./pt-br\": \"./node_modules/moment/locale/pt-br.js\",\n\t\"./pt-br.js\": \"./node_modules/moment/locale/pt-br.js\",\n\t\"./pt.js\": \"./node_modules/moment/locale/pt.js\",\n\t\"./ro\": \"./node_modules/moment/locale/ro.js\",\n\t\"./ro.js\": \"./node_modules/moment/locale/ro.js\",\n\t\"./ru\": \"./node_modules/moment/locale/ru.js\",\n\t\"./ru.js\": \"./node_modules/moment/locale/ru.js\",\n\t\"./sd\": \"./node_modules/moment/locale/sd.js\",\n\t\"./sd.js\": \"./node_modules/moment/locale/sd.js\",\n\t\"./se\": \"./node_modules/moment/locale/se.js\",\n\t\"./se.js\": \"./node_modules/moment/locale/se.js\",\n\t\"./si\": \"./node_modules/moment/locale/si.js\",\n\t\"./si.js\": \"./node_modules/moment/locale/si.js\",\n\t\"./sk\": \"./node_modules/moment/locale/sk.js\",\n\t\"./sk.js\": \"./node_modules/moment/locale/sk.js\",\n\t\"./sl\": \"./node_modules/moment/locale/sl.js\",\n\t\"./sl.js\": \"./node_modules/moment/locale/sl.js\",\n\t\"./sq\": \"./node_modules/moment/locale/sq.js\",\n\t\"./sq.js\": \"./node_modules/moment/locale/sq.js\",\n\t\"./sr\": \"./node_modules/moment/locale/sr.js\",\n\t\"./sr-cyrl\": \"./node_modules/moment/locale/sr-cyrl.js\",\n\t\"./sr-cyrl.js\": \"./node_modules/moment/locale/sr-cyrl.js\",\n\t\"./sr.js\": \"./node_modules/moment/locale/sr.js\",\n\t\"./ss\": \"./node_modules/moment/locale/ss.js\",\n\t\"./ss.js\": \"./node_modules/moment/locale/ss.js\",\n\t\"./sv\": \"./node_modules/moment/locale/sv.js\",\n\t\"./sv.js\": \"./node_modules/moment/locale/sv.js\",\n\t\"./sw\": \"./node_modules/moment/locale/sw.js\",\n\t\"./sw.js\": \"./node_modules/moment/locale/sw.js\",\n\t\"./ta\": \"./node_modules/moment/locale/ta.js\",\n\t\"./ta.js\": \"./node_modules/moment/locale/ta.js\",\n\t\"./te\": \"./node_modules/moment/locale/te.js\",\n\t\"./te.js\": \"./node_modules/moment/locale/te.js\",\n\t\"./tet\": \"./node_modules/moment/locale/tet.js\",\n\t\"./tet.js\": \"./node_modules/moment/locale/tet.js\",\n\t\"./tg\": \"./node_modules/moment/locale/tg.js\",\n\t\"./tg.js\": \"./node_modules/moment/locale/tg.js\",\n\t\"./th\": \"./node_modules/moment/locale/th.js\",\n\t\"./th.js\": \"./node_modules/moment/locale/th.js\",\n\t\"./tk\": \"./node_modules/moment/locale/tk.js\",\n\t\"./tk.js\": \"./node_modules/moment/locale/tk.js\",\n\t\"./tl-ph\": \"./node_modules/moment/locale/tl-ph.js\",\n\t\"./tl-ph.js\": \"./node_modules/moment/locale/tl-ph.js\",\n\t\"./tlh\": \"./node_modules/moment/locale/tlh.js\",\n\t\"./tlh.js\": \"./node_modules/moment/locale/tlh.js\",\n\t\"./tr\": \"./node_modules/moment/locale/tr.js\",\n\t\"./tr.js\": \"./node_modules/moment/locale/tr.js\",\n\t\"./tzl\": \"./node_modules/moment/locale/tzl.js\",\n\t\"./tzl.js\": \"./node_modules/moment/locale/tzl.js\",\n\t\"./tzm\": \"./node_modules/moment/locale/tzm.js\",\n\t\"./tzm-latn\": \"./node_modules/moment/locale/tzm-latn.js\",\n\t\"./tzm-latn.js\": \"./node_modules/moment/locale/tzm-latn.js\",\n\t\"./tzm.js\": \"./node_modules/moment/locale/tzm.js\",\n\t\"./ug-cn\": \"./node_modules/moment/locale/ug-cn.js\",\n\t\"./ug-cn.js\": \"./node_modules/moment/locale/ug-cn.js\",\n\t\"./uk\": \"./node_modules/moment/locale/uk.js\",\n\t\"./uk.js\": \"./node_modules/moment/locale/uk.js\",\n\t\"./ur\": \"./node_modules/moment/locale/ur.js\",\n\t\"./ur.js\": \"./node_modules/moment/locale/ur.js\",\n\t\"./uz\": \"./node_modules/moment/locale/uz.js\",\n\t\"./uz-latn\": \"./node_modules/moment/locale/uz-latn.js\",\n\t\"./uz-latn.js\": \"./node_modules/moment/locale/uz-latn.js\",\n\t\"./uz.js\": \"./node_modules/moment/locale/uz.js\",\n\t\"./vi\": \"./node_modules/moment/locale/vi.js\",\n\t\"./vi.js\": \"./node_modules/moment/locale/vi.js\",\n\t\"./x-pseudo\": \"./node_modules/moment/locale/x-pseudo.js\",\n\t\"./x-pseudo.js\": \"./node_modules/moment/locale/x-pseudo.js\",\n\t\"./yo\": \"./node_modules/moment/locale/yo.js\",\n\t\"./yo.js\": \"./node_modules/moment/locale/yo.js\",\n\t\"./zh-cn\": \"./node_modules/moment/locale/zh-cn.js\",\n\t\"./zh-cn.js\": \"./node_modules/moment/locale/zh-cn.js\",\n\t\"./zh-hk\": \"./node_modules/moment/locale/zh-hk.js\",\n\t\"./zh-hk.js\": \"./node_modules/moment/locale/zh-hk.js\",\n\t\"./zh-mo\": \"./node_modules/moment/locale/zh-mo.js\",\n\t\"./zh-mo.js\": \"./node_modules/moment/locale/zh-mo.js\",\n\t\"./zh-tw\": \"./node_modules/moment/locale/zh-tw.js\",\n\t\"./zh-tw.js\": \"./node_modules/moment/locale/zh-tw.js\"\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\treturn __webpack_require__(id);\n}\nfunction webpackContextResolve(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\treturn map[req];\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = \"./node_modules/moment/locale sync recursive ^\\\\.\\\\/.*$\";","import { BackendService } from \"./services/backend-service\";\nimport { StateService } from \"services/state-service\";\nimport { autoinject } from \"aurelia-framework\";\nimport { Router } from \"aurelia-router\";\nimport { PLATFORM } from \"aurelia-pal\";\nimport { ContactImportMetadata } from \"models/contact-import-metadata\";\nimport { ContactService } from \"services/contact-service\";\nimport { PccApiService } from \"services/pcc-api-service\";\n\n@autoinject\nexport class App {\n public message: string = \"Contact management\";\n public contactImportMetadata: ContactImportMetadata = new ContactImportMetadata();\n public router: Router;\n\n constructor(\n private stateService: StateService,\n private backendService: BackendService,\n private contactService: ContactService,\n private readonly pccService: PccApiService) { }\n\n public configureRouter(config, router) {\n this.router = router;\n config.title = \"Contact management\";\n config.map([\n {\n route: [\"\", \"home\"], name: \"home\",\n moduleId: PLATFORM.moduleName(\"./components/home/home\")\n },\n {\n route: \"import\", name: \"import\",\n moduleId: PLATFORM.moduleName(\"./components/start-import-view/start-import-view\"),\n settings: { contactImportMetadata: this.contactImportMetadata }\n },\n {\n route: \"column\", name: \"column\",\n moduleId: PLATFORM.moduleName(\"./components/column-mapping-view/column-mapping-view\"), nav: true,\n settings: { contactImportMetadata: this.contactImportMetadata }\n },\n {\n route: \"preview\", name: \"preview\",\n moduleId: PLATFORM.moduleName(\"./components/preview-view/preview-view\"), nav: true,\n settings: { contactImportMetadata: this.contactImportMetadata }\n },\n {\n route: \"status\", name: \"status\",\n moduleId: PLATFORM.moduleName(\"./components/get-status-view/get-status-view\"), nav: true,\n settings: { contactImportMetadata: this.contactImportMetadata }\n },\n {\n route: \"contact-details/:id\", name: \"contact-details\",\n moduleId: PLATFORM.moduleName(\"./components/contact-details-view/contact-details-view\")\n },\n {\n route: \"audit-log\", name: \"audit-log\",\n moduleId: PLATFORM.moduleName(\"./components/audit-log-view/audit-log-view\"), nav: true,\n settings: { contactImportMetadata: this.contactImportMetadata }\n },\n {\n route: \"settings\", name: \"settings\",\n moduleId: PLATFORM.moduleName(\"./components/settings-view/settings-view\")\n },\n {\n route: \"help\", name: \"help\",\n moduleId: PLATFORM.moduleName(\"./components/help-view/help-view.html\")\n }\n ]);\n }\n\n public attached() {\n this.identifyInAptrinsic();\n }\n\n public isAuthenticated() {\n const token = sessionStorage.getItem(\"token\");\n return token && token.length > 0 && token !== \"undefined\";\n }\n\n public async identifyInAptrinsic() {\n const userDetails = await this.pccService.getUserDetails();\n const userGroup = await this.pccService.getUserGroup(userDetails.groupId);\n\n // tslint:disable-next-line: no-string-literal\n const aptrinsic = window[\"aptrinsic\"];\n\n aptrinsic(\"identify\",\n {\n // User Fields\n id: userDetails.currentProfileId,\n username: userDetails.userName,\n email: userDetails.eMail,\n firstName: userDetails.firstName,\n lastName: userDetails.lastName,\n roleassigned: userGroup.name,\n }, {\n // Account Fields\n id: this.stateService.customerKey,\n name: this.stateService.customerName,\n }\n );\n }\n}\n","import { AuditLog } from \"models/audit-log\";\nimport { StateService } from \"services/state-service\";\nimport { autoinject, LogManager } from \"aurelia-framework\";\nimport { Router } from \"aurelia-router\";\nimport { BackendService } from \"../../services/backend-service\";\nimport { ErrorDialogContent } from \"models/error-dialog-content\";\nimport { ErrorDialog } from \"resources/elements/error-dialog/error-dialog\";\nimport { DialogService } from \"aurelia-dialog\";\nimport { ContactImportMetadata } from \"models/contact-import-metadata\";\n\n@autoinject\nexport class AuditLogView {\n public readonly log = LogManager.getLogger(\"contact-management-web:audit-log\");\n public auditLogList: AuditLog[] = [];\n public errorDialogContent: ErrorDialogContent;\n public contactImportMetadata: ContactImportMetadata;\n\n public constructor(\n private backendService: BackendService,\n private stateService: StateService,\n private router: Router,\n public dialogService: DialogService\n ) { }\n\n public activate(params, routeConfig, navigationInstruction) {\n this.handleResult();\n this.contactImportMetadata = routeConfig.settings.contactImportMetadata;\n }\n\n public async handleResult() {\n try {\n this.auditLogList = await this.backendService.getAuditLogs(this.stateService.customerKey);\n } catch (error) {\n this.log.error(error);\n this.displayErrorMessage(\"Failed to get audit logs\",\n \"An error occured getting audit logs. Please try again.\",\n \"\");\n }\n }\n\n public getJobMode(jobMode: number) {\n switch (jobMode) {\n case 0:\n return \"Import: Full replace\";\n case 1:\n return \"Import: Replace and append\";\n case 2:\n return \"Export: All records\";\n default:\n return \"Unknown\";\n }\n }\n\n public getJobStatus(status: boolean) {\n return (status) ? \"Completed\" : \"In progress\";\n }\n\n public onLogClick(custNo: number, identifier: string) {\n this.log.info(\"onLogClick - custNo: \" + custNo + \". Identifier: \" + identifier);\n if (this.contactImportMetadata === undefined) {\n this.contactImportMetadata = new ContactImportMetadata();\n }\n this.contactImportMetadata.BlobLocation = identifier;\n this.contactImportMetadata.CustomerNo = custNo;\n this.router.navigateToRoute(\"status\");\n }\n\n private displayErrorMessage(title: string, message1: string, message2: string) {\n this.errorDialogContent = new ErrorDialogContent();\n this.errorDialogContent.WindowTitle = \"ERROR\";\n this.errorDialogContent.Title = title;\n this.errorDialogContent.Message1 = message1;\n this.errorDialogContent.Message2 = message2;\n\n this.dialogService.open({\n viewModel: ErrorDialog,\n model: this.errorDialogContent, lock: true\n });\n }\n}\n","import { BackendService } from \"services/backend-service\";\nimport { ErrorDialogContent } from \"models/error-dialog-content\";\nimport { ContactImportMetadata } from \"models/contact-import-metadata\";\nimport { MapConstants } from \"constants/map-constants\";\nimport { Router } from \"aurelia-router\";\nimport { autoinject, LogManager } from \"aurelia-framework\";\nimport { DialogService } from \"aurelia-dialog\";\nimport { ErrorDialog } from \"../../resources/elements/error-dialog/error-dialog\";\nimport { Column } from \"models/column\";\nimport { ContactManagementSettings } from \"models/contact-management-settings\";\n@autoinject\nexport class ColumnMappingView {\n public readonly log = LogManager.getLogger(\"contact-management-web:column-mapping-view\");\n public contactImportMetadata: ContactImportMetadata;\n public contactManagementSettings = new ContactManagementSettings();\n public errorDialogContent: ErrorDialogContent;\n public column: Column = new Column();\n private tooltipColumnMapping: string =\n \"Map columns from the Excel file to each field.

For example External Id to the Excel column id.\";\n private isSaving = false;\n\n constructor(\n private router: Router,\n private dialogService: DialogService,\n private backendService: BackendService) {\n this.dialogService = dialogService;\n this.errorDialogContent = new ErrorDialogContent();\n }\n\n public async activate(params, routeConfig, navigationInstruction) {\n this.contactImportMetadata = routeConfig.settings.contactImportMetadata;\n if (!this.contactImportMetadata.WorkbookFiles) {\n this.router.navigate(\"\");\n }\n const fetchedMapping = await this.getMapping();\n if (fetchedMapping) {\n this.contactImportMetadata.ColumnMappings = fetchedMapping;\n return;\n }\n MapConstants.mappingIndex.forEach(index => {\n this.mapColumns(index);\n });\n }\n\n public mapColumns(index: string) {\n if (!index) {\n return index;\n }\n\n switch (index) {\n case \"externalid\":\n MapConstants.externalIdNameMap.some(m => {\n this.contactImportMetadata.Headers.some(h => {\n if (m === h.toLowerCase()) {\n this.contactImportMetadata.ColumnMappings.ExternalId = h;\n return true;\n }\n });\n });\n break;\n\n case \"firstname\":\n MapConstants.firstNameMap.some(m => {\n this.contactImportMetadata.Headers.some(h => {\n if (m === h.toLowerCase()) {\n this.contactImportMetadata.ColumnMappings.FirstName = h;\n return true;\n }\n });\n });\n break;\n\n case \"lastname\":\n MapConstants.lastNameMap.some(m => {\n this.contactImportMetadata.Headers.some(h => {\n if (m === h.toLowerCase()) {\n this.contactImportMetadata.ColumnMappings.LastName = h;\n return true;\n }\n });\n });\n break;\n\n case \"phone\":\n MapConstants.phoneMap.some(m => {\n this.contactImportMetadata.Headers.some(h => {\n if (m === h.toLowerCase()) {\n this.contactImportMetadata.ColumnMappings.Phone1 = h;\n return true;\n }\n });\n });\n break;\n\n case \"mobile\":\n MapConstants.mobileMap.some(m => {\n this.contactImportMetadata.Headers.some(h => {\n if (m === h.toLowerCase()) {\n this.contactImportMetadata.ColumnMappings.Phone2 = h;\n return true;\n }\n });\n });\n break;\n\n case \"email1\":\n MapConstants.email1Map.some(m => {\n this.contactImportMetadata.Headers.some(h => {\n if (m === h.toLowerCase()) {\n this.contactImportMetadata.ColumnMappings.Email1 = h;\n return true;\n }\n });\n });\n break;\n\n case \"email2\":\n MapConstants.email2Map.some(m => {\n this.contactImportMetadata.Headers.some(h => {\n if (m === h.toLowerCase()) {\n this.contactImportMetadata.ColumnMappings.Email2 = h;\n return true;\n }\n });\n });\n break;\n\n case \"facebook_id\":\n MapConstants.facebookIdMap.some(m => {\n this.contactImportMetadata.Headers.some(h => {\n if (m === h.toLowerCase()) {\n this.contactImportMetadata.ColumnMappings.FacebookId = h;\n return true;\n }\n });\n });\n break;\n\n case \"twitter_id\":\n MapConstants.twitterIdMap.some(m => {\n this.contactImportMetadata.Headers.some(h => {\n if (m === h.toLowerCase()) {\n this.contactImportMetadata.ColumnMappings.TwitterId = h;\n return true;\n }\n });\n });\n break;\n\n case \"trustpilot_id\":\n MapConstants.trustpilotIdMap.some(m => {\n this.contactImportMetadata.Headers.some(h => {\n if (m === h.toLowerCase()) {\n this.contactImportMetadata.ColumnMappings.TrustpilotId = h;\n return true;\n }\n });\n });\n break;\n\n case \"workingtitle\":\n MapConstants.workingTitleMap.some(m => {\n this.contactImportMetadata.Headers.some(h => {\n if (m === h.toLowerCase()) {\n this.contactImportMetadata.ColumnMappings.WorkingTitle = h;\n return true;\n }\n });\n });\n break;\n\n case \"organization\":\n MapConstants.organizationMap.some(m => {\n this.contactImportMetadata.Headers.some(h => {\n if (m === h.toLowerCase()) {\n this.contactImportMetadata.ColumnMappings.Organization = h;\n return true;\n }\n });\n });\n break;\n\n case \"department\":\n MapConstants.departmentMap.some(m => {\n this.contactImportMetadata.Headers.some(h => {\n if (m === h.toLowerCase()) {\n this.contactImportMetadata.ColumnMappings.Department = h;\n return true;\n }\n });\n });\n break;\n\n case \"externalLink\":\n MapConstants.externalLinkMap.some(m => {\n this.contactImportMetadata.Headers.some(h => {\n if (m === h.toLowerCase()) {\n this.contactImportMetadata.ColumnMappings.ExternalLink = h;\n return true;\n }\n });\n });\n break;\n\n case \"streetname\":\n MapConstants.streetNameMap.some(m => {\n this.contactImportMetadata.Headers.some(h => {\n if (m === h.toLowerCase()) {\n this.contactImportMetadata.ColumnMappings.StreetName = h;\n return true;\n }\n });\n });\n break;\n\n case \"streetnumber\":\n MapConstants.streetNumberMap.some(m => {\n this.contactImportMetadata.Headers.some(h => {\n if (m === h.toLowerCase()) {\n this.contactImportMetadata.ColumnMappings.StreetNumber = h;\n return true;\n }\n });\n });\n break;\n\n case \"zipcode\":\n MapConstants.zipCodeMap.some(m => {\n this.contactImportMetadata.Headers.some(h => {\n if (m === h.toLowerCase()) {\n this.contactImportMetadata.ColumnMappings.ZipCode = h;\n return true;\n }\n });\n });\n break;\n\n case \"ziplocation\":\n MapConstants.zipLocationMap.some(m => {\n this.contactImportMetadata.Headers.some(h => {\n if (m === h.toLowerCase()) {\n this.contactImportMetadata.ColumnMappings.ZipLocation = h;\n return true;\n }\n });\n });\n break;\n\n case \"countrycode\":\n MapConstants.countryCodeMap.some(m => {\n this.contactImportMetadata.Headers.some(h => {\n if (m === h.toLowerCase()) {\n this.contactImportMetadata.ColumnMappings.CountryCode = h;\n return true;\n }\n });\n });\n break;\n }\n }\n\n public checkRequired() {\n const selectedField = this.contactImportMetadata.ColumnMappings;\n this.errorDialogContent.WindowTitle = \"ERROR\";\n this.errorDialogContent.Title = \"Required fields\";\n this.errorDialogContent.Message1 = \"You will need to map Last name, External Id and either Phone, Mobile or Email\";\n if (!selectedField.LastName || !selectedField.ExternalId) {\n this.dialogService.open({\n viewModel: ErrorDialog,\n model: this.errorDialogContent, lock: true\n });\n } else if (!selectedField.Phone1 && !selectedField.Phone2 && !selectedField.Email2 && !selectedField.Email1) {\n this.dialogService.open({\n viewModel: ErrorDialog,\n model: this.errorDialogContent, lock: true\n });\n } else {\n this.router.navigateToRoute(\"preview\");\n }\n }\n\n public async saveMapping() {\n try {\n this.contactManagementSettings.importType = \"ColumnMapping\";\n this.contactManagementSettings.columnMapping = this.contactImportMetadata.ColumnMappings;\n this.contactManagementSettings.defaultLanguage = this.contactImportMetadata.DefaultCountryCode;\n this.isSaving = true;\n const status = await this.backendService.saveColumnMapping(this.contactManagementSettings);\n this.log.info(status);\n } catch (error) {\n this.log.info(error);\n } finally {\n this.isSaving = false;\n }\n }\n\n public async getMapping() {\n const mapping = await this.backendService.getColumnMapping(\"ColumnMapping\");\n if (mapping != null) {\n this.contactImportMetadata.DefaultCountryCode = mapping.DefaultCountryCode;\n return mapping.ColumnMappings;\n }\n }\n}\n","import { StateService } from \"services/state-service\";\nimport { ColumnMappings } from \"./../../models/column-mappings\";\nimport { ContactService } from \"./../../services/contact-service\";\nimport { autoinject } from \"aurelia-framework\";\nimport { ContactModel } from \"models/contact-model\";\nimport { LogManager } from \"aurelia-framework\";\nimport { ErrorDialogContent } from \"models/error-dialog-content\";\nimport { ErrorDialog } from \"resources/elements/error-dialog/error-dialog\";\nimport { DialogService } from \"aurelia-dialog\";\nimport { Router } from \"aurelia-router\";\nimport { Column } from \"models/column\";\n\n@autoinject\nexport class ContactDetailsView {\n public contact: ContactModel;\n public id: number;\n public errorDialogContent: ErrorDialogContent;\n public column: Column = new Column();\n public readonly log = LogManager.getLogger(\"contact-management-web:contact-details-view\");\n\n private columnMappings: ColumnMappings = new ColumnMappings();\n private phoneUtil = require(\"google-libphonenumber\").PhoneNumberUtil.getInstance();\n\n constructor(\n private readonly contactService: ContactService,\n public dialogService: DialogService,\n private readonly router: Router,\n private readonly stateService: StateService\n ) {\n }\n\n public async activate(params) {\n this.contact = new ContactModel(await this.getContactById(params.id));\n\n if (this.contact.contactIdentifiers === undefined) {\n this.displayErrorMessage(\"Unable to retrieve details for this contact.\",\n \"This may be because the contact has been removed or there may be a problem retrieving the data. If the problem persists, please contact our support.\"\n , \"\");\n this.router.navigateBack();\n return;\n }\n\n for (const ci of this.contact.contactIdentifiers.filter(x => x.type === \"PHONE\")) {\n try {\n const p = ci.address;\n const formattedNumber = this.phoneUtil.parseAndKeepRawInput(p, \"NO\");\n const phoneNumberType = this.phoneUtil.getNumberType(formattedNumber);\n ci.libPhoneNumberType = phoneNumberType;\n } catch (error) { }\n }\n }\n\n private deleteContact(id: number) {\n this.log.info(\"Deleting contact id \" + id);\n this.contactService.deleteContactAsync(id);\n\n const deletedContactIds = this.stateService.deletedContactIds;\n deletedContactIds.push(id);\n this.stateService.updateState(state => state.deletedContactIds = deletedContactIds);\n\n this.router.navigateToRoute(\"home\");\n }\n\n private getContactById(id: number) {\n return this.contactService.contactByIdAsync(id);\n }\n\n private displayErrorMessage(title: string, message1: string, message2: string) {\n this.errorDialogContent = new ErrorDialogContent();\n this.errorDialogContent.WindowTitle = \"ERROR\";\n this.errorDialogContent.Title = title;\n this.errorDialogContent.Message1 = message1;\n this.errorDialogContent.Message2 = message2;\n\n this.dialogService.open({\n viewModel: ErrorDialog,\n model: this.errorDialogContent, lock: true\n });\n }\n}\n","import { autoinject } from \"aurelia-framework\";\nimport { BackendService } from \"./../../services/backend-service\";\nimport { ContactImportMetadata } from \"models/contact-import-metadata\";\nimport { ColumnMappings } from \"models/column-mappings\";\nimport { LogManager } from \"aurelia-framework\";\n\n@autoinject\nexport class GetStatusView {\n public readonly log = LogManager.getLogger(\"contact-management-web:get-status-view\");\n public contactImportMetadata: ContactImportMetadata;\n public refreshInterval: any;\n\n private progressPercentage: number;\n private progressBarStyle: string = \"progress-bar progress-bar-striped progress-bar-animated\";\n private filename: string;\n private filesize: number;\n private header: string = \"Import in progress...\";\n private subHeader: string = \"This might take a few minutes\";\n\n constructor(\n private backendService: BackendService) {\n }\n\n public activate(params, routeConfig, navigationInstruction) {\n this.contactImportMetadata = routeConfig.settings.contactImportMetadata;\n if (this.contactImportMetadata.WorkbookFiles) {\n this.filename = this.contactImportMetadata.WorkbookFiles[0].name;\n this.filesize = this.contactImportMetadata.WorkbookFiles[0].size;\n }\n // else {\n // this.progressPercentage = 50;\n // this.contactImportMetadata.Status.successRows = 30;\n // this.contactImportMetadata.Status.errorRows = 0;\n // this.filesize = 1024;\n // this.filename = \"test.xlsx\";\n // }\n }\n\n public attached() {\n this.checkStatus();\n this.refreshInterval = setInterval(() => this.checkStatus(), 2000);\n }\n\n public detached() {\n clearInterval(this.refreshInterval);\n }\n\n public async checkStatus() {\n try {\n this.log.info(\"Checking status\" +\n \". customerNo: \" + this.contactImportMetadata.CustomerNo +\n \". identifier: \" + this.contactImportMetadata.BlobLocation);\n\n const status = await this.backendService.\n getStatus(this.contactImportMetadata.CustomerNo, this.contactImportMetadata.BlobLocation);\n\n this.contactImportMetadata.Status = status;\n if (this.contactImportMetadata.Status.completed) {\n clearInterval(this.refreshInterval);\n this.clearCache();\n this.progressPercentage = 100;\n this.progressBarStyle = \"progress-bar progress-bar-striped progress-bar\";\n this.header = \"Import completed\";\n this.subHeader = \"\";\n } else {\n this.progressPercentage =\n Math.round((this.contactImportMetadata.Status.successRows + this.contactImportMetadata.Status.errorRows)\n * 100 / this.contactImportMetadata.ContactCount);\n }\n this.log.info(\"Got status: \" +\n \"Completed: \" + this.contactImportMetadata.Status.completed +\n \". Ok contacts: \" + this.contactImportMetadata.Status.successRows +\n \". Failed contacts: \" + this.contactImportMetadata.Status.errorRows +\n \". Total to process: \" + this.contactImportMetadata.ContactCount +\n \". Percentage: \" + this.progressPercentage);\n } catch (error) {\n this.log.warn(error.status + \" \" + error.statusText);\n }\n }\n\n public async goHome() {\n location.assign(\"#/\");\n }\n\n private clearCache() {\n this.contactImportMetadata.WorkbookFiles = undefined;\n this.contactImportMetadata.Sheets = undefined;\n this.contactImportMetadata.SheetName = undefined;\n this.contactImportMetadata.ColumnMappings = new ColumnMappings();\n this.contactImportMetadata.Contacts = [];\n this.log.info(\"Cleared contactImportMetadata values.\");\n }\n\n private formatBytes(bytes, decimals = 2) {\n if (bytes === 0) { return \"0 Bytes\"; }\n\n const k = 1024;\n const dm = decimals < 0 ? 0 : decimals;\n const sizes = [\"Bytes\", \"KB\", \"MB\", \"GB\", \"TB\", \"PB\", \"EB\", \"ZB\", \"YB\"];\n\n const i = Math.floor(Math.log(bytes) / Math.log(k));\n\n return parseFloat((bytes / Math.pow(k, i)).toFixed(dm)) + \" \" + sizes[i];\n }\n}\n","import { StateService } from \"./../../services/state-service\";\nimport { SearchEvent } from \"./../../models/events/search-event\";\nimport { EventAggregator, Subscription } from \"aurelia-event-aggregator\";\nimport { autoinject } from \"aurelia-framework\";\nimport { ContactService } from \"services/contact-service\";\nimport { IContactsSearchResult } from \"interfaces/igraph-response\";\nimport { ContactModel } from \"models/contact-model\";\nimport { DialogService } from \"aurelia-dialog\";\nimport { ErrorDialogContent } from \"models/error-dialog-content\";\nimport { ErrorDialog } from \"resources/elements/error-dialog/error-dialog\";\nimport { LogManager } from \"aurelia-framework\";\nimport { Router } from \"aurelia-router\";\n\n@autoinject\nexport class Home {\n public contactList: ContactModel[];\n public deletedContactIds: number[];\n public errorDialogContent: ErrorDialogContent;\n public readonly log = LogManager.getLogger(\"contact-management-web:home\");\n public headerTooltip: string = \"Use the search field in the menu bar to narrow the results.\";\n public subscription: Subscription;\n private totalSearchCount: number;\n private searchString: string;\n private page: number = 1;\n private showPageFrom: number = 1;\n private totalPages: number;\n private maxPaginatorLinks: number;\n private maxLimit: number = 20;\n private phoneUtil = require(\"google-libphonenumber\").PhoneNumberUtil.getInstance();\n\n constructor(\n private readonly contactService: ContactService,\n public dialogService: DialogService,\n private router: Router,\n private readonly stateService: StateService,\n private readonly eventAggregator: EventAggregator\n ) { }\n\n public async activate() {\n this.handleSso();\n this.deletedContactIds = this.stateService.deletedContactIds;\n await this.queryContacts(this.stateService.searchString, this.maxLimit, this.page);\n }\n\n public async attached() {\n this.subscription = this.eventAggregator.subscribe(SearchEvent, async (event: SearchEvent) => {\n await this.queryContacts(event.searchText);\n });\n }\n\n public detached() {\n if (this.subscription) {\n this.subscription.dispose();\n }\n\n // Reset searchString if we're navigating to something else than contact-details\n if (!window.location.hash.includes(\"contact-details\")) {\n this.stateService.updateState(state => state.searchString = \"\");\n }\n }\n\n public async queryContacts(searchString: string, limit: number = this.maxLimit, page: number = 1) {\n try {\n\n if (page < 1) {\n page = 1;\n }\n page = Math.ceil(page);\n let skip: number = (page - 1) * this.maxLimit;\n\n // Prevent skipping too far (ie clicking Next when at the end)\n if (skip > this.totalSearchCount) {\n skip = (page - 2) * this.maxLimit;\n page = page - 1;\n }\n\n this.log.info(\"queryContacts request for page \" + page\n + \": searchString: \" + searchString + \", limit: \" + limit + \". skip: \" + skip);\n\n const searchResult = await this.contactService.contactsSearchAsync(searchString, limit, skip);\n\n this.log.info(\"queryContacts returned \" + searchResult.contacts.length\n + \" contacts from a total of \" + searchResult.totalCount);\n this.handleSearchResult(searchResult);\n\n this.searchString = searchString;\n this.stateService.updateState(state => state.searchString = searchString);\n this.page = page;\n\n if (page <= 10) {\n this.showPageFrom = 1;\n } else {\n this.showPageFrom = page - 9;\n }\n\n this.totalPages = Math.ceil(searchResult.totalCount / this.maxLimit);\n if (this.totalPages > 10) {\n this.maxPaginatorLinks = 10;\n } else {\n this.maxPaginatorLinks = this.totalPages;\n }\n\n } catch (error) {\n this.log.error(\"queryContacts exception.\");\n this.displayErrorMessage(\"Search failed\",\n \"An error occured during search. Please try again.\",\n \"\");\n if (error.status === 401) {\n sessionStorage.clear();\n }\n }\n }\n\n public navigateToContact(contact: ContactModel) {\n this.router.navigateToRoute(\"contact-details\", { id: contact.id });\n }\n\n private handleSso() {\n if (!this.stateService.customerName) {\n const p = new URLSearchParams(window.location.search);\n if (p.has(\"customerName\")) {\n this.log.info(\"Storing customer name in state: \" + p.get(\"customerName\"));\n this.stateService.updateState(state => state.customerName = p.get(\"customerName\"));\n }\n if (p.has(\"editCustomerKey\")) {\n const editCustomerKey = p.get(\"editCustomerKey\");\n\n // Only IQADMIN are allowed to impersonate other customer keys:\n if (this.stateService.refreshToken.CustomerKey.toUpperCase() === \"IQADMIN\") {\n\n this.log.info(\"Storing customer key in state: \" + editCustomerKey);\n\n this.stateService.updateState(state => state.customerKey = +editCustomerKey);\n } else {\n this.log.error(\"Refresh token with customer key \" + this.stateService.refreshToken.CustomerKey\n + \" is trying to impersonate customer key \" + editCustomerKey);\n\n sessionStorage.clear();\n\n this.stateService.updateState(state => state.refreshToken = undefined);\n this.stateService.updateState(state => state.errorMessage = \"Partner tokens are not supported. \"\n + \"Please close the window, change customer key in Puzzel admin and try again.\");\n\n window.location.assign(\"\");\n return;\n }\n }\n window.history.pushState(null, null, window.location.pathname);\n }\n }\n\n private async handleSearchResult(result: IContactsSearchResult) {\n const contacts: ContactModel[] = [];\n this.totalSearchCount = result.totalCount;\n result.contacts.forEach(c => {\n const contact = new ContactModel();\n contact.id = c.id;\n\n if (this.deletedContactIds.includes(contact.id)) {\n return;\n }\n\n contact.displayName = \"\";\n if (c.firstName != null) {\n contact.displayName = c.firstName;\n }\n if (c.middleName != null) {\n contact.displayName = contact.displayName + \" \" + c.middleName;\n }\n contact.displayName = contact.displayName + \" \" + c.lastName;\n\n contact.emails = c.emails;\n contact.workingTitle = c.workingTitle;\n\n for (const p of c.phoneNumbers) {\n try {\n const formattedNumber = this.phoneUtil.parseAndKeepRawInput(p, \"NO\");\n const phoneNumberType = this.phoneUtil.getNumberType(formattedNumber);\n if (phoneNumberType === 1) {\n contact.mobiles.push(p);\n } else {\n contact.phones.push(p);\n }\n } catch (error) {\n contact.phones.push(p);\n }\n }\n contacts.push(contact);\n });\n\n this.contactList = contacts;\n }\n\n private displayErrorMessage(title: string, message1: string, message2: string) {\n this.errorDialogContent = new ErrorDialogContent();\n this.errorDialogContent.WindowTitle = \"ERROR\";\n this.errorDialogContent.Title = title;\n this.errorDialogContent.Message1 = message1;\n this.errorDialogContent.Message2 = message2;\n\n this.dialogService.open({\n viewModel: ErrorDialog,\n model: this.errorDialogContent, lock: true\n });\n }\n}\n","import { AuthService } from \"../../services/auth-service\";\nimport { BackendService } from \"../../services/backend-service\";\nimport { ContactImportMetadata } from \"models/contact-import-metadata\";\nimport { autoinject, LogManager } from \"aurelia-framework\";\nimport { Router } from \"aurelia-router\";\nimport { DialogService } from \"aurelia-dialog\";\nimport { ErrorDialogContent } from \"models/error-dialog-content\";\nimport { ErrorDialog } from \"resources/elements/error-dialog/error-dialog\";\nimport { Column } from \"models/column\";\n\n@autoinject\nexport class PreviewView {\n public contactImportMetadata: ContactImportMetadata;\n public chosenHeaders: any[] = [];\n public contacts: any[] = [];\n public importDone: string;\n public uploading: boolean;\n public readonly log = LogManager.getLogger(\"contact-management-web:preview-view\");\n public errorDialogContent: ErrorDialogContent;\n public column: Column = new Column();\n\n constructor(\n private backendService: BackendService,\n private authService: AuthService,\n private router: Router,\n public dialogService: DialogService) { }\n\n public activate(params, routeConfig, navigationInstruction) {\n this.contactImportMetadata = routeConfig.settings.contactImportMetadata;\n if (!this.contactImportMetadata.WorkbookFiles) {\n this.router.navigate(\"\");\n }\n\n for (const key in this.contactImportMetadata.ColumnMappings) {\n if (this.contactImportMetadata.ColumnMappings[key]) {\n this.chosenHeaders.push({\n key: this.contactImportMetadata.ColumnMappings[key],\n value: this.contactImportMetadata.Headers.indexOf(this.contactImportMetadata.ColumnMappings[key]),\n column: this.column.GetPrettyName(key)\n });\n }\n }\n if (!this.contactImportMetadata.Contacts) {\n return;\n }\n this.contactImportMetadata.Contacts.forEach(contact => {\n const contactRow = [];\n this.chosenHeaders.forEach(header => {\n contactRow.push(contact[header.value]);\n });\n this.contacts.push(contactRow);\n });\n }\n\n public async startImport() {\n try {\n this.uploading = true;\n const response = await this.backendService.sendFile(this.contactImportMetadata);\n this.log.info(\"SendFile done successfully with blobLocation: \" + response);\n this.contactImportMetadata.BlobLocation = response;\n this.contactImportMetadata.ImportSource = 1;\n this.contactImportMetadata.StartImportCompleted =\n await this.backendService.startImport(this.contactImportMetadata);\n this.log.info(\"StartImport done successfully: \" + this.contactImportMetadata.StartImportCompleted);\n this.uploading = false;\n this.router.navigateToRoute(\"status\");\n } catch (error) {\n this.uploading = false;\n this.displayErrorMessage(error.statusText,\n \"Unable to upload file and start the import\",\n \"Please try again when the error has been solved\");\n }\n }\n\n private displayErrorMessage(title: string, message1: string, message2: string) {\n this.errorDialogContent = new ErrorDialogContent();\n this.errorDialogContent.WindowTitle = \"ERROR\";\n this.errorDialogContent.Title = title;\n this.errorDialogContent.Message1 = message1;\n this.errorDialogContent.Message2 = message2;\n\n this.dialogService.open({\n viewModel: ErrorDialog,\n model: this.errorDialogContent, lock: true\n });\n }\n}\n","export class SettingView {\n\n}\n","import { DialogService } from \"aurelia-dialog\";\nimport { ContactImportMetadata } from \"./../../models/contact-import-metadata\";\nimport { bindable, observable, autoinject } from \"aurelia-framework\";\nimport { LogManager } from \"aurelia-framework\";\nimport readXlsxFile, { Row, readSheetNames } from \"read-excel-file\";\nimport environment from \"environment\";\nimport { Router } from \"aurelia-router\";\nimport { ErrorDialogContent } from \"models/error-dialog-content\";\nimport { ErrorDialog } from \"resources/elements/error-dialog/error-dialog\";\nimport { StateService } from \"services/state-service\";\n\n@autoinject\nexport class StartImportView {\n public contactImportMetadata: ContactImportMetadata;\n @observable public selectedFiles: FileList;\n public errorDialogContent: ErrorDialogContent;\n\n public readonly log = LogManager.getLogger(\"contact-management-web:start-import-view\");\n public excelData: any[];\n public importMode = [\n { id: 0, name: \"Full replace\" },\n { id: 1, name: \"Replace and append\" }\n ];\n private maxRows: number = environment.maxRows;\n private excelRows: any[];\n private chooseFileStyle: string;\n private headerStyle: string;\n private readingSheetContent: boolean = false;\n private buttonStyle: string;\n private disableButton: boolean = true;\n private navigating: boolean;\n private tooltipImportMode: string =\n \"'Replace and append' will replace (not update) all information if externalId matches.

\" +\n \"'Full replace' will delete all contacts before importing the new ones.\";\n\n constructor(\n public dialogService: DialogService,\n private router: Router,\n private readonly stateService: StateService) {\n this.errorDialogContent = new ErrorDialogContent();\n }\n\n public activate(params, routeConfig, navigationInstruction) {\n this.contactImportMetadata = routeConfig.settings.contactImportMetadata;\n this.contactImportMetadata.CustomerNo = this.stateService.customerKey;\n this.navigating = false;\n\n if (this.contactImportMetadata.WorkbookFiles !== undefined) {\n this.chooseFileStyle = \"display: none;\";\n } else {\n this.chooseFileStyle = \"\";\n }\n\n if (this.contactImportMetadata.Sheets !== undefined) {\n this.headerStyle = \"\";\n } else {\n this.headerStyle = \"text-muted\";\n }\n\n if (this.contactImportMetadata.Contacts !== undefined) {\n this.disableNextButton(false);\n } else {\n this.disableNextButton(true);\n }\n }\n\n public async selectedFilesChanged() {\n let selectedFile = this.contactImportMetadata.WorkbookFiles[0];\n if (selectedFile.name.endsWith(\".xls\")) {\n this.contactImportMetadata.WorkbookFileType = 0;\n } else if (selectedFile.name.endsWith(\".xlsx\")) {\n this.contactImportMetadata.WorkbookFileType = 1;\n }\n\n if (!selectedFile || !this.contactImportMetadata.WorkbookFileType) {\n\n this.log.warn(\"Invalid file: \" + selectedFile.name);\n this.excelData = undefined;\n this.contactImportMetadata.WorkbookFiles = undefined;\n selectedFile = undefined;\n\n this.displayErrorMessage(\"Invalid file type.\", \"Unable to process the file.\", \"You can only import contacts from Excel files.\");\n return;\n }\n\n this.log.info(\"Reading file: \" + selectedFile.name);\n this.chooseFileStyle = \"display: none;\";\n this.headerStyle = \"\";\n\n readSheetNames(selectedFile).then((sheets: string[]) => {\n this.contactImportMetadata.Sheets = sheets;\n this.log.info(\"File read - found \" + sheets.length + \" sheets.\");\n }).catch(error => {\n\n this.log.warn(error);\n this.excelData = undefined;\n this.contactImportMetadata.WorkbookFiles = undefined;\n selectedFile = undefined;\n this.chooseFileStyle = \"\";\n\n this.displayErrorMessage(\"Invalid file.\", \"Unable to read the file.\", \"Please check the file type and contents and try again.\");\n });\n }\n\n public sheetNameChanged() {\n if (!this.contactImportMetadata.SheetName) {\n this.excelData = undefined;\n this.contactImportMetadata.SheetName = undefined;\n this.disableNextButton(true);\n\n this.log.info(\"Unselected sheet.\");\n return;\n }\n\n try {\n this.log.info(\"Reading sheet content from sheet called \" + this.contactImportMetadata.SheetName);\n this.readingSheetContent = true;\n\n readXlsxFile(this.contactImportMetadata.WorkbookFiles[0], { sheet: this.contactImportMetadata.SheetName })\n .then((data) => {\n if (data.length > (this.maxRows + 1)) {\n this.contactImportMetadata.SheetName = undefined;\n\n const errorText: string = \"Selected sheet contains too many rows.\\r\\n\" +\n \"A maximum of \" + this.maxRows + \" rows is supported.\";\n this.log.warn(errorText);\n this.displayErrorMessage(\"Too many rows\", \"Unable to handle the file contents.\", errorText);\n\n this.readingSheetContent = false;\n this.disableNextButton(true);\n return;\n }\n\n let firstRowWithContacts = 1;\n if (this.contactImportMetadata.HasHeaders) {\n this.contactImportMetadata.Headers = data[0] as string[];\n this.contactImportMetadata.ContactCount = data.length - 1;\n } else {\n this.contactImportMetadata.Headers = this.generateDefaultColumnHeaders(data[0] as string[]);\n firstRowWithContacts = 0;\n this.contactImportMetadata.ContactCount = data.length;\n }\n\n this.contactImportMetadata.Contacts = [];\n for (let i = firstRowWithContacts; i < data.length; i++) {\n if (!data[i] || i > 10) {\n break;\n }\n this.contactImportMetadata.Contacts.push(data[i]);\n }\n\n // Store temporary an array with up to 11 rows\n // to be handled when hasHeaders changes value\n this.excelRows = [];\n this.excelRows.push(this.contactImportMetadata.Headers);\n this.contactImportMetadata.Contacts.forEach(contact => {\n this.excelRows.push(contact);\n });\n\n this.log.info(\"Successfully read excel sheet contents.\");\n this.readingSheetContent = false;\n this.disableNextButton(false);\n });\n } catch (error) {\n this.contactImportMetadata.SheetName = undefined;\n\n this.log.warn(error);\n this.displayErrorMessage(\"Too many rows\", \"Unable to handle the file contents.\",\n \"Please check the excel file and the contents of the selected sheet and try again.\");\n\n this.readingSheetContent = false;\n this.disableNextButton(true);\n return;\n }\n }\n\n public hasHeadersChanged(hasHeaders: boolean) {\n this.log.info(\"Toggled hasHeaders to \" + hasHeaders);\n if (hasHeaders) {\n this.contactImportMetadata.Headers = this.excelRows[0];\n this.contactImportMetadata.Contacts = [];\n for (let i = 1; i < this.excelRows.length; i++) {\n this.contactImportMetadata.Contacts.push(this.excelRows[i]);\n }\n } else {\n this.contactImportMetadata.Headers = this.generateDefaultColumnHeaders(this.excelRows[0]);\n this.contactImportMetadata.Contacts = [];\n for (let i = 0; i < this.excelRows.length - 1; i++) {\n this.contactImportMetadata.Contacts.push(this.excelRows[i]);\n }\n }\n }\n\n public generateDefaultColumnHeaders(row: string[]) {\n const newHeaders: string[] = [];\n let j = 0;\n let prefix = \"\";\n let numberOfRuns = 0;\n // tslint:disable-next-line: prefer-for-of\n for (let i = 0; i < row.length; i++) {\n if (j === 26) {\n j = 0;\n prefix = ((String.fromCharCode)(65 + numberOfRuns));\n numberOfRuns++;\n }\n const columnNumber = (String.fromCharCode)(65 + j);\n j++;\n newHeaders.push(`Column ${prefix}${columnNumber}`);\n }\n return newHeaders;\n }\n\n public async nextPage() {\n if (this.contactImportMetadata.Contacts.length < 1) {\n this.displayErrorMessage(\"No contacts\",\n \"Unable to read contacts from the Excel sheet\",\n \"Please verify that the selected Excel sheet contains any data.\");\n } else {\n this.navigating = true;\n this.router.navigateToRoute(\"column\");\n }\n }\n\n private displayErrorMessage(title: string, message1: string, message2: string) {\n this.errorDialogContent.WindowTitle = \"ERROR\";\n this.errorDialogContent.Title = title;\n this.errorDialogContent.Message1 = message1;\n this.errorDialogContent.Message2 = message2;\n\n this.dialogService.open({\n viewModel: ErrorDialog,\n model: this.errorDialogContent, lock: true\n });\n }\n\n private disableNextButton(flag: boolean) {\n if (flag === true) {\n this.buttonStyle = \"button-disabled\";\n this.disableButton = true;\n } else {\n this.buttonStyle = \"button-secondary\";\n this.disableButton = false;\n }\n }\n}\n","export class MapConstants {\n public static mappingIndex = [\"externalid\", \"firstname\", \"lastname\", \"phone\", \"mobile\",\n \"email1\", \"email2\", \"facebook_id\", \"twitter_id\", \"trustpilot_id\", \"workingtitle\", \"organization\", \"department\",\n \"streetname\", \"streetnumber\", \"zipcode\", \"ziplocation\", \"countrycode\", \"externalLink\"];\n\n public static externalIdNameMap = [\"externalid\", \"external id\", \"id\"];\n\n public static firstNameMap = [\"first name\", \"firstname\", \"fornavn\"];\n\n public static lastNameMap = [\"last name\", \"lastname\", \"surname\", \"family name\", \"etternavn\", \"navn\"];\n\n public static phoneMap = [\"phone\", \"phone number\", \"telefon\", \"tlf\", \"telefonnummer\", \"telefonnr\"];\n\n public static mobileMap = [\"mobile\", \"mobile number\", \"mobil\", \"mobilnummer\", \"mobilnr\"];\n\n public static email1Map = [\"email 1\", \"email1\", \"email\", \"e-mail\", \"epost\", \"e-post\"];\n\n public static email2Map = [\"email 2\", \"email2\"];\n\n public static facebookIdMap = [\"facebookid\", \"facebook id\", \"facebook-id\", \"facebook_id\", \"facebook\", \"fbid\"];\n\n public static twitterIdMap = [\"twitterid\", \"twitter id\", \"twitter-id\", \"twitter_id\", \"twitter\", \"twid\"];\n\n public static trustpilotIdMap = [\"trustpilotid\", \"trustpilot id\", \"trustpilot-id\", \"trustpilot_id\", \"trustpilot\", \"tpid\"];\n\n public static workingTitleMap = [\"workingtitle\", \"working title\", \"title\", \"position\", \"tittel\", \"stilling\"];\n\n public static organizationMap = [\"organization\", \"organisation\", \"company\", \"organisasjon\", \"firma\"];\n\n public static departmentMap = [\"department\", \"avdeling\"];\n\n public static streetNameMap = [\"street name\", \"streetname\", \"street address\", \"street\", \"address\", \"gateadresse\", \"adresse\"];\n\n public static streetNumberMap = [\"street number\", \"streetnumber\", \"gatenummer\", \"gatenr\"];\n\n public static zipCodeMap = [\"zip code\", \"zipcode\", \"postnummer\", \"postnr\"];\n\n public static zipLocationMap = [\"zip location\", \"ziplocation\", \"poststed\"];\n\n public static countryCodeMap = [\"country code\", \"countrycode\", \"country\", \"landskode\", \"land\"];\n\n public static externalLinkMap = [\"externalLink\", \"external link\", \"link\", \"url\"];\n}\n","export default {\n debug: true,\n testing: true,\n maxRows: 10000,\n contactsApiEndpoint: \"https://devdatahub.puzzel.com/contacts-api/graphql\",\n datahubApiEndpoint: \"https://devdatahub.puzzel.com/contacts-management/api/\",\n authEndpoint_OPO: \"https://devauth.puzzel.com/api/\",\n authEndpoint_EU1: \"https://deveu.puzzel.com/auth/api/\",\n authEndpoint_UK1: \"\",\n exportContactsFunctionKey: \"k/tFa8mpCy1FxExkjQ3WVd3nqTLcq6i6EoNNbzMidggX44aB4GYwKQ==\",\n pccApiUrl_OPO: \"https://devapi.puzzel.com/contactcentre5/\",\n pccApiUrl_EU1: \"https://deveu.puzzel.com/api/contactcentre5/\",\n pccApiUrl_UK1: \"\",\n solutionApi: \"https://devsolutionapi.puzzel.com/\",\n solutionApiReadOnlyToken: \"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzY29wZXMiOlsicmVhZCJdLCJzdWIiOiJDb250YWN0c0FkbWluV2ViIiwidmVyIjoiMS4wIiwiaWF0IjoxNjQxNTU2MzI2LCJpc3MiOiJQdXp6ZWwgSW5ub3ZhdGlvbiJ9.xKEAzAqW6AJ3S5NHRNMPznLIJcW-6X56YBzKUtw72Yo\"\n};\n"],"names":[],"sourceRoot":""}