{"version":3,"sources":["webpack:///./src/views/ContactUs.vue?5c82","webpack:///./src/components/Forms/Form.vue?7753","webpack:///./node_modules/client-website-ts-library/components/MultiSelect.vue?2f5e","webpack:///./src/components/Forms/Form.vue?35da","webpack:///./node_modules/client-website-ts-library/components/ReCaptcha.vue?b2e8","webpack:///./node_modules/client-website-ts-library/components/ReCaptcha.vue?c1f0","webpack:///./node_modules/client-website-ts-library/components/ReCaptcha.vue?83ee","webpack:///./node_modules/client-website-ts-library/components/ReCaptcha.vue","webpack:///./node_modules/client-website-ts-library/components/VideoRecorder.vue?2bf0","webpack:///./node_modules/client-website-ts-library/components/VideoRecorder.vue?c337","webpack:///./node_modules/client-website-ts-library/components/VideoRecorder.vue?c12c","webpack:///./node_modules/client-website-ts-library/components/VideoRecorder.vue","webpack:///./node_modules/client-website-ts-library/plugins/view/index.ts","webpack:///./node_modules/client-website-ts-library/components/VideoRecorder.vue?a6af","webpack:///./src/components/Forms/Form.vue?af0f","webpack:///./src/components/Forms/Form.vue","webpack:///./src/components/Forms/Form.vue?d965","webpack:///./src/components/Forms/Form.vue?4d45","webpack:///./node_modules/client-website-ts-library/components/Map/Map.vue?a24a","webpack:///./node_modules/client-website-ts-library/components/Map/Map.vue?484d","webpack:///./node_modules/client-website-ts-library/components/Map/Map.vue?5d21","webpack:///./node_modules/client-website-ts-library/components/Map/Map.vue","webpack:///./node_modules/client-website-ts-library/components/Map/Map.vue?c455","webpack:///./node_modules/client-website-ts-library/components/MultiSelect.vue?3402","webpack:///./node_modules/client-website-ts-library/components/MultiSelect.vue?2d48","webpack:///./node_modules/client-website-ts-library/components/MultiSelect.vue?7bcf","webpack:///./node_modules/client-website-ts-library/components/MultiSelect.vue","webpack:///./src/views/ContactUs.vue?adf8","webpack:///./src/views/ContactUs.vue","webpack:///./src/views/ContactUs.vue?e268","webpack:///./src/views/ContactUs.vue?8f5a","webpack:///./node_modules/client-website-ts-library/components/ReCaptcha.vue?2a77"],"names":["render","_vm","this","_h","$createElement","_c","_self","staticClass","class","recaptchaVersion","attrs","id","siteKey","callbackFunctionName","staticRenderFns","ReCaptcha","Vue","constructor","Utils","GetGuid","response","responseWaiter","Config","Website","Settings","ReCaptchaSiteKey","ReCaptchaVersion","mounted","window","Logger","Log","LogLevel","Debug","loadLibrary","then","Info","catch","Error","reset","grecaptcha","getResponse","Promise","resolve","reject","length","win","execute","ex","undefined","scr","document","createElement","pl_recaptcha_loaded","onerror","async","defer","head","appendChild","src","__decorate","Component","component","domProps","_s","def","Labels","Prompt","needsFallback","isMobile","on","uploadVideo","_v","Upload","Record","showRecorder","directives","name","rawName","value","isActive","ready","expression","isRunningOutatime","formattedTime","ref","doneRecording","isRecording","toggleRecording","cancelRecording","initVideoStream","_e","fatalErrorMessage","VideoRecorder","needsPermissions","hasNoDevices","permissionDenied","hasFatalError","videoBlob","outatimeThreshold","captureConfig","currentTime","currentTimeInterval","videoStream","mediaRecorder","capturedChunks","test","navigator","userAgent","mins","Math","floor","secs","totalMins","MaxRecordLength","totalSecs","fallback","mediaDevices","enumerateDevices","availableDevices","some","device","kind","permissions","query","res","state","Warning","err","stopRecording","startRecording","initCaptureConfig","codecs","codec","i","MediaRecorder","isTypeSupported","mimeType","ondataavailable","e","push","data","onstop","Blob","type","clearInterval","start","setInterval","stop","hideRecorder","$emit","createFileInput","fi","accept","setAttribute","style","display","onchange","files","file","size","MaxFileSize","alert","FormattedMaxFileSize","remove","onblur","setTimeout","body","click","getTracks","forEach","track","constraints","audio","video","width","height","getUserMedia","mediaStream","$refs","preview","srcObject","message","requestRecording","Prop","ViewBase","prolistAnalyticsService","ServiceManager","Get","ServiceType","Analytics","headService","Require","Head","updateAnalytics","evt","obj","getAnalyticsEvent","call","getAnalyticsData","AnalyticsPageView","$route","path","triggerAnalyticsEvent","event","GetAll","adapter","triggerCustomAnalyticsEvent","updateHead","result","bind","meta","Update","UpdateWithStatic","View","requestAnimationFrame","AsyncView","$on","loading","loadAutosave","autosaveDate","definition","Options","SubmittedText","_l","section","key","SectionId","refInFor","errors","ctx","handleFieldInput","submitButtonClass","submitButtonColour","submitButtonBackgroundColour","submitForm","SubmitButtonText","Form","Form_1","context","errored","submitted","autosaveManager","FormAutosave","hasAutosave","submitPercent","recaptchaService","propertyAdressFormFieldValue","fieldBg","fieldColour","borderColour","labelColour","labelFocusedBg","labelFocusedColour","underlineInactive","underlineActive","onProgress","progress","total","round","console","log","Items","ClientWebsiteId","Id","API","Forms","GetForm","enableAutosave","GetState","Sections","sectionComponent","setData","fieldDef","filter","Key","collectData","includeRecaptcha","normalisedData","normaliseData","SubmitForm","Valid","Submitted","Result","resetRecaptcha","ValidationState","Errors","finally","newValues","entry","Value","Array","getRecaptchaResponse","recaptchaResponse","Reset","GetResponse","default","components","Section","Loader","config","MapProvider","settings","$event","MapBoxMap","Map","SetCenter","center","zoom","map","GetZoom","focused","background","focusBg","itemBorderRad","defocus","item","Label","removeItem","selectedValue","previewCount","searchPlaceholder","updateSearch","gotFocus","target","composing","search","searchResults","Option","Selected","select","noResults","MultiSelect","results","options","loweredSearch","toLowerCase","itm","indexOf","r","s","enableCustom","customLabelPrefix","customValuePrefix","option","v","idx","findIndex","splice","setValues","opt","slice","required","office","Phone","staticStyle","mapSettings","ContactUs","Mixins","Offices","WebsiteId","MapSettings","Markers","MapMarker","Address","AddressLine1","AddressLine2","Title","FranchiseName"],"mappings":"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","file":"js/chunk-1cc59c16.d14724d8.js","sourcesContent":["export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--6-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ContactUs.vue?vue&type=style&index=0&id=b54d6148&scoped=true&lang=css&\"","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--6-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Form.vue?vue&type=style&index=0&id=69add52b&scoped=true&lang=css&\"","export * from \"-!../../mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../css-loader/dist/cjs.js??ref--6-oneOf-1-1!../../vue-loader/lib/loaders/stylePostLoader.js!../../postcss-loader/src/index.js??ref--6-oneOf-1-2!../../cache-loader/dist/cjs.js??ref--0-0!../../vue-loader/lib/index.js??vue-loader-options!./MultiSelect.vue?vue&type=style&index=0&id=396af627&scoped=true&lang=css&\"","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--6-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Form.vue?vue&type=style&index=1&lang=css&\"","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"recaptcha\",class:{'recaptcha--visible': _vm.recaptchaVersion == 20}},[_c('div',{staticClass:\"g-recaptcha recaptcha__inner\",attrs:{\"id\":'recaptcha_' + _vm.id,\"data-sitekey\":_vm.siteKey,\"data-size\":_vm.recaptchaVersion == 20 ? '' : 'invisible',\"data-callback\":_vm.callbackFunctionName,\"data-expired-callback\":_vm.callbackFunctionName}})])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n\n\n\n\n\n\n\n\n\n\r\nimport { Component, Vue, Prop } from \"vue-property-decorator\";\r\n\r\nimport { Config, Logger, LogLevel } from \"../services\";\r\nimport { Utils } from \"../util\";\r\n\r\n@Component\r\nexport default class ReCaptcha extends Vue {\r\n private readonly id = Utils.GetGuid();\r\n\r\n private response: string | null = null;\r\n\r\n private responseWaiter: ((value?: string | PromiseLike | undefined) => void) | null = null;\r\n\r\n private siteKey = Config.Website.Settings!.ReCaptcha.ReCaptchaSiteKey;\r\n\r\n private recaptchaVersion = Config.Website.Settings!.ReCaptcha.ReCaptchaVersion;\r\n\r\n get callbackFunctionName() {\r\n return `_recaptcha_callback_${this.id}`;\r\n }\r\n\r\n mounted() {\r\n (window as any)[this.callbackFunctionName] = (response: string | null) => {\r\n Logger.Log(LogLevel.Debug, '[ReCaptcha]', 'Got response');\r\n\r\n this.response = response || null;\r\n\r\n if(this.responseWaiter !== null && this.response !== null) {\r\n this.responseWaiter(this.response);\r\n this.responseWaiter = null;\r\n }\r\n }\r\n\r\n this.loadLibrary().then(() => {\r\n Logger.Log(LogLevel.Info, '[ReCaptcha]', 'Loaded ReCaptcha');\r\n }).catch(() => {\r\n Logger.Log(LogLevel.Error, '[ReCaptcha]', 'Failed to load ReCaptcha');\r\n });\r\n\r\n Logger.Log(LogLevel.Info, '[ReCaptcha]', 'Registered ReCaptcha', this.id);\r\n }\r\n\r\n reset() {\r\n (window as any).grecaptcha.reset();\r\n }\r\n\r\n getResponse(): Promise {\r\n return new Promise((resolve, reject) => {\r\n if(this.response !== null && this.response.length > 0) {\r\n resolve(this.response);\r\n return;\r\n }\r\n\r\n this.responseWaiter = () => {\r\n Logger.Log(LogLevel.Debug, '[ReCaptcha]', 'Resolving response');\r\n resolve();\r\n };\r\n\r\n const win = window as any;\r\n\r\n try {\r\n win.grecaptcha.execute();\r\n } catch (ex) {\r\n Logger.Log(LogLevel.Error, '[ReCaptcha]', 'Error executing recaptcha', ex)\r\n win.grecaptcha.render(`recaptcha_${this.id}`);\r\n win.grecaptcha.execute();\r\n }\r\n });\r\n }\r\n\r\n loadLibrary(): Promise {\r\n return new Promise((resolve, reject) => {\r\n if((window as any).grecaptcha !== undefined) {\r\n Logger.Log(LogLevel.Debug, '[ReCaptcha]', 'ReCaptcha is already defined.');\r\n\r\n resolve(true);\r\n return;\r\n }\r\n \r\n const scr = document.createElement('script');\r\n\r\n (window as any).pl_recaptcha_loaded = () => {\r\n resolve(true);\r\n }\r\n\r\n scr.onerror = () => {\r\n reject();\r\n }\r\n\r\n scr.async = true;\r\n scr.defer = true;\r\n\r\n document.head.appendChild(scr);\r\n\r\n scr.src = 'https://www.google.com/recaptcha/api.js?onload=pl_recaptcha_loaded';\r\n });\r\n }\r\n}\r\n","import mod from \"-!../../cache-loader/dist/cjs.js??ref--14-0!../../thread-loader/dist/cjs.js!../../babel-loader/lib/index.js!../../ts-loader/index.js??ref--14-3!../../cache-loader/dist/cjs.js??ref--0-0!../../vue-loader/lib/index.js??vue-loader-options!./ReCaptcha.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../cache-loader/dist/cjs.js??ref--14-0!../../thread-loader/dist/cjs.js!../../babel-loader/lib/index.js!../../ts-loader/index.js??ref--14-3!../../cache-loader/dist/cjs.js??ref--0-0!../../vue-loader/lib/index.js??vue-loader-options!./ReCaptcha.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./ReCaptcha.vue?vue&type=template&id=95eda1a8&scoped=true&\"\nimport script from \"./ReCaptcha.vue?vue&type=script&lang=ts&\"\nexport * from \"./ReCaptcha.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./ReCaptcha.vue?vue&type=style&index=0&id=95eda1a8&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"95eda1a8\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"video-recorder-wrap\"},[_c('div',{staticClass:\"video-recorder__form-elem\"},[_c('p',{domProps:{\"innerHTML\":_vm._s(_vm.def.Labels.Prompt)}}),(_vm.needsFallback || !_vm.isMobile)?_c('Button',{on:{\"click\":_vm.uploadVideo}},[_vm._v(_vm._s(_vm.def.Labels.Upload || _vm.def.Labels.Record))]):_c('Button',{on:{\"click\":_vm.showRecorder}},[_vm._v(_vm._s(_vm.def.Labels.Record))])],1),_c('portal',{attrs:{\"to\":\"overlays\"}},[_c('div',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.isActive && _vm.ready && !_vm.needsFallback),expression:\"isActive && ready && !needsFallback\"}],staticClass:\"video-recorder\"},[_c('div',{staticClass:\"video-recorder__viewport\"},[_c('div',{staticClass:\"video-recorder__viewport__overlay\"},[_c('span',{staticClass:\"video-recorder__time\",class:{'video-recorder__time--running-out': _vm.isRunningOutatime}},[_vm._v(_vm._s(_vm.formattedTime))])]),_c('video',{ref:\"preview\",staticClass:\"video-recorder__preview\",attrs:{\"autoplay\":\"\",\"muted\":\"\",\"playsinline\":\"\"},domProps:{\"muted\":true}})]),_c('div',{staticClass:\"video-recorder__controls\"},[_c('button',{staticClass:\"video-recorder__control video-recorder__control--text\",attrs:{\"type\":\"button\"},on:{\"click\":_vm.doneRecording}},[_vm._v(\"Done\")]),_c('button',{staticClass:\"video-recorder__control video-recorder__control__start-stop\",class:{'recording': _vm.isRecording},attrs:{\"type\":\"button\"},on:{\"click\":_vm.toggleRecording}}),_c('button',{staticClass:\"video-recorder__control video-recorder__control--text\",attrs:{\"type\":\"button\"},on:{\"click\":_vm.cancelRecording}},[_vm._v(\"Cancel\")])]),(_vm.needsPermissions)?_c('div',{staticClass:\"video-recorder__modal\"},[_c('div',{staticClass:\"video-recorder__modal__icon\"},[_c('svg',{staticClass:\"feather feather-video\",attrs:{\"xmlns\":\"http://www.w3.org/2000/svg\",\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"#333\",\"stroke-width\":\"2\",\"stroke-linecap\":\"round\",\"stroke-linejoin\":\"round\"}},[_c('polygon',{attrs:{\"points\":\"23 7 16 12 23 17 23 7\"}}),_c('rect',{attrs:{\"x\":\"1\",\"y\":\"5\",\"width\":\"15\",\"height\":\"14\",\"rx\":\"2\",\"ry\":\"2\"}})])]),_c('p',{staticClass:\"video-recorder__modal__message\"},[_vm._v(\" We need permission to use your camera & microphone to continue. \")]),_c('div',{staticClass:\"video-recorder__modal__buttons\"},[_c('button',{staticClass:\"video-recorder__modal__button video-recorder__modal__button--secondary\",on:{\"click\":_vm.cancelRecording}},[_vm._v(\"Cancel\")]),_c('button',{staticClass:\"video-recorder__modal__button\",on:{\"click\":_vm.initVideoStream}},[_vm._v(\"Allow\")])])]):_vm._e(),(_vm.permissionDenied)?_c('div',{staticClass:\"video-recorder__modal\"},[_c('div',{staticClass:\"video-recorder__modal__icon\"},[_c('svg',{staticClass:\"feather feather-video-off\",attrs:{\"xmlns\":\"http://www.w3.org/2000/svg\",\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"#333\",\"stroke-width\":\"2\",\"stroke-linecap\":\"round\",\"stroke-linejoin\":\"round\"}},[_c('path',{attrs:{\"d\":\"M16 16v1a2 2 0 0 1-2 2H3a2 2 0 0 1-2-2V7a2 2 0 0 1 2-2h2m5.66 0H14a2 2 0 0 1 2 2v3.34l1 1L23 7v10\"}}),_c('line',{attrs:{\"x1\":\"1\",\"y1\":\"1\",\"x2\":\"23\",\"y2\":\"23\"}})])]),_c('p',{staticClass:\"video-recorder__modal__message\"},[_vm._v(\" Permission to access the camera & microphone was denied. \")]),_c('div',{staticClass:\"video-recorder__modal__buttons video-recorder__modal__buttons--centered\"},[_c('button',{staticClass:\"video-recorder__modal__button\",on:{\"click\":_vm.cancelRecording}},[_vm._v(\"Okay\")])])]):_vm._e(),(_vm.hasFatalError)?_c('div',{staticClass:\"video-recorder__modal\"},[_c('div',{staticClass:\"video-recorder__modal__icon\"},[_c('svg',{staticClass:\"feather feather-alert-triangle\",attrs:{\"xmlns\":\"http://www.w3.org/2000/svg\",\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"#333\",\"stroke-width\":\"2\",\"stroke-linecap\":\"round\",\"stroke-linejoin\":\"round\"}},[_c('path',{attrs:{\"d\":\"M10.29 3.86L1.82 18a2 2 0 0 0 1.71 3h16.94a2 2 0 0 0 1.71-3L13.71 3.86a2 2 0 0 0-3.42 0z\"}}),_c('line',{attrs:{\"x1\":\"12\",\"y1\":\"9\",\"x2\":\"12\",\"y2\":\"13\"}}),_c('line',{attrs:{\"x1\":\"12\",\"y1\":\"17\",\"x2\":\"12.01\",\"y2\":\"17\"}})])]),_c('p',{staticClass:\"video-recorder__modal__message\"},[_vm._v(\" An error occurred. \")]),_c('p',{staticClass:\"video-recorder__modal__message\"},[_vm._v(\" \"+_vm._s(_vm.fatalErrorMessage)+\" \")]),_c('div',{staticClass:\"video-recorder__modal__buttons video-recorder__modal__buttons--centered\"},[_c('button',{staticClass:\"video-recorder__modal__button\",on:{\"click\":_vm.cancelRecording}},[_vm._v(\"Okay\")])])]):_vm._e()])])],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\r\nimport { Component, Vue, Prop } from \"vue-property-decorator\";\r\n\r\nimport { Config, Logger, LogLevel } from \"../services\";\r\nimport { VideoRecorderField } from \"../types/Forms/FieldTypes\";\r\n\r\ninterface VideoCaptureConfig {\r\n codec: string;\r\n}\r\n\r\n@Component\r\nexport default class VideoRecorder extends Vue {\r\n @Prop()\r\n private readonly def!: VideoRecorderField;\r\n\r\n private isActive = false;\r\n\r\n private ready = false;\r\n\r\n private needsFallback = false;\r\n\r\n private get isMobile(): boolean {\r\n return /iPhone|iPad|iPod|Android/i.test(navigator.userAgent);\r\n }\r\n\r\n private needsPermissions = false;\r\n\r\n private hasNoDevices = false;\r\n\r\n private permissionDenied = false;\r\n\r\n private hasFatalError = false;\r\n \r\n private fatalErrorMessage = '';\r\n\r\n private isRecording = false;\r\n\r\n private videoBlob: Blob | null = null;\r\n\r\n private outatimeThreshold: number | null = null;\r\n\r\n private captureConfig: VideoCaptureConfig | null = null;\r\n\r\n private currentTime = 0;\r\n\r\n private currentTimeInterval: number | null = null;\r\n\r\n private videoStream: MediaStream | null = null;\r\n\r\n private mediaRecorder: MediaRecorder | null = null;\r\n\r\n private capturedChunks: Blob[] = [];\r\n\r\n get formattedTime(): string {\r\n let mins: string | number = Math.floor(this.currentTime / 60);\r\n let secs: string | number = this.currentTime - (mins * 60);\r\n\r\n let totalMins: string | number = Math.floor(this.def.MaxRecordLength / 60);\r\n let totalSecs: string | number = this.def.MaxRecordLength - (totalMins * 60);\r\n\r\n if (secs < 10) secs = \"0\" + secs;\r\n if (totalSecs < 10) totalSecs = \"0\" + totalSecs;\r\n\r\n return mins + \":\" + secs + \" / \" + totalMins + \":\" + totalSecs;\r\n }\r\n\r\n get isRunningOutatime(): boolean {\r\n return this.currentTime >= this.def.MaxRecordLength * 0.75;\r\n }\r\n\r\n mounted() {\r\n\r\n if (/iPhone|iPad|iPod|Android/i.test(navigator.userAgent) === false) {\r\n Logger.Log(LogLevel.Debug, '[Video Recorder]', 'Falling back to upload on a non-mobile device.');\r\n\r\n this.fallback();\r\n return;\r\n }\r\n\r\n if ('MediaRecorder' in window && navigator.mediaDevices && navigator.mediaDevices.enumerateDevices) {\r\n Logger.Log(LogLevel.Debug, '[Video Recorder]', 'MediaRecorder, enumerateDevices are supported');\r\n\r\n navigator.mediaDevices.enumerateDevices().then((availableDevices) => {\r\n\r\n if (availableDevices.some((device) => device.kind === 'videoinput')) {\r\n\r\n // Check that the permissions API is supported\r\n if('permissions' in navigator) {\r\n Logger.Log(LogLevel.Debug, '[Video Recorder]', 'Attempting to determine if camera permissions are granted');\r\n\r\n try {\r\n // Check to see if we have permission to use the camera\r\n navigator.permissions.query({ name: \"camera\" }).then(res => {\r\n if(res.state !== 'granted') {\r\n Logger.Log(LogLevel.Debug, '[Video Recorder]', 'Camera permissions not yet granted');\r\n \r\n // If the state is not granted, we need to ask for permissions\r\n this.ready = true;\r\n this.needsPermissions = true;\r\n } else {\r\n Logger.Log(LogLevel.Debug, '[Video Recorder]', 'Camera permissions granted');\r\n\r\n this.ready = true;\r\n }\r\n });\r\n } catch (ex) {\r\n Logger.Log(LogLevel.Warning, '[Video Recorder]', 'Failed to get camera permissions state', ex);\r\n\r\n // Error checking for permissions\r\n this.needsPermissions = true;\r\n }\r\n } else {\r\n Logger.Log(LogLevel.Debug, '[Video Recorder]', 'Permissions API not supported. Requesting permissions manually.');\r\n\r\n // The permissions API isn't supported\r\n this.needsPermissions = true;\r\n }\r\n\r\n } else {\r\n Logger.Log(LogLevel.Debug, '[Video Recorder]', 'No videoinput devices are available. Falling back to traditional methods.');\r\n this.fallback();\r\n }\r\n\r\n }).catch((err) => {\r\n Logger.Log(LogLevel.Error, '[Video Recorder]', 'Failed to enumerate media devices', err);\r\n\r\n this.fallback();\r\n });\r\n } else {\r\n Logger.Log(LogLevel.Debug, '[Video Recorder]', 'MediaRecorder is not supported, falling back to traditional upload mechanisms');\r\n\r\n this.fallback();\r\n }\r\n }\r\n\r\n private toggleRecording(): void {\r\n if (this.isRecording) {\r\n this.stopRecording();\r\n } else {\r\n this.startRecording();\r\n }\r\n }\r\n\r\n private initCaptureConfig(): void {\r\n const codecs = [\r\n \"video/mp4\",\r\n \"video/mpeg\",\r\n \"video/webm;codecs=h264\",\r\n \"video/webm\",\r\n \"video/webm;codecs=vp8\",\r\n \"video/webm;codecs=daala\"\r\n ];\r\n\r\n this.captureConfig = {\r\n codec: ''\r\n };\r\n\r\n for (var i = 0; i < codecs.length; i += 1) {\r\n if (MediaRecorder.isTypeSupported(codecs[i])) {\r\n this.captureConfig.codec = codecs[i];\r\n break;\r\n }\r\n }\r\n\r\n if (this.captureConfig.codec.length === 0) {\r\n throw new Error('Unable to find a suitable codec.');\r\n }\r\n\r\n Logger.Log(LogLevel.Debug, '[Video Recorder]', `Using codec ${codecs[i]}`)\r\n }\r\n\r\n private startRecording() {\r\n if (this.isRecording) return;\r\n\r\n this.isRecording = true;\r\n\r\n this.initVideoStream().then(() => {\r\n this.capturedChunks = [];\r\n\r\n Logger.Log(LogLevel.Debug, '[Video Recorder]', 'Start Recording');\r\n\r\n if (this.mediaRecorder === null) {\r\n\r\n if (this.captureConfig === null) {\r\n try {\r\n this.initCaptureConfig();\r\n } catch (ex) {\r\n Logger.Log(LogLevel.Error, '[Video Recorder]', 'Failed to initialise capture config.');\r\n \r\n this.fallback();\r\n\r\n return;\r\n }\r\n }\r\n\r\n this.mediaRecorder = new MediaRecorder(this.videoStream!, {\r\n mimeType: this.captureConfig!.codec\r\n });\r\n\r\n this.mediaRecorder.ondataavailable = (e: BlobEvent) => {\r\n this.capturedChunks.push(e.data);\r\n }\r\n\r\n this.mediaRecorder.onstop = () => {\r\n this.videoBlob = new Blob(this.capturedChunks, { type: this.captureConfig!.codec });\r\n\r\n this.isRecording = false;\r\n\r\n window.clearInterval(this.currentTimeInterval!);\r\n this.currentTime = 0;\r\n\r\n Logger.Log(LogLevel.Debug, '[Video Recorder]', 'Stopped recording');\r\n\r\n this.doneRecording();\r\n }\r\n\r\n Logger.Log(LogLevel.Debug, '[Video Recorder]', 'Initialised MediaRecorder', this.mediaRecorder);\r\n }\r\n\r\n this.currentTime = 0;\r\n\r\n this.mediaRecorder.start();\r\n\r\n this.currentTimeInterval = window.setInterval(() => {\r\n this.currentTime += 1;\r\n \r\n if (this.currentTime >= this.def.MaxRecordLength) {\r\n Logger.Log(LogLevel.Debug, '[Video Recorder]', 'Outatime 🔥 (stopping recording)');\r\n this.stopRecording();\r\n }\r\n }, 1000);\r\n });\r\n }\r\n\r\n private stopRecording(): void {\r\n this.mediaRecorder!.stop();\r\n }\r\n\r\n private doneRecording(): void {\r\n this.hideRecorder();\r\n\r\n this.$emit('done', this.videoBlob);\r\n }\r\n\r\n private cancelRecording(): void {\r\n if (this.isRecording) {\r\n this.stopRecording();\r\n }\r\n\r\n this.doneRecording();\r\n }\r\n\r\n private createFileInput(): HTMLInputElement {\r\n const fi = document.createElement('input');\r\n\r\n fi.type = 'file';\r\n fi.accept = 'video/mp4';\r\n\r\n fi.setAttribute('capture', 'environment');\r\n\r\n fi.style.display = 'none';\r\n\r\n return fi as HTMLInputElement;\r\n }\r\n\r\n private fallback(): void {\r\n this.ready = false;\r\n this.needsFallback = true;\r\n }\r\n\r\n private uploadVideo(): void {\r\n const fi = this.createFileInput();\r\n\r\n fi.onchange = () => {\r\n Logger.Log(LogLevel.Debug, '[Video Recorder]', 'File value changed', fi.files);\r\n\r\n if (fi.files!.length) {\r\n const file = fi.files![0];\r\n\r\n if(file.size > this.def.MaxFileSize) {\r\n alert(`The selected file excedes the maximum allowable file size of ${this.def.FormattedMaxFileSize}. Please select a different video to continue.`);\r\n } else {\r\n this.videoBlob = fi.files![0];\r\n\r\n this.doneRecording();\r\n }\r\n \r\n fi.remove();\r\n }\r\n };\r\n\r\n fi.onblur = () => {\r\n setTimeout(() => {\r\n \r\n Logger.Log(LogLevel.Debug, '[Video Recorder]', 'Removing file input node');\r\n\r\n fi.remove();\r\n }, 100);\r\n }\r\n\r\n document.body.appendChild(fi);\r\n\r\n fi.click();\r\n }\r\n\r\n private hideRecorder(): void {\r\n if (this.videoStream !== null) {\r\n this.videoStream!.getTracks().forEach(function(track) {\r\n track.stop();\r\n });\r\n\r\n this.videoStream = null;\r\n this.mediaRecorder = null;\r\n }\r\n\r\n this.isActive = false;\r\n }\r\n\r\n private showRecorder(): void {\r\n this.initVideoStream().then(() => {\r\n this.isActive = true;\r\n }).catch(() => {\r\n this.needsFallback = true;\r\n });\r\n }\r\n\r\n private initVideoStream(): Promise {\r\n return new Promise((resolve, reject) => {\r\n if (this.videoStream !== null) {\r\n this.needsPermissions = false;\r\n resolve();\r\n return;\r\n }\r\n\r\n const constraints = { audio: true, video: { width: 1280, height: 720 } }; \r\n\r\n navigator.mediaDevices.getUserMedia(constraints).then((mediaStream) => {\r\n\r\n Logger.Log(LogLevel.Debug, '[Video Recorder]', 'Successfully obtained MediaStream');\r\n\r\n this.ready = true;\r\n\r\n this.videoStream = mediaStream;\r\n\r\n this.needsPermissions = false;\r\n\r\n (this.$refs.preview as HTMLVideoElement).srcObject = this.videoStream;\r\n\r\n resolve();\r\n\r\n }).catch((ex) => {\r\n\r\n Logger.Log(LogLevel.Error, '[Video Recorder]', 'Failed to obtain MediaStream', ex.name, ex.message);\r\n\r\n switch (ex.name) {\r\n case \"NotFoundError\":\r\n\r\n this.hasNoDevices = true;\r\n\r\n // Fall back to requesting a normal upload\r\n this.fallback();\r\n\r\n break;\r\n case \"NotAllowedError\":\r\n\r\n this.permissionDenied = true;\r\n\r\n break;\r\n }\r\n\r\n reject();\r\n });\r\n });\r\n }\r\n\r\n requestRecording(): void {\r\n if (this.needsFallback) {\r\n this.uploadVideo();\r\n } else {\r\n this.showRecorder();\r\n }\r\n }\r\n}\r\n","import mod from \"-!../../cache-loader/dist/cjs.js??ref--14-0!../../thread-loader/dist/cjs.js!../../babel-loader/lib/index.js!../../ts-loader/index.js??ref--14-3!../../cache-loader/dist/cjs.js??ref--0-0!../../vue-loader/lib/index.js??vue-loader-options!./VideoRecorder.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../cache-loader/dist/cjs.js??ref--14-0!../../thread-loader/dist/cjs.js!../../babel-loader/lib/index.js!../../ts-loader/index.js??ref--14-3!../../cache-loader/dist/cjs.js??ref--0-0!../../vue-loader/lib/index.js??vue-loader-options!./VideoRecorder.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./VideoRecorder.vue?vue&type=template&id=52ca9bb4&scoped=true&\"\nimport script from \"./VideoRecorder.vue?vue&type=script&lang=ts&\"\nexport * from \"./VideoRecorder.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./VideoRecorder.vue?vue&type=style&index=0&id=52ca9bb4&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"52ca9bb4\",\n null\n \n)\n\nexport default component.exports","import Vue from \"vue\";\r\nimport { Component } from \"vue-property-decorator\";\r\nimport { AnalyticsEvent, AnalyticsEventObject, AnalyticsPageView, IAnalyticsAdapter, PROListAnalyticsAdapter } from \"../../services/Analytics\";\r\nimport { HeadService } from \"../../services/HeadService\";\r\nimport { ServiceManager, ServiceType } from \"../../services/ServiceManager\";\r\nimport { RouteMeta } from \"../meta\";\r\n\r\ninterface ViewBase {\r\n getAnalyticsEvent?(): AnalyticsEvent | null;\r\n getAnalyticsData?(): AnalyticsEventObject | null;\r\n head?(): RouteMeta | Promise | null;\r\n}\r\n\r\n@Component\r\nclass ViewBase extends Vue {\r\n protected prolistAnalyticsService = ServiceManager.Get(ServiceType.Analytics, 'PROListAnalyticsAdapter');\r\n protected headService = ServiceManager.Require(ServiceType.Head)!;\r\n\r\n public updateAnalytics() {\r\n let evt: AnalyticsEvent | null = null;\r\n let obj: AnalyticsEventObject | null = null;\r\n\r\n if (typeof this.getAnalyticsEvent !== 'undefined') {\r\n evt = this.getAnalyticsEvent.call(this);\r\n } else if(typeof this.getAnalyticsData !== 'undefined') {\r\n obj = this.getAnalyticsData.call(this);\r\n }\r\n\r\n if (evt === null) evt = new AnalyticsPageView(this.$route.path, this.$route.name || '', obj || undefined);\r\n\r\n this.triggerAnalyticsEvent(evt);\r\n }\r\n\r\n public triggerAnalyticsEvent(event: AnalyticsEvent) {\r\n ServiceManager.GetAll(ServiceType.Analytics).forEach((adapter) => {\r\n adapter.Record(event);\r\n });\r\n }\r\n\r\n public triggerCustomAnalyticsEvent(event: AnalyticsEvent) {\r\n if (this.prolistAnalyticsService !== null) this.prolistAnalyticsService.Record(event);\r\n }\r\n\r\n protected updateHead() {\r\n if ('head' in this) {\r\n const result = this.head!.bind(this)();\r\n\r\n if(result instanceof Promise) {\r\n result.then((meta: RouteMeta | null) => {\r\n this.headService.Update(meta);\r\n });\r\n } else {\r\n this.headService.Update(result as RouteMeta | null);\r\n }\r\n } else {\r\n this.headService.UpdateWithStatic(this.$route.path);\r\n }\r\n }\r\n}\r\n\r\n@Component\r\nclass View extends ViewBase {\r\n public mounted() {\r\n requestAnimationFrame(() => {\r\n this.updateHead();\r\n this.updateAnalytics();\r\n });\r\n }\r\n}\r\n\r\n@Component\r\nclass AsyncView extends ViewBase {\r\n public mounted() {\r\n this.$on('updateView', () => {\r\n requestAnimationFrame(() => {\r\n this.updateHead();\r\n this.updateAnalytics();\r\n });\r\n });\r\n }\r\n}\r\n\r\nexport {\r\n View,\r\n AsyncView\r\n}\r\n","export * from \"-!../../mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../css-loader/dist/cjs.js??ref--6-oneOf-1-1!../../vue-loader/lib/loaders/stylePostLoader.js!../../postcss-loader/src/index.js??ref--6-oneOf-1-2!../../cache-loader/dist/cjs.js??ref--0-0!../../vue-loader/lib/index.js??vue-loader-options!./VideoRecorder.vue?vue&type=style&index=0&id=52ca9bb4&scoped=true&lang=css&\"","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('form',{staticClass:\"form\",style:(_vm.formStyle)},[_c('Loader',{attrs:{\"loading\":_vm.loading}}),(_vm.hasAutosave)?_c('div',{staticClass:\"form__panel form__panel--autosaved\",on:{\"click\":_vm.loadAutosave}},[_c('p',[_vm._v(\" This form was autosaved at \"+_vm._s(_vm.autosaveDate)+\". Click here to load the autosave. \")])]):_vm._e(),(_vm.definition)?[(_vm.submitted)?_c('div',{staticClass:\"form__panel form__panel--success\"},[_c('p',{domProps:{\"innerHTML\":_vm._s(_vm.definition.Options.SubmittedText)}})]):[_vm._l((_vm.definition.Sections),function(section){return _c('Section',{key:section.SectionId,ref:section.SectionId,refInFor:true,attrs:{\"def\":section,\"errors\":_vm.errors,\"form-context\":_vm.ctx,\"form-type\":_vm.type},on:{\"field_input\":_vm.handleFieldInput}})}),(_vm.errored)?_c('div',{staticClass:\"form__panel form__panel--errored\"},[_c('p',[_vm._v(\" Please fill out all red highlighted fields. \")])]):_vm._e(),_c('div',{staticClass:\"center-text\"},[_c('Button',{staticClass:\"form__submit-btn\",class:_vm.submitButtonClass,attrs:{\"loading\":_vm.loading,\"colour\":_vm.submitButtonColour,\"background-colour\":_vm.submitButtonBackgroundColour},on:{\"click\":_vm.submitForm}},[_vm._v(_vm._s(_vm.definition.Options.SubmitButtonText))])],1)]]:_vm._e()],2)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\r\nimport { Component, Vue, Prop } from 'vue-property-decorator';\r\nimport { FormDefinition, FormSubmissionValidationError, FormField, FormValue } from 'client-website-ts-library/types/Forms';\r\nimport {\r\n AutosaveManager,\r\n ServiceManager,\r\n ServiceType,\r\n API,\r\n Config,\r\n Logger,\r\n LogLevel,\r\n ReCaptchaService,\r\n} from 'client-website-ts-library/services';\r\nimport { Context } from 'client-website-ts-library/types';\r\nimport { PDFFieldData } from 'client-website-ts-library/types/Forms/FieldTypes';\r\nimport { IRequestProgressDelegate } from 'client-website-ts-library/services/API/IRequestProgressDelegate';\r\n\r\nimport Section from './Section.vue';\r\nimport Loader from '../UI/Loader.vue';\r\n\r\n@Component({\r\n components: {\r\n Section,\r\n Loader,\r\n },\r\n})\r\nexport default class Form extends Vue implements IRequestProgressDelegate {\r\n @Prop({ default: () => ({ Items: [] }) })\r\n private readonly context!: Context;\r\n\r\n @Prop()\r\n private readonly type!: string;\r\n\r\n @Prop()\r\n private readonly submitButtonColour!: string;\r\n\r\n @Prop()\r\n private readonly submitButtonBackgroundColour!: string;\r\n\r\n @Prop()\r\n private readonly submitButtonClass!: string;\r\n\r\n @Prop()\r\n private readonly autosaveNamespace!: string;\r\n\r\n @Prop()\r\n private readonly enableAutosave!: boolean;\r\n\r\n @Prop({ default: 'var(--form-field-bg)' })\r\n private readonly fieldBg!: string;\r\n\r\n @Prop({ default: 'var(--form-field-colour)' })\r\n private readonly fieldColour!: string;\r\n\r\n @Prop({ default: 'var(--form-label-colour)' })\r\n private readonly labelColour!: string;\r\n\r\n @Prop({ default: 'var(--form-field-border-colour)' })\r\n private readonly borderColour!: string;\r\n\r\n @Prop({ default: 'var(--form-label-focused-bg)' })\r\n private readonly labelFocusedBg!: string;\r\n\r\n @Prop({ default: 'var(--form-label-focused-colour)' })\r\n private readonly labelFocusedColour!: string;\r\n\r\n @Prop({ default: '#eee' })\r\n private readonly underlineInactive!: string;\r\n\r\n @Prop({ default: 'var(--brand-primary)' })\r\n private readonly underlineActive!: string;\r\n\r\n @Prop({ default: true })\r\n private readonly includeRecaptcha!: boolean;\r\n\r\n private ctx: Context = this.context;\r\n\r\n private errored = false;\r\n\r\n private submitted = false;\r\n\r\n private errors: FormSubmissionValidationError[] = [];\r\n\r\n private loading = true;\r\n\r\n private definition: FormDefinition | null = null;\r\n\r\n private autosaveManager: AutosaveManager = ServiceManager.Require(ServiceType.FormAutosave);\r\n\r\n private hasAutosave = false;\r\n\r\n private autosaveDate: string | null = null;\r\n\r\n private submitPercent = 0;\r\n\r\n private recaptchaService = ServiceManager.Require(ServiceType.ReCaptcha) as ReCaptchaService;\r\n\r\n private propertyAdressFormFieldValue: string | null = null;\r\n\r\n get formStyle() {\r\n return {\r\n '--field-bg': this.fieldBg,\r\n '--field-colour': this.fieldColour,\r\n '--border-colour': this.borderColour,\r\n '--label-colour': this.labelColour,\r\n '--label-focused-bg': this.labelFocusedBg,\r\n '--label-focused-colour': this.labelFocusedColour,\r\n '--underline-inactive': this.underlineInactive,\r\n '--underline-active': this.underlineActive,\r\n };\r\n }\r\n\r\n onProgress(progress: number, total: number) {\r\n this.submitPercent = Math.round((progress / total) * 100);\r\n\r\n console.log(this.submitPercent);\r\n }\r\n\r\n mounted() {\r\n if (this.ctx === null) {\r\n this.ctx = {\r\n Items: [],\r\n ClientWebsiteId: Config.Website.Id,\r\n };\r\n }\r\n\r\n if (this.ctx.ClientWebsiteId === undefined) {\r\n this.ctx.ClientWebsiteId = Config.Website.Id;\r\n }\r\n\r\n API.Forms.GetForm(this.type, this.context).then((def) => {\r\n this.loading = false;\r\n this.definition = def;\r\n\r\n if (this.enableAutosave) {\r\n const state = this.autosaveManager.GetState(this.type);\r\n\r\n if (state !== null) {\r\n this.hasAutosave = true;\r\n }\r\n }\r\n }).catch(() => {\r\n this.errored = true;\r\n });\r\n }\r\n\r\n loadAutosave(): void {\r\n if (!this.hasAutosave) return;\r\n\r\n const state = this.autosaveManager.GetState(this.type);\r\n\r\n if (state === null) return;\r\n\r\n this.definition!.Sections.forEach((section) => {\r\n const sectionComponent = (this.$refs[section.SectionId] as Vue[])[0] as Section;\r\n\r\n sectionComponent.setData(state);\r\n });\r\n }\r\n\r\n private handleFieldInput(fieldDef: FormField): void {\r\n this.errors = this.errors.filter((err) => err.Key !== fieldDef.Key);\r\n }\r\n\r\n submitForm(): void {\r\n if (this.loading) return;\r\n\r\n this.loading = true;\r\n\r\n this.errors = [];\r\n\r\n this.collectData(this.includeRecaptcha).then((data) => {\r\n const normalisedData = Form.normaliseData(data);\r\n\r\n console.log(normalisedData);\r\n\r\n this.loading = false;\r\n\r\n // this.context.ClientWebsiteId = Config.Website.Id;\r\n\r\n // if (this.enableAutosave) this.autosaveManager.SetState(this.type, data);\r\n\r\n API.Forms.SubmitForm(this.type, this.context, normalisedData).then((result) => {\r\n this.loading = false;\r\n\r\n if (!result.Valid) {\r\n // Reset ReCaptcha\r\n this.resetRecaptcha();\r\n\r\n // Update errors\r\n this.errors = result.ValidationState.Errors;\r\n this.errored = true;\r\n } else if (result.Submitted) {\r\n // Inform the user that the form was submitted\r\n this.submitted = true;\r\n\r\n // this.$router.push({ path: '/thank-you' });\r\n\r\n this.$emit('submitted', result.Result);\r\n }\r\n }).catch(() => {\r\n // Reset ReCaptcha\r\n this.resetRecaptcha();\r\n\r\n // Inform the user that there was an error\r\n this.errored = true;\r\n }).finally(() => {\r\n this.loading = false;\r\n });\r\n });\r\n }\r\n\r\n private static normaliseData(data: FormValue[]): FormValue[] {\r\n const newValues: FormValue[] = [];\r\n\r\n data.forEach((entry) => {\r\n if (entry.Value instanceof Array) {\r\n if (entry.Value.length) {\r\n newValues.push({\r\n Key: `${entry.Key}_length`,\r\n Value: entry.Value.length,\r\n });\r\n\r\n for (let i = 0; i < entry.Value.length; i += 1) {\r\n newValues.push({\r\n Key: `${entry.Key}_${i}`,\r\n Value: entry.Value[i],\r\n });\r\n }\r\n }\r\n } else {\r\n newValues.push(entry);\r\n }\r\n });\r\n\r\n return newValues;\r\n }\r\n\r\n private collectData(includeRecaptcha: boolean): Promise {\r\n return new Promise((resolve, reject) => {\r\n const data: FormValue[] = [];\r\n\r\n // Loop through each form secction and collect the data from it\r\n this.definition!.Sections.forEach((section) => {\r\n const sectionComponent = (this.$refs[section.SectionId] as Vue[])[0] as Section;\r\n\r\n data.push(...sectionComponent.collectData());\r\n });\r\n\r\n // If we also need to submit the ReCaptcha response, make sure we call getResponse on the ReCaptcha component\r\n if (includeRecaptcha) {\r\n setTimeout(() => {\r\n this.loading = false;\r\n }, 1000);\r\n\r\n this.getRecaptchaResponse().then((recaptchaResponse: string) => {\r\n Logger.Log(LogLevel.Debug, '[Form]', 'Got ReCaptcha response');\r\n\r\n data.push({\r\n Key: '_recaptcha',\r\n Value: recaptchaResponse,\r\n });\r\n\r\n resolve(data);\r\n }).catch(reject);\r\n\r\n return;\r\n }\r\n\r\n // If we don't need ReCaptcha, resolve straight away\r\n resolve(data);\r\n });\r\n }\r\n\r\n private resetRecaptcha(): void {\r\n this.recaptchaService.Reset();\r\n }\r\n\r\n private getRecaptchaResponse(): Promise {\r\n return this.recaptchaService.GetResponse();\r\n }\r\n}\r\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--14-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/ts-loader/index.js??ref--14-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Form.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--14-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/ts-loader/index.js??ref--14-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Form.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./Form.vue?vue&type=template&id=69add52b&scoped=true&\"\nimport script from \"./Form.vue?vue&type=script&lang=ts&\"\nexport * from \"./Form.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./Form.vue?vue&type=style&index=0&id=69add52b&scoped=true&lang=css&\"\nimport style1 from \"./Form.vue?vue&type=style&index=1&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"69add52b\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"map\"},[(_vm.settings)?[(_vm.config.MapProvider == 2)?_c('MapBoxMap',{ref:\"map\",attrs:{\"map-settings\":_vm.settings},on:{\"moved\":function($event){return _vm.$emit('moved', $event)}}}):_vm._e()]:_vm._e()],2)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n\n\n\n\n\n\r\nimport { Component, Vue, Prop } from \"vue-property-decorator\";\r\nimport { Coordinate, MapSettings } from \"../../types\";\r\nimport { Config } from \"../../services/Config\";\r\n\r\n\r\nconst MapBoxMap = () => import(\"./Providers/MapBoxMap.vue\");\r\n\r\n@Component({\r\n components: {\r\n MapBoxMap,\r\n },\r\n})\r\nexport default class Map extends Vue {\r\n @Prop()\r\n private readonly settings!: MapSettings;\r\n\r\n private config = Config.Website.Settings!.MapProvider;\r\n\r\n public SetCenter(center: Coordinate, zoom: number) {\r\n (this.$refs.map as any).SetCenter(center, zoom);\r\n }\r\n\r\n public GetZoom(): number {\r\n return (this.$refs.map as any).GetZoom();\r\n }\r\n}\r\n","import mod from \"-!../../../cache-loader/dist/cjs.js??ref--14-0!../../../thread-loader/dist/cjs.js!../../../babel-loader/lib/index.js!../../../ts-loader/index.js??ref--14-3!../../../cache-loader/dist/cjs.js??ref--0-0!../../../vue-loader/lib/index.js??vue-loader-options!./Map.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../cache-loader/dist/cjs.js??ref--14-0!../../../thread-loader/dist/cjs.js!../../../babel-loader/lib/index.js!../../../ts-loader/index.js??ref--14-3!../../../cache-loader/dist/cjs.js??ref--0-0!../../../vue-loader/lib/index.js??vue-loader-options!./Map.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./Map.vue?vue&type=template&id=5d1f1668&scoped=true&\"\nimport script from \"./Map.vue?vue&type=script&lang=ts&\"\nexport * from \"./Map.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./Map.vue?vue&type=style&index=0&id=5d1f1668&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"5d1f1668\",\n null\n \n)\n\nexport default component.exports","export * from \"-!../../../mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../../css-loader/dist/cjs.js??ref--6-oneOf-1-1!../../../vue-loader/lib/loaders/stylePostLoader.js!../../../postcss-loader/src/index.js??ref--6-oneOf-1-2!../../../cache-loader/dist/cjs.js??ref--0-0!../../../vue-loader/lib/index.js??vue-loader-options!./Map.vue?vue&type=style&index=0&id=5d1f1668&scoped=true&lang=css&\"","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"multi-select\",class:{'multi-select--focused': _vm.focused},style:({\n '--ms-bg': _vm.background,\n '--focus-bg': _vm.focusBg,\n '--item-border-rad': _vm.itemBorderRad,\n})},[_c('div',{staticClass:\"multi-select__abyss\",on:{\"click\":_vm.defocus}}),_c('div',{staticClass:\"multi-select__input-wrapper\"},[_c('div',{staticClass:\"multi-select__values\"},[_vm._l((_vm.previewItems),function(item){return _c('div',{key:item.Value,staticClass:\"multi-select__value\"},[_c('span',{staticClass:\"multi-select__value__label\"},[_vm._v(_vm._s(item.Label))]),_c('button',{staticClass:\"multi-select__value__remove\",attrs:{\"type\":\"button\"},on:{\"click\":function($event){return _vm.removeItem(item.Value)}}},[_c('Icon',{attrs:{\"icon\":\"close-button\",\"colour\":\"white\"}})],1)])}),(_vm.selectedValue.length + 1 > _vm.previewCount)?_c('div',{staticClass:\"multi-select__value\"},[_c('span',{staticClass:\"multi-select__value__label\"},[_vm._v(_vm._s(_vm.selectedValue.length + 1 - _vm.previewCount)+\" more\")])]):_vm._e()],2),_c('div',{staticClass:\"multi-select__input-wrap\"},[_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.search),expression:\"search\"}],staticClass:\"multi-select__input\",attrs:{\"type\":\"text\",\"placeholder\":_vm.searchPlaceholder},domProps:{\"value\":(_vm.search)},on:{\"keyup\":_vm.updateSearch,\"focus\":_vm.gotFocus,\"input\":function($event){if($event.target.composing){ return; }_vm.search=$event.target.value}}})])]),_c('div',{staticClass:\"multi-select__dropdown\"},[(_vm.searchResults.length)?_c('ul',{staticClass:\"multi-select__dropdown__results\"},_vm._l((_vm.searchResults),function(result){return _c('li',{key:result.Option.Value,staticClass:\"multi-select__dropdown__result\",class:{'multi-select__dropdown__result--selected': result.Selected},on:{\"click\":function($event){return _vm.select(result)}}},[_vm._v(\" \"+_vm._s(result.Option.Label)+\" \")])}),0):_c('div',{staticClass:\"multi-select__dropdown__no-results\"},[_vm._v(\" \"+_vm._s(_vm.noResults)+\" \")])])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\r\nimport { Component, Vue, Prop } from \"vue-property-decorator\";\r\n\r\ninterface MultiSelectOption {\r\n Value: string;\r\n Label: string;\r\n}\r\n\r\ninterface MultiSelectResult {\r\n Option: MultiSelectOption;\r\n Selected: boolean;\r\n}\r\n\r\nexport {\r\n MultiSelectOption\r\n}\r\n\r\n@Component\r\nexport default class MultiSelect extends Vue {\r\n @Prop({ required: true })\r\n private readonly options!: MultiSelectOption[];\r\n\r\n @Prop({ default: false })\r\n private readonly enableCustom!: boolean;\r\n\r\n @Prop({ default: 'Search for ' })\r\n private readonly customLabelPrefix!: string;\r\n\r\n @Prop({ default: 'search:' })\r\n private readonly customValuePrefix!: string;\r\n\r\n @Prop({ default: 5 })\r\n private readonly previewCount!: number;\r\n\r\n @Prop({ default: 'Search' })\r\n private readonly searchPlaceholder!: string;\r\n\r\n @Prop({ default: 'No results found' })\r\n private readonly noResults!: string;\r\n\r\n @Prop({ default: 'transparent' })\r\n private readonly background!: string;\r\n\r\n @Prop({ default: '#fff' })\r\n private readonly focusBg!: string;\r\n\r\n @Prop({ default: '0.25em' })\r\n private readonly itemBorderRad!: string;\r\n\r\n private focused = false;\r\n\r\n private selectedValue: MultiSelectOption[] = [];\r\n\r\n private search = '';\r\n\r\n private searchResults: MultiSelectResult[] = [];\r\n\r\n gotFocus() {\r\n this.focused = true;\r\n this.updateSearch();\r\n }\r\n\r\n defocus() {\r\n requestAnimationFrame(() => {\r\n this.focused = false;\r\n });\r\n }\r\n\r\n updateSearch() {\r\n let results: MultiSelectOption[];\r\n\r\n if (this.search.length === 0) {\r\n results = this.options;\r\n } else {\r\n const loweredSearch = this.search.toLowerCase();\r\n\r\n results = this.options.filter((itm) => itm.Label.toLowerCase().indexOf(loweredSearch) !== -1);\r\n }\r\n\r\n this.searchResults = results\r\n .map((r) => ({ Option: r, Selected: this.selectedValue.some((s) => s.Value === r.Value) }));\r\n\r\n if (this.enableCustom) {\r\n this.searchResults.push({\r\n Option: {\r\n Label: `${this.customLabelPrefix}${this.search}`,\r\n Value: `${this.customValuePrefix}${this.search}`,\r\n },\r\n Selected: false,\r\n });\r\n }\r\n }\r\n\r\n select(option: MultiSelectResult) {\r\n if (!this.selectedValue.some((v) => v.Value === option.Option.Value)) {\r\n this.selectedValue.push(option.Option);\r\n\r\n this.search = '';\r\n\r\n this.updateSearch();\r\n\r\n this.$emit('updated', this.selectedValue);\r\n } else {\r\n this.removeItem(option.Option.Value);\r\n }\r\n }\r\n\r\n removeItem(value: string) {\r\n const idx = this.selectedValue.findIndex((itm) => itm.Value === value);\r\n\r\n if(idx !== -1) {\r\n this.selectedValue.splice(idx, 1);\r\n\r\n this.updateSearch();\r\n\r\n this.$emit('updated', this.selectedValue);\r\n }\r\n }\r\n\r\n public setValues(value: string[]): void {\r\n this.selectedValue = this.options.filter((opt) => value.indexOf(opt.Value) !== -1);\r\n }\r\n\r\n get previewItems(): MultiSelectOption[] {\r\n return this.selectedValue.slice(0, this.previewCount - 1);\r\n }\r\n}\r\n","import mod from \"-!../../cache-loader/dist/cjs.js??ref--14-0!../../thread-loader/dist/cjs.js!../../babel-loader/lib/index.js!../../ts-loader/index.js??ref--14-3!../../cache-loader/dist/cjs.js??ref--0-0!../../vue-loader/lib/index.js??vue-loader-options!./MultiSelect.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../cache-loader/dist/cjs.js??ref--14-0!../../thread-loader/dist/cjs.js!../../babel-loader/lib/index.js!../../ts-loader/index.js??ref--14-3!../../cache-loader/dist/cjs.js??ref--0-0!../../vue-loader/lib/index.js??vue-loader-options!./MultiSelect.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./MultiSelect.vue?vue&type=template&id=396af627&scoped=true&\"\nimport script from \"./MultiSelect.vue?vue&type=script&lang=ts&\"\nexport * from \"./MultiSelect.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./MultiSelect.vue?vue&type=style&index=0&id=396af627&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"396af627\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('Page',[_c('SiteMasthead',{attrs:{\"mini\":true,\"title\":\"Contact\"}}),_c('ContentRow',[_c('ContentContainer',{staticClass:\"content-container--medium\"},[_c('p',[_vm._v(\"Call us today \"+_vm._s(_vm.office.Phone))]),_c('Form',{attrs:{\"type\":\"Generic.WebsiteContactForm\"}})],1)],1),(_vm.mapSettings)?_c('Deferrable',[_c('Map',{staticStyle:{\"max-height\":\"500px\"},attrs:{\"settings\":_vm.mapSettings}})],1):_vm._e()],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\r\nimport { Component, Mixins } from 'vue-property-decorator';\r\nimport { Office, MapSettings, MapMarker } from 'client-website-ts-library/types';\r\nimport { API, Config } from 'client-website-ts-library/services';\r\nimport { Map } from 'client-website-ts-library/components';\r\nimport { View } from 'client-website-ts-library/plugins';\r\nimport Form from '@/components/Forms/Form.vue';\r\n\r\n@Component({\r\n components: {\r\n Map,\r\n Form,\r\n },\r\n})\r\nexport default class ContactUs extends Mixins(View) {\r\n private office: Office | null = null;\r\n\r\n private mapSettings: MapSettings | null = null;\r\n\r\n mounted() {\r\n API.Offices.Get(Config.Website.Settings!.WebsiteId).then((office) => {\r\n this.office = office;\r\n\r\n this.mapSettings = new MapSettings({\r\n Markers: [\r\n new MapMarker({\r\n Address: `${this.office.AddressLine1} ${this.office.AddressLine2}`,\r\n Title: this.office.FranchiseName,\r\n /* Coordinate: {\r\n Lat: 0,\r\n Lon: 0,\r\n }, */\r\n }),\r\n ],\r\n });\r\n });\r\n }\r\n}\r\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--14-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/ts-loader/index.js??ref--14-3!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ContactUs.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--14-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/ts-loader/index.js??ref--14-3!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ContactUs.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./ContactUs.vue?vue&type=template&id=b54d6148&scoped=true&\"\nimport script from \"./ContactUs.vue?vue&type=script&lang=ts&\"\nexport * from \"./ContactUs.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./ContactUs.vue?vue&type=style&index=0&id=b54d6148&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"b54d6148\",\n null\n \n)\n\nexport default component.exports","export * from \"-!../../mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../css-loader/dist/cjs.js??ref--6-oneOf-1-1!../../vue-loader/lib/loaders/stylePostLoader.js!../../postcss-loader/src/index.js??ref--6-oneOf-1-2!../../cache-loader/dist/cjs.js??ref--0-0!../../vue-loader/lib/index.js??vue-loader-options!./ReCaptcha.vue?vue&type=style&index=0&id=95eda1a8&scoped=true&lang=css&\""],"sourceRoot":""}