1<!doctype html> 2<html lang="en"> 3<head > 4 <meta charset="utf-8"/>
4<script type="text/javascript">(window.NREUM||(NREUM={})).init={privacy:{cookies_enabled:true},ajax:{deny_list:["bam.nr-data.net"]},distributed_tracing:{enabled:true}};(window.NREUM||(NREUM={})).loader_config={agentID:"1120151136",accountID:"3731713",trustKey:"1322840",xpid:"VwEEUFFSCxABVVBQAQACV1cJ",licenseKey:"NRJS-d3390ca2649c82069a5",applicationID:"1112615138",browserID:"1120151136"};;/*! For license information please see nr-loader-spa-1.323.0.min.js.LICENSE.txt */ 5(()=>{var e={8122(e,t,r){"use strict";r.d(t,{a:()=>i});var n=r(944);function i(e,t){try{if(!e||"object"!=typeof e)return(0,n.R)(3);if(!t||"object"!=typeof t)return(0,n.R)(4);const r=Object.create(Object.getPrototypeOf(t),Object.getOwnPropertyDescriptors(t)),s=0===Object.keys(r).length?e:r;for(let a in s)if(void 0!==e[a])try{if(null===e[a]){r[a]=null;continue}Array.isArray(e[a])&&Array.isArray(t[a])?r[a]=Array.from(new Set([...e[a],...t[a]])):e[a]instanceof Map||e[a]instanceof Set||e[a]instanceof Date||e[a]instanceof RegExp?r[a]=e[a]:"object"==typeof e[a]&&null!==t[a]&&"object"==typeof t[a]?r[a]=i(e[a],t[a]):r[a]=e[a]}catch(e){r[a]||(0,n.R)(1,e)}return r}catch(e){(0,n.R)(2,e)}}},2555(e,t,r){"use strict";r.d(t,{f:()=>a});var n=r(384),i=r(8122);const s={beacon:n.NT.beacon,errorBeacon:n.NT.errorBeacon,licenseKey:void 0,applicationID:void 0,sa:void 0,queueTime:void 0,applicationTime:void 0,ttGuid:void 0,user:void 0,account:void 0,product:void 0,extra:void 0,jsAttributes:{},userAttributes:void 0,atts:void 0,transactionName:void 0,tNamePlain:void 0};function a(e){try{return!!e.licenseKey&&!!e.errorBeacon&&!!e.applicationID}catch(e){return!1}}r.d(t,["D",0,e=>(0,i.a)(e,s)])},7699(e,t,r){"use strict";var n=r(860);const i={[n.K7.logging]:!0,[n.K7.genericEvents]:!0,[n.K7.jserrors]:!0,[n.K7.ajax]:!0};r.d(t,["It",0,1e6,"KC",0,i,"qh",0,"SESSION_ERROR"])},9324(e,t,r){"use strict";r.d(t,["A",0,"@newrelic/rrweb","x",0,"1.323.0"])},981(e,t,r){"use strict";r.d(t,["R",0,{AJAX:"AjaxRequest",PA:"PageAction",UA:"UserAction",BP:"BrowserPerformance",WS:"WebSocket",SPV:"SecurityPolicyViolation",JSE:"JavaScriptError",LOG:"Log",PVE:"PageView",PVT:"PageViewTiming",SR:"SessionReplay",ST:"SessionTrace",BI:"BrowserInteraction"}])},9752(e,t,r){"use strict";const n="newrelic-iframe-",i=n+"timing-update",s=n+"api",a=n+"api-response",o=n+"vitals-update",c=n+"ajax";r.d(t,["$8",0,o,"Gi",0,a,"KU",0,c,"Pl",0,n,"cS",0,s,"cr",0,i])},6154(e,t,r){"use strict";var n=r(1863);const i="undefined"!=typeof window&&!!window.document,s="undefined"!=typeof WorkerGlobalScope&&("undefined"!=typeof self&&self instanceof WorkerGlobalScope&&self.navigator instanceof WorkerNavigator||"undefined"!=typeof globalThis&&globalThis instanceof WorkerGlobalScope&&globalThis.navigator instanceof WorkerNavigator),a=i?window:"undefined"!=typeof WorkerGlobalScope&&("undefined"!=typeof self&&self instanceof WorkerGlobalScope&&self||"undefined"!=typeof globalThis&&globalThis instanceof WorkerGlobalScope&&globalThis),o=Boolean("hidden"===a?.document?.visibilityState),c=""+a?.location,d=/iPad|iPhone|iPod/.test(a.navigator?.userAgent),u=d&&"undefined"==typeof SharedWorker,l=(()=>{const e=a.navigator?.userAgent?.match(/Firefox[/\s](\d+\.\d+)/);return Array.isArray(e)&&e.length>=2?+e[1]:0})(),f=Date.now()-(0,n.t)();r.d(t,["OF",0,d,"RI",0,i,"WN",0,f,"bv",0,s,"gm",0,a,"lR",0,l,"m",0,c,"mw",0,o,"sb",0,u,"zk",0,()=>{const e=a?.performance?.getEntriesByType?.("navigation")?.[0];if(e&&e.responseStart>0&&e.responseStart<a.performance.now())return e}])},7295(e,t,r){"use strict";r.d(t,{Xv:()=>a,gX:()=>i,iW:()=>s});var n=[];function i(e){if(!e||s(e))return!1;if(0===n.length)return!0;if("*"===n[0].hostname)return!1;for(var t=0;t<n.length;t++){var r=n[t];if(r.hostname.test(e.hostname)&&r.pathname.test(e.pathname))return!1}return!0}function s(e){return void 0===e.hostname}function a(e){if(n=[],e&&e.length)for(var t=0;t<e.length;t++){let r=e[t];if(!r)continue;if("*"===r)return void(n=[{hostname:"*"}]);0===r.indexOf("http://")?r=r.substring(7):0===r.indexOf("https://")&&(r=r.substring(8));const i=r.indexOf("/");let s,a;i>0?(s=r.substring(0,i),a=r.substring(i)):(s=r,a="*");let[c]=s.split(":");n.push({hostname:o(c),pathname:o(a,!0)})}}function o(e,t=!1){const r=e.replace(/[.+?^${}()|[\]\\]/g,e=>"\\"+e).replace(/\*/g,".*?");return new RegExp((t?"^":"")+r+"$")}},3241(e,t,r){"use strict";r.d(t,{W:()=>i});var n=r(6154);function i(e={}){try{n.gm.dispatchEvent(new CustomEvent("newrelic",{detail:e}))}catch(e){}}},1687(e,t,r){"use strict";r.d(t,{Ak:()=>o,Ze:()=>d,x3:()=>c});var n=r(3241),i=r(3606),s=r(860),a=r(2646);function o(e,t){if(!e)return;const r={staged:!1,priority:s.P3[t]||0};
5e.runtime.drainRegistry.get(t)||e.runtime.drainRegistry.set(t,r)}function c(e,t){if(!e)return;const r=e.runtime.drainRegistry;r&&(r.get(t)&&r.delete(t),l(e,t,!1),r.size&&u(e))}function d(e,t="feature",r=!1){if(e){if(!e.runtime.drainRegistry.get(t)||r)return l(e,t);e.runtime.drainRegistry.get(t).staged=!0,u(e)}}function u(e){if(!e)return;const t=Array.from(e.runtime.drainRegistry);t.every(([e,t])=>t.staged)&&(t.sort((e,t)=>e[1].priority-t[1].priority),t.forEach(([t])=>{e.runtime.drainRegistry.delete(t),l(e,t)}))}function l(e,t,r=!0){if(!e)return;const s=e.ee,o=i.i.handlers;if(s&&!s.aborted&&s.backlog&&o){if((0,n.W)({type:"lifecycle",name:"drain",feature:t}),r){const e=s.backlog[t],r=o[t];if(r){for(let t=0;e&&t<e.length;++t)f(e[t],r);Object.entries(r).forEach(([e,t])=>{Object.values(t||{}).forEach(t=>{t[0]?.on&&t[0].context()instanceof a.y&&!t[0].listeners(e).includes(t[1])&&t[0].on(e,t[1])})})}}s.isolatedBacklog||delete o[t],s.backlog[t]=null,s.emit("drain-"+t,[])}}function f(e,t){var r=e[1];Object.values(t[r]||{}).forEach(t=>{var r=e[0];if(t[0]===r){var n=t[1],i=e[3],s=e[2];n.apply(i,s)}})}},7836(e,t,r){"use strict";var n=r(384),i=r(8990),s=r(2646),a=r(5607);const o="nr@context:".concat(a.W),c=function e(t,r){var n={},a={},u={},l=!1;try{l=16===r.length&&d.initializedAgents?.[r]?.runtime.isolatedBacklog}catch(e){}var f={on:p,addEventListener:p,removeEventListener:function(e,t){var r=n[e];if(!r)return;for(var i=0;i<r.length;i++)r[i]===t&&r.splice(i,1)},emit:function(e,r,n,i,s){!1!==s&&(s=!0);if(c.aborted&&!i)return;t&&s&&t.emit(e,r,n);var o=h(n);g(e).forEach(e=>{e.apply(o,r)});var d=v()[a[e]];d&&d.push([f,e,r,o]);return o},get:m,listeners:g,context:h,buffer:function(e,t){const r=v();if(t=t||"feature",f.aborted)return;Object.entries(e||{}).forEach(([e,n])=>{a[n]=t,t in r||(r[t]=[])})},abort:function(){f._aborted=!0,Object.keys(f.backlog).forEach(e=>{delete f.backlog[e]})},isBuffering:function(e){return!!v()[a[e]]},debugId:r,backlog:l?{}:t&&"object"==typeof t.backlog?t.backlog:{},isolatedBacklog:l};return Object.defineProperty(f,"aborted",{get:()=>{let e=f._aborted||!1;return e||(t&&(e=t.aborted),e)}}),f;function h(e){return e&&e instanceof s.y?e:e?(0,i.I)(e,o,()=>new s.y(o)):new s.y(o)}function p(e,t){n[e]=g(e).concat(t)}function g(e){return n[e]||[]}function m(t){return u[t]=u[t]||e(f,t)}function v(){return f.backlog}}(void 0,"globalEE"),d=(0,n.Zm)();d.ee||(d.ee=c),r.d(t,["P",0,o,"ee",0,c])},2646(e,t,r){"use strict";r.d(t,{y:()=>n});class n{constructor(e){this.contextId=e}}},9908(e,t,r){"use strict";r.d(t,{d:()=>n,p:()=>i});var n=r(7836).ee.get("handle");function i(e,t,r,i,s){s?(s.buffer([e],i),s.emit(e,t,r)):(n.buffer([e],i),n.emit(e,t,r))}},3606(e,t,r){"use strict";r.d(t,{i:()=>s});var n=r(9908);s.on=a;var i=s.handlers={};function s(e,t,r,s){a(s||n.d,i,e,t,r)}function a(e,t,r,i,s){s||(s="feature"),e||(e=n.d);var a=t[s]=t[s]||{};(a[r]=a[r]||[]).push([e,i])}},3878(e,t,r){"use strict";function n(e,t){return{capture:e,passive:!1,signal:t}}function i(e,t,r=!1,i){window.addEventListener(e,t,n(r,i))}function s(e,t,r=!1,i){document.addEventListener(e,t,n(r,i))}r.d(t,{DD:()=>s,jT:()=>n,sp:()=>i})},5607(e,t,r){"use strict";const n=(0,r(9566).bz)();r.d(t,["W",0,n])},9566(e,t,r){"use strict";r.d(t,{LA:()=>a,ZF:()=>o,bz:()=>s,el:()=>c});var n=r(6154);function i(e,t){return e?15&e[t]:16*Math.random()|0}function s(){const e=n.gm?.crypto||n.gm?.msCrypto;let t,r=0;return e&&e.getRandomValues&&(t=e.getRandomValues(new Uint8Array(30))),"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".split("").map(e=>"x"===e?i(t,r++).toString(16):"y"===e?(3&i()|8).toString(16):e).join("")}function a(e){const t=n.gm?.crypto||n.gm?.msCrypto;let r,s=0;t&&t.getRandomValues&&(r=t.getRandomValues(new Uint8Array(e)));const a=[];for(var o=0;o<e;o++)a.push(i(r,s++).toString(16));return a.join("")}function o(){return a(16)}function c(){return a(32)}},2614(e,t,r){"use strict";r.d(t,["BB",0,18e5,"Wt",0,"NRBA_SESSION::","g",0,{OFF:0,FULL:1,ERROR:2},"iL",0,{SAME_TAB:"same-tab",CROSS_TAB:"cross-tab"},"tS",0,{STARTED:"session-started",PAUSE:"session-pause",RESET:"session-reset",RESUME:"session-resume",UPDATE:"session-update"},"wk",0,144e5])},733(e,t,r){"use strict";function n(e,t){return function(e){let t=2166136261;for(let r=0;r<e.length;r++)t^=e.charCodeAt(r),t=Math.imul(t,16777619);return(t>>>0).toString(16).padStart(8,"0")}("".concat(String(e),":").concat(String(t)))}r.d(t,{Y:()=>n})},1863(e,t,r){"use strict";function n(){return Math.floor(performance.now())}r.d(t,{t:()=>n})},9119(e,t,r){"use strict";r.d(t,{L:()=>s});var n=/([^?#]*)[^#]*(#[^?]*|$).*/,i=/([^?#]*)().*/;function s(e,t){return e?e.replace(t?n:i,"$1$2"):e}},7485(e,t,r){"use strict";r.d(t,{D:()=>i});var n=r(6154);function i(e){if(0===(e||"").indexOf("data:"))return{protocol:"data"};try{const t=new URL(e,location.href),r={port:t.port,hostname:t.hostname,pathname:t.pathname,search:t.search,protocol:t.protocol.slice(0,t.protocol.indexOf(":")),sameOrigin:t.protocol===n.gm?.location?.protocol&&t.host===n.gm?.location?.host};return r.port&&""!==r.port||("http:"===t.protocol&&(r.port="80"),"https:"===t.protocol&&(r.port="443")),r.pathname&&""!==r.pathname?r.pathname.startsWith("/")||(r.pathname="/".concat(r.pathname)):r.pathname="/",r}catch(e){return{}}}},7866(e,t,r){"use strict";r.d(t,["Nc",0,/^\s*at Function code \(Function code:\d+:\d+\)\s*/i,"cn",0,/^\s*(?:([^@]*)(?:\(.*?\))?@)?((?:file|http|https|chrome|safari-extension).*?):(\d+)(?::(\d+))?\s*$/i,"fL",0,/^\s*at .+ \(eval at \S+ \((?:(?:file|http|https):[^)]+)?\)(?:, [^:]*:\d+:\d+)?\)$/i,"h3",0,/function (.+?)\s*\(/,"hB",0,/^\s*at (?:((?:\[object object\])?(?:[^(]*\([^)]*\))*[^()]*(?: \[as \S+\])?) )?\(?((?:file|http|https|chrome-extension):.*?)?:(\d+)(?::(\d+))?\)?\s*$/i])},944(e,t,r){"use strict";r.d(t,{R:()=>i});var n=r(3241);function i(e,t){"function"==typeof console.debug&&(console.debug("New Relic Warning: https://github.com/newrelic/newrelic-browser-agent/blob/main/docs/warning-codes.md#".concat(e),t),(0,n.W)({drained:null,type:"data",name:"warn",feature:"warn",data:{code:e,secondary:t}}))}},8990(e,t,r){"use strict";r.d(t,{I:()=>i});var n=Object.prototype.hasOwnProperty;function i(e,t,r){if(n.call(e,t))return e[t];var i=r();if(Object.defineProperty&&Object.keys)try{return Object.defineProperty(e,t,{value:i,writable:!0,enumerable:!1}),i}catch(e){}return e[t]=i,i}},6389(e,t,r){"use strict";function n(e,t=500,r={}){const n=r?.leading||!1;let i;return(...r)=>{n&&void 0===i&&(e.apply(this,r),i=setTimeout(()=>{i=clearTimeout(i)},t)),n||(clearTimeout(i),i=setTimeout(()=>{e.apply(this,r)},t))}}function i(e){let t=!1;return(...r)=>{t||(t=!0,e.apply(this,r))}}r.d(t,{J:()=>i,s:()=>n})},1910(e,t,r){"use strict";r.d(t,{i:()=>s});var n=r(944);const i=new Map;function s(...e){return e.every(e=>{if(i.has(e))return i.get(e);const t="function"==typeof e?e.toString():"",r=t.includes("[native code]"),s=t.includes("nrWrapper");return r||s||(0,n.R)(64,e?.name||t),i.set(e,r),r})}},3304(e,t,r){"use strict";r.d(t,{A:()=>i});var n=r(7836);function i(e){try{return JSON.stringify(e,(()=>{const e=new WeakSet;return(t,r)=>{if("object"==typeof r&&null!==r){if(e.has(r))return;e.add(r)}return r}})())??""}catch(e){try{n.ee.emit("internal-error",[e])}catch(e){}return""}}},9232(e,t,r){"use strict";r.d(t,["f",0,{MFE:"MFE",BA:"BA"}])},7560(e,t,r){"use strict";r.d(t,{N:()=>a,j:()=>c});var n=r(9119),i=r(944);const s=(0,r(6389).J)(e=>(0,i.R)(80,e));function a(e){if(!Array.isArray(e?.assets)||!e.assets.length)return;
5const t=e.assets.map(o).filter(Boolean);return t.length?{assets:t,scripts:t.filter(e=>e.isScript)}:void 0}function o(e){if(!e||"object"!=typeof e)return;const{matcher:t,type:r}=e;let i="string"==typeof t&&t.endsWith(".js");return void 0!==r&&(!function(e){return"script"===e||"asset"===e}(r)?s(r):i=function(e){return"script"===e}(r)),a=t,"[object RegExp]"===Object.prototype.toString.call(a)?{pattern:t,test:e=>(t.lastIndex=0,t.test((0,n.L)(e))),isScript:i}:"string"==typeof t&&t.length>0?{pattern:t,test:e=>(0,n.L)(e).includes(t),isScript:i}:void s(t);var a}function c(e,t,{scriptsOnly:r=!1}={}){if(!e||!t)return!1;return(r?e.scripts:e.assets).some(e=>e.test(t))}},5718(e,t,r){"use strict";r.d(t,{xo:()=>T,AZ:()=>v,cI:()=>g,Qr:()=>A,QL:()=>y});var n=r(6154),i=r(1863),s=r(9119),a=r(7866);class o{dom=new c;performance=new c;constructor(e){this.url=e,this.claimedBy=new Set}get script(){const e=Math.max(this.dom.start,this.performance.end);return{start:e,end:Math.max(this.dom.end,this.performance.end,e)}}}class c{start=0;end=0;value=void 0}function d(e=()=>{},t){return{get:()=>void 0!==t?t:e(),set:e=>{t=e}}}let u;try{u=v(y())[0]}catch(e){u=v(e)[0]}const l=new Map;let f=[];const h=new WeakMap;function p(e){let t=h.get(e);return t||(t={weighedAssetUrls:new Set,recordManifestScriptWindow:(t,r)=>{t&&(e.scriptStart=e.scriptStart>0?Math.min(e.scriptStart,t):t),r&&(e.scriptEnd=e.scriptEnd>0?Math.max(e.scriptEnd,r):r)}},h.set(e,t)),t}function g(e){return l.get(e)}function m(e){const t=g(e);
5if(t)return t;const r=new o(e);if(l.set(e,r),l.size>1e3){const e=l.keys().next().value;l.delete(e)}return r}if(n.gm.MutationObserver&&n.gm.document){new MutationObserver(e=>{e.forEach(e=>{e.addedNodes.forEach(e=>{if("SCRIPT"===e.nodeName&&e.src){const t=m((0,s.L)(e.src));t.dom.start=(0,i.t)(),t.dom.value=e;const r=()=>{t.dom.end=(0,i.t)()};["load","error"].forEach(t=>e.addEventListener(t,r,{once:!0}))}})})}).observe(n.gm.document,{childList:!0,subtree:!0})}if(n.gm.PerformanceObserver?.supportedEntryTypes.includes("resource")){new PerformanceObserver(e=>{e.getEntries().forEach(e=>{if((e=>"script"===e.initiatorType||["link","fetch"].includes(e.initiatorType)&&(0,s.L)(e.name).endsWith(".js"))(e)){const t=m((0,s.L)(e.name));t.performance.start=Math.floor(e.startTime),t.performance.end=Math.floor(e.responseEnd),t.performance.value=e}if(!f.length)return;const t=[];f.forEach(({test:r,addedAt:n},s)=>{(r(e)||(0,i.t)()-n>1e4)&&t.push(s)}),f=f.filter((e,r)=>!t.includes(r))})}).observe({type:"resource",buffered:!0})}function v(e){if(!e||"string"!=typeof e)return[];const t=new Set,r=e.split("\n");for(const e of r){const r=e.match(a.cn)||e.match(a.hB)||e.match(a.fL);if(r&&r[2])t.add((0,s.L)(r[2]));else{const r=e.match(/\(([^)]+\.js):\d+:\d+\)/)||e.match(/^\s+at\s+([^\s(]+\.js):\d+:\d+/);r&&r[1]&&t.add((0,s.L)(r[1]))}}return[...t]}function y(){let e;try{const t=Error.stackTraceLimit;Error.stackTraceLimit=50,e=(new Error).stack,Error.stackTraceLimit=t}catch(t){e=(new Error).stack}return e}function b(e,t){return(0,s.L)(e.name)===t}function E(e,t){e.fetchStart=Math.floor(t.startTime),e.fetchEnd=Math.floor(t.responseEnd),e.asset=t.name,e.type=t.initiatorType,w(e,t)}function w(e,t){const r=(0,s.L)(t.name),{weighedAssetUrls:n}=p(e);n.has(r)||(n.add(r),e.totalWeight=(e.totalWeight||0)+(t.transferSize||0),"blocking"===t.renderBlockingStatus?e.renderBlocking=!0:"non-blocking"===t.renderBlockingStatus&&!0!==e.renderBlocking&&(e.renderBlocking=!1))}function R(e,t,r,n,i){if(w(e,t),"scripts"!==i&&"all"!==i)return;if("all"===i||r.isScript){const r=Math.floor(t.startTime),n=Math.floor(t.responseEnd);e.fetchStart=e.fetchStart>0?Math.min(e.fetchStart,r):r,e.fetchEnd=e.fetchEnd>0?Math.max(e.fetchEnd,n):n}if(r.isScript){const r=g((0,s.L)(t.name));if(r){const t=()=>{const{start:t,end:n}=r.script;p(e).recordManifestScriptWindow(t,n)};t(),!r.dom.end&&r.dom.value&&["load","error"].forEach(e=>r.dom.value.addEventListener(e,t,{once:!0}))}n.resolved||(e.asset=t.name,e.type=t.initiatorType,n.resolved=!0)}}function T(e,t){const r=t?.manifest;if(!r||!r.assets.length)return;const s={resolved:!1},a=new Set(r.assets);(n.gm.performance?.getEntriesByType("resource")||[]).forEach(r=>{const n=[...a].find(e=>e.test(r.name));n&&(R(e,r,n,s,t.timingMethod),a.delete(n))}),a.size&&function(e,t,r,s){n.gm.PerformanceObserver?.supportedEntryTypes?.includes("resource")&&f.push({addedAt:(0,i.t)(),test:n=>{const i=[...t].find(e=>e.test(n.name));return i&&(R(e,n,i,r,s),t.delete(i)),0===t.size}})}(e,a,s,t.timingMethod)}function A(e){const t=e?.id,r={registeredAt:(0,i.t)(),reportedAt:void 0,fetchStart:0,fetchEnd:0,scriptStart:0,scriptEnd:0,asset:void 0,type:"unknown",totalWeight:0,renderBlocking:void 0},a=y();if(!a)return r;const o=n.gm.performance?.getEntriesByType("navigation")?.[0]?.name||"";try{const e=v(a),c=(e.length>1?e.filter(e=>u!==e):e)[0];if(!c)return r;if(o.includes(c))return r.asset=(0,s.L)(o),r.type="inline",r;r.correlation=g(c);const l=r.correlation?.performance.value||n.gm.performance?.getEntriesByType("resource")?.find(e=>b(e,c));if(l)E(r,l);else{(function(e){if(!e||!n.gm.document)return!1;try{const t=n.gm.document.querySelectorAll('link[rel="preload"][as="script"]');for(const r of t)if((0,s.L)(r.href)===e)return!0}catch(e){}return!1})(c)&&(r.asset=c,r.type="preload"),function(e,t){n.gm.PerformanceObserver?.supportedEntryTypes?.includes("resource")&&f.push({addedAt:(0,i.t)(),test:r=>!!b(r,t)&&(E(e,r),!0)})}(r,c)}const h=r.correlation,m=!!t&&!!h?.claimedBy.has(t);h&&t&&h.claimedBy.add(t);const y=()=>{const e=h?.script.start;if(!m||!e)return!1;return r.registeredAt-e>1e4};let w=0,R=0;p(r).recordManifestScriptWindow=(e,t)=>{e&&(w=w>0?Math.min(w,e):e),t&&(R=R>0?Math.max(R,t):t)},Object.defineProperty(r,"scriptStart",d(()=>{const e=y()?r.registeredAt:h?.script.start??r.fetchEnd;return w>0?Math.min(e,w):e})),Object.defineProperty(r,"scriptEnd",d(()=>{const e=y()?r.registeredAt:h?.script.end??r.registeredAt;return R>0?Math.max(e,R):e}))}catch(e){}return r}},5732(e,t,r){"use strict";r.d(t,{$5:()=>m,B5:()=>g,K6:()=>u,M$:()=>
5o,Ms:()=>d,NG:()=>c,Ux:()=>h,YA:()=>p,yx:()=>l});var n=r(5718),i=r(7560),s=r(9119),a=r(9232);function o(e){return e?.type===a.f.MFE}function c(e,t){if(!y(e,t))return;const r=t.runtime.registeredEntities;return r?.find(t=>t.metadata.target.iframeInterfaceId===e)}function d(e,t){if(!y(e,t))return[];const r=t.runtime.registeredEntities;return r?.filter(t=>String(t.metadata.target.id)===String(e)).map(e=>e.metadata.target)||[]}function u(e,t){if(!y(e,t))return[];const r=t.runtime.registeredEntities,n=(0,s.L)(e),a=r?.filter(t=>{const r=t.metadata.target?.manifest;return r?(0,i.j)(r,e,{scriptsOnly:!1}):!!t.metadata.timings?.asset&&(0,s.L)(t.metadata.timings.asset)===n});return f(a).map(e=>e.metadata.target)}function l(e,t){if(!y(e,t))return[];const r=t.runtime.registeredEntities,n=r?.filter(t=>{const r=t.metadata.target?.manifest;return r?(0,i.j)(r,e,{scriptsOnly:!0}):!!t.metadata.timings?.asset?.endsWith(e)});return f(n).map(e=>e.metadata.target)}function f(e){if(!e?.length)return e||[];const t=new Map,r=[];for(const n of e){const e=n.metadata?.timings?.asset;if(!e){r.push(n);continue}const i="".concat(e,"::").concat(n.metadata?.target?.id),s=t.get(i);if(s){if(s.metadata.target?.blocked&&!n.metadata.target?.blocked){const e=r.indexOf(s);-1!==e&&(r[e]=n),t.set(i,n)}}else t.set(i,n),r.push(n)}return r}function h(e,t){return v(t)?o(e)?e.attributes:t.agentRef.runtime.v2Target.attributes:{}}function p(e,t){return g(e,t)?{"child.id":e.id,"child.type":e.type,...h(void 0,t)}:{}}function g(e,t){return o(e)&&!!v(t)&&t.agentRef.init.api.register.duplicate_data_to_container}function m(e){if(!e?.runtime)return[];if(!y(!0,e)||!e.runtime.registeredEntities?.length)return[e.runtime.v2Target];const t=[];try{var r=(0,n.AZ)((0,n.QL)());let i=r.length-1;for(;r[i];)t.push(...l(r[i--],e))}catch(e){}const i=function(e){const t=new Set,r=[];for(const n of e){const e=n?.instance;t.has(e)||(t.add(e),r.push(n))}return r}(t);return i.length||i.push(e.runtime.v2Target),i}function v(e){return 2===e?.harvestEndpointVersion}function y(e,t){return!!e&&!!t?.init.api.register.enabled}},5289(e,t,r){"use strict";r.d(t,{GG:()=>a,Qr:()=>c,sB:()=>o});var n=r(3878),i=r(6389);function s(){return"undefined"==typeof document||"complete"===document.readyState}function a(e,t){if(s())return e();const r=(0,i.J)(e),a=setInterval(()=>{s()&&(clearInterval(a),r())},500);(0,n.sp)("load",r,t)}function o(e){if(s())return e();(0,n.DD)("DOMContentLoaded",e)}function c(e){if(s())return e();(0,n.sp)("popstate",e)}},384(e,t,r){"use strict";r.d(t,{Zm:()=>c,bQ:()=>u,dV:()=>d,pV:()=>l});var n=r(6154),i=r(1863),s=r(944),a=r(1910);const o={beacon:"bam.nr-data.net",errorBeacon:"bam.nr-data.net"};function c(){return n.gm.NREUM||(n.gm.NREUM={}),void 0===n.gm.newrelic&&(n.gm.newrelic=n.gm.NREUM),n.gm.NREUM}function d(){let e=c();return e.o||(e.o={ST:n.gm.setTimeout,SI:n.gm.setImmediate||n.gm.setInterval,CT:n.gm.clearTimeout,XHR:n.gm.XMLHttpRequest,REQ:n.gm.Request,EV:n.gm.Event,PR:n.gm.Promise,MO:n.gm.MutationObserver,FETCH:n.gm.fetch,WS:n.gm.WebSocket},(0,a.i)(...Object.values(e.o))),e}function u(e,t){let r=c();r.initializedAgents??={},t.initializedAt={ms:(0,i.t)(),date:new Date},r.initializedAgents[e]=t,2===Object.keys(r.initializedAgents).length&&(0,s.R)(69)}function l(){return function(){let e=c();const t=e.info||{};e.info={beacon:o.beacon,errorBeacon:o.errorBeacon,...t}}(),function(){let e=c();const t=e.init||{};e.init={...t}}(),d(),function(){let e=c();const t=e.loader_config||{};e.loader_config={...t}}(),c()}r.d(t,["NT",0,o])},2843(e,t,r){"use strict";r.d(t,{G:()=>s,u:()=>i});var n=r(3878);function i(e,t=!1,r,i){(0,n.DD)("visibilitychange",function(){if(t)return void("hidden"===document.visibilityState&&e());e(document.visibilityState)},r,i)}function s(e,t,r){(0,n.sp)("pagehide",e,t,r)}},8139(e,t,r){"use strict";r.d(t,{u:()=>f});var n=r(7836),i=r(3434),s=r(8990),a=r(6154);const o={},c=a.gm.XMLHttpRequest,d="addEventListener",u="removeEventListener",l="nr@wrapped:".concat(n.P);function f(e,t){var r=function(e){return(e||n.ee).get("events")}(e);if(o[r.debugId]++)return r;o[r.debugId]=1;var f=(0,i.YM)(r,!0,t);function p(e){f.inPlace(e,[d,u],"-",g)}function g(e,t){return e[1]}return"getPrototypeOf"in Object&&(a.RI&&h(document,p),c&&h(c.prototype,p),h(a.gm,p)),r.on(d+"-start",function(e,t){var r=e[1];if(null!==r&&("function"==typeof r||"object"==typeof r)&&"newrelic"!==e[0]){var n=(0,s.I)(r,l,function(){var e={object:function(){if("function"!=typeof r.handleEvent)return;return r.handleEvent.apply(r,arguments)},function:r}[typeof r];return e?f(e,"fn-",null,e.name||"anonymous"):r});this.wrapped=e[1]=n}}),r.on(u+"-start",function(e){e[1]=this.wrapped||e[1]}),r}function h(e,t,...r){let n=e;for(;"object"==typeof n&&!Object.prototype.hasOwnProperty.call(n,d);)n=Object.getPrototypeOf(n);n&&t(n,...r)}},3434(e,t,r){"use strict";r.d(t,{YM:()=>d});var n=r(7836),i=r(5607),s=r(5732);const a="nr@original:".concat(i.W);var o=Object.prototype.hasOwnProperty,c=!1;function d(e,t,r){return e||(e=n.ee),i.inPlace=function(e,t,r,n,s,a){r||(r="");const o="-"===r.charAt(0);for(let c=0;c<t.length;c++){const d=t[c],u=e[d];l(u)||(e[d]=i(u,o?d+r:r,n,d,s,a))}},i.flag=a,i;function i(t,n,i,c,f,h){return l(t)?t:(n||(n=""),nrWrapper[a]=t,function(e,t,r){if(Object.defineProperty&&Object.keys)try{return Object.keys(e).forEach(function(r){Object.defineProperty(t,r,{get:function(){return e[r]},set:function(t){return e[r]=t,t}})}),t}catch(e){u([e],r)}for(var n in e)o.call(e,n)&&(t[n]=e[n])}
5(t,nrWrapper,e),nrWrapper);function nrWrapper(){var a,o,l,p;let g,m;try{o=this,a=[...arguments],m=h?(0,s.$5)(r):[r?.runtime?.v2Target],l="function"==typeof i?i(a,o):i||{}}catch(t){u([t,"",[a,o,c],l],e)}d(n+"start",[a,o,c,m],l,f);const v=performance.now();let y;try{return p=t.apply(o,a),y=performance.now(),p}catch(e){throw y=performance.now(),d(n+"err",[a,o,e,m],l,f),g=e,g}finally{const e=y-v,t={start:v,end:y,duration:e,isLongTask:e>=50,methodName:c,thrownError:g};t.isLongTask&&d("long-task",[t,o,m],l,f),d(n+"end",[a,o,p,m],l,f)}}}function d(r,n,i,s){if(!c||t){var a=c;c=!0;try{e.emit(r,n,i,t,s)}catch(t){u([t,r,n,i],e)}c=a}}}function u(e,t){t||(t=n.ee);try{t.emit("internal-error",e)}catch(e){}}function l(e){return!(e&&"function"==typeof e&&e.apply&&!e[a])}r.d(t,["Jt",0,a])},9300(e,t,r){"use strict";const n=r(860).K7.ajax;r.d(t,["TZ",0,n,"f5",0,"ajaxRequest.id","mo",0,{NONE:"none",FAILURES:"failures",ALL:"all"}])},3333(e,t,r){"use strict";var n=r(981);const i=r(860).K7.genericEvents,s=[n.R.PA,n.R.UA,n.R.BP];r.d(t,["$v",0,{RESOURCES:"experimental.resources",REGISTER:"register"},"TZ",0,i,"Zp",0,["auxclick","click","copy","keydown","paste","scrollend"],"kd",0,s,"qN",0,["focus","blur"]])},6774(e,t,r){"use strict";const n=r(860).K7.jserrors;r.d(t,["T",0,n])},993(e,t,r){"use strict";const n=r(860).K7.logging;r.d(t,["A$",0,{OFF:0,ERROR:1,WARN:2,INFO:3,DEBUG:4,TRACE:5},"TZ",0,n,"p_",0,{ERROR:"ERROR",WARN:"WARN",INFO:"INFO",DEBUG:"DEBUG",TRACE:"TRACE"}])},3785(e,t,r){"use strict";r.d(t,{R:()=>c,b:()=>d});var n=r(9908),i=r(1863),s=r(860),a=r(3969),o=r(993);function c(e,t,r={},c=o.p_.INFO,d=!0,u,l=(0,i.t)()){(0,n.p)(a.xV,["API/logging/".concat(c.toLowerCase(),"/called")],void 0,s.K7.metrics,e),(0,n.p)("log",[l,t,r,c,d,u],void 0,s.K7.logging,e)}function d(e){return"string"==typeof e&&Object.values(o.p_).some(t=>t===e.toUpperCase().trim())}},3969(e,t,r){"use strict";const n=r(860).K7.metrics;r.d(t,["TZ",0,n,"XG",0,"storeEventMetrics","xV",0,"storeSupportabilityMetrics"])},6630(e,t,r){"use strict";const n=r(860).K7.pageViewEvent;r.d(t,["T",0,n])},782(e,t,r){"use strict";const n=r(860).K7.pageViewTiming;r.d(t,["T",0,n])},6344(e,t,r){"use strict";var n=r(2614);const i=r(860).K7.sessionReplay,s={[n.g.ERROR]:15e3,[n.g.FULL]:3e5,[n.g.OFF]:0}
5;r.d(t,["Qb",0,{API:"api",RESUME:"resume",SWITCH_TO_FULL:"switchToFull",INITIALIZE:"initialize",PRELOAD:"preload"},"TZ",0,i,"Vh",0,"errorDuringReplay","_s",0,{DomContentLoaded:0,Load:1,FullSnapshot:2,IncrementalSnapshot:3,Meta:4,Custom:5},"bc",0,{RESET:{message:"Session was reset",sm:"Reset"},IMPORT:{message:"Recorder failed to import",sm:"Import"},TOO_MANY:{message:"429: Too Many Requests",sm:"Too-Many"},TOO_BIG:{message:"Payload was too large",sm:"Too-Big"},CROSS_TAB:{message:"Session Entity was set to OFF on another tab",sm:"Cross-Tab"},ENTITLEMENTS:{message:"Session Replay is not allowed and will not be started",sm:"Entitlement"}},"yP",0,s])},5270(e,t,r){"use strict";r.d(t,{Aw:()=>a,SR:()=>s,rF:()=>o});var n=r(384),i=r(7767);function s(e){return!!(0,n.dV)().o.MO&&(0,i.V)(e)&&!0===e?.session_trace.enabled}function a(e){return!0===e?.session_replay.preload&&s(e)}function o(e,t){try{if("string"==typeof t?.type&&"password"===t.type.toLowerCase())return"*".repeat(e?.length||0);if(void 0!==t?.dataset?.nrUnmask||t?.classList?.contains("nr-unmask"))return e}catch(e){}return"string"==typeof e?e.replace(/[\S]/g,"*"):"*".repeat(e?.length||0)}},3738(e,t,r){"use strict";const n=r(860).K7.sessionTrace,i="-start",s="-end",a="fn"+i,o="fn"+s;r.d(t,["He",0,"bstResource","Kp",0,s,"Lc",0,o,"Rz",0,"pushState","TZ",0,n,"bD",0,"resource","bc",0,{CROSS_TAB:{message:"Session Entity was set to OFF on another tab"},ENTITLEMENTS:{message:"Session Trace is not allowed and will not be started"},RESET:{message:"Session was reset"},SESSION_CHANGED:{message:"Session identifier changed unexpectedly"}},"d3",0,i,"uP",0,a])},3962(e,t,r){"use strict";const n=r(860).K7.softNav;r.d(t,["O2",0,{INITIAL_PAGE_LOAD:"",ROUTE_CHANGE:1,UNSPECIFIED:2},"OV",0,"popstate","Qu",0,{INTERACTION:1,AJAX:2,CUSTOM_END:3,CUSTOM_TRACER:4},"TZ",0,n,"ih",0,{IP:"in progress",PF:"pending finish",FIN:"finished",CAN:"cancelled"},"pP",0,"initialPageLoad","tC",0,["click","keydown","submit"]])},4234(e,t,r){"use strict";r.d(t,{W:()=>i});var n=r(1687);class i{constructor(e,t){this.agentRef=e,this.ee=e?.ee,this.featureName=t,this.blocked=!1}deregisterDrain(){(0,n.x3)(this.agentRef,this.featureName)}}},7767(e,t,r){"use strict";var n=r(6154);r.d(t,["V",0,e=>n.RI&&!0===e?.privacy.cookies_enabled])},8362(e,t,r){"use strict";r.d(t,{d:()=>s});var n=r(9566),i=r(1741);class s extends i.W{agentIdentifier=(0,n.LA)(16)}},1741(e,t,r){"use strict";r.d(t,{W:()=>s});var n=r(944),i=r(4261);class s{#e(e,...t){if(this[e]!==s.prototype[e])return this[e](...t);(0,n.R)(35,e)}addPageAction(e,t){return this.#e(i.hG,e,t)}register(e){return this.#e(i.eY,e)}recordCustomEvent(e,t){return this.#e(i.fF,e,t)}setPageViewName(e,t){return this.#e(i.Fw,e,t)}setCustomAttribute(e,t,r){return this.#e(i.cD,e,t,r)}noticeError(e,t){return this.#e(i.o5,e,t)}setUserId(e,t=!1){return this.#e(i.Dl,e,t)}setApplicationVersion(e){return this.#e(i.nb,e)}setErrorHandler(e){return this.#e(i.bt,e)}addRelease(e,t){return this.#e(i.k6,e,t)}log(e,t){return this.#e("log",e,t)}start(){return this.#e("start")}finished(e){return this.#e(i.BL,e)}recordReplay(){return this.#e(i.CH)}pauseReplay(){return this.#e(i.Tb)}addToTrace(e){return this.#e(i.U2,e)}setCurrentRouteName(e){return this.#e(i.PA,e)}interaction(e){return this.#e(i.dT,e)}wrapLogger(e,t,r){return this.#e(i.Wb,e,t,r)}measure(e,t){return this.#e(i.V1,e,t)}consent(e){return this.#e(i.Pv,e)}}},4261(e,t,r){"use strict";r.d(t,["BL",0,"finished","CH",0,"recordReplay","Dl",0,"setUserId","Fw",0,"setPageViewName","PA",0,"setCurrentRouteName","Pv",0,"consent","Tb",0,"pauseReplay","U2",0,"addToTrace","V1",0,"measure","Wb",0,"wrapLogger","bt",0,"setErrorHandler","cD",0,"setCustomAttribute","dT",0,"interaction","eY",0,"register","fF",0,"recordCustomEvent","hG",0,"addPageAction","hw",0,"api-ixn-","k6",0,"addRelease","nb",0,"setApplicationVersion","o5",0,"noticeError"])},1738(e,t,r){"use strict";r.d(t,{U:()=>l,Y:()=>u});var n=r(3241),i=r(9908),s=r(1863),a=r(944),o=r(3969),c=r(8362),d=r(860);function u(e,t,r,s){const u=s||r;!u||u[e]&&u[e]!==c.d.prototype[e]||(u[e]=function(){(0,i.p)(o.xV,["API/"+e+"/called"],void 0,d.K7.metrics,r.ee),(0,n.W)({drained:!!r.runtime?.activatedFeatures,type:"data",name:"api",feature:"api-"+e,data:{}});try{return t.apply(this,arguments)}catch(e){(0,a.R)(23,e)}})}function l(e,t,r,n,a){const o=e.info;null===r?delete o.jsAttributes[t]:o.jsAttributes[t]=r,(a||null===r)&&(0,i.p)("api-"+n,[(0,s.t)(),t,r],void 0,"session",e.ee)}},8374(e,t,r){r.nc=(()=>{try{return document?.currentScript?.nonce}catch(e){}return""})()},860(e,t,r){"use strict";const n="events",i="jserrors",s="browser/blobs",a="browser/logs",o={ajax:"ajax",genericEvents:"generic_events",jserrors:i,logging:"logging",metrics:"metrics",pageAction:"page_action",pageViewEvent:"page_view_event",pageViewTiming:"page_view_timing",sessionReplay:"session_replay",sessionTrace:"session_trace",softNav:"soft_navigations"},c={[o.pageViewEvent]:1,[o.pageViewTiming]:2,[o.metrics]:3,[o.jserrors]:4,[o.softNav]:5,[o.ajax]:6,[o.sessionTrace]:7,[o.sessionReplay]:8,[o.logging]:9,[o.genericEvents]:10},d={[o.pageViewEvent]:"rum",[o.pageViewTiming]:n,[o.ajax]:n,[o.softNav]:n,[o.metrics]:i,[o.jserrors]:i,[o.sessionTrace]:s,[o.sessionReplay]:s,[o.logging]:a,[o.genericEvents]:"ins"};r.d(t,["$J",0,d,"K7",0,o,"P3",0,c,"XX",0,i,"Yy",0,a,"df",0,s,"hg",0,"connect"])}};const t={};function r(n){const i=t[n];if(void 0!==i)return i.exports;const s=t[n]={exports:{}};return e[n](s,s.exports,r),s.exports}r.m=e,r.d=(e,t)=>{if(Array.isArray(t))for(var n=0;n<t.length;){var i=t[n++],s=t[n++];r.o(e,i)?0===s&&n++:0===s?Object.defineProperty(e,i,{enumerable:!0,value:t[n++]}):Object.defineProperty(e,i,{enumerable:!0,get:s})}else for(var i in t)r.o(t,i)&&!r.o(e,i)&&Object.defineProperty(e,i,{enumerable:!0,get:t[i]})},r.f={},r.e=e=>Promise.all(Object.keys(r.f).reduce((t,n)=>(r.f[n](e,t),t),[])),r.u=e=>({212:"nr-spa-compressor",238:"nr-spa-iframe-message-handler",249:"nr-spa-recorder",478:"nr-spa"}[e]+"-1.323.0.min.js"),r.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),(()=>{const e={},t="NRBA-1.323.0.PROD:";r.l=(n,i,s,a)=>
5{if(e[n])return void e[n].push(i);let o,c;if(void 0!==s){const e=document.getElementsByTagName("script");for(var d=0;d<e.length;d++){const r=e[d];if(r.getAttribute("src")==n||r.getAttribute("data-webpack")==t+s){o=r;break}}}if(!o){c=!0;var u={478:"sha512-ORjtmy+nQMgxbu0os8+oTRa5sPzbinyuWSvpZrrstVLIaHofRRlfODdH+oUmkIgeQpM+vPf3vG/4RzvCsFVh1A==",249:"sha512-o7+K6xC0z3TqynjVxpd+jgiSgqy8rrPeRcUSqt5J0Rqg5Su5CycLMYfpwiM3WBCHiNDrG5aZoXJQ6HRc335XYQ==",212:"sha512-kRvBt1IYQDBnClTEWNaE8sDFqbXXM3Vdyf972Uf4MFbJxl7u3KmdO+jdB1H4achPEoT9YtNXHswaESey6sCH0A==",238:"sha512-U5EGmyYbFVR2UMNAuZJ7fTgVVtPa5b8RPMySDwXo7z3frRdkUJ2x1VAQTLQCeBab8VlGVGRV8FiSHIn/pwN72A=="};o=document.createElement("script"),o.charset="utf-8",r.nc&&o.setAttribute("nonce",r.nc),o.setAttribute("data-webpack",t+s),o.src=n,0!==o.src.indexOf(window.location.origin+"/")&&(o.crossOrigin="anonymous"),u[a]&&(o.integrity=u[a])}e[n]=[i];const l=(t,r)=>{o.onerror=o.onload=null,clearTimeout(f);const i=e[n];if(delete e[n],o.parentNode?.removeChild(o),i?.forEach(e=>e(r)),t)return t(r)},f=setTimeout(l.bind(null,void 0,{type:"timeout",target:o}),12e4);o.onerror=l.bind(null,o.onerror),o.onload=l.bind(null,o.onload),c&&document.head.appendChild(o)}})(),r.r=e=>{Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},r.p="https://js-agent.newrelic.com/",(()=>{const e={38:0,788:0};r.f.j=(t,n)=>{let i=r.o(e,t)?e[t]:void 0;if(0!==i)if(i)n.push(i[2]);else{const s=new Promise((r,n)=>i=e[t]=[r,n]);n.push(i[2]=s);const a=r.p+r.u(t),o=new Error,c=n=>{if(r.o(e,t)&&(i=e[t],0!==i&&(e[t]=void 0),i)){const e=n&&("load"===n.type?"missing":n.type),r=n&&n.target&&n.target.src;o.message="Loading chunk "+t+" failed: ("+e+": "+r+")",o.name="ChunkLoadError",o.type=e,o.request=r,i[1](o)}};r.l(a,c,"chunk-"+t,t)}};const t=(t,n)=>{let[i,s,a]=n;var o,c,d=0;if(i.some(t=>0!==e[t])){for(o in s)r.o(s,o)&&(r.m[o]=s[o]);if(a)a(r)}for(t&&t(n);d<i.length;d++)c=i[d],r.o(e,c)&&e[c]&&e[c][0](),e[c]=0},n=self["webpackChunk:NRBA-1.323.0.PROD"]=self["webpackChunk:NRBA-1.323.0.PROD"]||[];n.forEach(t.bind(null,0)),n.push=t.bind(null,n.push.bind(n))})(),(()=>{"use strict";r(8374);var e=r(8362),t=r(860);const n=Object.values(t.K7);var i=r(384),s=r(1741);var a=r(2555),o=r(3333),c=r(9300);const d=e=>{if(!e||"string"!=typeof e)return!1;try{document.createDocumentFragment().querySelector(e)}catch{return!1}return!0};var u=r(2614),l=r(944),f=r(8122);const h="[data-nr-mask]",p=e=>(0,f.a)(e,(()=>{const e={feature_flags:[],experimental:{register:!1,resources:!1,iframe_bridge:!1,iframe_domains:[]},mask_selector:"*",block_selector:"[data-nr-block]",mask_input_options:{color:!1,date:!1,"datetime-local":!1,email:!1,month:!1,number:!1,range:!1,search:!1,tel:!1,text:!1,time:!1,url:!1,week:!1,textarea:!1,select:!1,password:!0}};return{ajax:{deny_list:void 0,block_internal:!0,enabled:!0,autoStart:!0,capture_payloads:c.mo.NONE},api:{register:{get enabled(){return e.feature_flags.includes(o.$v.REGISTER)||e.experimental.register},set enabled(t){e.experimental.register=t},duplicate_data_to_container:!1,get allow_iframe_bridge(){return e.feature_flags.includes(o.$v.IFRAME_BRIDGE)||e.experimental.iframe_bridge},set allow_iframe_bridge(t){e.experimental.iframe_bridge=t},get iframe_domains(){return e.experimental.iframe_domains},set iframe_domains(t){Array.isArray(t)?e.experimental.iframe_domains=t:(0,l.R)(1,t)}}},browser_consent_mode:{enabled:!1},distributed_tracing:{enabled:void 0,exclude_newrelic_header:void 0,cors_use_newrelic_header:void 0,cors_use_tracecontext_headers:void 0,allowed_origins:void 0},get feature_flags(){return e.feature_flags},set feature_flags(t){e.feature_flags=t},generic_events:{enabled:!0,autoStart:!0},harvest:{interval:30},jserrors:{enabled:!0,autoStart:!0},logging:{enabled:!0,autoStart:!0},metrics:{enabled:!0,autoStart:!0},obfuscate:void 0,page_action:{enabled:!0},page_view_event:{enabled:!0,autoStart:!0},page_view_timing:{enabled:!0,autoStart:!0},performance:{capture_marks:!1,capture_measures:!1,capture_detail:!0,resources:{get enabled(){return e.feature_flags.includes(o.$v.RESOURCES)||e.experimental.resources},set enabled(t){e.experimental.resources=t},asset_types:[],first_party_domains:[],ignore_newrelic:!0}},privacy:{cookies_enabled:!0},proxy:{assets:void 0,beacon:void 0},session:{expiresMs:u.wk,inactiveMs:u.BB},session_replay:{autoStart:!0,enabled:!1,preload:!1,sampling_rate:10,error_sampling_rate:100,collect_fonts:!1,inl
5ine_images:!1,fix_stylesheets:!0,mask_all_inputs:!0,get mask_text_selector(){return e.mask_selector},set mask_text_selector(t){d(t)?e.mask_selector="".concat(t,",").concat(h):""===t||null===t?e.mask_selector=h:(0,l.R)(5,t)},get block_class(){return"nr-block"},get ignore_class(){return"nr-ignore"},get mask_text_class(){return"nr-mask"},get block_selector(){return e.block_selector},set block_selector(t){d(t)?e.block_selector+=",".concat(t):""!==t&&(0,l.R)(6,t)},get mask_input_options(){return e.mask_input_options},set mask_input_options(t){t&&"object"==typeof t?e.mask_input_options={...t,password:!0}:(0,l.R)(7,t)}},session_trace:{enabled:!0,autoStart:!0},soft_navigations:{enabled:!0,autoStart:!0},ssl:void 0,user_actions:{enabled:!0,elementAttributes:["id","className","tagName","type"]},web_sockets:{enabled:!1}}})());var g=r(6154),m=r(9324);let v=0;const y={buildEnv:"PROD",distMethod:"CDN",version:m.x,originTime:g.WN},b={consented:!1},E={activatedFeatures:void 0,appMetadata:{},configured:!1,get consented(){return this.session?.state?.consent||b.consented},set consented(e){b.consented=e},customTransaction:void 0,denyList:[],disabled:!1,drainRegistry:new Map,connector:void 0,harvester:void 0,v2Target:void 0,isolatedBacklog:!1,isRecording:!1,loaderType:void 0,maxBytes:3e4,obfuscator:void 0,onerror:void 0,ptid:void 0,releaseIds:{},session:void 0,timeKeeper:void 0,registeredEntities:[],jsAttributesMetadata:{bytes:0},get harvestCount(){return++v},listeningForIframeMessages:!1};var w=r(9232);var R=r(7836),T=r(3241);const A={accountID:void 0,trustKey:void 0,agentID:void 0,licenseKey:void 0,applicationID:void 0,xpid:void 0};var S=r(9908),x=r(9752);function O(e,t={},n,o){let{init:c,info:d,loader_config:u,runtime:l={},exposed:h=!0}=t;if(!d){const e=(0,i.pV)();c=e.init,d=e.info,u=e.loader_config}var m;e.init=p(c||{}),e.loader_config=(m=u||{},(0,f.a)(m,A)),d.jsAttributes??={},g.bv&&(d.jsAttributes.isWorker=!0),e.info=(0,a.D)(d);const v=e.init;e.runtime??=(e=>{const t=(0,f.a)(e,E),r=Object.keys(y).reduce((e,t)=>(e[t]={value:y[t],writable:!1,configurable:!0,enumerable:!0},e),{});return Object.defineProperties(t,r)})(l),e.runtime.v2Target??={type:w.f.BA,instance:e.agentIdentifier,get id(){return e.runtime.appMetadata?.agents?.[0]?.entityGuid},get attributes(){return{"entity.guid":this.id,appId:e.info.applicationID}}},v.proxy.assets&&(e=>{const t=e.startsWith("http");e+="/",r.p=t?e:"https://"+e})(v.proxy.assets),e.runtime.configured||(Object.defineProperty(e,"beacons",{get:()=>[e.info.beacon,e.info.errorBeacon,e.init.proxy.assets,e.init.proxy.beacon].filter(Boolean)}),Object.defineProperty(e.runtime,"denyList",{get:()=>[...e.init.ajax.deny_list||[],...e.init.ajax.block_internal?e.beacons:[]]}),e.runtime.ptid=e.agentIdentifier,function(e){const t=(0,i.pV)();Object.getOwnPropertyNames(s.W.prototype).forEach(r=>{const n=s.W.prototype[r];if("function"!=typeof n||"constructor"===n)return;let i=t[r];e[r]&&!1!==e.exposed&&"micro-agent"!==e.runtime?.loaderType&&(t[r]=(...t)=>{const n=e[r](...t);return i?i(...t):n})})}(e),e.runtime.loaderType=n,e.ee=R.ee.get(e.agentIdentifier),e.exposed=h,(0,T.W)({drained:!!e.runtime.activatedFeatures,type:"lifecycle",name:"initialize",feature:void 0,data:e.config}),e.init.api.register.allow_iframe_bridge&&g.gm.addEventListener("message",t=>{"string"==typeof t.data?.type&&t.data.type.startsWith(x.Pl)&&(0,S.p)("iframe-message",[t],void 0,"IFRAME",e.ee)}),e.runtime.configured=!0)}var _=r(1863),k=r(4261),N=r(1738);var L=r(1687),M=r(4234),P=r(5289),I=r(5270),j=r(7767),C=r(6389),D=r(7699);const B=new WeakSet,H=new WeakMap;class W extends M.W{constructor(e,t){super(e,t),this.abortHandler=void 0,this.featAggregate=void 0,this.loadedSuccessfully=void 0,this.onAggregateImported=new Promise(e=>{this.loadedSuccessfully=e}),this.deferred=Promise.resolve(),!1===e.init[this.featureName].autoStart?this.deferred=new Promise((t,r)=>{this.ee.on("manual-start-all",(0,C.J)(()=>{(0,L.Ak)(e,this.featureName),t()}))}):(0,L.Ak)(e,t)}importAggregator(e,t,n={}){if(this.featAggregate)return;const i=async()=>{if(await this.deferred,this.#t(e),!(0,a.f)(e.info))return(0,l.R)(43),e.ee.abort(),void this.loadedSuccessfully(!1);try{await async function(e,t,n){if(H.has(e))return H.get(e);const i=(async()=>
5{if((0,j.V)(e.init))try{const{setupAgentSession:t}=await r.e(478).then(r.bind(r,8766));t(e)}catch(e){(0,l.R)(20,e),t.emit("internal-error",[e]),(0,S.p)(D.qh,[e],void 0,n,t)}if(e.init.api.register.allow_iframe_bridge)try{const{setupIframeMFEMessageListener:t}=await r.e(238).then(r.bind(r,6417));t(e)}catch(e){(0,l.R)(23,e)}const[{Connector:i},{Harvester:s}]=await Promise.all([r.e(478).then(r.bind(r,6589)),r.e(478).then(r.bind(r,5237))]);e.runtime.connector=new i(e),e.runtime.harvester=new s(e);const a=Object.values(e.features).filter(t=>e.runtime.drainRegistry.has(t.featureName));Promise.all(a.map(e=>e.onAggregateImported)).then(()=>e.runtime.harvester.startTimer())})();H.set(e,i),await i}(e,this.ee,this.featureName)}catch(e){return(0,l.R)(79,e),this.ee.abort(),void this.loadedSuccessfully(!1)}try{if(!this.#r(this.featureName,e.runtime.session,e.init))return this.abortHandler?.(),(0,L.Ze)(this.agentRef,this.featureName),void this.loadedSuccessfully(!1);const{Aggregate:r}=await t();this.featAggregate=new r(e,n),e.runtime.harvester.initializedAggregates.push(this.featAggregate),this.loadedSuccessfully(!0)}catch(e){(0,l.R)(34,e),this.abortHandler?.(),(0,L.Ze)(this.agentRef,this.featureName,!0),this.loadedSuccessfully(!1)}};g.RI?(0,P.GG)(()=>i(),!0):i()}#r(e,r,n){if(this.blocked)return!1;switch(e){case t.K7.sessionReplay:return(0,I.SR)(n)&&!!r;case t.K7.sessionTrace:return!!r;default:return!0}}#t(e){if(!B.has(e)&&(B.add(e),!(0,a.f)(e.info))){const t=(0,i.pV)();let r={...t.info?.jsAttributes};try{r={...r,...e.info?.jsAttributes}}catch(e){}O(e,{...t,info:{...t.info,jsAttributes:r},runtime:e.runtime},e.runtime.loaderType)}}}var U=r(6630);class K extends W{static featureName=U.T;constructor(e){var t;super(e,U.T),this.setupInspectionEvents(),t=e,(0,N.Y)(k.Fw,function(e,r){"string"==typeof e&&("/"!==e.charAt(0)&&(e="/"+e),t.runtime.customTransaction=(r||"http://custom.transaction")+e,(0,S.p)("api-"+k.Fw,[(0,_.t)()],void 0,void 0,t.ee))},t),this.importAggregator(e,()=>e.init.feature_flags.includes("rum_v2")?r.e(478).then(r.bind(r,908)):r.e(478).then(r.bind(r,7927)))}setupInspectionEvents(){const e=(e,t)=>{e&&(0,T.W)({timeStamp:e.timeStamp,loaded:"complete"===e.target.readyState,type:"window",name:t,data:e.target.location+""})};(0,P.sB)(t=>{e(t,"DOMContentLoaded")}),(0,P.GG)(t=>{e(t,"load")}),(0,P.Qr)(t=>{e(t,"navigate")}),this.ee.on(u.tS.UPDATE,(e,t)=>{(0,T.W)({type:"lifecycle",name:"session",data:t})})}}class F extends e.d{constructor(e){var t;(super(),g.gm)?(this.features={},(0,i.bQ)(this.agentIdentifier,this),this.desiredFeatures=new Set(e.features||[]),this.desiredFeatures.add(K),O(this,e,e.loaderType||"agent"),t=this,(0,N.Y)(k.cD,function(e,r,n=!1){if("string"==typeof e){if(["string","number","boolean"].includes(typeof r)||null===r)return(0,N.U)(t,e,r,k.cD,n);(0,l.R)(40,typeof r)}else(0,l.R)(39,typeof e)},t),function(e){(0,N.Y)(k.Dl,function(t,r=!1){if("string"!=typeof t&&null!==t)return void(0,l.R)(41,typeof t);const n=e.info.jsAttributes["enduser.id"];r&&null!=n&&n!==t?(0,S.p)("api-setUserIdAndResetSession",[t],void 0,"session",e.ee):(0,N.U)(e,"enduser.id",t,k.Dl,!0)},e)}(this),function(e){(0,N.Y)(k.nb,function(t){if("string"==typeof t||null===t)return(0,N.U)(e,"application.version",t,k.nb,!1);(0,l.R)(42,typeof t)},e)}(this),function(e){(0,N.Y)("start",function(){e.ee.emit("manual-start-all")},e)}(this),function(e){(0,N.Y)(k.Pv,function(t=!0){if("boolean"==typeof t){if((0,S.p)("api-"+k.Pv,[t],void 0,"session",e.ee),e.runtime.consented=t,t){const t=e.features.page_view_event;t.onAggregateImported.then(e=>{const r=t.featAggregate;e&&!r.sentRum&&r.sendRum?.()})}}else(0,l.R)(65,typeof t)},e)}(this),this.run()):(0,l.R)(21)}get config(){return{info:this.info,init:this.init,loader_config:this.loader_config,runtime:this.runtime}}get api(){return this}run(){try{const e=function(e){const t={};return n.forEach(r=>{t[r]=!!e[r]?.enabled}),t}(this.init),r=[...this.desiredFeatures],i=this.init.feature_flags.includes("rum_v2");r.sort((e,r)=>t.P3[e.featureName]-t.P3[r.featureName]),r.forEach(r=>{if(!e[r.featureName]&&(i||r.featureName!==t.K7.pageViewEvent))return;const n=function(e){switch(e){case t.K7.ajax:return[t.K7.jserrors];case t.K7.sessionTrace:return[t.K7.ajax,t.K7.pageViewEvent];case t.K7.sessionReplay:return[t.K7.sessionTrace];case t.K7.pageViewTiming:return[t.K7.pageViewEvent];default:return[]}}(r.featureName).filter(e=>!(e in this.features));n.length>0&&(0,l.R)(36,{targetFeature:r.featureName,missingDependencies:n}),this.features[r.featureName]=new r(this)})}catch(e){(0,l.R)(22,e);for(const e in this.features)this.features[e].abortHandler?.();const t=(0,i.Zm)();delete t.initializedAgents[this.agentIdentifier]?.features,delete this.sharedAggregator;return t.ee.get(this.agentIdentifier).abort(),!1}}}var V=r(2843),z=r(782);class G extends W{static featureName=z.T;constructor(e){super(e,z.T),g.RI&&((0,V.u)(()=>(0,S.p)("docHidden",[(0,_.t)()],void 0,z.T,this.ee),!0),(0,V.G)(()=>(0,S.p)("winPagehide",[(0,_.t)()],void 0,z.T,this.ee)),this.importAggregator(e,()=>r.e(478).then(r.bind(r,9917))))}}var q=r(3969);class Y extends W{static featureName=q.TZ;constructor(e){super(e,q.TZ),this.importAggregator(e,()=>r.e(478).then(r.bind(r,6555)))}}var Z=r(6774),J=r(3878),X=r(3304);class Q{constructor(e,t,r,n,i){this.name="UncaughtError",this.message="string"==typeof e?e:(0,X.A)(e),this.sourceURL=t,this.line=r,this.column=n,this.__newrelic=i}}function ee(e){return ne(e)?e:new Q(void 0!==e?.message?e.message:e,e?.filename||e?.sourceURL,e?.lineno||e?.line,e?.colno||e?.col,e?.__newrelic,e?.cause)}function te(e){const t="Unhandled Promise Rejection: ";if(!e?.reason)return;if(ne(e.reason)){try{e.reason.message.startsWith(t)||(e.reason.message=t+e.reason.message)}catch(e){}return ee(e.reason)}const r=ee(e.reason);return(r.message||"").startsWith(t)||(r.message=t+r.message),r}function re(e){if(e.error instanceof SyntaxError&&!/:\d+$/.test(e.error.stack?.trim())){const t=new Q(e.message,e.filename,e.lineno,e.colno,e.error.__newrelic,e.cause);return t.name=SyntaxError.name,t}return ne(e.error)?e.error:ee(e)}function ne(e){return e instanceof Error&&!!e.stack}function ie(e,r,n,i,s=(0,_.t)()){"string"==typeof e&&(e=new Error(e)),(0,S.p)("err",[e,s,!1,r,n.runtime.isRecording,void 0,i],void 0,t.K7.jserrors,n.ee),(0,S.p)("uaErr",[],void 0,t.K7.genericEvents,n.ee)}var se=r(993),ae=r(3785);function oe(e,{customAttributes:t={},level:r=se.p_.INFO}={},n,i,s=(0,_.t)()){(0,ae.R)(n.ee,e,t,r,!1,i,s)}function ce(e,r,n,i,s=(0,_.t)()){(0,S.p)("api-"+k.hG,[s,e,r,i],void 0,t.K7.genericEvents,n.ee)}function de(e,r,n,i,s=(0,_.t)()){const{start:a,end:o,customAttributes:c}=r||{},d={customAttributes:c||{}};if("object"!=typeof d.customAttributes||"string"!=typeof e||0===e.length)return void(0,l.R)(57);const u=(e,t)=>
5null==e?t:"number"==typeof e?e:e instanceof PerformanceMark?e.startTime:Number.NaN;if(d.start=u(a,0),d.end=u(o,s),Number.isNaN(d.start)||Number.isNaN(d.end))(0,l.R)(57);else{if(d.duration=d.end-d.start,!(d.duration<0))return(0,S.p)("api-"+k.V1,[d,e,i],void 0,t.K7.genericEvents,n.ee),d;(0,l.R)(58)}}function ue(e,r={},n,i,s=(0,_.t)()){(0,S.p)("api-"+k.fF,[s,e,r,i],void 0,t.K7.genericEvents,n.ee)}var le=r(5718);const fe=(e,t)=>e?.nrMfeId===t.id&&(!e?.nrMfeObserved||e?.nrMfeObserved===t.instance),he=e=>{try{return g.gm.CSS.escape(e)}catch(t){return e}},pe=(e,t={})=>{const r=t.id,n=t.instance;if(!e||!r||!n)return!1;try{let r=1===e.nodeType?e:e.parentElement;for(;r?.tagName;){if(fe(r.dataset,t))return r.dataset.nrMfeObserved=n,!0;r=r.parentNode}}catch(e){}return!1},ge=(e,t)=>{const r=g.gm.document?.querySelectorAll('[data-nr-mfe-id="'.concat(he(e.id),'"]')),n=(Array.from(r)||[]).find(t=>fe(t.dataset,e));let i=!!n;i&&(n.dataset.nrMfeObserved??=e.instance);const s=new g.gm.MutationObserver(r=>{r.forEach(r=>{r.addedNodes.forEach(r=>{const n=1===r.nodeType?r:null;!i&&fe(n?.dataset,e)&&(s.disconnect(),s.observe(n,{childList:!0,subtree:!0}),i=!0,n.dataset.nrMfeObserved=e.instance),(e=>{try{return e?.textContent?.trim()||["img","video","canvas","svg"].includes(e?.nodeName?.toLowerCase())}catch(e){return!1}})(r)&&(i||pe(r,e))&&t(r,s)})})});return s.observe(n||g.gm.document,{childList:!0,subtree:!0}),s},me=(e,t,r)=>{try{const n=new g.gm.PerformanceObserver(e=>{e.getEntries().forEach(r)});return n.observe(t),e.push(n),n}catch(e){return null}};function ve(e,t){let r,n,i=!1;const s=e=>null==e?e:e-(t?.scriptStart||t?.registeredAt||0),a={fcp:{get value(){const e=s(r);return e>1e4?void 0:e},set value(e){i||(r=e)}},lcp:{get value(){if(void 0!==a.fcp.value)return s(n)},set value(e){i||(n=e)}},cls:{value:void 0},inp:{value:void 0},disconnect:()=>{}};if(!(e&&g.RI&&g.gm.MutationObserver&&g.gm.PerformanceObserver))return a;const o=[];setTimeout(()=>{r||a.disconnect()},1e4);const c=()=>{if(!i){if(null==r){const e=(0,_.t)();if(s(e)>1e4)return void a.disconnect();r=e}n??=(0,_.t)(),a.cls.value??=0}},d=ge(e,(e,t)=>{c(),t.disconnect()});o.push(d);let u=0,l=null;const f=new Set;try{l=new g.gm.ResizeObserver(e=>{i||e.forEach(e=>{try{const t=e.contentRect.width*e.contentRect.height;t>u&&(u=t,a.lcp.value=(0,_.t)()),l.unobserve(e.target)}catch(e){}})})}catch(e){}const h=ge(e,e=>{if(c(),l)try{const t=1===e.nodeType?e:e.parentElement;t&&!f.has(t)&&(f.add(t),"IMG"===t.tagName?t.complete?l.observe(t):t.addEventListener("load",()=>{l.observe(t)},{once:!0}):"VIDEO"===t.tagName?t.readyState>=2?l.observe(t):t.addEventListener("loadeddata",()=>{l.observe(t)},{once:!0}):l.observe(t))}catch(e){}});l&&o.push(l),o.push(h),me(o,{type:"layout-shift",buffered:!0},t=>{i||t.hadRecentInput||(t.sources||[]).some(r=>!!pe(r.node,e)&&(c(),a.cls.value+=t.value,!0))}),me(o,{type:"event",buffered:!0,durationThreshold:40},t=>{!i&&t.interactionId&&pe(t.target,e)&&(void 0===a.inp.value||t.duration>a.inp.value)&&(c(),a.inp.value=t.duration)});const p=["pointerdown","keydown"],m=()=>{p.forEach(e=>{g.gm.removeEventListener(e,v,{passive:!0})})};a.disconnect=()=>{i=!0,o.forEach(e=>{try{e?.disconnect()}catch(e){}}),m(),["visibilitychange","pagehide"].forEach(e=>{g.gm.removeEventListener(e,a.disconnect,{once:!0,passive:!0})})};const v=t=>{pe(t?.target,e)&&((()=>{try{h?.disconnect(),l?.disconnect()}catch(e){}})(),m())};p.forEach(e=>{g.gm.addEventListener(e,v,{passive:!0})}),["visibilitychange","pagehide"].forEach(e=>{g.gm.addEventListener(e,a.disconnect,{once:!0,passive:!0})});const y=g.gm.document?.querySelectorAll('[data-nr-mfe-id="'.concat(he(e.id),'"]'));return Array.from(y||[]).some(t=>fe(t.dataset,e))&&c(),a}var ye=r(9566),be=r(7560),Ee=r(9119);const we=["entry","scripts","all"],Re=["name","id","type"],Te=new Map([[ce,"addPageAction"],[oe,"log"],[de,"measure"],[ie,"noticeError"],[ue,"recordCustomEvent"]]),Ae={experimental:(0,C.J)(()=>(0,l.R)(54,"newrelic.register")),disabled:(0,C.J)(()=>(0,l.R)(55)),invalidTarget:(0,C.J)(e=>(0,l.R)(48,e)),deregistered:(0,C.J)(()=>(0,l.R)(68)),invalidTimingMethod:(0,C.J)(e=>(0,l.R)(80,e)),duplicateName:(0,C.J)(e=>(0,l.R)(81,e)),duplicateId:(0,C.J)(e=>(0,l.R)(82,e))};function Se(e){(0,N.Y)(k.eY,function(t){return xe(e,t)},e)}function xe(e,r){Ae.experimental(),r||={},r.instance=(0,ye.LA)(8),r.type=w.f.MFE,r.licenseKey||=e.info.licenseKey,r.blocked=!1,("object"!=typeof r.tags||null===r.tags||Array.isArray(r.tags))&&(r.tags={}),r.parent??={get id(){return e.runtime.appMetadata.agents?.[0].entityGuid},type:w.f.BA},r.manifest=(0,be.N)(r.manifest),void 0===r.timingMethod||we.includes(r.timingMethod)||(Ae.invali
5dTimingMethod(r.timingMethod),r.timingMethod=void 0);const n=(0,le.Qr)(r);r.manifest&&(0,le.xo)(n,r);const i=ve(r,n),s=(0,Ee.L)(""+location),a={};Object.prototype.hasOwnProperty.call(r,"attributes")||Object.defineProperty(r,"attributes",{get:()=>({...a,"source.id":r.id,"source.name":r.name,"source.type":r.type,"parent.type":r.parent?.type||w.f.BA,"parent.id":r.parent?.id})}),Object.entries(r.tags).forEach(([e,t])=>{Re.includes(e)||(a["source.".concat(e)]=t)});let o=()=>{};const c=e.runtime.registeredEntities,d=e=>{r.blocked=!0,o=e};function u(e){return"string"==typeof e&&!!e.trim()&&e.trim().length<501}e.init.api.register.enabled||d(Ae.disabled),u(r.id)&&u(r.name)||d(()=>Ae.invalidTarget(r)),c.forEach(e=>{try{const{name:t,id:n}=e.metadata.target;t===r.name&&n!==r.id&&Ae.duplicateName(r),n===r.id&&t!==r.name&&Ae.duplicateId(r)}catch(e){}});const f={addPageAction:(t,n={})=>m(ce,[t,{...a,...n},e],r),deregister:()=>{p(),d(Ae.deregistered)},log:(t,n={})=>m(oe,[t,{...n,customAttributes:{...a,...n.customAttributes||{}}},e],r),measure:(t,n={})=>m(de,[t,{...n,customAttributes:{...a,...n.customAttributes||{}}},e],r),noticeError:(t,n={})=>m(ie,[t,{...a,...n},e],r),recordCustomEvent:(t,n={})=>m(ue,[t,{...a,...n},e],r),setApplicationVersion:e=>g("application.version",e),setCustomAttribute:(e,t)=>g(e,t),setUserId:e=>g("enduser.id",e),metadata:{get customAttributes(){return a},target:r,timings:n,vitals:i,events:{latestTimestamp:void 0}}},h=()=>(r.blocked&&o(),r.blocked);function p(){if(n.reportedAt)return;n.reportedAt=(0,_.t)(),i.disconnect(),n.fcp=i.fcp,n.lcp=i.lcp,n.cls=i.cls,n.inp=i.inp;const e=n.fetchEnd-n.fetchStart,t=n.scriptEnd-n.scriptStart,r={assetUrl:n.asset,assetType:n.type,registerUrl:s,deregisterUrl:(0,Ee.L)(""+location),pageUrl:void 0,currentUrl:void 0,timeAlive:n.reportedAt-n.registeredAt,timeToBeRequested:n.fetchStart,timeToExecute:t,timeToFetch:e,timeToLoad:e+t,t
5imeToRegister:n.registeredAt,totalWeight:n.totalWeight,...void 0!==n.renderBlocking&&{renderBlocking:n.renderBlocking},...i.fcp.value>=0&&{"vitals.fcp.value":i.fcp.value},...i.lcp.value>=0&&{"vitals.lcp.value":i.lcp.value},...i.cls.value>=0&&{"vitals.cls.value":i.cls.value},...i.inp.value>=0&&{"vitals.inp.value":i.inp.value}};f.recordCustomEvent("MicroFrontEndTiming",r)}h()||(c.push(f),(0,V.G)(p));const g=(e,t)=>{h()||(a[e]=t)},m=(r,n,i)=>{if(h()&&r!==xe)return;const s=f.metadata.events.latestTimestamp??(0,_.t)();f.metadata.events.latestTimestamp=void 0;const a=Te.get(r)||"unknown";(0,S.p)(q.xV,["API/register/".concat(a,"/called")],void 0,t.K7.metrics,e.ee);try{return r(...n,i,s)}catch(e){(0,l.R)(50,e)}};return f}class Oe extends W{static featureName=Z.T;constructor(e){var t;super(e,Z.T),t=e,(0,N.Y)(k.o5,(e,r)=>ie(e,r,t),t),function(e){(0,N.Y)(k.bt,function(t){e.runtime.onerror=t},e)}(e),function(e){let t=0;(0,N.Y)(k.k6,function(e,r){++t>10||(this.runtime.releaseIds[e.slice(-200)]=(""+r).slice(-200))},e)}(e),Se(e);try{this.removeOnAbort=new AbortController}catch(e){}this.ee.on("internal-error",(t,r)=>{this.abortHandler&&(0,S.p)("ierr",[ee(t),(0,_.t)(),!0,{},e.runtime.isRecording,r],void 0,this.featureName,this.ee)}),g.gm.addEventListener("unhandledrejection",t=>{this.abortHandler&&(0,S.p)("err",[te(t),(0,_.t)(),!1,{unhandledPromiseRejection:1},e.runtime.isRecording],void 0,this.featureName,this.ee)},(0,J.jT)(!1,this.removeOnAbort?.signal)),g.gm.addEventListener("error",t=>{this.abortHandler&&(0,S.p)("err",[re(t),(0,_.t)(),!1,{},e.runtime.isRecording],void 0,this.featureName,this.ee)},(0,J.jT)(!1,this.removeOnAbort?.signal)),this.abortHandler=this.#n,this.importAggregator(e,()=>r.e(478).then(r.bind(r,9377)))}#n(){this.removeOnAbort?.abort(),this.abortHandler=void 0}}var _e=r(8990);let ke=1;function Ne(e){const t=typeof e;return!e||"object"!==t&&"function"!==t?-1:e===g.gm?0:(0,_e.I)(e,"nr@id",function(){return ke++})}function Le(e){if("string"==typeof e)return e.length;if("object"==typeof e){if("undefined"!=typeof ArrayBuffer&&e instanceof ArrayBuffer&&e.byteLength)return e.byteLength;if("undefined"!=typeof Blob&&e instanceof Blob&&e.size)return e.size;if(!("undefined"!=typeof FormData&&e instanceof FormData))try{return(0,X.A)(e).length}catch(e){return}}}var Me=r(8139),Pe=r(3434),Ie=r(5732);const je={},Ce=["open","send","setRequestHeader"];function De(e,t){var r=e||R.ee;const n=function(e){return(e||R.ee).get("xhr")}(r);if(void 0===g.gm.XMLHttpRequest)return n;if(je[n.debugId]++)return n;je[n.debugId]=1,(0,Me.u)(r,t);var i=(0,Pe.YM)(n,void 0,t),s=g.gm.XMLHttpRequest,a=g.gm.MutationObserver,o=g.gm.Promise,c=g.gm.setInterval,d="readystatechange",u=["onload","onerror","onabort","onloadstart","onloadend","onprogress","ontimeout"],f=[],h=g.gm.XMLHttpRequest=function(e){const r=new s(e),a=n.context(r);a.targets=(0,Ie.$5)(t);try{n.emit("new-xhr",[r],a),r.addEventListener(d,(o=a,function(){var e=this;e.readyState>3&&!o.resolved&&(o.resolved=!0,n.emit("xhr-resolved",[],e)),i.inPlace(e,u,"fn-",E)}),(0,J.jT)(!1))}catch(e){(0,l.R)(15,e);try{n.emit("internal-error",[e])}catch(e){}}var o;return r};function p(e,t){i.inPlace(t,["onreadystatechange"],"fn-",E)}if(function(e,t){for(var r in e)t[r]=e[r]}(s,h),h.prototype=s.prototype,i.inPlace(h.prototype,Ce,"-xhr-",E),n.on("send-xhr-start",function(e,t){p(e,t),function(e){f.push(e),a&&(m?m.then(b):c?c(b):(v=-v,y.data=v))}(t)}),n.on("open-xhr-start",p),a){var m=o&&o.resolve();if(!c&&!o){var v=1,y=document.createTextNode(v);new a(b).observe(y,{characterData:!0})}}else r.on("fn-end",function(e){e[0]&&e[0].type===d||b()});function b(){for(var e=0;e<f.length;e++)p(0,f[e]);f.length&&(f=[])}function E(e,t){return t}return n}var Be="fetch-",He=Be+"body-",We=["arrayBuffer","blob","json","text","formData"],Ue=g.gm.Request,Ke=g.gm.Response,Fe="prototype";const Ve={};function ze(e,t){const r=function(e){return(e||R.ee).get("fetch")}(e);if(!(Ue&&Ke&&g.gm.fetch))return r;if(Ve[r.debugId]++)return r;function n(e,n,i){var s=e[n];"function"==typeof s&&(e[n]=function(){var e=[...arguments];const n={},a=(0,Ie.$5)(t);var o;r.emit(i+"before-start",[e],n),n[R.P]&&n[R.P].dt&&(o=n[R.P].dt);var c=s.apply(this,e);return r.emit(i+"start",[e,o],c),c.then(function(e){return r.emit(i+"end",[null,e,a],c),e},function(e){throw r.emit(i+"end",[e,void 0,a],c),e})})}
5return Ve[r.debugId]=1,We.forEach(e=>{n(Ue[Fe],e,He),n(Ke[Fe],e,He)}),n(g.gm,"fetch",Be),r.on(Be+"end",function(e,n,i){var s=this;if(s.targets=i||[t.runtime.v2Target],n){var a=n.headers.get("content-length");null!==a&&(s.rxSize=a),r.emit(Be+"done",[null,n],s)}else r.emit(Be+"done",[e],s)}),r}var Ge=r(7485);class qe{constructor(e){this.agentRef=e}generateTracePayload(e){const t=this.agentRef.loader_config;if(!this.shouldGenerateTrace(e)||!t)return null;var r=(t.accountID||"").toString()||null,n=(t.agentID||"").toString()||null,i=(t.trustKey||"").toString()||null;if(!r||!n)return null;var s,a=(0,ye.ZF)(),o=(0,ye.el)(),c=Date.now();this.agentRef.runtime?.timeKeeper?.ready&&(s=Math.floor(this.agentRef.runtime.timeKeeper.correctAbsoluteTimestamp(c)));var d={spanId:a,traceId:o,timestamp:c,timestampCorrected:s};return(e.sameOrigin||this.isAllowedOrigin(e)&&this.useTraceContextHeadersForCors())&&(d.traceContextParentHeader=this.generateTraceContextParentHeader(a,o),d.traceContextStateHeader=this.generateTraceContextStateHeader(a,s??c,r,n,i)),(e.sameOrigin&&!this.excludeNewrelicHeader()||!e.sameOrigin&&this.isAllowedOrigin(e)&&this.useNewrelicHeaderForCors())&&(d.newrelicHeader=this.generateTraceHeader(a,o,s??c,r,n,i)),d}generateTraceContextParentHeader(e,t){return"00-"+t+"-"+e+"-01"}generateTraceContextStateHeader(e,t,r,n,i){return i+"@nr=0-1-"+r+"-"+n+"-"+e+"----"+t}generateTraceHeader(e,t,r,n,i,s){if(!("function"==typeof g.gm?.btoa))return null;var a={v:[0,1],d:{ty:"Browser",ac:n,ap:i,id:e,tr:t,ti:r}};return s&&n!==s&&(a.d.tk=s),btoa((0,X.A)(a))}shouldGenerateTrace(e){return this.agentRef.init?.distributed_tracing?.enabled&&this.isAllowedOrigin(e)}isAllowedOrigin(e){var t=!1;const r=this.agentRef.init?.distributed_tracing;if(e.sameOrigin)t=!0;else if(r?.allowed_origins instanceof Array)for(var n=0;n<r.allowed_origins.length;n++){var i=(0,Ge.D)(r.allowed_origins[n]);if(e.hostname===i.hostname&&e.protocol===i.protocol&&e.port===i.port){t=!0;break}}return t}excludeNewrelicHeader(){var e=this.agentRef.init?.distributed_tracing;return!!e&&!!e.exclude_newrelic_header}useNewrelicHeaderForCors(){var e=this.agentRef.init?.distributed_tracing;return!!e&&!1!==e.cors_use_newrelic_header}useTraceContextHeadersForCors(){var e=this.agentRef.init?.distributed_tracing;return!!e&&!!e.cors_use_tracecontext_headers}}var Ye=r(7295);function Ze(e){return"string"==typeof e?e:e instanceof(0,i.dV)().o.REQ?e.url:g.gm?.URL&&e instanceof URL?e.href:void 0}function $e(e,t){var r=(0,Ge.D)(t),n=e.params||e;n.hostname=r.hostname,n.port=r.port,n.protocol=r.protocol,n.host=r.hostname+":"+r.port,n.pathname=r.pathname,e.parsedOrigin=r,e.sameOrigin=r.sameOrigin}var Je=["load","error","abort","timeout"],Xe=Je.length,Qe=(0,i.dV)().o.REQ,et=(0,i.dV)().o.XHR;const tt="X-NewRelic-App-Data",rt="internal-error";class nt extends W{static featureName=c.TZ;constructor(e){super(e,c.TZ),this.dt=new qe(e),this.handler=(e,t,r,n)=>(0,S.p)(e,t,r,n,this.ee);try{const e={xmlhttprequest:"xhr",fetch:"fetch",beacon:"beacon"};g.gm?.performance?.getEntriesByType("resource").forEach(r=>{if(r.initiatorType in e&&0!==r.responseStatus){const n={status:r.responseStatus},i={rxSize:r.transferSize,duration:Math.floor(r.duration),cbTime:0};$e(n,r.name),this.handler("xhr",[n,i,r.startTime,r.responseEnd,e[r.initiatorType]],void 0,t.K7.ajax)}})}catch(e){}ze(this.ee,e),De(this.ee,e),function(e,r,n,i){const s=[c.mo.ALL,c.mo.FAILURES].includes(e.init.ajax?.capture_payloads);function a(e){var t=this;t.totalCbs=0,t.called=0,t.cbTime=0,t.end=A,t.ended=!1,t.xhrGuids={},t.lastSize=null,t.loadCaptureCalled=!1,t.params=this.params||{},t.metrics=this.metrics||{},t.latestLongtaskEnd=0,e.addEventListener("load",function(r){O(t,e)},(0,J.jT)(!1)),g.lR||e.addEventListener("progress",function(e){t.lastSize=e.loaded},(0,J.jT)(!1))}function o(e){this.params={method:e[0]},$e(this,e[1]),this.metrics={}}function d(t,r){e.loader_config.xpid&&this.sameOrigin&&r.setRequestHeader("X-NewRelic-ID",e.loader_config.xpid);var n=i.generateTracePayload(this.parsedOrigin);if(n){var s=!1;n.newrelicHeader&&(r.setRequestHeader("newrelic",n.newrelicHeader),s=!0),n.traceContextParentHeader&&(r.setRequestHeader("traceparent",n.traceContextParentHeader),n.traceContextStateHeader&&r.setRequestHeader("tracestate",n.traceContextStateHeader),s=!0),s&&(this.dt=n)}}function u(e,t){s&&e.length>=2&&(this.requestHeaders??={},this.requestHeaders[e[0].toLowerCase()]=e[1])}function l(e,t){var n=this.metrics,i=e[0],s=this;if(n&&i){var a=Le(i);a&&(n.txSize=a)}this.startTime=(0,_.t)(),this.requestBody=i,this.listener=function(e){try{"abort"!==e.type||s.loadCaptureCalled||(s.params.aborted=!0),("load"
5!==e.type||s.called===s.totalCbs&&(s.onloadCalled||"function"!=typeof t.onload)&&"function"==typeof s.end)&&s.end(t)}catch(e){try{r.emit(rt,[e])}catch(e){}}};for(var o=0;o<Xe;o++)t.addEventListener(Je[o],this.listener,(0,J.jT)(!1))}function f(e,t,r){this.cbTime+=e,t?this.onloadCalled=!0:this.called+=1,this.called!==this.totalCbs||!this.onloadCalled&&"function"==typeof r.onload||"function"!=typeof this.end||this.end(r)}function h(e,t){var r=""+Ne(e)+!!t;this.xhrGuids&&!this.xhrGuids[r]&&(this.xhrGuids[r]=!0,this.totalCbs+=1)}function p(e,t){var r=""+Ne(e)+!!t;this.xhrGuids&&this.xhrGuids[r]&&(delete this.xhrGuids[r],this.totalCbs-=1)}function m(){this.endTime=(0,_.t)()}function v(e,t){t instanceof et&&"load"===e[0]&&r.emit("xhr-load-added",[e[1],e[2]],t)}function y(e,t){t instanceof et&&"load"===e[0]&&r.emit("xhr-load-removed",[e[1],e[2]],t)}function b(e,t,r){t instanceof et&&("onload"===r&&(this.onload=!0),("load"===(e[0]&&e[0].type)||this.onload)&&(this.xhrCbStart=(0,_.t)()))}function E(e,t){this.xhrCbStart&&r.emit("xhr-cb-time",[(0,_.t)()-this.xhrCbStart,this.onload,t],t)}function w(e){var t,r=e[1]||{};if("string"==typeof e[0]?0===(t=e[0]).length&&g.RI&&(t=""+g.gm.location.href):e[0]&&e[0].url?t=e[0].url:g.gm?.URL&&e[0]&&e[0]instanceof URL?t=e[0].href:"function"==typeof e[0].toString&&(t=e[0].toString()),"string"==typeof t&&0!==t.length){t&&(this.parsedOrigin=(0,Ge.D)(t),this.sameOrigin=this.parsedOrigin.sameOrigin);var n=i.generateTracePayload(this.parsedOrigin);if(n&&(n.newrelicHeader||n.traceContextParentHeader))if(e[0]&&e[0].headers)o(e[0].headers,n)&&(this.dt=n);else{var s={};for(var a in r)s[a]=r[a];s.headers=new Headers(r.headers||{}),o(s.headers,n)&&(this.dt=n),e.length>1?e[1]=s:e.push(s)}}function o(e,t){var r=!1;return t.newrelicHeader&&(e.set("newrelic",t.newrelicHeader),r=!0),t.traceContextParentHeader&&(e.set("traceparent",t.traceContextParentHeader),t.traceContextStateHeader&&e.set("tracestate",t.traceContextStateHeader),r=!0),r}}function R(e,t){this.params={},this.metrics={},this.startTime=(0,_.t)(),this.dt=t;let[r,n={}]=e;$e(this,Ze(r));const i=(""+(r&&r instanceof Qe&&r.method||n.method||"GET")).toUpperCase();this.params.method=i,this.txSize=Le(n.body||r?.body)||0;try{var a=n.headers||r?.headers;if(s&&a)if(this.requestHeaders??={},a instanceof Headers)a.forEach(function(e,t){this.requestHeaders[t.toLowerCase()]=e}.bind(this));else if("object"==typeof a)for(var o in a)this.requestHeaders[o.toLowerCase()]=a[o]}catch(e){}this.requestBody=n.body||r?.body}function T(e,t){if(this.endTime=(0,_.t)(),this.params||(this.params={}),(0,Ye.iW)(this.params))return;this.params.status=t?t.status:0;const n=()=>{const e=+this.rxSize,t=null==this.rxSize||isNaN(e)?void 0:e,r={txSize:this.txSize,rxSize:t,duration:this.endTime-this.startTime},n=[this.params,r,this.startTime,this.endTime,"fetch"];this.targets.forEach(e=>x(n,this,e))};t&&s?t.clone().text().then(e=>{this.responseBody=e,this.rxSize&&"0"!==this.rxSize&&0!==this.rxSize||void 0===e||0===this.params.status||(this.rxSize=Le(e)),t?.headers&&(this.responseHeaders={},t.headers.forEach(function(e,t){this.responseHeaders[t.toLowerCase()]=e}.bind(this)))}).catch(e=>{r.emit(rt,[e])}).finally(()=>{n()}):n()}function A(e){const t=this.params,n=this.metrics;if(this.ended)return;this.ended=!0;for(let t=0;t<Xe;t++)e.removeEventListener(Je[t],this.listener,!1);if(t.aborted)return;if((0,Ye.iW)(t))return;if(n.duration=this.endTime-this.startTime,this.loadCaptureCalled||4!==e.readyState?null==t.status&&(t.status=0):O(this,e),n.cbTime=this.cbTime,s){try{this.responseBody=e.responseText}catch(t){this.responseBody=e.response}if((!n.rxSize||0===n.rxSize)&&void 0!==this.responseBody&&0!==t.status){const e=Le(this.responseBody);void 0!==e&&(n.rxSize=e)}try{this.responseHeaders=function(e){const t={};return e?(e.split("\r\n").forEach(function(e){const r=e.indexOf(": ");if(r>0){const n=e.substring(0,r),i=e.substring(r+2);t[n.toLowerCase()]=i}}),t):t}(e.getAllResponseHeaders())}catch(e){r.emit(rt,[e])}}const i=[t,n,this.startTime,this.endTime,"xhr"];this.targets.forEach(e=>x(i,this,e))}function x(e,r,i){n("xhr",[...e,i],r,t.K7.ajax)}function O(e,n){e.params.status=n.status;var i=function(e,t){var r=e.responseType;return"json"===r&&null!==t?t:"arraybuffer"===r||"blob"===r||"json"===r?Le(e.response):"text"===r||""===r||void 0===r?Le(e.responseText):void 0}(n,e.lastSize);if(void 0!==i&&0!==n.status&&(e.metrics.rxSize=i),e.sameOrigin&&n.getAllResponseHeaders().indexOf(tt)>=0){var s=n.getResponseHeader(tt);s&&((0,S.p)("sm",["Ajax/CrossApplicationTracing/Header/Seen"],void 0,t.K7.metrics,r),e.params.cat=s.split(", ").pop())}e.loadCaptureCalled=!0}r.on("new-xhr",a),r.on("open-xhr-start",o),r.on("open-xhr-end",d),r.on("send-xhr-start",l),r.on("setRequestHeader-xhr-start",u),r.on("xhr-cb-time",f),r.on("xhr-load-added",h),r.on("xhr-load-removed",p),r.on("xhr-resolved",m),r.on("addEventListener-end",v),r.on("removeEventListener-end",y),r.on("fn-end",E),r.on("fetch-before-start",w),r.on("fetch-start",R),r.on("fn-start",b),r.on("fetch-done",T)}(e,this.ee,this.handler,this.dt),this.importAggregator(e,()=>r.e(478).then(r.bind(r,3845)))}}const it={},st=["pushState","replaceState"];function at(e,t){const r=function(e){return(e||R.ee).get("history")}(e);return!g.RI||it[r.debugId]++||(it[r.debugId]=1,(0,Pe.YM)(r,void 0,t).inPlace(window.history,st,"-")),r}var ot=r(3738);function ct(e){(0,N.Y)(k.BL,function(r=Date.now()){const n=r-g.WN;n<0&&(0,l.R)(62,r),(0,S.p)(q.XG,[k.BL,{time:n}],void 0,t.K7.metrics,e.ee),e.addToTrace({name:k.BL,start:r,origin:"nr"}),(0,S.p)("api-"+k.hG,[n,k.BL],void 0,t.K7.genericEvents,e.ee)},e)}const{He:dt,bD:ut,d3:lt,Kp:ft,TZ:ht,Lc:pt,uP:gt,Rz:mt}=ot;class vt extends W{static featureName=ht;constructor(e){var n;super(e,ht),n=e,(0,N.Y)(k.U2,function(e){if(!(e&&"object"==typeof e&&e.name&&e.start))return;const r={n:e.name,s:e.start-g.WN,e:(e.end||e.start)-g.WN,o:e.origin||"",t:"api"};r.s<0||r.e<0||r.e<r.s?(0,l.R)(61,{start:r.s,end:r.e}):(0,S.p)("bstApi",[r],void 0,t.K7.sessionTrace,n.ee)},n),ct(e);
5if(!(0,j.V)(e.init))return void this.deregisterDrain();const i=this.ee;let s;at(i,e),this.eventsEE=(0,Me.u)(i,e),this.eventsEE.on(gt,function(e,t){this.bstStart=(0,_.t)()}),this.eventsEE.on(pt,function(e,r){(0,S.p)("bst",[e[0],r,this.bstStart,(0,_.t)()],void 0,t.K7.sessionTrace,i)}),i.on(mt+lt,function(e){this.time=(0,_.t)(),this.startPath=location.pathname+location.hash}),i.on(mt+ft,function(e){(0,S.p)("bstHist",[location.pathname+location.hash,this.startPath,this.time],void 0,t.K7.sessionTrace,i)});try{s=new PerformanceObserver(e=>{const r=e.getEntries();(0,S.p)(dt,[r],void 0,t.K7.sessionTrace,i)}),s.observe({type:ut,buffered:!0})}catch(e){}this.importAggregator(e,()=>r.e(478).then(r.bind(r,6974)),{resourceObserver:s})}}var yt=r(733),bt=r(6344);class Et extends W{static featureName=bt.TZ;#i;recorder;constructor(e){var n;let i;super(e,bt.TZ),n=e,(0,N.Y)(k.CH,function(){(0,S.p)(k.CH,[],void 0,t.K7.sessionReplay,n.ee)},n),function(e){(0,N.Y)(k.Tb,function(){(0,S.p)(k.Tb,[],void 0,t.K7.sessionReplay,e.ee)},e)}(e);const s="".concat(u.Wt).concat((0,yt.Y)(e.info.licenseKey,e.info.applicationID));try{i=JSON.parse(localStorage.getItem(s))}catch(e){}(0,I.SR)(e.init)&&this.ee.on(k.CH,()=>this.#s()),this.#a(i)&&this.importRecorder().then(e=>{e.startRecording(bt.Qb.PRELOAD,i?.sessionReplayMode)}),this.abortHandler=this.#n,this.importAggregator(this.agentRef,()=>r.e(478).then(r.bind(r,6167)),this),this.ee.on("err",e=>{this.blocked||this.agentRef.runtime.isRecording&&(this.errorNoticed=!0,(0,S.p)(bt.Vh,[e],void 0,this.featureName,this.ee))})}#a(e){return e&&(e.sessionReplayMode===u.g.FULL||e.sessionReplayMode===u.g.ERROR)||(0,I.Aw)(this.agentRef.init)}importRecorder(){return this.recorder?Promise.resolve(this.recorder):(this.#i??=Promise.all([r.e(478),r.e(249)]).then(r.bind(r,4866)).then(({Recorder:e})=>(this.recorder=new e(this),this.recorder)).catch(e=>{throw this.ee.emit("internal-error",[e]),this.blocked=!0,e}),this.#i)}#s(){this.blocked||(this.featAggregate?this.featAggregate.mode!==u.g.FULL&&this.featAggregate.initializeRecording(u.g.FULL,!0,bt.Qb.API):this.importRecorder().then(()=>{this.recorder.startRecording(bt.Qb.API,u.g.FULL)}))}#n(){this.recorder?.stopRecording()}}var wt=r(3962);class Rt extends W{static featureName=wt.TZ;constructor(e){if(super(e,wt.TZ),function(e){const r=e.ee.get("tracer");function n(){}(0,N.Y)(k.dT,function(e){return(new n).get("object"==typeof e?e:{})},e);const i=n.prototype={createTracer:function(n,i){var s={},a=this,o="function"==typeof i;return(0,S.p)(q.xV,["API/createTracer/called"],void 0,t.K7.metrics,e.ee),function(){if(r.emit((o?"":"no-")+"fn-start",[(0,_.t)(),a,o],s),o)try{return i.apply(this,arguments)}catch(e){const t="string"==typeof e?new Error(e):e;throw r.emit("fn-err",[arguments,this,t],s),t}finally{r.emit("fn-end",[(0,_.t)()],s)}}}};["actionText","setName","setAttribute","save","ignore","onEnd","getContext","end","get"].forEach(r=>{N.Y.apply(this,[r,function(){return(0,S.p)(k.hw+r,[performance.now(),...arguments],this,t.K7.softNav,e.ee),this},e,i])}),(0,N.Y)(k.PA,function(){(0,S.p)(k.hw+"routeName",[performance.now(),...arguments],void 0,t.K7.softNav,e.ee)},e)}(e),!g.RI||!(0,i.dV)().o.MO)return;const n=at(this.ee,e);try{this.removeOnAbort=new AbortController}catch(e){}wt.tC.forEach(e=>{(0,J.sp)(e,e=>{c(e)},!0,this.removeOnAbort?.signal)}
5);const s=()=>(0,S.p)("newURL",[(0,_.t)(),""+window.location],void 0,this.featureName,this.ee);n.on("pushState-end",s),n.on("replaceState-end",s),(0,J.sp)(wt.OV,e=>{c(e),(0,S.p)("newURL",[e.timeStamp,""+window.location],void 0,this.featureName,this.ee)},!0,this.removeOnAbort?.signal);let a=!1;const o=new((0,i.dV)().o.MO)((e,t)=>{a||(a=!0,requestAnimationFrame(()=>{(0,S.p)("newDom",[(0,_.t)()],void 0,this.featureName,this.ee),a=!1}))}),c=(0,C.s)(e=>{"loading"!==document.readyState&&((0,S.p)("newUIEvent",[e],void 0,this.featureName,this.ee),o.observe(document.body,{attributes:!0,childList:!0,subtree:!0,characterData:!0}))},100,{leading:!0});this.abortHandler=function(){this.removeOnAbort?.abort(),o.disconnect(),this.abortHandler=void 0},this.importAggregator(e,()=>r.e(478).then(r.bind(r,4393)),{domObserver:o})}}var Tt=r(981);const At={},St=new Set;function xt(e){return"string"==typeof e?{type:"string",size:(new TextEncoder).encode(e).length}:e instanceof ArrayBuffer?{type:"ArrayBuffer",size:e.byteLength}:e instanceof Blob?{type:"Blob",size:e.size}:e instanceof DataView?{type:"DataView",size:e.byteLength}:ArrayBuffer.isView(e)?{type:"TypedArray",size:e.byteLength}:{type:"unknown",size:0}}class Ot{constructor(e,t){this.timestamp=(0,_.t)(),this.currentUrl=(0,Ee.L)(window.location.href),this.socketId=(0,ye.LA)(8),this.requestedUrl=(0,Ee.L)(e),this.requestedProtocols=Array.isArray(t)?t.join(","):t||"",this.openedAt=void 0,this.protocol=void 0,this.extensions=void 0,this.binaryType=void 0,this.messageOrigin=void 0,this.messageCount=0,this.messageBytes=0,this.messageBytesMin=0,this.messageBytesMax=0,this.messageTypes=void 0,this.sendCount=0,this.sendBytes=0,this.sendBytesMin=0,this.sendBytesMax=0,this.sendTypes=void 0,this.closedAt=void 0,this.closeCode=void 0,this.closeReason="unknown",this.closeWasClean=void 0,this.connectedDuration=0,this.hasErrors=void 0}}class _t extends W{static featureName=o.TZ;constructor(e){super(e,o.TZ);const n=e.init.feature_flags.includes("websockets")||e.init.web_sockets?.enabled,s=!e.init.feature_flags.includes("no_spv"),a=[e.init.page_action.enabled,e.init.performance.capture_marks,e.init.performance.capture_measures,e.init.performance.resources.enabled,e.init.user_actions.enabled,n,s];var c;let d;if(c=e,(0,N.Y)(k.hG,(e,t)=>ce(e,t,c),c),function(e){(0,N.Y)(k.fF,(t,r)=>ue(t,r,e),e)}(e),ct(e),Se(e),function(e){(0,N.Y)(k.V1,(t,r)=>de(t,r,e),e)}(e),this.removeOnAbort=new AbortController,this.abortHandler=()=>{this.removeOnAbort.abort(),this.abortHandler=void 0},n){const u=function(e,t){if(!(0,i.dV)().o.WS)return e;const r=e.get("websockets");if(At[r.debugId]++)return r;At[r.debugId]=1,(0,V.G)(()=>{const e=(0,_.t)();St.forEach(t=>{t.nrData.closedAt=e,t.nrData.closeCode=1001,t.nrData.closeReason="Page navigating away",t.nrData.closeWasClean=!1,t.nrData.openedAt&&(t.nrData.connectedDuration=e-t.nrData.openedAt),r.emit("ws",[t.nrData,t.targets],t)})});
5class n extends WebSocket{static name=Tt.R.WS;static toString(){return"function WebSocket() { [native code] }"}toString(){return"[object WebSocket]"}get[Symbol.toStringTag](){return n.name}#o(e){(e.__newrelic??={}).socketId=this.nrData.socketId,this.nrData.hasErrors??=!0}constructor(...e){super(...e),this.nrData=new Ot(e[0],e[1]),this.targets=(0,Ie.$5)(t),this.addEventListener("open",()=>{this.nrData.openedAt=(0,_.t)(),["protocol","extensions","binaryType"].forEach(e=>{this.nrData[e]=this[e]}),St.add(this)}),this.addEventListener("message",e=>{const{type:t,size:r}=xt(e.data);this.nrData.messageOrigin??=(0,Ee.L)(e.origin),this.nrData.messageCount++,this.nrData.messageBytes+=r,this.nrData.messageBytesMin=Math.min(this.nrData.messageBytesMin||1/0,r),this.nrData.messageBytesMax=Math.max(this.nrData.messageBytesMax,r),(this.nrData.messageTypes??"").includes(t)||(this.nrData.messageTypes=this.nrData.messageTypes?"".concat(this.nrData.messageTypes,",").concat(t):t)}),this.addEventListener("close",e=>{this.nrData.closedAt=(0,_.t)(),this.nrData.closeCode=e.code,e.reason&&(this.nrData.closeReason=e.reason),this.nrData.closeWasClean=e.wasClean,this.nrData.connectedDuration=this.nrData.closedAt-this.nrData.openedAt,St.delete(this),r.emit("ws",[this.nrData,this.targets],this)})}addEventListener(e,t,...r){const n=this,i="function"==typeof t?function(...e){try{return t.apply(this,e)}catch(e){throw n.#o(e),e}}:t?.handleEvent?{handleEvent:function(...e){try{return t.handleEvent.apply(t,e)}catch(e){throw n.#o(e),e}}}:t;return super.addEventListener(e,i,...r)}send(e){if(this.readyState===WebSocket.OPEN){const{type:t,size:r}=xt(e);this.nrData.sendCount++,this.nrData.sendBytes+=r,this.nrData.sendBytesMin=Math.min(this.nrData.sendBytesMin||1/0,r),this.nrData.sendBytesMax=Math.max(this.nrData.sendBytesMax,r),(this.nrData.sendTypes??"").includes(t)||(this.nrData.sendTypes=this.nrData.sendTypes?"".concat(this.nrData.sendTypes,",").concat(t):t)}try{return super.send(e)}catch(e){throw this.#o(e),e}}close(...e){try{super.close(...e)}catch(e){throw this.#o(e),e}}}return g.gm.WebSocket=n,r}(this.ee,e);u.on("ws",(e,t)=>{(0,S.p)("ws-complete",[e,t],void 0,this.featureName,this.ee)})}if(s){if("function"==typeof g.gm.ReportingObserver){const l=new g.gm.ReportingObserver(e=>{e.forEach(e=>{(0,S.p)("spv",[kt(e),(0,_.t)()],void 0,t.K7.genericEvents,this.ee)}),l.disconnect()},{types:["csp-violation"],buffered:!0});l.observe()}g.gm.addEventListener("securitypolicyviolation",e=>{(0,S.p)("spv",[kt(e),e.timeStamp],void 0,t.K7.genericEvents,this.ee)},(0,J.jT)(!1,this.removeOnAbort.signal))}if(g.RI){if(ze(this.ee,e),De(this.ee,e),d=at(this.ee,e),e.init.user_actions.enabled){function f(t){const r=(0,Ge.D)(t);return e.beacons.includes(r.hostname+":"+r.port)}function h(){d.emit("navChange")}o.Zp.forEach(e=>(0,J.sp)(e,e=>(0,S.p)("ua",[e],void 0,this.featureName,this.ee),!0)),o.qN.forEac
5h(e=>{const t=(0,C.s)(e=>{(0,S.p)("ua",[e],void 0,this.featureName,this.ee)},500,{leading:!0});(0,J.sp)(e,t)}),g.gm.addEventListener("error",()=>{(0,S.p)("uaErr",[],void 0,t.K7.genericEvents,this.ee)},(0,J.jT)(!1,this.removeOnAbort.signal)),this.ee.on("open-xhr-start",(e,r)=>{f(e[1])||r.addEventListener("readystatechange",()=>{2===r.readyState&&(0,S.p)("uaXhr",[],void 0,t.K7.genericEvents,this.ee)},(0,J.jT)(void 0,this.removeOnAbort.signal))}),this.ee.on("fetch-start",e=>{e.length>=1&&!f(Ze(e[0]))&&(0,S.p)("uaXhr",[],void 0,t.K7.genericEvents,this.ee)}),d.on("pushState-end",h),d.on("replaceState-end",h),window.addEventListener("hashchange",h,(0,J.jT)(!0,this.removeOnAbort.signal)),window.addEventListener("popstate",h,(0,J.jT)(!0,this.removeOnAbort.signal))}if(e.init.performance.resources.enabled&&g.gm.PerformanceObserver?.supportedEntryTypes.includes("resource")){new PerformanceObserver(e=>{e.getEntries().forEach(e=>{(0,S.p)("browserPerformance.resource",[e],void 0,this.featureName,this.ee)})}).observe({type:"resource",buffered:!0})}}a.some(e=>e)?this.importAggregator(e,()=>r.e(478).then(r.bind(r,8019))):this.deregisterDrain()}}function kt(e){const t=e.body??e;return{blockedUrl:t.blockedURL??e.blockedURI,documentUrl:t.documentURL??e.documentURI,effectiveDirective:t.effectiveDirective,originalPolicy:t.originalPolicy,sourceFile:t.sourceFile,statusCode:t.statusCode,lineNumber:t.lineNumber,columnNumber:t.columnNumber,disposition:"reporting"===t.disposition?"report":t.disposition,sample:t.sample,referrer:t.referrer}}var Nt=r(2646);const Lt=new Map;function Mt(e,t,r,n,i=!0,s){if("object"!=typeof t||!t||"string"!=typeof r||!r||"function"!=typeof t[r])return(0,l.R)(29);const a=function(e){return(e||R.ee).get("logger")}(e),o=(0,Pe.YM)(a,void 0,s),c=new Nt.y(R.P);c.level=n.level,c.customAttributes=n.customAttributes,c.autoCaptured=i;const d=t[r]?.[Pe.Jt]||t[r];return Lt.set(d,c),o.inPlace(t,[r],"wrap-logger-",()=>Lt.get(d),void 0,!0),a}var Pt=r(1910);class It extends W{static featureName=se.TZ;constructor(e){var t;super(e,se.TZ),t=e,(0,N.Y)("log",(e,r)=>oe(e,r,t),t),function(e){(0,N.Y)(k.Wb,(t,r,{customAttributes:n={},level:i=se.p_.INFO}={})=>{Mt(e.ee,t,r,{customAttributes:n,level:i},!1,e)},e)}(e),Se(e);const n=this.ee;["log","error","warn","info","debug","trace"].forEach(t=>{(0,Pt.i)(g.gm.console[t]),Mt(n,g.gm.console,t,{level:"log"===t?"info":t},void 0,e)}),this.ee.on("wrap-logger-end",function([t],r,i,s=[e.runtime.v2Target]){const{level:a,customAttributes:o,autoCaptured:c}=this;s.forEach(e=>{(0,ae.R)(n,t,o,a,c,e)})}),this.importAggregator(e,()=>r.e(478).then(r.bind(r,5288)))}}new F({features:[nt,K,G,vt,Et,Y,Oe,_t,It,Rt],loaderType:"spa"})})()})();</script>
5 6<meta name="title" content="Customer Login"/> 7<meta name="description" content="Flooring Inc. The Flooring Superstore Home Page"/> 8<meta name="keywords" content="Flooring, Rubber, Garage, Foam, Dance, Carpet, Hardwood, Laminate, Vinyl, Gym Floors, Gymnastic Mats, Mats"/> 9<meta name="robots" content="INDEX,FOLLOW"/> 10<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1"/> 11<title>Customer Login</title> 12<link type="text/css" rel="preload" as="style" onload="this.onload=null;this.rel='stylesheet'" href="https://www.flooringinc.com/static/version1789462004/frontend/Dcw/hyvadesktop/en_US/css/styles.min.css" />
13<script type="text/javascript" defer="defer" src="https://www.flooringinc.com/static/version1789462004/frontend/Dcw/hyvadesktop/en_US/Hyva_MagentoDataServices/js/storefront-event-collector.min.js"></script>
vendor: 1 bytes, line 13
13
14<script type="text/javascript" defer="defer" src="https://www.flooringinc.com/static/version1789462004/frontend/Dcw/hyvadesktop/en_US/Hyva_MagentoDataServices/js/storefront-events-sdk.min.js"></script>
vendor: 1 bytes, line 14
14
15<script type="text/javascript" defer="defer" src="https://www.flooringinc.com/static/version1789462004/frontend/Dcw/hyvadesktop/en_US/Hyva_MagentoProductRecommendations/js/recs-sdk.min.js"></script>
vendor: 1 bytes, line 15
15
16<script type="text/javascript" defer="defer" src="https://www.flooringinc.com/static/version1789462004/frontend/Dcw/hyvadesktop/en_US/Hyva_MagentoProductRecommendationsLayout/js/recs-sdk.min.js"></script>
16 17<link rel="icon" type="image/x-icon" href="https://www.flooringinc.com/media/favicon/stores/1/fav.png" /> 18<link rel="shortcut icon" type="image/x-icon" href="https://www.flooringinc.com/media/favicon/stores/1/fav.png" /> 19 20<!-- Plausible Script Start --> 21
22<script defer data-domain="flooringinc.com" src="https://plausible.io/js/script.file-downloads.hash.outbound-links.pageview-props.revenue.tagged-events.js"></script>
vendor: 2 bytes, line 22
22
23<script>window.plausible = window.plausible || function() { (window.plausible.q = window.plausible.q || []).push(arguments) }</script>
23 24 25<!-- Plausible Script Ends --> 26 27<!--My8cKJTuUilt2Vvmb0igB9BsOCrMSS2F--> 28 29<link rel="preconnect" href="https://www.googletagmanager.com" crossorigin> 30<link rel="dns-prefetch" href="https://www.googletagmanager.com"> 31<link rel="preload" href="https://fonts.gstatic.com/s/poppins/v20/pxiEyp8kv8JHgFVrJJfecg.woff2" as="font" type="font/woff2" crossorigin="anonymous"/> 32 33<style> 34.needsclick.kl-teaser-UEa7DA { display:none!important; } 35.bg-white.w-full.max-w-\[580px\].text-center.rounded-lg.shadow-lg { 36 max-width: 580px; 37} 38</style> 39
40<script nonce="bDhraW5vaDFjczNyejIwenoxdG1tYm50dzNqb2RqOGY="> 41 window.getWpGA4Cookie = function(name) { 42 match = document.cookie.match(new RegExp(name + '=([^;]+)')); 43 if (match) return decodeURIComponent(match[1].replace(/\+/g, ' ')) ; 44 }; 45 46 window.ga4AllowServices = false; 47 48 var isCookieRestrictionModeEnabled = 0, 49 currentWebsiteId = 1, 50 cookieRestrictionName = 'user_allowed_save_cookie'; 51 52 if (isCookieRestrictionModeEnabled) { 53 allowedCookies = window.getWpGA4Cookie(cookieRestrictionName); 54 55 if (allowedCookies !== undefined) { 56 allowedWebsites = JSON.parse(allowedCookies); 57 58 if (allowedWebsites[currentWebsiteId] === 1) { 59 window.ga4AllowServices = true; 60 } 61 } 62 } else { 63 window.ga4AllowServices = true; 64 } 65</script>
65 66
66<script nonce="bDhraW5vaDFjczNyejIwenoxdG1tYm50dzNqb2RqOGY="> 67 if (window.ga4AllowServices) { 68 window.dataLayer = window.dataLayer || []; 69 var dl4Objects = [{"pageName":"Customer Login","pageType":"other"}]; 70 for (var i in dl4Objects) { 71 window.dataLayer.push({ecommerce: null}); 72 window.dataLayer.push(dl4Objects[i]); 73 } 74 var wpGA4Cookies = ['wp_ga4_user_id','wp_ga4_customerGroup']; 75 wpGA4Cookies.map(function (cookieName) { 76 var cookieValue = window.getWpGA4Cookie(cookieName); 77 if (cookieValue) { 78 var dl4Object = {}; 79 dl4Object[cookieName.replace('wp_ga4_', '')] = cookieValue; 80 window.dataLayer.push(dl4Object); 81 } 82 }); 83 } 84 </script>
84 85 86 <!-- Google Tag Manager -->
87<script nonce="bDhraW5vaDFjczNyejIwenoxdG1tYm50dzNqb2RqOGY=" > if (window.ga4AllowServices) { 88 89window.addEventListener('init-external-scripts', () => {
vendor: 335 bytes, lines 89-95
89 90 91(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start': 92new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0], 93j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src= 94'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f); 95})(window,document,'script','dataLayer','
95GTM-5XR7MB7
vendor: 7 bytes, lines 95-96
95'); 96
97}, {once: true, passive: true}); 98 99} </script>
99 100<!-- End Google Tag Manager --> 101 102
103<script nonce="bDhraW5vaDFjczNyejIwenoxdG1tYm50dzNqb2RqOGY=">var prCookieService={defaultAttributes:{path:'/'},converter:{write:function(value){return encodeURIComponent(value);},read:function(value){return decodeURIComponent(value)}},decode:function(string){return string.replace(/(%[0-9A-Z]{2})+/g,decodeURIComponent);},set:function(key,value,attributes){if(typeof document==='undefined'){return;} 104attributes=Object.assign(this.defaultAttributes,attributes);if(typeof attributes.expires==='number'){attributes.expires=new Date(new Date()*1+attributes.expires*864e+5);} 105attributes.expires=attributes.expires?attributes.expires.toUTCString():'';try{var result=JSON.stringify(value);if(/^[\{\[]/.test(result)){value=result;}}catch(e){} 106value=this.converter.write(value);key=this.converter.write(String(key)).replace(/%(23|24|26|2B|5E|60|7C)/g,decodeURIComponent).replace(/[\(\)]/g,escape);var stringifiedAttributes='';for(var attributeName in attributes){if(!attributes[attributeName]){continue;} 107stringifiedAttributes+='; '+attributeName;if(attributes[attributeName]===true){continue;} 108stringifiedAttributes+='='+attributes[attributeName].split(';')[0];} 109return(document.cookie=key+'='+value+stringifiedAttributes);},remove:function(key,attributes){this.set(key,'',{...attributes,...{expires:-1}});},get:function(key,json=false){if(typeof document==='undefined'){return;} 110var jar={};var cookies=document.cookie?document.cookie.split('; '):[];var i=0;for(;i<cookies.length;i++){var parts=cookies[i].split('=');var cookie=parts.slice(1).join('=');if(!json&&cookie.charAt(0)==='"'){cookie=cookie.slice(1,-1);} 111try{var name=this.converter.write(parts[0]);cookie=this.converter.read(cookie);if(json){try{cookie=JSON.parse(cookie);}catch(e){}} 112jar[name]=cookie;if(key===name){break;}}catch(e){}} 113return key?jar[key]:jar;}}</script>
113 114
115<script nonce="bDhraW5vaDFjczNyejIwenoxdG1tYm50dzNqb2RqOGY=">var prGlobalPrivacyControlApi={config:{"canProcessSignal":true,"isGeotargetingEnabled":true,"geotargetingApiEndpoint":"https:\/\/www.flooringinc.com\/rest\/V1\/pr-global-privacy-control\/geo-targeting\/is-applicable"},isApplicableForUser:false,isConfigured:false,configure:function(){const setConfigurationResult=(isApplicable)=>{this.isApplicableForUser=isApplicable;this.isConfigured=true;if(isApplicable){this.signalHandlers.processPendingHandlers();} 116document.dispatchEvent(new Event('pr-global-privacy-control-api:configured'));};if(!this.config.canProcessSignal){setConfigurationResult(false);return;} 117if(this.cache.get('isApplicableForUser')){setConfigurationResult(this.cache.get('isApplicableForUser'));return;} 118if(!navigator.globalPrivacyControl){setConfigurationResult(false);return;} 119if(!this.config.isGeotargetingEnabled){this.cache.set('isApplicableForUser',true);setConfigurationResult(true);return;} 120this.geotargeting.isApplicable().then(result=>{this.cache.set('isApplicableForUser',result);setConfigurationResult(result);}).catch(()=>setConfigurationResult(true));},shouldApply:function(){if(!this.isConfigured){return false;} 121return this.isApplicableForUser;},};prGlobalPrivacyControlApi.geotargeting={isApplicable:async function(){return fetch(prGlobalPrivacyControlApi.config.geotargetingApiEndpoint,{method:'POST',credentials:'include'}).then(r=>r.json());}};prGlobalPrivacyControlApi.signalHandlers={handlers:[],addHandler:function(callback){let handler={callback:callback,executed:false} 122this.handlers.push(handler);if(prGlobalPrivacyControlApi.isConfigured&&prGlobalPrivacyControlApi.shouldApply()){handler.callback();handler.executed=true;}},processPendingHandlers:function(){if(!prGlobalPrivacyControlApi.shouldApply()){return;} 123if(!prCookieService.get('pr-gpc-signal-handled')){prCookieService.set('pr-gpc-signal-handled',true,{expires:null});} 124this.handlers.forEach(function(handler){if(false===handler.executed){handler.callback();handler.executed=true;}}.bind(this));}};prGlobalPrivacyControlApi.cache={storageKey:'pr_global_privacy_control_api_cache',get:function(key){try{let raw=sessionStorage.getItem(this.storageKey);let cacheData=JSON.parse(raw);return cacheData.hasOwnProperty(key)?cacheData[key]:null;}catch(e){return null;}},set:function(key,value){try{let cacheData=JSON.parse(sessionStorage.getItem(this.storageKey)||'{}');cacheData[key]=value;sessionStorage.setItem(this.storageKey,JSON.stringify(cacheData));}catch(e){}},};prGlobalPrivacyControlApi.configure();</script>
vendor: 1 bytes, line 124
124
125<script type="text/javascript" data-routing="commerce=rum" defer="defer" src="https://rum.hlx.page/.rum/@adobe/helix-rum-js@^2/dist/rum-standalone.js"></script>
125 126 127 128
128<script type="text/javascript" nonce="bDhraW5vaDFjczNyejIwenoxdG1tYm50dzNqb2RqOGY=">(()=>{let userAllowedCookies=prCookieService.get('user_allowed_save_cookie');if(!userAllowedCookies){return;} 129let customerConsent=prCookieService.get('pr-cookie-consent');if(!customerConsent){return;} 130try{customerConsent=JSON.parse(customerConsent);}catch(error){return;} 131const categoryKey='marketing';if(customerConsent.includes('all')||customerConsent.includes(categoryKey)){return;} 132let intervalId=setInterval(prCookieService.set.bind(prCookieService,'mg_dnt',true,{expires:null}),500);document.addEventListener('pr-cookie-consent-api:configured',()=>{clearInterval(intervalId);});})();</script>
132 133 134<!-- Critical CSS for <lite-youtube> element to avoid CLS: https://web.dev/cls/ --> 135<style> 136 lite-youtube{background-color:#000;position:relative;display:block;contain:content;background-position:center center;background-size:cover;cursor:pointer}lite-youtube::after{content:"";display:block;padding-bottom:calc(100% / (16 / 9))}</style>
137<script> 138 var BASE_URL = 'https://www.flooringinc.com/'; 139 var THEME_PATH = 'https://www.flooringinc.com/static/version1789462004/frontend/Dcw/hyvadesktop/en_US'; 140 var COOKIE_CONFIG = { 141 "expires": null, 142 "path": "\u002F", 143 "domain": ".www.flooringinc.com", 144 "secure": true, 145 "lifetime": "3600", 146 "cookie_restriction_enabled": false }; 147 var CURRENT_STORE_CODE = 'default'; 148 var CURRENT_WEBSITE_ID = '1'; 149 150 window.hyva = window.hyva || {} 151 152 window.cookie_consent_groups = window.cookie_consent_groups || {} 153 window.cookie_consent_groups['necessary'] = true; 154 155 window.cookie_consent_config = window.cookie_consent_config || {}; 156 window.cookie_consent_config['necessary'] = [].concat( 157 window.cookie_consent_config['necessary'] || [], 158 [ 159 'user_allowed_save_cookie', 160 'form_key', 161 'mage-messages', 162 'private_content_version', 163 'mage-cache-sessid', 164 'last_visited_store', 165 'section_data_ids' 166 ] 167 ); 168</script>
vendor: 1 bytes, line 168
168
169<script> 170 'use strict'; 171 (function( hyva, undefined ) { 172 173 function lifetimeToExpires(options, defaults) { 174 175 const lifetime = options.lifetime || defaults.lifetime; 176 177 if (lifetime) { 178 const date = new Date; 179 date.setTime(date.getTime() + lifetime * 1000); 180 return date; 181 } 182 183 return null; 184 } 185 186 function generateRandomString() { 187 188 const allowedCharacters = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ', 189 length = 16; 190 191 let formKey = '', 192 charactersLength = allowedCharacters.length; 193 194 for (let i = 0; i < length; i++) { 195 formKey += allowedCharacters[Math.round(Math.random() * (charactersLength - 1))] 196 } 197 198 return formKey; 199 } 200 201 const sessionCookieMarker = {noLifetime: true} 202 203 const cookieTempStorage = {}; 204 205 const internalCookie = { 206 get(name) { 207 const v = document.cookie.match('(^|;) ?' + name + '=([^;]*)(;|$)'); 208 return v ? v[2] : null; 209 }, 210 set(name, value, days, skipSetDomain) { 211 let expires, 212 path, 213 domain, 214 secure, 215 samesite; 216 217 const defaultCookieConfig = { 218 expires: null, 219 path: '/', 220 domain: null, 221 secure: false, 222 lifetime: null, 223 samesite: 'lax' 224 }; 225 226 const cookieConfig = window.COOKIE_CONFIG || {}; 227 228 expires = days && days !== sessionCookieMarker 229 ? lifetimeToExpires({lifetime: 24 * 60 * 60 * days, expires: null}, defaultCookieConfig) 230 : lifetimeToExpires(window.COOKIE_CONFIG, defaultCookieConfig) || defaultCookieConfig.expires; 231 232 path = cookieConfig.path || defaultCookieConfig.path; 233 domain = !skipSetDomain && (cookieConfig.domain || defaultCookieConfig.domain); 234 secure = cookieConfig.secure || defaultCookieConfig.secure; 235 samesite = cookieConfig.samesite || defaultCookieConfig.samesite; 236 237 document.cookie = name + "=" + encodeURIComponent(value) + 238 (expires && days !== sessionCookieMarker ? '; expires=' + expires.toGMTString() : '') + 239 (path ? '; path=' + path : '') + 240 (domain ? '; domain=' + domain : '') + 241 (secure ? '; secure' : '') + 242 (samesite ? '; samesite=' + samesite : 'lax'); 243 }, 244 isWebsiteAllowedToSaveCookie() { 245 const allowedCookies = this.get('user_allowed_save_cookie'); 246 if (allowedCookies) { 247 const allowedWebsites = JSON.parse(unescape(allowedCookies)); 248 249 return allowedWebsites[CURRENT_WEBSITE_ID] === 1; 250 } 251 return false; 252 }, 253 getGroupByCookieName(name) { 254 const cookieConsentConfig = window.cookie_consent_config || {}; 255 let group = null; 256 for (let prop in cookieConsentConfig) { 257 if (!cookieConsentConfig.hasOwnProperty(prop)) continue; 258 if (cookieConsentConfig[prop].includes(name)) { 259 group = prop; 260 break; 261 } 262 } 263 return group; 264 }, 265 isCookieAllowed(name) { 266 const cookieGroup = this.getGroupByCookieName(name); 267 return cookieGroup 268 ? window.cookie_consent_groups[cookieGroup] 269 : this.isWebsiteAllowedToSaveCookie(); 270 }, 271 saveTempStorageCookies() { 272 for (const [name, data] of Object.entries(cookieTempStorage)) { 273 if (this.isCookieAllowed(name)) { 274 this.set(name, data['value'], data['days'], data['skipSetDomain']); 275 delete cookieTempStorage[name]; 276 } 277 } 278 } 279 }; 280 281 hyva.getCookie = (name) => { 282 const cookieConfig = window.COOKIE_CONFIG || {}; 283 284 if (cookieConfig.cookie_restriction_enabled && ! internalCookie.isCookieAllowed(name)) { 285 return cookieTempStorage[name] ? cookieTempStorage[name]['value'] : null; 286 } 287 288 return internalCookie.get(name); 289 } 290 291 hyva.setCookie = (name, value, days, skipSetDomain) => { 292 const cookieConfig = window.COOKIE_CONFIG || {}; 293 294 if (cookieConfig.cookie_restriction_enabled && ! internalCookie.isCookieAllowed(name)) { 295 cookieTempStorage[name] = {value, days, skipSetDomain}; 296 return; 297 } 298 return internalCookie.set(name, value, days, skipSetDomain); 299 } 300 301 302 hyva.setSessionCookie = (name, value, skipSetDomain) => { 303 return hyva.setCookie(name, value, sessionCookieMarker, skipSetDomain) 304 } 305 306 hyva.getBrowserStorage = () => { 307 const browserStorage = window.localStorage || window.sessionStorage; 308 if (!browserStorage) { 309 console.warn('Browser Storage is unavailable'); 310 return false;
311 } 312 try { 313 browserStorage.setItem('storage_test', '1'); 314 browserStorage.removeItem('storage_test'); 315 } catch (error) { 316 console.warn('Browser Storage is not accessible', error); 317 return false; 318 } 319 return browserStorage; 320 } 321 322 hyva.postForm = (postParams) => { 323 const form = document.createElement("form"); 324 325 let data = postParams.data; 326 327 if (! postParams.skipUenc && ! data.uenc) { 328 data.uenc = btoa(window.location.href); 329 } 330 form.method = "POST"; 331 form.action = postParams.action; 332 333 Object.keys(postParams.data).map(key => { 334 const field = document.createElement("input"); 335 field.type = 'hidden' 336 field.value = postParams.data[key]; 337 field.name = key; 338 form.appendChild(field); 339 }); 340 341 const form_key = document.createElement("input"); 342 form_key.type = 'hidden'; 343 form_key.value = hyva.getFormKey(); 344 form_key.name="form_key"; 345 form.appendChild(form_key); 346 347 document.body.appendChild(form); 348 349 form.submit(); 350 } 351 352 hyva.getFormKey = function () { 353 let formKey = hyva.getCookie('form_key'); 354 355 if (!formKey) { 356 formKey = generateRandomString(); 357 hyva.setCookie('form_key', formKey); 358 } 359 360 return formKey; 361 } 362 363 hyva.formatPrice = (value, showSign, options = {}) => { 364 const formatter = new Intl.NumberFormat( 365 'en\u002DUS', 366 Object.assign({ 367 style: 'currency', 368 currency: 'USD', 369 signDisplay: showSign ? 'always' : 'auto' 370 }, options) 371 ); 372 return (typeof Intl.NumberFormat.prototype.formatToParts === 'function') ? 373 formatter.formatToParts(value).map(({type, value}) => { 374 switch (type) { 375 case 'currency': 376 return '\u0024' || value; 377 case 'minusSign': 378 return '- '; 379 case 'plusSign': 380 return '+ '; 381 default : 382 return value; 383 } 384 }).reduce((string, part) => string + part) : 385 formatter.format(value); 386 } 387 388 const formatStr = function (str, nStart) { 389 const args = Array.from(arguments).slice(2); 390 391 return str.replace(/(%+)([0-9]+)/g, (m, p, n) => { 392 const idx = parseInt(n) - nStart; 393 394 if (args[idx] === null || args[idx] === void 0) { 395 return m; 396 } 397 return p.length % 2 398 ? p.slice(0, -1).replace('%%', '%') + args[idx] 399 : p.replace('%%', '%') + n; 400 }) 401 } 402 403 hyva.str = function (string) { 404 const args = Array.from(arguments); 405 args.splice(1, 0, 1); 406 407 return formatStr.apply(undefined, args); 408 } 409 410 hyva.strf = function () { 411 const args = Array.from(arguments); 412 args.splice(1, 0, 0); 413 414 return formatStr.apply(undefined, args); 415 } 416 417 /** 418 * Take a html string as `content` parameter and 419 * extract an element from the DOM to replace in 420 * the current page under the same selector, 421 * defined by `targetSelector` 422 */ 423 hyva.replaceDomElement = (targetSelector, content) => { 424 // Parse the content and extract the DOM node using the `targetSelector` 425 const parser = new DOMParser(); 426 const doc = parser.parseFromString(content, 'text/html'); 427 const contentNode = doc.querySelector(targetSelector); 428 429 // Bail if content can't be found 430 if (!contentNode) { 431 return; 432 } 433 434 hyva.activateScripts(contentNode) 435 436 // Replace the old DOM node with the new content
437 document.querySelector(targetSelector).replaceWith(contentNode); 438 439 // Reload customerSectionData and display cookie-messages if present 440 window.dispatchEvent(new CustomEvent("reload-customer-section-data")); 441 hyva.initMessages(); 442 } 443 444 hyva.activateScripts = (contentNode) => { 445 // Extract all the script tags from the content. 446 // Script tags won't execute when inserted into a dom-element directly, 447 // therefore we need to inject them to the head of the document. 448 const tmpScripts = contentNode.getElementsByTagName('script'); 449 450 if (tmpScripts.length > 0) { 451 // Push all script tags into an array 452 // (to prevent dom manipulation while iterating over dom nodes) 453 const scripts = []; 454 for (let i = 0; i < tmpScripts.length; i++) { 455 scripts.push(tmpScripts[i]); 456 } 457 458 // Iterate over all script tags and duplicate+inject each into the head 459 for (let i = 0; i < scripts.length; i++) { 460 let script = document.createElement('script'); 461 script.innerHTML = scripts[i].innerHTML; 462 463 document.head.appendChild(script); 464 465 // Remove the original (non-executing) node from the content 466 scripts[i].parentNode.removeChild(scripts[i]); 467 } 468 } 469 return contentNode; 470 } 471 472 const replace = {['+']: '-', ['/']: '_', ['=']: ','}; 473 hyva.getUenc = () => btoa(window.location.href).replace(/[+/=]/g, match => replace[match]); 474 475 let currentTrap; 476 477 const focusableElements = (rootElement) => { 478 const selector = 'button, [href], input, select, textarea, details, [tabindex]:not([tabindex="-1"]'; 479 return Array.from(rootElement.querySelectorAll(selector)) 480 .filter(el => { 481 return el.style.display !== 'none' 482 && !el.disabled 483 && el.tabIndex !== -1 484 && (el.offsetWidth || el.offsetHeight || el.getClientRects().length) 485 }) 486 } 487 488 const focusTrap = (e) => { 489 const isTabPressed = e.key === 'Tab' || e.keyCode === 9; 490 if (!isTabPressed) return; 491 492 const focusable = focusableElements(currentTrap) 493 const firstFocusableElement = focusable[0] 494 const lastFocusableElement = focusable[focusable.length - 1] 495 496 e.shiftKey 497 ? document.activeElement === firstFocusableElement && (lastFocusableElement.focus(), e.preventDefault()) 498 : document.activeElement === lastFocusableElement && (firstFocusableElement.focus(), e.preventDefault()) 499 }; 500 501 hyva.releaseFocus = (rootElement) => { 502 if (currentTrap && (!rootElement || rootElement === currentTrap)) { 503 currentTrap.removeEventListener('keydown', focusTrap) 504 currentTrap = null 505 } 506 } 507 hyva.trapFocus = (rootElement) => { 508 if (!rootElement) return; 509 hyva.releaseFocus() 510 currentTrap = rootElement 511 rootElement.addEventListener('keydown', focusTrap) 512 const firstElement = focusableElements(rootElement)[0] 513 firstElement && firstElement.focus() 514 } 515 516 hyva.alpineInitialized = (fn) => window.addEventListener('alpine:initialized', fn, {once: true}) 517 window.addEventListener('user-allowed-save-cookie', () => internalCookie.saveTempStorageCookies()) 518 519 }( window.hyva = window.hyva || {} )); 520</script>
vendor: 1 bytes, line 520
520
521<script> 522 if (!window.IntersectionObserver) { 523 window.IntersectionObserver = function (callback) { 524 this.observe = el => el && callback(this.takeRecords()); 525 this.takeRecords = () => [{isIntersecting: true, intersectionRatio: 1}]; 526 this.disconnect = () => {}; 527 this.unobserve = () => {}; 528 } 529 } 530</script>
530 531<div data-content-type="html" data-appearance="default" data-element="main" data-decoded="true"><button id="open-chatbox" aria-label="Open chat"><svg position="right" class="sc-1k07fow-1 cbnSms" width="24px" height="24px" viewBox="0 0 24 24" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><path d="M10,18 L6,22 L6,18 L10,18 Z M17,6 C19.7614237,6 22,8.23857625 22,11 C22,13.7614237 19.7614237,16 17,16 L17,16 L7,16 C4.23857625,16 2,13.7614237 2,11 C2,8.23857625 4.23857625,6 7,6 L7,6 Z" transform="translate(12.000000, 14.000000) scale(-1, 1) translate(-12.000000, -14.000000) "></path></svg></button>
532<script> 533// Lightweight click handler: if Zendesk is already available, open messenger and hide the button. 534// If Zendesk is not available yet we do nothing here â the DOMContentLoaded handler below is 535// responsible for loading the script (avoids double-loading the Zendesk snippet). 536(function () { 537 const btn = document.getElementById('open-chatbox'); 538 if (!btn) return; 539 540 btn.addEventListener('click', function () { 541 if (typeof zE !== 'undefined') { 542 try { 543 zE('messenger', 'open'); 544 } catch (e) { 545 // ignore if API is not ready yet 546 } 547 this.style.display = 'none'; 548 this.setAttribute('aria-hidden', 'true'); 549 } 550 // If zE is not defined we intentionally don't load the script here to avoid 551 // duplicate loading. The DOMContentLoaded listener below will handle loading. 552 }); 553})(); 554</script>
vendor: 2 bytes, line 554
554
555<script> 556/* ===== Load UserWay on click ===== */ 557document.addEventListener('DOMContentLoaded', function () { 558 559 const userWayButton = document.getElementById('uw-widget-custom-trigger'); 560 const zendeskButton = document.getElementById('open-chatbox'); 561 562 /* ---- UserWay Script Functions ---- */ 563 function initUserWay() { 564 if (window.UserWay) { 565 window.UserWay.widgetToggle(); 566 return; 567 } 568 } 569 570 function loadUserWay() { 571 if (window.UserWay) return; // Skip if already loaded 572 573 const userwayScript = document.createElement('script'); 574 userwayScript.src = 'https://cdn.userway.org/widget.js'; 575 userwayScript.type = 'text/javascript'; 576 userwayScript.async = true; 577 userwayScript.crossOrigin = 'anonymous'; 578 userwayScript.setAttribute('data-account', 'vfvO52o2Kn'); 579 document.head.append(userwayScript); 580 581 /* Hide UserWay accessibility icon when initialized */ 582 document.addEventListener('userway:init_completed', function (event) { 583 const instance = event.detail.userWayInstance; 584 instance.iconVisibilityOff(); 585 586 const userwayIframe = document.getElementById("launcher"); 587 if (userwayIframe) { 588 const userwaySiblings = Array.from(userwayIframe.parentNode.children); 589 const userwaySiblingDiv = userwaySiblings.find(el => el.tagName === 'DIV'); 590 if (userwaySiblingDiv) { 591 userwaySiblingDiv.id = 'userway-live-chat'; 592 } 593 } 594 }, { once: true }); 595 } 596 597 if (userWayButton) { 598 userWayButton.addEventListener('click', initUserWay); 599 } 600 601 /* ---- Load UserWay on Scroll ---- */ 602 let hasLoaded = false; 603 function handleScroll() { 604 if (!hasLoaded) { 605 hasLoaded = true; 606 loadUserWay(); 607 // Remove scroll listener after loading 608 window.removeEventListener('scroll', handleScroll); 609 } 610 } 611 612 window.addEventListener('scroll', handleScroll); 613 614 /* ---- Load Zendesk Script ---- */ 615 function hideChatButton() { 616 try { 617 if (zendeskButton) { 618 zendeskButton.style.display = 'none'; 619 zendeskButton.setAttribute('aria-hidden', 'true'); 620 } 621 } catch (e) { 622 // ignore 623 } 624 } 625 626 function loadZendesk() { 627 // If already loaded, open messenger and hide the button 628 if (window.zE) { 629 try { zE('messenger', 'open'); } catch (e) { } 630 hideChatButton(); 631 return; 632 } 633 634 // If script is already injected, do nothing (we'll open on load) 635 if (document.getElementById('ze-snippet')) return; 636 637 const zendeskScript = document.createElement('script'); 638 zendeskScript.id = 'ze-snippet'; 639 zendeskScript.src = 'https://static.zdassets.com/ekr/snippet.js?key=f007eb69-6b5d-407a-bdff-0706af960a4d'; 640 641 zendeskScript.onload = function () { 642 // Wait a short moment to ensure widget initializes 643 setTimeout(() => { 644 if (typeof zE !== 'undefined') { 645 try { zE('messenger', 'open'); } catch (e) { } 646 hideChatButton(); 647 } 648 }, 300); 649 }; 650 651 document.head.append(zendeskScript); 652 } 653 654 if (zendeskButton) { 655 zendeskButton.addEventListener('click', loadZendesk); 656 } 657 658}); 659</script>
659 660 661<style> 662.checkout-index-index button#open-chatbox{display:none} 663.uw-widget-custom-trigger{background-image:url('data:image/svg+xml,<svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" style="&%2310; fill: %2374767e;&%2310;"><circle cx="16" cy="16" r="15.5" fill="%23fff" stroke="%2374767e" class="circle-wrapper" style="&%2310; stroke: %2374767e;&%2310;"/><path d="M16 11.583a2.083 2.083 0 1 0 0-4.166 2.083 2.083 0 0 0 0 4.166ZM23.917 12.417H8.083a.834.834 0 0 0 0 1.666H13.5v11.459a1.041 1.041 0 1 0 2.083 0V19.5h.834v6.042a1.041 1.041 0 1 0 2.083 0V14.083h5.417a.833.833 0 0 0 0-1.666Z"/></svg>');} 664</style></div>
665<script> 666 window.addEventListener('load', function () { 667 window.magentoStorefrontEvents = magentoStorefrontEvents; 668 magentoStorefrontEvents.context.setStorefrontInstance( 669 {"storeUrl":"https:\/\/www.flooringinc.com\/","websiteId":1,"websiteCode":"base","storeId":1,"storeCode":"main_website_store","storeViewId":1,"storeViewCode":"default","websiteName":"Flooring Inc.","storeName":"Main Website Store","storeViewName":"Default Store View","baseCurrencyCode":"USD","storeViewCurrencyCode":"USD","catalogExtensionVersion":"103.4.28","environmentId":"a90eb89f-1f93-44b0-81d9-2a9af649b47f","environment":"Production","storefrontTemplate":"Hyva"} ); 670 magentoStorefrontEvents.context.setMagentoExtension({ 671 magentoExtensionVersion: "8.0.1", 672 }); 673 magentoStorefrontEvents.context.setDataServicesExtension({ 674 version: "8.0.1", 675 }); 676 magentoStorefrontEvents.context.setPage({ 677 pageType: "Default" 678 }); 679 magentoStorefrontEvents.context.setContext("pageExtended", { 680 action: "page-view" 681 }); 682 683 684 magentoStorefrontEvents.publish.pageView(); 685 }); 686</script>
686 687</head> 688<body class="pl-thm-dcw pl-thm-dcw-hyvadesktop prgdpr-dcw prgdpr-dcw-hyvadesktop mst-nav__theme-hyva-reset mst-nav__theme-hyva-default mst-nav__theme-dcw-hyvadesktop customer-account-login page-layout-1column" id="html-body"> 689<!-- Google Tag Manager (noscript) -->
vendor: 69 bytes, lines 689-690
689 690<noscript><iframe src="https://www.googletagmanager.com/ns.html?id=
690GTM-5XR7MB7
vendor: 85 bytes, lines 690-691
690" 691height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
692<!-- End Google Tag Manager (noscript) --> 693
694<script nonce="bDhraW5vaDFjczNyejIwenoxdG1tYm50dzNqb2RqOGY="> 695var prCookieConsentApi = { 696 CUSTOMER_CONSENT: 'pr-cookie-consent', 697 SYSTEM_COOKIES: [ 698 'PHPSESSID', 699 this.CUSTOMER_CONSENT, 700 'user_allowed_save_cookie', 701 ], 702 config: {}, 703 whitelist: {}, 704 isConfigured: false, 705 /** 706 * Contains callbacks that run after all configuration come 707 * 708 * @type {function[]} 709 */ 710 configuredCallbacks: [], 711 initCookieBlocking: function () { 712 var cookieDesc = Object.getOwnPropertyDescriptor(Document.prototype, 'cookie') 713 || Object.getOwnPropertyDescriptor(HTMLDocument.prototype, 'cookie'); 714 if (cookieDesc && cookieDesc.configurable) { 715 var api = this; 716 Object.defineProperty(document, 'cookie', { 717 get: function () { 718 return cookieDesc.get.call(document); 719 }, 720 set: function (cookie) { 721 let cookieName = cookie.substring(0, cookie.indexOf('=')).trim(); 722 document.dispatchEvent(new CustomEvent('pr-cookie-consent-api:cookie-blocking:validation', { 723 detail: {cookieName: cookieName, isAllowed: api.isAllowed(cookieName), cookie: cookie} 724 })); 725 726 if (! api.isAllowed(cookieName)) { 727 api.logger.warn('CookieConsent: blocked cookie "' + cookieName + '"'); 728 return; 729 } 730 cookieDesc.set.call(document, cookie); 731 } 732 }); 733 } 734 }, 735 getCookieValue: function (name) { 736 var values = document.cookie.match('(^|;)\\s*' + name + '\\s*=\\s*([^;]+)'); 737 return values ? decodeURIComponent(values.pop()) : ''; 738 }, 739 configure: function (configJson) { 740 this.logger.init(); 741 this.userScript.init(); 742 try { 743 this.config = JSON.parse(configJson); 744 if (this.config.canManageCookie === null) { 745 console.error('CookieConsent: restriction config is invalid'); 746 } 747 this.isConfigured = true; 748 749 this.configuredCallbacks.forEach(function (callback) { 750 callback(); 751 }.bind(this)); 752 753 this.clearRejectedCookie(); 754 } catch (e) { 755 console.error('CookieConsent: error has happened during parse JSON'); 756 return false; 757 } 758 759 document.dispatchEvent(new Event('pr-cookie-consent-api:configured')); 760 }, 761 /** 762 * @param {function} callback 763 * @returns {prCookieConsentApi} 764 */ 765 addConfiguredCallback: function (callback) { 766 this.configuredCallbacks.push(callback); 767 return this; 768 }, 769 isAllowedCategory: function (categoryKey) { 770 if (! this.config.canManageCookie) { 771 return true; 772 } 773 if (this.isEssentialCategory(categoryKey)) { 774 return true; 775 } 776 if (this.isOptIn()) { 777 if (this.isAllCategoriesAllowed()) { 778 return true; 779 } 780 return this.consent.get().includes(categoryKey); 781 } 782 return this.config.canUseCookieBeforeOptIn; 783 }, 784 getDomain: function (cookieName) { 785 return this.config.cookies[cookieName] ? this.config.cookies[cookieName].domain : null; 786 }, 787 isAllowed: function (cookieName) { 788 if (this.isSystemCookie(cookieName)) { 789 return true; 790 } 791 if (! this.config.canManageCookie) { 792 return true; 793 } 794 if (this.whitelist[cookieName]) { 795 return true; 796 } 797 cookieName = this.getTrueCookieName(cookieName); 798 if (! this.isOptIn()) { 799 if (this.config.canUseCookieBeforeOptIn) { 800 return true; 801 } 802 if (this.isKnownCookie(cookieName)) { 803 return this.isInEssentialCategory(cookieName); 804 } 805 return false; 806 } 807 if (! this.isKnownCookie(cookieName)) { 808 return ! this.config.canBlockUnknownCookie; 809 } 810 return this.isInAllowedCategory(cookieName); 811 }, 812 isAllCategoriesAllowed: function () { 813 if (null === this.cache.get('allowAllCategories')) { 814 var customerConsent = this.consent.get(); 815 if (customerConsent && customerConsent.includes('all') ) { 816 this.cache.set('allowAllCategories', true); 817 } else { 818 var allowedWebsites = this.websiteRestriction.getAllowed(); 819 this.cache.set('allowAllCategories', allowedWebsites[this.config.mage.website] === 1); 820 } 821 } 822 return this.cache.get('allowAllCategories'); 823 }, 824 isEssentialCategory: function (categoryKey) { 825 return this.config.essentialCategoryKeys.includes(categoryKey); 826 }, 827 isInEssentialCategory: function (cookieName) { 828 return this.isEssentialCategory(this.getCookieCategory(cookieName)); 829 }, 830 isInAllowedCategory: function (cookieName) { 831 return this.isAllowedCategory(this.getCookieCategory(cookieName)); 832 }, 833 getCookieCategory: function (cookieName) {
834 return this.config.cookieToCategoryMapping[cookieName]; 835 }, 836 isOptIn: function () { 837 var allowedWithDefaultCookie = this.websiteRestriction.getAllowed()[this.config.mage.website] === 1; 838 return Boolean(this.consent.get()) || allowedWithDefaultCookie; 839 }, 840 isSystemCookie: function (cookieName) { 841 return this.SYSTEM_COOKIES.includes(cookieName); 842 }, 843 isKnownCookie: function (cookieName) { 844 return this.config.cookieToCategoryMapping.hasOwnProperty(cookieName); 845 }, 846 getTrueCookieName: function (cookieName) { 847 var keys = Object.keys(this.config.dynamicNamesPatterns), key; 848 for (var i = 0, length = keys.length; i < length; i++) { 849 key = keys[i]; 850 if (new RegExp(this.config.dynamicNamesPatterns[key]).test(cookieName)) { 851 return key; 852 } 853 } 854 return cookieName; 855 }, 856 clearRejectedCookie: function () { 857 let cookies = prCookieService.get(); 858 Object.keys(cookies).forEach(function(cookieName) { 859 if (this.isAllowed(cookieName)) { 860 return; 861 } 862 863 var encodedCookieName = cookieName = encodeURIComponent(String(cookieName)) 864 .replace(/%(23|24|26|2B|5E|60|7C)/g, decodeURIComponent) 865 .replace(/[\(\)]/g, escape); 866 867 this.whitelist[encodedCookieName] = true; 868 if (this.getDomain(cookieName)) { 869 prCookieService.remove(cookieName, {domain: this.getDomain(cookieName)}); 870 } else { 871 prCookieService.remove(cookieName); 872 if (this.config.cookie.parentDomain) { 873 prCookieService.remove(cookieName, {domain: this.config.cookie.parentDomain}); 874 } 875 } 876 this.logger.warn('CookieConsent: remove cookie "' + cookieName + '"'); 877 if (typeof prCookieService.get(cookieName) !== 'undefined') { 878 this.logger.error('CookieConsent: fail to remove cookie "' + cookieName + '"'); 879 } 880 this.whitelist[encodedCookieName] = false; 881 }.bind(this)); 882 } 883}; 884 885prCookieConsentApi.userScript = { 886 /**
887 * List of callbacks and categories they depend on. 888 */ 889 pendingScripts: [], 890 /** 891 * Run script after model is configured or after user provided consent. 892 */ 893 init: function () { 894 prCookieConsentApi.addConfiguredCallback(this.executePendingScripts.bind(this)); 895 prCookieConsentApi.consent.addCallback(this.executePendingScripts.bind(this)); 896 }, 897 /** 898 * Run or delay script. 899 * 900 * @param {function} callback 901 * @param {string} categoryKey 902 */ 903 execute: function (callback, categoryKey) { 904 if (prCookieConsentApi.isConfigured && prCookieConsentApi.isAllowedCategory(categoryKey)) { 905 callback(); 906 return; 907 } 908 909 this.pendingScripts.push({callback: callback, categoryKey: categoryKey, executed: false}); 910 }, 911 /** 912 * Run pending scripts. 913 */ 914 executePendingScripts: function () { 915 this.pendingScripts.forEach(function (script) { 916 if (false === script.executed && prCookieConsentApi.isAllowedCategory(script.categoryKey)) { 917 script.callback(); 918 script.executed = true; 919 } 920 }.bind(this)); 921 }, 922}; 923 924prCookieConsentApi.websiteRestriction = { 925 getAllowed: function () { 926 var allowedWebsites = prCookieConsentApi.getCookieValue(prCookieConsentApi.config.mage.cookieName); 927 return allowedWebsites ? JSON.parse(allowedWebsites) : {}; 928 }, 929 allowCurrent: function () { 930 return this.set(prCookieConsentApi.config.mage.website, true); 931 }, 932 disallowCurrent: function () { 933 return this.set(prCookieConsentApi.config.mage.website, false); 934 }, 935 /** 936 * @param {number} website 937 * @param {boolean} flag 938 * @return {CookieRestriction.websiteRestriction} 939 */ 940 set: function (website, flag) { 941 var allowedWebsites = this.getAllowed(); 942 943 if (flag) { 944 allowedWebsites[website] = 1; 945 } else { 946 delete allowedWebsites[website]; 947 } 948 949 prCookieService.set(prCookieConsentApi.config.mage.cookieName, allowedWebsites, { 950 path: prCookieConsentApi.config.cookie.path, 951 expires: prCookieConsentApi.config.mage.lifetime ? Math.ceil(prCookieConsentApi.config.mage.lifetime / 86400) : 0 952 }); 953 954 return this; 955 } 956}; 957 958prCookieConsentApi.cache = { 959 cacheData: {allowAllCategories: null}, 960 get: function (key) { 961 return this.cacheData[key]; 962 }, 963 set: function (key, value) { 964 this.cacheData[key] = value; 965 }, 966 reset: function () { 967 this.cacheData = {allowAllCategories: null}; 968 } 969}; 970 971prCookieConsentApi.logger = { 972 level: 0, /* disabled */ 973 init: function () { 974 if (window.location.hash === '#pr-enable-cookie-log') { 975 this.level = 1; /* only warnings and errors */ 976 } 977 if (window.location.hash === '#pr-enable-cookie-log-all') { 978 this.level = 2; /* all logs */ 979 } 980 }, 981 log: function () { 982 this.level > 1 && console.log.apply(console, arguments); 983 }, 984 warn: function () { 985 this.level > 0 && console.warn.apply(console, arguments); 986 }, 987 error: function () { 988 this.level > 0 && console.error.apply(console, arguments); 989 } 990}; 991 992prCookieConsentApi.consent = { 993 /** 994 * Contains callbacks that run after user consent. 995 * 996 * @type {function[]} 997 */ 998 callbacks: [], 999 allowAllCategories: function () { 1000 prCookieConsentApi.cache.reset(); 1001 prCookieConsentApi.consent.set(['all']); 1002 return this; 1003 }, 1004 declineAll: function () { 1005 prCookieConsentApi.cache.reset(); 1006 prCookieConsentApi.consent.set([]); 1007 return this; 1008 }, 1009 set: function (allowedCategories) { 1010 prCookieService.set(prCookieConsentApi.CUSTOMER_CONSENT, JSON.stringify(allowedCategories), { 1011 expires: prCookieConsentApi.config.consent.expiry, 1012 path: prCookieConsentApi.config.cookie.path, 1013 domain: prCookieConsentApi.config.cookie.domain 1014 }); 1015 1016 if (allowedCategories.includes('all')) {
1017 prCookieConsentApi.websiteRestriction.allowCurrent(); 1018 } else { 1019 prCookieConsentApi.websiteRestriction.disallowCurrent(); 1020 } 1021 prCookieConsentApi.cache.reset(); 1022 1023 var isAccepting = allowedCategories.length; 1024 1025 this.callbacks.forEach(function (callback) { 1026 callback(allowedCategories) 1027 }); 1028 1029 fetch(prCookieConsentApi.config.consent.logUrl, { 1030 method: 'POST', 1031 headers: { 1032 'Content-Type': 'application/json', 1033 'X-Requested-With': 'XMLHttpRequest' 1034 }, 1035 body: JSON.stringify({acceptedKeys: allowedCategories}) 1036 }) 1037 .then(this.pageReloadAfterAction.bind(this, isAccepting)); 1038 }, 1039 /** 1040 * Reload page by configuration and action 1041 * 1042 * @param isAccepting 1043 */ 1044 pageReloadAfterAction: function (isAccepting) { 1045 if (isAccepting && prCookieConsentApi.config.consent.reloadAfterAccept) { 1046 window.location.reload(); 1047 } 1048 1049 if (! isAccepting && prCookieConsentApi.config.consent.reloadAfterDecline) { 1050 window.location.reload(); 1051 } 1052 }, 1053 get: function () { 1054 var consent = prCookieConsentApi.getCookieValue(prCookieConsentApi.CUSTOMER_CONSENT); 1055 return consent ? JSON.parse(consent) : false; 1056 }, 1057 addCallback: function (callback) { 1058 this.callbacks.push(callback); 1059 return this; 1060 }, 1061}; 1062 1063prCookieConsentApi.configure('\u007B\u0022canManageCookie\u0022\u003Afalse,\u0022canUseCookieBeforeOptIn\u0022\u003Afalse,\u0022canBlockUnknownCookie\u0022\u003Afalse,\u0022consent\u0022\u003A\u007B\u0022isLoggedIn\u0022\u003Atrue,\u0022logUrl\u0022\u003A\u0022https\u003A\u005C\u002F\u005C\u002Fwww.flooringinc.com\u005C\u002Fpr\u002Dcookie\u002Dconsent\u005C\u002Fconsent_customer\u005C\u002Fupdate\u005C\u002F\u0022,\u0022reloadAfterAccept\u0022\u003Atrue,\u0022reloadAfterDecline\u0022\u003Afalse,\u0022expiry\u0022\u003A365\u007D,\u0022cookie\u0022\u003A\u007B\u0022path\u0022\u003A\u0022\u005C\u002F\u0022,\u0022domain\u0022\u003A\u0022www.flooringinc.com\u0022,\u0022parentDomain\u0022\u003A\u0022.flooringinc.com\u0022\u007D,\u0022cookies\u0022\u003A\u007B\u0022pr\u002Dcookie\u002Dnotice\u002Dstatus\u0022\u003A\u007B\u0022domain\u0022\u003A\u0022\u0022\u007D,\u0022user_allowed_save_cookie\u0022\u003A\u007B\u0022domain\u0022\u003A\u0022\u0022\u007D,\u0022guest\u002Dview\u0022\u003A\u007B\u0022domain\u0022\u003A\u0022\u0022\u007D,\u0022login_redirect\u0022\u003A\u007B\u0022domain\u0022\u003A\u0022\u0022\u007D,\u0022mage\u002Dmessages\u0022\u003A\u007B\u0022domain\u0022\u003A\u0022\u0022\u007D,\u0022section_data_ids\u0022\u003A\u007B\u0022domain\u0022\u003A\u0022\u0022\u007D,\u0022store\u0022\u003A\u007B\u0022domain\u0022\u003A\u0022\u0022\u007D,\u0022amz_auth_err\u0022\u003A\u007B\u0022domain\u0022\u003A\u0022\u0022\u007D,\u0022amz_auth_logout\u0022\u003A\u007B\u0022domain\u0022\u003A\u0022\u0022\u007D,\u0022mage\u002Dcache\u002Dsessid\u0022\u003A\u007B\u0022domain\u0022\u003A\u0022\u0022\u007D,\u0022mage\u002Dcache\u002Dstorage\u0022\u003A\u007B\u0022domain\u0022\u003A\u0022\u0022\u007D,\u0022stf\u0022\u003A\u007B\u0022domain\u0022\u003A\u0022\u0022\u007D,\u0022recently_viewed_product\u0022\u003A\u007B\u0022domain\u0022\u003A\u0022\u0022\u007D,\u0022recently_viewed_product_previous\u0022\u003A\u007B\u0022domain\u0022\u003A\u0022\u0022\u007D,\u0022mage\u002Dtranslation\u002Dstorage\u0022\u003A\u007B\u0022domain\u0022\u003A\u0022\u0022\u007D,\u0022mage\u002Dtranslation\u002Dfile\u002Dversion\u0022\u003A\u007B\u0022domain\u0022\u003A\u0022\u0022\u007D,\u0022product_data_storage\u0022\u003A\u007B\u0022domain\u0022\u003A\u0022\u0022\u007D,\u0022recently_compared_product\u0022\u003A\u007B\u0022domain\u0022\u003A\u0022\u0022\u007D,\u0022recently_compared_product_previous\u0022\u003A\u007B\u0022domain\u0022\u003A\u0022\u0022\u007D,\u0022mage\u002Dcache\u002Dstorage\u002Dsection\u002Dinvalidation\u0022\u003A\u007B\u0022domain\u0022\u003A\u0022\u0022\u007D,\u0022_ga\u0022\u003A\u007B\u0022domain\u0022\u003A\u0022\u0022\u007D,\u0022_ga_\u002A\u0022\u003A\u007B\u0022domain\u0022\u003A\u0022\u0022\u007D,\u0022_gid\u0022\u003A\u007B\u0022domain\u0022\u003A\u0022\u0022\u007D,\u0022_gat\u0022\u003A\u007B\u0022domain\u0022\u003A\u0022\u0022\u007D,\u0022_dc_gtm_\u002A\u0022\u003A\u007B\u0022domain\u0022\u003A\u0022\u0022\u007D,\u0022mg_dnt\u0022\u003A\u007B\u0022domain\u0022\u003A\u0022\u0022\u007D,\u0022last_visited_store\u0022\u003A\u007B\u0022domain\u0022\u003A\u0022\u0022\u007D,\u0022pr\u002Dgpc\u002Dnotification\u002Dshown\u0022\u003A\u007B\u0022domain\u0022\u003A\u0022\u0022\u007D,\u0022pr\u002Dgpc\u002Dsignal\u002Dhandled\u0022\u003A\u007B\u0022domain\u0022\u003A\u0022\u0022\u007D,\u0022_clck\u0022\u003A\u007B\u0022domain\u0022\u003A\u0022\u0022\u007D,\u0022_clsk\u0022\u003A\u007B\u0022domain\u0022\u003A\u0022\u0022\u007D,\u0022CLID\u0022\u003A\u007B\u0022domain\u0022\u003A\u0022\u0022\u007D,\u0022MR\u0022\u003A\u007B\u0022domain\u0022\u003A\u0022\u0022\u007D,\u0022MUID\u0022\u003A\u007B\u0022domain\u0022\u003A\u0022\u0022\u007D,\u0022pr\u002Dcookie\u002Dconsent\u0022\u003A\u007B\u0022domain\u0022\u003A\u0022\u0022\u007D,\u0022pr\u002Dcookie\u002Dconsent\u002Did\u0022\u003A\u007B\u0022domain\u0022\u003A\u0022\u0022\u007D,\u0022form_key\u0022\u003A\u007B\u0022domain\u0022\u003A\u0022\u0022\u007D,\u0022X\u002DMagento\u002DVary\u0022\u003A\u007B\u0022domain\u0022\u003A\u0022\u0022\u007D,\u0022private_content_version\u0022\u003A\u007B\u0022domain\u0022\u003A\u0022\u0022\u007D,\u0022persistent_shopping_cart\u0022\u003A\u007B\u0022domain\u0022\u003A\u0022\u0022\u007D,\u0022add_to_cart\u0022\u003A\u007B\u0022domain\u0022\u003A\u0022\u0022\u007D,\u0022mage\u002Dbanners\u002Dcache\u002Dstorage\u0022\u003A\u007B\u0022domain\u0022\u003A\u0022\u0022\u007D,\u0022remove_from_cart\u0022\u003A\u007B\u0022domain\u0022\u003A\u0022\u0022\u007D\u007D,\u0022mage\u0022\u003A\u007B\u0022website\u0022\u003A1,\u0022cookieName\u0022\u003A\u0022user_allowed_save_cookie\u0022,\u0022lifetime\u0022\u003A31536000\u007D,\u0022cookieToCategoryMapping\u0022\u003A\u007B\u0022pr\u002Dcookie\u002Dnotice\u002Dstatus\u0022\u003A\u0022necessary\u0022,\u0022user_allowed_save_cookie\u0022\u003A\u0022necessary\u0022,\u0022guest\u002Dview\u0022\u003A\u0022necessary\u0022,\u0022login_redirect\u0022\u003A\u0022necessary\u0022,\u0022mage\u002Dmessages\u0022\u003A\u0022necessary\u0022,\u0022section_data_ids\u0022\u003A\u0022necessary\u0022,\u0022store\u0022\u003A\u0022necessary\u0022,\u0022amz_auth_err\u0022\u003A\u0022necessary\u0022,\u0022amz_auth_logout\u0022\u003A\u0022necessary\u0022,\u0022mage\u002Dcache\u002Dsessid\u0022\u003A\u0022necessary\u0022,\u0022mage\u002Dcache\u002Dstorage\u0022\u003A\u0022necessary\u0022,\u0022stf\u0022\u003A\u0022necessary\u0022,\u0022recently_viewed_product\u
10630022\u003A\u0022necessary\u0022,\u0022recently_viewed_product_previous\u0022\u003A\u0022necessary\u0022,\u0022mage\u002Dtranslation\u002Dstorage\u0022\u003A\u0022necessary\u0022,\u0022mage\u002Dtranslation\u002Dfile\u002Dversion\u0022\u003A\u0022necessary\u0022,\u0022product_data_storage\u0022\u003A\u0022necessary\u0022,\u0022recently_compared_product\u0022\u003A\u0022necessary\u0022,\u0022recently_compared_product_previous\u0022\u003A\u0022necessary\u0022,\u0022mage\u002Dcache\u002Dstorage\u002Dsection\u002Dinvalidation\u0022\u003A\u0022necessary\u0022,\u0022_ga\u0022\u003A\u0022statistics\u0022,\u0022_ga_\u002A\u0022\u003A\u0022statistics\u0022,\u0022_gid\u0022\u003A\u0022statistics\u0022,\u0022_gat\u0022\u003A\u0022statistics\u0022,\u0022_dc_gtm_\u002A\u0022\u003A\u0022statistics\u0022,\u0022mg_dnt\u0022\u003A\u0022necessary\u0022,\u0022last_visited_store\u0022\u003A\u0022necessary\u0022,\u0022pr\u002Dgpc\u002Dnotification\u002Dshown\u0022\u003A\u0022necessary\u0022,\u0022pr\u002Dgpc\u002Dsignal\u002Dhandled\u0022\u003A\u0022necessary\u0022,\u0022_clck\u0022\u003A\u0022statistics\u0022,\u0022_clsk\u0022\u003A\u0022statistics\u0022,\u0022CLID\u0022\u003A\u0022statistics\u0022,\u0022MR\u0022\u003A\u0022statistics\u0022,\u0022MUID\u0022\u003A\u0022statistics\u0022,\u0022pr\u002Dcookie\u002Dconsent\u0022\u003A\u0022necessary\u0022,\u0022pr\u002Dcookie\u002Dconsent\u002Did\u0022\u003A\u0022necessary\u0022,\u0022form_key\u0022\u003A\u0022necessary\u0022,\u0022X\u002DMagento\u002DVary\u0022\u003A\u0022necessary\u0022,\u0022private_content_version\u0022\u003A\u0022necessary\u0022,\u0022persistent_shopping_cart\u0022\u003A\u0022necessary\u0022,\u0022add_to_cart\u0022\u003A\u0022statistics\u0022,\u0022mage\u002Dbanners\u002Dcache\u002Dstorage\u0022\u003A\u0022necessary\u0022,\u0022remove_from_cart\u0022\u003A\u0022statistics\u0022\u007D,\u0022essentialCategoryKeys\u0022\u003A\u005B\u0022necessary\u0022\u005D,\u0022dynamicNamesPatterns\u0022\u003A\u007B\u0022_dc_gtm_\u002A\u0022\u003A\u0022_dc_gtm_.\u002A\u0022,\u0022_ga_\u002A\u0022\u003A\u0022_ga_.\u002A\u0022\u007D\u007D'); 1064prCookieConsentApi.initCookieBlocking(); 1065 1066if (typeof define === 'function') { 1067 define('prCookieService', function () {return prCookieService}); 1068 define('prCookieConsentApi', function () {return prCookieConsentApi;}); 1069} 1070</script>
1070 1071 1072 1073
1073<script type="text/javascript" nonce="bDhraW5vaDFjczNyejIwenoxdG1tYm50dzNqb2RqOGY="> 1074 (() => { 1075 document.addEventListener('pr-cookie-consent-api:cookie-blocking:validation', (event) => { 1076 if ('mg_dnt' !== event.detail.cookieName) { 1077 return; 1078 } 1079 1080 setTimeout(() => { 1081 const categoryKey = 'marketing'; 1082 let cookieValue = (event.detail.cookie.match(/^[^=]+=(.*?)(?:$|;)/) || [])[1]?.trim(); 1083 1084 if (prCookieConsentApi.isAllowedCategory(categoryKey) && cookieValue.length) { 1085 prCookieService.remove('mg_dnt', prCookieConsentApi.config.cookie); 1086 return; 1087 } 1088 1089 if (! prCookieConsentApi.isAllowedCategory(categoryKey) && ! cookieValue.length) { 1090 prCookieService.set('mg_dnt', true, { ...prCookieConsentApi.config.cookie, expires: null }); 1091 } 1092 }, 100); 1093 }); 1094 1095 let handleCookieConsent = () => { 1096 const categoryKey = 'marketing'; 1097 if (prCookieConsentApi.isAllowedCategory(categoryKey)) { 1098 prCookieService.remove('mg_dnt', prCookieConsentApi.config.cookie); 1099 } else { 1100 prCookieService.set('mg_dnt', true, { ...prCookieConsentApi.config.cookie, expires: null }); 1101 } 1102 }; 1103 1104 prCookieConsentApi.consent.addCallback(handleCookieConsent); 1105 handleCookieConsent(); 1106 })(); 1107 </script>
1107 1108 1109
1109<script> 1110 (function () { 1111 'use strict'; 1112 1113 window.amRecaptchaModel = { 1114 formsToProtect: "form\u005Baction\u002A\u003D\u0022faq\u002Findex\u002Fsave\u0022\u005D", 1115 isEnabledOnPayments: "", 1116 checkoutRecaptchaValidateUrl: "https://www.flooringinc.com/amcapthca/checkout/validate/", 1117 invisibleCaptchaCustomForm: "\u002D1", 1118 recaptchaConfig: { 1119 lang: "hl\u003Den" || 'hl=en', 1120 theme: "light", 1121 badge: "bottomright", 1122 sitekey: "6Lc6gcYqAAAAADiXHrgCFqC4Sewhxs-nrHYgN4oo", 1123 size: "normal" 1124 }, 1125 url: 'https://www.google.com/recaptcha/api.js', 1126 isCaptchaScriptLoaded: false, 1127 isInvisible: "normal" === 'invisible', 1128 1129 /** 1130 * Submit event 1131 * 1132 * @param {Object} $event 1133 * @return {void} 1134 */ 1135 execute: function ($event) { 1136 const eventTarget = $event?.target; 1137 if (this.isCaptchaScriptLoaded) { 1138 this.executeCaptcha(eventTarget); 1139 } else { 1140 window.addEventListener('amcaptcha-script-loaded', () => { 1141 this.isCaptchaScriptLoaded = true; 1142 this.executeCaptcha(eventTarget); 1143 this.initAmcaptchaBadges(); 1144 }); 1145 1146 this.loadRecaptchaScript(); 1147 } 1148 }, 1149 1150 /** 1151 * Execute original submit 1152 * 1153 * @param {Object} $event 1154 * @param {HTMLElement} $el 1155 * @return {void} 1156 */ 1157 recaptchaCallback: function ($event, $el) { 1158 this.shouldExecuteCallback($event, $el) && $el.dispatchEvent(new CustomEvent('amrecaptcha-executable-callback')); 1159 }, 1160 1161 /** 1162 * Reset captcha 1163 * 1164 * @param {Object} $event 1165 * @param {HTMLElement} $el 1166 */ 1167 expiredCallback: function($event, $el) { 1168 this.shouldExecuteCallback($event, $el) && grecaptcha.reset($event.detail.widgetId); 1169 }, 1170 1171 /** 1172 * Checks if event is fired on submitted element 1173 * 1174 * @param {Object} $event 1175 * @param {HTMLElement} $el 1176 * @return {boolean} 1177 */ 1178 shouldExecuteCallback: function($event, $el) { 1179 const eventWidgetId = $event.detail.widgetId; 1180 const elementWidgetId = $el.dataset.amCaptchaWidgetId || $el.closest('form')?.dataset.amCaptchaWidgetId; 1181 1182 return eventWidgetId === elementWidgetId; 1183 }, 1184 1185 /** 1186 * Run captcha for widget by id 1187 * 1188 * @param {HTMLElement} eventTarget 1189 * @return {void} 1190 */ 1191 executeCaptcha: function(eventTarget) { 1192 if (!eventTarget.dataset.hasOwnProperty('amCaptchaRendered')) { 1193 this.bindCaptchaGlobalCallbacks(eventTarget); 1194 this.renderCaptcha(eventTarget); 1195 eventTarget.dataset.amCaptchaRendered = ''; 1196 } 1197 1198 const widgetId = this.getWidgetId(eventTarget); 1199 1200 if (!widgetId) { 1201 typeof window.dispatchMessages !== "undefined" && window.dispatchMessages([ 1202 { 1203 type: "error", 1204 text: 'Recaptcha\u0020cannot\u0020properly\u0020validate\u0020form.' 1205 } 1206 ]); 1207 return; 1208 } 1209 1210 window.dispatchEvent(new CustomEvent('amcaptcha-loading-start')); 1211 grecaptcha.reset(widgetId); 1212 1213 if (!this.isInvisible) { 1214 this.stopAmcaptchaLoading(); 1215 return; 1216 } 1217 1218 grecaptcha.execute(widgetId) 1219 .then(() => this.stopAmcaptchaLoading()) 1220 .catch(() => this.stopAmcaptchaLoading()); 1221 }, 1222 1223 /** 1224 * Add recaptcha script to page 1225 * 1226 * @return {void} 1227 */ 1228 loadRecaptchaScript: function () { 1229 const lang = window.amRecaptchaModel.recaptchaConfig.lang; 1230 const url = `${window.amRecaptchaModel.url}?onload=amRecaptchaLoadCallback&render=explicit&${lang}`; 1231 const script = document.createElement('script'); 1232 1233 script.type = 'text/javascript'; 1234 script.src = url; 1235 script.async = true; 1236 document.head.appendChild(script); 1237 }, 1238 1239 /** 1240 * Stop loader on page 1241 * 1242 * @return {void} 1243 */ 1244 stopAmcaptchaLoading: function () { 1245 window.dispatchEvent(new CustomEvent('amcaptcha-loading-stop')); 1246 }, 1247 1248 /** 1249 * Add attributes to hide captcha badge 1250 * 1251 * @return {void} 1252 */ 1253 initAmcaptchaBadges: function () { 1254 if (!this.isInvisible) { 1255 return; 1256 } 1257 1258 document.querySelectorAll('.grecaptcha-badge')?.forEach(captchaBadge => { 1259 captchaBadge?.setAttribute('x-data', '{ visible: true }'); 1260 captchaBadge?.setAttribute('x-on:amcaptcha-loading-start.window', 'visible = true'); 1261 captchaBadge?.setAttribute('x-on:amcaptcha-loading-stop.window', 'visible = false'); 1262 captchaBadge?.setAttribute(':class', '!visible && "invisible"'); 1263 }); 1264 }, 1265 1266 /** 1267 * Get form widgetId 1268 * 1269 * @param {HTMLElement} eventTarget 1270 * @return {string} 1271 */ 1272 getWidgetId: function (eventTarget) { 1273 return eventTarget.dataset.amCaptchaWidgetId 1274 || eventTarget.closest('form')?.dataset.amCaptchaWidgetId; 1275 }, 1276 1277 /** 1278 * Add captcha badge or checkbox to protected form. 1279 * Store widgetId in dataset to pass this info in callbacks 1280 * 1281 * @param {HTMLElement} eventTarget 1282 * @return {void} 1283 */ 1284 renderCaptcha: function (eventTarget) { 1285 const captchaElement = document.createElement('div'); 1286 const formContent = eventTarget.closest('form')?.querySelector('[data-element="form-content"]') 1287 ?? eventTarget.closest('form'); 1288 formContent?.appendChild(captchaElement); 1289 1290 eventTarget.dataset.amCaptchaWidgetId = grecaptcha.render(captchaElement, { 1291 ...window.amRecaptchaModel?.recaptchaConfig, 1292 callback: () => { 1293 window.dispatchEvent(new CustomEvent( 1294 'amrecaptcha-callback', { 1295 detail: this.getCaptchaCallbackDetail(eventTarget) 1296 })); 1297 }, 1298 'expired-callback': () => { 1299 window.dispatchEvent(new CustomEvent( 1300 'amrecaptcha-expired-callback', { 1301 detail: this.getCaptchaCallbackDetail(eventTarget) 1302 })); 1303 } 1304 }); 1305 }, 1306 1307 /** 1308 * Get detail property for callback event 1309 * 1310 * @param {HTMLElement} eventTarget 1311 * @return {object} 1312 */ 1313 getCaptchaCallbackDetail: function (eventTarget) { 1314 return { 1315 widgetId: eventTarget.dataset.amCaptchaWidgetId, 1316 form: eventTarget 1317 } 1318 }, 1319 1320 /** 1321 * Add functions that will be called on the global state 1322 * 1323 * @param {HTMLElement} eventTarget 1324 * @return {void} 1325 */ 1326 bindCaptchaGlobalCallbacks: function (eventTarget) { 1327 eventTarget.setAttribute( 1328 'x-on:amrecaptcha-callback.window', 1329 `amRecaptchaModel.recaptchaCallback($event, $el)` 1330 ); 1331 eventTarget.setAttribute( 1332 'x-on:amrecaptcha-expired-callback.window', 1333 'amRecaptchaModel.expiredCallback($event, $el)' 1334 ); 1335 } 1336 }; 1337 })(window.amRecaptchaModel = window.amRecaptchaModel || {}); 1338 1339 window.amRecaptchaLoadCallback = function () { 1340 window.dispatchEvent(new CustomEvent('amcaptcha-script-loaded')); 1341 } 1342 </script>
1342 1343 1344 1345 <!--suppress HtmlUnknownTarget --> 1346 <!-- BV | Magento Extension 9.1.7 --> 1347
1347<script> 1348 window.addEventListener('init-external-scripts', () => { 1349 const bvScript = document.createElement('script'); 1350 bvScript.src = '//apps.bazaarvoice.com/deployments/incstores/main_site/production/en_US/bv.js'; 1351 bvScript.type = 'text/javascript'; 1352 bvScript.async = true; 1353 document.head.append(bvScript); 1354 }, {once: true, passive: true}); 1355 </script>
vendor: 1 bytes, line 1355
1355
1356<script> 1357 function initSocialLoginPost() { 1358 return { 1359 submitForm(form) { 1360 event.preventDefault(); 1361 var loginRefererElement = document.getElementById("sociallogin-login-referer"); 1362 var value = loginRefererElement.value; 1363 fetch(form.action, { 1364 headers: { 1365 contentType: "application/json;charset=utf-8", 1366 }, 1367 body: new URLSearchParams({ 1368 form_key: hyva.getFormKey(), 1369 'refress-redirect-url':value 1370 }), 1371 method: "POST", 1372 mode: "cors", 1373 credentials: "include", 1374 }).then(response => { 1375 if (response.redirected) { 1376 window.location.href = response.url; 1377 } else { 1378 window.dispatchMessages("warning", "Post request failed", 5000); 1379 } 1380 }) 1381 } 1382 } 1383 } 1384</script>
1384 1385<form style="display:none;" class="form" x-data="initSocialLoginPost()" @submit="submitForm($el)" 1386 action="https://www.flooringinc.com/sociallogin/account/loginPost/" 1387 method="post" 1388 id="sociallogin-login-form" 1389> 1390 <input id="sociallogin-login-referer" name="refress-redirect-url" type="hidden" value="" /> 1391 <input id="sociallogin-login-submit" type="submit" value="sociallogin" style="font-size:0"/> 1392</form> 1393 1394<style> 1395 .pr-cookie-setting-bar-overlay, 1396 .pr-cookie-setting-bar-container { 1397 z-index: 999999999999999; 1398 } 1399</style> 1400
1401<script> 1402 'use strict'; 1403 var prCookieSettingBar = { 1404 config: {"categories":[{"key":"necessary","is_essential":true,"is_pre_checked":false,"name":"Strictly necessary cookies","description":"These cookies are essential for you to browse our store and use its features, such as accessing secure areas of the website. Cookies that allow holding your cart items, cookies that keep you logged-in and cookies that save your customized preferences are an example of strictly necessary cookies. These cookies are essential to a website's functionality and cannot be disabled by users.","sort_order":0,"details":[{"name":"First party","is_third_party":false,"cookies":[{"name":"pr-cookie-notice-status","category_key":"necessary","type":"first","typeLabel":"1st Party","domain":"","domainLabel":"www.flooringinc.com","duration":0,"durationLabel":"Session","description":"Stores close status of cookie notice."},{"name":"user_allowed_save_cookie","category_key":"necessary","type":"first","typeLabel":"1st Party","domain":"","domainLabel":"www.flooringinc.com","duration":31536000,"durationLabel":"365 days","description":"Stores built-in cookie consent per website."},{"name":"guest-view","category_key":"necessary","type":"first","typeLabel":"1st Party","domain":"","domainLabel":"www.flooringinc.com","duration":0,"durationLabel":"Session","description":"Stores the Order ID that guest shoppers use to retrieve their order status. Guest orders view. Used in \u201cOrders and Returns\u201d widgets."},{"name":"login_redirect","category_key":"necessary","type":"first","typeLabel":"1st Party","domain":"","domainLabel":"www.flooringinc.com","duration":0,"durationLabel":"Session","description":"Preserves the destination page the customer was loading before being directed to log in."},{"name":"mage-messages","category_key":"necessary","type":"first","typeLabel":"1st Party","domain":"","domainLabel":"www.flooringinc.com","duration":31536000,"durationLabel":"365 days","description":"Tracks error messages and other notifications that are shown to the user, such as the cookie consent message, and various error messages. The message is deleted from the cookie after it is shown to the shopper."},{"name":"section_data_ids","category_key":"necessary","type":"first","typeLabel":"1st Party","domain":"","domainLabel":"www.flooringinc.com","duration":0,"durationLabel":"Session","description":"Stores customer-specific information related to shopper-initiated actions such as display wish list, checkout information, etc."},{"name":"store","category_key":"necessary","type":"first","typeLabel":"1st Party","domain":"","domainLabel":"www.flooringinc.com","duration":31536000,"durationLabel":"365 days","description":"Tracks the specific store view \/ locale selected by the shopper."},{"name":"amz_auth_err","category_key":"necessary","type":"first","typeLabel":"1st Party","domain":"","domainLabel":"www.flooringinc.com","duration":31536000,"durationLabel":"365 days","description":"Used if Enable Login with Amazon is enabled. Value 1 indicates an authorization error."},{"name":"amz_auth_logout","category_key":"necessary","type":"first","typeLabel":"1st Party","domain":"","domainLabel":"www.flooringinc.com","duration":86400,"durationLabel":"1 day","description":"Used if Enable Login with Amazon is enabled. Value 1 indicates that the user should be logged out."},{"name":"mage-cache-sessid","category_key":"necessary","type":"first","typeLabel":"1st Party","domain":"","domainLabel":"www.flooringinc.com","duration":0,"durationLabel":"Session","description":"The value of this cookie triggers the cleanup of local cache storage. When the cookie is removed by the backend application, the Admin cleans up local storage, and sets the cookie value to true."},{"name":"mage-cache-storage","category_key":"necessary","type":"first","typeLabel":"1st Party","domain":"","domainLabel":"www.flooringinc.com","duration":0,"durationLabel":"Session","description":"Local storage of visitor-specific content that enables ecommerce functions."},{"name":"stf","category_key":"necessary","type":"first","typeLabel":"1st Party","domain":"","domainLabel":"www.flooringinc.com","duration":0,"durationLabel":"Session","description":"Records the time messages are sent by the SendFriend (Email a Friend) module."},{"name":"recently_viewed_product","category_key":"necessary","type":"first","typeLabel":"1st Party","domain":"","domainLabel":"www.flooringinc.com","duration":86400,"durationLabel":"1 day","description":"Stores product IDs of recently viewed products for easy navigation."},{"name":"recently_viewed_product_previous","category_key":"necessary","type":"first","typeLabel":"1st Party","domain":"","domainLabel":"www.flooringinc.com","duration":86400,"durationLabel":"1 day","description":"Stores product IDs of recently previously viewed products for easy navigation."},{"name":"mage-translation-storage","category_key":"necessary","type":"first","typeLabel":"1st Party","domain":"","domainLabel":"www.flooringinc.com","duration":86400,"durationLabel":"1 day","description":"Stores translated content when requested by the shopper. Used when Translation Strategy is configured as \"Dictionary (Translation on Storefront side)\"."},{"name":"mage-translation-file-version","category_key":"necessary","type":"first","typeLabel":"1st Party","domain":"","domainLabel":"www.flooringinc.com","duration":86400,"durationLabel":"1 day","description":"Tracks the version of translations in local storage. Used when Translation Strategy is configured as Dictionary (Translation on Storefront side)."},{"name":"product_data_storage","category_key":"necessary","type":"first","typeLabel":"1st Party","domain":"","domainLabel":"www.flooringinc.com","duration":86400,"durationLabel":"1 day","description":"Stores configuration for product data related to Recently Viewed \/ Compared Products."},{"name":"recently_compared_product","category_key":"necessary","type":"first","typeLabel":"1st Party","domain":"","domainLabel":"www.flooringinc.com","duration":86400,"durationLabel":"1 day","description":"Stores product IDs of recently compared products."},{"name":"recently_compared_product_previous","category_key":"necessary","type":"first","typeLabel":"1st Party","domain":"","domainLabel":"www.flooringinc.com","duration":86400,"durationLabel":"1 day","description":"Stores product IDs of previously compared products for easy navigation."},{"name":"mage-cache-storage-section-invalidation","category_key":"necessary","type":"first","typeLabel":"1st Party","domain":"","domainLabel":"www.flooringinc.com","duration":86400,"durationLabel":"1 day","description":"Forces local storage of specific content sections that should be invalidated."},{"name":"mg_dnt","category_key":"necessary","type":"first","typeLabel":"1st Party","domain":"","domainLabel":"www.flooringinc.com","duration":0,"durationLabel":"Session","description":"Used to restrict Adobe Commerce data collection functionality if the user has opted out of tracking."},{"name":"last_visited_store","category_key":"necessary","type":"first","typeLabel":"1st Party","domain":"","domainLabel":"www.flooringinc.com","duration":0,"durationLabel":"Session","description":"last_visited_store"},{"name":"pr-gpc-notification-shown","category_key":"necessary","type":"first","typeLabel":"1st Party","domain":"","domainLabel":"www.flooringinc.com","duration":0,"durationLabel":"Session","description":"Stores whether the GPC opt-out notification was shown to and closed by the user."},{"name":"pr-gpc-signal-handled","category_key":"necessary","type":"first","typeLabel":"1st Party","domain":"","domainLabel":"www.flooringinc.com","duration":0,"durationLabel":"Session","description":"Stores whether the Global Privacy Control (GPC) signal has been detected on the front end and the associated handling logic has been executed for the current user."},{"name":"pr-cookie-consent","category_key":"necessary","type":"first","typeLabel":"1st Party","domain":"","domainLabel":"www.flooringinc.com","duration":365,"durationLabel":"less than an hour","description":"Keeps your cookie consent."},{"name":"pr-cookie-consent-id","category_key":"necessary","type":"first","typeLabel":"1st Party","domain":"","domainLabel":"www.flooringinc.com","duration":365,"durationLabel":"less than an hour","description":"Keeps your cookie consent id."},{"name":"form_key","category_key":"necessary","type":"first","typeLabel":"1st Party","domain":"","domainLabel":"www.flooringinc.com","duration":3600,"durationLabel":"1 hour","description":"A security measure that appends a random string to all form submissions to protect the data from Cross-Site Request Forgery (CSRF)."},{"name":"X-Magento-Vary","category_key":"necessary","type":"first","typeLabel":"1st Party","domain":"","domainLabel":"www.flooringinc.com","duration":3600,"durationLabel":"1 hour","description":"Configuration setting that improves performance when using Varnish static content caching."},{"name":"private_content_version","category_key":"necessary","type":"first","typeLabel":"1st Party","domain":"","domainLabel":"www.flooringinc.com","duration":31536000,"durationLabel":"365 days","description":"Appends a random, unique number and time to pages with customer content to prevent them from being cached on the server."},{"name":"persistent_shopping_cart","category_key":"necessary","type":"first","typeLabel":"1st Party","domain":"","domainLabel":"www.flooringinc.com","duration":31536000,"durationLabel":"365 days","description":"Stores the key (ID) of persistent cart to make it possible to restore the cart for an anonymous shopper."},{"name":"mage-banners-cache-storage","category_key":"necessary","type":"first","typeLabel":"1st Party","domain":"","domainLabel":"www.flooringinc.com","duration":3600,"durationLabel":"1 hour","description":"Stores banner content locally to improve performance."}]}],"show_details":false},{"key":"preferences","is_essential":false,"is_pre_checked":false,"name":"Preferences cookies","description":"Preferences cookies are also known as \u201cfunctionality cookies\u201d. These cookies allow a website to remember choices you have made in the past, like what language you prefer, your favourite search f
1404ilters, or what your user name and password are so you can automatically log in.","sort_order":0,"details":[],"show_details":false},{"key":"statistics","is_essential":false,"is_pre_checked":false,"name":"Statistics cookies","description":"Statistics cookies are also known as \u201cperformance cookies\u201d. These cookies collect information about how you use a website, like which pages you visited and which links you clicked on. None of this information can be used to identify you. It is all aggregated and, therefore, anonymized. Their sole purpose is to improve website functions. This includes cookies from third-party analytics services, such as visitor analytics, heatmaps and social media analytics.","sort_order":0,"details":[{"name":"First party","is_third_party":false,"cookies":[{"name":"_ga","category_key":"statistics","type":"first","typeLabel":"1st Party","domain":"","domainLabel":"www.flooringinc.com","duration":63072000,"durationLabel":"730 days","description":"Used to distinguish users."},{"name":"_ga_*","category_key":"statistics","type":"first","typeLabel":"1st Party","domain":"","domainLabel":"www.flooringinc.com","duration":63072000,"durationLabel":"730 days","description":"Used to persist session state."},{"name":"_gid","category_key":"statistics","type":"first","typeLabel":"1st Party","domain":"","domainLabel":"www.flooringinc.com","duration":86400,"durationLabel":"1 day","description":"Used to distinguish users."},{"name":"_gat","category_key":"statistics","type":"first","typeLabel":"1st Party","domain":"","domainLabel":"www.flooringinc.com","duration":86400,"durationLabel":"1 day","description":"Used to throttle request rate."},{"name":"_dc_gtm_*","category_key":"statistics","type":"first","typeLabel":"1st Party","domain":"","domainLabel":"www.flooringinc.com","duration":60,"durationLabel":"less than an hour","description":"Used to throttle request rate."},{"name":"_clck","category_key":"statistics","type":"first","typeLabel":"1st Party","domain":"","domainLabel":"www.flooringinc.com","duration":0,"durationLabel":"Session","description":"Persists the Microsoft Clarity User ID and preferences, unique to that site is attributed to the same user ID."},{"name":"_clsk","category_key":"statistics","type":"first","typeLabel":"1st Party","domain":"","domainLabel":"www.flooringinc.com","duration":0,"durationLabel":"Session","description":"Connects multiple page views by a user into a single Microsoft Clarity session recording."},{"name":"add_to_cart","category_key":"statistics","type":"first","typeLabel":"1st Party","domain":"","domainLabel":"www.flooringinc.com","duration":3600,"durationLabel":"1 hour","description":"Used by Google Tag Manager. Captures the product SKU, name, price and quantity removed from the cart, and makes the information available for future integration by third-party scripts."},{"name":"remove_from_cart","category_key":"statistics","type":"first","typeLabel":"1st Party","domain":"","domainLabel":"www.flooringinc.com","duration":3600,"durationLabel":"1 hour","description":"Used by Google Tag Manager. Captures the product SKU, name, price and quantity added to the cart, and makes the information available for future integration by third-party scripts."}]},{"name":"","is_third_party":true,"cookies":[{"name":"CLID","category_key":"statistics","type":"third","typeLabel":"3rd Party","domain":"","domainLabel":"","duration":31536000,"durationLabel":"365 days","description":"Identifies the first time Microsoft Clarity saw the current user on any site using the service"},{"name":"MR","category_key":"statistics","type":"third","typeLabel":"3rd Party","domain":"","domainLabel":"","duration":31536000,"durationLabel":"365 days","description":"Used by Microsoft to track users for analytics purposes."},{"name":"MUID","category_key":"statistics","type":"third","typeLabel":"3rd Party","domain":"","domainLabel":"","duration":31536000,"durationLabel":"365 days","description":"Identifies unique web browsers visiting Microsoft sites. These cookies are used for advertising, site analytics, and other operational purposes."}]}],"show_details":false},{"key":"marketing","is_essential":false,"is_pre_checked":false,"name":"Marketing cookies","description":"The
1404se cookies track your online activity to help advertisers deliver more relevant advertising or to limit how many times you see an ad. These cookies can share that information with other organizations or advertisers. These are persistent cookies and almost always of third-party provenance.","sort_order":0,"details":[],"show_details":false}],"displayStyle":"left_bar","canShowCookieDetails":true,"overview":{"title":"Privacy and Cookies","text":"<p>A cookie is information stored on your computer by a website you visit. Cookies provide a way for the site to recognize you and keep track of your preferences. Ecommerce websites place cookies on visitors' browsers to retain login credentials, identify customers, and provide a customized shopping experience.<\/p>\r\n<p>We respect the privacy of individuals and recognize the importance of personal data entrusted to us by our customers. Any website visitor may choose not to allow some types of cookies. Click on cookie category headings and cookie details to find out more and change our default settings. However, blocking some types of cookies may impact your website experience and prevent you from using all the features on our store.<\/p>"},"consentPreferences":{"header":"Manage Consent Preferences","essential_category_status":"Always Active","cookie_details_link":"Cookie Details"},"design":{"textColor":"inherit","backgroundColor":"inherit"},"acceptButtonConfig":{"label":"Accept All","text_color":null,"text_color_on_hover":null,"background_color":null,"background_color_on_hover":null},"declineButtonConfig":{"enabled":true,"label":"Decline All","text_color":null,"text_color_on_hover":null,"background_color":null,"background_color_on_hover":null},"confirmButtonConfig":{"label":"Confirm My Choices","text_color":null,"text_color_on_hover":null,"background_color":null,"background_color_on_hover":null},"cookieDetailsIsOpen":false}, 1405 show: function () {}, 1406 hide: function () {}, 1407 syncCategoriesDataWithConsent: function () { 1408 this.config.categories = this.config.categories.map(category => { 1409 category.is_allowed = prCookieConsentApi.isAllowedCategory(category.key); 1410 return category; 1411 }); 1412 }, 1413 allowAll: function () { 1414 prCookieConsentApi.consent.allowAllCategories(); 1415 this.syncCategoriesDataWithConsent(); 1416 window.prCookieSettingBar.hide(); 1417 }, 1418 declineAll: function () { 1419 prCookieConsentApi.consent.declineAll(); 1420 this.syncCategoriesDataWithConsent(); 1421 window.prCookieSettingBar.hide(); 1422 }, 1423 confirm: function () { 1424 var allowedCategories = [...prCookieConsentApi.config.essentialCategoryKeys]; 1425 this.config.categories.forEach((category) => { 1426 if (allowedCategories.includes(category.key) || !category.is_allowed) { 1427 return; 1428 } 1429 1430 allowedCategories.push(category.key); 1431 }); 1432 1433 prCookieConsentApi.consent.set(allowedCategories); 1434 this.syncCategoriesDataWithConsent(); 1435 window.prCookieSettingBar.hide(); 1436 } 1437 }; 1438</script>
1438 1439 1440<div x-data="{...hyva.modal(), init() { 1441 window.prCookieSettingBar.show = this.show.bind(this, 'pr-cookie-setting-bar', event); 1442 window.prCookieSettingBar.hide = this.hide.bind(this); 1443 }}" x-init="init()"> 1444 <div x-cloak x-bind="overlay('pr-cookie-setting-bar')" 1445 x-spread="overlay('pr-cookie-setting-bar')" 1446 class="fixed inset-0 bg-black bg-opacity-50 z-50 pr-cookie-setting-bar-overlay"> 1447 <div class="fixed flex justify-center items-center text-left z-40 pr-cookie-setting-bar-container inset-0"> 1448 <div x-ref="pr-cookie-setting-bar" role="dialog" aria-modal="true" 1449 class="inline-block bg-white shadow-xl rounded-lg p-10 max-h-screen overflow-auto overscroll-y-contain pr-cookie-setting-bar rounded-none px-0 py-0 fixed top-0 bottom-0 left-0 w-[400px] max-w-full"> 1450 <div class="pr-cookie-setting-bar-wrap text-[13px] px-4 pt-2 pb-4 relative" 1451 id="pr-cookie-setting-bar" 1452 :class="config.cookieDetailsIsOpen && 'h-screen overflow-hidden'" 1453 x-data="prCookieSettingBar" 1454 x-init="syncCategoriesDataWithConsent()" 1455> 1456 <button @click="hide" class="ml-auto -mt-2 -mr-4 block top-2 right-2 p-2"> 1457 <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" class="w-4 h-4" width="24" height="24" role="img"> 1458 <path fill-rule="evenodd" d="M4.293 4.293a1 1 0 011.414 0L10 8.586l4.293-4.293a1 1 0 111.414 1.414L11.414 10l4.293 4.293a1 1 0 01-1.414 1.414L10 11.414l-4.293 4.293a1 1 0 01-1.414-1.414L8.586 10 4.293 5.707a1 1 0 010-1.414z" clip-rule="evenodd"/> 1459<title>x</title></svg> 1460 </button> 1461 <h3 class="font-bold text-xl leading-normal mb-3" x-text="config.overview.title"></h3> 1462 <div class="pr-cookie-description" x-html="config.overview.text"></div> 1463 <div class="pr-actions-buttons flex flex-wrap items-center justify-center py-4 mb-6 border-container border-b"> 1464 <button type="button" class="action btn btn-primary m-2" x-text="config.acceptButtonConfig.label" @click="allowAll();"></button> 1465 <button type="button" class="action btn btn-secondary m-2" x-text="config.declineButtonConfig.label" @click="declineAll()"></button> 1466 </div> 1467 <h3 class="pr-cookie-manage-title font-bold text-xl mb-0" x-text="config.consentPreferences.header"></h3> 1468 <ul class="message-system-list mt-8"> 1469 <template x-for="category in config.categories"> 1470 <li class="mt-0 mb-4"> 1471 <div class="accordion-title"> 1472 <div class="pr-cookie-option flex justify-between pb-2 mt-8 text-sm"> 1473 <strong class="option-label mr-4" x-text="category.name"></strong> 1474 <template x-if="category.is_essential"> 1475 <strong class="option-status whitespace-nowrap text-green-700" x-text="config.consentPreferences.essential_category_status"></strong> 1476 </template> 1477 <template x-if="! category.is_essential"> 1478 <div class="pr-cookie-switch"> 1479 <label class="switch-label" aria-label="Switch"> 1480 <input type="checkbox" 1481 class="sr-only" 1482 x-model="category.is_allowed" 1483 x-bind:name="category.key" 1484 > 1485 <span class="switch-area flex items-center w-11 h-6 rounded-3xl border border-container cursor-pointer transition-all" 1486 :class="category.is_allowed ? 'bg-green-500 border-green-700' : 'bg-gray-200 border-gray-300'" 1487 > 1488 <span class="switch-nob block w-5 h-5 rounded-full transition-all" 1489 :class="category.is_allowed ? 'bg-white ml-auto mr-[2px]' : 'bg-gray-500 mr-auto ml-[2px]'" 1490 ></span> 1491 </span> 1492 </label> 1493 </div> 1494 </template> 1495 </div> 1496 <div class="first-details" x-data="{ isOpen: false }"> 1497 <div class="pr-cookie-category-description text-gray-700 mb-4" x-text="category.description"></div> 1498 <template x-if="config.canShowCookieDetails"> 1499 <div> 1500 <div class="lvl1">
1501 <span class="pr-cookie-details text-blue-700 cursor-pointer underline hover:no-underline" 1502 x-on:click="isOpen = true; config.cookieDetailsIsOpen = isOpen" 1503 x-text="config.consentPreferences.cookie_details_link" 1504 x-bind:data-category-key="category.key"></span> 1505 </div> 1506 <div class="second-details absolute bg-white px-4 pt-2 pb-4 inset-0 h-full" 1507 x-show="isOpen" 1508 > 1509 <div class="pr-cookie-view flex flex-col h-full"> 1510 <template x-if="isOpen"> 1511 <button @click="hide" class="ml-auto -mt-2 -mr-2 block top-2 right-2 p-2"> 1512 <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" class="w-4 h-4" width="24" height="24" role="img"> 1513 <path fill-rule="evenodd" d="M4.293 4.293a1 1 0 011.414 0L10 8.586l4.293-4.293a1 1 0 111.414 1.414L11.414 10l4.293 4.293a1 1 0 01-1.414 1.414L10 11.414l-4.293 4.293a1 1 0 01-1.414-1.414L8.586 10 4.293 5.707a1 1 0 010-1.414z" clip-rule="evenodd"/> 1514<title>x</title></svg> 1515 </button> 1516 </template> 1517 <div class="flex justify-between items-center text-sm mb-2"> 1518 <button class="pr-cookie-details-hide px-3 -ml-3 mr-3 flex items-center cursor-pointer hover:text-blue-800" 1519 x-show="isOpen" 1520 x-on:click="isOpen = false; config.cookieDetailsIsOpen = isOpen"> 1521 <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" class="w-3 h-3 mr-2 flex-shrink-0" width="24" height="24" role="img"> 1522 <path fill-rule="evenodd" d="M9.707 16.707a1 1 0 01-1.414 0l-6-6a1 1 0 010-1.414l6-6a1 1 0 011.414 1.414L5.414 9H17a1 1 0 110 2H5.414l4.293 4.293a1 1 0 010 1.414z" clip-rule="evenodd"/> 1523<title>arrow-left</title></svg> 1524 Back 1525 </button> 1526 <strong class="option-label" x-text="category.name"></strong> 1527 </div> 1528 <div class="pr-cookies-list h-full px-4 -mx-4 mb-3 overflow-auto"> 1529 <h3 class="pr-cookie-view-title mb-2 font-bold text-base">Cookies List</h3> 1530 <template x-if="category.details.length > 0"> 1531 <template x-for="group in category.details"> 1532 <div class="pr-cookie-item text-xs py-2 border-container border-b"> 1533 <h4 class="pr-cookie-details-title font-semibold mb-1" x-text="group.name"></h4> 1534 <details class="pr-cookie-details-info"> 1535 <summary class="cursor-pointer text-blue-600 hover:text-blue-500"> 1536 <h5 class="inline-block font-semibold"> 1537 View Cookies 1538 </h5> 1539 </summary> 1540 <div class="pr-cookie-group-wrp"> 1541 <template x-for="cookie in group.cookies"> 1542 <div class="pr-cookie-group mt-1 mb-4 p-4 bg-gray-100 rounded"> 1543 <div class="pr-cookie-group-row mb-2 flex"> 1544 <sp
1544an class="w-24 flex-shrink-0 mr-4">Name</span> 1545 <span class="truncate" x-text="cookie.name"></span> 1546 </div> 1547 <div class="pr-cookie-group-row mb-2 flex"> 1548 <span class="w-24 flex-shrink-0 mr-4">Domain</span> 1549 <span class="truncate" x-text="cookie.domainLabel"></span> 1550 </div> 1551 <div class="pr-cookie-group-row mb-2 flex"> 1552 <span class="w-24 flex-shrink-0 mr-4">Duration</span> 1553 <span x-text="cookie.durationLabel"></span> 1554 </div> 1555 <div class="pr-cookie-group-row mb-2 flex"> 1556 <span class="w-24 flex-shrink-0 mr-4">Type</span> 1557 <span x-text="cookie.typeLabel"></span> 1558 </div> 1559 <div class="pr-cookie-group-row mb-2 flex"> 1560 <span class="w-24 flex-shrink-0 mr-4">Category</span> 1561 <span x-text="cookie.category_key"></span> 1562 </div> 1563 <div class="pr-cookie-group-row flex"> 1564 <span class="w-24 flex-shrink-0 mr-4">Description</span> 1565 <span x-text="cookie.description"></span> 1566 </div> 1567 </div> 1568 </template> 1569 </div> 1570 </details> 1571 </div> 1572 </template> 1573 </template> 1574 <template x-if="category.details.length === 0"> 1575 <p>There are no cookies.</p> 1576 </template> 1577 </div> 1578 1579 <template x-if="isOpen"> 1580 <div> 1581 <button class="action btn btn-primary" 1582 :style="`color: ${config.confirmButtonConfig.text_color}; background-color: ${config.confirmButtonConfig.background_color}; border-color: ${config.confirmButtonConfig.background_color}`" 1583 x-text="config.confirmButtonConfig.label" 1584 @click="prCookieSettingBar.confirm()"> 1585 </button> 1586 </div> 1587 </template> 1588 </div> 1589 </div> 1590 </div> 1591 </template> 1592 </div> 1593 </div> 1594 </li> 1595 </template> 1596 <button class="action btn btn-primary" 1597 :style="`color: ${config.confirmButtonConfig.text_color}; background-color: ${config.confirmButtonConfig.background_color}; border-color: ${config.confirmButtonConfig.background_color}`" 1598 x-text="config.confirmButtonConfig.label" 1599 @click="prCookieSettingBar.confirm()"> 1600 </button> 1601 </ul> 1602</div> 1603 </div> 1604 </div> 1605 </div> 1606</div>
1607<script type="text/javascript" nonce="bDhraW5vaDFjczNyejIwenoxdG1tYm50dzNqb2RqOGY="> 1608 (() => { 1609 const updateCookieConsentConfig = () => { 1610 const categoryMap = {}; 1611 Object.entries(prCookieConsentApi.config.cookieToCategoryMapping).forEach(([cookieName, categoryName]) => { 1612 if (! categoryMap[categoryName]) { 1613 categoryMap[categoryName] = []; 1614 } 1615 categoryMap[categoryName].push(cookieName); 1616 }); 1617 1618 Object.entries(categoryMap).forEach(([category, cookies]) => { 1619 const existingList = window.cookie_consent_config[category] || []; 1620 window.cookie_consent_config[category] = Array.from(new Set(existingList.concat(cookies))); 1621 }); 1622 1623 let cookieCategories = ["necessary","preferences","statistics","marketing"]; 1624 window.cookie_consent_groups = {}; 1625 cookieCategories.forEach((category) => { 1626 window.cookie_consent_groups[category] = prCookieConsentApi.isAllowedCategory(category); 1627 }); 1628 } 1629 1630 const updateConsent = () => { 1631 window.cookie_consent_groups = window.cookie_consent_groups || {} 1632 Object.keys(window.cookie_consent_groups).forEach(categoryKey => { 1633 window.cookie_consent_groups[categoryKey] = prCookieConsentApi.isAllowedCategory(categoryKey); 1634 }); 1635 window.dispatchEvent(new CustomEvent('user-allowed-save-cookie')); 1636 } 1637 1638 document.addEventListener('pr-cookie-consent-api:configured', () => { 1639 updateCookieConsentConfig(); 1640 prCookieConsentApi.consent.addCallback(updateConsent); 1641 }); 1642 1643 if (prCookieConsentApi.isConfigured) { 1644 updateCookieConsentConfig(); 1645 prCookieConsentApi.consent.addCallback(updateConsent); 1646 } 1647 })(); 1648</script>
1648 1649<div id="prgdpr-consentpopups-container" 1650 x-data="prDataPrivacyConsentPopupsLoadInit()" 1651 @private-content-loaded.window="receiveCustomerData($event.detail.data)" 1652></div>
1653<script> 1654 function prDataPrivacyConsentPopupsLoadInit() { 1655 return { 1656 receiveCustomerData: function (data) { 1657 if (! data.hasOwnProperty('data_privacy')) { 1658 return; 1659 } 1660 1661 if (data.data_privacy.countNotifies !== 0 || data.data_privacy.countPopups !== 0) { 1662 this.loadPopups(); 1663 } 1664 }, 1665 loadPopups: function () { 1666 fetch('https://www.flooringinc.com/data-privacy/consentpopups/load/') 1667 .then((response) => { 1668 if (! response.ok) { 1669 throw new Error('Network response was not ok'); 1670 } 1671 1672 return response.json(); 1673 }) 1674 .then(data => this.$el.innerHTML = data.html) 1675 .catch(error => console.warn(error)); 1676 } 1677 } 1678 } 1679 1680 function prDataPrivacyConsentPopupsInit(popups, notifies) { 1681 return { 1682 popups: popups, 1683 notifies: notifies, 1684 data: null, 1685 isShowModal: true, 1686 init: function () { 1687 for (popup of this.popups) { 1688 popup.isShowModal = true; 1689 } 1690 1691 for (notify of this.notifies) { 1692 notify.isShowModal = true; 1693 } 1694 }, 1695 closeModal(popup) { 1696 popup.isShowModal = false; 1697 }, 1698 sendRequest: function (url, consent) { 1699 if (consent.cms_page) { 1700 consent.checkboxLabel = 'I agree'; 1701 } 1702 1703 fetch(url, { 1704 method: 'POST', 1705 headers: {'X-Requested-With': 'XMLHttpRequest'}, 1706 body: JSON.stringify({'consent': consent}) 1707 }); 1708 }, 1709 print: function (popup) { 1710 let printWindow = window.open('', 'Print', 'height=600,width=800'); 1711 printWindow.document.write( 1712 `<html><head><title>${popup.cms_page.title}</title></head><body>${popup.cms_page.content}</body></html` 1713 ); 1714 printWindow.document.close(); 1715 printWindow.focus(); 1716 printWindow.print(); 1717 printWindow.onafterprint = function () { 1718 printWindow.close(); 1719 }; 1720 1721 return true; 1722 } 1723 } 1724 } 1725</script>
1725 1726
1727<script nonce="bDhraW5vaDFjczNyejIwenoxdG1tYm50dzNqb2RqOGY="> 1728 (() => { 1729 const updateConsents = () => { 1730 if (! Array.isArray(prCookieConsentApi.consent.get()) || prCookieConsentApi.consent.get().length > 0) { 1731 prCookieConsentApi.consent.declineAll(); 1732 } 1733 } 1734 1735 prGlobalPrivacyControlApi.signalHandlers.addHandler(updateConsents); 1736 })(); 1737</script>
1737 1738<input name="form_key" type="hidden" value="Jn9pE0dYVl7fyGdn" /> 1739
1739<script> 1740 window.amRecaptchaModel = window.amRecaptchaModel || {}; 1741 </script>
1741 1742<div class="page-wrapper"><div class="container hidden"> 1743 <div class="pt-2 pb-2 flex flex-row items-end justify-end"> 1744 <div class="pl-3"> 1745 <a href="https://www.flooringinc.com/knowledge-base/" class="hover:underline"> 1746 FAQ</a> 1747 </div> 1748 </div> 1749</div> 1750<header class="page-header"><div class="panel wrapper"><div class="header_top flex justify-between items-center" x-data="notificationAjaxCall()" x-init="initNotificationFunc()"> 1751 <div class="header_left_notification text-size14 font-normal" x-html="left_notification_html"></div> 1752 <div class="header_middle_notification flex"> 1753 <div data-content-type="html" data-appearance="default" data-element="main" data-decoded="true"><div class="flex items-center"><a href="#" class="flex items-center gap-2"><svg xmlns="http://www.w3.org/2000/svg" width="29" height="20" viewBox="0 0 29 20" fill="none"> 1754<path d="M18.125 0V9.09091H0V0H18.125ZM19.9375 0H29V9.09091H19.9375V0ZM10.875 20V10.9091H29V20H10.875ZM0 20V10.9091H9.0625V20H0Z" fill="#15324C"/> 1755</svg> 500+ Million Sqft Covered</a></div> 1756 1757<div class="flex items-center"><a href="https://www.flooringinc.com/reviews" class="flex items-center gap-2"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 18 18" fill="none"> 1758<path d="M8.99984 0.666504L11.5748 5.88317L17.3332 6.72484L13.1665 10.7832L14.1498 16.5165L8.99984 13.8082L3.84984 16.5165L4.83317 10.7832L0.666504 6.72484L6.42484 5.88317L8.99984 0.666504Z" fill="#15324C" stroke="#15324C" stroke-linecap="round" stroke-linejoin="round"/> 1759</svg> 125K+ Verified Reviews</a></div> 1760 1761<div class="flex items-center"><a href="/price-match" class="flex items-center gap-2"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20" fill="none"> 1762<path d="M17.1582 11.1748L11.1832 17.1498C11.0284 17.3048 10.8446 17.4277 10.6422 17.5116C10.4399 17.5955 10.223 17.6386 10.004 17.6386C9.78498 17.6386 9.5681 17.5955 9.36577 17.5116C9.16344 17.4277 8.97963 17.3048 8.82484 17.1498L1.6665 9.99984V1.6665H9.99984L17.1582 8.82484C17.4686 9.13711 17.6428 9.55953 17.6428 9.99984C17.6428 10.4401 17.4686 10.8626 17.1582 11.1748Z" fill="#15324C"/> 1763<path d="M5.83317 5.83317H5.8415M17.1582 11.1748L11.1832 17.1498C11.0284 17.3048 10.8446 17.4277 10.6422 17.5116C10.4399 17.5955 10.223 17.6386 10.004 17.6386C9.78498 17.6386 9.5681 17.5955 9.36577 17.5116C9.16344 17.4277 8.97963 17.3048 8.82484 17.1498L1.6665 9.99984V1.6665H9.99984L17.1582 8.82484C17.4686 9.13711 17.6428 9.55953 17.6428 9.99984C17.6428 10.4401 17.4686 10.8626 17.1582 11.1748Z" stroke="#15324C" stroke-linecap="round" stroke-linejoin="round"/> 1764<circle cx="5" cy="5" r="1" fill="white"/> 1765</svg> Price Match Guarantee</a></div> 1766 1767<div class="flex items-center"><a href="/moneybackguarantee" class="flex items-center gap-2"> 1768<svg xmlns="http://www.w3.org/2000/svg" width="14" height="18" viewBox="0 0 14 18" fill="none"> 1769<path d="M7 0.75V18.4499M11.1667 3.75H4.91667C4.14312 3.75 3.40125 4.02656 2.85427 4.51884C2.30729 5.01113 2 5.67881 2 6.375C2 7.07119 2.30729 7.73887 2.85427 8.23116C3.40125 8.72344 4.14312 9 4.91667 9H9.08333C9.85688 9 10.5987 9.27656 11.1457 9.76885C11.6927 10.2611 12 10.9288 12 11.625C12 12.3212 11.6927 12.9889 11.1457 13.4812C10.5987 13.9734 9.85688 14.25 9.08333 14.25H2" stroke="#15324C" stroke-width="3" stroke-linecap="round" stroke-linejoin="round"/> 1770</svg> Money Back Guarantee</a></div> 1771</div> </div> 1772 <div class="header_right_notifications font-normal"> 1773 <style>#html-body [data-pb-style=GSTQRKU]{justify-content:flex-start;display:flex;flex-direction:column;background-position:left top;background-size:cover;background-repeat:no-repeat;background-attachment:scroll}</style><div data-content-type="row" data-appearance="contained" data-element="main"><div data-enable-parallax="0" data-parallax-speed="0.5" data-background-images="{}" data-background-type="image" data-video-loop="true" data-video-play-only-visible="true" data-video-lazy-load="true" data-video-fallback-src="" data-element="inner" data-pb-style="GSTQRKU"><div data-content-type="text" data-appearance="default" data-element="main"><ul> 1774<li><a href="/contact">Contact Us</a></li> 1775<li><a href="/sales/guest/form">Track Order</a></li> 1776</ul></div></div></div> </div> 1777</div> 1778
1779<script> 1780 function notificationAjaxCall() { 1781 return { 1782 availability_notification: '', 1783 left_notification_html: '', 1784 right_notification_html: '', 1785 initNotificationFunc: function () { 1786 fetch(BASE_URL+'notifications/index/show', { 1787 method: "GET", 1788 headers: { 'Content-Type': 'application/json' }, 1789 }) 1790 .then(response => { 1791 if (! response.ok) console.warn('GET request failed'); 1792 return response.json(); 1793 }) 1794 .then(data => { 1795 if (data) { 1796 this.availability_notification = data.availability_notification; 1797 this.left_notification_html = data.left_notification_html; 1798 this.right_notification_html = data.right_notification_html; 1799 } 1800 }); 1801 } 1802 } 1803 } 1804</script>
1804</div><div class="header content">
1804<script> 1805 function initQuoteCartDrawer() { 1806 return { 1807 open: false, 1808 cartData: {}, 1809 getQuoteCartData(data) { 1810 if (data.quotecart) { 1811 this.cartData = data.quotecart 1812 this.setCartItems(); 1813 } 1814 }, 1815 cartItems: [], 1816 setCartItems() { 1817 this.cartItems = this.cartData && this.cartData.items.sort(function(a,b) { return a.item_id - b.item_id }) || {} 1818 }, 1819 deleteItemFromCart(itemId) { 1820 var formKey = document.querySelector('input[name=form_key]').value; 1821 fetch(BASE_URL+"amasty_quote/sidebar/removeItem/", { 1822 "headers": { 1823 "content-type": "application/x-www-form-urlencoded; charset=UTF-8", 1824 }, 1825 "body": "form_key="+ formKey + "&item_id="+itemId, 1826 "method": "POST", 1827 "mode": "cors", 1828 "credentials": "include" 1829 }).then(function (response) { 1830 if (response.redirected) { 1831 window.location.href = response.url; 1832 } else if (response.ok) { 1833 return response.json(); 1834 } else { 1835 typeof window.dispatchMessages !== "undefined" && window.dispatchMessages( 1836 [{ 1837 type: "warning", 1838 text: "Could not remove item from quote." 1839 }], 5000 1840 ); 1841 } 1842 }).then(function (response) { 1843 typeof window.dispatchMessages !== "undefined" && window.dispatchMessages( 1844 [{ 1845 type: response.success ? "success" : "error", 1846 text: response.success 1847 ? "You removed the item." 1848 : response.error_message 1849 }], 5000 1850 ); 1851 var reloadCustomerDataEvent = new CustomEvent("reload-customer-section-data"); 1852 window.dispatchEvent(reloadCustomerDataEvent); 1853 }); 1854 } 1855 } 1856 } 1857</script>
1857 1858<section id="cart-quote-drawer" 1859 x-data="initQuoteCartDrawer()" 1860 @private-content-loaded.window="getQuoteCartData(event.detail.data)" 1861 @toggle-quote-cart.window="open=true;" 1862 @keydown.window.escape="open=false" 1863> 1864 <template x-if="cartData && cartData.summary_count"> 1865 <div role="dialog" 1866 aria-labelledby="cart-drawer-title" 1867 aria-modal="true" 1868 @click.away="open = false" 1869 class="fixed inset-y-0 right-0 z-30 flex max-w-full"> 1870 <div class="backdrop" 1871 x-show="open" 1872 x-transition:enter="ease-in-out duration-500" 1873 x-transition:enter-start="opacity-0" 1874 x-transition:enter-end="opacity-100" 1875 x-transition:leave="ease-in-out duration-500" 1876 x-transition:leave-start="opacity-100" 1877 x-transition:leave-end="opacity-0" 1878 @click="open = false" 1879 aria-label="Close panel"></div> 1880 <div class="relative w-screen max-w-md shadow-2xl" 1881 x-show="open" 1882 x-transition:enter="transform transition ease-in-out duration-500 sm:duration-700" 1883 x-transition:enter-start="translate-x-full" 1884 x-transition:enter-end="translate-x-0" 1885 x-transition:leave="transform transition ease-in-out duration-500 sm:duration-700" 1886 x-transition:leave-start="translate-x-0" 1887 x-transition:leave-end="translate-x-full" 1888 > 1889 <div 1890 x-show="open" 1891 x-transition:enter="ease-in-out duration-500" 1892 x-transition:enter-start="opacity-0" 1893 x-transition:enter-end="opacity-100" 1894 x-transition:leave="ease-in-out duration-500" 1895 x-transition:leave-start="opacity-100" 1896 x-transition:leave-end="opacity-0" class="absolute top-0 right-0 flex mr-3 mt-2"> 1897 <button @click="open = false" aria-label="Close panel" 1898 class="p-2 text-gray-300 transition duration-150 ease-in-out hover:text-black"> 1899 <svg class="w-6 h-6" fill="none" viewBox="0 0 24 24" stroke="currentColor"> 1900 <path stroke-linecap="round" stroke-linejoin="round" 1901 stroke-width="2" d="M6 18L18 6M6 6l12 12"> 1902 </path> 1903 </svg> 1904 </button> 1905 </div> 1906 <div class="flex flex-col h-full py-6 space-y-6 bg-white shadow-xl"> 1907 <header class="px-4 sm:px-6"> 1908 <div id="cart-drawer-title" class="text-lg font-medium leading-7 text-gray-900"> 1909 My Quote Cart </div> 1910 </header> 1911 <div class="relative grid gap-6 px-4 py-6 overflow-y-auto bg-white border-b 1912 sm:gap-8 sm:px-6 border-container"> 1913 <template x-for="item in cartItems"> 1914 <div class="flex items-start p-3 -m-3 space-x-4 transition duration-150 1915 ease-in-out rounded-lg hover:bg-gray-100"> 1916 <a :href="item.product_url" class="w-1/4"> 1917 <img 1918 :src="item.product_image.src" 1919 :width="item.product_image.width" 1920 :height="item.product_image.height" 1921 loading="lazy" 1922 /> 1923 </a> 1924 <div class="w-3/4 relative"> 1925 <div> 1926 <div class="text-xl"> 1927 <a :href="item.product_url" class="hover:underline"> 1928 <span x-html="item.qty"></span> x <span x-html="item.product_name"></span> 1929 </a> 1930 </div> 1931 <div class="text-sm"><span x-html="item.product_sku"></div> 1932 </div> 1933 <template x-for="option in item.options"> 1934 <div class="pt-2"> 1935 <p class="font-semibold" x-text="option.label + ':'"></p> 1936 <p class="text-secondary" x-html="option.value"></p> 1937 </div> 1938 </template> 1939 <div><span x-html="item.product_price"></span></div> 1940 <div class="pt-4"> 1941 <a :href="item.configure_url" 1942 x-show="item.product_type !== 'grouped'" 1943 class="inline-flex p-2 mr-2 btn btn-primary"> 1944 <svg fill="none" viewBox="0 0 24 24" stroke="currentColor" 1945 size="16" class="w-5 h-5"> 1946 <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" 1947 d="M15.232 5.232l3.536 3.536m-2.036-5.036a2.5 2.5 0 113.536 1948 3.536L6.5 21.036H3v-3.572L16.732 3.732z"> 1949 </path> 1950 </svg> 1951 </a> 1952 <button class="inline-flex p-2 btn btn-primary" 1953 @click="deleteItemFromCart(item.item_id)" 1954 > 1955 <svg fill="none" viewBox="0 0 24 24" stroke="currentColor" 1956 size="16" class="w-5 h-5"> 1957 <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" 1958 d="M19 7l-.867 12.142A2 2 0 0116.138 21H7.862a2 2 0 1959 01-1.995-1.858L5 7m5 4v6m4-6v6m1-10V4a1 1 0 00-1-1h-4a1 1 1960 0 00-1 1v3M4 7h16"> 1961 </path> 1962 </svg> 1963 </button> 1964 </div> 1965 </div> 1966 </div> 1967 </template> 1968 </div> 1969 <div class="relative grid gap-6 px-4 py-6 bg-white sm:gap-8 sm:px-6"> 1970 <div class="w-full p-3 -m-3 space-x-4 transition duration-150 ease-in-out rounded-lg 1971 hover:bg-gray-100">
1972 <span>Cart Subtotal:</span> 1973 <span class="text-gray-900 font-bold" x-text="hyva.formatPrice(cartData.subtotalAmount)"></span> 1974 </div> 1975 <div class="w-full"> 1976 <a href="https://www.flooringinc.com/amasty_quote/cart/" 1977 class="btn btn-secondary justify-center"> 1978 View and Edit Cart </a> 1979 </div> 1980 </div> 1981 </div> 1982 </div> 1983 </div> 1984 </template> 1985</section> 1986<div class="widget block block-static-block"> 1987 <style>#html-body [data-pb-style=J86NFKS]{justify-content:flex-start;display:flex;flex-direction:column;background-position:left top;background-size:cover;background-repeat:no-repeat;background-attachment:scroll}</style><div data-content-type="row" data-appearance="full-bleed" data-enable-parallax="0" data-parallax-speed="0.5" data-background-images="{}" data-background-type="image" data-video-loop="true" data-video-play-only-visible="true" data-video-lazy-load="true" data-video-fallback-src="" data-element="main" data-pb-style="J86NFKS"><div data-content-type="html" data-appearance="default" data-element="main" data-decoded="true"><div x-data="globalNotificationAjaxCall()" x-init="initGlobalNotificationFunc()"> 1988 <div class="notification4 pt-2 pb-2 text-center text-size13 font-normal text-white bg-custom-green" style="display:none" x-html="global_notification_text"></div> 1989</div> 1990
1991<script> 1992function globalNotificationAjaxCall() { 1993 return { 1994 global_notification_text: '', 1995 initGlobalNotificationFunc: function () { 1996 fetch(BASE_URL+'notifications/index/GlobalNotification?full_action_name=customer_account_login&cat_prod_id=', { 1997 method: "GET", 1998 headers: { 'Content-Type': 'application/json' }, 1999 }) 2000 .then(response => { 2001 if (! response.ok) console.warn('GET request failed'); 2002 return response.json(); 2003 }) 2004 .then(data => { 2005 if (data) { 2006 if (data.notification_text !='') { 2007 document.querySelector('.notification4.bg-custom-green').style.display = 'block'; 2008 this.global_notification_text = data.notification_text; 2009 } 2010 } 2011 }); 2012 } 2013 } 2014} 2015</script>
2015</div></div></div> 2016</div>
2016<script> 2017 function initHeader () { 2018 return { 2019 searchOpen: false, 2020 cart: {}, 2021 quoteCart: {}, 2022 activeCartType: 'cart', 2023 getData(data) { 2024 if (data.cart) { 2025 this.cart = data.cart; 2026 // this.cart.summary_count=this.cart.items.length; 2027 } 2028 if (data.quotecart) { 2029 this.quoteCart = data.quotecart; 2030 } 2031 if (data.active_cart_icon) { 2032 this.activeCartType = data.active_cart_icon; 2033 } 2034 } 2035 } 2036 } 2037 function initCompareHeader() { 2038 return { 2039 compareProducts: null, 2040 itemCount: 0, 2041 receiveCompareData(data) { 2042 if (data['compare-products']) { 2043 this.compareProducts = data['compare-products']; 2044 this.itemCount = this.compareProducts.count; 2045 } 2046 } 2047 } 2048 } 2049</script>
2049 2050 2051<div id="header" 2052 class="relative z-30 w-full bg-white" 2053 x-data="initHeader()" 2054 @keydown.window.escape="searchOpen = false;" 2055 @private-content-loaded.window="getData(event.detail.data)" 2056> 2057 <div class="content flex flex-wrap items-center justify-between w-full pt-4 pb-4 mx-auto mt-0"> 2058 <!--Logo--> 2059 <div class="logo relative z-20"> 2060 <div class="order-1 sm:order-2 lg:order-1 w-full pb-2 sm:w-auto sm:pb-0"> 2061 <a class="flex items-center text-xl font-medium tracking-wide text-gray-800 2062 no-underline hover:no-underline font-title" 2063 href="https://www.flooringinc.com/" 2064 title="Flooring Inc. The Flooring Superstore" 2065 aria-label="store logo"> 2066 <picture><source type="image/webp" srcset="https://www.flooringinc.com/media/logo/stores/1/logo.webp"><img src="https://www.flooringinc.com/media/logo/stores/1/logo.jpg" title="Flooring Inc. The Flooring Superstore" alt="Flooring Inc. The Flooring Superstore" fetchpriority="high" width="266" height="31" /></picture> 2067 </a> 2068</div> 2069 </div> 2070 2071 <!--Main Navigation--> 2072 <div x-data="initMenuMobile_6ac15155197cd()" 2073 class="z-50 order-2 sm:order-1 lg:order-2 navigation xl:hidden" 2074> 2075 <!-- mobile --> 2076 <div @load.window="setActiveMenu($root)" 2077 class="mobile-menu bg-lightblue" 2078 :class="{'h-screen fixed top-0 left-0 w-full' : open}" 2079 @toggle-mobile-menu.window="open = !open" 2080 @keydown.window.escape="open=false" 2081 > 2082 <div class="flex items-baseline justify-between ml-0 menu-icon"> 2083 <div class="flex justify-end w-full"> 2084 <a @click="$dispatch('toggle-mobile-menu')" 2085 class="flex items-center justify-center cursor-pointer" 2086 :class="{ 'ml-auto': open }"> 2087 <span class="close-icon px-5 py-2 text-size12 font-normal text-custom-blue rounded-md absolute" :class="{ 'hidden' : !open, 'block': open }">CLOSE</span> 2088 <picture class="menu_icon -mt-0 mr-1"><source type="image/webp" srcset="https://www.flooringinc.com/static/version1789462004/frontend/Dcw/hyvamobile/en_US/images/menu-icon.webp"><img class="menu_icon -mt-0 mr-1" :class="{ 'block' : !open, 'hidden': open }" src="https://www.flooringinc.com/static/version1789462004/frontend/Dcw/hyvamobile/en_US/images/menu-icon.png" width="25" height="17" alt="menu-icon"></picture> 2089 </a> 2090 </div> 2091 </div> 2092 <div class="menu-overlay hidden" :class="{ 'hidden' : !open }" @click="$dispatch('toggle-mobile-menu')"></div> 2093 <nav 2094 class="hidden w-full h-full duration-150 ease-in-out transform transition-display pt-5 pr-5 pl-12" 2095 :class="{ 'hidden' : !open }" 2096 > 2097 <span class="menu-label text-size28 font-medium text-black pt-1 pb-4" :class="{ 'hidden' : !open, 'block': open }">Menu</span> 2098 <div class="nav-in overflow-y-auto overflow-x-hidden h-5/6"> 2099 <div class="level-0"> 2100 <span class="flex items-center transition-transform duration-150 ease-in-out transform mb-3"> 2101 <a class="flex items-center w-full cursor-pointer level-0 text-size24 font-medium text-black no-underline" 2102 @click="mobilePanelActiveId = 2103 mobilePanelActiveId === 'category-node-1826' ? 2104 0 : 'category-node-1826'" 2105 title="Flooring By Category"> 2106 Flooring By Category </a> 2107 <a class="absolute right-0 cursor-pointer menu_arw1" :class="{ 2108 'active' : mobilePanelActiveId, 2109 '' : !mobilePanelActiveId 2110 }" 2111 @click="mobilePanelActiveId = 2112 mobilePanelActiveId === 'category-node-1826' ? 2113 0 : 'category-node-1826'" 2114 > 2115 <picture><source type="image/webp" srcset="https://www.flooringinc.com/static/version1789462004/frontend/Dcw/hyvamobile/en_US/images/menu-arw.webp"><img src="https://www.flooringinc.com/static/version1789462004/frontend/Dcw/hyvamobile/en_US/images/menu-arw.png" width="17" height="10" alt="menu-arw"></picture> 2116 </a> 2117 </span> 2118 <div 2119 class="w-full h-full transition-transform duration-200 ease-in-out block transform" 2120 :class="{ 2121 'block' : mobilePanelActiveId !== 'category-node-1826', 2122 'hidden' : mobilePanelActiveId === 'category-node-1826', 2123 }" 2124 > 2125 2126 2127 2128 <li class="imgcat list-none relative" x-data="{ show: false }" > 2129 <a 2130 @click="show = !show" 2131 2132 title="Rubber Flooring" 2133 class="flex items-center cursor-pointer text-size18 font-normal text-black mb-4 mob-width-adjust" 2134 > 2135 <!-- <span class="w-6"></span> -->
2136 <span> 2137 Rubber Flooring </span> 2138 </a> 2139 2140 <picture class="absolute menu_arw"><source type="image/webp" srcset="https://www.flooringinc.com/static/version1789462004/frontend/Dcw/hyvamobile/en_US/images/menu-arw.webp"><img src="https://www.flooringinc.com/static/version1789462004/frontend/Dcw/hyvamobile/en_US/images/menu-arw.png" width="13" height="8" alt="menu-arw" @click="show = !show" class="absolute menu_arw" x-bind:class="show ? 'active' : ''"></picture> 2141 <ul class="z-10 w-full" x-show="show"> 2142 <li class="level-2"> 2143 <a href="https://www.flooringinc.com/shop/rubber-flooring/all-rubber-flooring.html" 2144 title="All Rubber Flooring" 2145 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 2146 All Rubber Flooring</a> 2147 </li> 2148 <li class="level-2"> 2149 <a href="https://www.flooringinc.com/shop/rubber-flooring/rubber-rolls.html" 2150 title="Rubber Flooring Rolls" 2151 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 2152 Rubber Flooring Rolls</a> 2153 </li> 2154 <li class="level-2"> 2155 <a href="https://www.flooringinc.com/shop/rubber-flooring/rubber-tiles.html" 2156 title="Rubber Floor Tiles" 2157 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 2158 Rubber Floor Tiles</a> 2159 </li> 2160 <li class="level-2"> 2161 <a href="https://www.flooringinc.com/shop/rubber-flooring/rubber-mats.html" 2162 title="Rubber Mats" 2163 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 2164 Rubber Mats</a> 2165 </li> 2166 <li class="level-2"> 2167 <a href="https://www.flooringinc.com/shop/rubber-flooring/playground-flooring.html" 2168 title="Playground Flooring" 2169 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 2170 Playground Flooring</a> 2171 </li> 2172 <li class="level-2"> 2173 <a href="https://www.flooringinc.com/shop/rubber-flooring/outdoor-rubber-flooring.html" 2174 title="Outdoor Rubber Flooring" 2175 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 2176 Outdoor Rubber Flooring</a> 2177 </li> 2178 </ul> 2179 <a class="text-size16 font-normal text-black underline pl-5 mt-2 mb-6 inline-block" href="https://www.flooringinc.com/shop/rubber-flooring.html" x-show="show">View All</a> 2180 2181 2182 2183 2184 <li class="imgcat list-none relative" x-data="{ show: false }" > 2185 <a 2186 @click="show = !show" 2187 2188 title="Garage Flooring" 2189 class="flex items-center cursor-pointer text-size18 font-normal text-black mb-4 mob-width-adjust" 2190 > 2191 <!-- <span class="w-6"></span> -->
2192 <span> 2193 Garage Flooring </span> 2194 </a> 2195 2196 <picture class="absolute menu_arw"><source type="image/webp" srcset="https://www.flooringinc.com/static/version1789462004/frontend/Dcw/hyvamobile/en_US/images/menu-arw.webp"><img src="https://www.flooringinc.com/static/version1789462004/frontend/Dcw/hyvamobile/en_US/images/menu-arw.png" width="13" height="8" alt="menu-arw" @click="show = !show" class="absolute menu_arw" x-bind:class="show ? 'active' : ''"></picture> 2197 <ul class="z-10 w-full" x-show="show"> 2198 <li class="level-2"> 2199 <a href="https://www.flooringinc.com/shop/garage-flooring/all-garage-flooring.html" 2200 title="All Garage Flooring" 2201 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 2202 All Garage Flooring</a> 2203 </li> 2204 <li class="level-2"> 2205 <a href="https://www.flooringinc.com/shop/garage-flooring/garage-rolls.html" 2206 title="Garage Flooring Rolls" 2207 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 2208 Garage Flooring Rolls</a> 2209 </li> 2210 <li class="level-2"> 2211 <a href="https://www.flooringinc.com/shop/garage-flooring/garage-tiles.html" 2212 title="Garage Floor Tiles" 2213 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 2214 Garage Floor Tiles</a> 2215 </li> 2216 <li class="level-2"> 2217 <a href="https://www.flooringinc.com/shop/garage-flooring/garage-gym-flooring.html" 2218 title="Garage Gym Flooring" 2219 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 2220 Garage Gym Flooring</a> 2221 </li> 2222 <li class="level-2"> 2223 <a href="https://www.flooringinc.com/shop/garage-flooring/coatings-epoxy.html" 2224 title="Garage Floor Epoxy" 2225 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 2226 Garage Floor Epoxy</a> 2227 </li> 2228 <li class="level-2"> 2229 <a href="https://www.flooringinc.com/shop/garage-flooring/trailer-flooring.html" 2230 title="Trailer Flooring" 2231 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 2232 Trailer Flooring</a> 2233 </li> 2234 </ul> 2235 <a class="text-size16 font-normal text-black underline pl-5 mt-2 mb-6 inline-block" href="https://www.flooringinc.com/shop/garage-flooring.html" x-show="show">View All</a> 2236 2237 2238 2239 2240 <li class="imgcat list-none relative" x-data="{ show: false }" > 2241 <a 2242 @click="show = !show" 2243 2244 title="Dance Flooring" 2245 class="flex items-center cursor-pointer text-size18 font-normal text-black mb-4 mob-width-adjust" 2246 > 2247 <!-- <span class="w-6"></span> -->
2248 <span> 2249 Dance Flooring </span> 2250 </a> 2251 2252 <picture class="absolute menu_arw"><source type="image/webp" srcset="https://www.flooringinc.com/static/version1789462004/frontend/Dcw/hyvamobile/en_US/images/menu-arw.webp"><img src="https://www.flooringinc.com/static/version1789462004/frontend/Dcw/hyvamobile/en_US/images/menu-arw.png" width="13" height="8" alt="menu-arw" @click="show = !show" class="absolute menu_arw" x-bind:class="show ? 'active' : ''"></picture> 2253 <ul class="z-10 w-full" x-show="show"> 2254 <li class="level-2"> 2255 <a href="https://www.flooringinc.com/shop/dance-flooring/marley-flooring.html" 2256 title="Marley Floor Rolls" 2257 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 2258 Marley Floor Rolls</a> 2259 </li> 2260 <li class="level-2"> 2261 <a href="https://www.flooringinc.com/shop/dance-flooring/dance-floor-tiles.html" 2262 title="Dance Floor Tiles" 2263 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 2264 Dance Floor Tiles</a> 2265 </li> 2266 <li class="level-2"> 2267 <a href="https://www.flooringinc.com/shop/dance-flooring/portable-dance-floor-kits.html" 2268 title="Portable Dance Floors & Kits" 2269 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 2270 Portable Dance Floors & Kits</a> 2271 </li> 2272 <li class="level-2"> 2273 <a href="https://www.flooringinc.com/shop/dance-flooring/subflooring.html" 2274 title="Subflooring" 2275 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 2276 Subflooring</a> 2277 </li> 2278 <li class="level-2"> 2279 <a href="https://www.flooringinc.com/shop/dance-flooring/adhesives-cleaners-accessories.html" 2280 title="Adhesives, Cleaners & Accessories" 2281 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 2282 Adhesives, Cleaners & Accessories</a> 2283 </li> 2284 <li class="level-2"> 2285 <a href="https://www.flooringinc.com/shop/dance-flooring/all-dance-flooring.html" 2286 title="All Dance Flooring" 2287 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 2288 All Dance Flooring</a> 2289 </li> 2290 </ul> 2291 <a class="text-size16 font-normal text-black underline pl-5 mt-2 mb-6 inline-block" href="https://www.flooringinc.com/shop/dance-flooring.html" x-show="show">View All</a> 2292 2293 2294 2295 2296 <li class="imgcat list-none relative" x-data="{ show: false }" > 2297 <a 2298 @click="show = !show" 2299 2300 title="Foam Flooring" 2301 class="flex items-center cursor-pointer text-size18 font-normal text-black mb-4 mob-width-adjust" 2302 > 2303 <!-- <span class="w-6"></span> -->
2304 <span> 2305 Foam Flooring </span> 2306 </a> 2307 2308 <picture class="absolute menu_arw"><source type="image/webp" srcset="https://www.flooringinc.com/static/version1789462004/frontend/Dcw/hyvamobile/en_US/images/menu-arw.webp"><img src="https://www.flooringinc.com/static/version1789462004/frontend/Dcw/hyvamobile/en_US/images/menu-arw.png" width="13" height="8" alt="menu-arw" @click="show = !show" class="absolute menu_arw" x-bind:class="show ? 'active' : ''"></picture> 2309 <ul class="z-10 w-full" x-show="show"> 2310 <li class="level-2"> 2311 <a href="https://www.flooringinc.com/shop/foam-flooring/foam-tiles.html" 2312 title="Foam Floor Tiles" 2313 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 2314 Foam Floor Tiles</a> 2315 </li> 2316 <li class="level-2"> 2317 <a href="https://www.flooringinc.com/shop/foam-flooring/kids-baby-play-mats.html" 2318 title="Kids & Baby Play Mats" 2319 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 2320 Kids & Baby Play Mats</a> 2321 </li> 2322 <li class="level-2"> 2323 <a href="https://www.flooringinc.com/shop/foam-flooring/gymnastic-folding-mats.html" 2324 title="Gymnastics Mats " 2325 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 2326 Gymnastics Mats </a> 2327 </li> 2328 <li class="level-2"> 2329 <a href="https://www.flooringinc.com/shop/foam-flooring/wrestling-mats.html" 2330 title="Wrestling Mats" 2331 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 2332 Wrestling Mats</a> 2333 </li> 2334 <li class="level-2"> 2335 <a href="https://www.flooringinc.com/shop/foam-flooring/martial-arts-mats.html" 2336 title="Martial Arts Mats " 2337 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 2338 Martial Arts Mats </a> 2339 </li> 2340 <li class="level-2"> 2341 <a href="https://www.flooringinc.com/shop/foam-flooring/trade-show-flooring.html" 2342 title="Trade Show Flooring" 2343 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 2344 Trade Show Flooring</a> 2345 </li> 2346 </ul> 2347 <a class="text-size16 font-normal text-black underline pl-5 mt-2 mb-6 inline-block" href="https://www.flooringinc.com/shop/foam-flooring.html" x-show="show">View All</a> 2348 2349 2350 2351 2352 <li class="imgcat list-none relative" x-data="{ show: false }" > 2353 <a 2354 @click="show = !show" 2355 2356 title="Outdoor Flooring" 2357 class="flex items-center cursor-pointer text-size18 font-normal text-black mb-4 mob-width-adjust" 2358 > 2359 <!-- <span class="w-6"></span> -->
2360 <span> 2361 Outdoor Flooring </span> 2362 </a> 2363 2364 <picture class="absolute menu_arw"><source type="image/webp" srcset="https://www.flooringinc.com/static/version1789462004/frontend/Dcw/hyvamobile/en_US/images/menu-arw.webp"><img src="https://www.flooringinc.com/static/version1789462004/frontend/Dcw/hyvamobile/en_US/images/menu-arw.png" width="13" height="8" alt="menu-arw" @click="show = !show" class="absolute menu_arw" x-bind:class="show ? 'active' : ''"></picture> 2365 <ul class="z-10 w-full" x-show="show"> 2366 <li class="level-2"> 2367 <a href="https://www.flooringinc.com/shop/outdoor-flooring/playground-flooring.html" 2368 title="Playground Flooring" 2369 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 2370 Playground Flooring</a> 2371 </li> 2372 <li class="level-2"> 2373 <a href="https://www.flooringinc.com/shop/outdoor-flooring/sport-and-court-flooring.html" 2374 title="Sports Flooring & Court Tiles" 2375 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 2376 Sports Flooring & Court Tiles</a> 2377 </li> 2378 <li class="level-2"> 2379 <a href="https://www.flooringinc.com/shop/outdoor-flooring/artificial-grass.html" 2380 title="Turf & Artificial Grass" 2381 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 2382 Turf & Artificial Grass</a> 2383 </li> 2384 <li class="level-2"> 2385 <a href="https://www.flooringinc.com/shop/outdoor-flooring/composite-decking.html" 2386 title="Composite Decking" 2387 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 2388 Composite Decking</a> 2389 </li> 2390 <li class="level-2"> 2391 <a href="https://www.flooringinc.com/shop/outdoor-flooring/rooftop-deck-flooring.html" 2392 title="Rooftop Deck Flooring" 2393 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 2394 Rooftop Deck Flooring</a> 2395 </li> 2396 <li class="level-2"> 2397 <a href="https://www.flooringinc.com/shop/outdoor-flooring/drainage-tiles.html" 2398 title="Drainage Tile & Mats" 2399 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 2400 Drainage Tile & Mats</a> 2401 </li> 2402 </ul> 2403 <a class="text-size16 font-normal text-black underline pl-5 mt-2 mb-6 inline-block" href="https://www.flooringinc.com/shop/outdoor-flooring.html" x-show="show">View All</a> 2404 2405 2406 2407 2408 <li class="imgcat list-none relative" x-data="{ show: false }" > 2409 <a 2410 @click="show = !show" 2411 2412 title="Turf & Artificial Grass" 2413 class="flex items-center cursor-pointer text-size18 font-normal text-black mb-4 mob-width-adjust" 2414 > 2415 <!-- <span class="w-6"></span> -->
2416 <span> 2417 Turf & Artificial Grass </span> 2418 </a> 2419 2420 <picture class="absolute menu_arw"><source type="image/webp" srcset="https://www.flooringinc.com/static/version1789462004/frontend/Dcw/hyvamobile/en_US/images/menu-arw.webp"><img src="https://www.flooringinc.com/static/version1789462004/frontend/Dcw/hyvamobile/en_US/images/menu-arw.png" width="13" height="8" alt="menu-arw" @click="show = !show" class="absolute menu_arw" x-bind:class="show ? 'active' : ''"></picture> 2421 <ul class="z-10 w-full" x-show="show"> 2422 <li class="level-2"> 2423 <a href="https://www.flooringinc.com/shop/artificial-grass/sport-field-turf.html" 2424 title="Sport & Gym Turf" 2425 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 2426 Sport & Gym Turf</a> 2427 </li> 2428 <li class="level-2"> 2429 <a href="https://www.flooringinc.com/shop/artificial-grass/landscape-turf.html" 2430 title="Landscape Turf" 2431 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 2432 Landscape Turf</a> 2433 </li> 2434 <li class="level-2"> 2435 <a href="https://www.flooringinc.com/shop/artificial-grass/pet-turf.html" 2436 title="Pet Turf" 2437 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 2438 Pet Turf</a> 2439 </li> 2440 <li class="level-2"> 2441 <a href="https://www.flooringinc.com/shop/artificial-grass/putting-greens.html" 2442 title="Golf & Putting Green Turf" 2443 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 2444 Golf & Putting Green Turf</a> 2445 </li> 2446 <li class="level-2"> 2447 <a href="https://www.flooringinc.com/shop/artificial-grass/turf-accessories.html" 2448 title="Turf Accessories" 2449 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 2450 Turf Accessories</a> 2451 </li> 2452 <li class="level-2"> 2453 <a href="https://www.flooringinc.com/shop/artificial-grass/all-artificial-grass.html" 2454 title="All Turf & Artificial Grass" 2455 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 2456 All Turf & Artificial Grass</a> 2457 </li> 2458 </ul> 2459 <a class="text-size16 font-normal text-black underline pl-5 mt-2 mb-6 inline-block" href="https://www.flooringinc.com/shop/artificial-grass.html" x-show="show">View All</a> 2460 2461 2462 2463 2464 <li class="imgcat list-none relative" x-data="{ show: false }" > 2465 <a 2466 @click="show = !show" 2467 2468 title="Carpet Tiles & Rolls" 2469 class="flex items-center cursor-pointer text-size18 font-normal text-black mb-4 mob-width-adjust" 2470 > 2471 <!-- <span class="w-6"></span> -->
2472 <span> 2473 Carpet Tiles & Rolls </span> 2474 </a> 2475 2476 <picture class="absolute menu_arw"><source type="image/webp" srcset="https://www.flooringinc.com/static/version1789462004/frontend/Dcw/hyvamobile/en_US/images/menu-arw.webp"><img src="https://www.flooringinc.com/static/version1789462004/frontend/Dcw/hyvamobile/en_US/images/menu-arw.png" width="13" height="8" alt="menu-arw" @click="show = !show" class="absolute menu_arw" x-bind:class="show ? 'active' : ''"></picture> 2477 <ul class="z-10 w-full" x-show="show"> 2478 <li class="level-2"> 2479 <a href="https://www.flooringinc.com/shop/carpet/carpet-tiles.html" 2480 title="Carpet Tiles" 2481 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 2482 Carpet Tiles</a> 2483 </li> 2484 <li class="level-2"> 2485 <a href="https://www.flooringinc.com/shop/carpet/carpet-rolls.html" 2486 title="Carpet Rolls" 2487 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 2488 Carpet Rolls</a> 2489 </li> 2490 <li class="level-2"> 2491 <a href="https://www.flooringinc.com/shop/carpet/home-theater-carpet.html" 2492 title="Home Theater Carpet" 2493 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 2494 Home Theater Carpet</a> 2495 </li> 2496 <li class="level-2"> 2497 <a href="https://www.flooringinc.com/shop/carpet/peel-stick-carpet.html" 2498 title="Peel and Stick Carpet Tiles" 2499 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 2500 Peel and Stick Carpet Tiles</a> 2501 </li> 2502 <li class="level-2"> 2503 <a href="https://www.flooringinc.com/shop/carpet/outdoor-carpet.html" 2504 title="Outdoor Carpet" 2505 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 2506 Outdoor Carpet</a> 2507 </li> 2508 <li class="level-2"> 2509 <a href="https://www.flooringinc.com/shop/carpet/waterproof-carpet.html" 2510 title="Waterproof Carpet" 2511 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 2512 Waterproof Carpet</a> 2513 </li> 2514 </ul> 2515 <a class="text-size16 font-normal text-black underline pl-5 mt-2 mb-6 inline-block" href="https://www.flooringinc.com/shop/carpet.html" x-show="show">View All</a> 2516 2517 2518 2519 2520 <li class="imgcat list-none relative" x-data="{ show: false }" > 2521 <a 2522 @click="show = !show" 2523 2524 title="Vinyl Flooring" 2525 class="flex items-center cursor-pointer text-size18 font-normal text-black mb-4 mob-width-adjust" 2526 > 2527 <!-- <span class="w-6"></span> -->
2528 <span> 2529 Vinyl Flooring </span> 2530 </a> 2531 2532 <picture class="absolute menu_arw"><source type="image/webp" srcset="https://www.flooringinc.com/static/version1789462004/frontend/Dcw/hyvamobile/en_US/images/menu-arw.webp"><img src="https://www.flooringinc.com/static/version1789462004/frontend/Dcw/hyvamobile/en_US/images/menu-arw.png" width="13" height="8" alt="menu-arw" @click="show = !show" class="absolute menu_arw" x-bind:class="show ? 'active' : ''"></picture> 2533 <ul class="z-10 w-full" x-show="show"> 2534 <li class="level-2"> 2535 <a href="https://www.flooringinc.com/shop/vinyl/vinyl-sheet.html" 2536 title="Vinyl Sheet Flooring" 2537 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 2538 Vinyl Sheet Flooring</a> 2539 </li> 2540 <li class="level-2"> 2541 <a href="https://www.flooringinc.com/shop/vinyl/vinyl-tiles-planks.html" 2542 title="Vinyl Tiles & Planks" 2543 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 2544 Vinyl Tiles & Planks</a> 2545 </li> 2546 <li class="level-2"> 2547 <a href="https://www.flooringinc.com/shop/vinyl/waterproof-vinyl.html" 2548 title="Waterproof Vinyl Flooring" 2549 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 2550 Waterproof Vinyl Flooring</a> 2551 </li> 2552 <li class="level-2"> 2553 <a href="https://www.flooringinc.com/shop/vinyl/rigid-core-vinyl.html" 2554 title="Rigid Core Vinyl Flooring" 2555 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 2556 Rigid Core Vinyl Flooring</a> 2557 </li> 2558 <li class="level-2"> 2559 <a href="https://www.flooringinc.com/shop/vinyl/commercial-vinyl.html" 2560 title="Commercial Vinyl Flooring" 2561 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 2562 Commercial Vinyl Flooring</a> 2563 </li> 2564 </ul> 2565 2566 2567 2568 2569 <li class="imgcat list-none relative" x-data="{ show: false }" > 2570 <a 2571 @click="show = !show" 2572 2573 title="Wood & Laminate Flooring" 2574 class="flex items-center cursor-pointer text-size18 font-normal text-black mb-4 mob-width-adjust" 2575 > 2576 <!-- <span class="w-6"></span> -->
2577 <span> 2578 Wood & Laminate Flooring </span> 2579 </a> 2580 2581 <picture class="absolute menu_arw"><source type="image/webp" srcset="https://www.flooringinc.com/static/version1789462004/frontend/Dcw/hyvamobile/en_US/images/menu-arw.webp"><img src="https://www.flooringinc.com/static/version1789462004/frontend/Dcw/hyvamobile/en_US/images/menu-arw.png" width="13" height="8" alt="menu-arw" @click="show = !show" class="absolute menu_arw" x-bind:class="show ? 'active' : ''"></picture> 2582 <ul class="z-10 w-full" x-show="show"> 2583 <li class="level-2"> 2584 <a href="https://www.flooringinc.com/shop/wood-laminate/waterproof-laminate.html" 2585 title="Waterproof Laminate Flooring" 2586 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 2587 Waterproof Laminate Flooring</a> 2588 </li> 2589 <li class="level-2"> 2590 <a href="https://www.flooringinc.com/shop/wood-laminate/laminate.html" 2591 title="Laminate Flooring" 2592 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 2593 Laminate Flooring</a> 2594 </li> 2595 <li class="level-2"> 2596 <a href="https://www.flooringinc.com/shop/wood-laminate/hardwood.html" 2597 title="Engineered Hardwood Flooring" 2598 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 2599 Engineered Hardwood Flooring</a> 2600 </li> 2601 <li class="level-2"> 2602 <a href="https://www.flooringinc.com/shop/wood-laminate/oak.html" 2603 title="Oak Wood Flooring" 2604 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 2605 Oak Wood Flooring</a> 2606 </li> 2607 <li class="level-2"> 2608 <a href="https://www.flooringinc.com/shop/wood-laminate/commercial-wood-laminate.html" 2609 title="Commercial Wood & Laminate" 2610 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 2611 Commercial Wood & Laminate</a> 2612 </li> 2613 </ul> 2614 2615 2616 2617 2618 <li class="imgcat list-none relative" x-data="{ show: false }" > 2619 <a 2620 @click="show = !show" 2621 2622 title="Commercial Flooring" 2623 class="flex items-center cursor-pointer text-size18 font-normal text-black mb-4 mob-width-adjust" 2624 > 2625 <!-- <span class="w-6"></span> -->
2626 <span> 2627 Commercial Flooring </span> 2628 </a> 2629 2630 <picture class="absolute menu_arw"><source type="image/webp" srcset="https://www.flooringinc.com/static/version1789462004/frontend/Dcw/hyvamobile/en_US/images/menu-arw.webp"><img src="https://www.flooringinc.com/static/version1789462004/frontend/Dcw/hyvamobile/en_US/images/menu-arw.png" width="13" height="8" alt="menu-arw" @click="show = !show" class="absolute menu_arw" x-bind:class="show ? 'active' : ''"></picture> 2631 <ul class="z-10 w-full" x-show="show"> 2632 <li class="level-2"> 2633 <a href="https://www.flooringinc.com/shop/commercial-flooring/commercial-rubber-flooring.html" 2634 title="Commercial Rubber Flooring" 2635 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 2636 Commercial Rubber Flooring</a> 2637 </li> 2638 <li class="level-2"> 2639 <a href="https://www.flooringinc.com/shop/commercial-flooring/commercial-garage-flooring.html" 2640 title="Commercial Garage Flooring" 2641 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 2642 Commercial Garage Flooring</a> 2643 </li> 2644 <li class="level-2"> 2645 <a href="https://www.flooringinc.com/shop/commercial-flooring/commercial-carpet.html" 2646 title="Commercial Carpet Tiles" 2647 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 2648 Commercial Carpet Tiles</a> 2649 </li> 2650 <li class="level-2"> 2651 <a href="https://www.flooringinc.com/shop/commercial-flooring/commercial-vinyl.html" 2652 title="Commercial Vinyl Flooring" 2653 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 2654 Commercial Vinyl Flooring</a> 2655 </li> 2656 <li class="level-2"> 2657 <a href="https://www.flooringinc.com/shop/commercial-flooring/commercial-wood-laminate.html" 2658 title="Commercial Wood & Laminate Flooring" 2659 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 2660 Commercial Wood & Laminate Flooring</a> 2661 </li> 2662 <li class="level-2"> 2663 <a href="https://www.flooringinc.com/shop/commercial-flooring/gym-floor-covers-protection.html" 2664 title="Gym Floor Covers | Floor Protection" 2665 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 2666 Gym Floor Covers | Floor Protection</a> 2667 </li> 2668 </ul> 2669 <a class="text-size16 font-normal text-black underline pl-5 mt-2 mb-6 inline-block" href="https://www.flooringinc.com/shop/commercial-flooring.html" x-show="show">View All</a> 2670 2671 2672 2673 2674 <li class="imgcat list-none relative" x-data="{ show: false }" > 2675 <a 2676 @click="show = !show" 2677 2678 title="Floors by Activity" 2679 class="flex items-center cursor-pointer text-size18 font-normal text-black mb-4 mob-width-adjust" 2680 > 2681 <!-- <span class="w-6"></span> -->
2682 <span> 2683 Floors by Activity </span> 2684 </a> 2685 2686 <picture class="absolute menu_arw"><source type="image/webp" srcset="https://www.flooringinc.com/static/version1789462004/frontend/Dcw/hyvamobile/en_US/images/menu-arw.webp"><img src="https://www.flooringinc.com/static/version1789462004/frontend/Dcw/hyvamobile/en_US/images/menu-arw.png" width="13" height="8" alt="menu-arw" @click="show = !show" class="absolute menu_arw" x-bind:class="show ? 'active' : ''"></picture> 2687 <ul class="z-10 w-full" x-show="show"> 2688 <li class="level-2"> 2689 <a href="https://www.flooringinc.com/shop/shop-by-activity/fitness-flooring.html" 2690 title="Fitness Flooring" 2691 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 2692 Fitness Flooring</a> 2693 </li> 2694 <li class="level-2"> 2695 <a href="https://www.flooringinc.com/shop/shop-by-activity/dance-marley-flooring.html" 2696 title="Dance Flooring | Marley Floor" 2697 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 2698 Dance Flooring | Marley Floor</a> 2699 </li> 2700 <li class="level-2"> 2701 <a href="https://www.flooringinc.com/shop/shop-by-activity/sport-and-court-flooring.html" 2702 title="Sport & Court Flooring" 2703 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 2704 Sport & Court Flooring</a> 2705 </li> 2706 <li class="level-2"> 2707 <a href="https://www.flooringinc.com/shop/shop-by-activity/martial-arts-flooring.html" 2708 title="Martial Arts Mats " 2709 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 2710 Martial Arts Mats </a> 2711 </li> 2712 <li class="level-2"> 2713 <a href="https://www.flooringinc.com/shop/shop-by-activity/cheer-mats.html" 2714 title="Cheer Mats" 2715 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 2716 Cheer Mats</a> 2717 </li> 2718 <li class="level-2"> 2719 <a href="https://www.flooringinc.com/shop/shop-by-activity/wrestling-mats.html" 2720 title="Wrestling Mats" 2721 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 2722 Wrestling Mats</a> 2723 </li> 2724 </ul> 2725 <a class="text-size16 font-normal text-black underline pl-5 mt-2 mb-6 inline-block" href="https://www.flooringinc.com/shop/shop-by-activity.html" x-show="show">View All</a> 2726 2727 2728 2729 2730 <li class="imgcat list-none relative" x-data="{ show: false }" > 2731 <a 2732 @click="show = !show" 2733 2734 title="Floors by Space" 2735 class="flex items-center cursor-pointer text-size18 font-normal text-black mb-4 mob-width-adjust" 2736 > 2737 <!-- <span class="w-6"></span> -->
2738 <span> 2739 Floors by Space </span> 2740 </a> 2741 2742 <picture class="absolute menu_arw"><source type="image/webp" srcset="https://www.flooringinc.com/static/version1789462004/frontend/Dcw/hyvamobile/en_US/images/menu-arw.webp"><img src="https://www.flooringinc.com/static/version1789462004/frontend/Dcw/hyvamobile/en_US/images/menu-arw.png" width="13" height="8" alt="menu-arw" @click="show = !show" class="absolute menu_arw" x-bind:class="show ? 'active' : ''"></picture> 2743 <ul class="z-10 w-full" x-show="show"> 2744 <li class="level-2"> 2745 <a href="https://www.flooringinc.com/shop/shop-by-space/kitchen-flooring.html" 2746 title="Kitchen Flooring" 2747 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 2748 Kitchen Flooring</a> 2749 </li> 2750 <li class="level-2"> 2751 <a href="https://www.flooringinc.com/shop/shop-by-space/bathroom-flooring.html" 2752 title="Bathroom Flooring" 2753 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 2754 Bathroom Flooring</a> 2755 </li> 2756 <li class="level-2"> 2757 <a href="https://www.flooringinc.com/shop/shop-by-space/commercial-flooring.html" 2758 title="Commercial Flooring" 2759 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 2760 Commercial Flooring</a> 2761 </li> 2762 <li class="level-2"> 2763 <a href="https://www.flooringinc.com/shop/shop-by-space/gym-flooring.html" 2764 title="Gym Flooring" 2765 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 2766 Gym Flooring</a> 2767 </li> 2768 <li class="level-2"> 2769 <a href="https://www.flooringinc.com/shop/shop-by-space/garage-flooring.html" 2770 title="Garage Flooring" 2771 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 2772 Garage Flooring</a> 2773 </li> 2774 <li class="level-2"> 2775 <a href="https://www.flooringinc.com/shop/shop-by-space/outdoor-flooring.html" 2776 title="Outdoor Flooring" 2777 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 2778 Outdoor Flooring</a> 2779 </li> 2780 </ul> 2781 <a class="text-size16 font-normal text-black underline pl-5 mt-2 mb-6 inline-block" href="https://www.flooringinc.com/shop/shop-by-space.html" x-show="show">View All</a> 2782 2783 2784 2785 2786 <li class="imgcat list-none relative" x-data="{ show: false }" > 2787 <a 2788 @click="show = !show" 2789 2790 title="Underlayment & Flooring Accessories" 2791 class="flex items-center cursor-pointer text-size18 font-normal text-black mb-4 mob-width-adjust" 2792 > 2793 <!-- <span class="w-6"></span> -->
2794 <span> 2795 Underlayment & Flooring Accessories </span> 2796 </a> 2797 2798 <picture class="absolute menu_arw"><source type="image/webp" srcset="https://www.flooringinc.com/static/version1789462004/frontend/Dcw/hyvamobile/en_US/images/menu-arw.webp"><img src="https://www.flooringinc.com/static/version1789462004/frontend/Dcw/hyvamobile/en_US/images/menu-arw.png" width="13" height="8" alt="menu-arw" @click="show = !show" class="absolute menu_arw" x-bind:class="show ? 'active' : ''"></picture> 2799 <ul class="z-10 w-full" x-show="show"> 2800 <li class="level-2"> 2801 <a href="https://www.flooringinc.com/shop/installation-care/adhesives-glue.html" 2802 title="Flooring Adhesives & Glue" 2803 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 2804 Flooring Adhesives & Glue</a> 2805 </li> 2806 <li class="level-2"> 2807 <a href="https://www.flooringinc.com/shop/installation-care/tape.html" 2808 title="Floor and Mat Tape" 2809 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 2810 Floor and Mat Tape</a> 2811 </li> 2812 <li class="level-2"> 2813 <a href="https://www.flooringinc.com/shop/installation-care/accessories.html" 2814 title="Installation Accessories" 2815 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 2816 Installation Accessories</a> 2817 </li> 2818 <li class="level-2"> 2819 <a href="https://www.flooringinc.com/shop/installation-care/trims-moldings.html" 2820 title="Floor Trims & Moldings" 2821 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 2822 Floor Trims & Moldings</a> 2823 </li> 2824 <li class="level-2"> 2825 <a href="https://www.flooringinc.com/shop/installation-care/underlayment.html" 2826 title="Flooring Underlayment" 2827 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 2828 Flooring Underlayment</a> 2829 </li> 2830 <li class="level-2"> 2831 <a href="https://www.flooringinc.com/shop/installation-care/cleaners.html" 2832 title="Flooring Cleaners" 2833 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 2834 Flooring Cleaners</a> 2835 </li> 2836 </ul> 2837 <a class="text-size16 font-normal text-black underline pl-5 mt-2 mb-6 inline-block" href="https://www.flooringinc.com/shop/installation-care.html" x-show="show">View All</a> 2838 2839 2840 2841 2842 <li class="imgcat list-none relative" x-data="{ show: false }" > 2843 <a 2844 @click="show = !show" 2845 2846 title="Specials" 2847 class="flex items-center cursor-pointer text-size18 font-normal text-black mb-4 mob-width-adjust" 2848 > 2849 <!-- <span class="w-6"></span> -->
2850 <span> 2851 Specials </span> 2852 </a> 2853 2854 <picture class="absolute menu_arw"><source type="image/webp" srcset="https://www.flooringinc.com/static/version1789462004/frontend/Dcw/hyvamobile/en_US/images/menu-arw.webp"><img src="https://www.flooringinc.com/static/version1789462004/frontend/Dcw/hyvamobile/en_US/images/menu-arw.png" width="13" height="8" alt="menu-arw" @click="show = !show" class="absolute menu_arw" x-bind:class="show ? 'active' : ''"></picture> 2855 <ul class="z-10 w-full" x-show="show"> 2856 <li class="level-2"> 2857 <a href="https://www.flooringinc.com/shop/specials/hot-buys.html" 2858 title="Flooring Deals" 2859 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 2860 Flooring Deals</a> 2861 </li> 2862 <li class="level-2"> 2863 <a href="https://www.flooringinc.com/shop/specials/made-in-usa.html" 2864 title="American Made" 2865 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 2866 American Made</a> 2867 </li> 2868 <li class="level-2"> 2869 <a href="https://www.flooringinc.com/shop/specials/quick-ship.html" 2870 title="Quick Ship" 2871 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 2872 Quick Ship</a> 2873 </li> 2874 <li class="level-2"> 2875 <a href="https://www.flooringinc.com/shop/specials/new-arrivals.html" 2876 title="New Arrivals" 2877 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 2878 New Arrivals</a> 2879 </li> 2880 </ul> 2881 2882 2883 </div> 2884 2885 2886 </div> 2887 <div class="menu_static_links"> 2888 <style>#html-body [data-pb-style=QGH21I8]{justify-content:flex-start;display:flex;flex-direction:column;background-position:left top;background-size:cover;background-repeat:no-repeat;background-attachment:scroll}</style><div data-content-type="row" data-appearance="contained" data-element="main"><div data-enable-parallax="0" data-parallax-speed="0.5" data-background-images="{}" data-background-type="image" data-video-loop="true" data-video-play-only-visible="true" data-video-lazy-load="true" data-video-fallback-src="" data-element="inner" data-pb-style="QGH21I8"><div data-content-type="text" data-appearance="default" data-element="main"><ul> 2889<li><a tabindex="0" href="/shop-by-category/specials/hot-buys.html">Sale</a></li> 2890<li><a tabindex="0" href="/blog">Get Inspired & How To</a></li> 2891</ul></div></div></div> </div> 2892 </div> 2893 </nav> 2894 </div> 2895</div>
2896<script> 2897 'use strict'; 2898 2899 const initMenuMobile_6ac15155197cd = () => { 2900 return { 2901 mobilePanelActiveId: null, 2902 open: false, 2903 setActiveMenu(menuNode) { 2904 Array.from(menuNode.querySelectorAll('a')).filter(link => { 2905 return link.href === window.location.href.split('?')[0]; 2906 }).map(item => { 2907 item.classList.add('underline'); 2908 item.closest('div.level-0') && 2909 item.closest('div.level-0').querySelector('a.level-0').classList.add('underline'); 2910 }); 2911 } 2912 } 2913 } 2914 2915 window.addEventListener("scroll", function() { 2916 successMsgSticky2(); 2917 }); 2918 2919 // sticky header 2920 function successMsgSticky2() { 2921 if (window.innerWidth < 767) { 2922 var headerHeight = document.querySelector('.page-header .panel.wrapper').offsetHeight; 2923 var headerMainHeight = document.getElementById('header').offsetHeight; 2924 var scrollTop = window.scrollY; 2925 2926 if (scrollTop >= headerHeight) { 2927 document.body.classList.add('scroll-reached-hHgt'); 2928 document.body.style.paddingTop = headerMainHeight + 'px'; 2929 } else { 2930 document.body.classList.remove('scroll-reached-hHgt'); 2931 document.body.style.paddingTop = '0'; 2932 } 2933 } 2934 } 2935 2936 window.addEventListener("load", function() { 2937 successMsgSticky2(); 2938 }); 2939 2940</script>
2940 2941 2942<div x-data="initMenuDesktop_6ac1515521319()" 2943 class="z-20 order-2 sm:order-1 lg:order-2 navigation hidden xl:flex desktop__menu" 2944> 2945 <!-- desktop --> 2946 <div @load.window="setActiveMenu($root)" 2947 class="justify-between items-center mx-auto w-full max-w-7xl pl-2" 2948 > 2949 <nav 2950 class="flex flex-wrap" 2951 > 2952 <div class="level-0 flex py-2 items-center border-transparent transition transition-colors duration-500 group megamenu_items" :class="{ 'block' : open}" 2953 @mouseover.stop="hoverTopPosition = $event.currentTarget.offsetTop + $event.currentTarget.getBoundingClientRect().height" 2954 @mouseenter="desktopMegaMenuShow = true" @mouseleave="desktopMegaMenuShow = false" 2955 x-data="{ desktopMegaMenuShow: false }" 2956 > 2957 <!-- <a href="https://www.flooringinc.com/shop.html" --> 2958 <a 2959 @focus="hoverTopPosition = $event.currentTarget.parentNode.offsetTop + $event.currentTarget.parentNode.getBoundingClientRect().height" 2960 title="Flooring By Category" 2961 class="level-0 block p-2 text-base font-medium text-black whitespace-nowrap cursor-pointer megamenu_items_link"> 2962 <span>Flooring By Category</span> 2963 <span class="inline items-center releat"> 2964 <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" class="w-5 h-5 inline" width="25" height="25" role="img"> 2965 <path fill-rule="evenodd" d="M5.293 7.293a1 1 0 011.414 0L10 10.586l3.293-3.293a1 1 0 111.414 1.414l-4 4a1 1 0 01-1.414 0l-4-4a1 1 0 010-1.414z" clip-rule="evenodd"/> 2966<title>chevron-down</title></svg> 2967 </span> 2968 </a> 2969 <template x-if="desktopMegaMenuShow"> 2970 <div class="absolute left-0 right-0 top-full z-10 -mt-3 w-3/4 mx-auto bg-white opacity-0 transition-opacity ease-out pointer-events-none group-hover:opacity-100 focus-within:opacity-100 group-hover:pointer-events-auto megamenu" 2971 style="display:none;" 2972 :style="`margin-top: 0; top: ${hoverTopPosition}px;`" 2973 > 2974 <div class="flex justify-between mt-0 mb-0 sub-megamenu"> 2975 <div class="mx-auto w-full"> 2976 <ul class="grid flex-1 w-full gap-y-0 gap-x-0 py-4 px-5 relative"> 2977 2978 <li :class="{ 'active': show }" class="level-1 level1 display-first" x-data="{ show: true }" 2979 x-on:click="show = true; removeDisplayFirst()" @click.away="show = false" 2980 > 2981 <a 2982 title="Rubber Flooring" 2983 class="level-1 w-1/4 py-1/5 px-6 text-size13 block text-sm rounded text-darkblack relative" 2984 2985 > 2986 Rubber Flooring 2987 <span class="inline items-center rotate-180 absolute"> 2988 <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" class="w-5 h-5 inline" width="25" height="25" role="img"> 2989 <path fill-rule="evenodd" d="M5.293 7.293a1 1 0 011.414 0L10 10.586l3.293-3.293a1 1 0 111.414 1.414l-4 4a1 1 0 01-1.414 0l-4-4a1 1 0 010-1.414z" clip-rule="evenodd"/> 2990<title>chevron-down</title></svg> 2991 </span> 2992 </a> 2993 2994 <div class="2xl:block w-1/4 mega-menu-rightBlock absolute top-0 right-0" x-show="show"> 2995 <style>#html-body [data-pb-style=IIM6H46]{justify-content:flex-start;display:flex;flex-direction:column;background-position:left top;background-size:cover;background-repeat:no-repeat;background-attachment:scroll}#html-body [data-pb-style=U0GMW4D]{border-style:none}#html-body [data-pb-style=CSIHBUF],#html-body [data-pb-style=HQMCF2E]{max-width:100%;height:auto}#html-body [data-pb-style=D3FJGJ6]{background-position:left top;background-size:cover;background-repeat:no-repeat;background-attachment:scroll;align-self:stretch}#html-body [data-pb-style=RR2V2I7]{display:flex;width:100%}#html-body [data-pb-style=PYIYA0A]{justify-content:flex-start;display:flex;flex-direction:column;background-position:left top;background-size:cover;background-repeat:no-repeat;background-attachment:scroll;width:100%;align-self:stretch}#html-body [data-pb-style=P1TMDVT]{text-align:left}#html-body [data-pb-style=F6SSOOO]{display:inline-block}#html-body [data-pb-style=K11XLVI]{text-align:center}@media only screen and (max-width: 768px) { #html-body [data-pb-style=U0GMW4D]{border-style:none} }</style><div class="mega_menu_banner" data-content-type="row" data-appearance="full-bleed" data-enable-parallax="0" data-parallax-speed="0.5" data-background-images="{}" data-background-type="image" data-video-loop="true" data-video-play-only-visible="true" data-video-lazy-load="true" data-video-fallback-src="" data-element="main" data-pb-style="IIM6H46"><figure data-content-type="image" data-appearance="full-width" data-element="main" data-pb-style="U0GMW4D"><a href="/next-day-rubber-rolls-14003.html" target="" data-link-type="default" title="" data-element="link"><picture class="pagebuilder-mobile-hidden"><source type="image/webp" srcset="https://www.flooringinc.com/media/wysiwyg/powered-by-rfi-image.webp"><img class="pagebuilder-mobile-hidden" src="https://www.flooringinc.com/media/wysiwyg/powered-by-rfi-image.jpg" alt="" title="" width="" height="" loading="lazy" data-element="desktop_image" data-pb-style="HQMCF2E" loading="lazy"></picture><picture class="pagebuilder-mobile-only"><source type="image/webp" srcset="https://www.flooringinc.com/media/wysiwyg/powered-by-rfi-image.webp"><img class="pagebuilder-mobile-only" src="https://www.flooringinc.com/media/wysiwyg/powered-by-rfi-image.jpg" alt="" title="" width="" height="" loading="lazy" data-element="mobile_image" data-pb-style="CSIHBUF" loading="lazy"></picture></a></figure><div class="pagebuilder-column-group" data-background-images="{}" data-content-type="column-group" data-appearance="default" data-grid-size="12" data-element="main" data-pb-style="D3FJGJ6"><div class="pagebuilder-column-line" data-content-type="column-line" data-element="main" data-pb-style="RR2V2I7"><div class="pagebuilder-column" data-content-type="column" data-appearance="full-height" data-background-images="{}" data-element="main" data-pb-style="PYIYA0A"><div class="text-size14 font-medium text-custom-black text-left pt-5 pb-1" data-content-type="text" data-appearance="default" data-element="main"><p>Powered By <picture><source type="image/webp" srcset="https://www.flooringinc.com/media/wysiwyg/website-logo-powerd-by-color-rfi.webp"><img src="https://www.flooringinc.com/media/wysiwyg/website-logo-powerd-by-color-rfi.png" alt="" width="87" height="15"></picture></p></div><div class="text-size18 text-custom-black font-bold text-left pt-2 pb-4" data-content-type="text" data-appearance="default" data-element="main"><h2><span style="font-size: 18px;">Premium Rubber Solutions</span></h2></div><div data-content-type="buttons" data-appearance="inline" data-same-width="false" data-element="main" data-pb-style="P1TMDVT" class="free__Shipping__btn"><div data-content-type="button-item" data-appearance="default" data-element="main" data-pb-style="F6SSOOO"><a class="pagebuilder-button-primary" href="/next-day-rubber-rolls-14003.html" target="" data-link-type="default" data-element="link" data-pb-style="K11XLVI"><span data-element="link_text">SHOP NOW</span></a></div></div></div></div></div></div> </div> 2996 2997 <ul class="z-10 w-1/2 absolute top-0 level2 flex flex-wrap pt-3 megamenu-extrablock" x-show="show">
2998 <span class="block w-full text-size28 font-medium no-underline text-darkblack pb-2">Rubber Flooring</span> 2999 3000 <li class="level-2 w-4/12 pr-6 pb-6"> 3001 <a href="https://www.flooringinc.com/shop/rubber-flooring/all-rubber-flooring.html" 3002 title="All Rubber Flooring" 3003 class="level-2 block"> 3004 <picture class="menucatimg rounded w-full mb-2"><source type="image/webp" srcset="https://www.flooringinc.com//media/catalog/category/all_rubber_main.webp"><img class="menucatimg rounded w-full mb-2" src="https://www.flooringinc.com//media/catalog/category/all_rubber_main.jpg" alt="All Rubber Flooring" title="All Rubber Flooring" /></picture> 3005 3006 <span class="block text-sm font-medium no-underline text-darkblack pr-4">All Rubber Flooring</span></a> 3007 </li> 3008 3009 <li class="level-2 w-4/12 pr-6 pb-6"> 3010 <a href="https://www.flooringinc.com/shop/rubber-flooring/rubber-rolls.html" 3011 title="Rubber Flooring Rolls" 3012 class="level-2 block"> 3013 <picture class="menucatimg rounded w-full mb-2"><source type="image/webp" srcset="https://www.flooringinc.com//media/catalog/category/rubber_rolls_category_main_1_.webp"><img class="menucatimg rounded w-full mb-2" src="https://www.flooringinc.com//media/catalog/category/rubber_rolls_category_main_1_.jpg" alt="Rubber Flooring Rolls" title="Rubber Flooring Rolls" /></picture> 3014 3015 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Rubber Flooring Rolls</span></a> 3016 </li> 3017 3018 <li class="level-2 w-4/12 pr-6 pb-6"> 3019 <a href="https://www.flooringinc.com/shop/rubber-flooring/rubber-tiles.html" 3020 title="Rubber Floor Tiles" 3021 class="level-2 block"> 3022 <picture class="menucatimg rounded w-full mb-2"><source type="image/webp" srcset="https://www.flooringinc.com//media/catalog/category/rubbertiles-main-category_1.webp"><img class="menucatimg rounded w-full mb-2" src="https://www.flooringinc.com//media/catalog/category/rubbertiles-main-category_1.jpg" alt="Rubber Floor Tiles" title="Rubber Floor Tiles" /></picture> 3023
3024 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Rubber Floor Tiles</span></a> 3025 </li> 3026 3027 <li class="level-2 w-4/12 pr-6 pb-6"> 3028 <a href="https://www.flooringinc.com/shop/rubber-flooring/rubber-mats.html" 3029 title="Rubber Mats" 3030 class="level-2 block"> 3031 <picture class="menucatimg rounded w-full mb-2"><source type="image/webp" srcset="https://www.flooringinc.com//media/catalog/category/rubbermats-main-category_1.webp"><img class="menucatimg rounded w-full mb-2" src="https://www.flooringinc.com//media/catalog/category/rubbermats-main-category_1.jpg" alt="Rubber Mats" title="Rubber Mats" /></picture> 3032 3033 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Rubber Mats</span></a> 3034 </li> 3035 3036 <li class="level-2 w-4/12 pr-6 pb-6"> 3037 <a href="https://www.flooringinc.com/shop/rubber-flooring/playground-flooring.html" 3038 title="Playground Flooring" 3039 class="level-2 block"> 3040 <picture class="menucatimg rounded w-full mb-2"><source type="image/webp" srcset="https://www.flooringinc.com//media/catalog/category/Playground_Flooring_Category.webp"><img class="menucatimg rounded w-full mb-2" src="https://www.flooringinc.com//media/catalog/category/Playground_Flooring_Category.jpg" alt="Playground Flooring" title="Playground Flooring" /></picture> 3041 3042 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Playground Flooring</span></a> 3043 </li> 3044 3045 <li class="level-2 w-4/12 pr-6 pb-6"> 3046 <a href="https://www.flooringinc.com/shop/rubber-flooring/outdoor-rubber-flooring.html" 3047 title="Outdoor Rubber Flooring" 3048 class="level-2 block"> 3049 <picture class="menucatimg rounded w-full mb-2"><source type="image/webp" srcset="https://www.flooringinc.com//media/catalog/category/fi_rubber_flooring_outdoor_rubber_flooing_1.webp"><img class="menucatimg rounded w-full mb-2" src="https://www.flooringinc.com//media/catalog/category/fi_rubber_flooring_outdoor_rubber_flooing_1.jpg" alt="Outdoor Rubber Flooring" title="Outdoor Rubber Flooring" /></picture> 3050
3051 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Outdoor Rubber Flooring</span></a> 3052 </li> 3053 3054 3055 <a class="view-all mt-2 underline-imp text-size12 font-medium text-darkblack absolute" style="top:410px;" href="https://www.flooringinc.com/shop/rubber-flooring.html" >View All</a> 3056 3057 3058 </ul> 3059 </li> 3060 3061 3062 3063 <li :class="{ 'active': show }" class="level-1 level1 " x-data="{ show: false }" 3064 x-on:click="show = true; removeDisplayFirst()" @click.away="show = false" 3065 > 3066 <a 3067 title="Garage Flooring" 3068 class="level-1 w-1/4 py-1/5 px-6 text-size13 block text-sm rounded text-darkblack relative" 3069 3070 > 3071 Garage Flooring 3072 <span class="inline items-center rotate-180 absolute"> 3073 <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" class="w-5 h-5 inline" width="25" height="25" role="img"> 3074 <path fill-rule="evenodd" d="M5.293 7.293a1 1 0 011.414 0L10 10.586l3.293-3.293a1 1 0 111.414 1.414l-4 4a1 1 0 01-1.414 0l-4-4a1 1 0 010-1.414z" clip-rule="evenodd"/> 3075<title>chevron-down</title></svg> 3076 </span> 3077 </a> 3078 3079 <div class="2xl:block w-1/4 mega-menu-rightBlock absolute top-0 right-0" x-show="show"> 3080 <style>#html-body [data-pb-style=H2Q94UM]{justify-content:flex-start;display:flex;flex-direction:column;background-position:left top;background-size:cover;background-repeat:no-repeat;background-attachment:scroll}#html-body [data-pb-style=C5CAQFQ]{border-style:none}#html-body [data-pb-style=FY780K4],#html-body [data-pb-style=P2NDU5I]{max-width:100%;height:auto}#html-body [data-pb-style=RFW0BPB]{background-position:left top;background-size:cover;background-repeat:no-repeat;background-attachment:scroll;align-self:stretch}#html-body [data-pb-style=MX73IJ8]{display:flex;width:100%}#html-body [data-pb-style=YYPRLU8]{justify-content:flex-start;display:flex;flex-direction:column;background-position:left top;background-size:cover;background-repeat:no-repeat;background-attachment:scroll;width:100%;align-self:stretch}#html-body [data-pb-style=TU662D2]{text-align:left}#html-body [data-pb-style=EXLNMTV]{display:inline-block}#html-body [data-pb-style=N31DM3P]{text-align:center}@media only screen and (max-width: 768px) { #html-body [data-pb-style=C5CAQFQ]{border-style:none} }</style><div class="mega_menu_banner" data-content-type="row" data-appearance="full-bleed" data-enable-parallax="0" data-parallax-speed="0.5" data-background-images="{}" data-background-type="image" data-video-loop="true" data-video-play-only-visible="true" data-video-lazy-load="true" data-video-fallback-src="" data-element="main" data-pb-style="H2Q94UM"><figure data-content-type="image" data-appearance="full-width" data-element="main" data-pb-style="C5CAQFQ"><a href="https://www.flooringinc.com/shop/flex-nitro-tiles-8985.html" target="" data-link-type="default" title="" data-element="link"><picture class="pagebuilder-mobile-hidden"><source type="image/webp" srcset="https://www.flooringinc.com/media/wysiwyg/nav-nitro-flex.webp"><img class="pagebuilder-mobile-hidden" src="https://www.flooringinc.com/media/wysiwyg/nav-nitro-flex.jpg" alt="" title="" width="" height="" loading="lazy" data-element="desktop_image" data-pb-style="FY780K4" loading="lazy"></picture><picture class="pagebuilder-mobile-only"><source type="image/webp" srcset="https://www.flooringinc.com/media/wysiwyg/nav-nitro-flex.webp"><img class="pagebuilder-mobile-only" src="https://www.flooringinc.com/media/wysiwyg/nav-nitro-flex.jpg" alt="" title="" width="" height="" loading="lazy" data-element="mobile_image" data-pb-style="P2NDU5I" loading="lazy"></picture></a></figure><div class="pagebuilder-column-group" data-background-images="{}" data-content-type="column-group" data-appearance="default" data-grid-size="12" data-element="main" data-pb-style="RFW0BPB"><div class="pagebuilder-column-line" data-content-type="column-line" data-element="main" data-pb-style="MX73IJ8"><div class="pagebuilder-column" data-content-type="column" data-appearance="full-height" data-background-images="{}" data-element="main" data-pb-style="YYPRLU8"><div data-content-type="buttons" data-appearance="inline" data-same-width="false" data-element="main" data-pb-style="TU662D2" class="free__Shipping__btn"><div data-content-type="button-item" data-appearance="default" data-element="main" data-pb-style="EXLNMTV"><a class="pagebuilder-button-primary" href="https://www.flooringinc.com/shop/flex-nitro-tiles-8985.html" target="" data-link-type="default" data-element="link" data-pb-style="N31DM3P"><span data-element="link_text">SHOP NOW</span></a></div></div></div></div></div></div> </div> 3081 3082 <ul class="z-10 w-1/2 absolute top-0 level2 flex flex-wrap pt-3 megamenu-extrablock" x-show="show">
3083 <span class="block w-full text-size28 font-medium no-underline text-darkblack pb-2">Garage Flooring</span> 3084 3085 <li class="level-2 w-4/12 pr-6 pb-6"> 3086 <a href="https://www.flooringinc.com/shop/garage-flooring/all-garage-flooring.html" 3087 title="All Garage Flooring" 3088 class="level-2 block"> 3089 <picture class="menucatimg rounded w-full mb-2"><source type="image/webp" srcset="https://www.flooringinc.com//media/catalog/category/All_Garage_Flooring.webp"><img class="menucatimg rounded w-full mb-2" src="https://www.flooringinc.com//media/catalog/category/All_Garage_Flooring.jpg" alt="All Garage Flooring" title="All Garage Flooring" /></picture> 3090 3091 <span class="block text-sm font-medium no-underline text-darkblack pr-4">All Garage Flooring</span></a> 3092 </li> 3093 3094 <li class="level-2 w-4/12 pr-6 pb-6"> 3095 <a href="https://www.flooringinc.com/shop/garage-flooring/garage-rolls.html" 3096 title="Garage Flooring Rolls" 3097 class="level-2 block"> 3098 <picture class="menucatimg rounded w-full mb-2"><source type="image/webp" srcset="https://www.flooringinc.com//media/catalog/category/garagerools-main-category_1.webp"><img class="menucatimg rounded w-full mb-2" src="https://www.flooringinc.com//media/catalog/category/garagerools-main-category_1.jpg" alt="Garage Flooring Rolls" title="Garage Flooring Rolls" /></picture> 3099 3100 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Garage Flooring Rolls</span></a> 3101 </li> 3102 3103 <li class="level-2 w-4/12 pr-6 pb-6"> 3104 <a href="https://www.flooringinc.com/shop/garage-flooring/garage-tiles.html" 3105 title="Garage Floor Tiles" 3106 class="level-2 block"> 3107 <picture class="menucatimg rounded w-full mb-2"><source type="image/webp" srcset="https://www.flooringinc.com//media/catalog/category/garagetiles-main-category_1.webp"><img class="menucatimg rounded w-full mb-2" src="https://www.flooringinc.com//media/catalog/category/garagetiles-main-category_1.jpg" alt="Garage Floor Tiles" title="Garage Floor Tiles" /></picture> 3108
3109 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Garage Floor Tiles</span></a> 3110 </li> 3111 3112 <li class="level-2 w-4/12 pr-6 pb-6"> 3113 <a href="https://www.flooringinc.com/shop/garage-flooring/garage-gym-flooring.html" 3114 title="Garage Gym Flooring" 3115 class="level-2 block"> 3116 <picture class="menucatimg rounded w-full mb-2"><source type="image/webp" srcset="https://www.flooringinc.com//media/catalog/category/fi_garage_flooring_garage_gym_flooring_1.webp"><img class="menucatimg rounded w-full mb-2" src="https://www.flooringinc.com//media/catalog/category/fi_garage_flooring_garage_gym_flooring_1.jpg" alt="Garage Gym Flooring" title="Garage Gym Flooring" /></picture> 3117 3118 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Garage Gym Flooring</span></a> 3119 </li> 3120 3121 <li class="level-2 w-4/12 pr-6 pb-6"> 3122 <a href="https://www.flooringinc.com/shop/garage-flooring/coatings-epoxy.html" 3123 title="Garage Floor Epoxy" 3124 class="level-2 block"> 3125 <picture class="menucatimg rounded w-full mb-2"><source type="image/webp" srcset="https://www.flooringinc.com//media/catalog/category/fi_garage_flooring_coatings_epoxy_1_1.webp"><img class="menucatimg rounded w-full mb-2" src="https://www.flooringinc.com//media/catalog/category/fi_garage_flooring_coatings_epoxy_1_1.jpg" alt="Garage Floor Epoxy" title="Garage Floor Epoxy" /></picture> 3126 3127 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Garage Floor Epoxy</span></a> 3128 </li> 3129 3130 <li class="level-2 w-4/12 pr-6 pb-6"> 3131 <a href="https://www.flooringinc.com/shop/garage-flooring/trailer-flooring.html" 3132 title="Trailer Flooring" 3133 class="level-2 block"> 3134 <picture class="menucatimg rounded w-full mb-2"><source type="image/webp" srcset="https://www.flooringinc.com//media/catalog/category/fi_garage_flooring_trailer_flooring_1.webp"><img class="menucatimg rounded w-full mb-2" src="https://www.flooringinc.com//media/catalog/category/fi_garage_flooring_trailer_flooring_1.jpg" alt="Trailer Flooring" title="Trailer Flooring" /></picture> 3135
3136 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Trailer Flooring</span></a> 3137 </li> 3138 3139 3140 <a class="view-all mt-2 underline-imp text-size12 font-medium text-darkblack absolute" style="top:410px;" href="https://www.flooringinc.com/shop/garage-flooring.html" >View All</a> 3141 3142 3143 </ul> 3144 </li> 3145 3146 3147 3148 <li :class="{ 'active': show }" class="level-1 level1 " x-data="{ show: false }" 3149 x-on:click="show = true; removeDisplayFirst()" @click.away="show = false" 3150 > 3151 <a 3152 title="Dance Flooring" 3153 class="level-1 w-1/4 py-1/5 px-6 text-size13 block text-sm rounded text-darkblack relative" 3154 3155 > 3156 Dance Flooring 3157 <span class="inline items-center rotate-180 absolute"> 3158 <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" class="w-5 h-5 inline" width="25" height="25" role="img"> 3159 <path fill-rule="evenodd" d="M5.293 7.293a1 1 0 011.414 0L10 10.586l3.293-3.293a1 1 0 111.414 1.414l-4 4a1 1 0 01-1.414 0l-4-4a1 1 0 010-1.414z" clip-rule="evenodd"/> 3160<title>chevron-down</title></svg> 3161 </span> 3162 </a> 3163 3164 <div class="2xl:block w-1/4 mega-menu-rightBlock absolute top-0 right-0" x-show="show"> 3165 <style>#html-body [data-pb-style=DE1KPIK]{justify-content:flex-start;display:flex;flex-direction:column;background-position:left top;background-size:cover;background-repeat:no-repeat;background-attachment:scroll}#html-body [data-pb-style=I9PHOLE]{border-style:none}#html-body [data-pb-style=PGOIAVD],#html-body [data-pb-style=XRTA8XP]{max-width:100%;height:auto}@media only screen and (max-width: 768px) { #html-body [data-pb-style=I9PHOLE]{border-style:none} }</style><div class="mega_menu_banner" data-content-type="row" data-appearance="full-bleed" data-enable-parallax="0" data-parallax-speed="0.5" data-background-images="{}" data-background-type="image" data-video-loop="true" data-video-play-only-visible="true" data-video-lazy-load="true" data-video-fallback-src="" data-element="main" data-pb-style="DE1KPIK"><figure data-content-type="image" data-appearance="full-width" data-element="main" data-pb-style="I9PHOLE"><a href="https://www.flooringinc.com/shop/prostep-dance-floor-rolls-9876.html" target="" data-link-type="default" title="" data-element="link"><picture class="pagebuilder-mobile-hidden"><source type="image/webp" srcset="https://www.flooringinc.com/media/wysiwyg/by-brand-ad.webp"><img class="pagebuilder-mobile-hidden" src="https://www.flooringinc.com/media/wysiwyg/by-brand-ad.jpg" alt="" title="" width="" height="" loading="lazy" data-element="desktop_image" data-pb-style="XRTA8XP" loading="lazy"></picture><picture class="pagebuilder-mobile-only"><source type="image/webp" srcset="https://www.flooringinc.com/media/wysiwyg/by-brand-ad.webp"><img class="pagebuilder-mobile-only" src="https://www.flooringinc.com/media/wysiwyg/by-brand-ad.jpg" alt="" title="" width="" height="" loading="lazy" data-element="mobile_image" data-pb-style="PGOIAVD" loading="lazy"></picture></a></figure></div> </div> 3166 3167 <ul class="z-10 w-1/2 absolute top-0 level2 flex flex-wrap pt-3 megamenu-extrablock" x-show="show">
3168 <span class="block w-full text-size28 font-medium no-underline text-darkblack pb-2">Dance Flooring</span> 3169 3170 <li class="level-2 w-4/12 pr-6 pb-6"> 3171 <a href="https://www.flooringinc.com/shop/dance-flooring/marley-flooring.html" 3172 title="Marley Floor Rolls" 3173 class="level-2 block"> 3174 <picture class="menucatimg rounded w-full mb-2"><source type="image/webp" srcset="https://www.flooringinc.com//media/catalog/category/Marley_Dance_Floor_Rolls_Category_1.webp"><img class="menucatimg rounded w-full mb-2" src="https://www.flooringinc.com//media/catalog/category/Marley_Dance_Floor_Rolls_Category_1.jpg" alt="Marley Floor Rolls" title="Marley Floor Rolls" /></picture> 3175 3176 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Marley Floor Rolls</span></a> 3177 </li> 3178 3179 <li class="level-2 w-4/12 pr-6 pb-6"> 3180 <a href="https://www.flooringinc.com/shop/dance-flooring/dance-floor-tiles.html" 3181 title="Dance Floor Tiles" 3182 class="level-2 block"> 3183 <picture class="menucatimg rounded w-full mb-2"><source type="image/webp" srcset="https://www.flooringinc.com//media/catalog/category/Dance_Floor_Tiles_Category_1.webp"><img class="menucatimg rounded w-full mb-2" src="https://www.flooringinc.com//media/catalog/category/Dance_Floor_Tiles_Category_1.jpg" alt="Dance Floor Tiles" title="Dance Floor Tiles" /></picture> 3184 3185 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Dance Floor Tiles</span></a> 3186 </li> 3187 3188 <li class="level-2 w-4/12 pr-6 pb-6"> 3189 <a href="https://www.flooringinc.com/shop/dance-flooring/portable-dance-floor-kits.html" 3190 title="Portable Dance Floors & Kits" 3191 class="level-2 block"> 3192 <picture class="menucatimg rounded w-full mb-2"><source type="image/webp" srcset="https://www.flooringinc.com//media/catalog/category/Portable_Dance_Floor_Kits_Category_1.webp"><img class="menucatimg rounded w-full mb-2" src="https://www.flooringinc.com//media/catalog/category/Portable_Dance_Floor_Kits_Category_1.jpg" alt="Portable Dance Floors & Kits" title="Portable Dance Floors & Kits" /></picture> 3193
3194 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Portable Dance Floors & Kits</span></a> 3195 </li> 3196 3197 <li class="level-2 w-4/12 pr-6 pb-6"> 3198 <a href="https://www.flooringinc.com/shop/dance-flooring/subflooring.html" 3199 title="Subflooring" 3200 class="level-2 block"> 3201 <picture class="menucatimg rounded w-full mb-2"><source type="image/webp" srcset="https://www.flooringinc.com//media/catalog/category/Dance_Subflooring_Category_1_1.webp"><img class="menucatimg rounded w-full mb-2" src="https://www.flooringinc.com//media/catalog/category/Dance_Subflooring_Category_1_1.jpg" alt="Subflooring" title="Subflooring" /></picture> 3202 3203 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Subflooring</span></a> 3204 </li> 3205 3206 <li class="level-2 w-4/12 pr-6 pb-6"> 3207 <a href="https://www.flooringinc.com/shop/dance-flooring/adhesives-cleaners-accessories.html" 3208 title="Adhesives, Cleaners & Accessories" 3209 class="level-2 block"> 3210 <picture class="menucatimg rounded w-full mb-2"><source type="image/webp" srcset="https://www.flooringinc.com//media/catalog/category/Dance_Floor_Accessories.webp"><img class="menucatimg rounded w-full mb-2" src="https://www.flooringinc.com//media/catalog/category/Dance_Floor_Accessories.jpg" alt="Adhesives, Cleaners & Accessories" title="Adhesives, Cleaners & Accessories" /></picture> 3211 3212 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Adhesives, Cleaners & Accessories</span></a> 3213 </li> 3214 3215 <li class="level-2 w-4/12 pr-6 pb-6"> 3216 <a href="https://www.flooringinc.com/shop/dance-flooring/all-dance-flooring.html" 3217 title="All Dance Flooring" 3218 class="level-2 block"> 3219 <picture class="menucatimg rounded w-full mb-2"><source type="image/webp" srcset="https://www.flooringinc.com//media/catalog/category/All_Dance_Flooring_Category.webp"><img class="menucatimg rounded w-full mb-2" src="https://www.flooringinc.com//media/catalog/category/All_Dance_Flooring_Category.jpg" alt="All Dance Flooring" title="All Dance Flooring" /></picture> 3220
3221 <span class="block text-sm font-medium no-underline text-darkblack pr-4">All Dance Flooring</span></a> 3222 </li> 3223 3224 3225 <a class="view-all mt-2 underline-imp text-size12 font-medium text-darkblack absolute" style="top:410px;" href="https://www.flooringinc.com/shop/dance-flooring.html" >View All</a> 3226 3227 3228 </ul> 3229 </li> 3230 3231 3232 3233 <li :class="{ 'active': show }" class="level-1 level1 " x-data="{ show: false }" 3234 x-on:click="show = true; removeDisplayFirst()" @click.away="show = false" 3235 > 3236 <a 3237 title="Foam Flooring" 3238 class="level-1 w-1/4 py-1/5 px-6 text-size13 block text-sm rounded text-darkblack relative" 3239 3240 > 3241 Foam Flooring 3242 <span class="inline items-center rotate-180 absolute"> 3243 <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" class="w-5 h-5 inline" width="25" height="25" role="img"> 3244 <path fill-rule="evenodd" d="M5.293 7.293a1 1 0 011.414 0L10 10.586l3.293-3.293a1 1 0 111.414 1.414l-4 4a1 1 0 01-1.414 0l-4-4a1 1 0 010-1.414z" clip-rule="evenodd"/> 3245<title>chevron-down</title></svg> 3246 </span> 3247 </a> 3248 3249 <div class="2xl:block w-1/4 mega-menu-rightBlock absolute top-0 right-0" x-show="show"> 3250 <style>#html-body [data-pb-style=V4QEB1B]{justify-content:flex-start;display:flex;flex-direction:column;background-position:left top;background-size:cover;background-repeat:no-repeat;background-attachment:scroll}#html-body [data-pb-style=RATJYYQ]{border-style:none}#html-body [data-pb-style=C8AYEH6],#html-body [data-pb-style=K3BTVRB]{max-width:100%;height:auto}#html-body [data-pb-style=C9LYQAD]{background-position:left top;background-size:cover;background-repeat:no-repeat;background-attachment:scroll;align-self:stretch}#html-body [data-pb-style=WFJJ3YQ]{display:flex;width:100%}#html-body [data-pb-style=IJTR1TW]{justify-content:flex-start;display:flex;flex-direction:column;background-position:left top;background-size:cover;background-repeat:no-repeat;background-attachment:scroll;width:100%;align-self:stretch}#html-body [data-pb-style=UUFOJKP]{text-align:left}#html-body [data-pb-style=LCUDGB3]{display:inline-block}#html-body [data-pb-style=E91VWL4]{text-align:center}@media only screen and (max-width: 768px) { #html-body [data-pb-style=RATJYYQ]{border-style:none} }</style><div class="mega_menu_banner" data-content-type="row" data-appearance="full-bleed" data-enable-parallax="0" data-parallax-speed="0.5" data-background-images="{}" data-background-type="image" data-video-loop="true" data-video-play-only-visible="true" data-video-lazy-load="true" data-video-fallback-src="" data-element="main" data-pb-style="V4QEB1B"><figure data-content-type="image" data-appearance="full-width" data-element="main" data-pb-style="RATJYYQ"><a href="/shop/foam-flooring.html" target="" data-link-type="default" title="" data-element="link"><picture class="pagebuilder-mobile-hidden"><source type="image/webp" srcset="https://www.flooringinc.com/media/wysiwyg/powered-by-ft-image.webp"><img class="pagebuilder-mobile-hidden" src="https://www.flooringinc.com/media/wysiwyg/powered-by-ft-image.jpg" alt="" title="" width="" height="" loading="lazy" data-element="desktop_image" data-pb-style="K3BTVRB" loading="lazy"></picture><picture class="pagebuilder-mobile-only"><source type="image/webp" srcset="https://www.flooringinc.com/media/wysiwyg/powered-by-ft-image.webp"><img class="pagebuilder-mobile-only" src="https://www.flooringinc.com/media/wysiwyg/powered-by-ft-image.jpg" alt="" title="" width="" height="" loading="lazy" data-element="mobile_image" data-pb-style="C8AYEH6" loading="lazy"></picture></a></figure><div class="pagebuilder-column-group" data-background-images="{}" data-content-type="column-group" data-appearance="default" data-grid-size="12" data-element="main" data-pb-style="C9LYQAD"><div class="pagebuilder-column-line" data-content-type="column-line" data-element="main" data-pb-style="WFJJ3YQ"><div class="pagebuilder-column" data-content-type="column" data-appearance="full-height" data-background-images="{}" data-element="main" data-pb-style="IJTR1TW"><div class="text-size14 font-medium text-custom-black text-left pt-5 pb-1" data-content-type="text" data-appearance="default" data-element="main"><p>Powered By <picture><source type="image/webp" srcset="https://www.flooringinc.com/media/wysiwyg/6000x2556_FT.webp"><img src="https://www.flooringinc.com/media/wysiwyg/6000x2556_FT.png" alt="" width="100" height="26"></picture></p></div><div class="text-size18 text-custom-black font-bold text-left pt-2 pb-4" data-content-type="text" data-appearance="default" data-element="main"><h2><span style="font-size: 18px;">Elite Sports Surfaces</span></h2></div><div data-content-type="buttons" data-appearance="inline" data-same-width="false" data-element="main" data-pb-style="UUFOJKP" class="free__Shipping__btn"><div data-content-type="button-item" data-appearance="default" data-element="main" data-pb-style="LCUDGB3"><a class="pagebuilder-button-primary" href="/shop/foam-flooring.html" target="" data-link-type="default" data-element="link" data-pb-style="E91VWL4"><span data-element="link_text">SHOP NOW</span></a></div></div></div></div></div></div> </div> 3251 3252 <ul class="z-10 w-1/2 absolute top-0 level2 flex flex-wrap pt-3 megamenu-extrablock" x-show="show">
3253 <span class="block w-full text-size28 font-medium no-underline text-darkblack pb-2">Foam Flooring</span> 3254 3255 <li class="level-2 w-4/12 pr-6 pb-6"> 3256 <a href="https://www.flooringinc.com/shop/foam-flooring/foam-tiles.html" 3257 title="Foam Floor Tiles" 3258 class="level-2 block"> 3259 <picture class="menucatimg rounded w-full mb-2"><source type="image/webp" srcset="https://www.flooringinc.com//media/catalog/category/foamtiles-main-category_1.webp"><img class="menucatimg rounded w-full mb-2" src="https://www.flooringinc.com//media/catalog/category/foamtiles-main-category_1.jpg" alt="Foam Floor Tiles" title="Foam Floor Tiles" /></picture> 3260 3261 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Foam Floor Tiles</span></a> 3262 </li> 3263 3264 <li class="level-2 w-4/12 pr-6 pb-6"> 3265 <a href="https://www.flooringinc.com/shop/foam-flooring/kids-baby-play-mats.html" 3266 title="Kids & Baby Play Mats" 3267 class="level-2 block"> 3268 <picture class="menucatimg rounded w-full mb-2"><source type="image/webp" srcset="https://www.flooringinc.com//media/catalog/category/Kids_Baby_Play_Mats.webp"><img class="menucatimg rounded w-full mb-2" src="https://www.flooringinc.com//media/catalog/category/Kids_Baby_Play_Mats.jpg" alt="Kids & Baby Play Mats" title="Kids & Baby Play Mats" /></picture> 3269 3270 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Kids & Baby Play Mats</span></a> 3271 </li> 3272 3273 <li class="level-2 w-4/12 pr-6 pb-6"> 3274 <a href="https://www.flooringinc.com/shop/foam-flooring/gymnastic-folding-mats.html" 3275 title="Gymnastics Mats " 3276 class="level-2 block"> 3277 <picture class="menucatimg rounded w-full mb-2"><source type="image/webp" srcset="https://www.flooringinc.com//media/catalog/category/Gymnastics_Mat_Category_1.webp"><img class="menucatimg rounded w-full mb-2" src="https://www.flooringinc.com//media/catalog/category/Gymnastics_Mat_Category_1.jpg" alt="Gymnastics Mats " title="Gymnastics Mats " /></picture> 3278
3279 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Gymnastics Mats </span></a> 3280 </li> 3281 3282 <li class="level-2 w-4/12 pr-6 pb-6"> 3283 <a href="https://www.flooringinc.com/shop/foam-flooring/wrestling-mats.html" 3284 title="Wrestling Mats" 3285 class="level-2 block"> 3286 <picture class="menucatimg rounded w-full mb-2"><source type="image/webp" srcset="https://www.flooringinc.com//media/catalog/category/Wrestling_Mats_Category_2.webp"><img class="menucatimg rounded w-full mb-2" src="https://www.flooringinc.com//media/catalog/category/Wrestling_Mats_Category_2.jpg" alt="Wrestling Mats" title="Wrestling Mats" /></picture> 3287 3288 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Wrestling Mats</span></a> 3289 </li> 3290 3291 <li class="level-2 w-4/12 pr-6 pb-6"> 3292 <a href="https://www.flooringinc.com/shop/foam-flooring/martial-arts-mats.html" 3293 title="Martial Arts Mats " 3294 class="level-2 block"> 3295 <picture class="menucatimg rounded w-full mb-2"><source type="image/webp" srcset="https://www.flooringinc.com//media/catalog/category/Martial_Arts_Mats_Category_1_.webp"><img class="menucatimg rounded w-full mb-2" src="https://www.flooringinc.com//media/catalog/category/Martial_Arts_Mats_Category_1_.jpg" alt="Martial Arts Mats " title="Martial Arts Mats " /></picture> 3296 3297 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Martial Arts Mats </span></a> 3298 </li> 3299 3300 <li class="level-2 w-4/12 pr-6 pb-6"> 3301 <a href="https://www.flooringinc.com/shop/foam-flooring/trade-show-flooring.html" 3302 title="Trade Show Flooring" 3303 class="level-2 block"> 3304 <picture class="menucatimg rounded w-full mb-2"><source type="image/webp" srcset="https://www.flooringinc.com//media/catalog/category/Trade_Show_Flooring.webp"><img class="menucatimg rounded w-full mb-2" src="https://www.flooringinc.com//media/catalog/category/Trade_Show_Flooring.jpg" alt="Trade Show Flooring" title="Trade Show Flooring" /></picture> 3305
3306 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Trade Show Flooring</span></a> 3307 </li> 3308 3309 3310 <a class="view-all mt-2 underline-imp text-size12 font-medium text-darkblack absolute" style="top:410px;" href="https://www.flooringinc.com/shop/foam-flooring.html" >View All</a> 3311 3312 3313 </ul> 3314 </li> 3315 3316 3317 3318 <li :class="{ 'active': show }" class="level-1 level1 " x-data="{ show: false }" 3319 x-on:click="show = true; removeDisplayFirst()" @click.away="show = false" 3320 > 3321 <a 3322 title="Outdoor Flooring" 3323 class="level-1 w-1/4 py-1/5 px-6 text-size13 block text-sm rounded text-darkblack relative" 3324 3325 > 3326 Outdoor Flooring 3327 <span class="inline items-center rotate-180 absolute"> 3328 <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" class="w-5 h-5 inline" width="25" height="25" role="img"> 3329 <path fill-rule="evenodd" d="M5.293 7.293a1 1 0 011.414 0L10 10.586l3.293-3.293a1 1 0 111.414 1.414l-4 4a1 1 0 01-1.414 0l-4-4a1 1 0 010-1.414z" clip-rule="evenodd"/> 3330<title>chevron-down</title></svg> 3331 </span> 3332 </a> 3333 3334 <div class="2xl:block w-1/4 mega-menu-rightBlock absolute top-0 right-0" x-show="show"> 3335 <style>#html-body [data-pb-style=ALQ4JPY]{justify-content:flex-start;display:flex;flex-direction:column;background-position:left top;background-size:cover;background-repeat:no-repeat;background-attachment:scroll}#html-body [data-pb-style=TAKV2W6]{border-style:none}#html-body [data-pb-style=HFLT9TD],#html-body [data-pb-style=Q8I554G]{max-width:100%;height:auto}#html-body [data-pb-style=FM097SK]{background-position:left top;background-size:cover;background-repeat:no-repeat;background-attachment:scroll;align-self:stretch}#html-body [data-pb-style=P04UNTQ]{display:flex;width:100%}#html-body [data-pb-style=DWKW6WK]{justify-content:flex-start;display:flex;flex-direction:column;background-position:left top;background-size:cover;background-repeat:no-repeat;background-attachment:scroll;width:100%;align-self:stretch}#html-body [data-pb-style=UW72WSA]{text-align:left}#html-body [data-pb-style=GY38RBS]{display:inline-block}#html-body [data-pb-style=W6R7Y9S]{text-align:center}@media only screen and (max-width: 768px) { #html-body [data-pb-style=TAKV2W6]{border-style:none} }</style><div class="mega_menu_banner" data-content-type="row" data-appearance="full-bleed" data-enable-parallax="0" data-parallax-speed="0.5" data-background-images="{}" data-background-type="image" data-video-loop="true" data-video-play-only-visible="true" data-video-lazy-load="true" data-video-fallback-src="" data-element="main" data-pb-style="ALQ4JPY"><figure data-content-type="image" data-appearance="full-width" data-element="main" data-pb-style="TAKV2W6"><a href="/helios-deck-tiles-13850.html" target="" data-link-type="default" title="" data-element="link"><picture class="pagebuilder-mobile-hidden"><source type="image/webp" srcset="https://www.flooringinc.com/media/wysiwyg/outdoor-flooring-image.
3335webp"><img class="pagebuilder-mobile-hidden" src="https://www.flooringinc.com/media/wysiwyg/outdoor-flooring-image.jpg" alt="" title="" width="" height="" loading="lazy" data-element="desktop_image" data-pb-style="Q8I554G" loading="lazy"></picture><picture class="pagebuilder-mobile-only"><source type="image/webp" srcset="https://www.flooringinc.com/media/wysiwyg/outdoor-flooring-image.webp"><img class="pagebuilder-mobile-only" src="https://www.flooringinc.com/media/wysiwyg/outdoor-flooring-image.jpg" alt="" title="" width="" height="" loading="lazy" data-element="mobile_image" data-pb-style="HFLT9TD" loading="lazy"></picture></a></figure><div class="pagebuilder-column-group" data-background-images="{}" data-content-type="column-group" data-appearance="default" data-grid-size="12" data-element="main" data-pb-style="FM097SK"><div class="pagebuilder-column-line" data-content-type="column-line" data-element="main" data-pb-style="P04UNTQ"><div class="pagebuilder-column" data-content-type="column" data-appearance="full-height" data-background-images="{}" data-element="main" data-pb-style="DWKW6WK"><div class="text-size14 font-medium text-custom-black text-left pt-5" data-content-type="text" data-appearance="default" data-element="main"><p><picture><source type="image/webp" srcset="https://www.flooringinc.com/media/wysiwyg/Helios_Color.webp"><img src="https://www.flooringinc.com/media/wysiwyg/Helios_Color.png" alt="" width="100" height="33"></picture></p></div><div class="text-size18 text-custom-black font-bold text-left pt-1 pb-5" data-content-type="text" data-appearance="default" data-element="main"><h2><span style="font-size: 18px;">Helios Deck Tiles</span></h2></div><div data-content-type="buttons" data-appearance="inline" data-same-width="false" data-element="main" data-pb-style="UW72WSA" class="free__Shipping__btn"><div data-content-type="button-item" data-appearance="default" data-element="main" data-pb-style="GY38RBS"><a class="pagebuilder-button-primary" href="/helios-deck-tiles-13850.html" target="" data-link-type="default" data-element="link" data-pb-style="W6R7Y9S"><span data-element="link_text">SHOP NOW</span></a></div></div></div></div></div></div> </div> 3336 3337 <ul class="z-10 w-1/2 absolute top-0 level2 flex flex-wrap pt-3 megamenu-extrablock" x-show="show"> 3338 <span class="block w-full text-size28 font-medium no-underline text-darkblack pb-2">Outdoor Flooring</span> 3339 3340 <li class="level-2 w-4/12 pr-6 pb-6"> 3341 <a href="https://www.flooringinc.com/shop/outdoor-flooring/playground-flooring.html" 3342 title="Playground Flooring" 3343 class="level-2 block"> 3344 <picture class="menucatimg rounded w-full mb-2"><source type="image/webp" srcset="https://www.flooringinc.com//media/catalog/category/Playground_Flooring_Category_1.webp"><img class="menucatimg rounded w-full mb-2" src="https://www.flooringinc.com//media/catalog/category/Playground_Flooring_Category_1.jpg" alt="Playground Flooring" title="Playground Flooring" /></picture> 3345 3346 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Playground Flooring</span></a> 3347 </li> 3348 3349 <li class="level-2 w-4/12 pr-6 pb-6"> 3350 <a href="https://www.flooringinc.com/shop/outdoor-flooring/sport-and-court-flooring.html" 3351 title="Sports Flooring & Court Tiles" 3352 class="level-2 block"> 3353 <picture class="menucatimg rounded w-full mb-2"><source type="image/webp" srcset="https://www.flooringinc.com//media/catalog/category/court-main-category_1.webp"><img class="menucatimg rounded w-full mb-2" src="https://www.flooringinc.com//media/catalog/category/court-main-category_1.jpg" alt="Sports Flooring & Court Tiles" title="Sports Flooring & Court Tiles" /></picture> 3354
3355 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Sports Flooring & Court Tiles</span></a> 3356 </li> 3357 3358 <li class="level-2 w-4/12 pr-6 pb-6"> 3359 <a href="https://www.flooringinc.com/shop/outdoor-flooring/artificial-grass.html" 3360 title="Turf & Artificial Grass" 3361 class="level-2 block"> 3362 <picture class="menucatimg rounded w-full mb-2"><source type="image/webp" srcset="https://www.flooringinc.com//media/catalog/category/fi_outdoor_flooring_artifical_grass_1.webp"><img class="menucatimg rounded w-full mb-2" src="https://www.flooringinc.com//media/catalog/category/fi_outdoor_flooring_artifical_grass_1.jpg" alt="Turf & Artificial Grass" title="Turf & Artificial Grass" /></picture> 3363 3364 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Turf & Artificial Grass</span></a> 3365 </li> 3366 3367 <li class="level-2 w-4/12 pr-6 pb-6"> 3368 <a href="https://www.flooringinc.com/shop/outdoor-flooring/composite-decking.html" 3369 title="Composite Decking" 3370 class="level-2 block"> 3371 <picture class="menucatimg rounded w-full mb-2"><source type="image/webp" srcset="https://www.flooringinc.com//media/catalog/category/Composite_Decking_Category.webp"><img class="menucatimg rounded w-full mb-2" src="https://www.flooringinc.com//media/catalog/category/Composite_Decking_Category.jpg" alt="Composite Decking" title="Composite Decking" /></picture> 3372 3373 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Composite Decking</span></a> 3374 </li> 3375 3376 <li class="level-2 w-4/12 pr-6 pb-6"> 3377 <a href="https://www.flooringinc.com/shop/outdoor-flooring/rooftop-deck-flooring.html" 3378 title="Rooftop Deck Flooring" 3379 class="level-2 block"> 3380 <picture class="menucatimg rounded w-full mb-2"><source type="image/webp" srcset="https://www.flooringinc.com//media/catalog/category/Rooftop_Deck_Flooring_Category_1.webp"><img class="menucatimg rounded w-full mb-2" src="https://www.flooringinc.com//media/catalog/category/Rooftop_Deck_Flooring_Category_1.jpg" alt="Rooftop Deck Flooring" title="Rooftop Deck Flooring" /></picture> 3381
3382 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Rooftop Deck Flooring</span></a> 3383 </li> 3384 3385 <li class="level-2 w-4/12 pr-6 pb-6"> 3386 <a href="https://www.flooringinc.com/shop/outdoor-flooring/drainage-tiles.html" 3387 title="Drainage Tile & Mats" 3388 class="level-2 block"> 3389 <picture class="menucatimg rounded w-full mb-2"><source type="image/webp" srcset="https://www.flooringinc.com//media/catalog/category/Drainage_Tiles_Category_01.webp"><img class="menucatimg rounded w-full mb-2" src="https://www.flooringinc.com//media/catalog/category/Drainage_Tiles_Category_01.jpg" alt="Drainage Tile & Mats" title="Drainage Tile & Mats" /></picture> 3390 3391 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Drainage Tile & Mats</span></a> 3392 </li> 3393 3394 3395 <a class="view-all mt-2 underline-imp text-size12 font-medium text-darkblack absolute" style="top:410px;" href="https://www.flooringinc.com/shop/outdoor-flooring.html" >View All</a> 3396 3397 3398 </ul> 3399 </li> 3400 3401 3402 3403 <li :class="{ 'active': show }" class="level-1 level1 " x-data="{ show: false }" 3404 x-on:click="show = true; removeDisplayFirst()" @click.away="show = false" 3405 > 3406 <a 3407 title="Turf & Artificial Grass" 3408 class="level-1 w-1/4 py-1/5 px-6 text-size13 block text-sm rounded text-darkblack relative" 3409 3410 > 3411 Turf & Artificial Grass 3412 <span class="inline items-center rotate-180 absolute"> 3413 <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" class="w-5 h-5 inline" width="25" height="25" role="img"> 3414 <path fill-rule="evenodd" d="M5.293 7.293a1 1 0 011.414 0L10 10.586l3.293-3.293a1 1 0 111.414 1.414l-4 4a1 1 0 01-1.414 0l-4-4a1 1 0 010-1.414z" clip-rule="evenodd"/> 3415<title>chevron-down</title></svg> 3416 </span> 3417 </a> 3418 3419 <ul class="z-10 w-1/2 absolute top-0 level2 flex flex-wrap pt-3 megamenu-extrablock" x-show="show">
3420 <span class="block w-full text-size28 font-medium no-underline text-darkblack pb-2">Turf & Artificial Grass</span> 3421 3422 <li class="level-2 w-4/12 pr-6 pb-6"> 3423 <a href="https://www.flooringinc.com/shop/artificial-grass/sport-field-turf.html" 3424 title="Sport & Gym Turf" 3425 class="level-2 block"> 3426 <picture class="menucatimg rounded w-full mb-2"><source type="image/webp" srcset="https://www.flooringinc.com//media/catalog/category/10079_0_1_3_.webp"><img class="menucatimg rounded w-full mb-2" src="https://www.flooringinc.com//media/catalog/category/10079_0_1_3_.jpg" alt="Sport & Gym Turf" title="Sport & Gym Turf" /></picture> 3427 3428 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Sport & Gym Turf</span></a> 3429 </li> 3430 3431 <li class="level-2 w-4/12 pr-6 pb-6"> 3432 <a href="https://www.flooringinc.com/shop/artificial-grass/landscape-turf.html" 3433 title="Landscape Turf" 3434 class="level-2 block"> 3435 <picture class="menucatimg rounded w-full mb-2"><source type="image/webp" srcset="https://www.flooringinc.com//media/catalog/category/fi_artifical_grass_landscape_turf_2.webp"><img class="menucatimg rounded w-full mb-2" src="https://www.flooringinc.com//media/catalog/category/fi_artifical_grass_landscape_turf_2.jpg" alt="Landscape Turf" title="Landscape Turf" /></picture> 3436 3437 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Landscape Turf</span></a> 3438 </li> 3439 3440 <li class="level-2 w-4/12 pr-6 pb-6"> 3441 <a href="https://www.flooringinc.com/shop/artificial-grass/pet-turf.html" 3442 title="Pet Turf" 3443 class="level-2 block"> 3444 <picture class="menucatimg rounded w-full mb-2"><source type="image/webp" srcset="https://www.flooringinc.com//media/catalog/category/fi_artifical_grass_pet_turf_3.webp"><img class="menucatimg rounded w-full mb-2" src="https://www.flooringinc.com//media/catalog/category/fi_artifical_grass_pet_turf_3.jpg" alt="Pet Turf" title="Pet Turf" /></picture> 3445
3446 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Pet Turf</span></a> 3447 </li> 3448 3449 <li class="level-2 w-4/12 pr-6 pb-6"> 3450 <a href="https://www.flooringinc.com/shop/artificial-grass/putting-greens.html" 3451 title="Golf & Putting Green Turf" 3452 class="level-2 block"> 3453 <picture class="menucatimg rounded w-full mb-2"><source type="image/webp" srcset="https://www.flooringinc.com//media/catalog/category/fi_artifical_grass_putting_greens_1.webp"><img class="menucatimg rounded w-full mb-2" src="https://www.flooringinc.com//media/catalog/category/fi_artifical_grass_putting_greens_1.jpg" alt="Golf & Putting Green Turf" title="Golf & Putting Green Turf" /></picture> 3454 3455 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Golf & Putting Green Turf</span></a> 3456 </li> 3457 3458 <li class="level-2 w-4/12 pr-6 pb-6"> 3459 <a href="https://www.flooringinc.com/shop/artificial-grass/turf-accessories.html" 3460 title="Turf Accessories" 3461 class="level-2 block"> 3462 <picture class="menucatimg rounded w-full mb-2"><source type="image/webp" srcset="https://www.flooringinc.com//media/catalog/category/Untitled_design_1_.webp"><img class="menucatimg rounded w-full mb-2" src="https://www.flooringinc.com//media/catalog/category/Untitled_design_1_.png" alt="Turf Accessories" title="Turf Accessories" /></picture> 3463 3464 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Turf Accessories</span></a> 3465 </li> 3466 3467 <li class="level-2 w-4/12 pr-6 pb-6"> 3468 <a href="https://www.flooringinc.com/shop/artificial-grass/all-artificial-grass.html" 3469 title="All Turf & Artificial Grass" 3470 class="level-2 block"> 3471 <picture class="menucatimg rounded w-full mb-2"><source type="image/webp" srcset="https://www.flooringinc.com//media/catalog/category/All_Artificial_Grass2_1.webp"><img class="menucatimg rounded w-full mb-2" src="https://www.flooringinc.com//media/catalog/category/All_Artificial_Grass2_1.jpg" alt="All Turf & Artificial Grass" title="All Turf & Artificial Grass" /></picture> 3472
3473 <span class="block text-sm font-medium no-underline text-darkblack pr-4">All Turf & Artificial Grass</span></a> 3474 </li> 3475 3476 3477 <a class="view-all mt-2 underline-imp text-size12 font-medium text-darkblack absolute" style="top:410px;" href="https://www.flooringinc.com/shop/artificial-grass.html" >View All</a> 3478 3479 3480 </ul> 3481 </li> 3482 3483 3484 3485 <li :class="{ 'active': show }" class="level-1 level1 " x-data="{ show: false }" 3486 x-on:click="show = true; removeDisplayFirst()" @click.away="show = false" 3487 > 3488 <a 3489 title="Carpet Tiles & Rolls" 3490 class="level-1 w-1/4 py-1/5 px-6 text-size13 block text-sm rounded text-darkblack relative" 3491 3492 > 3493 Carpet Tiles & Rolls 3494 <span class="inline items-center rotate-180 absolute"> 3495 <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" class="w-5 h-5 inline" width="25" height="25" role="img"> 3496 <path fill-rule="evenodd" d="M5.293 7.293a1 1 0 011.414 0L10 10.586l3.293-3.293a1 1 0 111.414 1.414l-4 4a1 1 0 01-1.414 0l-4-4a1 1 0 010-1.414z" clip-rule="evenodd"/> 3497<title>chevron-down</title></svg> 3498 </span> 3499 </a> 3500 3501 <ul class="z-10 w-1/2 absolute top-0 level2 flex flex-wrap pt-3 megamenu-extrablock" x-show="show"> 3502 <span class="block w-full text-size28 font-medium no-underline text-darkblack pb-2">Carpet Tiles & Rolls</span> 3503 3504 <li class="level-2 w-4/12 pr-6 pb-6"> 3505 <a href="https://www.flooringinc.com/shop/carpet/carpet-tiles.html" 3506 title="Carpet Tiles" 3507 class="level-2 block"> 3508 <picture class="menucatimg rounded w-full mb-2"><source type="image/webp" srcset="https://www.flooringinc.com//media/catalog/category/Carpet_Tiles_Category_01.webp"><img class="menucatimg rounded w-full mb-2" src="https://www.flooringinc.com//media/catalog/category/Carpet_Tiles_Category_01.jpg" alt="Carpet Tiles" title="Carpet Tiles" /></picture> 3509
3510 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Carpet Tiles</span></a> 3511 </li> 3512 3513 <li class="level-2 w-4/12 pr-6 pb-6"> 3514 <a href="https://www.flooringinc.com/shop/carpet/carpet-rolls.html" 3515 title="Carpet Rolls" 3516 class="level-2 block"> 3517 <picture class="menucatimg rounded w-full mb-2"><source type="image/webp" srcset="https://www.flooringinc.com//media/catalog/category/fi_carpet_carpet_rolls_3.webp"><img class="menucatimg rounded w-full mb-2" src="https://www.flooringinc.com//media/catalog/category/fi_carpet_carpet_rolls_3.jpg" alt="Carpet Rolls" title="Carpet Rolls" /></picture> 3518 3519 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Carpet Rolls</span></a> 3520 </li> 3521 3522 <li class="level-2 w-4/12 pr-6 pb-6"> 3523 <a href="https://www.flooringinc.com/shop/carpet/home-theater-carpet.html" 3524 title="Home Theater Carpet" 3525 class="level-2 block"> 3526 <picture class="menucatimg rounded w-full mb-2"><source type="image/webp" srcset="https://www.flooringinc.com//media/catalog/category/Home_Theater_Carpet_Category.webp"><img class="menucatimg rounded w-full mb-2" src="https://www.flooringinc.com//media/catalog/category/Home_Theater_Carpet_Category.jpg" alt="Home Theater Carpet" title="Home Theater Carpet" /></picture> 3527 3528 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Home Theater Carpet</span></a> 3529 </li> 3530 3531 <li class="level-2 w-4/12 pr-6 pb-6"> 3532 <a href="https://www.flooringinc.com/shop/carpet/peel-stick-carpet.html" 3533 title="Peel and Stick Carpet Tiles" 3534 class="level-2 block"> 3535 <picture class="menucatimg rounded w-full mb-2"><source type="image/webp" srcset="https://www.flooringinc.com//media/catalog/category/fi_carpet_peel_stick_carpet_3.webp"><img class="menucatimg rounded w-full mb-2" src="https://www.flooringinc.com//media/catalog/category/fi_carpet_peel_stick_carpet_3.jpg" alt="Peel and Stick Carpet Tiles" title="Peel and Stick Carpet Tiles" /></picture> 3536
3537 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Peel and Stick Carpet Tiles</span></a> 3538 </li> 3539 3540 <li class="level-2 w-4/12 pr-6 pb-6"> 3541 <a href="https://www.flooringinc.com/shop/carpet/outdoor-carpet.html" 3542 title="Outdoor Carpet" 3543 class="level-2 block"> 3544 <picture class="menucatimg rounded w-full mb-2"><source type="image/webp" srcset="https://www.flooringinc.com//media/catalog/category/fi_carpet_outdoor_carpet_3.webp"><img class="menucatimg rounded w-full mb-2" src="https://www.flooringinc.com//media/catalog/category/fi_carpet_outdoor_carpet_3.jpg" alt="Outdoor Carpet" title="Outdoor Carpet" /></picture> 3545 3546 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Outdoor Carpet</span></a> 3547 </li> 3548 3549 <li class="level-2 w-4/12 pr-6 pb-6"> 3550 <a href="https://www.flooringinc.com/shop/carpet/waterproof-carpet.html" 3551 title="Waterproof Carpet" 3552 class="level-2 block"> 3553 <picture class="menucatimg rounded w-full mb-2"><source type="image/webp" srcset="https://www.flooringinc.com//media/catalog/category/fi_carpet_waterproof_carpet_3.webp"><img class="menucatimg rounded w-full mb-2" src="https://www.flooringinc.com//media/catalog/category/fi_carpet_waterproof_carpet_3.jpg" alt="Waterproof Carpet" title="Waterproof Carpet" /></picture> 3554 3555 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Waterproof Carpet</span></a> 3556 </li> 3557 3558 3559 <a class="view-all mt-2 underline-imp text-size12 font-medium text-darkblack absolute" style="top:410px;" href="https://www.flooringinc.com/shop/carpet.html" >View All</a> 3560 3561 3562 </ul> 3563 </li> 3564 3565 3566 3567 <li :class="{ 'active': show }" class="level-1 level1 " x-data="{ show: false }" 3568 x-on:click="show = true; removeDisplayFirst()" @click.away="show = false" 3569 > 3570 <a 3571 title="Vinyl Flooring" 3572 class="level-1 w-1/4 py-1/5 px-6 text-size13 block text-sm rounded text-darkblack relative" 3573 3574 > 3575 Vinyl Flooring 3576 <sp
3576an class="inline items-center rotate-180 absolute"> 3577 <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" class="w-5 h-5 inline" width="25" height="25" role="img"> 3578 <path fill-rule="evenodd" d="M5.293 7.293a1 1 0 011.414 0L10 10.586l3.293-3.293a1 1 0 111.414 1.414l-4 4a1 1 0 01-1.414 0l-4-4a1 1 0 010-1.414z" clip-rule="evenodd"/> 3579<title>chevron-down</title></svg> 3580 </span> 3581 </a> 3582 3583 <div class="2xl:block w-1/4 mega-menu-rightBlock absolute top-0 right-0" x-show="show"> 3584 <style>#html-body [data-pb-style=EM115TO]{justify-content:flex-start;display:flex;flex-direction:column;background-position:left top;background-size:cover;background-repeat:no-repeat;background-attachment:scroll}#html-body [data-pb-style=IKTB4TW]{border-style:none}#html-body [data-pb-style=GIF1L08],#html-body [data-pb-style=XQRKPTA]{max-width:100%;height:auto}#html-body [data-pb-style=L8H5BBD]{background-position:left top;background-size:cover;background-repeat:no-repeat;background-attachment:scroll;align-self:stretch}#html-body [data-pb-style=R47C5CN]{display:flex;width:100%}#html-body [data-pb-style=KQ2WCHQ]{justify-content:flex-start;display:flex;flex-direction:column;background-position:left top;background-size:cover;background-repeat:no-repeat;background-attachment:scroll;width:100%;align-self:stretch}#html-body [data-pb-style=DKAF2SH]{text-align:left}#html-body [data-pb-style=PYFOHXW]{display:inline-block}#html-body [data-pb-style=PNB90JW]{text-align:center}@media only screen and (max-width: 768px) { #html-body [data-pb-style=IKTB4TW]{border-style:none} }</style><div class="mega_menu_banner" data-content-type="row" data-appearance="full-bleed" data-enable-parallax="0" data-parallax-speed="0.5" data-background-images="{}" data-background-type="image" data-video-loop="true" data-video-play-only-visible="true" data-video-lazy-load="true" data-video-fallback-src="" data-element="main" data-pb-style="EM115TO"><figure data-content-type="image" data-appearance="full-width" data-element="main" data-pb-style="IKTB4TW"><a href="/tritoncore-pro-7-rigid-core-vinyl-planks-12596.html" target="" data-link-type="default" title="" data-element="link"><picture class="pagebuilder-mobile-hidden"><source type="image/webp" srcset="https://www.flooringinc.com/media/wysiwyg/vinyl-ad-5.webp"><img class="pagebuilder-mobile-hidden" src="https://www.flooringinc.com/media/wysiwyg/vinyl-ad-5.jpg" alt="" title="" width="" height="" loading="lazy" data-element="desktop_image" data-pb-style="XQRKPTA" loading="lazy"></picture><picture class="pagebuilder-mobile-only"><source type="image/webp" srcset="https://www.flooringinc.com/media/wysiwyg/vinyl-ad-5.webp"><img class="pagebuilder-mobile-only" src="https://www.flooringinc.com/media/wysiwyg/vinyl-ad-5.jpg" alt="" title="" width="" height="" loading="lazy" data-element="mobile_image" data-pb-style="GIF1L08" loading="lazy"></picture></a></figure><div class="pagebuilder-column-group" data-background-images="{}" data-content-type="column-group" data-appearance="default" data-grid-size="12" data-element="main" data-pb-style="L8H5BBD"><div class="pagebuilder-column-line" data-content-type="column-line" data-element="main" data-pb-style="R47C5CN"><div class="pagebuilder-column" data-content-type="column" data-appearance="full-height" data-background-images="{}" data-element="main" data-pb-style="KQ2WCHQ"><div class="text-size18 text-custom-black font-bold text-left pt-5 pb-1" data-content-type="text" data-appearance="default" data-element="main"><h2><span style="font-size: 18px;">TritonCore Pro 7"</span><br><span style="font-size: 18px;">Rigid Core Vinyl Planks</span></h2></div><div class="text-size14 font-medium text-custom-black text-left pt-1 pb-3" data-content-type="text" data-appearance="default" data-element="main"><p>Functional beauty for busy households.</p></div><div data-content-type="buttons" data-appearance="inline" data-same-width="false" data-element="main" data-pb-style="DKAF2SH" class="free__Shipping__btn"><div data-content-type="button-item" data-appearance="default" data-element="main" data-pb-style="PYFOHXW"><a class="pagebuilder-button-primary" href="/tritoncore-pro-7-rigid-core-vinyl-planks-12596.html" target="" data-link-type="default" data-element="link" data-pb-style="PNB90JW"><span data-element="link_text">SHOP NOW</span></a></div></div></div></div></div></div> </div> 3585 3586 <ul class="z-10 w-1/2 absolute top-0 level2 flex flex-wrap pt-3 megamenu-extrablock" x-show="show">
3587 <span class="block w-full text-size28 font-medium no-underline text-darkblack pb-2">Vinyl Flooring</span> 3588 3589 <li class="level-2 w-4/12 pr-6 pb-6"> 3590 <a href="https://www.flooringinc.com/shop/vinyl/vinyl-sheet.html" 3591 title="Vinyl Sheet Flooring" 3592 class="level-2 block"> 3593 <picture class="menucatimg rounded w-full mb-2"><source type="image/webp" srcset="https://www.flooringinc.com//media/catalog/category/fi_vinyl_vinyl_sheet_3.webp"><img class="menucatimg rounded w-full mb-2" src="https://www.flooringinc.com//media/catalog/category/fi_vinyl_vinyl_sheet_3.jpg" alt="Vinyl Sheet Flooring" title="Vinyl Sheet Flooring" /></picture> 3594 3595 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Vinyl Sheet Flooring</span></a> 3596 </li> 3597 3598 <li class="level-2 w-4/12 pr-6 pb-6"> 3599 <a href="https://www.flooringinc.com/shop/vinyl/vinyl-tiles-planks.html" 3600 title="Vinyl Tiles & Planks" 3601 class="level-2 block"> 3602 <picture class="menucatimg rounded w-full mb-2"><source type="image/webp" srcset="https://www.flooringinc.com//media/catalog/category/main-category-vinyl.webp"><img class="menucatimg rounded w-full mb-2" src="https://www.flooringinc.com//media/catalog/category/main-category-vinyl.jpg" alt="Vinyl Tiles & Planks" title="Vinyl Tiles & Planks" /></picture> 3603 3604 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Vinyl Tiles & Planks</span></a> 3605 </li> 3606 3607 <li class="level-2 w-4/12 pr-6 pb-6"> 3608 <a href="https://www.flooringinc.com/shop/vinyl/waterproof-vinyl.html" 3609 title="Waterproof Vinyl Flooring" 3610 class="level-2 block"> 3611 <picture class="menucatimg rounded w-full mb-2"><source type="image/webp" srcset="https://www.flooringinc.com//media/catalog/category/fi_vinyl_waterproof_vinyl_1.webp"><img class="menucatimg rounded w-full mb-2" src="https://www.flooringinc.com//media/catalog/category/fi_vinyl_waterproof_vinyl_1.jpg" alt="Waterproof Vinyl Flooring" title="Waterproof Vinyl Flooring" /></picture> 3612
3613 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Waterproof Vinyl Flooring</span></a> 3614 </li> 3615 3616 <li class="level-2 w-4/12 pr-6 pb-6"> 3617 <a href="https://www.flooringinc.com/shop/vinyl/rigid-core-vinyl.html" 3618 title="Rigid Core Vinyl Flooring" 3619 class="level-2 block"> 3620 <picture class="menucatimg rounded w-full mb-2"><source type="image/webp" srcset="https://www.flooringinc.com//media/catalog/category/fi_vinyl_rigid_core_vinyl_1.webp"><img class="menucatimg rounded w-full mb-2" src="https://www.flooringinc.com//media/catalog/category/fi_vinyl_rigid_core_vinyl_1.jpg" alt="Rigid Core Vinyl Flooring" title="Rigid Core Vinyl Flooring" /></picture> 3621 3622 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Rigid Core Vinyl Flooring</span></a> 3623 </li> 3624 3625 <li class="level-2 w-4/12 pr-6 pb-6"> 3626 <a href="https://www.flooringinc.com/shop/vinyl/commercial-vinyl.html" 3627 title="Commercial Vinyl Flooring" 3628 class="level-2 block"> 3629 <picture class="menucatimg rounded w-full mb-2"><source type="image/webp" srcset="https://www.flooringinc.com//media/catalog/category/fi_vinyl_commercial_vinyl_1.webp"><img class="menucatimg rounded w-full mb-2" src="https://www.flooringinc.com//media/catalog/category/fi_vinyl_commercial_vinyl_1.jpg" alt="Commercial Vinyl Flooring" title="Commercial Vinyl Flooring" /></picture> 3630 3631 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Commercial Vinyl Flooring</span></a> 3632 </li> 3633 3634 3635 <a class="view-all mt-2 underline-imp text-size12 font-medium text-darkblack absolute" style="top:410px;" href="https://www.flooringinc.com/shop/vinyl.html" >View All</a> 3636 3637 3638 </ul> 3639 </li> 3640 3641 3642 3643 <li :class="{ 'active': show }" class="level-1 level1 " x-data="{ show: false }" 3644 x-on:click="show = true; removeDisplayFirst()" @click.away="show = false" 3645 > 3646 <a 3647 title="Wood & Laminate Flooring" 3648 class="level-1 w-1/4 py-1/5 px-6 text-size13 block text-sm rounded text-darkblack relative" 3649 3650 > 3651 Wood & Laminate Flooring 3652 <sp
3652an class="inline items-center rotate-180 absolute"> 3653 <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" class="w-5 h-5 inline" width="25" height="25" role="img"> 3654 <path fill-rule="evenodd" d="M5.293 7.293a1 1 0 011.414 0L10 10.586l3.293-3.293a1 1 0 111.414 1.414l-4 4a1 1 0 01-1.414 0l-4-4a1 1 0 010-1.414z" clip-rule="evenodd"/> 3655<title>chevron-down</title></svg> 3656 </span> 3657 </a> 3658 3659 <ul class="z-10 w-1/2 absolute top-0 level2 flex flex-wrap pt-3 megamenu-extrablock" x-show="show"> 3660 <span class="block w-full text-size28 font-medium no-underline text-darkblack pb-2">Wood & Laminate Flooring</span> 3661 3662 <li class="level-2 w-4/12 pr-6 pb-6"> 3663 <a href="https://www.flooringinc.com/shop/wood-laminate/waterproof-laminate.html" 3664 title="Waterproof Laminate Flooring" 3665 class="level-2 block"> 3666 <picture class="menucatimg rounded w-full mb-2"><source type="image/webp" srcset="https://www.flooringinc.com//media/catalog/category/fi_wood_laminate_waterproof_laminate_1.webp"><img class="menucatimg rounded w-full mb-2" src="https://www.flooringinc.com//media/catalog/category/fi_wood_laminate_waterproof_laminate_1.jpg" alt="Waterproof Laminate Flooring" title="Waterproof Laminate Flooring" /></picture> 3667 3668 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Waterproof Laminate Flooring</span></a> 3669 </li> 3670 3671 <li class="level-2 w-4/12 pr-6 pb-6"> 3672 <a href="https://www.flooringinc.com/shop/wood-laminate/laminate.html" 3673 title="Laminate Flooring" 3674 class="level-2 block"> 3675 <picture class="menucatimg rounded w-full mb-2"><source type="image/webp" srcset="https://www.flooringinc.com//media/catalog/category/fi_wood_laminate_laminate_1.webp"><img class="menucatimg rounded w-full mb-2" src="https://www.flooringinc.com//media/catalog/category/fi_wood_laminate_laminate_1.jpg" alt="Laminate Flooring" title="Laminate Flooring" /></picture> 3676 3677 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Laminate Flooring</span></a> 3678 </li> 3679 3680 <li class="level-2 w-4/12 pr-6 pb-6"> 3681 <a href="https://www.flooringinc.com/shop/wood-laminate/hardwood.html" 3682 title="Engineered Hardwood Flooring" 3683 class="level-2 block"> 3684 <picture class="menucatimg rounded w-full mb-2"><source type="image/webp" srcset="https://www.flooringinc.com//media/catalog/category/fi_wood_laminate_hardwood_1.webp"><img class="menucatimg rounded w-full mb-2" src="https://www.flooringinc.com//media/catalog/category/fi_wood_laminate_hardwood_1.jpg" alt="Engineered Hardwood Flooring" title="Engineered Hardwood Flooring" /></picture> 3685
3686 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Engineered Hardwood Flooring</span></a> 3687 </li> 3688 3689 <li class="level-2 w-4/12 pr-6 pb-6"> 3690 <a href="https://www.flooringinc.com/shop/wood-laminate/oak.html" 3691 title="Oak Wood Flooring" 3692 class="level-2 block"> 3693 <picture class="menucatimg rounded w-full mb-2"><source type="image/webp" srcset="https://www.flooringinc.com//media/catalog/category/fi_wood_laminate_oak_1.webp"><img class="menucatimg rounded w-full mb-2" src="https://www.flooringinc.com//media/catalog/category/fi_wood_laminate_oak_1.jpg" alt="Oak Wood Flooring" title="Oak Wood Flooring" /></picture> 3694 3695 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Oak Wood Flooring</span></a> 3696 </li> 3697 3698 <li class="level-2 w-4/12 pr-6 pb-6"> 3699 <a href="https://www.flooringinc.com/shop/wood-laminate/commercial-wood-laminate.html" 3700 title="Commercial Wood & Laminate" 3701 class="level-2 block"> 3702 <picture class="menucatimg rounded w-full mb-2"><source type="image/webp" srcset="https://www.flooringinc.com//media/catalog/category/fi_wood_laminate_commercial_wood_laminate_1.webp"><img class="menucatimg rounded w-full mb-2" src="https://www.flooringinc.com//media/catalog/category/fi_wood_laminate_commercial_wood_laminate_1.jpg" alt="Commercial Wood & Laminate" title="Commercial Wood & Laminate" /></picture> 3703 3704 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Commercial Wood & Laminate</span></a> 3705 </li> 3706 3707 3708 <a class="view-all mt-2 underline-imp text-size12 font-medium text-darkblack absolute" style="top:410px;" href="https://www.flooringinc.com/shop/wood-laminate.html" >View All</a> 3709 3710 3711 </ul> 3712 </li> 3713 3714 3715 3716 <li :class="{ 'active': show }" class="level-1 level1 " x-data="{ show: false }" 3717 x-on:click="show = true; removeDisplayFirst()" @click.away="show = false" 3718 > 3719 <a 3720 title="Commercial Flooring" 3721 class="level-1 w-1/4 py-1/5 px-6 text-size13 block text-sm rounded text-darkblack relative" 3722 3723 > 3724 Commercial Flooring 3725 <sp
3725an class="inline items-center rotate-180 absolute"> 3726 <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" class="w-5 h-5 inline" width="25" height="25" role="img"> 3727 <path fill-rule="evenodd" d="M5.293 7.293a1 1 0 011.414 0L10 10.586l3.293-3.293a1 1 0 111.414 1.414l-4 4a1 1 0 01-1.414 0l-4-4a1 1 0 010-1.414z" clip-rule="evenodd"/> 3728<title>chevron-down</title></svg> 3729 </span> 3730 </a> 3731 3732 <div class="2xl:block w-1/4 mega-menu-rightBlock absolute top-0 right-0" x-show="show"> 3733 <style>#html-body [data-pb-style=O02YD59]{justify-content:flex-start;display:flex;flex-direction:column;background-position:left top;background-size:cover;background-repeat:no-repeat;background-attachment:scroll}#html-body [data-pb-style=OOE2A60]{border-style:none}#html-body [data-pb-style=GIBTE8V],#html-body [data-pb-style=I3MEDCP]{max-width:100%;height:auto}#html-body [data-pb-style=YUV11TT]{background-position:left top;background-size:cover;background-repeat:no-repeat;background-attachment:scroll;align-self:stretch}#html-body [data-pb-style=BOTYRR2]{display:flex;width:100%}#html-body [data-pb-style=Y56PEM0]{justify-content:flex-start;display:flex;flex-direction:column;background-position:left top;background-size:cover;background-repeat:no-repeat;background-attachment:scroll;width:100%;align-self:stretch}#html-body [data-pb-style=AAF7UJB]{text-align:left}#html-body [data-pb-style=MN0A9R6]{display:inline-block}#html-body [data-pb-style=GVKGSEM]{text-align:center}@media only screen and (max-width: 768px) { #html-body [data-pb-style=OOE2A60]{border-style:none} }</style><div class="mega_menu_banner" data-content-type="row" data-appearance="full-bleed" data-enable-parallax="0" data-parallax-speed="0.5" data-background-images="{}" data-background-type="image" data-video-loop="true" data-video-play-only-visible="true" data-video-lazy-load="true" data-video-fallback-src="" data-element="main" data-pb-style="O02YD59"><figure data-content-type="image" data-appearance="full-width" data-element="main" data-pb-style="OOE2A60"><a href="/shaw-intellect-carpet-tile-9127.html" target="" data-link-type="default" title="" data-element="link"><picture class="pagebuilder-mobile-hidden"><source type="image/webp" srcset="https://www.flooringinc.com/media/wysiwyg/commercial-ad-image.webp"><img class="pagebuilder-mobile-hidden" src="https://www.flooringinc.com/media/wysiwyg/commercial-ad-image.jpg" alt="" title="" width="" height="" loading="lazy" data-element="desktop_image" data-pb-style="I3MEDCP" loading="lazy"></picture><picture class="pagebuilder-mobile-only"><source type="image/webp" srcset="https://www.flooringinc.com/media/wysiwyg/commercial-ad-image.webp"><img class="pagebuilder-mobile-only" src="https://www.flooringinc.com/media/wysiwyg/commercial-ad-image.jpg" alt="" title="" width="" height="" loading="lazy" data-element="mobile_image" data-pb-style="GIBTE8V" loading="lazy"></picture></a></figure><div class="pagebuilder-column-group" data-background-images="{}" data-content-type="column-group" data-appearance="default" data-grid-size="12" data-element="main" data-pb-style="YUV11TT"><div class="pagebuilder-column-line" data-content-type="column-line" data-element="main" data-pb-style="BOTYRR2"><div class="pagebuilder-column" data-content-type="column" data-appearance="full-height" data-background-images="{}" data-element="main" data-pb-style="Y56PEM0"><div class="text-size14 font-medium text-custom-black text-left pt-5" data-content-type="text" data-appearance="default" data-element="main"><p><picture><source type="image/webp" srcset="https://www.flooringinc.com/media/wysiwyg/shaw-logo-copy.webp"><img style="width: 100px;" src="https://www.flooringinc.com/media/wysiwyg/shaw-logo-copy.png" alt="" width="100"></picture></p></div><div class="text-size18 text-custom-black font-bold text-left pt-1 pb-5" data-content-type="text" data-appearance="default" data-element="main"><h2><span style="font-size: 18px;">Shaw Intellect<br>Carpet Tile</span></h2></div><div data-content-type="buttons" data-appearance="inline" data-same-width="false" data-element="main" data-pb-style="AAF7UJB" class="free__Shipping__btn"><div data-content-type="button-item" data-appearance="default" data-element="main" data-pb-style="MN0A9R6"><a class="pagebuilder-button-primary" href="/shaw-intellect-carpet-tile-9127.html" target="" data-link-type="default" data-element="link" data-pb-style="GVKGSEM"><span data-element="link_text">SHOP NOW</span></a></div></div></div></div></div></div> </div> 3734 3735 <ul class="z-10 w-1/2 absolute top-0 level2 flex flex-wrap pt-3 megamenu-extrablock" x-show="show">
3736 <span class="block w-full text-size28 font-medium no-underline text-darkblack pb-2">Commercial Flooring</span> 3737 3738 <li class="level-2 w-4/12 pr-6 pb-6"> 3739 <a href="https://www.flooringinc.com/shop/commercial-flooring/commercial-rubber-flooring.html" 3740 title="Commercial Rubber Flooring" 3741 class="level-2 block"> 3742 <picture class="menucatimg rounded w-full mb-2"><source type="image/webp" srcset="https://www.flooringinc.com//media/catalog/category/main-category-commercial-rubber.webp"><img class="menucatimg rounded w-full mb-2" src="https://www.flooringinc.com//media/catalog/category/main-category-commercial-rubber.jpg" alt="Commercial Rubber Flooring" title="Commercial Rubber Flooring" /></picture> 3743 3744 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Commercial Rubber Flooring</span></a> 3745 </li> 3746 3747 <li class="level-2 w-4/12 pr-6 pb-6"> 3748 <a href="https://www.flooringinc.com/shop/commercial-flooring/commercial-garage-flooring.html" 3749 title="Commercial Garage Flooring" 3750 class="level-2 block"> 3751 <picture class="menucatimg rounded w-full mb-2"><source type="image/webp" srcset="https://www.flooringinc.com//media/catalog/category/fi_commercial_flooring_commercial_garage_flooring_1.webp"><img class="menucatimg rounded w-full mb-2" src="https://www.flooringinc.com//media/catalog/category/fi_commercial_flooring_commercial_garage_flooring_1.jpg" alt="Commercial Garage Flooring" title="Commercial Garage Flooring" /></picture> 3752 3753 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Commercial Garage Flooring</span></a> 3754 </li> 3755 3756 <li class="level-2 w-4/12 pr-6 pb-6"> 3757 <a href="https://www.flooringinc.com/shop/commercial-flooring/commercial-carpet.html" 3758 title="Commercial Carpet Tiles" 3759 class="level-2 block"> 3760 <picture class="menucatimg rounded w-full mb-2"><source type="image/webp" srcset="https://www.flooringinc.com//media/catalog/category/fi_commercial_flooring_commercial_carpet_1.webp"><img class="menucatimg rounded w-full mb-2" src="https://www.flooringinc.com//media/catalog/category/fi_commercial_flooring_commercial_carpet_1.jpg" alt="Commercial Carpet Tiles" title="Commercial Carpet Tiles" /></picture> 3761
3762 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Commercial Carpet Tiles</span></a> 3763 </li> 3764 3765 <li class="level-2 w-4/12 pr-6 pb-6"> 3766 <a href="https://www.flooringinc.com/shop/commercial-flooring/commercial-vinyl.html" 3767 title="Commercial Vinyl Flooring" 3768 class="level-2 block"> 3769 <picture class="menucatimg rounded w-full mb-2"><source type="image/webp" srcset="https://www.flooringinc.com//media/catalog/category/fi_commercial_flooring_commercial_vinyl_1.webp"><img class="menucatimg rounded w-full mb-2" src="https://www.flooringinc.com//media/catalog/category/fi_commercial_flooring_commercial_vinyl_1.jpg" alt="Commercial Vinyl Flooring" title="Commercial Vinyl Flooring" /></picture> 3770 3771 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Commercial Vinyl Flooring</span></a> 3772 </li> 3773 3774 <li class="level-2 w-4/12 pr-6 pb-6"> 3775 <a href="https://www.flooringinc.com/shop/commercial-flooring/commercial-wood-laminate.html" 3776 title="Commercial Wood & Laminate Flooring" 3777 class="level-2 block"> 3778 <picture class="menucatimg rounded w-full mb-2"><source type="image/webp" srcset="https://www.flooringinc.com//media/catalog/category/fi_commercial_flooring_commercial_wood_laminate_1.webp"><img class="menucatimg rounded w-full mb-2" src="https://www.flooringinc.com//media/catalog/category/fi_commercial_flooring_commercial_wood_laminate_1.jpg" alt="Commercial Wood & Laminate Flooring" title="Commercial Wood & Laminate Flooring" /></picture> 3779 3780 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Commercial Wood & Laminate Flooring</span></a> 3781 </li> 3782 3783 <li class="level-2 w-4/12 pr-6 pb-6"> 3784 <a href="https://www.flooringinc.com/shop/commercial-flooring/gym-floor-covers-protection.html" 3785 title="Gym Floor Covers | Floor Protection" 3786 class="level-2 block"> 3787 <picture class="menucatimg rounded w-full mb-2"><source type="image/webp" srcset="https://www.flooringinc.com//media/catalog/category/Gym_Floor_Covers_Category.webp"><img class="menucatimg rounded w-full mb-2" src="https://www.flooringinc.com//media/catalog/category/Gym_Floor_Covers_Category.jpg" alt="Gym Floor Covers | Floor Protection" title="Gym Floor Covers | Floor Protection" /></picture> 3788
3789 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Gym Floor Covers | Floor Protection</span></a> 3790 </li> 3791 3792 3793 <a class="view-all mt-2 underline-imp text-size12 font-medium text-darkblack absolute" style="top:410px;" href="https://www.flooringinc.com/shop/commercial-flooring.html" >View All</a> 3794 3795 3796 </ul> 3797 </li> 3798 3799 3800 3801 <li :class="{ 'active': show }" class="level-1 level1 " x-data="{ show: false }" 3802 x-on:click="show = true; removeDisplayFirst()" @click.away="show = false" 3803 > 3804 <a 3805 title="Floors by Activity" 3806 class="level-1 w-1/4 py-1/5 px-6 text-size13 block text-sm rounded text-darkblack relative" 3807 3808 > 3809 Floors by Activity 3810 <span class="inline items-center rotate-180 absolute"> 3811 <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" class="w-5 h-5 inline" width="25" height="25" role="img"> 3812 <path fill-rule="evenodd" d="M5.293 7.293a1 1 0 011.414 0L10 10.586l3.293-3.293a1 1 0 111.414 1.414l-4 4a1 1 0 01-1.414 0l-4-4a1 1 0 010-1.414z" clip-rule="evenodd"/> 3813<title>chevron-down</title></svg> 3814 </span> 3815 </a> 3816 3817 <div class="2xl:block w-1/4 mega-menu-rightBlock absolute top-0 right-0" x-show="show"> 3818 <style>#html-body [data-pb-style=KFA34BQ]{justify-content:flex-start;display:flex;flex-direction:column;background-position:left top;background-size:cover;background-repeat:no-repeat;background-attachment:scroll}#html-body [data-pb-style=SWIWRMK]{border-style:none}#html-body [data-pb-style=CW1JEO7],#html-body [data-pb-style=YR16OUN]{max-width:100%;height:auto}#html-body [data-pb-style=JE5OVK0]{background-position:left top;background-size:cover;background-repeat:no-repeat;background-attachment:scroll;align-self:stretch}#html-body [data-pb-style=KFIHXY2]{display:flex;width:100%}#html-body [data-pb-style=PAOFWTU]{justify-content:flex-start;display:flex;flex-direction:column;background-position:left top;background-size:cover;background-repeat:no-repeat;background-attachment:scroll;width:100%;align-self:stretch}#html-body [data-pb-style=GGMYAMB]{text-align:left}#html-body [data-pb-style=H9XX0T5]{display:inline-block}#html-body [data-pb-style=VQK95N0]{text-align:center}@media only screen and (max-width: 768px) { #html-body [data-pb-style=SWIWRMK]{border-style:none} }</style><div class="mega_menu_banner" data-content-type="row" data-appearance="full-bleed" data-enable-parallax="0" data-parallax-speed="0.5" data-background-images="{}" data-background-type="image" data-video-loop="true" data-video-play-only-visible="true" data-video-lazy-load="true" data-video-fallback-src="" data-element="main" data-pb-style="KFA34BQ"><figure data-content-type="image" data-appearance="full-width" data-element="main" data-pb-style="SWIWRMK"><a href="/progame-sports-tiles-13636.html" target="" data-link-type="default" title="" data-element="link"><picture class="pagebuilder-mobile-hidden"><source type="image/webp" srcset="https://www.flooringinc.com/media/wysiwyg/by-activity-ad-image.webp"><img class="pagebuilder-mobile-hidden" src="https://www.flooringinc.com/media/wysiwyg/by-activity-ad-image.jpg" alt="" title="" width="" height="" loading="lazy" data-element="desktop_image" data-pb-style="CW1JEO7" loading="lazy"></picture><picture class="pagebuilder-mobile-only"><source type="image/webp" srcset="https://www.flooringinc.com/media/wysiwyg/by-activity-ad-image.webp"><img class="pagebuilder-mobile-only" src="https://www.flooringinc.com/media/wysiwyg/by-activity-ad-image.jpg" alt="" title="" width="" height="" loading="lazy" data-element="mobile_image" data-pb-style="YR16OUN" loading="lazy"></picture></a></figure><div class="pagebuilder-column-group" data-background-images="{}" data-content-type="column-group" data-appearance="default" data-grid-size="12" data-element="main" data-pb-style="JE5OVK0"><div class="pagebuilder-column-line" data-content-type="column-line" data-element="main" data-pb-style="KFIHXY2"><div class="pagebuilder-column" data-content-type="column" data-appearance="full-height" data-background-images="{}" data-element="main" data-pb-style="PAOFWTU"><div class="text-size14 font-medium text-custom-black text-left pt-5" data-content-type="text" data-appearance="default" data-element="main"><p><picture><source type="image/webp" srcset="https://www.flooringinc.com/media/wysiwyg/Progame_Color.webp"><img id="BEVL1A7" style="width: 100px; height: 33px;" src="https://www.flooringinc.com/media/wysiwyg/Progame_Color.png" alt="" width="100" height="17"></picture></p></div><div class="text-size18 text-custom-black font-bold text-left pt-1 pb-5" data-content-type="text" data-appearance="default" data-element="main"><h2><span style="font-size: 18px;">ProGame Sports Tiles</span></h2></div><div data-content-type="buttons" data-appearance="inline" data-same-width="false" data-element="main" data-pb-style="GGMYAMB" class="free__Shipping__btn"><div data-content-type="button-item" data-appearance="default" data-element="main" data-pb-style="H9XX0T5"><a class="pagebuilder-button-primary" href="/progame-sports-tiles-13636.html" target="" data-link-type="default" data-element="link" data-pb-style="VQK95N0"><span data-element="link_text">SHOP NOW</span></a></div></div></div></div></div></div> </div> 3819 3820 <ul class="z-10 w-1/2 absolute top-0 level2 flex flex-wrap pt-3 megamenu-extrablock" x-show="show">
3821 <span class="block w-full text-size28 font-medium no-underline text-darkblack pb-2">Floors by Activity</span> 3822 3823 <li class="level-2 w-4/12 pr-6 pb-6"> 3824 <a href="https://www.flooringinc.com/shop/shop-by-activity/fitness-flooring.html" 3825 title="Fitness Flooring" 3826 class="level-2 block"> 3827 <picture class="menucatimg rounded w-full mb-2"><source type="image/webp" srcset="https://www.flooringinc.com//media/catalog/category/fi_shop_by_activity_fitness_flooring_1.webp"><img class="menucatimg rounded w-full mb-2" src="https://www.flooringinc.com//media/catalog/category/fi_shop_by_activity_fitness_flooring_1.jpg" alt="Fitness Flooring" title="Fitness Flooring" /></picture> 3828 3829 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Fitness Flooring</span></a> 3830 </li> 3831 3832 <li class="level-2 w-4/12 pr-6 pb-6"> 3833 <a href="https://www.flooringinc.com/shop/shop-by-activity/dance-marley-flooring.html" 3834 title="Dance Flooring | Marley Floor" 3835 class="level-2 block"> 3836 <picture class="menucatimg rounded w-full mb-2"><source type="image/webp" srcset="https://www.flooringinc.com//media/catalog/category/dance-main-category.webp"><img class="menucatimg rounded w-full mb-2" src="https://www.flooringinc.com//media/catalog/category/dance-main-category.jpg" alt="Dance Flooring | Marley Floor" title="Dance Flooring | Marley Floor" /></picture> 3837 3838 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Dance Flooring | Marley Floor</span></a> 3839 </li> 3840 3841 <li class="level-2 w-4/12 pr-6 pb-6"> 3842 <a href="https://www.flooringinc.com/shop/shop-by-activity/sport-and-court-flooring.html" 3843 title="Sport & Court Flooring" 3844 class="level-2 block"> 3845 <picture class="menucatimg rounded w-full mb-2"><source type="image/webp" srcset="https://www.flooringinc.com//media/catalog/category/Sport_Court_Category.webp"><img class="menucatimg rounded w-full mb-2" src="https://www.flooringinc.com//media/catalog/category/Sport_Court_Category.jpg" alt="Sport & Court Flooring" title="Sport & Court Flooring" /></picture> 3846
3847 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Sport & Court Flooring</span></a> 3848 </li> 3849 3850 <li class="level-2 w-4/12 pr-6 pb-6"> 3851 <a href="https://www.flooringinc.com/shop/shop-by-activity/martial-arts-flooring.html" 3852 title="Martial Arts Mats " 3853 class="level-2 block"> 3854 <picture class="menucatimg rounded w-full mb-2"><source type="image/webp" srcset="https://www.flooringinc.com//media/catalog/category/fi_shop_by_activity_martial_arts_flooring_1.webp"><img class="menucatimg rounded w-full mb-2" src="https://www.flooringinc.com//media/catalog/category/fi_shop_by_activity_martial_arts_flooring_1.jpg" alt="Martial Arts Mats " title="Martial Arts Mats " /></picture> 3855 3856 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Martial Arts Mats </span></a> 3857 </li> 3858 3859 <li class="level-2 w-4/12 pr-6 pb-6"> 3860 <a href="https://www.flooringinc.com/shop/shop-by-activity/cheer-mats.html" 3861 title="Cheer Mats" 3862 class="level-2 block"> 3863 <picture class="menucatimg rounded w-full mb-2"><source type="image/webp" srcset="https://www.flooringinc.com//media/catalog/category/Cheer_Mats_Category.webp"><img class="menucatimg rounded w-full mb-2" src="https://www.flooringinc.com//media/catalog/category/Cheer_Mats_Category.jpg" alt="Cheer Mats" title="Cheer Mats" /></picture> 3864 3865 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Cheer Mats</span></a> 3866 </li> 3867 3868 <li class="level-2 w-4/12 pr-6 pb-6"> 3869 <a href="https://www.flooringinc.com/shop/shop-by-activity/wrestling-mats.html" 3870 title="Wrestling Mats" 3871 class="level-2 block"> 3872 <picture class="menucatimg rounded w-full mb-2"><source type="image/webp" srcset="https://www.flooringinc.com//media/catalog/category/Wrestling_Mats_Category_1.webp"><img class="menucatimg rounded w-full mb-2" src="https://www.flooringinc.com//media/catalog/category/Wrestling_Mats_Category_1.jpg" alt="Wrestling Mats" title="Wrestling Mats" /></picture> 3873
3874 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Wrestling Mats</span></a> 3875 </li> 3876 3877 3878 <a class="view-all mt-2 underline-imp text-size12 font-medium text-darkblack absolute" style="top:410px;" href="https://www.flooringinc.com/shop/shop-by-activity.html" >View All</a> 3879 3880 3881 </ul> 3882 </li> 3883 3884 3885 3886 <li :class="{ 'active': show }" class="level-1 level1 " x-data="{ show: false }" 3887 x-on:click="show = true; removeDisplayFirst()" @click.away="show = false" 3888 > 3889 <a 3890 title="Floors by Space" 3891 class="level-1 w-1/4 py-1/5 px-6 text-size13 block text-sm rounded text-darkblack relative" 3892 3893 > 3894 Floors by Space 3895 <span class="inline items-center rotate-180 absolute"> 3896 <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" class="w-5 h-5 inline" width="25" height="25" role="img"> 3897 <path fill-rule="evenodd" d="M5.293 7.293a1 1 0 011.414 0L10 10.586l3.293-3.293a1 1 0 111.414 1.414l-4 4a1 1 0 01-1.414 0l-4-4a1 1 0 010-1.414z" clip-rule="evenodd"/> 3898<title>chevron-down</title></svg> 3899 </span> 3900 </a> 3901 3902 <ul class="z-10 w-1/2 absolute top-0 level2 flex flex-wrap pt-3 megamenu-extrablock" x-show="show"> 3903 <span class="block w-full text-size28 font-medium no-underline text-darkblack pb-2">Floors by Space</span> 3904 3905 <li class="level-2 w-4/12 pr-6 pb-6"> 3906 <a href="https://www.flooringinc.com/shop/shop-by-space/kitchen-flooring.html" 3907 title="Kitchen Flooring" 3908 class="level-2 block"> 3909 <picture class="menucatimg rounded w-full mb-2"><source type="image/webp" srcset="https://www.flooringinc.com//media/catalog/category/kitchen-main-category.webp"><img class="menucatimg rounded w-full mb-2" src="https://www.flooringinc.com//media/catalog/category/kitchen-main-category.jpg" alt="Kitchen Flooring" title="Kitchen Flooring" /></picture> 3910 3911 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Kitchen Flooring</span></a> 3912 </li> 3913 3914 <li class="level-2 w-4/12 pr-6 pb-6"> 3915 <a href="https://www.flooringinc.com/shop/shop-by-space/bathroom-flooring.html" 3916 title="Bathroom Flooring" 3917 class="level-2 block"> 3918 <picture class="menucatimg rounded w-full mb-2"><source type="image/webp" srcset="https://www.flooringinc.com//media/catalog/category/bathroom-main-category.webp"><img class="menucatimg rounded w-full mb-2" src="https://www.flooringinc.com//media/catalog/category/bathroom-main-category.jpg" alt="Bathroom Flooring" title="Bathroom Flooring" /></picture> 3919
3920 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Bathroom Flooring</span></a> 3921 </li> 3922 3923 <li class="level-2 w-4/12 pr-6 pb-6"> 3924 <a href="https://www.flooringinc.com/shop/shop-by-space/commercial-flooring.html" 3925 title="Commercial Flooring" 3926 class="level-2 block"> 3927 <picture class="menucatimg rounded w-full mb-2"><source type="image/webp" srcset="https://www.flooringinc.com//media/catalog/category/fi_shop_by_space_commercial_flooring_1.webp"><img class="menucatimg rounded w-full mb-2" src="https://www.flooringinc.com//media/catalog/category/fi_shop_by_space_commercial_flooring_1.jpg" alt="Commercial Flooring" title="Commercial Flooring" /></picture> 3928 3929 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Commercial Flooring</span></a> 3930 </li> 3931 3932 <li class="level-2 w-4/12 pr-6 pb-6"> 3933 <a href="https://www.flooringinc.com/shop/shop-by-space/gym-flooring.html" 3934 title="Gym Flooring" 3935 class="level-2 block"> 3936 <picture class="menucatimg rounded w-full mb-2"><source type="image/webp" srcset="https://www.flooringinc.com//media/catalog/category/gym-main-category_1.webp"><img class="menucatimg rounded w-full mb-2" src="https://www.flooringinc.com//media/catalog/category/gym-main-category_1.jpg" alt="Gym Flooring" title="Gym Flooring" /></picture> 3937 3938 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Gym Flooring</span></a> 3939 </li> 3940 3941 <li class="level-2 w-4/12 pr-6 pb-6"> 3942 <a href="https://www.flooringinc.com/shop/shop-by-space/garage-flooring.html" 3943 title="Garage Flooring" 3944 class="level-2 block"> 3945 <picture class="menucatimg rounded w-full mb-2"><source type="image/webp" srcset="https://www.flooringinc.com//media/catalog/category/fi_shop_by_space_garage_flooring_1.webp"><img class="menucatimg rounded w-full mb-2" src="https://www.flooringinc.com//media/catalog/category/fi_shop_by_space_garage_flooring_1.jpg" alt="Garage Flooring" title="Garage Flooring" /></picture> 3946
3947 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Garage Flooring</span></a> 3948 </li> 3949 3950 <li class="level-2 w-4/12 pr-6 pb-6"> 3951 <a href="https://www.flooringinc.com/shop/shop-by-space/outdoor-flooring.html" 3952 title="Outdoor Flooring" 3953 class="level-2 block"> 3954 <picture class="menucatimg rounded w-full mb-2"><source type="image/webp" srcset="https://www.flooringinc.com//media/catalog/category/fi_shop_by_space_outdoor_flooring_1.webp"><img class="menucatimg rounded w-full mb-2" src="https://www.flooringinc.com//media/catalog/category/fi_shop_by_space_outdoor_flooring_1.jpg" alt="Outdoor Flooring" title="Outdoor Flooring" /></picture> 3955 3956 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Outdoor Flooring</span></a> 3957 </li> 3958 3959 3960 <a class="view-all mt-2 underline-imp text-size12 font-medium text-darkblack absolute" style="top:410px;" href="https://www.flooringinc.com/shop/shop-by-space.html" >View All</a> 3961 3962 3963 </ul> 3964 </li> 3965 3966 3967 3968 <li :class="{ 'active': show }" class="level-1 level1 " x-data="{ show: false }" 3969 x-on:click="show = true; removeDisplayFirst()" @click.away="show = false" 3970 > 3971 <a 3972 title="Underlayment & Flooring Accessories" 3973 class="level-1 w-1/4 py-1/5 px-6 text-size13 block text-sm rounded text-darkblack relative" 3974 3975 > 3976 Underlayment & Flooring Accessories 3977 <span class="inline items-center rotate-180 absolute"> 3978 <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" class="w-5 h-5 inline" width="25" height="25" role="img"> 3979 <path fill-rule="evenodd" d="M5.293 7.293a1 1 0 011.414 0L10 10.586l3.293-3.293a1 1 0 111.414 1.414l-4 4a1 1 0 01-1.414 0l-4-4a1 1 0 010-1.414z" clip-rule="evenodd"/> 3980<title>chevron-down</title></svg> 3981 </span> 3982 </a> 3983 3984 <div class="2xl:block w-1/4 mega-menu-rightBlock absolute top-0 right-0" x-show="show"> 3985 <style>#html-body [data-pb-style=LTPNQ8C]{justify-content:flex-start;display:flex;flex-direction:column;background-position:left top;background-size:cover;background-repeat:no-repeat;background-attachment:scroll}#html-body [data-pb-style=R2I2333]{border-style:none}#html-body [data-pb-style=K97631E],#html-body [data-pb-style=WX0AV4C]{max-width:100%;height:auto}@media only screen and (max-width: 768px) { #html-body [data-pb-style=R2I2333]{border-style:none} }</style><div class="mega_menu_banner" data-content-type="row" data-appearance="full-bleed" data-enable-parallax="0" data-parallax-speed="0.5" data-background-images="{}" data-background-type="image" data-video-loop="true" data-video-play-only-visible="true" data-video-lazy-load="true" data-video-fallback-src="" data-element="main" data-pb-style="LTPNQ8C"><figure data-content-type="image" data-appearance="full-width" data-element="main" data-pb-style="R2I2333"><a href="https://www.flooringinc.com/pro-advantage" target="" data-link-type="page" title="" data-element="link"><picture class="pagebuilder-mobile-hidden"><source type="image/webp" srcset="https://www.flooringinc.com/media/wysiwyg/nav-pro-adv-2-ad.webp"><img class="pagebuilder-mobile-hidden" src="https://www.flooringinc.com/media/wysiwyg/nav-pro-adv-2-ad.jpg" alt="" title="" width="" height="" loading="lazy" data-element="desktop_image" data-pb-style="WX0AV4C" loading="lazy"></picture><picture class="pagebuilder-mobile-only"><source type="image/webp" srcset="https://www.flooringinc.com/media/wysiwyg/nav-pro-adv-2-ad.webp"><img class="pagebuilder-mobile-only" src="https://www.flooringinc.com/media/wysiwyg/nav-pro-adv-2-ad.jpg" alt="" title="" width="" height="" loading="lazy" data-element="mobile_image" data-pb-style="K97631E" loading="lazy"></picture></a></figure></div> </div> 3986 3987 <ul class="z-10 w-1/2 absolute top-0 level2 flex flex-wrap pt-3 megamenu-extrablock" x-show="show">
3988 <span class="block w-full text-size28 font-medium no-underline text-darkblack pb-2">Underlayment & Flooring Accessories</span> 3989 3990 <li class="level-2 w-4/12 pr-6 pb-6"> 3991 <a href="https://www.flooringinc.com/shop/installation-care/adhesives-glue.html" 3992 title="Flooring Adhesives & Glue" 3993 class="level-2 block"> 3994 <picture class="menucatimg rounded w-full mb-2"><source type="image/webp" srcset="https://www.flooringinc.com//media/catalog/category/fi_installation_care_adhesives_glue_1.webp"><img class="menucatimg rounded w-full mb-2" src="https://www.flooringinc.com//media/catalog/category/fi_installation_care_adhesives_glue_1.jpg" alt="Flooring Adhesives & Glue" title="Flooring Adhesives & Glue" /></picture> 3995 3996 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Flooring Adhesives & Glue</span></a> 3997 </li> 3998 3999 <li class="level-2 w-4/12 pr-6 pb-6"> 4000 <a href="https://www.flooringinc.com/shop/installation-care/tape.html" 4001 title="Floor and Mat Tape" 4002 class="level-2 block"> 4003 <picture class="menucatimg rounded w-full mb-2"><source type="image/webp" srcset="https://www.flooringinc.com//media/catalog/category/fi_installation_care_tape_1.webp"><img class="menucatimg rounded w-full mb-2" src="https://www.flooringinc.com//media/catalog/category/fi_installation_care_tape_1.jpg" alt="Floor and Mat Tape" title="Floor and Mat Tape" /></picture> 4004 4005 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Floor and Mat Tape</span></a> 4006 </li> 4007 4008 <li class="level-2 w-4/12 pr-6 pb-6"> 4009 <a href="https://www.flooringinc.com/shop/installation-care/accessories.html" 4010 title="Installation Accessories" 4011 class="level-2 block"> 4012 <picture class="menucatimg rounded w-full mb-2"><source type="image/webp" srcset="https://www.flooringinc.com//media/catalog/category/fi_installation_care_accessories_1.webp"><img class="menucatimg rounded w-full mb-2" src="https://www.flooringinc.com//media/catalog/category/fi_installation_care_accessories_1.jpg" alt="Installation Accessories" title="Installation Accessories" /></picture> 4013
4014 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Installation Accessories</span></a> 4015 </li> 4016 4017 <li class="level-2 w-4/12 pr-6 pb-6"> 4018 <a href="https://www.flooringinc.com/shop/installation-care/trims-moldings.html" 4019 title="Floor Trims & Moldings" 4020 class="level-2 block"> 4021 <picture class="menucatimg rounded w-full mb-2"><source type="image/webp" srcset="https://www.flooringinc.com//media/catalog/category/fi_installation_care_trims_moldings_1.webp"><img class="menucatimg rounded w-full mb-2" src="https://www.flooringinc.com//media/catalog/category/fi_installation_care_trims_moldings_1.jpg" alt="Floor Trims & Moldings" title="Floor Trims & Moldings" /></picture> 4022 4023 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Floor Trims & Moldings</span></a> 4024 </li> 4025 4026 <li class="level-2 w-4/12 pr-6 pb-6"> 4027 <a href="https://www.flooringinc.com/shop/installation-care/underlayment.html" 4028 title="Flooring Underlayment" 4029 class="level-2 block"> 4030 <picture class="menucatimg rounded w-full mb-2"><source type="image/webp" srcset="https://www.flooringinc.com//media/catalog/category/fi_installation_care_underlayment_1.webp"><img class="menucatimg rounded w-full mb-2" src="https://www.flooringinc.com//media/catalog/category/fi_installation_care_underlayment_1.jpg" alt="Flooring Underlayment" title="Flooring Underlayment" /></picture> 4031 4032 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Flooring Underlayment</span></a> 4033 </li> 4034 4035 <li class="level-2 w-4/12 pr-6 pb-6"> 4036 <a href="https://www.flooringinc.com/shop/installation-care/cleaners.html" 4037 title="Flooring Cleaners" 4038 class="level-2 block"> 4039 <picture class="menucatimg rounded w-full mb-2"><source type="image/webp" srcset="https://www.flooringinc.com//media/catalog/category/fi_installation_care_cleaners_1.webp"><img class="menucatimg rounded w-full mb-2" src="https://www.flooringinc.com//media/catalog/category/fi_installation_care_cleaners_1.jpg" alt="Flooring Cleaners" title="Flooring Cleaners" /></picture> 4040
4041 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Flooring Cleaners</span></a> 4042 </li> 4043 4044 4045 <a class="view-all mt-2 underline-imp text-size12 font-medium text-darkblack absolute" style="top:410px;" href="https://www.flooringinc.com/shop/installation-care.html" >View All</a> 4046 4047 4048 </ul> 4049 </li> 4050 4051 4052 4053 <li :class="{ 'active': show }" class="level-1 level1 " x-data="{ show: false }" 4054 x-on:click="show = true; removeDisplayFirst()" @click.away="show = false" 4055 > 4056 <a 4057 title="Specials" 4058 class="level-1 w-1/4 py-1/5 px-6 text-size13 block text-sm rounded text-darkblack relative" 4059 4060 > 4061 Specials 4062 <span class="inline items-center rotate-180 absolute"> 4063 <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" class="w-5 h-5 inline" width="25" height="25" role="img"> 4064 <path fill-rule="evenodd" d="M5.293 7.293a1 1 0 011.414 0L10 10.586l3.293-3.293a1 1 0 111.414 1.414l-4 4a1 1 0 01-1.414 0l-4-4a1 1 0 010-1.414z" clip-rule="evenodd"/> 4065<title>chevron-down</title></svg> 4066 </span> 4067 </a> 4068 4069 <ul class="z-10 w-1/2 absolute top-0 level2 flex flex-wrap pt-3 megamenu-extrablock" x-show="show"> 4070 <span class="block w-full text-size28 font-medium no-underline text-darkblack pb-2">Specials</span> 4071 4072 <li class="level-2 w-4/12 pr-6 pb-6"> 4073 <a href="https://www.flooringinc.com/shop/specials/hot-buys.html" 4074 title="Flooring Deals" 4075 class="level-2 block"> 4076 <picture class="menucatimg rounded w-full mb-2"><source type="image/webp" srcset="https://www.flooringinc.com//media/catalog/category/Hot_Buys_2.webp"><img class="menucatimg rounded w-full mb-2" src="https://www.flooringinc.com//media/catalog/category/Hot_Buys_2.jpg" alt="Flooring Deals" title="Flooring Deals" /></picture> 4077 4078 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Flooring Deals</span></a> 4079 </li> 4080 4081 <li class="level-2 w-4/12 pr-6 pb-6"> 4082 <a href="https://www.flooringinc.com/shop/specials/made-in-usa.html" 4083 title="American Made" 4084 class="level-2 block"> 4085 <picture class="menucatimg rounded w-full mb-2"><source type="image/webp" srcset="https://www.flooringinc.com//media/catalog/category/Made_in_the_USA_2_1.webp"><img class="menucatimg rounded w-full mb-2" src="https://www.flooringinc.com//media/catalog/category/Made_in_the_USA_2_1.jpg" alt="American Made" title="American Made" /></picture> 4086
4087 <span class="block text-sm font-medium no-underline text-darkblack pr-4">American Made</span></a> 4088 </li> 4089 4090 <li class="level-2 w-4/12 pr-6 pb-6"> 4091 <a href="https://www.flooringinc.com/shop/specials/quick-ship.html" 4092 title="Quick Ship" 4093 class="level-2 block"> 4094 <picture class="menucatimg rounded w-full mb-2"><source type="image/webp" srcset="https://www.flooringinc.com//media/catalog/category/Quick_Ship_1.webp"><img class="menucatimg rounded w-full mb-2" src="https://www.flooringinc.com//media/catalog/category/Quick_Ship_1.jpg" alt="Quick Ship" title="Quick Ship" /></picture> 4095 4096 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Quick Ship</span></a> 4097 </li> 4098 4099 <li class="level-2 w-4/12 pr-6 pb-6"> 4100 <a href="https://www.flooringinc.com/shop/specials/new-arrivals.html" 4101 title="New Arrivals" 4102 class="level-2 block"> 4103 <picture class="menucatimg rounded w-full mb-2"><source type="image/webp" srcset="https://www.flooringinc.com//media/catalog/category/New_Arrivals_1_1.webp"><img class="menucatimg rounded w-full mb-2" src="https://www.flooringinc.com//media/catalog/category/New_Arrivals_1_1.jpg" alt="New Arrivals" title="New Arrivals" /></picture> 4104 4105 <span class="block text-sm font-medium no-underline text-darkblack pr-4">New Arrivals</span></a> 4106 </li> 4107 4108 4109 <a class="view-all mt-2 underline-imp text-size12 font-medium text-darkblack absolute" style="top:410px;" href="https://www.flooringinc.com/shop/specials.html" >View All</a> 4110 4111 4112 </ul> 4113 </li> 4114 4115 4116 4117 4118 <!--<a class="view-all main-cats mt-2 underline px-6 text-size12 font-medium text-darkblack" href="https://www.flooringinc.com/all-categories.html" >View All</a>-->
4118 4119 4120 </ul> 4121 </div> 4122 4123 </div> 4124 </div> 4125 </template> 4126 </div> 4127 <div class="menu_static_links"> 4128 <style>#html-body [data-pb-style=QGH21I8]{justify-content:flex-start;display:flex;flex-direction:column;background-position:left top;background-size:cover;background-repeat:no-repeat;background-attachment:scroll}</style><div data-content-type="row" data-appearance="contained" data-element="main"><div data-enable-parallax="0" data-parallax-speed="0.5" data-background-images="{}" data-background-type="image" data-video-loop="true" data-video-play-only-visible="true" data-video-lazy-load="true" data-video-fallback-src="" data-element="inner" data-pb-style="QGH21I8"><div data-content-type="text" data-appearance="default" data-element="main"><ul> 4129<li><a tabindex="0" href="/shop-by-category/specials/hot-buys.html">Sale</a></li> 4130<li><a tabindex="0" href="/blog">Get Inspired & How To</a></li> 4131</ul></div></div></div> </div> 4132 </nav> 4133 </div> 4134 4135</div>
4136<script> 4137 'use strict'; 4138 4139 const initMenuDesktop_6ac1515521319 = () => { 4140 return { 4141 hoverTopPosition: '100%', 4142 setActiveMenu(menuNode) { 4143 Array.from(menuNode.querySelectorAll('a')).filter(link => { 4144 return link.href === window.location.href.split('?')[0]; 4145 }).map(item => { 4146 if (!item.classList.contains('level-0')) { 4147 item.classList.add('underline'); 4148 } 4149 item.closest('div.level-0') && 4150 item.closest('div.level-0').classList.add('border-secondary'); 4151 }); 4152 } 4153 } 4154 } 4155</script>
vendor: 1 bytes, line 4155
4155
4156<script> 4157 // Function to remove 'display-first' class from other list items 4158 function removeDisplayFirst() { 4159 var listItems = document.querySelectorAll('.level1'); 4160 listItems.forEach(function(item) { 4161 if (item.id !== this.id) { 4162 item.classList.remove('display-first'); 4163 } 4164 }); 4165 } 4166</script>
4166 4167 <!--Search--> 4168 <div class="w-full" 4169 id="search-content" 4170 :class="{ 'block': searchOpen}" 4171 @click.outside="searchOpen = false" 4172 > 4173 4174<div class="py-0 px-0 pl-5 mx-auto text-black" x-data="initMirasvitSearch()" @click.away="closeSearch"> 4175 <form class="form minisearch relative" id="search_mini_form" action="https://www.flooringinc.com/catalogsearch/result/" method="get" autocomplete="off"> 4176 <label class="hidden" for="search" data-role="minisearch-label"> 4177 <span>Search</span> 4178 </label> 4179 <input id="search" x-ref="searchInput" type="search" name="q" value="" placeholder="Find it here…" maxlength="128" class="w-full px-5 py-0 text-sm leading-normal transition appearance-none rounded-md 4180 focus:outline-none focus:border-transparent font-normal" x-on:keyup.debounce.300="doSearch($refs.searchInput.value)" x-on:click.debounce.150="openSearch" x-on:keydown.debounce.100="startSearch($refs.searchInput.value)"/> 4181 <button class="action search absolute">btn</button> 4182 </form> 4183 4184 <div x-cloak x-show="isOpen" id="mirasvitSearchResults" class="search_box transition appearance-none absolute"> 4185 <div class="flex flex-row justify-center items-center w-full h-full fixed select-none z-50" 4186 style="left: 50%;top: 50%;transform: translateX(-50%) translateY(-50%);background: rgba(255,255,255,0.7);" 4187 x-show="isLoading" 4188 x-transition:enter="ease-out duration-200" 4189 x-transition:enter-start="opacity-0" 4190 x-transition:enter-end="opacity-100" 4191 x-transition:leave="ease-in duration-200" 4192 x-transition:leave-start="opacity-100" 4193 x-transition:leave-end="opacity-0"> 4194 <!-- By Sam Herbert (@sherb), for everyone. More @ http://goo.gl/7AJzbL --> 4195<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 57 57" stroke="currentColor" class="text-primary" width="57" height="57" role="img"> 4196 <g fill="none" fill-rule="evenodd"> 4197 <g transform="translate(1 1)" stroke-width="2"> 4198 <circle cx="5" cy="50" r="5"> 4199 <animate attributeName="cy" begin="0s" dur="2.2s" values="50;5;50;50" calcMode="linear" repeatCount="indefinite"/> 4200 <animate attributeName="cx" begin="0s" dur="2.2s" values="5;27;49;5" calcMode="linear" repeatCount="indefinite"/> 4201 </circle> 4202 <circle cx="27" cy="5" r="5"> 4203 <animate attributeName="cy" begin="0s" dur="2.2s" from="5" to="5" values="5;50;50;5" calcMode="linear" repeatCount="indefinite"/> 4204 <animate attributeName="cx" begin="0s" dur="2.2s" from="27" to="27" values="27;49;5;27" calcMode="linear" repeatCount="indefinite"/> 4205 </circle> 4206 <circle cx="49" cy="50" r="5"> 4207 <animate attributeName="cy" begin="0s" dur="2.2s" values="50;50;5;50" calcMode="linear" repeatCount="indefinite"/> 4208 <animate attributeName="cx" from="49" to="49" begin="0s" dur="2.2s" values="49;5;27;49" calcMode="linear" repeatCount="indefinite"/> 4209 </circle> 4210 </g> 4211 </g> 4212<title>loader</title></svg> 4213 <div class="ml-10 text-primary text-xl"> 4214 Loading... </div> 4215</div> 4216 4217 <template x-if="hotSearch"> 4218 <div class="hotSearch"> 4219 <p class="text-lg leading-normal transition appearance-none text-grey-800 lg:text-xl border-b border-100 p-2 flex"> 4220 Hot Searches </p> 4221 <div class="my-3 flex flex-wrap"> 4222 </div> 4223 </div> 4224 </template> 4225 4226 <template x-if="searchResults"> 4227 <div class="search_box_content w-full flex flex-wrap "> 4228 <div class="search_box_left relative"> 4229 <p class="product_title text-size20 font-medium text-black"> 4230 Top Results <template x-if="searchProducts != ''"> 4231 <small class="text-size16 font-medium text-black hidden">(<span x-html="searchProductsTotal"></span>)</small> 4232 </template> 4233 </p> 4234 <div class="viewAll absolute right-0"> 4235 <div> 4236 <a x-bind:href="numberResultsUrl"> 4237 <p class="text-size14 font-normal text-black underline number-results" x-html="numberResults"></p> 4238 </a> 4239 </div> 4240 </div> 4241 <div class="search_box_left_content lg:grid-cols-6"> 4242 <template x-for="item in searchProducts"> 4243 <div class="search_products flex"> 4244 <a x-bind:href="`${item.url}`" class=""> 4245 <div class="w-full product-image"> 4246 <img x-bind:src="`${item.imageUrl}`" width="275" height="182" class="w-full"/> 4247 </div> 4248 </a> 4249 <div class="w-full product-content"> 4250 <a x-bind:href="`${item.url}`" class=""><h4 class="product-name text-size14 font-medium text-black" x-html="item.name"></h4></a> 4251 <template x-if="item.rating > 0"> 4252 <div class="ratings flex item-center"> 4253 <div x-html="item.rating"></div>(<span x-html="item.reviews"></span>) 4254 </div> 4255 </template> 4256 <template x-if="item.orderFreeSample > 0"> 4257 <div x-cloak x-data="{showModal: false, htmlContent: '',pid: item.proId }"> 4258 <button type="button" class="order-sample-link text-size14 font-medium text-blacck mb-1" x-on:click="showModal = true,fetchHtmlContent(pid)">Order Free Sample</button> 4259 <div class="modal order-free-sample-popup z-50" x-show="showModal"> 4260 <div class="modal-overlay" x-on:click="showModal = false"></div> 4261 <button class="closemodal" type="button" x-on:click="showModal = false">Close X</button> 4262 <div class="modal-content"> 4263 <div x-html="htmlContent" :class="'htmlcontent' + item.proId"></div> 4264 </div> 4265 </div> 4266 </div> 4267 </template> 4268 <!-- <p class="mt-2 text-gray-600 text-xs truncate" x-html="item.description"></p> --> 4269 <template x-if="item.colorCount > 0"> 4270 <p class="text-size13 font-normal text-black truncate"> 4271 Available in <span x-html="item.colorCount"></span> colors 4272 </p> 4273 </template> 4274 <!--<div class="truncate-content"> 4275 <p class="text-size13 font-normal text-black truncate" x-html="item.dealOfTheMonth"></p> 4276 <p class="text-size13 font-normal text-black truncate" x-html="item.freeShipping"></p> 4277 <p class="text-size13 font-normal text-black truncate" x-html="item.shipNextDay"></p> 4278 </div>--> 4279 <div class="price_container flex item-center justify-between">
4280 <span class="text-size14 font-semibold text-black" x-html="item.price"></span> 4281 </div> 4282 </div> 4283 4284 </div> 4285 </template> 4286 <template x-if="searchProducts == ''"> 4287 <p>No results found.</p> 4288 </template> 4289 </div> 4290 </div> 4291 <div class="results-rightside"> 4292 <template x-if="searchCategories != ''"> 4293 <div class="mb-6 category-rest"> 4294 <p class="categorie-title text-size20 font-medium text-black pb-2"> 4295 In Categories <small class="text-size16 font-medium text-black hidden">(<span x-html="searchCategoriesTotal"></span>)</small> 4296 </p> 4297 <div class="catgry-list"> 4298 <template x-for="category in searchCategories"> 4299 <a x-bind:href="`${category.url}`"> 4300 <div class="text-size14 font-normal text-black"> 4301 <span class="text-size14 font-normal text-black cursor-pointer" x-html="category.name.split('>').pop().trim()"></span> 4302 </div> 4303 </a> 4304 </template> 4305 </div> 4306 </div> 4307 </template> 4308 4309 <!-- <template x-if="searchPages != ''"> 4310 <div class="mb-6"> 4311 <p class="text-lg leading-normal transition appearance-none text-grey-800 lg:text-xl border-b border-100 p-2 flex"> 4312 Pages <small class="text-size16 font-medium text-black">(<span x-html="searchPagesTotal"></span>)</small> 4313 </p> 4314 <div class="px-2"> 4315 <template x-for="page in searchPages"> 4316 <a x-bind:href="`${page.url}`"> 4317 <div class="my-2 flex flex-wrap"> 4318 <span class="text-size14 font-normal text-black cursor-pointer" x-html="page.name"></span> 4319 </div> 4320 </a> 4321 </template> 4322 </div> 4323 </div> 4324 </template> --> 4325 4326 <template x-if="searchPosts != ''"> 4327 <div class="search_box_right"> 4328 <p class="blog-title text-size20 font-medium text-black"> 4329 In Blogs <!-- <small class="<//?= $titleNumberCSS ?>">(<span x-html="searchPostsTotal"></span>)</small> --> 4330 </p> 4331 <div class="search_box_right_content"> 4332 <template x-for="item in searchPosts"> 4333 <div> 4334 <a x-bind:href="`${item.url}`" class="blog-items block"> 4335 <div> 4336 <span class="blog-name text-size14 font-normal text-black" x-html="item.name"></span> 4337 </div> 4338 </a> 4339 <span class="item_description text-size14 font-normal text-black opacity-50 mb-4 block" x-html="item.description"></span> 4340 </div> 4341 </template> 4342 </div> 4343 </div> 4344 </template> 4345 </div> 4346 4347 </div> 4348 </template> 4349 4350 <template x-if="noResults"> 4351 <div class="p-2 text-size20 font-medium text-black overflow-hidden"> 4352 <p class="text-lg leading-normal transition appearance-none text-grey-800 lg:text-xl" x-html="noResultsText"></p> 4353 </div> 4354 </template> 4355 </div> 4356</div> 4357
4358<script> 4359 function initMirasvitSearch() { 4360 return { 4361 //initialize Variables 4362 hotSearch: false, 4363 searchResults: false, 4364 noResults: false, 4365 isLoading: false, 4366 isOpen: false, 4367 blockConfig: {"query":"","priceFormat":{"pattern":"$%s","precision":2,"requiredPrecision":2,"decimalSymbol":".","groupSymbol":",","groupLength":3,"integerRequired":false},"minSearchLength":3,"url":"https:\/\/www.flooringinc.com\/searchautocomplete\/ajax\/suggest\/","storeId":"1","delay":100,"isAjaxCartButton":false,"isShowCartButton":false,"isShowImage":true,"isShowPrice":true,"isShowSku":false,"isShowRating":true,"isShowDescription":true,"isShowStockStatus":false,"layout":"in-page","popularTitle":"Popular Suggestions","popularSearches":[],"isTypeaheadEnabled":false,"typeaheadUrl":"https:\/\/www.flooringinc.com\/searchautocomplete\/ajax\/typeahead\/","minSuggestLength":2,"currency":"USD","limit":24,"customerGroupId":0,"filterPosition":"filters_sidebar"}, 4368 xhttp: false, 4369 noResultsText: '', 4370 numberResults: '', 4371 numberResultsUrl: '', 4372 searchProductsTotal: '', 4373 searchCategoriesTotal: '', 4374 searchPagesTotal: '', 4375 4376 searchProducts: [], 4377 searchCategories: [], 4378 searchPages: [], 4379 searchPosts: [], 4380 4381 searchMap: { 4382 'magento_cms_page': 'Pages', 4383 'magento_catalog_category': 'Categories', 4384 'magento_catalog_product': 'Products', 4385 'magefan_blog_post': 'Posts' 4386 }, 4387 4388 hotSearchClickEvent: function (ev) { 4389 var hotSearchClick = event.currentTarget.innerText; 4390 document.getElementById("search").value = hotSearchClick; 4391 4392 this.doSearch(hotSearchClick); 4393 }, 4394 4395 openSearch: function () { 4396 //this.isOpen = true; 4397 searchValue = document.getElementById("search").value.length; 4398 4399 if (searchValue >= this.blockConfig.minSearchLength) { 4400 this.hideHotSearch(); 4401 } else { 4402 this.showHotSearch(); 4403 this.hideSearchResults(); 4404 } 4405 }, 4406 4407 startSearch: function (e) { 4408 if (e) { 4409 //this.isOpen = true; 4410 } 4411 }, 4412 4413 getSearchresult: function () { 4414 this.isOpen = true; 4415 }, 4416 4417 closeSearch: function () { 4418 this.isOpen = false; 4419 }, 4420 4421 showHotSearch: function () { 4422 this.hotSearch = true; 4423 }, 4424 4425 hideHotSearch: function () { 4426 this.hotSearch = false; 4427 4428 }, 4429 4430 showSearchResults: function () { 4431 this.searchResults = true; 4432 // this.isOpen = true; 4433 }, 4434 4435 hideSearchResults: function () { 4436 this.searchResults = false; 4437 // this.isOpen = false; 4438 }, 4439 4440 showNoResults: function () { 4441 this.noResults = true; 4442 }, 4443 4444 hideNoResults: function () { 4445 this.noResults = false; 4446 }, 4447 4448 setNoResultsText(text) { 4449 if (!text) { 4450 return; 4451 } 4452 console.log(text); 4453 this.noResultsText = text; 4454 this.isOpen = true; 4455 }, 4456 4457 setNumberResults(text) { 4458 this.numberResults = text; 4459 }, 4460 4461 setNumberResultsUrl(text) { 4462 this.numberResultsUrl = text; 4463 }, 4464 4465 resetSearchData: function () { 4466 // Reinitialize Variables to avoid wrong search results. 4467 this.searchPages = []; 4468 this.searchPagesTotal = 0; 4469 this.searchCategories = []; 4470 this.searchCategoriesTotal = 0; 4471 this.searchProducts = []; 4472 this.searchProductsTotal = 0; 4473 }, 4474 4475 doSearch: function (query) { 4476 this.isOpen = false;
4477 var self = this; 4478 // Min search length 4479 if (query.length < this.blockConfig.minSearchLength) { 4480 this.showHotSearch(); 4481 this.isLoading = false; 4482 this.hideSearchResults(); 4483 this.hideNoResults(); 4484 4485 return; 4486 } else { 4487 this.hideHotSearch(); 4488 this.isLoading = true; 4489 this.showSearchResults(); 4490 this.hideNoResults(); 4491 } 4492 4493 // AJAX for searchautocomplete/ajax/suggest/ 4494 if (this.xhttp) { 4495 try { 4496 this.xhttp.abort(); 4497 } catch { 4498 4499 } 4500 } 4501 this.xhttp = new XMLHttpRequest(); 4502 var xhttp = this.xhttp; 4503 4504 var queryEncoded = encodeURIComponent(query); 4505 var url = this.blockConfig.url.replace(/\/$/, "") + "/?q=" + queryEncoded + "&store_id=" + this.blockConfig.storeId + "&cat=false"; 4506 4507 xhttp.open("GET", url, true); 4508 xhttp.setRequestHeader("Content-Type", "application/json"); 4509 4510 xhttp.onreadystatechange = function () { 4511 if (this.readyState === 4 && this.status === 200) { 4512 4513 4514 // Response from ajax call in JSON. 4515 var response = JSON.parse(this.responseText); 4516 console.log(response); 4517 self.resetSearchData(); 4518 4519 // Product Search Results 4520 for (index in response.indexes) { 4521 4522 if (response.indexes[index].items.length > 0) { 4523 self.getSearchresult(); 4524 var res = response.indexes[index]; 4525 var map = null; 4526 4527 if (self.searchMap[res.identifier]) { 4528 map = self.searchMap[res.identifier]; 4529 self['search' + map] = res.items; 4530 self['search' + map + 'Total'] = res.totalItems; 4531 } 4532 } 4533 } 4534 4535 // Extract totalItems from response.textAll and format if > 999 4536 let textAll = response.textAll; 4537 if (response.textAll) { 4538 // Remove the â symbol (or any trailing characters you'd like to remove) 4539 textAll = textAll.replace(/â$/, '').trim(); 4540 // Find number within textAll using regex 4541 let totalItemsMatch = textAll.match(/\d+/); // Extracts the first number found 4542 if (totalItemsMatch) { 4543 let totalItemsFromTextAll = parseInt(totalItemsMatch[0], 10); 4544 if (totalItemsFromTextAll > 999) { 4545 // Format with comma if > 999 4546 textAll = textAll.replace(totalItemsMatch[0], totalItemsFromTextAll.toLocaleString()); 4547 } 4548 } 4549 console.log("Formatted textAll:", textAll); 4550 self.setNumberResults(textAll); // Update the UI with the formatted textAll 4551 } 4552 4553 self.isLoading = false; 4554 self.hideNoResults(); 4555 self.setNumberResults(textAll); 4556 self.setNumberResultsUrl(response.urlAll); 4557 4558 if (response.noResults) {console.log(response.textEmpty); 4559 self.showNoResults(); 4560 self.setNoResultsText(response.textEmpty); 4561 self.hideSearchResults(); 4562 4563 } 4564 }else{ 4565 this.isOpen = false; 4566 } 4567 }; 4568 4569 xhttp.send(); 4570 } 4571 } 4572 } 4573</script>
4573 </div> 4574 4575 <div class="flex items-center order-3"> 4576 <!--Compare Icon--> 4577 <a id="compare-link" 4578 class="relative invisible inline-block mx-1 no-underline sm:ml-3 hover:text-black" 4579 :class="{ 'invisible': !(itemCount > 0) }" 4580 href="https://www.flooringinc.com/catalog/product_compare/index/" 4581 title="Compare Products" 4582 x-data="initCompareHeader()" 4583 @private-content-loaded.window="receiveCompareData($event.detail.data)" 4584 > 4585 <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" class="w-8 h-8 md:h-6 md:w-6 hover:text-black" width="25" height="25" role="img"> 4586 <path stroke-linecap="round" stroke-linejoin="round" d="M3 6l3 1m0 0l-3 9a5.002 5.002 0 006.001 0M6 7l3 9M6 7l6-2m6 2l3-1m-3 1l-3 9a5.002 5.002 0 006.001 0M18 7l3 9m-3-9l-6-2m0-2v2m0 16V5m0 16H9m3 0h3"/> 4587<title>scale</title></svg> 4588 4589 <span class="sr-only label"> 4590 Compare Products </span> 4591 4592 <span class="absolute top-0 right-0 h-5 px-2 py-1 -mt-5 -mr-4 text-xs font-semibold 4593 leading-none text-center text-white uppercase transform -translate-x-1 4594 translate-y-1/2 bg-yellow-500 rounded-full" 4595 > 4596 <span x-text="itemCount"></span> 4597 <span x-show="itemCount === 1" class="sr-only"> 4598 item </span> 4599 <span x-show="itemCount > 1" class="sr-only"> 4600 items </span> 4601 </span> 4602 </a> 4603 4604 <!--Search Icon--> 4605 <button id="menu-search-icon" 4606 class="inline-block ml-1 no-underline sm:ml-3 hover:text-black hidden" 4607 @click.prevent=" 4608 searchOpen = !searchOpen; 4609 $nextTick(function () { document.querySelector('#search').select(); }); 4610 " 4611 > 4612 <span class="sr-only label"> 4613 Search </span> 4614 4615 <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" class="w-8 h-8 md:h-6 md:w-6 hover:text-black" width="25" height="25" role="img"> 4616 <path stroke-linecap="round" stroke-linejoin="round" d="M21 21l-6-6m2-5a7 7 0 11-14 0 7 7 0 0114 0z"/> 4617<title>search</title></svg> 4618 </button> 4619 4620 <!--Customer Icon & Dropdown--> 4621
4621<script> 4622"use strict"; 4623 4624function initComponent() { 4625 return { 4626 cart: false, 4627 customer: false, 4628 receiveCustomerData(data) { 4629 if (data.cart) { 4630 this.cart = data.cart; 4631 } 4632 if (data.customer) { 4633 this.customer = data.customer; 4634 } 4635 } 4636 } 4637} 4638</script>
4638 4639 4640 4641<div x-data="{ open: false }" class="relative inline-block acc-dropdown"> 4642 <div class="arrow-cus"> 4643 <a 4644 href="https://www.flooringinc.com/customer/account/" 4645 id="customer-menu" 4646 class="block hover:text-black " 4647 @click.prevent="$dispatch('popup-register', 4648 { open: true,openRegister : false,openLogin : true,openCreate :true, 4649 openButtonLogin :true, 4650 openButtonRegister :false, 4651 })" 4652 :aria-expanded="open ? 'true' : 'false'" 4653 aria-label="My Account" 4654 > 4655 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="currentColor" 4656 class="w-8 h-8 md:h-6 md:w-6" aria-hidden="true"> 4657 <circle fill="none" cx="12" cy="7" r="3"></circle> 4658 <path d="M12 2C9.243 2 7 4.243 7 7s2.243 5 5 5 5-2.243 5-5S14.757 2 12 2zM12 10c-1.654 4659 0-3-1.346-3-3s1.346-3 3-3 3 1.346 3 3S13.654 10 12 10zM21 21v-1c0-3.859-3.141-7-7-7h-4c-3.86 4660 0-7 3.141-7 7v1h2v-1c0-2.757 2.243-5 5-5h4c2.757 0 5 2.243 5 5v1H21z"> 4661 </path> 4662 </svg> 4663 4664 </a> 4665 </div> 4666 <nav class="absolute right-0 z-20 hidden w-40 pt-3 pb-4 mt-2 -mr-4 pl-4 pr-4 overflow-auto origin-top-right rounded-sm 4667 shadow-lg sm:w-48 lg:mt-3 bg-container-lighter" 4668 :class="{ 'hidden' : !open }" 4669 @click.outside="open = false" 4670 x-cloak x-show="open" 4671 aria-labelledby="customer-menu" 4672 > 4673 4674<a class="block px-4 py-2 lg:px-5 lg:py-2 hover:bg-gray-100" 4675 onclick="hyva.setCookie && hyva.setCookie( 4676 'login_redirect', 4677 window.location.href, 4678 1 4679 )" 4680 href="https://www.flooringinc.com/customer/account/index/"> 4681 Sign In </a> 4682<a class="block px-4 py-2 lg:px-5 lg:py-2 hover:bg-gray-100" 4683 href="https://www.flooringinc.com/customer/account/create/" 4684 title="" 4685 > 4686 Create an Account </a> 4687 </nav> 4688</div> 4689 <!--Quote Cart Icon (show when activeCartType is 'quote' and quote has items)--> 4690 <template x-if="activeCartType === 'quote' && quoteCart.summary_count"> 4691 <a id="menu-cart-quote-icon" 4692 class="relative inline-block ml-1 no-underline sm:ml-3 hover:text-black pl-3" 4693 :class="{ 4694 'hidden': !(activeCartType === 'quote' && quoteCart.summary_count), 4695 'block': activeCartType === 'quote' && quoteCart.summary_count }" 4696 href="https://www.flooringinc.com/amasty_quote/cart/" 4697 > 4698 <span class="checkout-icon"> 4699 <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" class="w-8 h-8 md:h-6 md:w-6 hover:text-black" width="25" height="25" role="img"> 4700 <path stroke-linecap="round" stroke-linejoin="round" d="M3 3h2l.4 2M7 13h10l4-8H5.4M7 13L5.4 5M7 13l-2.293 2.293c-.63.63-.184 1.707.707 1.707H17m0 0a2 2 0 100 4 2 2 0 000-4zm-8 2a2 2 0 11-4 0 2 2 0 014 0z"/> 4701<title>shopping-cart</title></svg> 4702 </span> 4703 <span x-text="quoteCart.summary_count" 4704 class="absolute top-0 right-0 h-5 px-2 py-1 -mt-5 -mr-4 text-xs font-semibold 4705 leading-none text-center text-white uppercase transform -translate-x-1 4706 translate-y-1/2 rounded-full bg-primary" 4707 :class="{ 4708 'hidden': !quoteCart.summary_count, 4709 'block': quoteCart.summary_count }" 4710 ></span> 4711 </a> 4712 </template> 4713 <!--Regular Cart Icon (show when activeCartType is 'cart' or when quote mode but quote empty - always show an icon)-->
4713 4714 <a id="menu-cart-icon" 4715 x-show="activeCartType === 'cart' || (activeCartType === 'quote' && !quoteCart.summary_count)" 4716 @click.prevent.stop="$dispatch('toggle-cart',{});" class="relative inline-block ml-6 no-underline hover:text-black" 4717 href="https://www.flooringinc.com/checkout/cart/index/" 4718 > 4719 <span class="sr-only label"> 4720 Cart </span> 4721 4722 <span class="cart-icon"> 4723 <img src="https://www.flooringinc.com/static/version1789462004/frontend/Dcw/hyvadesktop/en_US/images/cart-icon.svg" alt="cart-icon" width="24" height="24"> 4724 <picture class="icon"><source type="image/webp" srcset="https://www.flooringinc.com/static/version1789462004/frontend/Dcw/hyvadesktop/en_US/images/arrow.webp"><img src="https://www.flooringinc.com/static/version1789462004/frontend/Dcw/hyvadesktop/en_US/images/arrow.png" alt="arrow" width="8" height="6" class="icon"></picture> 4725 </span> 4726 4727 <span x-text="cart.summary_count" 4728 class="absolute top-0 right-0 h-5 px-2 py-1 -mt-5 -mr-4 text-xs font-semibold 4729 leading-none text-center text-white uppercase transform -translate-x-1 4730 translate-y-1/2 rounded-full bg-primary" 4731 :class="{ 4732 'hidden': !cart.summary_count, 4733 'block': cart.summary_count }" 4734 ></span> 4735 </a> 4736 4737 </div> 4738 </div> 4739
4740 <!--Cart Drawer--> 4741
4741<script> 4742 function initCartDrawer() { 4743 return { 4744 open: false, 4745 isLoading: false, 4746 cart: {}, 4747 maxItemsToDisplay: 10, 4748 itemsCount: 0, 4749 totalCartAmount: 0, 4750 getData(data) { 4751 if (data.cart) { 4752 this.cart = data.cart; 4753 this.itemsCount = data.cart.items && data.cart.items.length || 0; 4754 this.totalCartAmount = this.cart.summary_count; 4755 //this.cart.summary_count = this.itemsCount; 4756 this.setCartItems(); 4757 } 4758 this.isLoading = false; 4759 }, 4760 cartItems: [], 4761 getItemCountTitle() { 4762 return hyva.strf('(%0 of %1)', this.maxItemsToDisplay, this.totalCartAmount) 4763 }, 4764 setCartItems() { 4765 if(this.cart.items){ 4766 this.cartItems = this.cart.items && this.cart.items.sort((a, b) => b.item_id - a.item_id) || []; 4767 } else { 4768 this.cartItems = []; 4769 } 4770 if (this.maxItemsToDisplay > 0) { 4771 this.cartItems = this.cartItems.slice(0, parseInt(this.maxItemsToDisplay, 10)); 4772 } 4773 getCustomerData(['customer'], function(data) { 4774 if(data.messages.messages[0]){ 4775 var messagesType = data.messages.messages[0].type; 4776 var messagesText = data.messages.messages[0].text; 4777 if(messagesType === "success"){ 4778 dispatchMessages([ 4779 { 4780 type: messagesType, 4781 text: messagesText 4782 } 4783 ]); 4784 this.openCartDrawer(); 4785 } else { 4786 dispatchMessages([ 4787 { 4788 type: messagesType, 4789 text: messagesText 4790 } 4791 ]); 4792 } 4793 } 4794 window.dispatchEvent(new CustomEvent('amcart-loading-stop')); 4795 }); 4796 4797 if(document.querySelectorAll('.btn_cart')) { 4798 var addtocartnew = document.querySelectorAll('.btn_cart'); 4799 4800 addtocartnew.forEach(addtocartnew => { 4801 addtocartnew.addEventListener('click', () => { 4802 setTimeout(() => { 4803 }, 2500); 4804 }); 4805 }); 4806 } 4807 if(document.getElementById('product-addtocart-button')) { 4808 var addtocartnew2 = document.getElementById('product-addtocart-button'); 4809 4810 addtocartnew2.addEventListener('click', () => { 4811 setTimeout(() => { 4812 }, 2500); 4813 }); 4814 } 4815 4816 4817 }, 4818 deleteItemFromCart(itemId) { 4819 this.isLoading = true; 4820 4821 const formKey = hyva.getFormKey(); 4822 const postUrl = BASE_URL + 'amasty_quote/quote/removeFromMinicart'; 4823 fetch(postUrl, { 4824 "headers": { 4825 "content-type": "application/x-www-form-urlencoded; charset=UTF-8", 4826 }, 4827 "body": "form_key=" + formKey + "&item_id=" + itemId, 4828 "method": "POST", 4829 "mode": "cors", 4830 "credentials": "include" 4831 }).then(response => { 4832 window.location.href = window.location.pathname; // Reload the page after item remove 4833 if (response.redirected) { 4834 window.location.href = response.url; 4835 } else if (response.ok) { 4836 return response.json(); 4837 } else { 4838 window.dispatchMessages && window.dispatchMessages([{ 4839 type: 'warning',
4840 text: 'Could\u0020not\u0020remove\u0020item\u0020from\u0020quote.' 4841 }]); 4842 this.isLoading = false; 4843 } 4844 }).then(result => { 4845 window.dispatchMessages && window.dispatchMessages([{ 4846 type: result.success ? 'success' : 'error', 4847 text: result.success 4848 ? 'You\u0020removed\u0020the\u0020item.' 4849 : result.error_message 4850 }], result.success ? 5000 : 0) 4851 window.dispatchEvent(new CustomEvent('reload-customer-section-data')); 4852 }); 4853 }, 4854 toggleCartDrawer(event) { 4855 if (event.detail && event.detail.isOpen !== undefined) { 4856 if (event.detail.isOpen) { 4857 this.openCartDrawer() 4858 } else { 4859 this.open = false 4860 this.$refs && this.$refs.cartDialogContent && hyva.releaseFocus(this.$refs.cartDialogContent) 4861 } 4862 } else { 4863 this.openCartDrawer() 4864 } 4865 }, 4866 openCartDrawer() { 4867 this.open = true; 4868 this.$nextTick(() => { 4869 this.$refs && this.$refs.cartDialogContent && hyva.trapFocus(this.$refs.cartDialogContent) 4870 }) 4871 }, 4872 closeCartDrawer() { 4873 this.$dispatch('toggle-cart', { isOpen: false }) 4874 } 4875 } 4876 } 4877 function getCustomerData(sections, callback) { 4878 fetch('/customer/section/load/?sections=') 4879 .then(response => response.json()) 4880 .then(data => callback(data)) 4881 .catch(error => console.error('Error fetching customer data:', error)); 4882 } 4883</script>
4883 4884<section x-cloak 4885 x-show="cart" 4886 id="cart-drawer" 4887 x-data="initCartDrawer()" 4888 @private-content-loaded.window="getData($event.detail.data)" 4889 @toggle-cart.window="toggleCartDrawer($event)" 4890 @keydown.window.escape="closeCartDrawer" 4891> 4892 <div role="dialog" 4893 aria-labelledby="cart-drawer-title" 4894 aria-modal="true" 4895 @click.outside="open=false" 4896 class="fixed inset-y-0 right-0 z-30 flex max-w-full"> 4897 <div class="backdrop" 4898 x-show="open" 4899 x-transition:enter="ease-in-out duration-500" 4900 x-transition:enter-start="opacity-0" 4901 x-transition:enter-end="opacity-100" 4902 x-transition:leave="ease-in-out duration-500" 4903 x-transition:leave-start="opacity-100" 4904 x-transition:leave-end="opacity-0" 4905 role="button" 4906 @click="closeCartDrawer" 4907 aria-label="Close minicart"></div> 4908 <div class="relative w-screen max-w-md shadow-2xl" 4909 x-show="open" 4910 x-transition:enter="transform transition ease-in-out duration-500 sm:duration-700" 4911 x-transition:enter-start="translate-x-full" 4912 x-transition:enter-end="translate-x-0" 4913 x-transition:leave="transform transition ease-in-out duration-500 sm:duration-700" 4914 x-transition:leave-start="translate-x-0" 4915 x-transition:leave-end="translate-x-full" 4916 > 4917 <div 4918 x-show="open" 4919 x-transition:enter="ease-in-out duration-500" 4920 x-transition:enter-start="opacity-0" 4921 x-transition:enter-end="opacity-100" 4922 x-transition:leave="ease-in-out duration-500" 4923 x-transition:leave-start="opacity-100" 4924 x-transition:leave-end="opacity-0" class="absolute top-0 right-0 flex pr-6 pt-19"> 4925 <button @click="open=false" aria-label="Close panel" 4926 class="p-0 text-black transition duration-150 ease-in-out hover:text-black"> 4927 <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" width="24" height="24" role="img"> 4928 <path stroke-linecap="round" stroke-linejoin="round" d="M6 18L18 6M6 6l12 12"/> 4929<title>x</title></svg> 4930 </button> 4931 </div> 4932 <div class="flex flex-col h-full bg-lightblue"> 4933 4934 <header class="px-4 pt-19 pb-6"> 4935 <h2 id="cart-drawer-title" class="text-size18 font-medium text-black"> 4936 <template x-if="!itemsCount"> 4937 <div>My Cart</div></template> 4938<template x-if="itemsCount"> 4939 <div class="minicart-item-count"><span class="minicart-total-cart-amount" x-html="totalCartAmount"></span> <span x-show="totalCartAmount > 1">items</span><span x-show="totalCartAmount == 1">item</span> in cart</div> 4940</template> 4941 <span class="items-total text-xs text-black" 4942 x-show="maxItemsToDisplay && maxItemsToDisplay < itemsCount" 4943 x-text="getItemCountTitle()"> 4944 </span> 4945 </h2> 4946 </header> 4947 4948 4949<template x-if="!itemsCount"> 4950 <div class="relative px-4 py-6 border-bs sm:px-6 border-container"> 4951 Cart is empty </div> 4952 </template> 4953 <div class="relative grid overflow-y-auto overflow-x-hidden bg-lightblue cart-items"> 4954 <template x-for="item in cartItems"> 4955 <div class="flex items-start cart-item px-4 pt-5 pb-6 transition duration-150 4956 ease-in-out"> 4957 <template x-if="!item.product_has_url"> 4958 <a :href="item.product_url" class="w-1/4 pr-6 image"> 4959 <img 4960 :src="item.product_image.src" 4961 :width="item.product_image.width" 4962 :height="item.product_image.height" 4963 loading="lazy" 4964 /> 4965 </a> 4966 </template> 4967 <template x-if="item.product_has_url == 1"> 4968 <a :href="item.product_url" class="w-1/4 pr-6 image"> 4969 <img 4970 :src="item.product_image.src" 4971 :width="item.product_image.width" 4972 :height="item.product_image.height" 4973 loading="lazy" 4974 /> 4975 </a> 4976 </template> 4977 <div class="w-3/4"> 4978 <div> 4979 <template x-if="!item.product_has_url"> 4980 <a :href="item.product_url" class="prosku"> 4981 <p><span class="product-title text-size16 font-semibold text-darkblack" x-html="item.product_name"></span></p> 4982 </a> 4983 </template> 4984 <template x-if="item.product_has_url == 1"> 4985 <a :href="item.product_url" class="prosku"> 4986 <p><span class="product-title text-size16 font-semibold text-darkblack" x-html="item.product_name"></span></p> 4987 </a> 4988 </template> 4989 </div> 4990 <template x-for="option in item.options"> 4991 <div class="flex pt-2 pb-1 item-options w-full" 4992 x-show="option.label !== '' && !['Weight', 'Configurable Product SKU', 'Configurable Product Name', 'Configurable Product Category', 'Main Configurable Product Image Url', 'Main Configurable Product Image', 'Configurable Product Image', 'Color Display Name'].includes(option.label)"> 4993 <div class="flex w-full"> 4994 <p class="text-size14 font-medium text-black" x-show="option.label == 'Custom Length' || option.label == 'Roll Width' || option.label == 'Roll Length'" x-text="option.label + ':'"></p> 4995 <template x-if="!item.product_has_url"> 4996 <a :href="item.product_url" 4997 x-show="item.product_type !== 'grouped' && option.label != 'Configurable Product Image'" 4998 class="inline-flex"><p class="pl-1 text-size14 font-normal text-black" x-html="option.value"></p></a> 4999 </template> 5000 <template x-if="item.product_has_url == 1"> 5001 <a :href="item.product_url" 5002 x-show="item.product_type !== 'grouped' && option.label != 'Configurable Product Image'" 5003 class="inline-flex"><p class="pl-1 text-size14 font-normal text-black" x-html="option.value"></p></a> 5004 </template> 5005 </div> 5006 </div> 5007 </template> 5008 <p class="pb-4 pt-1"><span x-html="item.product_price" class="text-size20 font-bold text-custom-blue pricebox"></span></p> 5009 <div class="text-xl flex qty-fields items-center"> 5010 <p><span class="qty text-size14 font-semibold text-darkblack mr-1">QTY</span><span x-html="item.qty" class="qty-label text-center text-size16 font-semibold text-darkblack inline-block"></span></p> 5011 <div class="ml-auto"> 5012 <button 5013 @click="deleteItemFromCart(item.item_id)" 5014 > 5015 <picture><source type="image/webp" srcset="https://www.flooringinc.com/static/version1789462004/frontend/Dcw/hyvadesktop/en_US/images/Delete.webp"><img src="https://www.flooringinc.com/static/version1789462004/frontend/Dcw/hyvadesktop/en_US/images/Delete.png" alt="Delete" width="12" height="16"></picture> 5016 </button> 5017 </div> 5018 </div> 5019 5020 </div> 5021 </div> 5022 </template> 5023 </div> 5024<template x-if="itemsCount"> 5025 5026 <div class="relative bg-lightblue grid pt-3 pb-4"> 5027 <div class="w-full transition duration-150 ease-in-out sub-total"> 5028 <p class="text-darkgray text-size16 font-normal flex items-center pb-2">Subtotal: <span x-html="cart.subtotal" class="font-bold text-size22 text-custom-blue"></span></p> 5029 </div> 5030 5031 <div class="w-full transition duration-150 ease-in-out 5032 chekout-btn"> 5033 <a href="https://www.flooringinc.com/checkout/cart/" 5034 class="no-underline block relative font-medium text-size16 text-custom-white bg-custom-blue"> 5035 Proceed to Cart </a> 5036 </div> 5037 </div> 5038</template> 5039 </div> 5040 </div> 5041 <div class="flex flex-row justify-center items-center w-full h-full fixed select-none z-50" 5042 style="left: 50%;top: 50%;transform: translateX(-50%) translateY(-50%);background: rgba(255,255,255,0.7);" 5043 x-show="isLoading" 5044 x-transition:enter="ease-out duration-200" 5045 x-transition:enter-start="opacity-0" 5046 x-transition:enter-end="opacity-100" 5047 x-transition:leave="ease-in duration-200" 5048 x-transition:leave-start="opacity-100" 5049 x-transition:leave-end="opacity-0"> 5050 <!-- By Sam Herbert (@sherb), for everyone. More @ http://goo.gl/7AJzbL --> 5051<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 57 57" stroke="currentColor" class="text-primary" width="57" height="57" role="img"> 5052 <g fill="none" fill-rule="evenodd"> 5053 <g transform="translate(1 1)" stroke-width="2"> 5054 <circle cx="5" cy="50" r="5">
5055 <animate attributeName="cy" begin="0s" dur="2.2s" values="50;5;50;50" calcMode="linear" repeatCount="indefinite"/> 5056 <animate attributeName="cx" begin="0s" dur="2.2s" values="5;27;49;5" calcMode="linear" repeatCount="indefinite"/> 5057 </circle> 5058 <circle cx="27" cy="5" r="5"> 5059 <animate attributeName="cy" begin="0s" dur="2.2s" from="5" to="5" values="5;50;50;5" calcMode="linear" repeatCount="indefinite"/> 5060 <animate attributeName="cx" begin="0s" dur="2.2s" from="27" to="27" values="27;49;5;27" calcMode="linear" repeatCount="indefinite"/> 5061 </circle> 5062 <circle cx="49" cy="50" r="5"> 5063 <animate attributeName="cy" begin="0s" dur="2.2s" values="50;50;5;50" calcMode="linear" repeatCount="indefinite"/> 5064 <animate attributeName="cx" from="49" to="49" begin="0s" dur="2.2s" values="49;5;27;49" calcMode="linear" repeatCount="indefinite"/> 5065 </circle> 5066 </g> 5067 </g> 5068<title>loader</title></svg> 5069 <div class="ml-10 text-primary text-xl"> 5070 Loading... </div> 5071</div> 5072 </div> 5073 </template> 5074</section> 5075 5076 <!--Authentication Pop-Up--> 5077
5077<script> 5078 function initAuthentication() { 5079 return { 5080 open: false, 5081 forceAuthentication: false, 5082 checkoutUrl: 'https://www.flooringinc.com/checkout/index/', 5083 errors: 0, 5084 hasCaptchaToken: 0, 5085 displayErrorMessage: false, 5086 errorMessages: [], 5087 setErrorMessages: function setErrorMessages(messages) { 5088 this.errorMessages = [messages]; 5089 this.displayErrorMessage = this.errorMessages.length; 5090 }, 5091 submitForm: function () { 5092 // Do not rename $form, the variable is expected to be declared in the recaptcha output 5093 const $form = document.querySelector('#login-form-new'); 5094 5095 if (this.errors === 0) { 5096 this.dispatchLoginRequest($form); 5097 } 5098 }, 5099 onPrivateContentLoaded: function (data) { 5100 const isLoggedIn = data.customer && data.customer.firstname; 5101 if (data.cart && !isLoggedIn) { 5102 this.forceAuthentication = !data.cart.isGuestCheckoutAllowed; 5103 } 5104 }, 5105 redirectIfAuthenticated: function (event) { 5106 if (event.detail && event.detail.url) { 5107 this.checkoutUrl = event.detail.url; 5108 } 5109 if (!this.forceAuthentication) { 5110 window.location.href = this.checkoutUrl; 5111 } 5112 }, 5113 dispatchLoginRequest: function(form) { 5114 this.isLoading = true; 5115 const username = this.$refs['customer-email'].value; 5116 const password = this.$refs['customer-password'].value; 5117 const formKey = hyva.getFormKey(); 5118 const bodyFields = { 5119 'username': username, 5120 'password': password, 5121 'formKey': formKey 5122 }; 5123 const fieldName = 'g\u002Drecaptcha\u002Dresponse'; 5124 const recaptchaField = fieldName && form[fieldName]; 5125 if (recaptchaField) { 5126 bodyFields[fieldName] = recaptchaField.value; 5127 } 5128 fetch('https://www.flooringinc.com/customer/ajax/login/', { 5129 method: 'POST', 5130 headers: { 5131 'Content-Type': 'application/json', 5132 'X-Requested-With': 'XMLHttpRequest' 5133 }, 5134 body: JSON.stringify(bodyFields) 5135 } 5136 ).then(response => { 5137 return response.json() 5138 } 5139 ).then(data=> { 5140 this.isLoading = false; 5141 if (data.errors) { 5142 dispatchMessages([{ 5143 type: 'error', 5144 text: data.message 5145 }], 5000); 5146 this.errors = 1; 5147 this.hasCaptchaToken = 0; 5148 } else { 5149 window.location.href = this.checkoutUrl; 5150 } 5151 }); 5152 } 5153 } 5154 } 5155</script>
5155 5156<section id="authentication-popup" 5157 x-data="initAuthentication()" 5158 @private-content-loaded.window="onPrivateContentLoaded($event.detail.data)" 5159 @toggle-authentication.window="open = forceAuthentication; redirectIfAuthenticated(event)" 5160 @keydown.window.escape="open = false" 5161> 5162 <div role="dialog" 5163 aria-modal="true" 5164 @click.outside="open = false" 5165 class="inset-y-0 right-0 z-30 flex max-w-full" 5166 :class="{'fixed': open }" x-cloak x-show="open" 5167 > 5168 <div class="relative w-screen max-w-md pt-16 bg-container-lighter" 5169 x-show="open" 5170 x-cloak="" 5171 x-transition:enter="transform transition ease-in-out duration-500 sm:duration-700" 5172 x-transition:enter-start="translate-x-full" 5173 x-transition:enter-end="translate-x-0" 5174 x-transition:leave="transform transition ease-in-out duration-500 sm:duration-700" 5175 x-transition:leave-start="translate-x-0" 5176 x-transition:leave-end="translate-x-full" 5177 > 5178 <div 5179 x-show="open" 5180 x-cloak="" 5181 x-transition:enter="ease-in-out duration-500" 5182 x-transition:enter-start="opacity-0" 5183 x-transition:enter-end="opacity-100" 5184 x-transition:leave="ease-in-out duration-500" 5185 x-transition:leave-start="opacity-100" 5186 x-transition:leave-end="opacity-0" class="absolute top-0 right-0 flex p-2 mt-2"> 5187 <button @click="open = false;" aria-label="Close panel" 5188 class="p-2 text-gray-300 transition duration-150 ease-in-out hover:text-black"> 5189 <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" width="24" height="24" role="img"> 5190 <path stroke-linecap="round" stroke-linejoin="round" d="M6 18L18 6M6 6l12 12"/> 5191<title>x</title></svg> 5192 </button> 5193 </div> 5194 <div class="flex flex-col h-full py-6 space-y-6 bg-white shadow-xl overflow-y-auto"> 5195 <div class="block-customer-login bg-container border border-container mx-4 p-4 shadow-sm"> 5196 <p id="authenticate-customer-login" class="text-lg leading-7 text-gray-900"> 5197 <strong class="font-medium">Checkout using your account</strong> 5198 </p> 5199 5200 <form class="form form-login" 5201 method="post" 5202 @submit.prevent="submitForm();" 5203 id="login-form-new" 5204 > 5205 <div class="fieldset login"> 5206 <div class="field email required"> 5207 <label class="label" for="form-login-username" form="login-form" > 5208 <span>Email Address</span> 5209 </label> 5210 <div class="control"> 5211 <input name="username" 5212 id="form-login-username" 5213 x-ref="customer-email" 5214 @change="errors = 0" 5215 type="email" 5216 required 5217 class="form-input input-text" 5218 > 5219 </div> 5220 </div> 5221 <div class="field password required"> 5222 <label for="form-login-password" class="label" form="login-form"> 5223 <span>Password</span> 5224 </label> 5225 <div class="control"> 5226 <input name="password" 5227 id="form-login-password" 5228 type="password" 5229 class="form-input input-text" 5230 required 5231 x-ref="customer-password" 5232 @change="errors = 0" 5233 > 5234 </div> 5235 </div> 5236 5237 <input name="context" type="hidden" value="checkout" /> 5238 <div class="actions-toolbar flex justify-between pt-6 pb-2 items-center"> 5239 <button type="submit" class="inline-flex btn btn-primary disabled:opacity-75" 5240 > 5241 Sign In </button> 5242 <a href="https://www.flooringinc.com/customer/account/forgotpassword/" 5243 > 5244 Forgot Your Password? </a> 5245 </div> 5246 5247 </div> 5248 </form> 5249 </div> 5250 <div class="mx-4"> 5251 </div> 5252 <div class="block-new-customer bg-container border border-container mx-4 p-4 shadow-sm">
5253 <p id="authenticate-new-customer" class="text-lg mb-2 leading-7 text-gray-900"> 5254 <strong class="font-medium">Checkout as a new customer</strong> 5255 </p> 5256 5257 <div class="block-content"> 5258 <p class="mb-1"> 5259 Creating an account has many benefits: </p> 5260 <ul class="list-disc pl-5"> 5261 <li> See order and shipping status</li> 5262 <li> Track order history</li> 5263 <li> Check out faster</li> 5264 </ul> 5265 <div class="actions-toolbar flex justify-between mt-6 mb-2 items-center"> 5266 <a href="https://www.flooringinc.com/customer/account/create/" 5267 class="inline-flex btn btn-primary"> 5268 Create an Account </a> 5269 </div> 5270 </div> 5271 </div> 5272 </div> 5273 </div> 5274 </div> 5275</section> 5276 5277 <!--Cart Quote Drawer--> 5278
5278<script> 5279 function initQuoteCartDrawer() { 5280 return { 5281 open: false, 5282 cartData: {}, 5283 getQuoteCartData(data) { 5284 if (data.quotecart) { 5285 this.cartData = data.quotecart 5286 this.setCartItems(); 5287 } 5288 }, 5289 cartItems: [], 5290 setCartItems() { 5291 this.cartItems = this.cartData && this.cartData.items.sort(function(a,b) { return a.item_id - b.item_id }) || {} 5292 }, 5293 deleteItemFromCart(itemId) { 5294 var formKey = document.querySelector('input[name=form_key]').value; 5295 fetch(BASE_URL+"amasty_quote/sidebar/removeItem/", { 5296 "headers": { 5297 "content-type": "application/x-www-form-urlencoded; charset=UTF-8", 5298 }, 5299 "body": "form_key="+ formKey + "&item_id="+itemId, 5300 "method": "POST", 5301 "mode": "cors", 5302 "credentials": "include" 5303 }).then(function (response) { 5304 if (response.redirected) { 5305 window.location.href = response.url; 5306 } else if (response.ok) { 5307 return response.json(); 5308 } else { 5309 typeof window.dispatchMessages !== "undefined" && window.dispatchMessages( 5310 [{ 5311 type: "warning", 5312 text: "Could not remove item from quote." 5313 }], 5000 5314 ); 5315 } 5316 }).then(function (response) { 5317 typeof window.dispatchMessages !== "undefined" && window.dispatchMessages( 5318 [{ 5319 type: response.success ? "success" : "error", 5320 text: response.success 5321 ? "You removed the item." 5322 : response.error_message 5323 }], 5000 5324 ); 5325 var reloadCustomerDataEvent = new CustomEvent("reload-customer-section-data"); 5326 window.dispatchEvent(reloadCustomerDataEvent); 5327 }); 5328 } 5329 } 5330 } 5331</script>
5331 5332<section id="cart-quote-drawer" 5333 x-data="initQuoteCartDrawer()" 5334 @private-content-loaded.window="getQuoteCartData(event.detail.data)" 5335 @toggle-quote-cart.window="open=true;" 5336 @keydown.window.escape="open=false" 5337> 5338 <template x-if="cartData && cartData.summary_count"> 5339 <div role="dialog" 5340 aria-labelledby="cart-drawer-title" 5341 aria-modal="true" 5342 @click.away="open = false" 5343 class="fixed inset-y-0 right-0 z-30 flex max-w-full"> 5344 <div class="backdrop" 5345 x-show="open" 5346 x-transition:enter="ease-in-out duration-500" 5347 x-transition:enter-start="opacity-0" 5348 x-transition:enter-end="opacity-100" 5349 x-transition:leave="ease-in-out duration-500" 5350 x-transition:leave-start="opacity-100" 5351 x-transition:leave-end="opacity-0" 5352 @click="open = false" 5353 aria-label="Close panel"></div> 5354 <div class="relative w-screen max-w-md shadow-2xl" 5355 x-show="open" 5356 x-transition:enter="transform transition ease-in-out duration-500 sm:duration-700" 5357 x-transition:enter-start="translate-x-full" 5358 x-transition:enter-end="translate-x-0" 5359 x-transition:leave="transform transition ease-in-out duration-500 sm:duration-700" 5360 x-transition:leave-start="translate-x-0" 5361 x-transition:leave-end="translate-x-full" 5362 > 5363 <div 5364 x-show="open" 5365 x-transition:enter="ease-in-out duration-500" 5366 x-transition:enter-start="opacity-0" 5367 x-transition:enter-end="opacity-100" 5368 x-transition:leave="ease-in-out duration-500" 5369 x-transition:leave-start="opacity-100" 5370 x-transition:leave-end="opacity-0" class="absolute top-0 right-0 flex mr-3 mt-2"> 5371 <button @click="open = false" aria-label="Close panel" 5372 class="p-2 text-gray-300 transition duration-150 ease-in-out hover:text-black"> 5373 <svg class="w-6 h-6" fill="none" viewBox="0 0 24 24" stroke="currentColor"> 5374 <path stroke-linecap="round" stroke-linejoin="round" 5375 stroke-width="2" d="M6 18L18 6M6 6l12 12"> 5376 </path> 5377 </svg> 5378 </button> 5379 </div> 5380 <div class="flex flex-col h-full py-6 space-y-6 bg-white shadow-xl"> 5381 <header class="px-4 sm:px-6"> 5382 <div id="cart-drawer-title" class="text-lg font-medium leading-7 text-gray-900"> 5383 My Quote Cart </div> 5384 </header> 5385 <div class="relative grid gap-6 px-4 py-6 overflow-y-auto bg-white border-b 5386 sm:gap-8 sm:px-6 border-container"> 5387 <template x-for="item in cartItems"> 5388 <div class="flex items-start p-3 -m-3 space-x-4 transition duration-150 5389 ease-in-out rounded-lg hover:bg-gray-100"> 5390 <a :href="item.product_url" class="w-1/4"> 5391 <img 5392 :src="item.product_image.src" 5393 :width="item.product_image.width" 5394 :height="item.product_image.height" 5395 loading="lazy" 5396 /> 5397 </a> 5398 <div class="w-3/4 relative"> 5399 <div> 5400 <div class="text-xl"> 5401 <a :href="item.product_url" class="hover:underline"> 5402 <span x-html="item.qty"></span> x <span x-html="item.product_name"></span> 5403 </a> 5404 </div> 5405 <div class="text-sm"><span x-html="item.product_sku"></div> 5406 </div> 5407 <template x-for="option in item.options"> 5408 <div class="pt-2"> 5409 <p class="font-semibold" x-text="option.label + ':'"></p> 5410 <p class="text-secondary" x-html="option.value"></p> 5411 </div> 5412 </template> 5413 <div><span x-html="item.product_price"></span></div> 5414 <div class="pt-4"> 5415 <a :href="item.configure_url" 5416 x-show="item.product_type !== 'grouped'" 5417 class="inline-flex p-2 mr-2 btn btn-primary"> 5418 <svg fill="none" viewBox="0 0 24 24" stroke="currentColor" 5419 size="16" class="w-5 h-5"> 5420 <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" 5421 d="M15.232 5.232l3.536 3.536m-2.036-5.036a2.5 2.5 0 113.536 5422 3.536L6.5 21.036H3v-3.572L16.732 3.732z"> 5423 </path> 5424 </svg> 5425 </a> 5426 <button class="inline-flex p-2 btn btn-primary" 5427 @click="deleteItemFromCart(item.item_id)" 5428 > 5429 <svg fill="none" viewBox="0 0 24 24" stroke="currentColor" 5430 size="16" class="w-5 h-5"> 5431 <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" 5432 d="M19 7l-.867 12.142A2 2 0 0116.138 21H7.862a2 2 0 5433 01-1.995-1.858L5 7m5 4v6m4-6v6m1-10V4a1 1 0 00-1-1h-4a1 1 5434 0 00-1 1v3M4 7h16"> 5435 </path> 5436 </svg> 5437 </button> 5438 </div> 5439 </div> 5440 </div> 5441 </template> 5442 </div> 5443 <div class="relative grid gap-6 px-4 py-6 bg-white sm:gap-8 sm:px-6"> 5444 <div class="w-full p-3 -m-3 space-x-4 transition duration-150 ease-in-out rounded-lg 5445 hover:bg-gray-100">
5446 <span>Cart Subtotal:</span> 5447 <span class="text-gray-900 font-bold" x-text="hyva.formatPrice(cartData.subtotalAmount)"></span> 5448 </div> 5449 <div class="w-full"> 5450 <a href="https://www.flooringinc.com/amasty_quote/cart/" 5451 class="btn btn-secondary justify-center"> 5452 View and Edit Cart </a> 5453 </div> 5454 </div> 5455 </div> 5456 </div> 5457 </div> 5458 </template> 5459</section> 5460 5461</div> 5462 5463<div x-data="initKlaviyoCustomerTracking()" 5464 @private-content-loaded.window="sendCustomerDataToKlaviyo(event.detail.data)"></div> 5465
5465<script> 5466 function initKlaviyoCustomerTracking() { 5467 return { 5468 sendCustomerDataToKlaviyo(data) { 5469 window.addEventListener('init-external-scripts', () => { 5470 const _learnq = window._learnq || []; 5471 const customer = data.customer; 5472 var resource = document.createElement('script'); 5473 resource.async = "true"; 5474 resource.src = "https://static.klaviyo.com/onsite/js/klaviyo.js?company_id=WAwVDg"; 5475 var script = document.getElementsByTagName('script')[0]; 5476 script.parentNode.insertBefore(resource, script); 5477 5478 if (customer && customer.email) { 5479 script.addEventListener('load', function() { 5480 _learnq.push(['identify', { 5481 $email: customer.email, 5482 $first_name: customer.firstname ? customer.firstname : '', 5483 $last_name: customer.lastname ? customer.lastname : '' 5484 }]); 5485 }); 5486 } 5487 }, {once: true, passive: true}); 5488 } 5489 } 5490 } 5491 </script>
5491 5492<a class="action skip sr-only contentarea" 5493 href="#contentarea"> 5494 <span> 5495 Skip to Content </span> 5496</a> 5497<div class="widget block block-static-block"> 5498 <div data-content-type="html" data-appearance="default" data-element="main" data-decoded="true"><div class="notification5 text-center text-size13 font-normal text-white bg-[#15324C]"> 5499 <style>#html-body [data-pb-style=W9O5WD4]{justify-content:flex-start;display:flex;flex-direction:column;background-position:left top;background-size:cover;background-repeat:no-repeat;background-attachment:scroll}</style><div data-content-type="row" data-appearance="contained" data-element="main"><div data-enable-parallax="0" data-parallax-speed="0.5" data-background-images="{}" data-background-type="image" data-video-loop="true" data-video-play-only-visible="true" data-video-lazy-load="true" data-video-fallback-src="" data-element="inner" data-pb-style="W9O5WD4"><div data-content-type="html" data-appearance="default" data-element="main" data-decoded="true"><center> 5500<p style="font-size: medium;">ð Game Day Ready - Save Up to 35% Off - Sale Ends Sunday 10/4 </p> 5501 5502</center> 5503</div></div></div></div></div></div> 5504</header><main id="maincontent" class="page-main"><div id="contentarea" tabindex="-1"></div> 5505<div class="page messages">
5505<script> 5506 function initMessages() { 5507 "use strict"; 5508 return { 5509 messages: window.mageMessages || [], 5510 isEmpty() { 5511 return this.messages.reduce( 5512 function (isEmpty, message) { 5513 return isEmpty && message === undefined 5514 }, true 5515 ) 5516 }, 5517 removeMessage(messageIndex) { 5518 this.messages[messageIndex] = undefined; 5519 }, 5520 addMessages(messages, hideAfter) { 5521 messages.map((message) => { 5522 /* Code to avoid multiple messages on the page */ 5523 5524 if (message.text.includes("A customer with the same email address already exists")) { 5525 message.text = 'A customer with the same email address already exists in an associated website. If you would like to upgrade your account to a Pro Account - please <a href='+BASE_URL+'contact>contact customer service</a>.'; 5526 } 5527 if(this.messages!="") { 5528 this.messages=[]; 5529 } 5530 this.messages = this.messages.concat(message); 5531 if (hideAfter) { 5532 this.setHideTimeOut(this.messages.length -1, hideAfter); 5533 } 5534 }); 5535 }, 5536 setHideTimeOut(messageIndex, hideAfter) { 5537 setTimeout((messageIndex) => { 5538 this.removeMessage(messageIndex); 5539 }, hideAfter, messageIndex); 5540 }, 5541 eventListeners: { 5542 ['@messages-loaded.window']() { 5543 this.addMessages(event.detail.messages, event.detail.hideAfter) 5544 }, 5545 ['@private-content-loaded.window'](event) { 5546 const data = event.detail.data; 5547 if ( 5548 data.messages && 5549 data.messages.messages && 5550 data.messages.messages.length 5551 ) { 5552 this.addMessages(data.messages.messages); 5553 } 5554 }, 5555 ['@clear-messages.window']() { 5556 this.messages = []; 5557 } 5558 } 5559 } 5560 } 5561</script>
5561 5562<section id="messages" 5563 x-data="initMessages()" 5564 x-bind="eventListeners" 5565> 5566 <template x-if="!isEmpty()"> 5567 <div class="w-full"> 5568 <div role="alert" class="messages container"> 5569 <template x-for="(message, index) in messages" :key="index"> 5570 <div> 5571 <template x-if="message"> 5572 <div class="message" :class="message.type" 5573 :ui-id="'message-' + message.type" 5574 > 5575 <span x-html="message.text"></span> 5576 <a href="#" class="close cursor-pointer" title="close" 5577 @click.prevent="removeMessage(index)"> 5578 <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" class="text-white" width="18" height="18" role="img"> 5579 <path stroke-linecap="round" stroke-linejoin="round" d="M6 18L18 6M6 6l12 12"/> 5580<title>x</title></svg> 5581 </a> 5582 </div> 5583 </template> 5584 </div> 5585 </template> 5586 </div> 5587 </div> 5588 </template> 5589</section></div><div class="container flex flex-col md:flex-row flex-wrap font-bold"> 5590 <h1 class="text-gray-900 page-title title-font" 5591 > 5592 <span class="base" data-ui-id="page-title-wrapper" >Customer Login</span> </h1> 5593 </div> 5594<div class="widget block block-static-block"> 5595 <style>#html-body [data-pb-style=UYH2DF7]{justify-content:flex-start;display:flex;flex-direction:column;background-position:left top;background-size:cover;background-repeat:no-repeat;background-attachment:scroll}</style><div class="notification2 bg-custom-blue" data-content-type="row" data-appearance="full-bleed" data-enable-parallax="0" data-parallax-speed="0.5" data-background-images="{}" data-background-type="image" data-video-loop="true" data-video-play-only-visible="true" data-video-lazy-load="true" data-video-fallback-src="" data-element="main" data-pb-style="UYH2DF7"><div data-content-type="html" data-appearance="default" data-element="main" data-decoded="true"></div></div></div> 5596<div class="widget block block-static-block"> 5597 <style>#html-body [data-pb-style=A9GJREG]{justify-content:flex-start;display:flex;flex-direction:column;background-position:left top;background-size:cover;background-repeat:no-repeat;background-attachment:scroll}</style><div data-content-type="row" data-appearance="contained" data-element="main"><div data-enable-parallax="0" data-parallax-speed="0.5" data-background-images="{}" data-background-type="image" data-video-loop="true" data-video-play-only-visible="true" data-video-lazy-load="true" data-video-fallback-src="" data-element="inner" data-pb-style="A9GJREG"><div data-content-type="html" data-appearance="default" data-element="main" data-decoded="true"></div></div></div></div> 5598<div class="columns"><div class="column main">
5598<script> 5599 5600 5601</script>
vendor: 2 bytes, line 5601
5601
5602<script> 5603 function samplesubmit(mainproduct,inputValue,productids,colors,spidsColors,confproname,confproid,childproids) { 5604 this.isLoading = true; 5605 const formKey = hyva.getFormKey(); 5606 const postUrl = BASE_URL + 'sampleproduct/Sample/Products/'; 5607 fetch(postUrl, { 5608 "headers": { 5609 "content-type": "application/x-www-form-urlencoded; charset=UTF-8", 5610 }, 5611 "body": "form_key=" + formKey + "&action_type=" + inputValue+ "&pids=" + productids+ "&colors=" + colors+ "&spidsColors=" + spidsColors+ "&confproname=" + confproname+ "&confproid=" + confproid +"&childproid=" + childproids, 5612 "method": "POST", 5613 "mode": "cors", 5614 "credentials": "include" 5615 }).then(response => { 5616 //this.isLoading = false; 5617 //window.dispatchEvent(new CustomEvent('reload-customer-section-data')); 5618 //fetchHtmlContent(mainproduct); 5619 if (! response.ok) console.warn('GET request failed'); 5620 return response.json(); 5621 }).then(result => { 5622 this.isLoading = false; 5623 window.dispatchEvent(new CustomEvent('reload-customer-section-data')); 5624 fetchHtmlContent(mainproduct,result.is_sample_added); 5625 }); 5626 } 5627 </script>
5627 5628
5628<script> 5629 function fetchHtmlContent(pid,is_sample_added) { 5630 console.log('Fetching HTML content for PID:', pid); 5631 const formKey = hyva.getFormKey(); 5632 const randomString = Math.random().toString(36).substring(2, 15); 5633 const postUrl = BASE_URL + 'sampleproduct/sample/popup/?pid='+pid; 5634 fetch(postUrl) 5635 .then(response => response.text()) 5636 .then(html => { 5637 console.log('Response received:', html); 5638 let myDivelements = document.getElementsByClassName('htmlcontent'+pid); 5639 var numberofelements=myDivelements.length; 5640 for(var i=0;i<numberofelements;++i){ 5641 myDivelements[i].innerHTML = html; 5642 } 5643 if(is_sample_added == 1 ){ //&& window.innerWidth <= 767 5644 document.querySelector(".order-free-sample-popup .closemodal").dispatchEvent(new Event('click')); 5645 document.querySelector("#menu-cart-icon").dispatchEvent(new Event('click')); 5646 } 5647 }) 5648 .catch(error => { 5649 console.error(error); 5650 }); 5651 } 5652</script>
5652 5653
5653<script> 5654 if (window.require) { 5655 require(['jquery', 'domReady!'], function($){ 5656 if ($('.mfblogunveil').length) { 5657 require(['Magefan_Blog/js/lib/mfblogunveil'], function(){ 5658 $('.mfblogunveil').mfblogunveil(); 5659 }); 5660 } 5661 }); 5662 } else { 5663 /* e.g. hyva theme */ 5664 document.addEventListener("DOMContentLoaded", function(){ 5665 var items = document.getElementsByClassName('mfblogunveil'); 5666 var el, url; 5667 if (items.length) { 5668 for (var i=0; i<items.length;i++) { 5669 el = items[i]; 5670 url = el.getAttribute('data-original'); 5671 if (!url) { 5672 continue; 5673 } 5674 if ('IMG' == el.tagName) { 5675 el.src = url; 5676 } else { 5677 el.style.backgroundImage = "url('" + url + "')"; 5678 } 5679 } 5680 } 5681 }); 5682 } 5683 </script>
5683 5684 5685<div id="customer-login-container" class="login-container"><div class="customer_login_main"> 5686 <div class="block-new-customer social_login margin" > 5687 <h2 id="authenticate-new-customer" class="text-size18 font-medium text-darkblack"> 5688 Log In </h2> 5689 <div class="block-content"> 5690 <div id="add_button_register_byclass" x-data="bssButtonSocial()" x-ref="registerSocialButton"> 5691 <div class=""> 5692 <div class="sociallogin-buttons"> 5693 <ul class="sociallogin-clearfix flex flex-wrap"> 5694 <li class="w-full text-size14 font-medium text-darkblack relative sociallogin-button googleplus" title="Register with Google"> 5695 <a class="sociallogin-button-link sociallogin-button-click" id="sociallogin-button-click" rel="nofollow" 5696 href="javascript:void(0);" data-href="https://accounts.google.com/o/oauth2/auth?response_type=code&redirect_uri=https%3A%2F%2Fwww.flooringinc.com%2Fsociallogin%2Faccount%2Flogin%2Ftype%2Fgoogleplus%2F&client_id=900046866587-mph1s7dsg2dcau694j9ukb0m26hukidu.apps.googleusercontent.com&scope=https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fuserinfo.profile+https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fuserinfo.email&state=&access_type=offline&approval_prompt=auto" 5697 data-width="630" 5698 data-height="650" 5699 x-ref="googleplus" 5700 @click="popupSocial($refs.googleplus)"> 5701 <span class="sociallogin-button-auto"> 5702 <span class="sociallogin-button-icon"> 5703 </span> 5704 <span class="sociallogin-button-text">Login with Google</span> 5705 </span> 5706 </a> 5707 </li> 5708 </ul> 5709 <p class="or">or</p> 5710 </div> 5711 </div> 5712 <div style="clear: both;"></div> 5713 </div> 5714 </div> 5715 </div> 5716 <div class="block block-customer-login"> 5717 <div class="block-content" aria-labelledby="block-customer-login-heading"> 5718 <form class="form form-login" 5719 enctype="multipart/form-data" 5720 action="https://www.flooringinc.com/customer/account/loginPost/" 5721 method="post" 5722 id="login-form" 5723 data-mage-init='{"validation":{}}'> 5724 <input name="form_key" type="hidden" value="Jn9pE0dYVl7fyGdn" /> <fieldset class="fieldset login" data-hasrequired="* Required Fields"> 5725 <div class="field email required"> 5726 <label class="label" for="email"><span>Email</span></label> 5727 <div class="control"> 5728 <input name="login[username]" value="" 5729 autocomplete="off" id="email" type="email" class="input-text" 5730 title="Email" 5731 placeholder="Email address" 5732 data-mage-init='{"mage/trim-input":{}}' 5733 data-validate="{required:true, 'validate-email':true}"> 5734 </div> 5735 </div> 5736 <div class="field password required"> 5737 <label for="pass" class="label"><span>Password</span></label> 5738 <div class="control"> 5739 <input name="login[password]" type="password" 5740 autocomplete="off" class="input-text" id="pass" 5741 title="Password" 5742 placeholder="Password" 5743 data-validate="{required:true}"> 5744 </div> 5745 </div> 5746 <div class="field choice" data-bind="scope: 'showPassword'"> 5747 <!-- ko template: getTemplate() --><!-- /ko --> 5748 </div> 5749 <div class="flex justify-between items-center"> 5750 <div class="field choice showPassword" x-data> 5751 <input type="checkbox" name="login-show-password" @click="showLoginPassword()" id="login-show-password" value="" class="checkbox"> 5752 <label class="cursor-pointer text-size12 font-normal text-darkblack" for="login-show-password">Show password</label> 5753 <!-- <span class="cursor-pointer text-size12 font-normal text-darkblack" @click="showLoginPasswordForLable()" id="show-password-label" > 5754 Show Password 5755 </span>--> 5756 </div> 5757 <div class="secondary"><a class="action remind cursor-pointer text-size12 font-normal text-darkblack underline" href="https://www.flooringinc.com/customer/account/forgotpassword/"><span>Forgot Password?</span></a></div> 5758 </div> 5759 <div class="actions-toolbar w-full"> 5760 <div class="primary w-full"><button type="submit" class="action login primary w-full" name="send" id="send2"><span>Log In</span></button></div> 5761 5762 </div> 5763 5764 <div class="block-new-customer new_customer text-center" x-show ="openCreate">
5765 <h2 id="authenticate-new-customer" class="text-size13 font-normal text-darkblack"> 5766 New Customer? </h2> 5767 <div class="block-content"> 5768 <div class="actions-toolbar"> 5769 <a class="block cursor-pointer text-size18 font-semibold text-custom-blue" 5770 href="https://www.flooringinc.com/customer/account/create/" > 5771 Sign Up Now </a> 5772 </div> 5773 </div> 5774 </div> 5775 </fieldset> 5776 </form> 5777 </div> 5778 </div> 5779
5779<script> 5780 function bssButtonSocial() { 5781 return { 5782 renderShowmore : function (element) { 5783 var socialButton = element.querySelector('.sociallogin-clearfix').getElementsByTagName("li"); 5784 for (let i = 0; i <= socialButton.length - 1; i++) { 5785 socialButton[i].style.display = 'block'; 5786 } 5787 element.querySelector('.sociallogin-showmore').style.display = 'none'; 5788 }, 5789 popupSocial: function (element) { 5790 var href = element.getAttribute('data-href'); 5791 var width = element.getAttribute('data-width'); 5792 var height = element.getAttribute('data-height'); 5793 var popup_window = null; 5794 if (!width) { 5795 width = 650; 5796 } 5797 5798 if(!height) { 5799 height = 350; 5800 } 5801 5802 var left = parseInt((window.innerWidth- width) / 2); 5803 var top = parseInt((window.innerHeight - height) / 2); 5804 5805 var params = [ 5806 'resizable=yes', 5807 'scrollbars=no', 5808 'toolbar=no', 5809 'menubar=no', 5810 'location=no', 5811 'directories=no', 5812 'status=yes', 5813 'width='+ width, 5814 'height='+ height, 5815 'left='+ left, 5816 'top='+ top 5817 ]; 5818 5819 if(popup_window) { 5820 popup_window.close(); 5821 } 5822 5823 if(href) { 5824 popup_window = window.open(href,'',params.join(',')); 5825 popup_window.focus(); 5826 5827 }else{ 5828 alert('This Login Application was not configured correctly. Please contact our customer support.'); 5829 } 5830 return false; 5831 } 5832 } 5833 } 5834 function showLoginPassword(){ 5835 console.log("show Passowrd "); 5836 var showPwd=document.getElementById("login-show-password"); 5837 var password=document.getElementById("pass"); 5838 if(showPwd.checked==true) { 5839 password.type="text"; 5840 } else { 5841 password.type="password"; 5842 } 5843 } 5844 function showLoginPasswordForLable(){ 5845 console.log("show Passowrd"); 5846 var password=document.getElementById("pass"); 5847 if (password.type === "password") { 5848 password.type = "text"; 5849 } else { 5850 password.type = "password"; 5851 } 5852 } 5853 5854 </script>
5854 5855</div><div class="block block-new-customer"> 5856 <div class="block-content" aria-labelledby="block-new-customer-heading"> 5857 <style>#html-body [data-pb-style=QJF6DI6]{justify-content:flex-start;display:flex;flex-direction:column;background-position:left top;background-size:cover;background-repeat:no-repeat;background-attachment:scroll}#html-body [data-pb-style=YUUUSTW]{border-style:none}#html-body [data-pb-style=AGMB44J],#html-body [data-pb-style=TBFLKHD]{max-width:100%;height:auto}@media only screen and (max-width: 768px) { #html-body [data-pb-style=YUUUSTW]{border-style:none} }</style><div data-content-type="row" data-appearance="contained" data-element="main"><div data-enable-parallax="0" data-parallax-speed="0.5" data-background-images="{}" data-background-type="image" data-video-loop="true" data-video-play-only-visible="true" data-video-lazy-load="true" data-video-fallback-src="" data-element="inner" data-pb-style="QJF6DI6"><figure class="w-full" data-content-type="image" data-appearance="full-width" data-element="main" data-pb-style="YUUUSTW"><picture class="pagebuilder-mobile-hidden"><source type="image/webp" srcset="https://www.flooringinc.com/media/wysiwyg/login-img.webp"><img class="pagebuilder-mobile-hidden" src="https://www.flooringinc.com/media/wysiwyg/login-img.jpg" alt="" title="" data-element="desktop_image" data-pb-style="AGMB44J"></picture><picture class="pagebuilder-mobile-only"><source type="image/webp" srcset="https://www.flooringinc.com/media/wysiwyg/login-img.webp"><img class="pagebuilder-mobile-only" src="https://www.flooringinc.com/media/wysiwyg/login-img.jpg" alt="" title="" data-element="mobile_image" data-pb-style="TBFLKHD"></picture></figure></div></div> </div> 5858</div> 5859</div>
5859<script nonce="bDhraW5vaDFjczNyejIwenoxdG1tYm50dzNqb2RqOGY="> 5860 function hasWebP() { 5861 var elem = document.createElement('canvas'); 5862 5863 if (!!(elem.getContext && elem.getContext('2d'))) { 5864 return elem.toDataURL('image/webp').indexOf('data:image/webp') === 0; 5865 } 5866 return false; 5867 } 5868 5869 if (hasWebP()) { 5870 document.body.classList.add("webp"); 5871 } else { 5872 document.body.classList.add("no-webp"); 5873 }</script>
5873</div></div></main><footer class="page-footer"><div class="footer content"> 5874<style>#html-body [data-pb-style=MQRPJ36],#html-body [data-pb-style=TCILD21]{background-position:left top;background-size:cover;background-repeat:no-repeat;background-attachment:scroll}#html-body [data-pb-style=TCILD21]{justify-content:flex-start;display:flex;flex-direction:column}#html-body [data-pb-style=MQRPJ36]{align-self:stretch}#html-body [data-pb-style=L8W4GF3]{display:flex;width:100%}#html-body [data-pb-style=P3M9UW9]{justify-content:flex-start;display:flex;flex-direction:column;background-position:left top;background-size:cover;background-repeat:no-repeat;background-attachment:scroll;width:66.6667%;align-self:stretch}#html-body [data-pb-style=CJ8VT2Q]{border-style:none}#html-body [data-pb-style=CMMU4DK],#html-body [data-pb-style=SD11GJS]{max-width:100%;height:auto}#html-body [data-pb-style=PQE5PAT]{justify-content:flex-start;display:flex;flex-direction:column;width:33.3333%;align-self:stretch}#html-body [data-pb-style=O5JDDOV],#html-body [data-pb-style=PQE5PAT],#html-body [data-pb-style=S30DD27]{background-position:left top;background-size:cover;background-repeat:no-repeat;background-attachment:scroll}#html-body [data-pb-style=S30DD27]{justify-content:flex-start;display:flex;flex-direction:column}#html-body [data-pb-style=O5JDDOV]{align-self:stretch}#html-body [data-pb-style=E1QMNND]{display:flex;width:100%}#html-body [data-pb-style=AGQGWH8],#html-body [data-pb-style=B6GEF9I]{justify-content:flex-start;display:flex;flex-direction:column;align-self:stretch}#html-body [data-pb-style=B6GEF9I]{background-position:left top;background-size:cover;background-repeat:no-repeat;background-attachment:scroll;width:58.3333%}#html-body [data-pb-style=AGQGWH8]{width:41.6667%}#html-body [data-pb-style=AGQGWH8],#html-body [data-pb-style=AWDS0W8],#html-body [data-pb-style=W8FW3EE]{background-position:left top;background-size:cover;background-repeat:no-repeat;background-attachment:scroll}#html-body [data-pb-style=W8FW3EE]{justify-content:flex-start;display:flex;flex-direction:column}#html-body [data-pb-style=AWDS0W8]{align-self:stretch}#html-body [data-pb-style=PHW76I9]{display:flex;width:100%}#html-body [data-pb-style=HVOCS1N],#html-body [data-pb-style=TPKYLUC]{justify-content:flex-start;display:flex;flex-direction:column;background-position:left top;background-size:cover;background-repeat:no-repeat;background-attachment:scroll;width:50%;align-self:stretch}@media only screen and (max-width: 768px) { #html-body [data-pb-style=CJ8VT2Q]{border-style:none} }</style><div class="footer_top bg-white pb-2" data-content-type="row" data-appearance="full-bleed" data-enable-parallax="0" data-parallax-speed="0.5" data-background-images="{}" data-background-type="image" data-video-loop="true" data-video-play-only-visible="true" data-video-lazy-load="true" data-video-fallback-src="" data-element="main" data-pb-style="TCILD21"><div class="pagebuilder-column-group" data-background-images="{}" data-content-type="column-group" data-appearance="default" data-grid-size="12" data-element="main" data-pb-style="MQRPJ36"><div class="pagebuilder-column-line" data-content-type="column-line" data-element="main" data-pb-style="L8W4GF3"><div class="pagebuilder-column" data-content-type="column" data-appearance="full-height" data-background-images="{}" data-element="main" data-pb-style="P3M9UW9"><figure data-content-type="image" data-appearance="full-width" data-element="main" data-pb-style="CJ8VT2Q"><picture class="pagebuilder-mobile-hidden"><source type="image/webp" srcset="https://www.flooringinc.com/media/wysiwyg/flooring_logo.webp"><img class="pagebuilder-mobile-hidden" src="https://www.flooringinc.com/media/wysiwyg/flooring_logo.png" alt="Logo" title="Logo" width="266" height="80" loading="lazy" data-element="desktop_image" data-pb-style="SD11GJS" loading="lazy"></picture><picture class="pagebuilder-mobile-only"><source type="image/webp" srcset="https://www.flooringinc.com/media/wysiwyg/flooring_logo.webp"><img class="pagebuilder-mobile-only" src="https://www.flooringinc.com/media/wysiwyg/flooring_logo.png" alt="Logo" title="Logo" width="189" height="56" loading="lazy" data-element="mobile_image" data-pb-style="CMMU4DK" loading="lazy"></picture></figure></div><div class="pagebuilder-column" data-content-type="column" data-appearance="full-height" data-background-images="{}" data-element="main" data-pb-style="PQE5PAT"><div data-content-type="text" data-appearance="default" data-element="main"><ul> 5875<li><a tabindex="0" href="https://www.facebook.com/rubberflooringinc" target="_blank" rel="noopener"><picture><source type="image/webp" srcset="https://www.flooringinc.com/media/wysiwyg/footer-icon1.webp"><img id="BTPM32X" style="width: 10px; height: 20px;" src="https://www.flooringinc.com/media/wysiwyg/footer-icon1.png" alt="Facebook" width="10" height="20" loading="lazy" loading="lazy"></picture></a></li> 5876<li><a tabindex="0" href="https://www.instagram.com/flooring_inc/" target="_blank" rel="noopener"><picture><source type="image/webp" srcset="https://www.flooringinc.com/media/wysiwyg/footer-icon2.webp"><img id="PXIY4FF" style="width: 21px; height: 20px;" src="https://www.flooringinc.com/media/wysiwyg/footer-icon2.png" alt="Twitter" width="21" height="20" loading="lazy" loading="lazy"></picture></a></li> 5877<li><a tabindex="0" href="https://www.pinterest.com/flooringinc/" target="_blank" rel="noopener"><picture><source type="image/webp" srcset="https://www.flooringinc.com/media/wysiwyg/footer-icon3.webp">
5877<img style="width: 20px; height: 20px;" src="https://www.flooringinc.com/media/wysiwyg/footer-icon3.png" alt="print" width="20" height="20" loading="lazy" loading="lazy"></picture></a></li> 5878<li><a tabindex="0" href="https://www.youtube.com/user/flooringincvideos" target="_blank" rel="noopener"><picture><source type="image/webp" srcset="https://www.flooringinc.com/media/wysiwyg/youtube-icon.webp"><img id="I49QFU6" style="width: 25px; height: 18px;" src="https://www.flooringinc.com/media/wysiwyg/youtube-icon.png" alt="Youtube" width="25" height="18" loading="lazy" loading="lazy"></picture></a></li> 5879</ul></div></div></div></div></div><div class="footer_middle bg-white pb-2" data-content-type="row" data-appearance="full-bleed" data-enable-parallax="0" data-parallax-speed="0.5" data-background-images="{}" data-background-type="image" data-video-loop="true" data-video-play-only-visible="true" data-video-lazy-load="true" data-video-fallback-src="" data-element="main" data-pb-style="S30DD27"><div class="pagebuilder-column-group footer-wrap" data-background-images="{}" data-content-type="column-group" data-appearance="default" data-grid-size="12" data-element="main" data-pb-style="O5JDDOV"><div class="pagebuilder-column-line" data-content-type="column-line" data-element="main" data-pb-style="E1QMNND"><div class="pagebuilder-column footer_middle_lft" data-content-type="column" data-appearance="full-height" data-background-images="{}" data-element="main" data-pb-style="B6GEF9I"><div data-content-type="block" data-appearance="default" data-element="main"><div class="widget block block-static-block"> 5880 <style>#html-body [data-pb-style=CISRX33],#html-body [data-pb-style=K247IQ3]{background-position:left top;background-size:cover;background-repeat:no-repeat;background-attachment:scroll}#html-body [data-pb-style=K247IQ3]{justify-content:flex-start;display:flex;flex-direction:column}#html-body [data-pb-style=CISRX33]{align-self:stretch}#html-body [data-pb-style=GV5A1RW]{display:flex;width:100%}#html-body [data-pb-style=IE3QT2M],#html-body [data-pb-style=K294VVH],#html-body [data-pb-style=N7Q79IV]{justify-content:flex-start;display:flex;flex-direction:column;background-position:left top;background-size:cover;background-repeat:no-repeat;background-attachment:scroll;width:33.3333%;align-self:stretch}</style><div data-content-type="row" data-appearance="contained" data-element="main"><div data-enable-parallax="0" data-parallax-speed="0.5" data-background-images="{}" data-background-type="image" data-video-loop="true" data-video-play-only-visible="true" data-video-lazy-load="true" data-video-fallback-src="" data-element="inner" data-pb-style="K247IQ3"><div class="pagebuilder-column-group footer_middle_left" data-background-images="{}" data-content-type="column-group" data-appearance="default" data-grid-size="12" data-element="main" data-pb-style="CISRX33"><div class="pagebuilder-column-line" data-content-type="column-line" data-element="main" data-pb-style="GV5A1RW"><div class="pagebuilder-column" data-content-type="column" data-appearance="full-height" data-background-images="{}" data-element="main" data-pb-style="N7Q79IV"><h4 class="text-lg font-medium text-black mb-2" data-content-type="heading" data-appearance="default" data-element="main">Company info</h4><div data-content-type="text" data-appearance="default" data-element="main"><ul> 5881<li style="line-height: 10px;"><a id="T6SH02B" tabindex="0" href="/contact">Contact Us</a></li> 5882<li style="line-height: 10px;"><a tabindex="0" href="/about">About Us</a></li> 5883<li style="line-height: 10px;"><a id="EHRBRCU" tabindex="0" href="/careers">Careers</a></li> 5884<li style="line-height: 10px;"><a tabindex="0" href="/privacy-policy">Privacy Policy</a></li> 5885<li style="line-height: 10px;"><a tabindex="0" href="/affirm">Affirm</a></li> 5886<li style="line-height: 10px;"><a tabindex="0" href="/our-commitment-accessibility">Accessibility</a></li> 5887<li style="line-height: 10px;"><a tabindex="0" href="/terms-and-conditions">Terms & Conditions</a></li> 5888</ul></div></div><div class="pagebuilder-column" data-content-type="column" data-appearance="full-height" data-background-images="{}" data-element="main" data-pb-style="K294VVH"><h4 class="text-lg font-medium text-black mb-2" data-content-type="heading" data-appearance="default" data-element="main">Customer Service</h4><div data-content-type="text" data-appearance="default" data-element="main"><ul> 5889<li><a tabindex="0" href="/shipping-info">Shipping</a></li> 5890<li><a id="ER5IYQ2" tabindex="0" href="/sales/guest/form">Track Order</a></li> 5891<li><a tabindex="0" href="/returns-exchanges">Returns & Exchanges</a></li> 5892<li><a tabindex="0" href="/moneybackguarantee">Money Back Guarantee</a></li> 5893<li id="W8TRHHE"><a tabindex="0" href="/pro-advantage">Pro Advantage</a></li> 5894<li><a href="/dor-sites">Sales & Use Tax</a></li> 5895</ul></div></div><div class="pagebuilder-column" data-content-type="column" data-appearance="full-height" data-background-images="{}" data-element="main" data-pb-style="IE3QT2M"><h4 class="text-lg font-medium text-black mb-2" data-content-type="heading" data-appearance="default" data-element="main">Quick Links</h4><div data-content-type="text" data-appearance="default" data-element="main"><ul> 5896<li><a tabindex="0" href="/knowledge-base">FAQs</a></li> 5897<li><a tabindex="0" href="/sample-request">Samples</a></li> 5898<li><a tabindex="0" href="https://flooringinc.cashstar.com/store/recipient?locale=en-us">Gift Cards</a></li> 5899<li><a href="/promotions-disclaimer">Promotions</a></li> 5900</ul></div></div></div></div></div></div></div> 5901</div></div><div class="pagebuilder-column pl-6 footer_middle_rgt" data-content-type="column" data-appearance="full-height" data-background-images="{}" data-element="main" data-pb-style="AGQGWH8"><div data-content-type="block" data-appearance="default" data-element="main"><div class="widget block block-static-block"> 5902 <style>#html-body [data-pb-style=KSEJOAX]{background-position:left top;background-size:cover;background-repeat:no-repeat;background-attachment:scroll;align-self:stretch}#html-body [data-pb-style=H19I5XA]{display:flex;width:100%}#html-body [data-pb-style=F8YKO2R],#html-body [data-pb-style=L0EMJM5]{justify-content:flex-start;display:flex;flex-direction:column;background-position:left top;background-size:cover;background-repeat:no-repeat;background-attachment:scroll;width:41.6667%;align-self:stretch}#html-body [data-pb-style=L0EMJM5]{width:58.3333%}#html-body [data-pb-style=K1G3B6J]{text-align:right}</style><div class="pagebuilder-column-group footer_middle_right" data-background-images="{}" data-content-type="column-group" data-appearance="default" data-grid-size="12" data-element="main" data-pb-style="KSEJOAX"><div class="pagebuilder-column-line" data-content-type="column-line" data-element="main" data-pb-style="H19I5XA"><div class="pagebuilder-column" data-content-type="column" data-appearance="full-height" data-background-images="{}" data-element="main" data-pb-style="F8YKO2R"><div data-content-type="html" data-appearance="default" data-element="main" data-decoded="true"><div class="w-full"> 5903 <form class="form subscribe" action="https://www.flooringinc.com/newsletter/subscriber/new/" method="post" x-data="initNewsletterForm()" @submit.prevent="submitForm(
5903)" id="newsletter-validate-detail"> 5904 <div class="mb-3 text-sm font-medium tracking-widest text-gray-900 uppercase title-font"> 5905 <h4 class="text-lg font-medium text-black mb-1 capitalize">Get Ready To Be Floored!</h4> 5906 <p calss="sub_heading capitalize">Join our insider's club</p> 5907 </div> 5908 <div class="flex flex-wrap justify-center gap-2 md:justify-start"> 5909 <label for="newsletter-subscribe" class="sr-only"> 5910 Email Address </label> 5911 <input name="email" type="email" required id="newsletter-subscribe" class="form-input inline-flex w-full" placeholder="Enter email address"> 5912 <input name="form_key" type="hidden" value="Jn9pE0dYVl7fyGdn"> <button class="btn btn-primary"> 5913 Subscribe Now </button> 5914 </div> 5915 <div> 5916 <template x-if="displayErrorMessage"> 5917 <p class="flex items-center text-red"> 5918 <span class="inline-block w-8 h-8 mr-3"> 5919 <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewbox="0 0 24 24" stroke-width="2" stroke="currentColor" width="24" height="24" role="img"> 5920 <path stroke-linecap="round" stroke-linejoin="round" d="M12 8v4m0 4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z"></path> 5921<title>exclamation-circle</title></svg> 5922 </span> 5923 <template x-for="errorMessage in errorMessages"> 5924 <span x-html="errorMessage"></span> 5925 </template> 5926 </p> 5927 </template> 5928 </div> 5929 </form> 5930 <div class="w-full"> 5931 </div> 5932
5932<script> 5933 function initNewsletterForm() { 5934 return { 5935 errors: 0, 5936 hasCaptchaToken: 0, 5937 displayErrorMessage: false, 5938 errorMessages: [], 5939 setErrorMessages(messages) { 5940 this.errorMessages = [messages] 5941 this.displayErrorMessage = this.errorMessages.length 5942 }, 5943 submitForm() { 5944 // Do not rename $form, the variable is expected to be declared in the recaptcha output 5945 const $form = document.querySelector('#newsletter-validate-detail'); 5946 5947 if (this.errors === 0) { 5948 $form.submit(); 5949 } 5950 } 5951 } 5952 } 5953 </script>
5953 5954</div> 5955 5956<div class="pr-4 lg:w-1/4 md:w-1/2"> 5957 5958</div> </div></div><div class="pagebuilder-column" data-content-type="column" data-appearance="full-height" data-background-images="{}" data-element="main" data-pb-style="L0EMJM5"><h4 class="text-lg font-medium text-black mb-6" data-content-type="heading" data-appearance="default" data-element="main" data-pb-style="K1G3B6J">Flooring Inc.</h4><div data-content-type="text" data-appearance="default" data-element="main"><p style="text-align: right;">1958 Almaville Road Suite #110</p></div><div data-content-type="text" data-appearance="default" data-element="main"><p id="JM1KPUH" style="text-align: right;">Smyrna, TN 37167</p></div><div data-content-type="text" data-appearance="default" data-element="main"><p style="text-align: right;">p. <a tabindex="0" href="tel:8664166388">(866) 416-6388</a></p></div><div data-content-type="text" data-appearance="default" data-element="main"><p style="text-align: right;">e. <a id="H0FVHR7" tabindex="0" href="/contact">[email protected]</a></p></div><div data-content-type="text" data-appearance="default" data-element="main"><p style="text-align: right;"><strong>Hours (All times ET)</strong></p></div><div data-content-type="text" data-appearance="default" data-element="main"><p style="text-align: right;">Mon - Fri 9 am - 6 pm</p></div><div data-content-type="text" data-appearance="default" data-element="main"><p style="text-align: right;">Saturday 9 am - 5 pm <strong>(Sales Chat Only)</strong></p></div></div></div></div></div> 5959</div></div></div></div></div><div class="footer_bottom bg-white" data-content-type="row" data-appearance="full-bleed" data-enable-parallax="0" data-parallax-speed="0.5" data-background-images="{}" data-background-type="image" data-video-loop="true" data-video-play-only-visible="true" data-video-lazy-load="true" data-video-fallback-src="" data-element="main" data-pb-style="W8FW3EE"><div class="pagebuilder-column-group footer-wrap" data-background-images="{}" data-content-type="column-group" data-appearance="default" data-grid-size="12" data-element="main" data-pb-style="AWDS0W8"><div class="pagebuilder-column-line" data-content-type="column-line" data-element="main" data-pb-style="PHW76I9"><div class="pagebuilder-column footer_bottom_lft" data-content-type="column" data-appearance="full-height" data-background-images="{}" data-element="main" data-pb-style="TPKYLUC"><div data-content-type="text" data-appearance="default" data-element="main"><p>© Copyright 2010-2026 IncStores LLC. | All rights reserved.</p></div></div><div class="pagebuilder-column footer_bottom_rgt" data-content-type="column" data-appearance="full-height" data-background-images="{}" data-element="main" data-pb-style="HVOCS1N"><div data-content-type="block" data-appearance="default" data-element="main"><div class="widget block block-static-block"> 5960 <style>#html-body [data-pb-style=UD4KGT3]{background-position:left top;background-size:cover;background-repeat:no-repeat;background-attachment:scroll;align-self:stretch}#html-body [data-pb-style=QSS87SS]{display:flex;width:100%}#html-body [data-pb-style=IC77K1S],#html-body [data-pb-style=O5JWPM0]{justify-content:flex-start;display:flex;flex-direction:column;background-position:left top;background-size:cover;background-repeat:no-repeat;background-attachment:scroll;width:50%;align-self:stretch}</style><div class="pagebuilder-column-group footer_bottom_right" data-background-images="{}" data-content-type="column-group" data-appearance="default" data-grid-size="12" data-element="main" data-pb-style="UD4KGT3"><div class="pagebuilder-column-line" data-content-type="column-line" data-element="main" data-pb-style="QSS87SS"><div class="pagebuilder-column" data-content-type="column" data-appearance="full-height" data-background-images="{}" data-element="main" data-pb-style="IC77K1S"><div data-content-type="text" data-appearance="default" data-element="main"><ul> 5961<li><a title="Better Business Bureau - Flooring Inc." href="https://www.bbb.org/us/az/phoenix/profile/retail-floor-materials/flooringinccom-1126-97031168" target="_blank" rel="noopener"><picture><source type="image/webp" srcset="https://www.flooringinc.com/media/wysiwyg/footer-bbb.webp"><img id="BQMJYDJ" style="width: 129px; height: 35px;" src="https://www.flooringinc.com/media/wysiwyg/footer-bbb.png" alt="" width="125" height="34" loading="lazy" loading="lazy"></picture></a></li> 5962<li>Checks <picture><source type="image/webp" srcset="https://www.flooringinc.com/media/wysiwyg/footer-icon5.webp"><img style="width: 12px; height: 12px;" src="https://www.flooringinc.com/media/wysiwyg/footer-icon5.png" alt="" width="12" height="12" loading="lazy" loading="lazy"></picture> accepted by mail</li> 5963</ul></div></div><div class="pagebuilder-column" data-content-type="column" data-appearance="full-height" data-background-images="{}" data-element="main" data-pb-style="O5JWPM0"><div data-content-type="text" data-appearance="default" data-element="main"><ul> 5964<li><picture><source type="image/webp" srcset="https://www.flooringinc.com/media/wysiwyg/footer-icon6.webp"><img src="https://www.flooringinc.com/media/wysiwyg/footer-icon6.png" alt="" width="33" height="25" loading="lazy" loading="lazy"></picture></li> 5965<li><picture><source type="image/webp" srcset="https://www.flooringinc.com/media/wysiwyg/footer-icon7.webp"><img src="https://www.flooringinc.com/media/wysiwyg/footer-icon7.png" alt="" width="30" height="19" loading="lazy" loading="lazy"></picture></li> 5966<li><picture><source type="image/webp" srcset="https://www.flooringinc.com/media/wysiwyg/footer-icon8.webp"><img src="https://www.flooringinc.com/media/wysiwyg/footer-icon8.png" alt="" width="34" height="26" loading="lazy" loading="lazy"></picture></li> 5967<li><picture><source type="image/webp" srcset="https://www.flooringinc.com/media/wysiwyg/footer-icon9.webp"><img src="https://www.flooringinc.com/media/wysiwyg/footer-icon9.png" alt="" width="33" height="21" loading="lazy" loading="lazy"></picture></li> 5968<li><picture><source type="image/webp" srcset="https://www.flooringinc.com/media/wysiwyg/footer-icon10.webp"><img src="https://www.flooringinc.com/media/wysiwyg/footer-icon10.png" alt="" width="39" height="26" loading="lazy" loading="lazy"></picture></li> 5969<li><picture><source type="image/webp" srcset="https://www.flooringinc.com/media/wysiwyg/footer-icon11.webp"><img src="https://www.flooringinc.com/media/wysiwyg/footer-icon11.png" alt="" width="39" height="26" loading="lazy" loading="lazy"></picture></li> 5970<li><button id="uw-widget-custom-trigger" class="uw-widget-custom-trigger" aria-label="Accessibility Widget" data-uw-ignore-s25="true" data-uw-trigger="true" aria-haspopup="dialog"></button></li> 5971</ul></div></div></div></div><div data-content-type="html" data-appearance="default" data-element="main" data-decoded="true"><style> 5972.checkout-cart-index .summary-cart .cart-discount{display:block;} 5973.page-with-filter .products.wrapper.mode-list.products-list .item.product .catergory_slider_content .compare-buttons .compare-buttons-mobile{order:2;} 5974.checkout-payment-method .payment-method .payment-method-title.field.choice input#paypal_express+label{display:block;}.catalog-product-view .youMayAlso.products_slider a.priceBlock, .catalog-product-view .youMayAlso.products_slider .price-box{min-height: 95px;align-items: flex-start;} 5975@media(min-width:1280px){.mega_menu_banner img{max-width: 239px !important;}} 5976.cms-home .catergory_slider_content .product-item-link{font-size: .875rem;line-height: 1.313rem;} 5977@media(min-width: 768px){ 5978.catergory_slider_content .compare-buttons .qty_fields{width:auto;order: 2;}.catergory_slider_content .compare-buttons .ship-fax-plp{width:100%;order: 1;border-bottom:1px solid rgb(178,178,178);}
5978.catergory_slider_content .compare-buttons .orderSampleContent{order:3;} 5979.catergory_slider_content .compare-buttons .ship-fax-plp .ship-iconsada{display: block;} 5980.page-products #maincontent .products.mode-grid .catergory_slider_content .compare-buttons .orderSampleContent{order: 3;} 5981 .category_banner .pagebuilder-column-group .pagebuilder-column-line .pagebuilder-column figure picture{height: 100% !important;object-fit:cover;} 5982[data-content-type=products][data-appearance=carousel] [data-role=glider-content] .item.product{min-width: 370px;width: 370px;max-width: 370px;}[data-content-type=products][data-appearance=carousel] [data-role=glider-content]{display: flex;flex-wrap: nowrap;overflow-x: auto;} 5983.cms-home [data-content-type=products][data-appearance=carousel] [data-role=glider-content] .item.product:not(.glider-slide){min-width: 370px;} 5984[data-content-type=products][data-appearance=carousel] [data-role=glider-content]:not(.glider)::-webkit-scrollbar{width: 10px;} 5985[data-content-type=products][data-appearance=carousel] [data-role=glider-content]:not(.glider)::-webkit-scrollbar-track {background: #ffffff !important;} 5986[data-content-type=products][data-appearance=carousel] [data-role=glider-content]:not(.glider)::-webkit-scrollbar-thumb {background: #ffffff !important;} 5987} 5988@media(min-width: 768px){ 5989 .featured_partners .swiper-container:not(.swiper-initialized){display: flex;overflow-x: auto;flex-wrap: nowrap;width: 100%;max-width: 100%;min-width: 100%;transform: inherit;} 5990 .featured_partners .swiper-container:not(.swiper-initialized) .swiper-slide{width: 16%;} 5991 .featured_partners .swiper-container:not(.swiper-initialized)::-webkit-scrollbar{width: 10px;} 5992 .featured_partners .swiper-container:not(.swiper-initialized)::-webkit-scrollbar-track {background: #ffffff !important;} 5993 .featured_partners .swiper-container:not(.swiper-initialized)::-webkit-scrollbar-thumb {background: #ffffff !important;} 5994 .featured_partners .swiper-container:not(.swiper-initialized)::-webkit-scrollbar-thumb:hover {background: #ffffff !important;} 5995} 5996@media(max-width:767px){.page-products #maincontent .toolbar.toolbar-products .pages-items{justify-content: center;gap: 10px;box-shadow: none;}} 5997</style></div></div> 5998</div></div></div></div><div data-content-type="html" data-appearance="default" data-element="main" data-decoded="true">
5998<script> 5999 document.addEventListener('DOMContentLoaded', function () { 6000 const gallery = document.querySelector('#gallery'); 6001 const header = document.querySelector('#header'); 6002 if (!gallery || !header) return; 6003 const stickyTop = header.offsetHeight; 6004 // parent/container where sticky should stop 6005 const parent = gallery.parentElement; 6006 function checkSticky() { 6007 const rect = gallery.getBoundingClientRect(); 6008 const parentRect = parent.getBoundingClientRect(); 6009 // sticky active only while parent still has space 6010 const isSticky = 6011 rect.top <= stickyTop && 6012 parentRect.bottom > rect.height + stickyTop; 6013 document.body.classList.toggle('gallery-sticky', isSticky); 6014 } 6015 checkSticky(); 6016 window.addEventListener('scroll', checkSticky); 6017 window.addEventListener('resize', checkSticky); 6018 }); 6019</script>
6019 6020<style> 6021@media (min-width: 1200px) { 6022 .megamenu_items:hover>.megamenu { 6023 max-width: 1440px; 6024 } 6025} 6026.products__recommendations .products_slider .catergory_slider_content .color_counts{margin-bottom: 15px;} 6027html.order_active .page-header #header{z-index: -1;} 6028html.order_active{overflow: hidden !important;} 6029@media(min-width: 768px){.checkout-cart-index #shopping-cart-table .cart.item .item-info td{flex-wrap: nowrap;}} 6030</style> 6031<style> 6032.cms-home .order-free-sample-popup{display: none;} 6033.cms-home.order_active .order-free-sample-popup{display: flex;} 6034@media(min-width:768px){ 6035.page-with-filter .widget-product-carousel .catergory_slider_content .compare-buttons{flex-wrap: wrap;} 6036.page-with-filter .widget-product-carousel .catergory_slider_content .compare-buttons .ship-fax-plp{order:1;} 6037.page-with-filter .widget-product-carousel .catergory_slider_content .compare-buttons .compare-buttons-mobile{width: 100%;order: 2;display: flex;justify-content: space-between;} 6038.page-with-filter .widget-product-carousel .catergory_slider_content .compare-buttons .orderSampleContent .order_btn{margin-top: 10px;} 6039.page-with-filter .widget-product-carousel .catergory_slider_content .compare-buttons{border-top: 0px;padding-top:0px;margin-top: 0px;} 6040.catalog-product-view .products_slider .compare-buttons .qty_fields .btn_cart{width:110px} 6041} 6042@media(max-width:767px){ 6043.page-with-filter .widget-product-carousel .catergory_slider_content .compare-buttons{flex-wrap: wrap;} 6044.page-with-filter .widget-product-carousel .catergory_slider_content .compare-buttons .ship-fax-plp{order:1;width: 100%;} 6045.page-with-filter .widget-product-carousel .catergory_slider_content .compare-buttons .compareBtn{order:2;justify-content: flex-start;width: auto;margin-top: 10px;} 6046.page-with-filter .widget-product-carousel .catergory_slider_content .compare-buttons .orderSampleContent{order:3;margin-top: 10px;} 6047.page-with-filter .widget-product-carousel .catergory_slider_content .compare-buttons .compare-buttons-mobile{order:2;width: 100%;display: flex;justify-content: space-between;} 6048} 6049#related_cart_slider .js_slides{margin-right: 0;margin-left: 0;} 6050@media (min-width: 1024px) { 6051.container { 6052 max-width: 1440px !important; 6053} 6054} 6055.page-with-filter .product-item .product-info .price-box .price-container .price-wrapper span.price{font-size: 20px !important;color: #1e1e1e !important;} 6056.page-with-filter .product-item .product-info .price-box .price-container .price-wrapper{font-size: 20px !important;line-height: 20px !important} 6057.brand_logo_listpage img, div.brand_logo_listpage img{max-width:100px} 6058.catalog-product-view .product-item .product-info .price-box .price-container .price-wrapper{color: rgb(52 174 74 / var(--tw-text-opacity)) !important;line-height: 19px !important;} 6059 6060.catalog-product-view .product-info-main .quickship_swatch_option.incstores_pim_color_axis .color_swatches .swatch-attribute-options .selectOptionColor .select-none.swatch-option{display: none;} 6061 6062@media(max-width: 767px){ 6063 .related_products_list_view .glider-track{width: 100% !important;flex-wrap: nowrap;align-items: flex-start;} 6064 .related_products_list_view .related_products_list_view_content{width: 100% !important;min-width: 280px;max-width: 280px;} 6065} 6066 6067.dcw-share-cart .space-y-4>:not([hidden])~:not([hidden]) { 6068 --tw-space-y-reverse: 0; 6069 margin-top: calc(1rem * (1 - var(--tw-space-y-reverse))); 6070 margin-bottom: calc(1rem * var(--tw-space-y-reverse)); 6071} 6072.dcw-share-cart .bg-black\/50 { 6073 background-color: #00000080; 6074} 6075.dcw-share-cart .z-\[999\] { 6076 z-index: 999; 6077} 6078</style></div></div>
6079<script> 6080 window.addEventListener('init-external-scripts', () => { 6081 const klaviyoScript = document.createElement('script'); 6082 klaviyoScript.src = '//static.klaviyo.com/onsite/js/klaviyo.js?company_id=WAwVDg'; 6083 klaviyoScript.type = 'text/javascript'; 6084 klaviyoScript.async = true; 6085 document.head.append(klaviyoScript); 6086 }, {once: true, passive: true}); 6087</script>
vendor: 1 bytes, line 6087
6087
6088<script> 6089 document.addEventListener('DOMContentLoaded', function() { 6090 const buttons = document.querySelectorAll('.cms-home .order_btn'); 6091 buttons.forEach(button => { 6092 button.addEventListener('click', function() { 6093 const modal = this.closest('.orderSampleContent').querySelector('.order-free-sample-popup'); 6094 if (modal) { 6095 modal.style.display = 'block'; 6096 } 6097 }); 6098 }); 6099 6100 // Handle closing the modal 6101 document.querySelectorAll('.cms-home .order-free-sample-popup .closemodal').forEach(closeBtn => { 6102 closeBtn.addEventListener('click', function() { 6103 const modal = this.closest('.order-free-sample-popup'); 6104 if (modal) { 6105 modal.style.display = 'none'; 6106 } 6107 }); 6108 }); 6109 }); 6110</script>
6110 6111
6112<script> 6113 document.addEventListener('DOMContentLoaded', function () { 6114 function updateRatingsClass(ratingEl) { 6115 const hasReviews = ratingEl.querySelector('.bv_numReviews_component_container'); 6116 ratingEl.classList.toggle('no-reviews', !hasReviews); 6117 } 6118 document.querySelectorAll('.ratings').forEach(ratingEl => { 6119 updateRatingsClass(ratingEl); 6120 const observer = new MutationObserver(() => { 6121 updateRatingsClass(ratingEl); 6122 }); 6123 observer.observe(ratingEl, { 6124 childList: true, 6125 subtree: true 6126 }); 6127 }); 6128 }); 6129</script>
6129 6130 6131<link rel="stylesheet" type="text/css" href="https://www.flooringinc.com/static/version1789462004/frontend/Dcw/hyvadesktop/en_US/css/poppins.min.css" media="print" onload="this.media='all'"/> 6132<link rel="stylesheet" type="text/css" href="https://www.flooringinc.com/static/version1789462004/frontend/Dcw/hyvadesktop/en_US/css/print.min.css" media="print" onload="this.media='all'"/> 6133<link rel="stylesheet" type="text/css" href="https://www.flooringinc.com/static/version1789462004/frontend/Dcw/hyvadesktop/en_US/css/admin.min.css" media="print" onload="this.media='all'"/> 6134<link rel="stylesheet" type="text/css" href="https://www.flooringinc.com/static/version1789462004/frontend/Dcw/hyvadesktop/en_US/Bss_SocialLogin/css/jquery.fancybox.min.css" media="print" onload="this.media='all'"/> 6135<link rel="stylesheet" type="text/css" href="https://www.flooringinc.com/static/version1789462004/frontend/Dcw/hyvadesktop/en_US/Hyva_MirasvitLayeredNavigation/css/lib/nouislider.min.css" media="print" onload="this.media='all'"/> 6136<link rel="stylesheet" type="text/css" href="https://www.flooringinc.com/static/version1789462004/frontend/Dcw/hyvadesktop/en_US/Astound_Affirm/affirm-promo.min.css" media="print" onload="this.media='all'"/> 6137<link rel="stylesheet" type="text/css" href="https://www.flooringinc.com/static/version1789462004/frontend/Dcw/hyvadesktop/en_US/Dcw_CircularDesignerTool/css/base-global-header-footer.min.css" media="print" onload="this.media='all'"/> 6138<link rel="stylesheet" type="text/css" href="https://www.flooringinc.com/static/version1789462004/frontend/Dcw/hyvadesktop/en_US/Dcw_CircularDesignerTool/css/matdesigner.min.css" media="print" onload="this.media='all'"/> 6139<link rel="stylesheet" type="text/css" href="https://www.flooringinc.com/static/version1789462004/frontend/Dcw/hyvadesktop/en_US/Magefan_Blog/css/comments.min.css" media="print" onload="this.media='all'"/> 6140<link rel="stylesheet" type="text/css" href="https://www.flooringinc.com/static/version1789462004/frontend/Dcw/hyvadesktop/en_US/Plumrocket_GlobalPrivacyControl/css/gpc.min.css" media="print" onload="this.media='all'"/></div></footer>
6141<script> 6142 function dataServicesShoppingCartContextData() 6143 { 6144 return { 6145 initContext(cartData) { 6146 let contextCartItems = []; 6147 6148 cartData.items.forEach(function (item){ 6149 contextCartItems.push({ 6150 id: item.item_id, 6151 formattedPrice: parseFloat(item.product_price_value ? item.product_price_value : 0), 6152 quantity: item.qty, 6153 product: { 6154 productType: item.product_type, 6155 productId: item.product_id, 6156 name: item.product_name, 6157 sku: item.product_sku, 6158 mainImageUrl : item.product_image.src 6159 }, 6160 prices: { 6161 price: { 6162 value: parseFloat(item.product_price_value ? item.product_price_value : 0) 6163 } 6164 } 6165 }) 6166 }); 6167 6168 magentoStorefrontEvents.context.setShoppingCart({ 6169 id: cartData.dsCartId, 6170 totalQuantity: cartData.summary_count, 6171 prices: { 6172 subtotalExcludingTax: { 6173 value: parseFloat(cartData.subtotalAmountExclTax ? cartData.subtotalAmountExclTax : 0) 6174 }, 6175 subtotalIncludingTax: { 6176 value: parseFloat(cartData.subtotalAmount ? cartData.subtotalAmount : 0) 6177 } 6178 }, 6179 items: contextCartItems, 6180 possibleOnepageCheckout: cartData.possible_onepage_checkout, 6181 giftMessageSelected : false, 6182 giftWrappingSelected : false 6183 }); 6184 6185 window.dispatchEvent(new Event("shoppingCartContextSet")); 6186 } 6187 } 6188 } 6189</script>
6189 6190<div x-data="dataServicesShoppingCartContextData()" 6191 @private-content-loaded.window="initContext($event.detail.data.cart)"></div> 6192 6193
6194<script> 6195 (function () { 6196 'use strict'; 6197 6198 /** 6199 * Config to determine which element is responsible for the form submission 6200 * 6201 * @type {[{elementSelector: undefined|string, submitAttribute: string}]} 6202 */ 6203 const formWrapperConfig = [{"elementSelector":null,"submitAttribute":"submit"},{"elementSelector":"[type=\"submit\"]","submitAttribute":"click"}]; 6204 6205 /** 6206 * Replace protected forms submit with amRecaptchaModel.execute($event) method. 6207 * Call original submit on amrecaptcha-callback event after successful captcha validation. 6208 * 6209 * @return {void} 6210 */ 6211 const wrapFormSubmit = function () { 6212 document.addEventListener("DOMContentLoaded", function () { 6213 const formsSelector = window.amRecaptchaModel?.formsToProtect || ''; 6214 if (formsSelector.length === 0) { 6215 return; 6216 } 6217 6218 document.querySelectorAll(formsSelector)?.forEach(formElement => { 6219 if (!formElement) { 6220 return; 6221 } 6222 6223 const { elementToWrap, attributeNameToWrap } = resolveElementWrapping(formElement); 6224 if (!elementToWrap || !attributeNameToWrap) { 6225 return; 6226 } 6227 6228 setElementAttributes(formElement, elementToWrap, attributeNameToWrap); 6229 }); 6230 }); 6231 }; 6232 6233 /** 6234 * Find submit event and DOM element that has this event using formWrapperConfig. 6235 * 6236 * @param {HTMLElement} formElement 6237 * @return {{elementToWrap: undefined|string, attributeNameToWrap: undefined|string}} 6238 */ 6239 const resolveElementWrapping = function (formElement) { 6240 let result = { 6241 elementToWrap: undefined, 6242 attributeNameToWrap: undefined 6243 }; 6244 6245 formWrapperConfig.forEach(({ elementSelector, submitAttribute }) => { 6246 const elementToWrap = !!elementSelector ? formElement.querySelector(elementSelector) : formElement; 6247 if (!elementToWrap) { 6248 return; 6249 } 6250 6251 const attributeNameToWrap = elementToWrap.getAttributeNames().find( 6252 (elementAttribute) => { 6253 /** @type {string[]} */ 6254 const submitAttributeVariations = ['@', 'x-on:'].map(variation => variation + submitAttribute); 6255 6256 return submitAttributeVariations.some( 6257 (submitAttributeVariation) => elementAttribute.startsWith(submitAttributeVariation) 6258 ) 6259 } 6260 ); 6261 if (!attributeNameToWrap) { 6262 return; 6263 } 6264 6265 result.elementToWrap = elementToWrap; 6266 result.attributeNameToWrap = attributeNameToWrap; 6267 }); 6268 6269 return result; 6270 } 6271 6272 /** 6273 * Set attribute to wrap original submit, add eventListeners for captcha callbacks 6274 * 6275 * @param {HTMLElement} formElement 6276 * @param {HTMLElement} elementToWrap 6277 * @param {string} attributeNameToWrap 6278 */ 6279 const setElementAttributes = function (formElement, elementToWrap, attributeNameToWrap) { 6280 const originalSubmit = elementToWrap.getAttribute(attributeNameToWrap); 6281 elementToWrap.removeAttribute(attributeNameToWrap); 6282 6283 /** 6284 * To properly set submit attribute - we need to replace '@' with 'x-on:' 6285 * and add preventDefault behaviour 6286 */ 6287 elementToWrap.setAttribute( 6288 attributeNameToWrap.replace(/^@/, 'x-on:').replace(/.prevent$/, '') + '.prevent', 6289 'amRecaptchaModel.execute($event)' 6290 ); 6291 elementToWrap.setAttribute( 6292 'x-on:amrecaptcha-executable-callback', 6293 originalSubmit 6294 ); 6295 } 6296 6297 wrapFormSubmit(); 6298 })(window.amRecaptchaModel = window.amRecaptchaModel || {}); 6299</script>
6299 6300
6301<script> 6302 function initAuthenticationBss() { 6303 return { 6304 open: false, 6305 openLogin : false, 6306 openRegister : false, 6307 openForgot : false, 6308 openCreate : true, 6309 passwordsMatching: true, 6310 openMessage: false, 6311 errors: 0, 6312 message: "", 6313 hasCaptchaToken: 0, 6314 openButtonLogin : false, 6315 openButtonRegister : false, 6316 openSuccessMessage : false, 6317 checkUseReCaptcha: 1, 6318 recaptchaLoading: null, 6319 initSocial() { 6320 if (!this.checkUseReCaptcha) { 6321 return Promise.resolve(); 6322 } 6323 if (this.recaptchaLoading) { 6324 return this.recaptchaLoading; 6325 } 6326 if (typeof window.grecaptcha !== 'undefined') { 6327 this.recaptchaLoading = Promise.resolve(); 6328 return this.recaptchaLoading; 6329 } 6330 this.recaptchaLoading = new Promise((resolve, reject) => { 6331 const recaptchaUrl = `https://www.google.com/recaptcha/api.js?render=6LdQFsgqAAAAAFaiT_SQ7C9UmCcxWxpMd6pIMAEO&hl=en`; 6332 const script = document.createElement('script'); 6333 script.setAttribute('type', 'text/javascript'); 6334 script.setAttribute('src', recaptchaUrl); 6335 script.onload = () => resolve(); 6336 script.onerror = () => reject(new Error('Failed to load reCAPTCHA')); 6337 document.head.appendChild(script); 6338 }); 6339 return this.recaptchaLoading; 6340 }, 6341 loadRecaptchaOnInteraction() { 6342 if (!this.checkUseReCaptcha) { 6343 return; 6344 } 6345 // Avoid scroll/mousemove/wheel â they fire on load / DevTools / trackpads. 6346 const events = ['pointerdown', 'keydown', 'touchstart']; 6347 const load = () => { 6348 events.forEach((eventName) => { 6349 window.removeEventListener(eventName, load, { capture: true }); 6350 }); 6351 this.initSocial(); 6352 }; 6353 events.forEach((eventName) => { 6354 window.addEventListener(eventName, load, { once: true, passive: true, capture: true }); 6355 }); 6356 }, 6357 checkPasswordsMatch() { 6358 if (document.getElementById('password').value === 6359 document.getElementById('password-confirmation').value) { 6360 this.passwordsMatching = true; 6361 return true; 6362 } 6363 this.passwordsMatching = false; 6364 return false; 6365 }, 6366 submitForm: function () { 6367 const $form = document.querySelector('#login-form'); 6368 if (this.errors === 0) { 6369 this.dispatchLoginRequest($form); 6370 } 6371 }, 6372 submitForgotForm : function () { 6373 const $form = document.querySelector('#fotgot-form'); 6374 if (this.errors === 0) { 6375 this.dispatchForgotRequest($form); 6376 } 6377 }, 6378 submitRegisterForm : function () { 6379 const $form = document.querySelector('#create-form'); 6380 if (this.errors === 0) { 6381 this.dispatchRegisterRequest($form); 6382 } 6383 }, 6384 validateCaptcha : async function () { 6385 await this.initSocial(); 6386 return new Promise((resolve, reject) => { 6387 if (typeof window.grecaptcha === 'undefined') { 6388 return reject(new Error('reCAPTCHA is not available')); 6389 } 6390 grecaptcha.ready(function () { 6391 grecaptcha.execute('6LdQFsgqAAAAAFaiT_SQ7C9UmCcxWxpMd6pIMAEO', {action: 'submit'}).then(function (token) { 6392 return resolve(token); 6393 }).catch(reject); 6394 }); 6395 }); 6396 }, 6397 dispatchLoginRequest:async function (form) { 6398 if (this.checkUseReCaptcha) { 6399 let token = await this.validateCaptcha(); 6400 if(token) 6401 { 6402 document.getElementById("g-recaptcha-response").setAttribute('value',token); 6403 } 6404 } 6405 const username = this.$refs['customer-email'].value; 6406 const password = this.$refs['customer-password'].value; 6407 const recaptchaValue = document.getElementById("g-recaptcha-response").value; 6408 const postUrl = "https://www.flooringinc.com/sociallogin/popup/login/"; 6409 fetch(postUrl, { 6410 headers: { 6411 contentType: "application/x-www-form-urlencoded; charset=UTF-8", 6412 }, 6413 body: new URLSearchParams({ 6414 username: username, 6415 password: password, 6416 ['g-recaptcha-response']: recaptchaValue, 6417 form_key: hyva.getFormKey(), 6418 }), 6419 method: "POST", 6420 mode: "cors", 6421 credentials: "include", 6422 }).then(response => { 6423 return response.json() 6424 } 6425 ).then(data => { 6426 this.isLoading = false;
6427 if (data.error) { 6428 this.message = data.message; 6429 this.openMessage = true; 6430 this.errors = 1; 6431 this.hasCaptchaToken = 0; 6432 } else { 6433 this.message = data.message; 6434 this.openMessage = false; 6435 this.openSuccessMessage = true; 6436 if (data.redirect !== '' && data.redirect != null) { 6437 window.location.href = data.redirect; 6438 } else { 6439 location.reload(true); 6440 } 6441 } 6442 }); 6443 }, 6444 dispatchForgotRequest:async function (form) { 6445 if (this.checkUseReCaptcha) { 6446 let token = await this.validateCaptcha(); 6447 if(token) 6448 { 6449 document.getElementById("g-recaptcha-response").setAttribute('value',token); 6450 } 6451 } 6452 const email = form.querySelector("#email_address").value; 6453 const recaptchaValue = document.getElementById("g-recaptcha-response").value; 6454 const postUrl = "https://www.flooringinc.com/sociallogin/popup/forgot/"; 6455 fetch(postUrl, { 6456 headers: { 6457 contentType: "application/x-www-form-urlencoded; charset=UTF-8", 6458 }, 6459 body: new URLSearchParams({ 6460 email: email, 6461 ['g-recaptcha-response']: recaptchaValue, 6462 form_key: hyva.getFormKey(), 6463 }), 6464 method: "POST", 6465 mode: "cors", 6466 credentials: "include", 6467 }).then(response => { 6468 return response.json() 6469 } 6470 ).then(data => { 6471 this.isLoading = false; 6472 if (data.error) { 6473 this.message = data.message; 6474 this.openMessage = true; 6475 this.errors = 1; 6476 this.hasCaptchaToken = 0; 6477 } else { 6478 if (data.redirect !== '' && data.redirect != null) { 6479 window.location.href = data.redirect; 6480 } else { 6481 location.reload(true); 6482 } 6483 } 6484 }); 6485 }, 6486 dispatchRegisterRequest:async function (form) { 6487 if (this.checkUseReCaptcha) { 6488 let token = await this.validateCaptcha(); 6489 if(token) 6490 { 6491 document.getElementById("g-recaptcha-response").setAttribute('value',token); 6492 } 6493 } 6494 const firstname = form.querySelector("#firstname").value; 6495 const lastname = form.querySelector("#lastname").value; 6496 const email = form.querySelector("#email_address").value; 6497 const password = form.querySelector("#password").value; 6498 const passwordConfirmation = form.querySelector("#password-confirmation").value; 6499 const recaptchaValue = document.getElementById("g-recaptcha-response").value; 6500 const postUrl = "https://www.flooringinc.com/sociallogin/popup/create/"; 6501 fetch(postUrl, { 6502 headers: { 6503 contentType: "application/x-www-form-urlencoded; charset=UTF-8", 6504 }, 6505 body: new URLSearchParams({ 6506 ['g-recaptcha-response']: recaptchaValue, 6507 firstname: firstname, 6508 lastname: lastname, 6509 email: email, 6510 password: password, 6511 password_confirmation: passwordConfirmation, 6512 form_key: hyva.getFormKey(), 6513 }), 6514 method: "POST", 6515 mode: "cors", 6516 credentials: "include", 6517 }).then(response => { 6518 return response.json() 6519 } 6520 ).then(data => { 6521 this.isLoading = false;
6522 if (data.error) { 6523 this.message = data.message; 6524 this.openMessage = true; 6525 this.hasCaptchaToken = 0; 6526 } else { 6527 this.message = data.message; 6528 this.openMessage = false; 6529 this.openSuccessMessage = true; 6530 if (data.redirect !== '' && data.redirect != null) { 6531 window.location.href = data.redirect; 6532 } else { 6533 location.reload(true); 6534 } 6535 } 6536 }); 6537 }, 6538 eventListeners: { 6539 ['@popup-register.window']($event) { 6540 this.open = true; 6541 this.openRegister = $event.detail.openRegister; 6542 this.openLogin = $event.detail.openLogin; 6543 this.openCreate = $event.detail.openCreate; 6544 this.openButtonLogin = $event.detail.openButtonLogin; 6545 this.openButtonRegister = $event.detail.openButtonRegister; 6546 this.initSocial(); 6547 } 6548 } 6549 } 6550 } 6551</script>
6551 6552 6553<section id="authentication-popup-bss" 6554 x-data="initAuthenticationBss()" x-init="loadRecaptchaOnInteraction()" 6555 @keydown.window.escape="open = false" 6556<div role="dialog" 6557 aria-modal="true" 6558 class="hidden inset-y-0 right-0 z-30 flex max-w-full" 6559 :class="{ 'hidden': !open, 'fixed': open }" 6560 x-bind="eventListeners" 6561> 6562 <div class="relative bg-container-lighter bss_login_popup" 6563 x-show="open" 6564 @click.outside="open = false" 6565 x-transition:enter="transform transition ease-in-out duration-500 sm:duration-700" 6566 x-transition:enter-start="translate-x-full" 6567 x-transition:enter-end="translate-x-0" 6568 x-transition:leave="transform transition ease-in-out duration-500 sm:duration-700" 6569 x-transition:leave-start="translate-x-0" 6570 x-transition:leave-end="translate-x-full" 6571 > 6572 <div 6573 x-show="open" 6574 x-transition:enter="ease-in-out duration-500" 6575 x-transition:enter-start="opacity-0" 6576 x-transition:enter-end="opacity-100" 6577 x-transition:leave="ease-in-out duration-500" 6578 x-transition:leave-start="opacity-100" 6579 x-transition:leave-end="opacity-0" class="absolute flex close_icon" style="width: 11px;height: 11px;background: transparent;"> 6580 <button @click="open = false;" aria-label="Close panel" 6581 class="transition duration-150 ease-in-out text-black cursor-pointer"> 6582 <picture><source type="image/webp" srcset="https://www.flooringinc.com/static/version1789462004/frontend/Dcw/hyvadesktop/en_US/images/Close--icon.webp"><img src="https://www.flooringinc.com/static/version1789462004/frontend/Dcw/hyvadesktop/en_US/images/Close--icon.png" alt="Close--icon" width="11" height="11" /></picture> 6583 </button> 6584 </div> 6585 <div class="flex h-full flex-col bss_login_popup_in overflow-y-auto" > 6586 <div class="message mx-4 message-error" x-show="openMessage"> 6587 <div> 6588 <span x-html="message"></span> 6589 </div> 6590 <div class="cursor-pointer" title="close" @click="openMessage = false"> 6591 <svg class="fill-current text-white" xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 18 18"> 6592 <path d="M14.53 4.53l-1.06-1.06L9 7.94 4.53 3.47 3.47 4.53 7.94 9l-4.47 6593 4.47 1.06 1.06L9 10.06l4.47 4.47 1.06-1.06L10.06 9z"> 6594 </path> 6595 </svg> 6596 </div> 6597 </div> 6598 <div class="message mx-4 message-error success" x-show="openSuccessMessage"> 6599 <div> 6600 <span x-html="message"></span> 6601 </div> 6602 <div class="cursor-pointer" title="close" @click="openSuccessMessage = false"> 6603 <svg class="fill-current text-white" xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 18 18"> 6604 <path d="M14.53 4.53l-1.06-1.06L9 7.94 4.53 3.47 3.47 4.53 7.94 9l-4.47 6605 4.47 1.06 1.06L9 10.06l4.47 4.47 1.06-1.06L10.06 9z"> 6606 </path> 6607 </svg> 6608 </div> 6609 </div> 6610 <div class="block-customer-login for_got" x-show="openForgot"> 6611 <h2 id="authenticate-customer-login" class="text-size18 font-medium text-darkblack"> 6612 Forgot Password </h2> 6613 <form class="form form-fotgotpassword" 6614 method="post" 6615 @submit.prevent="submitForgotForm();" 6616 id="fotgot-form"> 6617 <fieldset class="fieldset"> 6618 <div class="text-size14 font-normal text-black mb-4">Please enter your email address below to receive a password reset link.</div> 6619 <div class="field email required"> 6620 <label for="email_address" class="label"><span>Email</span></label> 6621 <div class="control"> 6622 <input type="email" name="email" alt="email" id="email_address" class="form-input" required 6623 value=""> 6624 </div> 6625 </div> 6626 </fieldset> 6627 <div class="actions-toolbar"> 6628 <div class="primary"> 6629 <button type="submit" class="action submit primary"><span>Reset My Password</span></button> 6630 </div> 6631 <div class="secondary ml-4 self-center"> 6632 <a class="action back cursor-pointer" 6633 @click ="openForgot = false,openLogin = true, 6634 openButtonLogin = true" 6635 >
6636 <span class="text-size14 font-medium text-black"> 6637 Back </span> 6638 </a> 6639 </div> 6640 </div> 6641 </form> 6642</div> 6643 6644 6645 6646 <div class="w-full"> 6647 <input id="g-recaptcha-response" type="hidden" value=""/> 6648 </div> 6649 <div class="block-new-customer social_login" 6650 x-show="openButtonLogin"> 6651 <h2 id="authenticate-new-customer" class="text-size18 font-semibold text-darkblack"> 6652 Log In </h2> 6653 <div class="block-content"> 6654 <div id="add_button_login_byclass" x-data="bssButtonSocial()" x-ref="registerSocialButton"> 6655 <div class=""> 6656 <div class="sociallogin-buttons" x-ref="loginSocialButton"> 6657 <ul class="sociallogin-clearfix flex flex-wrap"> 6658 <li class="w-full text-size14 font-medium text-darkblack relative sociallogin-button 6659 googleplus" title="Login with Google"> 6660 <a class="sociallogin-button-link sociallogin-button-click" id="sociallogin-button-click" 6661 href="javascript:void(0);" data-href="https://accounts.google.com/o/oauth2/auth?response_type=code&redirect_uri=https%3A%2F%2Fwww.flooringinc.com%2Fsociallogin%2Faccount%2Flogin%2Ftype%2Fgoogleplus%2F&client_id=900046866587-mph1s7dsg2dcau694j9ukb0m26hukidu.apps.googleusercontent.com&scope=https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fuserinfo.profile+https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fuserinfo.email&state=&access_type=offline&approval_prompt=auto" 6662 data-width="630" 6663 data-height="650" 6664 x-ref="googleplus" 6665 @click="popupSocial($refs.googleplus)"> 6666 <span class="sociallogin-button-auto"> 6667 <span class="sociallogin-button-icon"> 6668 </span> 6669 <span class="sociallogin-button-text">Login with Google</span> 6670 </span> 6671 </a> 6672 </li> 6673 </ul> 6674 </div> 6675 6676 </div> 6677 <div style="clear: both;"></div> 6678 </div> 6679 </div> 6680 </div> 6681 <div class="block-customer-login" x-show="openLogin" x-data="{ show: false }"> 6682 <span class="or-label text-size14 font-normal text-darkblack"> Or</span> 6683 6684 <form class="form form-login" 6685 method="post" 6686 @submit.prevent="submitForm();" 6687 id="login-form" 6688 > 6689 <div class="fieldset login"> 6690 <div class="field email required"> 6691 <label class="label hidden" for="customer-email"> 6692 <span>Email Address</span> 6693 </label> 6694 <div class="control"> 6695 <input name="username" 6696 x-ref="customer-email" 6697 @change="errors = 0" 6698 type="email" 6699 required 6700 class="form-input input-text" id="customer-email" placeholder="Email address" 6701 > 6702 </div> 6703 </div> 6704 <div class="field password required" > 6705 <label for="pass" class="label hidden">
6706 <span>Password</span> 6707 </label> 6708 <div class="control"> 6709 <input name="password" 6710 type="password" 6711 class="form-input input-text" id="pass" placeholder="Password" 6712 required 6713 x-ref="customer-password" 6714 @change="errors = 0" 6715 > 6716 </div> 6717 </div> 6718 6719 <input name="context" type="hidden" value="checkout"/> 6720 6721 <div class="actions-toolbar flex justify-between items-center" > 6722 <div class="flex items-center"> 6723 <input type="checkbox" name="show-password" @click="showPassword()" id="show-password" value="" class="checkbox"> 6724 <label class="cursor-pointer text-size12 font-normal text-darkblack" style="margin:0;" for="show-password">Show password</label> 6725 <!-- <span class="cursor-pointer text-size12 font-normal text-darkblack" @click="showPasswordForLable()" id="show-password-label" > 6726 Show Password 6727 </span> --> 6728 </div> 6729 <span class="cursor-pointer text-size12 font-normal text-darkblack" @click="openForgot = true,openLogin = false,openButtonLogin = false"> 6730 Forgot Your Password? </span> 6731 6732 6733 </div> 6734 <div class="actions-toolbar flex justify-between items-center"> 6735 <button type="submit" class="inline-flex btn btn-primary login_btn"> 6736 Log In </button> 6737 </div> 6738 </div> 6739 </form> 6740</div> 6741
6742<script> 6743 function showPassword(){ 6744 var showPwd=document.getElementById("show-password"); 6745 var password=document.getElementById("pass"); 6746 if(showPwd.checked==true) { 6747 password.type="text"; 6748 } else { 6749 password.type="password"; 6750 } 6751 } 6752 function showPasswordForLable(){ 6753 var password=document.getElementById("pass"); 6754 if (password.type === "password") { 6755 password.type = "text"; 6756 } else { 6757 password.type = "password"; 6758 } 6759 } 6760</script>
6760 6761 <div class="block-new-customer new_customer text-center" x-show ="openCreate"> 6762 <h2 id="authenticate-new-customer" class="text-size13 font-normal text-darkblack"> 6763 New Customer? </h2> 6764 <div class="block-content"> 6765 <div class="actions-toolbar"> 6766 <a class="block btn btn-primary cursor-pointer text-size18 font-semibold text-custom-blue" 6767 href="https://www.flooringinc.com/customer/account/create/" > 6768 Sign Up Now </a> 6769 </div> 6770 <div class="block-new-customer"> 6771 <h3 class="text-size16 font-normal text-black"> 6772 <a class="block underline" 6773 href="https://www.flooringinc.com/pro-advantage/" 6774 > 6775 Become a Pro </a> 6776 </h3> 6777 </div> 6778 </div> 6779 </div> 6780 <div class="block-new-customer social_login margin" x-show="openButtonRegister"> 6781 <h2 id="authenticate-new-customer" class="text-size18 font-medium text-darkblack"> 6782 Social Register </h2> 6783 <div class="block-content"> 6784 <div id="add_button_register_byclass" x-data="bssButtonSocial()" x-ref="registerSocialButton"> 6785 <div class=""> 6786 <div class="sociallogin-buttons"> 6787 <ul class="sociallogin-clearfix flex flex-wrap"> 6788 <li class="w-full text-size14 font-medium text-darkblack relative sociallogin-button googleplus" title="Register with Google"> 6789 <a class="sociallogin-button-link sociallogin-button-click" id="sociallogin-button-click" 6790 href="javascript:void(0);" data-href="https://accounts.google.com/o/oauth2/auth?response_type=code&redirect_uri=https%3A%2F%2Fwww.flooringinc.com%2Fsociallogin%2Faccount%2Flogin%2Ftype%2Fgoogleplus%2F&client_id=900046866587-mph1s7dsg2dcau694j9ukb0m26hukidu.apps.googleusercontent.com&scope=https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fuserinfo.profile+https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fuserinfo.email&state=&access_type=offline&approval_prompt=auto" 6791 data-width="630" 6792 data-height="650" 6793 x-ref="googleplus" 6794 @click="popupSocial($refs.googleplus)"> 6795 <span class="sociallogin-button-auto"> 6796 <span class="sociallogin-button-icon"> 6797 </span> 6798 <span class="sociallogin-button-text">Register with Google</span> 6799 </span> 6800 </a> 6801 </li> 6802 </ul> 6803 </div> 6804 </div> 6805 <div style="clear: both;"></div> 6806 </div> 6807 </div> 6808 </div> 6809 </div> 6810 </div> 6811</div> 6812</section>
6813<script> 6814 var classLogin = [".checkout-container .opc-wrapper"]; 6815 var classRegister = [""]; 6816 classLogin = classLogin[0].trim().split(/\s+/); 6817 classRegister = classRegister[0].trim().split(/\s+/); 6818 if(classLogin && classLogin.length > 0 && classLogin[0]){ 6819 classLogin.forEach(element => { 6820 var classLoginElement = document.querySelector(element); 6821 var loginSocialButton = document.getElementById('add_button_login_byclass'); 6822 if (classLoginElement && loginSocialButton) { 6823 const cloneLoginSocialButton = loginSocialButton.cloneNode(true); 6824 classLoginElement.appendChild(cloneLoginSocialButton); 6825 cloneLoginSocialButton.style.display='block'; 6826 } 6827 }); 6828 } 6829 6830 if(classRegister && classRegister.length > 0 && classRegister[0]){ 6831 classRegister.forEach(element => { 6832 var classRegisterElement = document.querySelector(element); 6833 var registerSocialButton = document.getElementById('add_button_register_byclass'); 6834 if (classRegisterElement && registerSocialButton) { 6835 const cloneRegisterSocialButton = registerSocialButton.cloneNode(true); 6836 classRegisterElement.appendChild(cloneRegisterSocialButton); 6837 cloneRegisterSocialButton.style.display='block'; 6838 } 6839 }); 6840 } 6841 6842 function bssButtonSocial() { 6843 return { 6844 renderShowmore : function (element) { 6845 var socialButton = element.querySelector('.sociallogin-clearfix').getElementsByTagName("li"); 6846 for (let i = 0; i <= socialButton.length - 1; i++) { 6847 socialButton[i].style.display = 'block'; 6848 } 6849 element.querySelector('.sociallogin-showmore').style.display = 'none'; 6850 }, 6851 popupSocial: function (element) { 6852 var href = element.getAttribute('data-href'); 6853 var width = element.getAttribute('data-width'); 6854 var height = element.getAttribute('data-height'); 6855 var popup_window = null; 6856 if (!width) { 6857 width = 650; 6858 } 6859 6860 if(!height) { 6861 height = 350; 6862 } 6863 6864 var left = parseInt((window.innerWidth- width) / 2); 6865 var top = parseInt((window.innerHeight - height) / 2); 6866 6867 var params = [ 6868 'resizable=yes', 6869 'scrollbars=no', 6870 'toolbar=no', 6871 'menubar=no', 6872 'location=no', 6873 'directories=no', 6874 'status=yes', 6875 'width='+ width, 6876 'height='+ height, 6877 'left='+ left, 6878 'top='+ top 6879 ]; 6880 6881 if(popup_window) { 6882 popup_window.close(); 6883 } 6884 6885 if(href) { 6886 popup_window = window.open(href,'',params.join(',')); 6887 popup_window.focus(); 6888 6889 }else{ 6890 alert('This Login Application was not configured correctly. Please contact our customer support.'); 6891 } 6892 return false; 6893 } 6894 } 6895 } 6896 6897</script>
6897 6898 6899 6900 6901
6901<script> 6902 (() => { 6903 function changeNoCookieDomain() { 6904 const categoryKey = "marketing"; 6905 if (! prCookieConsentApi.isAllowedCategory(categoryKey)) { 6906 return; 6907 } 6908 6909 let iframes = document.querySelectorAll('iframe'), 6910 youtubeNoCookieIframes = Array.from(iframes) 6911 .filter((iframe) => iframe.src.indexOf('youtube-nocookie.com') !== -1); 6912 6913 youtubeNoCookieIframes.forEach((iframe) => { 6914 iframe.src = iframe.src.replace('youtube-nocookie.com', 'youtube.com'); 6915 }); 6916 } 6917 6918 if (prCookieConsentApi) { 6919 changeNoCookieDomain(); 6920 return; 6921 } 6922 6923 document.addEventListener('pr-cookie-consent-api:configured', changeNoCookieDomain); 6924 })(); 6925 </script>
6925 6926
6927<script> 6928 'use strict'; 6929 6930 (() => { 6931 window.addEventListener('DOMContentLoaded', () => { 6932 if (document.querySelectorAll('lite-youtube').length > 0) { 6933 const link = document.createElement('link'), 6934 script = document.createElement('script'); 6935 6936 link.rel = 'stylesheet'; 6937 link.type = 'text/css'; 6938 link.href = 'https\u003A\u002F\u002Fwww.flooringinc.com\u002Fstatic\u002Fversion1789462004\u002Ffrontend\u002FDcw\u002Fhyvadesktop\u002Fen_US\u002FMageQuest_LiteYouTube\u002Fcss\u002Flite\u002Dyt\u002Dembed.min.css'; 6939 document.head.appendChild(link); 6940 6941 script.type = 'text/javascript'; 6942 script.src = 'https\u003A\u002F\u002Fwww.flooringinc.com\u002Fstatic\u002Fversion1789462004\u002Ffrontend\u002FDcw\u002Fhyvadesktop\u002Fen_US\u002FMageQuest_LiteYouTube\u002Fjs\u002Flite\u002Dyt\u002Dembed.min.js'; 6943 document.head.appendChild(script); 6944 } 6945 }); 6946 })(); 6947</script>
vendor: 1 bytes, line 6947
6947
6948<script data-mfmofile="true"> 6949 document.addEventListener("DOMContentLoaded", function() { 6950 if (document.querySelectorAll('.mf-ytw-wrapper').length || document.querySelectorAll('[data-mf-ytw-youtube-link]').length) { 6951 !function (f, b, e, v, t, s) { 6952 if(f.mfytwcss)return; 6953 f.mfytwcss=1; 6954 t = b.createElement(e); 6955 t.rel = 'stylesheet'; 6956 t.type = 'text/css'; 6957 t.href = v; 6958 s = b.getElementsByTagName('HEAD')[0]; 6959 s.appendChild(t) 6960 }(window, document, 'link', 'https://www.flooringinc.com/static/version1789462004/frontend/Dcw/hyvadesktop/en_US/Magefan_YouTubeWidget/css/youtubewidget.min.css'); 6961 } 6962 if (document.querySelectorAll('.mf-ytw-wrapper').length) { 6963 !function (f, b, e, v, t, s) { 6964 if(f.mfytwjs)return; 6965 f.mfytwjs=1; 6966 t = b.createElement(e); 6967 t.type = 'text/javascript'; 6968 t.src = v; 6969 s = b.getElementsByTagName('HEAD')[0]; 6970 s.appendChild(t) 6971 }(window, document, 'script', 'https://www.flooringinc.com/static/version1789462004/frontend/Dcw/hyvadesktop/en_US/Magefan_YouTubeWidget/js/iframe.min.js'); 6972 } 6973 if (document.querySelectorAll('[data-mf-ytw-youtube-link]').length) { 6974 !function (f, b, e, v, t) { 6975 if(f.mflinkjs)return; 6976 f.mflinkjs=1; 6977 t = b.createElement(e); 6978 t.type = 'text/javascript'; 6979 t.src = v; 6980 s = b.getElementsByTagName('HEAD')[0]; 6981 s.appendChild(t) 6982 }(window, document, 'script', 'https://www.flooringinc.com/static/version1789462004/frontend/Dcw/hyvadesktop/en_US/Magefan_YouTubeWidget/js/link.min.js'); 6983 } 6984 }); 6985</script>
6985 6986 6987 <div id="pr-gpc-notification-modal" style="display: none;"> 6988 <div class="pr-gpc-notification-wrap"> 6989 <h2>Your Opt-Out Preferences Honored</h2> 6990<p>Your browser's privacy preference (GPC) has been detected.</p> 6991<p class="pr-gpc-text-with-icon"><picture><source type="image/webp" srcset="https://www.flooringinc.com/static/version1789462004/frontend/Dcw/hyvadesktop/en_US/Plumrocket_GlobalPrivacyControl/images/check_circle.webp"><img src="https://www.flooringinc.com/static/version1789462004/frontend/Dcw/hyvadesktop/en_US/Plumrocket_GlobalPrivacyControl/images/check_circle.png" alt="GPC Icon" width="18" height="18"></picture> Non-essential cookies have been disabled on our website.</p> 6992</div> </div> 6993 6994
6994<script type="text/x-magento-init" nonce="bDhraW5vaDFjczNyejIwenoxdG1tYm50dzNqb2RqOGY="> 6995 { 6996 "#pr-gpc-notification-modal": { 6997 "Plumrocket_GlobalPrivacyControl/js/opt-out-notification": {} 6998 } 6999 } 7000 </script>
7000 7001 7002
7003<script> 7004 (() => { 7005 function src_default(Alpine) { 7006 Alpine.directive("intersect", (el, { value, expression, modifiers }, { evaluateLater, cleanup }) => { 7007 let evaluate = evaluateLater(expression); 7008 let options = { 7009 rootMargin: getRootMargin(modifiers), 7010 threshold: getThreshhold(modifiers) 7011 }; 7012 let observer = new IntersectionObserver((entries) => { 7013 entries.forEach((entry) => { 7014 if (entry.isIntersecting === (value === "leave")) 7015 return; 7016 evaluate(); 7017 modifiers.includes("once") && observer.disconnect(); 7018 }); 7019 }, options); 7020 observer.observe(el); 7021 cleanup(() => { 7022 observer.disconnect(); 7023 }); 7024 }); 7025 } 7026 function getThreshhold(modifiers) { 7027 if (modifiers.includes("full")) 7028 return 0.99; 7029 if (modifiers.includes("half")) 7030 return 0.5; 7031 if (!modifiers.includes("threshold")) 7032 return 0; 7033 let threshold = modifiers[modifiers.indexOf("threshold") + 1]; 7034 if (threshold === "100") 7035 return 1; 7036 if (threshold === "0") 7037 return 0; 7038 return Number(`.${threshold}`); 7039 } 7040 function getLengthValue(rawValue) { 7041 let match = rawValue.match(/^(-?[0-9]+)(px|%)?$/); 7042 return match ? match[1] + (match[2] || "px") : void 0; 7043 } 7044 function getRootMargin(modifiers) { 7045 const key = "margin"; 7046 const fallback = "0px 0px 0px 0px"; 7047 const index = modifiers.indexOf(key); 7048 if (index === -1) 7049 return fallback; 7050 let values = []; 7051 for (let i = 1; i < 5; i++) { 7052 values.push(getLengthValue(modifiers[index + i] || "")); 7053 } 7054 values = values.filter((v) => v !== void 0); 7055 return values.length ? values.join(" ").trim() : fallback; 7056 } 7057 7058 document.addEventListener("alpine:init", () => { 7059 window.Alpine.plugin(src_default); 7060 }); 7061 })(); 7062</script>
vendor: 1 bytes, line 7062
7062
7063<script> 7064 for (const [selector, deferUntil] of Object.entries({".product-slider section[x-data]":"intersect",".product-info [x-data]":"intersect","#filters-content [x-data]":"intersect","#review_form":"intersect","section[x-data^=initRecentlyViewedProductsComponent]":"intersect","div[x-data^=initBundleOptions]":"intersect","#product_addtocart_form [x-data]":"intersect","#notice-cookie-block":"intersect"})) { 7065 document.querySelectorAll(selector).forEach(el => el.setAttribute('x-defer', `${deferUntil}`)); 7066 } 7067</script>
vendor: 1 bytes, line 7067
7067
7068<script> 7069 (function () { 7070 "use strict"; 7071 7072 const hasAlpine = new Promise(resolve => { 7073 window.addEventListener('alpine:initialized', resolve, {once: true, passive: true}); 7074 }); 7075 7076 const hasInteract = new Promise(resolve => { 7077 (events => { 7078 const onInteract = () => { 7079 resolve(); 7080 events.forEach(type => window.removeEventListener(type, onInteract)); 7081 } 7082 events.forEach(type => window.addEventListener(type, onInteract, {once: true, passive: true})) 7083 })(['touchstart', 'mouseover', 'wheel', 'scroll', 'keydown']) 7084 }); 7085 7086 const onIntersect = (el) => { 7087 return new Promise(resolve => { 7088 const observer = new IntersectionObserver(entries => { 7089 for (const entry of entries) { 7090 if (entry.isIntersecting) { 7091 observer.disconnect() 7092 resolve(); 7093 } 7094 } 7095 }, {}); 7096 observer.observe(el); 7097 }); 7098 } 7099 7100 function runComponent(el) { 7101 hasAlpine.then(() => { 7102 el.removeAttribute('x-ignore'); 7103 queueMicrotask(() => Alpine.initTree(el)); 7104 }); 7105 } 7106 7107 function initDeferredComponents() { 7108 document.querySelectorAll('[x-data][x-defer]').forEach(el => { 7109 el.setAttribute('x-ignore', ''); 7110 const deferUntil = (el.getAttribute('x-defer') || '').trim(); 7111 switch (deferUntil) { 7112 case 'interact': 7113 hasInteract.then(() => runComponent(el)); 7114 break; 7115 case 'intersect': 7116 onIntersect(el).then(() => runComponent(el)) 7117 break; 7118 case 'idle': 7119 window.requestIdleCallback 7120 ? window.requestIdleCallback(() => runComponent(el), {timeout: 4000}) 7121 : setTimeout(() => runComponent(el), 4000); 7122 break; 7123 case 'eager': 7124 runComponent(el); 7125 break; 7126 default: 7127 if (deferUntil.startsWith('event:') && deferUntil.length > 6) { 7128 window.addEventListener(deferUntil.substring(6), () => runComponent(el), {once: true, passive: true}); 7129 } 7130 } 7131 }); 7132 } 7133 7134 window.addEventListener('alpine:init', initDeferredComponents, {once: true, passive: true}); 7135 })() 7136</script>
7136 7137
7138<script type="module" 7139 src="https://www.flooringinc.com/static/version1789462004/frontend/Dcw/hyvadesktop/en_US/Hyva_Theme/js/alpine3.min.js" 7140 defer 7141 crossorigin 7142></script>
vendor: 1 bytes, line 7142
7142
7143<script> 7144 'use strict'; 7145 function dispatchMessages(messages, hideAfter) { 7146 const messagesEvent = new CustomEvent("messages-loaded", { 7147 detail: { 7148 messages: messages, 7149 hideAfter: hideAfter 7150 } 7151 }); 7152 window.dispatchEvent(messagesEvent); 7153 } 7154 7155 if (typeof hyva === 'undefined' || (!hyva.getBrowserStorage || !hyva.getCookie || !hyva.setCookie)) { 7156 console.warn("Hyvä helpers are not loaded yet. Make sure they are included before this script"); 7157 } 7158 7159 (function( hyva, undefined ) { 7160 7161 hyva.initFormKey = () => { 7162 const inputSelector = 'input[name="form_key"]', 7163 formKey = hyva.getFormKey(); 7164 7165 Array.from(document.querySelectorAll(inputSelector)).map(function (input) { 7166 input.value = formKey 7167 }); 7168 } 7169 7170 hyva.initMessages = () => { 7171 try { 7172 const messages = hyva.getCookie('mage-messages'); 7173 window.mageMessages = messages ? JSON.parse(decodeURIComponent(messages).replace(/\+/g, ' ')) : []; 7174 7175 dispatchMessages(window.mageMessages); 7176 7177 // empty `mage-messages` cookie 7178 const skipSetDomain = true; 7179 hyva.setCookie('mage-messages','', -1, skipSetDomain); 7180 7181 } catch (error) { 7182 console.warn('Error parsing Cookie Messages:', error); 7183 } 7184 } 7185 7186 window.addEventListener('DOMContentLoaded', hyva.initFormKey); 7187 hyva.alpineInitialized(hyva.initMessages) 7188 7189 }( window.hyva = window.hyva || {} )); 7190</script>
vendor: 1 bytes, line 7190
7190
7191<script> 7192 'use strict'; 7193 { 7194 const private_content_key = 'mage-cache-storage'; 7195 const private_content_expire_key = 'mage-cache-timeout'; 7196 const private_content_version_key = 'private_content_version'; 7197 const section_data_ids_key = 'section_data_ids'; 7198 const mage_cache_session_id_key = 'mage-cache-sessid'; 7199 const last_visited_store_key = 'last_visited_store'; 7200 7201 const ttl = 3600; 7202 7203 if (typeof hyva === 'undefined' || (!hyva.getBrowserStorage || !hyva.getCookie || !hyva.setCookie)) { 7204 console.warn("Hyvä helpers are not loaded yet. Make sure they are included before this script"); 7205 } 7206 7207 function loadSectionData () { 7208 const browserStorage = hyva.getBrowserStorage(); 7209 if (!browserStorage) { 7210 typeof window.dispatchMessages !== "undefined" && window.dispatchMessages( 7211 [{ 7212 type: "warning", 7213 text: "Please enable LocalStorage in your browser." 7214 }] 7215 ); 7216 return; 7217 } 7218 try { 7219 let isInvalid = false; 7220 7221 if (hyva.getCookie(last_visited_store_key) !== CURRENT_STORE_CODE) { 7222 isInvalid = true; 7223 } 7224 hyva.setCookie(last_visited_store_key, CURRENT_STORE_CODE, false, false); 7225 7226 if (!hyva.getCookie(mage_cache_session_id_key)) { 7227 isInvalid = true; 7228 browserStorage.removeItem(private_content_key); 7229 const skipSetDomain = true; 7230 const days = false; 7231 hyva.setCookie(mage_cache_session_id_key, true, days, skipSetDomain) 7232 } 7233 7234 const cookieVersion = hyva.getCookie(private_content_version_key); 7235 const storageVersion = browserStorage.getItem(private_content_version_key); 7236 7237 if (cookieVersion && !storageVersion || cookieVersion !== storageVersion) { 7238 isInvalid = true; 7239 } 7240 7241 const privateContentExpires = browserStorage.getItem(private_content_expire_key); 7242 if (privateContentExpires && new Date(privateContentExpires) < new Date()) { 7243 browserStorage.removeItem(private_content_key); 7244 } 7245 7246 if (isInvalid && cookieVersion) { 7247 fetchPrivateContent([]); 7248 } else if (cookieVersion && storageVersion && cookieVersion === storageVersion) { 7249 const privateContent = JSON.parse(browserStorage.getItem(private_content_key)); 7250 if ( 7251 privateContent && 7252 privateContentExpires && 7253 privateContent.cart && 7254 privateContent.customer 7255 ) { 7256 dispatchPrivateContent(privateContent); 7257 } else { 7258 fetchPrivateContent([]); 7259 } 7260 } else { 7261 if (document.getElementById('default-section-data')) { 7262 const privateContent = JSON.parse(document.getElementById('default-section-data').innerText.trim()); 7263 dispatchPrivateContent(privateContent); 7264 } else { 7265 dispatchPrivateContent({}); 7266 } 7267 } 7268 7269 } catch (error) { 7270 console.warn('Error retrieving Private Content:', error); 7271 } 7272 } 7273 7274 hyva.alpineInitialized(loadSectionData) 7275 window.addEventListener('reload-customer-section-data', loadSectionData); 7276 7277 function dispatchPrivateContent(data) { 7278 const privateContentEvent = new CustomEvent("private-content-loaded", { 7279 detail: { 7280 data: data 7281 } 7282 }); 7283 window.dispatchEvent(privateContentEvent); 7284 } 7285 7286 function fetchPrivateContent(sections) { 7287 fetch(`${BASE_URL}customer/section/load/?sections=${encodeURIComponent(sections.join(','))}`, { 7288 method: 'GET', 7289 headers: { 7290 'Content-Type': 'application/json', 7291 'X-Requested-With': 'XMLHttpRequest' 7292 } 7293 }) 7294 .then(response => response.json()) 7295 .then( 7296 data => { 7297 if (data) { 7298 try { 7299 const browserStorage = hyva.getBrowserStorage(); 7300 7301 // merge new data preserving non-invalidated sections 7302 const oldSectionData = JSON.parse(browserStorage.getItem(private_content_key) || '{}') || {}; 7303 7304 if ((! data.cart || ! data.cart.cartId) && oldSectionData['checkout-data']) { 7305 delete oldSectionData['checkout-data']; 7306 } 7307 const newSectionData = Object.assign(oldSectionData, data); 7308 7309 dispatchPrivateContent(newSectionData); 7310 7311 // don't persist messages, they've been dispatched already 7312 if (newSectionData.messages && newSectionData.messages.messages ) { 7313 newSectionData.messages.messages = []; 7314 } 7315 7316 browserStorage.setItem(private_content_key, JSON.stringify(newSectionData)); 7317 7318 const expiresAt = new Date(Date.now() + (ttl * 1000)).toISOString(); 7319 browserStorage.setItem(private_content_expire_key, expiresAt); 7320 7321 const newCookieVersion = hyva.getCookie(private_content_version_key); 7322 browserStorage.setItem(private_content_version_key, newCookieVersion); 7323 7324 // We don't need the section_data_ids in Hyvä, but we store them for compatibility 7325 // with Luma Fallback. Otherwise, not all sections are loaded in Luma Checkout 7326 hyva.setCookie( 7327 section_data_ids_key, 7328 JSON.stringify( 7329 Object.keys(data).reduce((sectionDataIds, sectionKey) => { 7330 sectionDataIds[sectionKey] = data[sectionKey]['data_id']; 7331 return sectionDataIds; 7332 }, {}) 7333 ), 7334 false, 7335 true 7336 ); 7337 } catch (error) { 7338 console.warn("Couldn't store privateContent", error); 7339 } 7340 } 7341 } 7342 ); 7343 } 7344 } 7345</script>
vendor: 1 bytes, line 7345
7345
7346<script> 7347 (() => { 7348 document.addEventListener('submit', event => event.target.action = event.target.action.replace('%25uenc%25', hyva.getUenc())); 7349 })() 7350</script>
vendor: 1 bytes, line 7350
7350
7351<script> 7352 (events => { 7353 const dispatchUserInteractionEvent = () => { 7354 events.forEach(type => window.removeEventListener(type, dispatchUserInteractionEvent)) 7355 window.dispatchEvent(new Event('init-external-scripts')) 7356 }; 7357 events.forEach(type => window.addEventListener(type, dispatchUserInteractionEvent, {once: true, passive: true})) 7358 })(['touchstart', 'mouseover', 'wheel', 'scroll', 'keydown']) 7359</script>
7359 7360<style> 7361[data-bv-show=inline_rating] .bv_sub_container .bv_numReviews_component_container .bv_text{margin: -2px 0 0 0 !important;display: flex !important;} 7362@media(max-width: 767px){ 7363[data-bv-show=inline_rating] .bv_sub_container .bv_numReviews_component_container .bv_text{margin: 4px 0 0 0 !important;} 7364} 7365@media screen and (min-width: 768px) and (max-width: 1440px) { 7366 .product-item .product-info .price-box .price-container .price-wrapper span.price{font-size: 18px !important;} 7367 .product-item .product-info .price-box .price-container .price-wrapper{font-size: 18px;} 7368} 7369@media(max-width: 1550px){ 7370.products__recommendations .product-slider .glider-track .recommended-slider-item{min-width:auto;} 7371} 7372.page-products .spot-light .catergory_slider_content{border-radius: 10px;} 7373.page-header .panel.wrapper .header_top .header_left_notification a.email_icon:before{background-image: url('data:image/svg+xml,<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" fill="%2315324c" version="1.1" id="Capa_1" width="800px" height="800px" viewBox="0 0 388.424 388.424" xml:space="preserve"><g><path d="M384.202,59.111H4.209C1.888,59.111,0,61,0,63.33v261.766c0,2.33,1.888,4.217,4.209,4.217h379.993 c2.317,0,4.222-1.887,4.222-4.217V63.33C388.424,61,386.52,59.111,384.202,59.111z M319.937,92.888L194.212,185.09L68.485,92.888 H319.937z M354.647,295.535H33.779V109.328l157.935,115.82c1.494,1.089,3.508,1.089,5.004,0l157.934-115.82v186.207H354.647z"/></g></svg>');background-size: 22px 22px;} 7374@media(max-width: 767px){ 7375.page-products .spot-light .catergory_slider_content .product-info{padding-left: 0 !important;padding-right: 0px !important;} 7376} 7377.page-products .spot-light .spot-bottom .order_btn{height: 35px;width: auto;color: rgb(255 255 255 / var(--tw-text-opacity)) !important;background: #296497 !important;border-radius: .375rem;padding: 0 1.25rem !important;text-align: center;text-decoration: none !important; vertical-align: middle;font-size: .75rem;line-height: 1rem;font-weight: 400;transition-duration: .15s;line-height: 35px;display: block; 7378} 7379.page-products .spot-light .spot-bottom .order_btn:hover{background: #15324c !important;transition-duration: .15s;} 7380.page-products .spot-light .catergory_slider_content .color_counts .color_count{font-size: 12px;color: rgb(127 127 127 / var(--tw-text-opacity)} 7381 7382 7383.category-top-filter .pagebuilder-column h3 span, .category-top-filter .pagebuilder-column h3 span a, .category-top-filter .pagebuilder-column h3 a{display: block;} 7384.checkout-payment-method .payment-method .payment-method-title.field.choice input#paypal_express+label {display: block;} 7385.catalog-product-view .product-info-main .color_swatches .swatch-attribute-options .select_none.swatch-option{display: none;} 7386@media(min-width: 768px){ 7387 .checkout-cart-index #shopping-cart-table .cart.item .item-info td.col.item{flex-wrap: nowrap;} 7388} 7389@media(min-width: 1500px){ 7390 .checkout-cart-index #shopping-cart-table .col.qty{min-width: 169px;max-width: 169px;width: 169px;} 7391} 7392@media only screen and (max-width: 1340px) and (min-width: 1000px){ 7393 .checkout-cart-index #maincontent #shopping-cart-table .product-item-details{max-width: 40%;} 7394} 7395</style>
7396<script> 7397document.addEventListener('DOMContentLoaded', function() { 7398 if (window.innerWidth <= 767) { 7399 document.querySelectorAll('.page-with-filter.page-products .sidebar .filter-content .card .filter-options-title').forEach(function(title) { 7400 const span = title.querySelector('span'); 7401 if (span && span.textContent.trim().includes('Revenue Ranking')) { 7402 const parentCard = title.closest('.card'); 7403 if (parentCard && !parentCard.id) { 7404 parentCard.id = 'filter-id-revenue_ranking'; 7405 } 7406 } 7407 }); 7408 } 7409}); 7410</script>
7410 7411<style> 7412.page-with-filter.page-products .sidebar .filter-content .card#filter-id-revenue_ranking{display: none;} 7413.checkout-index-index .kl_sms_phone_number-field{margin-bottom: 20px;} 7414@media(min-width: 768px){ 7415 .catalog-product-view .modal.order-free-sample-popup .right .order-free-sample-prod-info .product-info:after{right: -10px;top: -10px;} 7416} 7417@media(max-width: 767px){ 7418 .catalog-product-view .order-free-sample-popup .border .product-info:after{left: 35px;} 7419} 7420.checkout-index-index .notification4 {display: none} 7421 #related_cart_slider .js_slides{margin-right: 0;margin-left: 0;} 7422</style>
7423<script> 7424 function initConfigurableOptions(productId, optionConfig) { 7425 7426 function findPathParam(key) { 7427 const baseUrl = (BASE_URL.substr(0, 2) === '//' ? 'http:' : '') + BASE_URL; 7428 const baseUrlParts = (new URL(baseUrl)).pathname.replace(/\/$/, '').split('/'); 7429 const pathParts = window.location.pathname.split('/').slice(baseUrlParts.length + 3); 7430 for (let i = 0; i < pathParts.length; i += 2) { 7431 if (pathParts[i] === key && pathParts.length > i) { 7432 return pathParts[i + 1]; 7433 } 7434 } 7435 } 7436 7437 return { 7438 optionConfig, 7439 productId, 7440 attributeCode:'', 7441 itemId: (new URLSearchParams(window.location.search)).get('id') || findPathParam('id'), 7442 ssrGalleryChildId: 0, 7443 allowedAttributeOptions: [], 7444 selectedValues: [], 7445 init() { 7446 this.checkIsFirst(); 7447 this.findAllowedAttributeOptions(); 7448 this.$nextTick(() => { 7449 if (typeof this.optionConfig.defaultValues === 'object') { 7450 for (const [optionId, value] of Object.entries(this.optionConfig.defaultValues)) { 7451 this.changeOption(optionId, value + ''); 7452 } 7453 } 7454 }); 7455 }, 7456 checkIsFirst() { 7457 this.isLoadedFirst = true; 7458 setTimeout(() => { 7459 this.isLoadedFirst = false; 7460 }, "3000"); 7461 }, 7462 findSimpleIndex() { 7463 this.productIndex = this.calculateSimpleIndexForPartialSelection(this.selectedValues); 7464 }, 7465 calculateSimpleIndexForPartialSelection(selectedValues) { 7466 if (selectedValues.length === 0) return 0; 7467 let productIndexIds = Object.keys(this.optionConfig.index); 7468 Object.keys(this.optionConfig.attributes).forEach((attribute) => { 7469 const productsWithAttributeMatch = selectedValues[attribute] 7470 ? productIndexIds.filter((productIndex) => { 7471 return this.optionConfig.index[productIndex][attribute] === this.selectedValues[attribute] 7472 }) 7473 : []; 7474 7475 productIndexIds = productsWithAttributeMatch.length ? productsWithAttributeMatch : productIndexIds 7476 }) 7477 return productIndexIds[0]; 7478 }, 7479 calculateSimpleIndexForFullSelection(selectedValues) { 7480 const productIndexes = this.optionConfig.index; 7481 return Object.keys(productIndexes).find(productIndex => { 7482 const productCandidateOptions = productIndexes[productIndex]; 7483 7484 for (const productOption in productCandidateOptions) { 7485 if ( 7486 ! selectedValues[productOption] || 7487 selectedValues[productOption] !== productCandidateOptions[productOption] 7488 ) { 7489 return false; 7490 } 7491 } 7492 return productIndex; 7493 }); 7494 }, 7495 productIndex: 0, 7496 findAllowedAttributeOptions() { 7497 this.allowedAttributeOptions = this.calculateAllowedAttributeOptions(this.selectedValues); 7498 }, 7499 calculateAllowedAttributeOptions(selectedValues) { 7500 const allAttributes = this.optionConfig.attributes; 7501 const allAttributesSorted = Object.values(allAttributes).sort((a,b) => { 7502 return a.position - b.position 7503 }); 7504 7505 const selectionWithoutAttr = attrId => { 7506 return Object.keys(selectedValues).reduce((acc, id) => { 7507 if (id !== attrId) acc[id] = selectedValues[id]; 7508 return acc; 7509 }, {}) 7510 } 7511 7512 const newAllowedAttributeOptions = []; 7513 7514 allAttributesSorted.forEach(attribute => { 7515 const availableIndexes = this.calculateAvailableProductIndexes(selectionWithoutAttr(attribute.id)); 7516 if (attribute?.code === 'incstores_pim_color_axis') { 7517 newAllowedAttributeOptions[attribute.id] = 7518 allAttributes[attribute.id].options 7519 .filter(option => { 7520 return !!option.products.find(product => availableIndexes.includes(product)); 7521 }) 7522 .sort((a, b) => {
7523 const cheapestA = this.findCheapestProductForPartialSelectionForSort({ 7524 ...selectedValues, 7525 [attribute.id]: a.id 7526 }); 7527 7528 const cheapestB = this.findCheapestProductForPartialSelectionForSort({ 7529 ...selectedValues, 7530 [attribute.id]: b.id 7531 }); 7532 7533 if (!cheapestA && !cheapestB) return 0; 7534 if (!cheapestA) return 1; 7535 if (!cheapestB) return -1; 7536 7537 const priceA = this.optionConfig.optionPrices[cheapestA].customPrice.amount; 7538 const priceB = this.optionConfig.optionPrices[cheapestB].customPrice.amount; 7539 7540 return priceA - priceB; 7541 }); 7542 } else { 7543 newAllowedAttributeOptions[attribute.id] = allAttributes[attribute.id].options.filter(option => { 7544 return !!option.products.find(product => { 7545 //====== For Custom Design link - fetch child product id on page load START ====== 7546 if(document.querySelector('input[name="selected_option_child_id"]')){ 7547 if(document.querySelector('input[name="selected_option_child_id"]').value == ''){ 7548 document.querySelector('input[name="selected_option_child_id"]').value = product; 7549 } 7550 } 7551 //====== For Custom Design link - fetch child product id on page load END ====== 7552 return availableIndexes.includes(product); 7553 }) 7554 }); 7555 } 7556 }); 7557 return newAllowedAttributeOptions; 7558 }, 7559 calculateAvailableProductIndexes(selectedOptions) { 7560 if (Object.keys(selectedOptions).length === 0) { 7561 return Object.keys(this.optionConfig.index); 7562 } 7563 7564 const selectedIds = Object.keys(selectedOptions); 7565 if (Object.values(this.optionConfig.salable || {}).length) { 7566 const selectedOptionIndexes = selectedIds.map(attrId => { 7567 const optionValue = selectedOptions[attrId]; 7568 return this.optionConfig.salable[attrId] && this.optionConfig.salable[attrId][optionValue] || [] 7569 }) 7570 return selectedOptionIndexes.reduce((acc, optionIndexes) => { 7571 return acc.filter(index => optionIndexes.includes(index)); 7572 }); 7573 } else { 7574 const productIndexes = this.optionConfig.index; 7575 return Object.keys(productIndexes).filter(index => { 7576 return selectedIds.find( 7577 attrId => productIndexes[index][attrId] === `${selectedOptions[attrId]}` 7578 ) 7579 }); 7580 } 7581 }, 7582 findAttributeByOptionId(optionId) { 7583 for (const attributeId in this.optionConfig.attributes) { 7584 const attributeOptions = this.optionConfig.attributes[attributeId].options || []; 7585 if (attributeOptions.find(option => option.id === optionId)) { 7586 return attributeId; 7587 } 7588 } 7589 }, 7590 getAllowedAttributeOptions(attributeId) { 7591 return this.allowedAttributeOptions[attributeId] || [] 7592 }, 7593 getProductIdsForOption(option) { 7594 const attributeId = this.findAttributeByOptionId(option.id); 7595 const allOptions = this.optionConfig.attributes[attributeId]; 7596 const opt = (allOptions && allOptions.options || []).find(o => o.id === option.id); 7597 return opt && opt.products 7598 ? opt.products 7599 : []; 7600 }, 7601 findProductIdsForPartialSelection(optionSelection) { 7602 const candidateProducts = Object.values(optionSelection).reduce((candidates, optionId) => { 7603 const newCandidates = this.getProductIdsForOption({id: optionId}); 7604 return candidates === null 7605 ? newCandidates 7606 : candidates.filter(productId => newCandidates.includes(productId)); 7607 }, null); 7608 return candidateProducts || []; 7609 },
7610 findCheapestProductForPartialSelection(optionSelection) { 7611 const candidateProducts = this.findProductIdsForPartialSelection(optionSelection); 7612 return candidateProducts.reduce((cheapest, simpleIdx) => { 7613 // in the first iteration we start with simpleIdx as the currently cheapest product 7614 if (! this.optionConfig.optionPrices[cheapest]) return simpleIdx; 7615 const knownCheapestPrice = this.optionConfig.optionPrices[cheapest].finalPrice.amount; 7616 return knownCheapestPrice > this.optionConfig.optionPrices[simpleIdx].finalPrice.amount 7617 ? simpleIdx 7618 : cheapest; 7619 }, 0) 7620 }, 7621 findCheapestProductForPartialSelectionForSort(optionSelection) { 7622 const candidateProducts = this.findProductIdsForPartialSelection(optionSelection); 7623 return candidateProducts.reduce((cheapest, simpleIdx) => { 7624 // in the first iteration we start with simpleIdx as the currently cheapest product 7625 if (! this.optionConfig.optionPrices[cheapest]) return simpleIdx; 7626 const knownCheapestPrice = this.optionConfig.optionPrices[cheapest].customPrice.amount; 7627 return knownCheapestPrice > this.optionConfig.optionPrices[simpleIdx].customPrice.amount 7628 ? simpleIdx 7629 : cheapest; 7630 }, 0) 7631 }, 7632 findProductIdToUseForOptionPrice(option) { 7633 // try to find a product for a complete selection 7634 const attributeId = this.findAttributeByOptionId(option.id); 7635 const optionSelection = Object.assign({}, this.selectedValues, {[attributeId]: option.id}); 7636 const matchingSimpleIndex = this.calculateSimpleIndexForFullSelection(optionSelection); 7637 // if there is no complete selection, use the cheapest product for the option 7638 return matchingSimpleIndex || this.findCheapestProductForPartialSelection(optionSelection); 7639 }, 7640 getAttributeOptionLabel(option) { 7641 const optionProduct = this.findProductIdToUseForOptionPrice(option); 7642 if ((! optionProduct) || (optionProduct === this.productIndex)) { 7643 return option.label; 7644 } 7645 7646 const currentPrice = this.getOptionPriceAdjustmentBasePrice(); 7647 7648 if (this.optionConfig.optionPrices[optionProduct]) { 7649 const optionPrice = this.optionConfig.optionPrices[optionProduct].finalPrice.amount; 7650 if (optionPrice !== currentPrice){ 7651 return option.label + ' ' + hyva.formatPrice(optionPrice - currentPrice, true); 7652 } 7653 } 7654 return option.label; 7655 }, 7656 getOptionPriceAdjustmentBasePrice() { 7657 if (this.optionConfig.optionPrices[this.productIndex]) { 7658 return this.optionConfig.optionPrices[this.productIndex].finalPrice.amount 7659 } 7660 const cheapestForSelection = this.findCheapestProductForPartialSelection(this.selectedValues); 7661 return this.optionConfig.optionPrices[cheapestForSelection] 7662 ? this.optionConfig.optionPrices[cheapestForSelection].finalPrice.amount 7663 : this.optionConfig.prices.finalPrice.amount; // default price if no option selection 7664 }, 7665 changeOption(optionId, value) { 7666 if (value !== '' 7667 && typeof this.optionIsEnabled === 'function' 7668 && !this.optionIsEnabled(optionId, value)) { 7669 return; 7670 } 7671 var checkbox = document.getElementById('overage_percent'); 7672 if(checkbox){ 7673 checkbox.checked = true; // Check the checkbox 7674 } 7675 var galleryImgOpacity = document.querySelector('#gallery .prod_slider img.first-image'); 7676 if (galleryImgOpacity) { 7677 galleryImgOpacity.classList.add('opacity-0'); 7678 } 7679 if (value === '') { 7680 // create new array so the length property is reset if no option is selected (avoiding delete) 7681 this.selectedValues = this.selectedValues.reduce((newSelection, val, opt) => { 7682 if (opt !== optionId) { 7683 newSelection[opt] = val; 7684 } 7685 return newSelection; 7686 }, []); 7687 } else { 7688 const currentUrl = window.location.href; 7689 // Create a URL object 7690 const url = new URL(currentUrl); 7691 // Use searchParams to get the color option 7692 const colorOption = url.searchParams.get('color-option'); 7693 const variantOption = url.searchParams.get('variant-option'); 7694 if(colorOption!==null && variantOption!==null){ 7695 if(this.optionConfig.attributes[optionId]['code'] == 'incstores_pim_color_axis') 7696 { 7697 this.selectedValues[optionId] = colorOption; 7698 } 7699 if(this.optionConfig.attributes[optionId]['code'] == 'incstores_pim_variant_axis') 7700 { 7701 this.selectedValues[optionId] = variantOption; 7702 } 7703 } 7704 else if(colorOption!==null){ 7705 if(this.optionConfig.attributes[optionId]['code'] == 'incstores_pim_color_axis') 7706 { 7707 this.selectedValues[optionId] = colorOption; 7708 } 7709 7710 } 7711 else if(this.isLoadedFirst == true && (0 > 0 || 0 > 0)) 7712 { 7713 if(this.optionConfig.attributes[optionId]['code'] == 'incstores_pim_color_axis') 7714 { 7715 this.selectedValues[optionId] = '0'; 7716 } 7717 if(this.optionConfig.attributes[optionId]['code'] == 'incstores_pim_variant_axis') 7718 { 7719 this.selectedValues[optionId] = '0'; 7720 } 7721 } 7722 else 7723 { 7724 this.selectedValues[optionId] = value; 7725 } 7726 7727 var addToCartButton = document.querySelector('.pdp-addtocart-btn'); 7728 if (addToCartButton) { 7729 if (!addToCartButton.classList.contains('pointer-events-none')) { 7730 addToCartButton.classList.add('pointer-events-none'); 7731 addToCartButton.classList.add('opacity-50'); 7732 } 7733 } 7734 7735 var productId = this.findProductIdsForPartialSelection(this.selectedValues)[0]; 7736 var baseUrl = "https://www.flooringinc.com/"; 7737 7738 if (typeof productId === 'undefined') { 7739 let attributeCode = this.optionConfig.attributes[optionId]['code']; 7740 setTimeout(() => { 7741 if (attributeCode == 'incstores_pim_color_axis') { 7742 if (typeof this.autoSelectCompatibleOtherOption === 'function') { 7743 this.autoSelectCompatibleOtherOption(optionId); 7744 } 7745 } else if (attributeCode == 'incstores_pim_variant_axis' 7746 || attributeCode == 'product_option') { 7747 if (typeof this.autoSelectCompatibleColorOption === 'function') { 7748 this.autoSelectCompatibleColorOption(optionId); 7749 } 7750 } 7751 }, 300); 7752 } else { 7753 var fetchUrl = baseUrl+'customattribute/index/index/productId/'+productId; 7754 7755 fetch(fetchUrl) 7756 .then(response => response.json()) 7757 .then(data => { 7758 7759 if (document.getElementById('dimensions-attributes')) { 7760 document.getElementById('dimensions-attributes').innerHTML= data.detailsHtml.dimensionsHtml; 7761 } 7762 7763 if (document.getElementById('details-attributes')) { 7764 document.getElementById('details-attributes').innerHTML= data.detailsHtml.productDetails; 7765 } 7766 7767 if (document.getElementById('ship-to-text')) { 7768 document.getElementById('ship-to-text').value= data.shipToText; 7769 } 7770 7771 var addToCartButton = document.querySelector('.pdp-addtocart-btn'); 7772 if (addToCartButton) { 7773 addToCartButton.classList.remove('pointer-events-none'); 7774 addToCartButton.classList.remove('opacity-50'); 7775 } 7776 }) 7777 .catch(error => { 7778 console.log(error); 7779 }); 7780 } 7781 7782 } 7783 this.findSimpleIndex(); 7784 this.findAllowedAttributeOptions(); 7785 this.updateCalculatorType();// custom coding 7786 this.updateMinRollcut();// custom coding 7787 this.updateMaxRollLengthRestriction();// custom coding 7788 this.updateTileSizeArea(); // custom coding 7789 this.updateExactWidth(); // custom coding 7790 this.updateExactLength(); // custom coding 7791 this.updateExactHeight(); // custom coding 7792 this.updateCoveragePerCase(); // custom coding 7793 this.updateTileMinQty(); // custom coding 7794 this.updateShippingDetails(); // custom coding 7795 this.updatePrices(); 7796 this.updateSquareFootage(); 7797 7798 //If the page loads first time it will stop the gallery change, so configurable product image will display 7799 if (!this.isLoadedFirst) { 7800 this.updateGallery(); 7801 } 7802 7803 //====== For Custom Design link - fetch child product id when option clicked START ====== 7804 if(document.querySelector('input[name="selected_option_child_id"]')){ 7805 document.querySelector('input[name="selected_option_child_id"]').value = this.productIndex; 7806 } 7807 if(document.querySelector('input[name="custom_length"]') && document.getElementById('roll_length')){ 7808 document.querySelector('input[name="custom_length"]').value = document.getElementById('roll_length').value; 7809 } 7810 //====== For Custom Design link - fetch child product id when option clicked END ====== 7811 window.dispatchEvent( 7812 new CustomEvent( 7813 'configurable-selection-changed', 7814 { 7815 detail: { 7816 productId: this.productId, 7817 optionId: optionId, 7818 value: value, 7819 productIndex: this.productIndex, 7820 selectedValues: this.selectedValues, 7821 attributeCode: this.optionConfig.attributes[optionId]['code'], 7822 candidates: this.findProductIdsForPartialSelection(this.selectedValues), 7823 } 7824 } 7825 ) 7826 ); 7827 7828 /* =============================== disabled product option checking & remove START =============== */ 7829 if (!this.optionConfig?.ship_region_enabled 7830 && document.querySelector('.swatch-attribute .selectOptionColor') 7831 ) { 7832 var quickship_lebel_should_show; 7833 var quickship_active_color_option_exist = 0; 7834 setTimeout(() => { 7835 document.querySelectorAll('.swatch-attribute .selectOptionColor').forEach(function(option_box) { 7836 if (!option_box.querySelector('div, label')) { 7837 option_box.remove(); 7838 } 7839 }); 7840 7841 }, 300); 7842 } 7843 /* =============================== disabled product option checking & remove END =============== */ 7844 7845 /* ========== remove validation when click on available color start =============== */ 7846 if(document.querySelector('.normal_color_swatch_option .selectOptionColor') ){ 7847 setTimeout(() => { 7848 const colorBoxes = document.querySelectorAll( 7849 '.normal_color_swatch_option .selectOptionColor' 7850 ); 7851 var colorNotAvailable = 0; 7852 const colorerrorDiv = document.getElementById('normal-color-swatch-option-error-msg'); 7853
7854 colorBoxes.forEach((colorBox) => { 7855 if (colorBox.querySelector('.select_none label.checked')) { 7856 colorNotAvailable = 1; 7857 } 7858 }); 7859 if (!colorNotAvailable){ 7860 colorerrorDiv.textContent = ''; 7861 colorerrorDiv.style.display = 'none'; 7862 } 7863 7864 }, 300); 7865 } 7866 /* ========== remove validation when click on available color end =============== */ 7867 7868 /* =============================== color label show / hide if color option not showing END =============== */ 7869 7870 /* =============================== other label show / hide if the option not showing START =============== */ 7871 if (typeof this.syncOtherSwatchOptionVisibility === 'function') { 7872 this.syncOtherSwatchOptionVisibility(); 7873 } else { 7874 const swatchAttribute = document.querySelector('.swatch-attribute.other_swatch_option'); 7875 if (swatchAttribute) { 7876 setTimeout(() => { 7877 const selectOptionColors = swatchAttribute.querySelectorAll('.selectOptionColor'); 7878 if (selectOptionColors.length > 1) { 7879 swatchAttribute.style.display = 'block'; 7880 } else { 7881 swatchAttribute.style.display = 'none'; 7882 } 7883 }, 300); 7884 } 7885 } 7886 /* =============================== other label show / hide if the option not showing END =============== */ 7887 7888 }, 7889 calculateIsMinimalPrice() { 7890 return ( 7891 this.selectedValues.filter(value => !!value).length < 7892 Object.keys(this.optionConfig.attributes).length 7893 ); 7894 }, 7895 updatePrices() { 7896 const value = this.productIndex ? 7897 this.optionConfig.optionPrices[this.productIndex] : 7898 this.optionConfig.prices; 7899 7900 window.dispatchEvent( 7901 new CustomEvent( 7902 "update-prices-" + this.productId, 7903 { 7904 detail: Object.assign( 7905 value, 7906 { 7907 isMinimalPrice: this.calculateIsMinimalPrice(), 7908 calculatorType: this.optionConfig?.calculator_type?.[this.productIndex] ?? '', 7909 getIncstoresPimCoverage: this.optionConfig?.coverage_per_case?.[this.productIndex] ?? '', 7910 unitOfMeasure: this.optionConfig?.unit_of_measure?.[this.productIndex] ?? '', 7911 altUnitOfMeasure: this.optionConfig?.alt_unit_of_measure?.[this.productIndex] ?? 'sqft', 7912 availableQuantity: this.optionConfig?.available_quantity?.[this.productIndex] ?? '', 7913 } 7914 ) 7915 } 7916 ) 7917 ); 7918 setTimeout(() => { 7919 var calculatorType = this.optionConfig.calculator_type[this.productIndex]; 7920 var priceElement = document.querySelector('div.items-baseline .final-price .price'); 7921 7922 if (priceElement && calculatorType != 'none' && calculatorType != 'pre_cut_roll') { 7923 var customOptionPrice = priceElement.childNodes[0].nodeValue.trim(); 7924 let priceLabelElement = document.querySelector('.final-price .price-label'); 7925 var priceLabel = ""; 7926 7927 if (priceLabelElement) { 7928 priceLabel = priceLabelElement.textContent.trim(); 7929 } 7930 7931 document.querySelectorAll('.display-option-price').forEach(el => { 7932 el.textContent = "("+customOptionPrice+priceLabel+")"; 7933 }); 7934 } else if (calculatorType == 'none') { 7935 //None type 7936 var priceElement = document.querySelector('.none .final-price .price'); 7937 var customOptionPrice = ""; 7938 7939 if (priceElement) { 7940 customOptionPrice = priceElement.childNodes[0].nodeValue.trim(); 7941 } 7942 document.querySelectorAll('.display-option-price').forEach(el => { 7943 el.textContent = "("+customOptionPrice+")"; 7944 }); 7945 } else if (calculatorType == 'pre_cut_roll') { 7946 let priceLabelElement = document.querySelector('.final-price .price-label'); 7947 var priceLabel = ""; 7948 7949 if (priceLabelElement) { 7950 priceLabel = priceLabelElement.textContent.trim(); 7951 } 7952 var priceElement = document.querySelector('.pre_cut_roll .final-price .price'); 7953 var customOptionPrice = ""; 7954 7955 if (priceElement) { 7956 customOptionPrice = priceElement.childNodes[0].nodeValue.trim(); 7957 } 7958 document.querySelectorAll('.display-option-price').forEach(el => { 7959 el.textContent = "("+customOptionPrice+priceLabel+")"; 7960 }); 7961 } 7962 }, "500"); 7963 }, 7964 updateTileSizeArea() { 7965 const overage_percent = this.optionConfig.overage_percent[this.productIndex]; 7966 const coverage_per_case = this.optionConfig.coverage_per_case[this.productIndex]; 7967 const exact_width = this.optionConfig.exact_width[this.productIndex]; 7968 const exact_length = this.optionConfig.exact_length[this.productIndex]; 7969 window.dispatchEvent( 7970 new CustomEvent( 7971 "update-tile-size-area-" + this.productId, 7972 { 7973 detail: { 7974 overage_percent: overage_percent, 7975 coverage_per_case: coverage_per_case, 7976 exact_width: exact_width, 7977 exact_length: exact_length, 7978 calculator_type: this.optionConfig.calculator_type[this.productIndex], 7979 } 7980 } 7981 ) 7982 ); 7983 }, 7984 updateExactWidth() { 7985 const exact_width = this.optionConfig.exact_width[this.productIndex]; 7986 window.dispatchEvent( 7987 new CustomEvent( 7988 "update-exact-width-" + this.productId, 7989 {detail: exact_width} 7990 ) 7991 ); 7992 }, 7993 updateExactLength() { 7994 const exact_length = this.optionConfig.exact_length[this.productIndex]; 7995 window.dispatchEvent( 7996 new CustomEvent(
7997 "update-exact-length-" + this.productId, 7998 {detail: exact_length} 7999 ) 8000 ); 8001 }, 8002 updateExactHeight() { 8003 const exact_height = this.optionConfig.exact_height[this.productIndex]; 8004 window.dispatchEvent( 8005 new CustomEvent( 8006 "update-exact-height-" + this.productId, 8007 {detail: exact_height} 8008 ) 8009 ); 8010 }, 8011 updateCoveragePerCase() { 8012 const coverage_per_case = this.optionConfig.coverage_per_case[this.productIndex]; 8013 //const tile_size_area = ""; 8014 window.dispatchEvent( 8015 new CustomEvent( 8016 "update-coverage-per-case-" + this.productId, 8017 {detail: coverage_per_case} 8018 ) 8019 ); 8020 }, 8021 updateTileMinQty() { 8022 const min_tile_quantity = this.optionConfig.min_tile_quantity[this.productIndex]; 8023 window.dispatchEvent( 8024 new CustomEvent( 8025 "update-min-tile-quantity-" + this.productId, 8026 {detail: min_tile_quantity} 8027 ) 8028 ); 8029 }, 8030 getAttributeIdByCode(attributeCode) { 8031 let attributes = this.optionConfig.attributes; 8032 8033 for (let id in attributes) { 8034 if (attributes[id].code === attributeCode) { 8035 return id; 8036 } 8037 } 8038 8039 return null; 8040 }, 8041 updateCalculatorType() { 8042 const has_corner_border_center = this.optionConfig.has_corner_border_center[this.productIndex]; 8043 const calculator_type = this.optionConfig.calculator_type[this.productIndex]; 8044 if(calculator_type == 'sqft' && has_corner_border_center !=1){ 8045 var cbcelements = document.querySelectorAll('.cbc'); 8046 cbcelements.forEach(function(element) { 8047 element.style.display = 'none'; 8048 }); 8049 var noneelements = document.querySelectorAll('.none'); 8050 noneelements.forEach(function(element) { 8051 element.style.display = 'none'; 8052 }); 8053 var rollelements = document.querySelectorAll('.roll'); 8054 rollelements.forEach(function(element) { 8055 element.style.display = 'none'; 8056 }); 8057 var cbcelements = document.querySelectorAll('.case'); 8058 cbcelements.forEach(function(element) { 8059 element.style.display = 'none'; 8060 }); 8061 var elements = document.querySelectorAll('.sqft'); 8062 elements.forEach(function(element) { 8063 element.style.display = 'block'; 8064 }); 8065 8066 var elements = document.querySelectorAll('.pre_cut_roll'); 8067 elements.forEach(function(element) { 8068 element.style.display = 'none'; 8069 }); 8070 const button = document.getElementById("product-addtocart-button-fake"); 8071 if (button && button.getAttribute("data-flooring-handler") !== "addToCartClickVerify") { 8072 button.setAttribute("data-flooring-handler", "addToCartClickVerify"); 8073 } 8074 } else if(calculator_type == 'sqft' && has_corner_border_center ==1){ 8075 var sqftelements = document.querySelectorAll('.sqft'); 8076 sqftelements.forEach(function(element) { 8077 element.style.display = 'none'; 8078 }); 8079 var caseelements = document.querySelectorAll('.case'); 8080 caseelements.forEach(function(element) { 8081 element.style.display = 'none'; 8082 }); 8083 var rollelements = document.querySelectorAll('.roll');
8084 rollelements.forEach(function(element) { 8085 element.style.display = 'none'; 8086 }); 8087 var noneelements = document.querySelectorAll('.none'); 8088 noneelements.forEach(function(element) { 8089 element.style.display = 'none'; 8090 }); 8091 var elements = document.querySelectorAll('.cbc'); 8092 elements.forEach(function(element) { 8093 element.style.display = 'block'; 8094 }); 8095 var elements = document.querySelectorAll('.price-details .sqft'); 8096 elements.forEach(function(element) { 8097 element.style.display = 'none'; 8098 }); 8099 8100 var elements = document.querySelectorAll('.pre_cut_roll'); 8101 elements.forEach(function(element) { 8102 element.style.display = 'none'; 8103 }); 8104 const button = document.getElementById("product-addtocart-button-fake"); 8105 if (button && button.getAttribute("data-flooring-handler") !== "addToCartClickVerify") { 8106 button.setAttribute("data-flooring-handler", "addToCartClickVerify"); 8107 } 8108 }else if(calculator_type == 'case'){ 8109 var sqftelements = document.querySelectorAll('.sqft'); 8110 sqftelements.forEach(function(element) { 8111 element.style.display = 'none'; 8112 }); 8113 var cbcelements = document.querySelectorAll('.cbc'); 8114 cbcelements.forEach(function(element) { 8115 element.style.display = 'none'; 8116 }); 8117 var noneelements = document.querySelectorAll('.none'); 8118 noneelements.forEach(function(element) { 8119 element.style.display = 'none'; 8120 }); 8121 var rollelements = document.querySelectorAll('.roll'); 8122 rollelements.forEach(function(element) { 8123 element.style.display = 'none'; 8124 }); 8125 var elements = document.querySelectorAll('.case'); 8126 elements.forEach(function(element) { 8127 element.style.display = 'block'; 8128 }); 8129 8130 var elements = document.querySelectorAll('.pre_cut_roll'); 8131 elements.forEach(function(element) { 8132 element.style.display = 'none'; 8133 }); 8134 const button = document.getElementById("product-addtocart-button-fake"); 8135 if (button && button.getAttribute("data-flooring-handler") !== "addToCartClickVerify") { 8136 button.setAttribute("data-flooring-handler", "addToCartClickVerify"); 8137 } 8138 } else if(calculator_type == 'roll'){ 8139 var sqftelements = document.querySelectorAll('.sqft'); 8140 sqftelements.forEach(function(element) { 8141 element.style.display = 'none'; 8142 }); 8143 var cbcelements = document.querySelectorAll('.cbc'); 8144 cbcelements.forEach(function(element) { 8145 element.style.display = 'none'; 8146 }); 8147 var caseelements = document.querySelectorAll('.case'); 8148 caseelements.forEach(function(element) { 8149 element.style.display = 'none'; 8150 }); 8151 var noneelements = document.querySelectorAll('.none'); 8152 noneelements.forEach(function(element) { 8153 element.style.display = 'none'; 8154 }); 8155 var elements = document.querySelectorAll('.roll'); 8156 elements.forEach(function(element) { 8157 element.style.display = 'block'; 8158 }); 8159 const button = document.getElementById("product-addtocart-button-fake"); 8160 if (button && button.getAttribute("data-flooring-handler") !== "addToCartClickVerify") { 8161 button.setAttribute("data-flooring-handler", "addToCartClickVerify"); 8162 } 8163 8164 var elements = document.querySelectorAll('.pre_cut_roll');
8165 elements.forEach(function(element) { 8166 element.style.display = 'none'; 8167 }); 8168 } else if(calculator_type == 'pre_cut_roll'){ 8169 var sqftelements = document.querySelectorAll('.sqft'); 8170 sqftelements.forEach(function(element) { 8171 element.style.display = 'none'; 8172 }); 8173 var cbcelements = document.querySelectorAll('.cbc'); 8174 cbcelements.forEach(function(element) { 8175 element.style.display = 'none'; 8176 }); 8177 var caseelements = document.querySelectorAll('.case'); 8178 caseelements.forEach(function(element) { 8179 element.style.display = 'none'; 8180 }); 8181 var noneelements = document.querySelectorAll('.none'); 8182 noneelements.forEach(function(element) { 8183 element.style.display = 'none'; 8184 }); 8185 var elements = document.querySelectorAll('.roll'); 8186 elements.forEach(function(element) { 8187 element.style.display = 'none'; 8188 }); 8189 var elements = document.querySelectorAll('.pre_cut_roll'); 8190 elements.forEach(function(element) { 8191 element.style.display = 'block'; 8192 }); 8193 const button = document.getElementById("product-addtocart-button-fake"); 8194 if (button && button.getAttribute("data-flooring-handler") !== "addToCartClickforPreCutRoll") { 8195 button.setAttribute("data-flooring-handler", "addToCartClickforPreCutRoll"); 8196 } 8197 } else { 8198 var sqftelements = document.querySelectorAll('.sqft'); 8199 sqftelements.forEach(function(element) { 8200 element.style.display = 'none'; 8201 }); 8202 var cbcelements = document.querySelectorAll('.cbc'); 8203 cbcelements.forEach(function(element) { 8204 element.style.display = 'none'; 8205 }); 8206 var caseelements = document.querySelectorAll('.case'); 8207 caseelements.forEach(function(element) { 8208 element.style.display = 'none'; 8209 }); 8210 var rollelements = document.querySelectorAll('.roll'); 8211 rollelements.forEach(function(element) { 8212 element.style.display = 'none'; 8213 }); 8214 var cbcelements = document.querySelectorAll('.case'); 8215 cbcelements.forEach(function(element) { 8216 element.style.display = 'none'; 8217 }); 8218 var elements = document.querySelectorAll('.none'); 8219 elements.forEach(function(element) { 8220 element.style.display = 'block'; 8221 }); 8222 const noneButton = document.getElementById("product-addtocart-button-fake"); 8223 if (noneButton && noneButton.getAttribute("data-flooring-handler") !== "addToCartClickforNone") { 8224 noneButton.setAttribute("data-flooring-handler", "addToCartClickforNone"); 8225 } 8226 8227 var elements = document.querySelectorAll('.pre_cut_roll'); 8228 elements.forEach(function(element) { 8229 element.style.display = 'none'; 8230 }); 8231 } 8232 }, 8233 updateMinRollcut() { 8234 const min_rollcut = this.optionConfig.min_rollcut[this.productIndex]; 8235 var exactlength = ''; 8236 window.dispatchEvent( 8237 new CustomEvent( 8238 "update-min-rollcut-" + this.productId, 8239 {detail: min_rollcut} 8240 ) 8241 ); 8242 }, 8243 8244 updateMaxRollLengthRestriction() { 8245 const max_roll_length_restriction = this.optionConfig.max_roll_length_restriction[this.productIndex]; 8246 const exact_width = this.optionConfig.exact_width[this.productIndex]; 8247 const exact_length = this.optionConfig.exact_length[this.productIndex]; 8248 const min_rollcut = this.optionConfig.min_rollcut[this.productIndex]; 8249 8250 window.dispatchEvent( 8251 new CustomEvent( 8252 "update-max-roll-length-restriction-" + this.productId, 8253 { 8254 detail: { 8255 max_roll_length_restriction: max_roll_length_restriction, 8256 min_rollcut: min_rollcut, 8257 exact_width: exact_width, 8258 exact_length: exact_length, 8259 } 8260 } 8261 ) 8262 ); 8263 }, 8264 updateShippingDetails() { 8265 const pdp_shipping_text = this.optionConfig.pdp_shipping_text[this.productIndex]; 8266 const expected_days_ship = this.optionConfig.expected_days_ship[this.productIndex]; 8267 window.dispatchEvent( 8268 new CustomEvent( 8269 "update-shipping-details-" + this.productId, 8270 { 8271 detail: { 8272 pdp_shipping_text: pdp_shipping_text, 8273 expected_days_ship: expected_days_ship, 8274 } 8275 } 8276 ) 8277 ); 8278 }, 8279 updateGallery () { 8280 if (this.isLoadedFirst && this.ssrGalleryChildId > 0) { 8281 return; 8282 } 8283 8284 if (this.productIndex) { 8285 const images = this.optionConfig.images[this.productIndex]; 8286 images && window.dispatchEvent(new CustomEvent( 8287 "update-gallery", 8288 { detail: this.sortImagesByPosition(images) } 8289 )); 8290 } else { 8291 window.dispatchEvent(new Event("reset-gallery")); 8292 } 8293 }, 8294 updateSquareFootage () { 8295 let squareFootageElement = document.getElementsByName('square_footage'); 8296 8297 if (squareFootageElement.length > 0) { 8298 var squareFootage = squareFootageElement[0].value; 8299 8300 if (squareFootage) { 8301 // Trigger the 'keyup' event 8302 var event = new KeyboardEvent('keyup', { 8303 'key': 'Enter', // You can set this to any key, like 'Enter' 8304 'bubbles': true, 8305 'cancelable': true 8306 }); 8307 8308 squareFootageElement[0].dispatchEvent(event); 8309 } 8310 } 8311 }, 8312 sortImagesByPosition(images) { 8313 return images.sort((x, y) => { 8314 return x.position === y.position ? 0 : (parseInt(x.position) > parseInt(y.position) ? 1 : -1) 8315 }); 8316 }, 8317 onGetCartData(data) { 8318 this.preselectCartItems(data); 8319 this.preselectQuerystringItems(); 8320 this.preselectLocationHashItems(); 8321 }, 8322 preselectCartItems(data) { 8323 // pre-select options based on cart data for current (quote) itemId 8324 const cart = data && data.cart; 8325 if (cart && cart.items) { 8326 const cartItem = cart.items.find((item) => { 8327 return ( 8328 item.item_id === this.itemId 8329 && item.product_id === this.productId 8330 ) 8331 }); 8332 if (cartItem && cartItem.options && cartItem.options.length) { 8333 cartItem.options.map(option => { 8334 this.changeOption(option.option_id, option.option_value); 8335 }) 8336 } 8337 } 8338 }, 8339 preselectQuerystringItems() { 8340 // pre-select option like ?size=167 8341 const urlQueryParams = new URLSearchParams(window.location.search.replace('?','')); 8342 Object.values(this.optionConfig.attributes).map(attribute => { 8343 urlQueryParams.get(attribute.code) && 8344 this.changeOption(attribute.id, urlQueryParams.get(attribute.code)); 8345 }); 8346 }, 8347 preselectLocationHashItems() { 8348 // pre-select option like #144=167 8349 const urlHashParams = new URLSearchParams(window.location.hash.replace('#','')); 8350 Object.values(this.optionConfig.attributes).map(attribute => { 8351 urlHashParams.get(attribute.id) && 8352 this.changeOption(attribute.id, urlHashParams.get(attribute.id)); 8353 }); 8354 } 8355 } 8356 } 8357 8358 function isOptionVisible(element) { 8359 const computedStyle = window.getComputedStyle(element); 8360 return computedStyle.display !== 'none' && computedStyle.visibility !== 'hidden'; 8361 } 8362</script>
vendor: 1 bytes, line 8362
8362
8363<script> 8364 function initCompareOnProductList() { 8365 return { 8366 addToCompare(productId) { 8367 const formKey = hyva.getFormKey(); 8368 const postUrl = BASE_URL + 'catalog/product_compare/add/'; 8369 8370 fetch(postUrl, { 8371 "headers": { 8372 "content-type": "application/x-www-form-urlencoded; charset=UTF-8", 8373 }, 8374 "body": "form_key=" + formKey + "&product=" + productId + "&uenc=" + hyva.getUenc(), 8375 "method": "POST", 8376 "mode": "cors", 8377 "credentials": "include" 8378 }).then(function (response) { 8379 if (response.redirected) { 8380 window.location.href = response.url; 8381 } 8382 }).catch(function (error) { 8383 typeof window.dispatchMessages !== "undefined" && window.dispatchMessages( 8384 [{ 8385 type: "error", 8386 text: error 8387 }], 5000 8388 ); 8389 }); 8390 } 8391 }; 8392 } 8393</script>
vendor: 1 bytes, line 8393
8393
8394<script> 8395 function initWishlist() { 8396 return { 8397 addToWishlist(productId) { 8398 const formKey = hyva.getFormKey(); 8399 const postUrl = BASE_URL + 'wishlist/index/add/'; 8400 8401 fetch(postUrl, { 8402 "headers": { 8403 "content-type": "application/x-www-form-urlencoded; charset=UTF-8", 8404 }, 8405 "body": "form_key=" + formKey + "&product=" + productId + "&uenc=" + hyva.getUenc(), 8406 "method": "POST", 8407 "mode": "cors", 8408 "credentials": "include" 8409 }).then(function (response) { 8410 if (response.redirected) { 8411 window.location.href = response.url; 8412 } else if (response.ok) { 8413 return response.json(); 8414 } else { 8415 typeof window.dispatchMessages !== "undefined" && window.dispatchMessages( 8416 [{ 8417 type: "warning", 8418 text: "Could not add item to wishlist." 8419 }], 5000 8420 ); 8421 } 8422 }).then(function (response) { 8423 if (!response) { return } 8424 typeof window.dispatchMessages !== "undefined" && window.dispatchMessages( 8425 [{ 8426 type: (response.success) ? "success" : "error", 8427 text: (response.success) 8428 ? "Product has been added to your Wish List." 8429 : response.error_message 8430 }], 5000 8431 ); 8432 const reloadCustomerDataEvent = new CustomEvent("reload-customer-section-data"); 8433 window.dispatchEvent(reloadCustomerDataEvent); 8434 }).catch(function (error) { 8435 typeof window.dispatchMessages !== "undefined" && window.dispatchMessages( 8436 [{ 8437 type: "error", 8438 text: error 8439 }], 5000 8440 ); 8441 }); 8442 } 8443 } 8444 } 8445</script>
vendor: 1 bytes, line 8445
8445
8446<script> 8447 function initSwatchOptions(swatchConfig, swatchLabelValues = null) { 8448 const normalizedSwatchLabelValues = ( 8449 swatchLabelValues 8450 && typeof swatchLabelValues === 'object' 8451 && !Array.isArray(swatchLabelValues) 8452 ) ? swatchLabelValues : {}; 8453 8454 return { 8455 swatchConfig, 8456 swatchLabelValues: normalizedSwatchLabelValues, 8457 resolveSwatchLabel(attributeId, optionId) { 8458 if (optionId === undefined || optionId === null || optionId === '') { 8459 return ''; 8460 } 8461 8462 const optionKey = String(optionId); 8463 const labels = ( 8464 this.swatchLabelValues 8465 && typeof this.swatchLabelValues === 'object' 8466 && !Array.isArray(this.swatchLabelValues) 8467 ) ? this.swatchLabelValues : {}; 8468 const flatLabel = labels[optionKey] ?? labels[optionId]; 8469 if (flatLabel !== undefined && flatLabel !== null && flatLabel !== '') { 8470 return String(flatLabel); 8471 } 8472 8473 const attrConfig = this.swatchConfig?.[attributeId] ?? this.swatchConfig?.[String(attributeId)]; 8474 const attrLabels = attrConfig?.swatchLabelValues; 8475 if (attrLabels) { 8476 const attrLabel = attrLabels[optionKey] ?? attrLabels[optionId]; 8477 if (attrLabel !== undefined && attrLabel !== null && attrLabel !== '') { 8478 return String(attrLabel); 8479 } 8480 } 8481 8482 const swatchOption = attrConfig?.[optionKey] ?? attrConfig?.[optionId]; 8483 if (swatchOption?.label) { 8484 return String(swatchOption.label); 8485 } 8486 8487 return this.getOptionLabelFromOptionConfig(attributeId, optionId) || ''; 8488 }, 8489 getAttributeSwatchData(attributeId) { 8490 const attributeKey = String(attributeId); 8491 const rawConfig = this.swatchConfig?.[attributeId] ?? this.swatchConfig?.[attributeKey]; 8492 const labels = ( 8493 this.swatchLabelValues 8494 && typeof this.swatchLabelValues === 'object' 8495 && !Array.isArray(this.swatchLabelValues) 8496 ) ? this.swatchLabelValues : {}; 8497 if (!rawConfig) { 8498 return {details: {}, swatchLabelValues: labels}; 8499 } 8500 const swatchConfig = Object.assign({}, rawConfig); 8501 if (swatchConfig['additional_data']) { 8502 try { 8503 swatchConfig['details'] = JSON.parse(swatchConfig['additional_data']); 8504 } catch (error) { 8505 swatchConfig['details'] = {}; 8506 } 8507 } else { 8508 swatchConfig['details'] = swatchConfig['details'] ?? {}; 8509 } 8510 swatchConfig['swatchLabelValues'] = labels; 8511 8512 return swatchConfig; 8513 }, 8514 getAllAttributeOptions(attributeId) { 8515 return ( 8516 this.optionConfig.attributes[attributeId] && 8517 this.optionConfig.attributes[attributeId].options 8518 ) || [] 8519 }, 8520 optionIsActive(attributeId, optionId) { 8521 const optionKey = String(optionId); 8522 return !!this.getAllowedAttributeOptions(attributeId).find( 8523 option => String(option.id) === optionKey 8524 ); 8525 }, 8526 optionIsEnabled(attributeId, optionId) { 8527 const attributeKey = String(attributeId); 8528 const optionKey = String(optionId); 8529 const index = this.optionConfig?.index || {}; 8530 for (const productId in index) { 8531 const productOptions = index[productId] || {}; 8532 if ( 8533 String(productOptions[attributeKey]) === optionKey 8534 || String(productOptions[attributeId]) === optionKey 8535 ) { 8536 return true; 8537 } 8538 } 8539 const attributeOptions = ( 8540 this.optionConfig?.attributes?.[attributeId]?.options 8541 || this.optionConfig?.attributes?.[attributeKey]?.options 8542 || [] 8543 ); 8544 const match = attributeOptions.find((option) => String(option.id) === optionKey); 8545 if (!match?.products?.length) { 8546 return false;
8547 } 8548 return match.products.some((childId) => { 8549 const key = String(childId); 8550 return Object.prototype.hasOwnProperty.call(index, key) 8551 || Object.prototype.hasOwnProperty.call(index, childId); 8552 }); 8553 }, 8554 mapSwatchTypeNumberToTypeCode(typeNumber) { 8555 switch ("" + typeNumber) { 8556 case "1": 8557 return "color" 8558 case "2": 8559 return "image" 8560 case "3": 8561 return "empty" 8562 case "0": 8563 default: 8564 return "text" 8565 } 8566 }, 8567 getTypeOfFirstOption(attributeId) { 8568 for (const optionId in this.swatchConfig[attributeId]) { 8569 const option = this.swatchConfig[attributeId][optionId]; 8570 if (typeof option.type !== 'undefined') { 8571 return this.mapSwatchTypeNumberToTypeCode(option.type); 8572 } 8573 } 8574 }, 8575 getVisualSwatchType(attributeId, targetOptionId) { 8576 // If a type configuration is present for the given option id, use it 8577 const config = this.swatchConfig[attributeId]; 8578 if (config[targetOptionId] && typeof config[targetOptionId].type !== 'undefined') { 8579 return this.mapSwatchTypeNumberToTypeCode(config[targetOptionId].type); 8580 } 8581 8582 // Otherwise - if no config is present for the target option - use the type of the first option 8583 // with a type property from the attribute, thus assuming its the same type as the target option. 8584 // (This edge case condition can occur on single swatch products if some options are not salable) 8585 return this.getTypeOfFirstOption(attributeId); 8586 }, 8587 getSwatchType(attributeId, optionId) { 8588 // Deserialize the attribute details the first time they are used 8589 if (this.swatchConfig[attributeId] && ! this.swatchConfig[attributeId].details) { 8590 this.swatchConfig[attributeId] = this.getAttributeSwatchData(attributeId); 8591 } 8592 const type = this.swatchConfig[attributeId] && 8593 this.swatchConfig[attributeId].details && 8594 this.swatchConfig[attributeId].details.swatch_input_type || 8595 "empty"; 8596 return type === 'visual' ? this.getVisualSwatchType(attributeId, optionId) : type; 8597 }, 8598 isTextSwatch(attributeId, optionId) { 8599 return this.getSwatchType(attributeId, optionId) === 'text'; 8600 }, 8601 isVisualSwatch(attributeId, optionId) { 8602 const type = this.getSwatchType(attributeId, optionId); 8603 8604 return ['image', 'color'].includes(type); 8605 }, 8606 getSwatchBackgroundStyle(attributeId, optionId) { 8607 const config = this.getSwatchConfig(attributeId, optionId); 8608 const type = this.getSwatchType(attributeId, optionId); 8609 8610 if (type === "color") { 8611 return 'background-color:' + config.value; 8612 } else if (type === "image") { 8613 return "background: #ffffff url('" + config.value + "') no-repeat center"; 8614 } else { 8615 return ''; 8616 } 8617 }, 8618 getSwatchText(attributeId, optionId) { 8619 return this.resolveSwatchLabel(attributeId, optionId); 8620 }, 8621 getLegacyColorSwatchImageHtml(attributeId, optionId) { 8622 const map = this._legacyColorSwatchImages || {}; 8623 return this.getSwatchTextUrl(attributeId, optionId, map); 8624 }, 8625 getSwatchTextUrl(attributeId, optionId, childSwatch) { 8626 const config = this.getSwatchConfig(attributeId, optionId); 8627 const optionKey = String(optionId); 8628 const swatchMap = ( 8629 childSwatch 8630 && typeof childSwatch === 'object' 8631 && !Array.isArray(childSwatch) 8632 ) ? childSwatch : {}; 8633 const swatchUrl = swatchMap[optionKey] ?? swatchMap[optionId]; 8634 if(swatchUrl != "" && swatchUrl != null && isValidURL(swatchUrl)){ 8635 return "<img loading='lazy' src="+swatchUrl+" title="+swatchUrl+" alt="+swatchUrl+"/>"; 8636 } else if(config && config.value!="" && config.value!= null && isValidURL(config.value)){ 8637 return "<img loading='lazy' src="+config.value+" title="+config.value+" alt="+config.value+"/>"; 8638 } else { 8639 var placeHoldernew = BASE_URL+'media/catalog/product/placeholder/default/swatch_placeholder.png'; 8640 8641 return "<img width= '60px' height='60px' src="+placeHoldernew+" title="+placeHoldernew+" alt="+placeHoldernew+"/>"; 8642 } 8643 }, 8644 getOptionLabelFromOptionConfig(attributeId, optionId) { 8645 const optionKey = String(optionId); 8646 const option = this.getAllAttributeOptions(attributeId).find( 8647 (entry) => String(entry.id) === optionKey 8648 ); 8649 return option?.label || ''; 8650 }, 8651 getSwatchConfig(attributeId, optionId) { 8652 const attrConfig = this.swatchConfig[attributeId] ?? this.swatchConfig[String(attributeId)]; 8653 if (!attrConfig) { 8654 return false;
8655 } 8656 return attrConfig[optionId] ?? attrConfig[String(optionId)] ?? false; 8657 }, 8658 activeTooltipItem: false, 8659 tooltipPositionElement: false, 8660 isTooltipVisible() { 8661 return this.activeTooltipItem && 8662 this.getSwatchConfig( 8663 this.activeTooltipItem.attribute, 8664 this.activeTooltipItem.item 8665 ); 8666 }, 8667 getTooltipImageStyle(attributeId, optionId) { 8668 const config = this.getSwatchConfig(attributeId, optionId); 8669 const type = this.getSwatchType(attributeId, optionId); 8670 8671 if (type === "color") { 8672 return 'background-color:' + config.value + '; width: 110px; height: 90px;'; 8673 } else if (type === "image") { 8674 return "background: #ffffff url('" + config.thumb + 8675 "') center center no-repeat; width: 110px; height: 90px;"; 8676 } else { 8677 return 'display:none'; 8678 } 8679 }, 8680 getTooltipPosition() { 8681 if (!this.tooltipPositionElement) { 8682 return ''; 8683 } 8684 const rect = this.tooltipPositionElement.getBoundingClientRect(); 8685 const elementWidth = rect.width; 8686 const elementHeight = rect.height; 8687 const container = document.querySelector('.swatch___render'); 8688 if (!container) { 8689 return ''; 8690 } 8691 const containerRect = container.getBoundingClientRect(); 8692 const topPosition = rect.top - containerRect.top + 10; 8693 const leftPosition = rect.left - containerRect.left; 8694 8695 return ` 8696 top: ${topPosition}px; 8697 left: ${leftPosition}px; 8698 `; 8699 }, 8700 getSwatchConfigLabel(attributeId, optionId) { 8701 const label = this.resolveSwatchLabel(attributeId, optionId); 8702 return label !== '' ? label : false; 8703 }, 8704 getTooltipLabel() { 8705 return this.getSwatchConfigLabel(this.activeTooltipItem.attribute, this.activeTooltipItem.item); 8706 //return this.getSwatchConfig(this.activeTooltipItem.attribute, this.activeTooltipItem.item).label 8707 }, 8708 focusedLabel: false, 8709 focusLabel(optionId) { 8710 this.focusedLabel = optionId; 8711 }, 8712 blurLabel() { 8713 this.focusedLabel = false; 8714 }, 8715 showSwatches: true, 8716 initShowSwatchesIntersect() { 8717 this.showSwatches = true; 8718 }, 8719 8720 quickShipValidation(attributeCode, attributeId, optionId){ 8721 if (optionId === undefined || optionId === null || optionId === '') { 8722 return 0; 8723 } 8724 var is_quick_ship_color = 0; 8725 var optionConfigObj = this.optionConfig; 8726 if (!optionConfigObj || typeof optionConfigObj !== 'object') { 8727 return 0; 8728 } 8729 if(attributeCode == 'incstores_pim_color_axis'){ 8730 var attributes = optionConfigObj.attributes; 8731 if (!attributes || !attributes[attributeId] || !attributes[attributeId]['options']) { 8732 return 0; 8733 } 8734 var quickShipColorIds = optionConfigObj.quick_ship_color_ids || []; 8735 if (quickShipColorIds.length) { 8736 return quickShipColorIds.some(function (id) { 8737 return String(id) === String(optionId); 8738 }) ? 1 : 0; 8739 } 8740 var quickShipMap = optionConfigObj.quick_ship; 8741 if (!quickShipMap) { 8742 return 0; 8743 } 8744 var attributes_options = attributes[attributeId]['options']; 8745 8746 attributes_options.forEach(function(option_details) { 8747 if(option_details['id'] == optionId){ 8748 option_details['products'].forEach(function(child_product_id) { 8749 if(quickShipMap[String(child_product_id)] == 1 || quickShipMap[child_product_id] == 1){ 8750 is_quick_ship_color = 1; 8751 return false;
8752 } 8753 }); 8754 } 8755 }); 8756 } 8757 return is_quick_ship_color; 8758 }, 8759 8760 hasQuickShipColorOptions(attributeCode, attributeId) { 8761 if (!this.optionConfig?.attributes?.[attributeId]?.options?.length) { 8762 return false; 8763 } 8764 if (this.selectedValues) { 8765 Object.keys(this.selectedValues).forEach(function (key) { 8766 void this.selectedValues[key]; 8767 }.bind(this)); 8768 } 8769 var colorIds = this.optionConfig.quick_ship_color_ids || []; 8770 var options = this.optionConfig.attributes[attributeId].options; 8771 for (var i = 0; i < options.length; i++) { 8772 var optionId = options[i].id; 8773 var isQuick = colorIds.length 8774 ? colorIds.some(function (id) { return String(id) === String(optionId); }) 8775 : (this.quickShipValidation(attributeCode, attributeId, optionId) === 1); 8776 if (!isQuick) { 8777 continue; 8778 } 8779 if (!this.optionIsEnabled(attributeId, optionId)) { 8780 continue; 8781 } 8782 if (!this.optionIsActive(attributeId, optionId)) { 8783 continue; 8784 } 8785 return true; 8786 } 8787 return false; 8788 }, 8789 8790 hasNormalColorOptions(attributeCode, attributeId) { 8791 if (!this.optionConfig?.attributes?.[attributeId]?.options?.length) { 8792 return false; 8793 } 8794 if (this.shipRegionZipActive && this.customerRegionCode) { 8795 return false; 8796 } 8797 var colorIds = this.optionConfig.quick_ship_color_ids || []; 8798 var options = this.optionConfig.attributes[attributeId].options; 8799 for (var i = 0; i < options.length; i++) { 8800 var optionId = options[i].id; 8801 var isQuick = colorIds.length 8802 ? colorIds.some(function (id) { return String(id) === String(optionId); }) 8803 : (this.quickShipValidation(attributeCode, attributeId, optionId) === 1); 8804 if (!isQuick) { 8805 if (!this.optionIsEnabled(attributeId, optionId)) { 8806 continue; 8807 } 8808 if (!this.optionIsActive(attributeId, optionId)) { 8809 continue; 8810 } 8811 return true; 8812 } 8813 } 8814 return false; 8815 }, 8816 8817 shouldShowQuickShipSection(attributeCode, attributeId) { 8818 if (this.shipRegionZipActive && this.customerRegionCode) { 8819 return false; 8820 } 8821 return this.hasQuickShipColorOptions(attributeCode, attributeId); 8822 }, 8823 8824 getOtherSwatchAttributeId(section = null) { 8825 const target = section || document.querySelector('.swatch-attribute.other_swatch_option'); 8826 if (!target || !this.optionConfig?.attributes) { 8827 return null; 8828 } 8829 for (const key in this.optionConfig.attributes) { 8830 const code = this.optionConfig.attributes[key]?.code;
8831 if (code && code !== 'incstores_pim_color_axis' && target.classList.contains(code)) { 8832 return parseInt(key, 10); 8833 } 8834 } 8835 for (const key in this.optionConfig.attributes) { 8836 const code = this.optionConfig.attributes[key]?.code; 8837 if (code && code !== 'incstores_pim_color_axis') { 8838 return parseInt(key, 10); 8839 } 8840 } 8841 return null; 8842 }, 8843 8844 /** 8845 * Count salable/enabled options only. Disabled Magento variants stay out of the UI. 8846 * Hide "Select An Option" when fewer than two enabled options remain. 8847 */ 8848 countEnabledOtherSwatchOptions(attrId) { 8849 if (!attrId) { 8850 return 0; 8851 } 8852 const options = this.optionConfig?.attributes?.[attrId]?.options || []; 8853 return options.filter((option) => this.optionIsEnabled(attrId, option.id)).length; 8854 }, 8855 8856 countVisibleOtherSwatchOptions() { 8857 return this.countEnabledOtherSwatchOptions(this.getOtherSwatchAttributeId()); 8858 }, 8859 8860 syncOtherSwatchOptionVisibility() { 8861 const sections = document.querySelectorAll('.swatch-attribute.other_swatch_option'); 8862 if (!sections.length) { 8863 return; 8864 } 8865 const self = this; 8866 const applyVisibility = () => { 8867 sections.forEach((variantSection) => { 8868 const attrId = self.getOtherSwatchAttributeId(variantSection); 8869 if (!attrId) { 8870 return; 8871 } 8872 const optionCount = self.countEnabledOtherSwatchOptions(attrId); 8873 const shouldShow = optionCount > 1; 8874 variantSection.classList.toggle('dcw-single-option-hidden', !shouldShow); 8875 // Theme CSS defaults other_swatch_option to display:none â force block/none. 8876 variantSection.style.setProperty( 8877 'display', 8878 shouldShow ? 'block' : 'none', 8879 'important' 8880 ); 8881 if (!shouldShow && optionCount === 1) { 8882 const options = self.optionConfig?.attributes?.[attrId]?.options || []; 8883 const enabledOption = options.find((option) => self.optionIsEnabled(attrId, option.id)); 8884 const optionId = enabledOption?.id; 8885 if (optionId !== undefined 8886 && String(self.selectedValues[attrId]) !== String(optionId) 8887 && typeof self.changeOption === 'function') { 8888 self.changeOption(attrId, optionId); 8889 } 8890 } 8891 }); 8892 }; 8893 applyVisibility(); 8894 window.setTimeout(applyVisibility, 300); 8895 }, 8896 8897 /** 8898 * After color selection only (including disabled colors): if current variant/option 8899 * is incompatible, auto-select the cheapest compatible one. Never run on variant clicks.
8900 */ 8901 autoSelectCompatibleOtherOption(colorAttrId) { 8902 if (!colorAttrId || !this.optionConfig?.attributes) { 8903 return; 8904 } 8905 const selectedColor = this.selectedValues[colorAttrId]; 8906 if (!selectedColor) { 8907 return; 8908 } 8909 8910 let otherAttrId = null; 8911 if (typeof this.getAttributeIdByCode === 'function') { 8912 otherAttrId = this.getAttributeIdByCode('incstores_pim_variant_axis') 8913 || this.getAttributeIdByCode('product_option'); 8914 } 8915 if (!otherAttrId) { 8916 const section = document.querySelector('.swatch-attribute.other_swatch_option'); 8917 otherAttrId = this.getOtherSwatchAttributeId(section); 8918 } 8919 if (!otherAttrId || !this.optionConfig.attributes[otherAttrId]) { 8920 return; 8921 } 8922 8923 const currentOther = this.selectedValues[otherAttrId]; 8924 const isCurrentCompatible = currentOther 8925 && typeof this.optionIsActive === 'function' 8926 && this.optionIsActive(otherAttrId, currentOther); 8927 8928 if (isCurrentCompatible) { 8929 return; 8930 } 8931 8932 const options = this.optionConfig.attributes[otherAttrId].options || []; 8933 let lowestPrice = null; 8934 let lowestOptionId = null; 8935 8936 options.forEach((option) => { 8937 if (typeof this.optionIsEnabled === 'function' 8938 && !this.optionIsEnabled(otherAttrId, option.id)) { 8939 return; 8940 } 8941 const productIds = option.products || []; 8942 productIds.forEach((productId) => { 8943 const product = this.optionConfig.index[productId] 8944 || this.optionConfig.index[String(productId)]; 8945 if (!product || String(product[colorAttrId]) !== String(selectedColor)) { 8946 return; 8947 } 8948 const priceData = this.optionConfig.optionPrices[productId] 8949 || this.optionConfig.optionPrices[String(productId)]; 8950 if (!priceData) { 8951 return; 8952 } 8953 const price = priceData.finalPrice.amount; 8954 if (lowestPrice === null || price < lowestPrice) { 8955 lowestPrice = price; 8956 lowestOptionId = option.id; 8957 } 8958 }); 8959 }); 8960 8961 if (lowestOptionId === null 8962 || String(this.selectedValues[otherAttrId]) === String(lowestOptionId)) { 8963 return; 8964 } 8965 8966 if (typeof this.changeOption === 'function') { 8967 this.changeOption(otherAttrId, lowestOptionId); 8968 return; 8969 } 8970 8971 const el = document.querySelector( 8972 'input[name="super_attribute[' + otherAttrId + ']"][value="' + lowestOptionId + '"]' 8973 ); 8974 if (el) { 8975 el.click(); 8976 } 8977 }, 8978 8979 /** 8980 * After variant / Select An Option change: if current color is unavailable, 8981 * auto-select the cheapest compatible color. Never run on color clicks. 8982 */ 8983 autoSelectCompatibleColorOption(otherAttrId) { 8984 if (!otherAttrId || !this.optionConfig?.attributes) { 8985 return; 8986 } 8987 const selectedOther = this.selectedValues[otherAttrId]; 8988 if (!selectedOther) { 8989 return; 8990 } 8991 8992 let colorAttrId = null; 8993 if (typeof this.getAttributeIdByCode === 'function') { 8994 colorAttrId = this.getAttributeIdByCode('incstores_pim_color_axis'); 8995 }
8996 if (!colorAttrId && typeof this.getShipRegionColorAttributeId === 'function') { 8997 colorAttrId = this.getShipRegionColorAttributeId(); 8998 } 8999 if (!colorAttrId || !this.optionConfig.attributes[colorAttrId]) { 9000 return; 9001 } 9002 9003 const currentColor = this.selectedValues[colorAttrId]; 9004 const isCurrentCompatible = currentColor 9005 && typeof this.optionIsActive === 'function' 9006 && this.optionIsActive(colorAttrId, currentColor); 9007 9008 if (isCurrentCompatible) { 9009 return; 9010 } 9011 9012 const options = this.optionConfig.attributes[colorAttrId].options || []; 9013 let lowestPrice = null; 9014 let lowestOptionId = null; 9015 9016 options.forEach((option) => { 9017 if (typeof this.optionIsEnabled === 'function' 9018 && !this.optionIsEnabled(colorAttrId, option.id)) { 9019 return; 9020 } 9021 const productIds = option.products || []; 9022 productIds.forEach((productId) => { 9023 const product = this.optionConfig.index[productId] 9024 || this.optionConfig.index[String(productId)]; 9025 if (!product || String(product[otherAttrId]) !== String(selectedOther)) { 9026 return; 9027 } 9028 const priceData = this.optionConfig.optionPrices[productId] 9029 || this.optionConfig.optionPrices[String(productId)]; 9030 if (!priceData) { 9031 return; 9032 } 9033 const price = priceData.finalPrice.amount; 9034 if (lowestPrice === null || price < lowestPrice) { 9035 lowestPrice = price; 9036 lowestOptionId = option.id; 9037 } 9038 }); 9039 }); 9040 9041 if (lowestOptionId === null 9042 || String(this.selectedValues[colorAttrId]) === String(lowestOptionId)) { 9043 return; 9044 } 9045 9046 if (typeof this.changeOption === 'function') { 9047 this.changeOption(colorAttrId, lowestOptionId); 9048 return; 9049 } 9050 9051 const el = document.querySelector( 9052 'input[name="super_attribute[' + colorAttrId + ']"][value="' + lowestOptionId + '"]' 9053 ); 9054 if (el) { 9055 el.click(); 9056 } 9057 }, 9058 9059 syncNormalColorSwatchQuickShipVisibility() { 9060 if (this.shipRegionZipActive && this.customerRegionCode) { 9061 return; 9062 } 9063 if (typeof this.quickShipValidation !== 'function') { 9064 if (typeof this.syncNormalColorSwatchSectionVisibility === 'function') { 9065 this.syncNormalColorSwatchSectionVisibility(); 9066 } 9067 return; 9068 } 9069 const self = this; 9070 document.querySelectorAll('.normal_color_swatch_option .selectOptionColor').forEach(function (el) { 9071 const input = el.querySelector('input.product-option-value-input[name^="super_attribute"]'); 9072 if (!input) { 9073 return; 9074 } 9075 const nameMatch = input.name.match(/super_attribute\[(\d+)\]/); 9076 if (!nameMatch) { 9077 return; 9078 } 9079 const attributeId = parseInt(nameMatch[1], 10); 9080 const optionId = input.value; 9081 const attributeCode = input.getAttribute('data-attributecode') || 'incstores_pim_color_axis'; 9082 if (self.quickShipValidation(attributeCode, attributeId, optionId) === 1) { 9083 el.classList.add('hidden'); 9084 el.style.display = 'none'; 9085 } else { 9086 el.classList.remove('hidden'); 9087 el.style.display = ''; 9088 } 9089 }); 9090 if (typeof this.syncNormalColorSwatchSectionVisibility === 'function') { 9091 this.syncNormalColorSwatchSectionVisibility(); 9092 } 9093 }, 9094 9095 getColorAttributeId() { 9096 if (typeof this.getAttributeIdByCode === 'function') { 9097 const id = this.getAttributeIdByCode('incstores_pim_color_axis'); 9098 return id ? parseInt(String(id), 10) : null; 9099 } 9100 if (!this.optionConfig?.attributes) { 9101 return null; 9102 } 9103 for (const key in this.optionConfig.attributes) { 9104 if (this.optionConfig.attributes[key]?.code === 'incstores_pim_color_axis') { 9105 return parseInt(key, 10); 9106 } 9107 } 9108 return null; 9109 }, 9110 9111 /** 9112 * Hide entire "Select A Color" block when every color is Quick Ship (or none left). 9113 */ 9114 syncNormalColorSwatchSectionVisibility() { 9115 const sections = document.querySelectorAll('.normal_color_swatch_option'); 9116 if (!sections.length) { 9117 return; 9118 } 9119 const colorAttrId = this.getColorAttributeId(); 9120 const shouldShow = colorAttrId 9121 && typeof this.hasNormalColorOptions === 'function' 9122 && this.hasNormalColorOptions('incstores_pim_color_axis', colorAttrId); 9123 9124 sections.forEach((section) => { 9125 if (!shouldShow) { 9126 section.classList.add('hidden'); 9127 section.style.setProperty('display', 'none', 'important'); 9128 } else { 9129 section.classList.remove('hidden', 'sr-only'); 9130 section.style.setProperty('display', 'block', 'important'); 9131 } 9132 }); 9133 } 9134 } 9135 } 9136 9137 function isValidURL(url) { 9138 // Regular expression for URL validation 9139 var pattern = /^(https?:\/\/)?([\w.]+)\.([a-z]{2,})(\/[\w\.-]*)*\/?$/i; 9140 return pattern.test(url); 9141} 9142</script>
vendor: 1 bytes, line 9142
9142
9143<script> 9144 'use strict'; 9145 9146 (function () { 9147 const modals = []; 9148 const excludedFromFocusTrapping = new Set(); 9149 9150 function trapFocusInNextModalWithOverlay() { 9151 for (let idx = modals.length -1; idx >= 0; idx--) { 9152 const nextOnStack = modals[idx]; 9153 const nextDialogElement = nextOnStack.instance.$refs[nextOnStack.name]; 9154 if (! isOverlayDisabled(nextDialogElement)) { 9155 hyva.trapFocus(nextDialogElement); 9156 break; 9157 } 9158 } 9159 } 9160 9161 function focusables(dialogElement) { 9162 const selector = 'button, [href], input, textarea, select, details, [tabindex]:not([tabindex="-1"])'; 9163 return Array.from(dialogElement.querySelectorAll(selector)) 9164 .filter(el => !el.hasAttribute('disabled')); 9165 } 9166 9167 function firstVisible(elements) { 9168 const a = Array.from(elements); 9169 for (let i = 0; i < a.length; i++) { 9170 if (a[i].offsetWidth || a[i].offsetHeight || a[i].getClientRects().length) return a[i]; 9171 } 9172 return null; 9173 } 9174 9175 function isInViewport(element) { 9176 const rect = element && element.getBoundingClientRect(); 9177 return rect && 9178 rect.top >= 0 && 9179 rect.left >= 0 && 9180 rect.right <= window.innerWidth && 9181 rect.bottom <= window.innerHeight; 9182 } 9183 9184 function setFocusAfterTransition(dialogElement, duration) { 9185 const nested = Array.from(dialogElement.querySelectorAll('[role="dialog"]')); 9186 const candidates = Array.from(dialogElement.querySelectorAll('[x-focus-first]')); 9187 next: for (let candidate of candidates) { 9188 for (let child of nested) { 9189 if (child.contains(candidate)) continue next; 9190 } 9191 setTimeout(() => candidate.focus(), 50); 9192 break; 9193 } 9194 window.setTimeout(() => { 9195 const focusElement = firstVisible(dialogElement.querySelectorAll('[x-focus-first]')) || 9196 focusables(dialogElement)[0] || 9197 null; 9198 focusElement && isInViewport(focusElement) && focusElement.focus(); 9199 }, Math.max(1, duration)); 9200 } 9201 9202 function determineTrigger($refs, dialog, trigger) { 9203 if (typeof trigger === 'undefined' && typeof dialog === 'object' && dialog.target instanceof HTMLElement) { 9204 return dialog.target; 9205 } 9206 if (typeof dialog === 'string' && typeof trigger === 'object' && trigger.target instanceof HTMLElement) { 9207 return trigger.target; 9208 } 9209 if (typeof trigger === 'string') { 9210 try { 9211 return $refs[trigger] || document.querySelector(trigger) 9212 } catch (e) {} 9213 } 9214 if (trigger instanceof Element) { 9215 return trigger; 9216 } 9217 9218 return null; 9219 } 9220 9221 function isOverlayDisabled(dialog) { 9222 return dialog && dialog.hasAttribute('x-no-overlay') 9223 } 9224 9225 function areRemainingModalsWithoutOverlay(modals) 9226 { 9227 const overflowDisabled = modals.map(modal => modal.instance.$refs[modal.name]).filter(isOverlayDisabled); 9228 9229 return overflowDisabled.length === modals.length; 9230 } 9231 9232 window.hyva.modal = function(options) { 9233 9234 const config = Object.assign({ 9235 dialog: 'dialog', duration: 300, transitionEnter: 'transition ease-out duration-300', 9236 transitionEnterStart: 'opacity-0', 9237 transitionEnterEnd: 'opacity-100', 9238 transitionLeave: 'transition ease-in duration-300', 9239 transitionLeaveStart: 'opacity-100', 9240 transitionLeaveEnd: 'opacity-0', 9241 }, options); 9242 let lastHide = 0; 9243 9244 return { 9245 opened: {}, 9246 show(dialog, trigger) { 9247 const focusTargetAfterHide = determineTrigger(this.$refs, dialog, trigger); 9248 const name = typeof dialog === 'string' ? dialog : config.dialog; 9249 const dialogElement = this.$refs[name]; 9250 if (! dialogElement) { 9251 return; 9252 } 9253 const useOverlay = ! dialogElement.hasAttribute('x-no-overlay'); 9254 9255 dialogElement.scrollTop = 0; 9256 9257 if (this.opened[name]) { 9258 return; 9259 } 9260 9261 if (focusTargetAfterHide) { 9262 focusTargetAfterHide.setAttribute('aria-expanded', 'true'); 9263 } 9264 9265 this.opened[name] = true; 9266 useOverlay && this.$nextTick(() => hyva.trapFocus(dialogElement)); 9267 setFocusAfterTransition(dialogElement, config.duration); 9268 9269 const frame = {name, instance: this, focusTarget: focu
9269sTargetAfterHide, time: Date.now()}; 9270 9271 modals.push(frame); 9272 if (useOverlay) { 9273 document.body.classList.add('overflow-hidden'); 9274 } 9275 return new Promise(resolve => frame.resolve = resolve); 9276 }, 9277 cancel() { 9278 this.hide(false); 9279 }, 9280 ok() { 9281 this.hide(true); 9282 }, 9283 hide(value) { 9284 if (Date.now() - lastHide < config.duration) { 9285 return; 9286 } 9287 lastHide = Date.now(); 9288 9289 const modal = modals.pop() || {}; 9290 const name = modal.name; 9291 this.opened[name] = false; 9292 hyva.releaseFocus(modal.instance.$refs[modal.name]) 9293 trapFocusInNextModalWithOverlay(); 9294 9295 const nextFocusAfterHide = modal.focusTarget; 9296 nextFocusAfterHide && setTimeout(() => { 9297 nextFocusAfterHide.setAttribute('aria-expanded', 'false'); 9298 nextFocusAfterHide.focus() 9299 }, config.duration); 9300 9301 if (modals.length === 0 || areRemainingModalsWithoutOverlay(modals)) { 9302 document.body.classList.remove('overflow-hidden'); 9303 } 9304 9305 modal.resolve(value); 9306 }, 9307 overlay(dialog) { 9308 const name = typeof dialog === 'string' ? dialog : config.dialog; 9309 return { 9310 ['x-show']() { 9311 return this.opened[name] 9312 }, 9313 ['x-transition:enter']: config.transitionEnter, 9314 ['x-transition:enter-start']: config.transitionEnterStart, 9315 ['x-transition:enter-end']: config.transitionEnterEnd, 9316 ['x-transition:leave']: config.transitionLeave, 9317 ['x-transition:leave-start']: config.transitionLeaveStart, 9318 ['x-transition:leave-end']: config.transitionLeaveEnd, 9319 ['@hyva-modal-show.window'](event) { 9320 event.detail && event.detail.dialog === name && this.show(name, event.detail.focusAfterHide) 9321 } 9322 }; 9323 } 9324 }; 9325 } 9326 9327 window.hyva.modal.peek = () => modals.length > 0 && modals[modals.length -1] 9328 9329 window.hyva.modal.pop = function () { 9330 if (modals.length > 0) { 9331 const modal = modals[modals.length -1]; 9332 modal.instance.hide(); 9333 } 9334 } 9335 9336 window.hyva.modal.excludeSelectorsFromFocusTrap = function (selectors) { 9337 typeof selectors === 'string' || selectors instanceof String 9338 ? excludedFromFocusTrapping.add(selectors) 9339 : selectors.map(selector => excludedFromFocusTrapping.add(selector)); 9340 } 9341 9342 window.hyva.modal.eventListeners = { 9343 keydown: event => { 9344 if (event.key === 'Escape') { 9345 window.hyva.modal.pop(); 9346 } 9347 }, 9348 click: event => { 9349 if (modals.length > 0) { 9350 const modal = modals[modals.length -1]; 9351 const dialog = modal.instance.$refs[modal.name]; 9352 if (modal.time + 50 < Date.now() && // if last click processing is more than 50ms ago 9353 ! isOverlayDisabled(dialog) && // if dialog has overlay 9354 ! dialog.contains(event.target)) { // if click is outside of dialog 9355 modal.instance.hide(); 9356 } 9357 } 9358 } 9359 }; 9360 9361 document.addEventListener('keydown', window.hyva.modal.eventListeners.keydown); 9362 9363 document.addEventListener('click', window.hyva.modal.eventListeners.click); 9364 })(); 9365</script>
vendor: 1 bytes, line 9365
9365
9366<script> 9367 'use strict'; 9368 9369 (() => { 9370 const equalizeButtonWidths = (buttons) => { 9371 const buttonList = buttons.querySelectorAll('[data-element="link"], [data-element="empty_link"]'); 9372 let buttonMinWidth = 0; 9373 9374 buttonList.forEach(button => { 9375 const buttonWidth = button.offsetWidth; 9376 9377 if (buttonWidth > buttonMinWidth) { 9378 buttonMinWidth = buttonWidth; 9379 } 9380 }); 9381 9382 buttonList.forEach(button => { 9383 button.style.minWidth = `${buttonMinWidth}px`; 9384 }); 9385 }; 9386 9387 window.addEventListener('DOMContentLoaded', () => { 9388 document.querySelectorAll('[data-content-type="buttons"][data-same-width="true"]').forEach(buttons => { 9389 equalizeButtonWidths(buttons); 9390 }); 9391 }); 9392 })(); 9393</script>
vendor: 1 bytes, line 9393
9393
9394<script> 9395 'use strict'; 9396 9397 (() => { 9398 const initCarousels = (elements) => { 9399 if (!Glider) { 9400 return; 9401 } 9402 9403 const initProductCarousel = (carousel) => { 9404 const gliderElement = carousel.querySelector('[data-role="glider-content"]'); 9405 9406 if (!gliderElement) { 9407 return; 9408 } 9409 9410 const gliderDots = carousel.querySelector('.glider-dots'); 9411 const gliderPrev = carousel.querySelector('.glider-prev'); 9412 const gliderNext = carousel.querySelector('.glider-next'); 9413 9414 const glider = new Glider(gliderElement, { 9415 slidesToShow: 1.2, 9416 slidesToScroll: 2, 9417 scrollLock: true, 9418 draggable: true, 9419 dragVelocity: 2.5, 9420 dots: gliderDots, 9421 arrows: { 9422 prev: gliderPrev, 9423 next: gliderNext, 9424 }, 9425 responsive: [ 9426 { 9427 breakpoint: 768, 9428 settings: { 9429 slidesToShow: 3, 9430 slidesToScroll: 3, 9431 } 9432 }, 9433 { 9434 breakpoint: 1024, 9435 settings: { 9436 slidesToShow: 4, 9437 slidesToScroll: 4, 9438 } 9439 }, 9440 { 9441 breakpoint: 1200, 9442 settings: { 9443 slidesToShow: 5, 9444 slidesToScroll: 5, 9445 } 9446 } 9447 ], 9448 }); 9449 9450 carousel.classList.remove('overflow-x-scroll'); 9451 gliderPrev.classList.remove('hidden'); 9452 gliderNext.classList.remove('hidden'); 9453 9454 if (carousel.dataset.autoplay !== 'false') { 9455 gliderAutoplay( 9456 glider, 9457 carousel.dataset.autoplaySpeed, 9458 carousel.dataset.infiniteLoop 9459 ); 9460 } 9461 }; 9462 9463 const initSliderCarousel = (slider) => { 9464 slider.innerHTML = `<div data-role="glider-content">${slider.innerHTML}</div>`; 9465 slider.classList.add('glider-contain'); 9466 9467 slider.insertAdjacentHTML( 9468 'beforeend', 9469 '\u000A\u003Cdiv\u0020class\u003D\u0022carousel\u002Dnav\u0020flex\u0020items\u002Dcenter\u0020justify\u002Dcenter\u0020flex\u002D1\u0020p\u002D4\u0022\u003E\u000A\u0020\u0020\u0020\u0020\u003Cbutton\u000A\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020aria\u002Dlabel\u003D\u0022Previous\u0022\u000A\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020class\u003D\u0022glider\u002Dprev\u0020w\u002D8\u0020h\u002D8\u0020mr\u002D1\u0020text\u002Dblack\u0020rounded\u002Dfull\u0020outline\u002Dnone\u0020focus\u003Aoutline\u002Dnone\u0020hidden\u0022\u003E\u000A\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u003Csvg\u0020xmlns\u003D\u0022http\u003A\u002F\u002Fwww.w3.org\u002F2000\u002Fsvg\u0022\u0020fill\u003D\u0022none\u0022\u0020viewBox\u003D\u00220\u00200\u002024\u002024\u0022\u0020stroke\u002Dwidth\u003D\u00222\u0022\u0020stroke\u003D\u0022currentColor\u0022\u0020width\u003D\u002224\u0022\u0020height\u003D\u002224\u0022\u0020role\u
9469003D\u0022img\u0022\u003E\u000A\u0020\u0020\u003Cpath\u0020stroke\u002Dlinecap\u003D\u0022round\u0022\u0020stroke\u002Dlinejoin\u003D\u0022round\u0022\u0020d\u003D\u0022M15\u002019l\u002D7\u002D7\u00207\u002D7\u0022\u002F\u003E\u000A\u003Ctitle\u003Echevron\u002Dleft\u003C\u002Ftitle\u003E\u003C\u002Fsvg\u003E\u000A\u0020\u0020\u0020\u0020\u003C\u002Fbutton\u003E\u000A\u0020\u0020\u0020\u0020\u003Cdiv\u0020role\u003D\u0022navigation\u0022\u0020class\u003D\u0022glider\u002Ddots\u0020select\u002Dnone\u0020flex\u0020flex\u002Dwrap\u0020mx\u002D1\u0020justify\u002Dcenter\u0020p\u002D0\u0020focus\u003Aoutline\u002Dnone\u0022\u003E\u003C\u002Fdiv\u003E\u000A\u0020\u0020\u0020\u0020\u003Cbutton\u000A\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020aria\u002Dlabel\u003D\u0022Next\u0022\u000A\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020class\u003D\u0022glider\u002Dnext\u0020w\u002D8\u0020h\u002D8\u0020ml\u002D1\u0020text\u002Dblack\u0020rounded\u002Dfull\u0020outline\u002Dnone\u0020focus\u003Aoutline\u002Dnone\u0020hidden\u0022\u003E\u000A\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u003Csvg\u0020xmlns\u003D\u0022http\u003A\u002F\u002Fwww.w3.org\u002F2000\u002Fsvg\u0022\u0020fill\u003D\u0022none\u0022\u0020viewBox\u003D\u00220\u00200\u002024\u002024\u0022\u0020stroke\u002Dwidth\u003D\u00222\u0022\u0020stroke\u003D\u0022currentColor\u0022\u0020width\u003D\u002224\u0022\u0020height\u003D\u002224\u0022\u0020role\u
9469003D\u0022img\u0022\u003E\u000A\u0020\u0020\u003Cpath\u0020stroke\u002Dlinecap\u003D\u0022round\u0022\u0020stroke\u002Dlinejoin\u003D\u0022round\u0022\u0020d\u003D\u0022M9\u00205l7\u00207\u002D7\u00207\u0022\u002F\u003E\u000A\u003Ctitle\u003Echevron\u002Dright\u003C\u002Ftitle\u003E\u003C\u002Fsvg\u003E\u000A\u0020\u0020\u0020\u0020\u003C\u002Fbutton\u003E\u000A\u003C\u002Fdiv\u003E\u000A' 9470 ); 9471 9472 const gliderElement = slider.querySelector('[data-role="glider-content"]'); 9473 const gliderDots = slider.querySelector('.glider-dots'); 9474 const gliderPrev = slider.querySelector('.glider-prev'); 9475 const gliderNext = slider.querySelector('.glider-next'); 9476 9477 const glider = new Glider(gliderElement, { 9478 slidesToShow: 1, 9479 slidesToScroll: 1, 9480 scrollLock: true, 9481 scrollLockDelay: 250, 9482 draggable: true, 9483 dragVelocity: 2.5, 9484 dots: gliderDots, 9485 arrows: { 9486 prev: gliderPrev, 9487 next: gliderNext, 9488 }, 9489 }); 9490 9491 slider.classList.add('glider-initialized'); 9492 if (slider.dataset.showArrows === 'true') { 9493 gliderPrev.classList.remove('hidden'); 9494 gliderNext.classList.remove('hidden'); 9495 } 9496 9497 if (slider.dataset.autoplay !== 'false') { 9498 gliderAutoplay( 9499 glider, 9500 slider.dataset.autoplaySpeed, 9501 slider.dataset.infiniteLoop 9502 ); 9503 } 9504 }; 9505 9506 const gliderAutoplay = (glider, milliseconds, loop) => { 9507 const pagesCount = glider.track.childElementCount; 9508 let slideTimeout = null; 9509 let nextIndex = 1; 9510 let paused = false; 9511 9512 const slide = () => { 9513 slideTimeout = setTimeout( 9514 () => { 9515 if (loop && nextIndex >= pagesCount) { 9516 nextIndex = 0; 9517 } 9518 glider.scrollItem(nextIndex); 9519 }, 9520 parseInt(milliseconds) 9521 ); 9522 }; 9523 9524 glider.ele.addEventListener('glider-animated', () => { 9525 nextIndex = glider.slide + glider.opt.slidesToScroll; 9526 window.clearInterval(slideTimeout); 9527 if (!paused && (loop || nextIndex < pagesCount)) { 9528 slide(); 9529 } 9530 }); 9531 9532 const pause = () => { 9533 if (!paused) { 9534 clearInterval(slideTimeout); 9535 paused = true; 9536 } 9537 }; 9538 9539 const unpause = () => { 9540 if (paused) { 9541 slide(); 9542 paused = false; 9543 } 9544 }; 9545 9546 glider.ele.parentElement.addEventListener('mouseover', pause, {passive: true}); 9547 glider.ele.parentElement.addEventListener('touchstart', pause, {passive: true}); 9548 glider.ele.parentElement.addEventListener('mouseout', unpause, {passive: true}); 9549 glider.ele.parentElement.addEventListener('touchend', unpause, {passive: true}); 9550 9551 slide(); 9552 }; 9553 9554 elements.forEach(element => { 9555 if (element.dataset.contentType === 'products') { 9556 initProductCarousel(element); 9557 } 9558 if (element.dataset.contentType === 'slider') { 9559 initSliderCarousel(element); 9560 } 9561 }); 9562 }; 9563 9564 window.addEventListener('DOMContentLoaded', () => { 9565 const carouselElements = document.querySelectorAll( 9566 `[data-content-type="products"][data-appearance="carousel"], 9567 [data-content-type="slider"]` 9568 ); 9569 9570 if (carouselElements.length > 0) { 9571 const script = document.createElement('script'); 9572 script.type = 'text/javascript'; 9573 9574 script.addEventListener('load', () => { 9575 initCarousels(carouselElements); 9576 }); 9577 9578 window.addEventListener('init-external-scripts', () => { 9579 script.src = 'https\u003A\u002F\u002Fwww.flooringinc.com\u002Fstatic\u002Fversion1789462004\u002Ffrontend\u002FDcw\u002Fhyvadesktop\u002Fen_US\u002FMagento_PageBuilder\u002Fjs\u002Fglider.min.js'; 9580 }, {once: true, passive: true}); 9581 document.head.appendChild(script); 9582 } 9583 }); 9584 })(); 9585</script>
vendor: 1 bytes, line 9585
9585
9586<script> 9587 'use strict'; 9588 9589 (() => { 9590 const initMaps = (elements) => { 9591 const renderMap = (element) => { 9592 const dataLocations = element.dataset.locations; 9593 9594 // Hide map if no locations set 9595 if (!dataLocations || dataLocations === '[]') { 9596 element.classList.add('hidden'); 9597 return; 9598 } 9599 9600 const map = new google.maps.Map( 9601 element, 9602 getMapOptions( 9603 element.dataset.showControls !== 'true', 9604 element.dataset.showControls === 'true' 9605 ) 9606 ); 9607 const locations = JSON.parse(dataLocations); 9608 const latitudeLongitudeBounds = new google.maps.LatLngBounds(); 9609 const bounds = []; 9610 9611 locations.forEach(location => { 9612 const position = { 9613 lat: parseFloat(location.position.latitude), 9614 lng: parseFloat(location.position.longitude), 9615 }; 9616 bounds.push(position); 9617 9618 const infowindow = new google.maps.InfoWindow({ 9619 content: getInfoWindowContent(location), 9620 }); 9621 const marker = new google.maps.Marker({ 9622 position: position, 9623 map, 9624 title: location.location_name, 9625 }); 9626 9627 marker.addListener('click', () => { 9628 infowindow.open(map, marker); 9629 }); 9630 }); 9631 9632 // Set bounds if multiple locations 9633 if (bounds.length > 1) { 9634 bounds.forEach(function (bound) { 9635 latitudeLongitudeBounds.extend(bound); 9636 }); 9637 map.fitBounds(latitudeLongitudeBounds); 9638 } 9639 9640 // Center if single location 9641 if (bounds.length === 1) { 9642 map.setCenter(bounds[0]); 9643 } 9644 }; 9645 9646 const getMapOptions = (disableDefaultUI, mapTypeControl) => { 9647 const style = ''; 9648 return { 9649 zoom: 8, 9650 scrollwheel: false, 9651 disableDoubleClickZoom: false, 9652 mapTypeControlOptions: { 9653 style: google.maps.MapTypeControlStyle.DEFAULT, 9654 }, 9655 styles: style ? JSON.parse(style) : [], 9656 disableDefaultUI: disableDefaultUI, 9657 mapTypeControl: mapTypeControl, 9658 }; 9659 }; 9660 9661 const getInfoWindowContent = (location) => { 9662 const title = location.location_name ? 9663 `<h3 class="text-2xl font-medium text-gray-900 title-font">${location.location_name}</h3>` : ''; 9664 const comment = location.comment ? `<p class="px-1 pt-3 text-primary">${location.comment}</p>` : ''; 9665 const phone = location.phone ? `<p class="px-1 pt-3 text-primary">Phone: ${location.phone}</p>` : ''; 9666 const street = location.address ? `${location.address}<br/>` : ''; 9667 const city = location.city ? `${location.city}<br/>` : ''; 9668 const state = location.state ? `${location.state}<br/>` : ''; 9669 const zipCode = location.zipcode ? `${location.zipcode}<br/>` : ''; 9670 const country = location.country ? location.country : ''; 9671 9672 return `<div> 9673 ${title} 9674 ${comment} 9675 ${phone} 9676 <p class="px-1 pt-3 text-primary"> 9677 ${street} 9678 ${city} 9679 ${state} 9680 ${zipCode} 9681 ${country} 9682 </p> 9683 </div>`; 9684 }; 9685 9686 const hideAllMaps = () => { 9687 document.querySelectorAll('[data-content-type="map"]').forEach(element => { 9688 element.classList.add('hidden'); 9689 }); 9690 }; 9691 9692 window.gm_authFailure = () => { 9693 hideAllMaps(); 9694 }; 9695 9696 if (typeof google.maps === 'undefined') { 9697 hideAllMaps(); 9698 return; 9699 } 9700
9701 elements.forEach(element => { 9702 if (element.dataset.contentType === 'map') { 9703 renderMap(element); 9704 } 9705 }); 9706 }; 9707 9708 window.addEventListener('DOMContentLoaded', () => { 9709 const mapElements = document.querySelectorAll('[data-content-type="map"]'); 9710 9711 if (mapElements.length > 0) { 9712 const script = document.createElement('script'); 9713 script.type = 'text/javascript'; 9714 9715 script.addEventListener('load', () => { 9716 initMaps(mapElements); 9717 }); 9718 9719 script.src = 'https\u003A\u002F\u002Fmaps.googleapis.com\u002Fmaps\u002Fapi\u002Fjs\u003Fv\u003D3\u0026key\u003D'; 9720 document.head.appendChild(script); 9721 } 9722 }); 9723 })(); 9724</script>
vendor: 1 bytes, line 9724
9724
9725<script> 9726 'use strict'; 9727 9728 (() => { 9729 const initParallaxImage = (element) => { 9730 if (!window.jarallax) { 9731 return; 9732 } 9733 9734 element.classList.add('jarallax'); 9735 element.dataset.jarallax = ''; 9736 const parallaxSpeed = parseFloat(element.dataset.parallaxSpeed) || 0.5; 9737 const elementStyle = window.getComputedStyle(element); 9738 9739 window.jarallax(element, { 9740 imgPosition: elementStyle.backgroundPosition || '50% 50%', 9741 imgRepeat: elementStyle.backgroundRepeat || 'no-repeat', 9742 imgSize: elementStyle.backgroundSize || 'cover', 9743 speed: parallaxSpeed, 9744 }); 9745 }; 9746 9747 const initVideoBackground = (element) => { 9748 if (!window.jarallax) { 9749 return; 9750 } 9751 9752 let slider = null; 9753 9754 if (element.classList.contains('pagebuilder-slide-wrapper')) { 9755 const viewportElement = document.createElement('div'); 9756 slider = element.closest('[data-content-type=slider]'); 9757 viewportElement.classList.add('jarallax-viewport-element'); 9758 element.dataset.elementInViewport = '.jarallax-viewport-element'; 9759 element.appendChild(viewportElement); 9760 } 9761 9762 element.classList.add('jarallax'); 9763 element.dataset.jarallax = ''; 9764 const parallaxSpeed = parseFloat(element.dataset.parallaxSpeed) || 0.5; 9765 9766 window.jarallax(element, { 9767 imgSrc: element.dataset.videoFallbackSrc, 9768 speed: parallaxSpeed, 9769 videoLoop: element.dataset.videoLoop, 9770 videoPlayOnlyVisible: element.dataset.videoPlayOnlyVisible, 9771 videoLazyLoading: element.dataset.videoLazyLoad, 9772 disableVideo: false, 9773 elementInViewport: element.dataset.elementInViewport && 9774 element.querySelector(element.dataset.elementInViewport), 9775 }); 9776 9777 if (slider) { 9778 if (slider.dataset.afterChangeIsSet) { 9779 return; 9780 } 9781 9782 slider.addEventListener('glider-loaded', () => { 9783 slider.querySelectorAll('.jarallax').forEach(videoSlide => { 9784 videoSlide.jarallax && videoSlide.jarallax.onScroll(); 9785 }); 9786 }); 9787 9788 slider.addEventListener('glider-animated', () => { 9789 slider.querySelectorAll('.jarallax').forEach(videoSlide => { 9790 videoSlide.jarallax && videoSlide.jarallax.onScroll(); 9791 }); 9792 }); 9793 9794 slider.dataset.afterChangeIsSet = true; 9795 } 9796 }; 9797 9798 window.addEventListener('DOMContentLoaded', () => { 9799 const parallaxImageElements = document.querySelectorAll( 9800 `[data-content-type="row"][data-background-type="image"][data-enable-parallax="1"], 9801 [data-content-type="row"] > [data-background-type="image"][data-enable-parallax="1"]` 9802 ); 9803 9804 const videoBackgroundsElements = document.querySelectorAll( 9805 `[data-content-type="row"][data-background-type="video"][data-enable-parallax="1"], 9806 [data-content-type="row"] > [data-background-type="video"][data-enable-parallax="1"], 9807 [data-content-type="banner"] [data-background-type="video"], 9808 [data-content-type="slide"] [data-background-type="video"]` 9809 ); 9810 9811 if (parallaxImageElements.length > 0 || videoBackgroundsElements.length > 0) { 9812 const jarallaxScript = document.createElement('script'); 9813 jarallaxScript.type = 'text/javascript'; 9814 9815 jarallaxScript.addEventListener('load', () => { 9816 parallaxImageElements.forEach(row => { 9817 initParallaxImage(row); 9818 }); 9819 9820 const jarallaxVideoScript = document.createElement('script'); 9821 jarallaxVideoScript.type = 'text/javascript'; 9822 9823 jarallaxVideoScript.addEventListener('load', () => {
9824 videoBackgroundsElements.forEach(element => { 9825 initVideoBackground(element); 9826 }); 9827 }); 9828 9829 jarallaxVideoScript.src = 'https\u003A\u002F\u002Fwww.flooringinc.com\u002Fstatic\u002Fversion1789462004\u002Ffrontend\u002FDcw\u002Fhyvadesktop\u002Fen_US\u002FMagento_PageBuilder\u002Fjs\u002Fjarallax\u002Dvideo.min.js'; 9830 document.head.appendChild(jarallaxVideoScript); 9831 }); 9832 9833 jarallaxScript.src = 'https\u003A\u002F\u002Fwww.flooringinc.com\u002Fstatic\u002Fversion1789462004\u002Ffrontend\u002FDcw\u002Fhyvadesktop\u002Fen_US\u002FMagento_PageBuilder\u002Fjs\u002Fjarallax.min.js'; 9834 document.head.appendChild(jarallaxScript); 9835 } 9836 }); 9837 })(); 9838</script>
vendor: 1 bytes, line 9838
9838
9839<script> 9840 'use strict'; 9841 9842 (() => { 9843 const applyShowOnHover = (element) => { 9844 const showOverlayOnHover = (element) => { 9845 const overlay = element.querySelector('.pagebuilder-overlay'); 9846 const color = overlay.dataset.overlayColor; 9847 9848 element.addEventListener('mouseover', () => { 9849 overlay.style.backgroundColor = color; 9850 }); 9851 element.addEventListener('mouseout', () => { 9852 overlay.style.backgroundColor = 'transparent'; 9853 }); 9854 }; 9855 9856 const showButtonOnHover = (element) => { 9857 const button = element.querySelector('.pagebuilder-banner-button'); 9858 9859 element.addEventListener('mouseover', () => { 9860 button.style.opacity = '1'; 9861 button.style.visibility = 'visible'; 9862 }); 9863 element.addEventListener('mouseout', () => { 9864 button.style.opacity = '0'; 9865 button.style.visibility = 'hidden'; 9866 }); 9867 }; 9868 9869 if (element.dataset.showOverlay === 'hover') { 9870 showOverlayOnHover(element); 9871 } 9872 if (element.dataset.showButton === 'hover') { 9873 showButtonOnHover(element); 9874 } 9875 }; 9876 9877 window.addEventListener('DOMContentLoaded', () => { 9878 document.querySelectorAll('[data-content-type="banner"],[data-content-type="slider"]').forEach(element => { 9879 applyShowOnHover(element); 9880 }); 9881 }); 9882 })(); 9883</script>
vendor: 1 bytes, line 9883
9883
9884<script> 9885 'use strict'; 9886 9887 (() => { 9888 document.querySelectorAll('[data-content-type="tab-item"]').forEach(tabItem => { 9889 tabItem.setAttribute('x-show', `tab === '${tabItem.id}'`); 9890 }); 9891 9892 document.querySelectorAll('[data-content-type="tabs"]').forEach(tab => { 9893 const defaultActiveTab = parseInt(tab.dataset.activeTab) || 0; 9894 9895 tab.querySelectorAll('.tab-header').forEach((tabHeader, index) => { 9896 const tabLink = tabHeader.querySelector('a'); 9897 const tabId = tabLink.getAttribute('href').replace('#', ''); 9898 9899 tabHeader.setAttribute(':class', `{ 'active': tab === '${tabId}' }`); 9900 tabLink.setAttribute('x-on:click.prevent', `tab = '${tabId}'`); 9901 9902 if (index === defaultActiveTab) { 9903 tab.setAttribute('x-data', `{ tab: '${tabId}' }`); 9904 } 9905 }); 9906 }); 9907 })(); 9908</script>
vendor: 1 bytes, line 9908
9908
9909<script> 9910 'use strict'; 9911 9912 const grecaptchaV2LoadCallbacks = []; 9913 9914 function executeRecaptchaLoadCallbacks () { 9915 while (window.grecaptcha && grecaptchaV2LoadCallbacks.length > 0) { 9916 const callback = grecaptchaV2LoadCallbacks.pop(); 9917 typeof callback === 'string' ? window[callback]() : callback(); 9918 } 9919 } 9920 9921 (function() { 9922 const loadRecaptchaScript = (event) => { 9923 9924 if (window.grecaptcha || !event.target.form) { 9925 return; 9926 } 9927 9928 const url = 'https://www.google.com/recaptcha/api.js?onload=executeRecaptchaLoadCallbacks'; 9929 const siteKey = '6LdQFsgqAAAAAFaiT_SQ7C9UmCcxWxpMd6pIMAEO'; 9930 const script = document.createElement('script'); 9931 script.type = 'text/javascript'; 9932 script.src = siteKey ? `${url}&render=${siteKey}` : `${url}&render=explicit`; 9933 script.async = true; 9934 document.head.appendChild(script); 9935 9936 script.addEventListener('load', () => { 9937 Array.from(document.querySelectorAll('button[data-recaptcha-btn]:disabled')).forEach(btn => btn.removeAttribute('disabled')); 9938 }); 9939 } 9940 9941 window.forceLoadRecaptchaScript = (form) => { 9942 loadRecaptchaScript({target: {form: form || 'dummy'}}); 9943 executeRecaptchaLoadCallbacks(); 9944 }; 9945 9946 document.body.addEventListener('input', loadRecaptchaScript, { once: true }); 9947 document.body.addEventListener('focus', loadRecaptchaScript, { once: true }); 9948 9949 }()); 9950 9951</script>
vendor: 1 bytes, line 9951
9951
9952<script> 9953 window.addEventListener("scroll", function() { 9954 var header = document.querySelector('header.page-header'); 9955 var body = document.querySelector("body"); 9956 const header_top = document.querySelector('.header_top'); 9957 const notification4 = document.querySelector('.notification4'); 9958 var top_1 = document.querySelector("header.page-header > .panel.wrapper"); 9959 var content = document.getElementById("textContent"); 9960 9961 9962 if(header_top && notification4){ 9963 if ((header_top.textContent.length > 10) && (notification4.textContent.length > 10)) { 9964 if (window.pageYOffset > 76) { 9965 //document.querySelector("#header").style.cssText = "position:fixed;left:0;top:0;width:100%;transition: all ease-in-out 0.5s"; 9966 //document.querySelector(".page-wrapper").style.cssText = "padding-top:112px"; 9967 document.querySelector('body').classList.add('sticki'); 9968 } else { 9969 //document.querySelector("#header").style.cssText = "position:static;transition: all ease-in-out 0.5s"; 9970 //document.querySelector(".page-wrapper").style.cssText = "padding-top:0px"; 9971 document.querySelector('body').classList.remove('sticki'); 9972 } 9973 } 9974 } 9975 9976 if(header_top && notification4){ 9977 if ((header_top.textContent.length > 10) && (notification4.textContent.length < 10)) { 9978 if (window.pageYOffset > 36) { 9979 //document.querySelector("#header").style.cssText = "position:fixed;left:0;top:0;width:100%;transition: all ease-in-out 0.5s"; 9980 //document.querySelector(".page-wrapper").style.cssText = "padding-top:112px"; 9981 document.querySelector('body').classList.add('sticki'); 9982 } else { 9983 //document.querySelector("#header").style.cssText = "position:static;transition: all ease-in-out 0.5s"; 9984 //document.querySelector(".page-wrapper").style.cssText = "padding-top:0px"; 9985 document.querySelector('body').classList.remove('sticki'); 9986 } 9987 } 9988 } 9989 9990 if(header_top && !notification4){ 9991 if (header_top.textContent.length > 10) { 9992 if (window.pageYOffset > 36) { 9993 //document.querySelector("#header").style.cssText = "position:fixed;left:0;top:0;width:100%;transition: all ease-in-out 0.5s"; 9994 //document.querySelector(".page-wrapper").style.cssText = "padding-top:112px"; 9995 document.querySelector('body').classList.add('sticki'); 9996 } else { 9997 //document.querySelector("#header").style.cssText = "position:static;transition: all ease-in-out 0.5s"; 9998 //document.querySelector(".page-wrapper").style.cssText = "padding-top:0px"; 9999 document.querySelector('body').classList.remove('sticki'); 10000 } 10001 } 10002 } 10003 }); 10004 10005 window.addEventListener("DOMContentLoaded", function() { 10006 window.addEventListener("scroll", function() { 10007 // scroll for plp content sticky 10008 anchor_scroll(); 10009 }); 10010 function anchor_scroll() { 10011 var anchor_scroll = document.querySelector('.anchor-scroll'); 10012 if (!anchor_scroll) { 10013 return; // Exit if the element is not found 10014 } 10015 let sticky = anchor_scroll.offsetTop; 10016 10017 if (window.pageYOffset > sticky) { 10018 anchor_scroll.classList.add("scroll-fixed"); 10019 } else { 10020 anchor_scroll.classList.remove("scroll-fixed"); 10021 } 10022 } 10023 10024 document.querySelectorAll('.anchor-scroll a[href^="."], .at-glance-content a[href^="."]').forEach(anchor => { 10025 anchor.addEventListener('click', function (e) { 10026 e.preventDefault(); 10027 10028 const targetClass = this.getAttribute('href').substring(1); 10029 const targetElement = document.querySelector(`.${targetClass}`); 10030 let anchor_scroll = document.querySelector('.anchor-scroll > div'); 10031 var header_off = document.querySelector('#header').offsetHeight; 10032 if (anchor_scroll) { 10033 var header_off = document.querySelector('#header').offsetHeight + anchor_scroll.offsetHeight; 10034 } else { 10035 var header_off = document.querySelector('#header').offsetHeight; 10036 } 10037 10038 if (targetElement) { 10039 const offset = header_off; 10040 const bodyRect = document.body.getBoundingClientRect().top; 10041 const elementRect = targetElement.getBoundingClientRect().top; 10042 const elementPosition = elementRect - bodyRect; 10043 const offsetPosition = elementPosition - offset; 10044 10045 window.scrollTo({ 10046 top: offsetPosition, 10047 behavior: 'smooth' 10048 }); 10049 } 10050 }); 10051 }); 10052 }); 10053</script>
10053 10054 10055 <section x-cloak x-data="{isLoading: false}" 10056 @amcaptcha-loading-start.window="isLoading = true" @amcaptcha-loading-stop.window="isLoading = false"> 10057 <div class="flex flex-row justify-center items-center w-full h-full fixed select-none z-50" 10058 style="left: 50%;top: 50%;transform: translateX(-50%) translateY(-50%);background: rgba(255,255,255,0.7);" 10059 x-show="isLoading" 10060 x-transition:enter="ease-out duration-200" 10061 x-transition:enter-start="opacity-0" 10062 x-transition:enter-end="opacity-100" 10063 x-transition:leave="ease-in duration-200" 10064 x-transition:leave-start="opacity-100" 10065 x-transition:leave-end="opacity-0"> 10066 <!-- By Sam Herbert (@sherb), for everyone. More @ http://goo.gl/7AJzbL --> 10067<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 57 57" stroke="currentColor" class="text-primary" width="57" height="57" role="img"> 10068 <g fill="none" fill-rule="evenodd"> 10069 <g transform="translate(1 1)" stroke-width="2"> 10070 <circle cx="5" cy="50" r="5"> 10071 <animate attributeName="cy" begin="0s" dur="2.2s" values="50;5;50;50" calcMode="linear" repeatCount="indefinite"/> 10072 <animate attributeName="cx" begin="0s" dur="2.2s" values="5;27;49;5" calcMode="linear" repeatCount="indefinite"/> 10073 </circle> 10074 <circle cx="27" cy="5" r="5"> 10075 <animate attributeName="cy" begin="0s" dur="2.2s" from="5" to="5" values="5;50;50;5" calcMode="linear" repeatCount="indefinite"/> 10076 <animate attributeName="cx" begin="0s" dur="2.2s" from="27" to="27" values="27;49;5;27" calcMode="linear" repeatCount="indefinite"/> 10077 </circle> 10078 <circle cx="49" cy="50" r="5"> 10079 <animate attributeName="cy" begin="0s" dur="2.2s" values="50;50;5;50" calcMode="linear" repeatCount="indefinite"/> 10080 <animate attributeName="cx" from="49" to="49" begin="0s" dur="2.2s" values="49;5;27;49" calcMode="linear" repeatCount="indefinite"/> 10081 </circle> 10082 </g> 10083 </g> 10084<title>loader</title></svg> 10085 <div class="ml-10 text-primary text-xl"> 10086 Loading... </div> 10087</div> 10088 </section> 10089
10090<script> 10091 'use strict'; 10092 10093 function responseSerialize(response) { 10094 if (response.redirected) { 10095 window.location.href = response.url; 10096 } else if (response.ok) { 10097 return response.json(); 10098 } else { 10099 // Check if result is Promise then throw to new Error 10100 let defaultErrMsg = 'Something went wrong. Please contact the website admin for more information.', 10101 result; 10102 result = response.text(); 10103 if (typeof result?.then === 'function') { 10104 result.then(res => { 10105 let errorMessage; 10106 try { 10107 errorMessage = JSON.parse(res); 10108 errorMessage = errorMessage?.message ? errorMessage.message : defaultErrMsg; 10109 } catch (e) { 10110 errorMessage = defaultErrMsg; 10111 } 10112 window.dispatchMessages([ 10113 { 10114 type: 'error', 10115 text: errorMessage 10116 } 10117 ], 3000); 10118 }); 10119 } else { 10120 throw new Error(defaultErrMsg); 10121 } 10122 } 10123 } 10124 10125 if (typeof window.buildRestAPIUrl !== 'function') { 10126 window.buildRestAPIUrl = function (url, params = {}) { 10127 const method = 'rest', 10128 storeCode = 'default', 10129 version = 'V1', 10130 serviceUrl = ':method/:storeCode/:version'; 10131 10132 let urlParts; 10133 10134 params.method = method; 10135 params.storeCode = storeCode; 10136 params.version = version; 10137 10138 url = serviceUrl + url; 10139 10140 urlParts = url.split('/'); 10141 urlParts = urlParts.filter(Boolean); 10142 10143 Object.entries(urlParts).forEach (entry => { 10144 let [key, part] = entry; 10145 part = part.replace(':', ''); 10146 10147 if (params[part] !== undefined) { 10148 urlParts[key] = params[part]; 10149 } 10150 }); 10151 10152 return urlParts.join('/'); 10153 } 10154 } 10155 10156 if (typeof window.isObjectEmpty !== 'function') { 10157 window.isObjectEmpty = function (obj) { 10158 return ( 10159 Object.prototype.toString.call(obj) === '[object Object]' && 10160 JSON.stringify(obj) === '{}' 10161 ); 10162 } 10163 } 10164 10165 if (typeof window.mergeDeep !== 'function') { 10166 /** 10167 * Deep merge two objects. 10168 * 10169 * @param target 10170 * @param sources 10171 * @returns {*} 10172 */ 10173 window.mergeDeep = (target, ...sources) => { 10174 /** 10175 * Simple object check. 10176 * 10177 * @param item 10178 * @returns {boolean} 10179 */ 10180 const isObject = (item) => { 10181 return (item && typeof item === 'object' && !Array.isArray(item)); 10182 }; 10183 10184 if (!sources.length) return target; 10185 const source = sources.shift(); 10186 10187 if (isObject(target) && isObject(source)) { 10188 for (const key in source) { 10189 if (isObject(source[key])) { 10190 if (!target[key]) Object.assign(target, { [key]: {} }); 10191 mergeDeep(target[key], source[key]); 10192 } else { 10193 Object.assign(target, { [key]: source[key] }); 10194 } 10195 } 10196 } 10197 10198 return mergeDeep(target, ...sources); 10199 } 10200 } 10201</script>
10201 10202 10203<div x-data="{...hyva.modal(), ...initAmcartDialogPopup()}" 10204 x-init="initDialogPopup($dispatch)" 10205 x-spread="eventListeners" 10206 x-bind="eventListeners"> 10207 <div x-cloak x-spread="overlay('amcart-dialog-popup')" x-bind="overlay('amcart-dialog-popup')" 10208 class="fixed inset-0 flex items-center justify-center text-left bg-black bg-opacity-50 z-30"> 10209 <div x-ref="amcart-dialog-popup" role="dialog" aria-labelledby="amcart-dialog-popup-content" 10210 class="flex flex-col max-h-screen max-w-4xl overflow-auto bg-amcart-background shadow-xl rounded-lg p-4"> 10211 <div class="flex justify-between pb-4 border-b"> 10212 <div x-text="title" class="text-2xl font-extrabold text-amcart-text"></div> 10213 <button @click="$dispatch('amcart-close-dialog-popup')" 10214 aria-label="Close" 10215 class="text-gray-300 transition hover:text-black hover:drop-shadow-md"> 10216 <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" class="h-6 w-6" width="24" height="24" role="img"> 10217 <path fill-rule="evenodd" d="M4.293 4.293a1 1 0 011.414 0L10 8.586l4.293-4.293a1 1 0 111.414 1.414L11.414 10l4.293 4.293a1 1 0 01-1.414 1.414L10 11.414l-4.293 4.293a1 1 0 01-1.414-1.414L8.586 10 4.293 5.707a1 1 0 010-1.414z" clip-rule="evenodd"/> 10218<title>x</title></svg> 10219 </button> 10220 </div> 10221 <div id="amcart-dialog-popup-content" class="amcart-dialog-popup-content"></div> 10222 <div class="flex flex-row pt-3 border-t"> 10223 <template x-for="(button, index) in buttons" :key="index"> 10224 <button class="btn mr-4 last:mr-0 text-amcart-button hover:brightness-105 hover:shadow-lg" 10225 :class="{ 10226 'bg-amcart-continue-btn hover:bg-amcart-continue-btn': index === 0, 10227 'bg-amcart-view-cart-btn hover:bg-amcart-view-cart-btn': index === 1 10228 }" 10229 :aria-label="button.name" 10230 x-html="button.name" 10231 @click="dispatchButtonAction(button.action.name, button.action.payload)"></button> 10232 </template> 10233 </div> 10234 </div> 10235 </div> 10236</div> 10237
10238<script> 10239 'use strict'; 10240 10241 function initAmcartDialogPopup() { 10242 const dialogPopupName = 'amcart-dialog-popup'; 10243 const selectors = { 10244 addToCartForm: '.amcart-product-info #amcart_product_addtocart_form', 10245 ratingSummarySelector: '.amcart-product-info .rating-summary' 10246 } 10247 10248 return { 10249 eventListeners: { 10250 ['@amcart-open-dialog-popup.window']({detail: popupData}) { 10251 // Close any existing modal before opening 10252 window.hyva.modal.pop(); 10253 10254 this.initPopupWithData(popupData); 10255 this.$nextTick(() => { 10256 this.show(dialogPopupName); 10257 }); 10258 }, 10259 ['@amcart-close-dialog-popup']() { 10260 this.hide(dialogPopupName); 10261 }, 10262 ['@amcart-dialog-submit']({ detail: actionToDispatch }) { 10263 const form = document.querySelector(selectors.addToCartForm); 10264 10265 if (form.checkValidity()) { 10266 this.dispatch(actionToDispatch, form); 10267 this.hide(dialogPopupName); 10268 } else { 10269 form.reportValidity(); 10270 } 10271 }, 10272 ['@amcart-hide-popup']() { 10273 this.hide(dialogPopupName); 10274 } 10275 }, 10276 title: '', 10277 buttons: [], 10278 message: '', 10279 selected_options: null, 10280 dispatch: null, 10281 10282 /** 10283 * @param {Object} $dispatch 10284 * @return {void} 10285 */ 10286 initDialogPopup: function ($dispatch) { 10287 this.dispatch = $dispatch; 10288 }, 10289 10290 /** 10291 * @param {CartResponse} popupData 10292 * @return {void} 10293 */ 10294 initPopupWithData: function (popupData) { 10295 this.title = popupData.title; 10296 this.buttons = popupData.buttons; 10297 this.selected_options = popupData.selected_options; 10298 hyva.replaceDomElement('#amcart-dialog-popup-content', this.preprocessMessage(popupData.message)); 10299 this.$nextTick(() => { 10300 this.postProcessPopupContent(); 10301 }); 10302 }, 10303 10304 /** 10305 * @param {string} message 10306 * @return {string} 10307 */ 10308 preprocessMessage: function (message) { 10309 /** 10310 * Disable labels for input inside popup due to the possibility of their duplication on the page. 10311 * Because this can lead to unexpected behaviour. 10312 * 10313 * Make form id unique for popup 10314 */ 10315 return message 10316 .replaceAll(':for=', 'for-data=') 10317 .replaceAll('product_addtocart_form', 'amcart_product_addtocart_form'); 10318 }, 10319 10320 /** 10321 * @return {void} 10322 */ 10323 postProcessPopupContent: function () { 10324 this.disableRatingSummary(); 10325 this.clickSelectedOptions(); 10326 }, 10327 10328 /** 10329 * @return {void} 10330 */ 10331 disableRatingSummary: function () { 10332 const ratingSummaryElement = document.querySelector(selectors.ratingSummarySelector); 10333 10334 if (!!ratingSummaryElement) { 10335 ratingSummaryElement.removeAttribute('onClick'); 10336 ratingSummaryElement.classList.remove('cursor-pointer'); 10337 } 10338 }, 10339 10340 /** 10341 * @return {void} 10342 */ 10343 clickSelectedOptions: function () { 10344 if (!this.selected_options) { 10345 return; 10346 } 10347 10348 for(const [attributeId, attributeValue] of Object.entries(this.selected_options)) { 10349 const swatchOptionTemplate = document.querySelector( 10350 `.amcart-product-info template[x-for*="attributes[${attributeId}]"]` 10351 ); 10352 10353 if (!!swatchOptionTemplate && !!swatchOptionTemplate.parentElement) { 10354 const swatchInput = swatchOptionTemplate.parentElement 10355 .querySelector(`input[value="${attributeValue}"]`); 10356 swatchInput && swatchInput.click(); 10357 } 10358 } 10359 }, 10360 10361 /** 10362 * @param {string} name 10363 * @param {string|undefined} payload 10364 * @return {void} 10365 */ 10366 dispatchButtonAction: function (name, payload) { 10367 this.dispatch(name, payload); 10368 } 10369 }; 10370 } 10371</script>
10371 10372
10373<script> 10374 (function () { 10375 'use strict'; 10376 10377 const addToCartProductListFormSelector = '.product_addtocart_form'; 10378 const addToCartProductPageFormSelector = '#product_addtocart_form'; 10379 const setFormsEvent = function () { 10380 const productListForms = document.querySelectorAll(addToCartProductListFormSelector); 10381 const productPageForm = document.querySelector(addToCartProductPageFormSelector); 10382 10383 productPageForm && addDispatcher(productPageForm); 10384 productListForms.forEach((form) => { 10385 // disable html5 validation 10386 form.setAttribute('novalidate', ''); 10387 addDispatcher(form); 10388 }); 10389 } 10390 10391 const addDispatcher = function(form) { 10392 form.removeAttribute('@submit'); 10393 form.removeAttribute('@submit.prevent'); 10394 form.setAttribute('x-data', ''); 10395 form.setAttribute('x-on:submit.prevent', '$dispatch(\'amcart-add-to-cart-action\', $el)'); 10396 } 10397 10398 setFormsEvent(); 10399 10400 window.addEventListener('amcart-set-forms-event', setFormsEvent); 10401 })(); 10402</script>
10402 10403
10404<script> 10405 (function () { 10406 'use strict'; 10407 10408 /** 10409 * @typedef {Object} CartResponse 10410 * 10411 * Popup common props 10412 * @property {[ 10413 * name: string, 10414 * action: { 10415 * name: string, 10416 * payload: string|undefined 10417 * } 10418 * ]|undefined} buttons 10419 * @property {string|undefined} popup_action 10420 * @property {string|undefined} message 10421 * @property {string|undefined} title 10422 * 10423 * DialogPopup props 10424 * @property {string|null|undefined} selected_options 10425 * 10426 * ConfirmationPopup props 10427 * @property {string|undefined} align 10428 * @property {string|undefined} checkout 10429 * @property {string|undefined} product_id 10430 * @property {string|undefined} product_sku 10431 * @property {string|undefined} related 10432 * @property {number|undefined} timer 10433 * 10434 * Redirect props 10435 * @property {string|undefined} redirect url to redirect 10436 */ 10437 10438 let globalActionName; 10439 10440 const addToCartAction = ({detail: form}) => { 10441 const isProductForm = form.id === 'product_addtocart_form'; 10442 10443 globalActionName = getCartAction(form); 10444 10445 if (isProductForm) { 10446 window.dispatchEvent(new CustomEvent('amcart-trigger-grouped-form-validate')); 10447 10448 if (form.checkValidity()) { 10449 performRequest(form, isProductForm); 10450 } 10451 } else { 10452 performRequest(form, isProductForm) 10453 } 10454 }; 10455 10456 const performRequest = function (form, isProductForm) { 10457 const cartUrl = `${BASE_URL}amasty_cart/cart/${getCartAction(form)}`; 10458 const isProductPage = document.body.classList.contains('catalog-product-view'); 10459 const headers = { 10460 'content-type': 'application/x-www-form-urlencoded; charset=UTF-8' 10461 }; 10462 const formData = new FormData(form); 10463 formData.set('product_page', isProductPage && isProductForm); 10464 formData.set('last_category_id', hyva.getBrowserStorage().getItem('last_category_id')); 10465 formData.set('form_key', hyva.getFormKey()); 10466 !formData.get('id') && formData.get('item') && formData.set('id', formData.get('item')); 10467 10468 const body = new URLSearchParams(formData); 10469 10470 window.dispatchEvent(new CustomEvent('amcart-loading-start')); 10471 window.dispatchEvent(new CustomEvent('amcart-add-start', { detail: form })); 10472 10473 fetch(cartUrl, {headers: {...headers}, body: body, method: 'POST'}) 10474 .then(response => response.json()) 10475 .then((result) => { 10476 resultActionResolver.resolve(result); 10477 const relatedProductDialog = document.querySelector('.related-product-dialog-wrapper'); 10478 const cartLink = document.getElementById('menu-cart-icon'); 10479 const isRelatedProductForm = form.closest('.related-products-pdp-section'); 10480 if (relatedProductDialog && !isRelatedProductForm) { 10481 setTimeout(() => { 10482 window.dispatchEvent( 10483 new CustomEvent('hyva-modal-show', { detail: { dialog: 'related-product-slider-dialog' } }) 10484 ); 10485 }, 2000); 10486 } else if (cartLink) { 10487 cartLink.click(); 10488 } 10489 }).catch((error) => { 10490 typeof window.dispatchMessages !== "undefined" && window.dispatchMessages( 10491 [{ 10492 type: "error", 10493 text: error 10494 }], 5000 10495 ); 10496 }).finally(() => { 10497 window.dispatchEvent(new CustomEvent('amcart-loading-stop')); 10498 }); 10499 }; 10500 10501 const getCartAction = function(formNode) { 10502 return formNode.action.includes('updateItemOptions') 10503 ? `UpdateItemOptions` 10504 : 'add'; 10505 }; 10506 10507 const resultActionResolver = { 10508 /** 10509 * @param {CartResponse} result 10510 */ 10511 resolve: function (result) { 10512 10513 if(typeof result.is_add_to_cart != "undefined"){ 10514 var msg = result.message; 10515 /*if($($.parseHTML(result.message)).filter(".message.error").text()){ 10516 msg = $($.parseHTML(result.message)).filter(".message.error").text(); 10517 }*/ 10518 10519 var parser = new DOMParser(); 10520 var doc = parser.parseFromString(result.message, 'text/html'); 10521 var errorMsg = doc.querySelector('.message.error') ? doc.querySelector('.message.error').textContent : ''; 10522 10523 if (errorMsg) { 10524 msg = errorMsg; 10525 } 10526 10527 window.dispatchMessages && window.dispatchMessages([{ 10528 type: 'error', 10529 text: msg 10530 }]); 10531 10532 } 10533 switch (true) { 10534 case !!result.popup_action: 10535 var parser = new DOMParser(); 10536 var doc = parser.parseFromString(result.message, 'text/html'); 10537 var errorMsg = doc.querySelector('.message.error') ? doc.querySelector('.message.error').textContent : ''; 10538 if (errorMsg) { 10539 msg = errorMsg; 10540 window.dispatchMessages && window.dispatchMessages([{ 10541 type: 'error', 10542 text: msg 10543 }]); 10544 } else { 10545 window.dispatchEvent(new CustomEvent(result.popup_action, {detail: result})); 10546 window.dispatchEvent(new CustomEvent('reload-customer-section-data')); 10547 10548 if (globalActionName == 'UpdateItemOptions') { 10549 window.location.href = `${BASE_URL}checkout/cart`; 10550 } 10551 } 10552 break; 10553 case !!result.redirect: 10554 window.location.href = result.redirect; 10555 break; 10556 } 10557 } 10558 } 10559 10560 if (document.body.classList.contains('catalog-category-view')) { 10561 hyva.getBrowserStorage().setItem( 10562 'last_category_id', 10563 '' 10564 ); 10565 } 10566 10567 const groupedOptions = document.querySelector('div[x-data^=initGroupedOptions]'); 10568 10569 if (!!groupedOptions) { 10570 groupedOptions.setAttribute('x-on:amcart-trigger-grouped-form-validate.window', 'validateForm()'); 10571 } 10572 10573 window.addEventListener('amcart-add-to-cart-action', addToCartAction); 10574 })(); 10575</script>
10575<script> 10576 (function () { 10577 'use strict'; 10578 10579 const addToQuoteButtonSelector = '.amquote-addto-button:not(.amasty-quote-login):not(.amasty-quote-link)'; 10580 document.querySelectorAll(addToQuoteButtonSelector).forEach((button) => { 10581 if (!button.hasAttribute('x-data')) { 10582 button.setAttribute('x-data', ''); 10583 } 10584 10585 button.removeAttribute('@click.prevent'); 10586 button.setAttribute( 10587 'x-on:click.prevent', 10588 '$dispatch(\'amcart-add-to-quote-action\', $el)'); 10589 }); 10590 })(); 10591</script>
vendor: 1 bytes, line 10591
10591
10592<script> 10593 (function () { 10594 'use strict'; 10595 10596 const addToQuoteAction = ({ detail: element }) => { 10597 const formNode = element.nodeName === 'FORM' 10598 ? element 10599 : element.form ?? element.closest('form'); 10600 10601 window.dispatchEvent(new CustomEvent('amcart-trigger-grouped-form-validate')); 10602 if (!formNode || !formNode.checkValidity()) { 10603 return formNode?.reportValidity(); 10604 } 10605 10606 performRequest(formNode); 10607 } 10608 10609 const performRequest = (formNode) => { 10610 const url = `${BASE_URL}amasty_cart/quote/${getAction(formNode)}`; 10611 const headers = { 10612 'content-type': 'application/x-www-form-urlencoded; charset=UTF-8' 10613 }; 10614 const formData = new FormData(formNode); 10615 const isProductPage = formNode.id === 'product_addtocart_form' 10616 && document.body.classList.contains('catalog-product-view'); 10617 formData.set('product_page', isProductPage); 10618 formData.set('last_category_id', hyva.getBrowserStorage().getItem('last_category_id')); 10619 formData.set('id', formData.get('item')); 10620 10621 window.dispatchEvent(new CustomEvent('amcart-loading-start')); 10622 window.dispatchEvent(new CustomEvent('amcart-add-start', { detail: formNode })); 10623 10624 fetch(url, { headers: { ...headers }, body: new URLSearchParams(formData), method: 'POST' }) 10625 .then(response => response.json()) 10626 .then((result) => { 10627 switch (true) { 10628 case !!result.popup_action: 10629 window.dispatchEvent(new CustomEvent(result.popup_action, { detail: result })); 10630 window.dispatchEvent(new CustomEvent('reload-customer-section-data')); 10631 break; 10632 case !!result.redirect: 10633 window.location.href = result.redirect; 10634 break; 10635 } 10636 }).catch((error) => { 10637 typeof window.dispatchMessages !== "undefined" && window.dispatchMessages( 10638 [{ 10639 type: "error", 10640 text: error 10641 }], 5000 10642 ); 10643 }).finally(() => { 10644 window.dispatchEvent(new CustomEvent('amcart-loading-stop')); 10645 }); 10646 }; 10647 10648 const getAction = (formNode) => { 10649 return (formNode.action.includes('amasty_quote') && formNode.action.includes('updateItemOptions')) 10650 ? 'updateItemOptions' 10651 : 'add'; 10652 }; 10653 10654 window.addEventListener('amcart-add-to-quote-action', addToQuoteAction); 10655 })(); 10656</script>
10656 10657 10658 10659
10659<script> 10660 'use strict'; 10661 10662 (function () { 10663 const initCompareFunctions = ['initCompareOnProductList', 'initCompareOnProductView']; 10664 10665 initCompareFunctions.forEach(compareFunction => { 10666 window[compareFunction] = function () { 10667 return { 10668 addToCompare: function (productId) { 10669 var loader=document.getElementById('loading'); 10670 console.log("11111111"); 10671 loader.style.display='block'; 10672 console.log("Add To compare amasty ajax cart qqqqq"); 10673 const postUrl = BASE_URL + 'catalog/product_compare/add/'; 10674 const headers = { 10675 "content-type": "application/x-www-form-urlencoded; charset=UTF-8", 10676 }; 10677 const body = new URLSearchParams({ 10678 form_key: hyva.getFormKey(), 10679 product: productId, 10680 is_ajax: true 10681 }); 10682 10683 fetch(postUrl, {headers: headers, body: body, method: 'POST'}).then((response) => { 10684 if (response.redirected) { 10685 window.location.href = response.url; 10686 } else if (response.ok) { 10687 window.dispatchEvent(new CustomEvent('reload-customer-section-data')); 10688 } else { 10689 typeof window.dispatchMessages !== "undefined" && window.dispatchMessages( 10690 [{ 10691 type: "warning", 10692 text: "Could not add item to the comparison list." 10693 }], 10694 1000 10695 ); 10696 } 10697 }).catch((error) => { 10698 typeof window.dispatchMessages !== "undefined" && window.dispatchMessages( 10699 [{ 10700 type: 'error', 10701 text: error 10702 }], 10703 1000 10704 ); 10705 }); 10706 } 10707 }; 10708 }; 10709 }); 10710 })(); 10711 </script>
10711 10712 10713 10714 10715 10716 10717<section x-data="{isLoading: false}" x-cloak 10718 @amcart-loading-start.window="isLoading = true" 10719 @amcart-loading-stop.window="isLoading = false"> 10720 <div class="flex flex-row justify-center items-center w-full h-full fixed select-none z-50" 10721 style="left: 50%;top: 50%;transform: translateX(-50%) translateY(-50%);background: rgba(255,255,255,0.7);" 10722 x-show="isLoading" 10723 x-transition:enter="ease-out duration-200" 10724 x-transition:enter-start="opacity-0" 10725 x-transition:enter-end="opacity-100" 10726 x-transition:leave="ease-in duration-200" 10727 x-transition:leave-start="opacity-100" 10728 x-transition:leave-end="opacity-0"> 10729 <!-- By Sam Herbert (@sherb), for everyone. More @ http://goo.gl/7AJzbL --> 10730<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 57 57" stroke="currentColor" class="text-primary" width="57" height="57" role="img"> 10731 <g fill="none" fill-rule="evenodd"> 10732 <g transform="translate(1 1)" stroke-width="2"> 10733 <circle cx="5" cy="50" r="5"> 10734 <animate attributeName="cy" begin="0s" dur="2.2s" values="50;5;50;50" calcMode="linear" repeatCount="indefinite"/> 10735 <animate attributeName="cx" begin="0s" dur="2.2s" values="5;27;49;5" calcMode="linear" repeatCount="indefinite"/> 10736 </circle> 10737 <circle cx="27" cy="5" r="5"> 10738 <animate attributeName="cy" begin="0s" dur="2.2s" from="5" to="5" values="5;50;50;5" calcMode="linear" repeatCount="indefinite"/> 10739 <animate attributeName="cx" begin="0s" dur="2.2s" from="27" to="27" values="27;49;5;27" calcMode="linear" repeatCount="indefinite"/> 10740 </circle> 10741 <circle cx="49" cy="50" r="5"> 10742 <animate attributeName="cy" begin="0s" dur="2.2s" values="50;50;5;50" calcMode="linear" repeatCount="indefinite"/> 10743 <animate attributeName="cx" from="49" to="49" begin="0s" dur="2.2s" values="49;5;27;49" calcMode="linear" repeatCount="indefinite"/> 10744 </circle> 10745 </g> 10746 </g> 10747<title>loader</title></svg> 10748 <div class="ml-10 text-primary text-xl"> 10749 Loading... </div> 10750</div> 10751</section> 10752 10753<div x-data="prDataPrivacyCheckboxDetailModalComponent.create()" 10754 @set-is-show-modal.window="isShowModal = $event.detail" 10755 @keydown.escape="closeModal" 10756> 10757 <div x-ref="pr-data-privacy-checkbox-detail" x-show="isShowModal" x-cloak> 10758 <div class="inset-0 fixed z-50"> 10759 <div class="relative z-10 max-w-3xl sm:my-10 ml-10 sm:mx-auto bg-white p-7 h-full max-h-full sm:h-auto sm:max-h-[90%] flex rounded shadow-md" 10760 x-show="isShowModal" x-transition 10761 > 10762 <span class="absolute top-3 right-3 cursor-pointer hover:text-gray-700 p-1" @click="closeModal"> 10763 <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" width="20" height="20" role="img"> 10764 <path fill-rule="evenodd" d="M4.293 4.293a1 1 0 011.414 0L10 8.586l4.293-4.293a1 1 0 111.414 1.414L11.414 10l4.293 4.293a1 1 0 01-1.414 1.414L10 11.414l-4.293 4.293a1 1 0 01-1.414-1.414L8.586 10 4.293 5.707a1 1 0 010-1.414z" clip-rule="evenodd"/> 10765<title>x</title></svg> 10766 </span> 10767 <template x-if="data.checkbox"> 10768 <div id="prgdpr-consent-checkboxes-modal" class="flex flex-col"> 10769 <div class="modal-header flex flex-col flex-shrink-0 flex-grow-0 mb-5"> 10770 <h2 class="text-xl lg:text-2lx pb-3 mb-1 border-container border-b" x-html="data.checkbox.policy.title"></h2> 10771 <a data-contentid="prgdpr-print-content" 10772 class="ml-auto text-sm text-blue-600 hover:underline" 10773 href="#" 10774 @click.prevent="print()" 10775 > 10776 Print </a> 10777 </div> 10778 <div class="prgdpr-consent-checkboxes-item-content overflow-y-auto mb-5" id="prgdpr-print-content"> 10779 <div class="prose max-w-none" x-html="data.checkbox.policy.content"></div> 10780 </div> 10781 <div class="modal-footer flex-shrink-0 flex-grow-0 pt-5 mt-auto border-container border-t"> 10782 <button type="button" 10783 class="action iagree btn btn-primary" 10784 @click="data.checkbox.checked = data.checkbox.isAlreadyChecked = true;
10784 $dispatch('prgdpr-checkbox-agree', 'checkbox' + data.checkbox.consentId); closeModal();" 10785 > 10786 I agree </button> 10787 </div> 10788 </div> 10789</template> 10790 </div> 10791 10792 <div class="bg-gray-800 opacity-50 absolute inset-0" @click="closeModal"></div> 10793 </div> 10794 </div> 10795</div> 10796
10797<script> 10798 const prDataPrivacyCheckboxDetailModalComponent = { 10799 data: null, 10800 isShowModal: false, 10801 create: function () { 10802 this.data = Alpine.reactive({checkbox: null}); 10803 return this; 10804 }, 10805 setCheckbox: function (checkbox) { 10806 this.data.checkbox = checkbox; 10807 }, 10808 showModal: function () { 10809 this.isShowModal = true; 10810 }, 10811 closeModal() { 10812 this.isShowModal = false; 10813 }, 10814 print: function () { 10815 let printWindow = window.open('', 'Print', 'height=600,width=800'); 10816 printWindow.document.write( 10817 `<html><head><title>${this.data.checkbox.policy.title}</title></head><body>${this.data.checkbox.policy.content}</body></html` 10818 ); 10819 printWindow.document.close(); 10820 printWindow.focus(); 10821 printWindow.print(); 10822 printWindow.onafterprint = function () { 10823 printWindow.close(); 10824 }; 10825 10826 return true; 10827 } 10828 }; 10829</script>
10829 10830
10831<script> 10832 window.addEventListener('load', function () { 10833 magentoStorefrontEvents.context.setPage({ 10834 pageType: "MyAccount" 10835 }); 10836 magentoStorefrontEvents.context.setContext("pageExtended", { 10837 action: "login" 10838 }); 10839 magentoStorefrontEvents.context.setShoppingCart({ 10840 id: 0 }); 10841 }); 10842</script>
vendor: 1 bytes, line 10842
10842
10843<script type="application/ld+json">{"@context":"https:\/\/schema.org","@type":"WebSite","url":"https:\/\/www.flooringinc.com\/","name":"flooringinc","potentialAction":{"@type":"SearchAction","target":"https:\/\/www.flooringinc.com\/catalogsearch\/result\/?q={search_term_string}","query-input":"required name=search_term_string"}}</script>
10843<script type="application/ld+json">{"@context":"https:\/\/schema.org","@type":"Organization","url":"https:\/\/www.flooringinc.com\/","name":"Flooring Inc","logo":" https:\/\/www.flooringinc.com\/media\/logo\/stores\/1\/logo.webp","description":"FlooringInc is your online flooring superstore. We offer wood, laminate, carpet, vinyl, specialty flooring and more.","contactPoint":[{"@type":"ContactPoint","telephone":"(866) 416-6388","contactType":"customer service"}],"address":{"addressCountry":"US","postalCode":"85043","addressRegion":"Arizona","addressLocality":"Phoenix","streetAddress":"2429 S. 51st Ave. Ste 10"},"sameAs":["https:\/\/www.facebook.com\/FlooringInc","https:\/\/www.instagram.com\/flooringinccom\/","https:\/\/www.youtube.com\/user\/flooringincvideos","https:\/\/www.pinterest.com\/flooringinc\/"]}</script>
10843
10843<script defer src="https://www.dwin1.com/94345.js"></script>
10843 10844
10845<script nonce="bDhraW5vaDFjczNyejIwenoxdG1tYm50dzNqb2RqOGY="> 10846 (() => { 10847 const updateSettingBar = () => { 10848 const intervalId = setInterval(() => { 10849 const bar = document.getElementById('pr-cookie-setting-bar'); 10850 if (! bar) { 10851 return; 10852 } 10853 10854 clearInterval(intervalId); 10855 bar.querySelectorAll('input[type="checkbox"], button.action') 10856 .forEach(el => el.disabled = true); 10857 10858 let notification = '\u003Cdiv\u0020class\u003D\u0022pr\u002Dgpc\u002Dnotification\u002Dwrap\u0022\u003E\u000A\u0020\u0020\u0020\u0020\u003Ch2\u003EYour\u0020Opt\u002DOut\u0020Preferences\u0020Honored\u003C\u002Fh2\u003E\u000D\u000A\u003Cp\u003EYour\u0020browser\u0027s\u0020privacy\u0020preference\u0020\u0028GPC\u0029\u0020has\u0020been\u0020detected.\u003C\u002Fp\u003E\u000D\u000A\u003Cp\u0020class\u003D\u0022pr\u002Dgpc\u002Dtext\u002Dwith\u002Dicon\u0022\u003E\u003Cimg\u0020src\u003D\u0022https\u003A\u002F\u002Fwww.flooringinc.com\u002Fstatic\u002Fversion1789462004\u002Ffrontend\u002FDcw\u002Fhyvadesktop\u002Fen_US\u002FPlumrocket_GlobalPrivacyControl\u002Fimages\u002Fcheck_circle.png\u0022\u0020alt\u003D\u0022GPC\u0020Icon\u0022\u0020width\u003D\u002218\u0022\u0020height\u003D\u002218\u0022\u003E\u0020Non\u002Dessential\u0020cookies\u0020have\u0020been\u0020disabled\u0020on\u0020our\u0020website.\u003C\u002Fp\u003E\u000A\u003C\u002Fdiv\u003E'; 10859 bar.querySelector('.pr-cookie-description') 10860 .insertAdjacentHTML('beforebegin', notification); 10861 }, 400); 10862 } 10863 10864 prGlobalPrivacyControlApi.signalHandlers.addHandler(updateSettingBar); 10865 })(); 10866</script>
vendor: 1 bytes, line 10866
10866
10867<script type="application/json" id="default-section-data"> 10868 {"messages":[],"customer":[],"compare-products":[],"last-ordered-items":[],"requisition":[],"cart":[],"directory-data":{"US":{"name":"United States","regions":{"3":{"code":"AL","name":"Alabama"},"6":{"code":"AK","name":"Alaska"},"9":{"code":"AS","name":"American Samoa"},"12":{"code":"AZ","name":"Arizona"},"15":{"code":"AR","name":"Arkansas"},"18":{"code":"AE","name":"Armed Forces Africa"},"21":{"code":"AA","name":"Armed Forces Americas"},"24":{"code":"AE","name":"Armed Forces Canada"},"27":{"code":"AE","name":"Armed Forces Europe"},"30":{"code":"AE","name":"Armed Forces Middle East"},"33":{"code":"AP","name":"Armed Forces Pacific"},"36":{"code":"CA","name":"California"},"39":{"code":"CO","name":"Colorado"},"42":{"code":"CT","name":"Connecticut"},"45":{"code":"DE","name":"Delaware"},"48":{"code":"DC","name":"District of Columbia"},"51":{"code":"FM","name":"Federated States Of Micronesia"},"54":{"code":"FL","name":"Florida"},"57":{"code":"GA","name":"Georgia"},"60":{"code":"GU","name":"Guam"},"63":{"code":"HI","name":"Hawaii"},"66":{"code":"ID","name":"Idaho"},"69":{"code":"IL","name":"Illinois"},"72":{"code":"IN","name":"Indiana"},"75":{"code":"IA","name":"Iowa"},"78":{"code":"KS","name":"Kansas"},"81":{"code":"KY","name":"Kentucky"},"84":{"code":"LA","name":"Louisiana"},"87":{"code":"ME","name":"Maine"},"90":{"code":"MH","name":"Marshall Islands"},"93":{"code":"MD","name":"Maryland"},"96":{"code":"MA","name":"Massachusetts"},"99":{"code":"MI","name":"Michigan"},"102":{"code":"MN","name":"Minnesota"},"105":{"code":"MS","name":"Mississippi"},"108":{"code":"MO","name":"Missouri"},"111":{"code":"MT","name":"Montana"},"114":{"code":"NE","name":"Nebraska"},"117":{"code":"NV","name":"Nevada"},"120":{"code":"NH","name":"New Hampshire"},"123":{"code":"NJ","name":"New Jersey"},"126":{"code":"NM","name":"New Mexico"},"129":{"code":"NY","name":"New York"},"132":{"code":"NC","name":"North Carolina"},"135":{"code":"ND","name":"North Dakota"},"138":{"code":"MP","name":"Northern Mariana Islands"},"141":{"code":"OH","name":"Ohio"},"144":{"code":"OK","name":"Oklahoma"},"147":{"code":"OR","name":"Oregon"},"150":{"code":"PW","name":"Palau"},"153":{"code":"PA","name":"Pennsylvania"},"156":{"code":"PR","name":"Puerto Rico"},"159":{"code":"RI","name":"Rhode Island"},"162":{"code":"SC","name":"South Carolina"},"165":{"code":"SD","name":"South Dakota"},"168":{"code":"TN","name":"Tennessee"},"171":{"code":"TX","name":"Texas"},"174":{"code":"UT","name":"Utah"},"177":{"code":"VT","name":"Vermont"},"180":{"code":"VI","name":"Virgin Islands"},"183":{"code":"VA","name":"Virginia"},"186":{"code":"WA","name":"Washington"},"189":{"code":"WV","name":"West Virginia"},"192":{"code":"WI","name":"Wisconsin"},"195":{"code":"WY","name":"Wyoming"}}},"data_id":1791055646},"captcha":[],"wishlist":{"items":[]},"company":[],"company_authorization":[],"negotiable_quote":[],"instant-purchase":[],"loggedAsCustomer":[],"multiplewishlist":[],"purchase_order":[],"persistent":[],"review":[],"amfacebook-pixel":[],"faq":[],"quotecart":[],"sociallogin":[],"data_privacy":[],"ccpa_data":[],"wp_ga4":[],"recently_viewed_product":[],"recently_compared_product":[],"product_data_storage":[],"paypal-billing-agreement":[]}</script>
10868 10869</div><div x-data="fpcTracking()" x-init="sendRequest()"></div>
10870<script> 10871 function fpcTracking() { 10872 return { 10873 url: 'https://www.flooringinc.com/amasty_fpc/reports/', 10874 sendRequest() { 10875 const ttfb = window.performance.timing.responseStart - window.performance.timing.fetchStart; 10876 fetch(`${this.url}?` + new URLSearchParams({ ttfb }), { 10877 method: 'GET', 10878 headers: { 10879 'Content-Type': 'application/json', 10880 'X-Requested-With': 'XMLHttpRequest', 10881 } 10882 }) 10883 } 10884 } 10885 } 10886</script>
10886 10887<!-- amasty-fpc-status -->
10887<script> 10888 const wpGA4ServerSide = { 10889 pushClick: function(productId, listId, listName, index, elm) { 10890 if (elm && elm.hasAttribute('onclick')) { 10891 var requestUrl = 'https://www.flooringinc.com/weltpixel_ga4/track/productclick/'; 10892 if (productId && listId && listName) { 10893 fetch(requestUrl, { 10894 method: 'POST', 10895 headers: { 10896 'Content-Type': 'application/x-www-form-urlencoded', 10897 'X-Requested-With': 'XMLHttpRequest' 10898 }, 10899 body: 'product_id=' + productId + '&list_id=' + listId +'&list_name=' + listName + '&index=' + index 10900 }) 10901 .then(res => res.json()) 10902 .then(data => { 10903 }); 10904 } 10905 } 10906 }, 10907 10908 pushViewItemList: function(hashId) { 10909 if (hashId && document.getElementById('wp_ga4_server_side_view_item_list')) { 10910 var requestUrl = 'https://www.flooringinc.com/weltpixel_ga4/track/viewitemlist/'; 10911 fetch(requestUrl, { 10912 method: 'POST', 10913 headers: { 10914 'Content-Type': 'application/x-www-form-urlencoded', 10915 'X-Requested-With': 'XMLHttpRequest' 10916 }, 10917 10918 body: 'hash_id='+hashId 10919 }) 10920 .then(res => res.json()) 10921 .then(data => { 10922 }); 10923 } 10924 } 10925 }; 10926 10927 window.wpGA4ServerSide = wpGA4ServerSide; 10928 10929 let allowGa4Services = window.ga4AllowServices ?? true; 10930 10931 if (allowGa4Services) { 10932 const {fetch: originalFetch} = window; 10933 window.fetch = async (...args) => { 10934 let [resource, config] = args; 10935 let response = await originalFetch(resource, config); 10936 10937 if ((typeof resource == 'string') && resource.search('/customer\/section\/load/') > 0) { 10938 response.clone().json().then(data => { 10939 if (data.wp_ga4.datalayer) { 10940 const dataLayerData = JSON.parse(data.wp_ga4.datalayer); 10941 dataLayerData.forEach((dataLayerItem) => { 10942 window.dataLayer.push({ecommerce: null}); 10943 window.dataLayer.push(dataLayerItem); 10944 }); 10945 } 10946 }); 10947 } 10948 return response; 10949 }; 10950 } 10951 10952 </script>
10952 10953
10953<script> 10954 let allowGa4ServicesMeta = window.ga4AllowServices ?? true; 10955 if (allowGa4ServicesMeta) { 10956 const {fetch: originalFetchMeta} = window; 10957 window.fetch = async (...args) => { 10958 let [resource, config] = args; 10959 let response = await originalFetchMeta(resource, config); 10960 10961 if ((typeof resource == 'string') && resource.search('/customer\/section\/load/') > 0) { 10962 response.clone().json().then(data => { 10963 if (data.wp_ga4 && data.wp_ga4.metapixel) { 10964 const metaPixel = JSON.parse(data.wp_ga4.metapixel); 10965 for (index in metaPixel) { 10966 fbq(metaPixel[index].track, metaPixel[index].eventName, metaPixel[index].eventData); 10967 } 10968 } 10969 }); 10970 } 10971 return response; 10972 }; 10973 } 10974 </script>
vendor: 1 bytes, line 10974
10974
10975<script type="text/javascript">window.NREUM||(NREUM={});NREUM.info={"beacon":"bam.nr-data.net","licenseKey":"NRJS-d3390ca2649c82069a5","applicationID":"1112615138","transactionName":"YwMDN0NXChZSVRBZWlpJIABFXwsLHFURQ0FbCwQRHlcHBlxDCkQaWAkGCl8=","queueTime":0,"applicationTime":565,"atts":"T0QAQQtNGRg=","errorBeacon":"bam.nr-data.net","agent":""}</script>
10975</body> 10976</html>
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.