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.322.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.322.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.322.0.min.js"),r.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),(()=>{const e={},t="NRBA-1.322.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-SARROoir04gFygxlr/+mTI+PyMeFL+epi1vnUA2G5mTQ7s3G44ItQBJKbOaIMdIE5OBzuaKhb4k5JYta0NICxg==",249:"sha512-6DKQo5WP7YlpzX6l9UfYkgGLGK2oITdoaYTcZtgl5Foa22NY63lED/0z1hBBLeD7qZCz/YdlY19/r8drlol1tg==",212:"sha512-CYxuvSpDx6ErqWJwAvpoHn54eY37YdMcFao/axOumlw3BsSL7yioOeB2LWViY/Njs818sQG10dSglUhYCMfLPw==",238:"sha512-mvbMILWa3ohYst+u6TLfNrmtY2swUIB3rbJFN/uzt3W62KhgvUVwB81UEZ1R0/it5bfrQ5EVz864pi/CAmucNQ=="};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.322.0.PROD"]=self["webpackChunk:NRBA-1.322.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=(0,ye.ZF)(),a=(0,ye.el)(),o=Date.now(),c={spanId:s,traceId:a,timestamp:o};return(e.sameOrigin||this.isAllowedOrigin(e)&&this.useTraceContextHeadersForCors())&&(c.traceContextParentHeader=this.generateTraceContextParentHeader(s,a),c.traceContextStateHeader=this.generateTraceContextStateHeader(s,o,r,n,i)),(e.sameOrigin&&!this.excludeNewrelicHeader()||!e.sameOrigin&&this.isAllowedOrigin(e)&&this.useNewrelicHeaderForCors())&&(c.newrelicHeader=this.generateTraceHeader(s,a,o,r,n,i)),c}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="Shopping Cart"/> 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>Shopping Cart</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<link rel="stylesheet" type="text/css" media="all" href="https://www.flooringinc.com/static/version1789462004/frontend/Dcw/hyvadesktop/en_US/Amasty_Rules/css/amrules.min.css" />
14<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 14
14
15<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 15
15
16<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 16
16
17<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>
17 18<link rel="icon" type="image/x-icon" href="https://www.flooringinc.com/media/favicon/stores/1/fav.png" /> 19<link rel="shortcut icon" type="image/x-icon" href="https://www.flooringinc.com/media/favicon/stores/1/fav.png" /> 20 21<!-- Plausible Script Start --> 22
23<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 23
23
24<script>window.plausible = window.plausible || function() { (window.plausible.q = window.plausible.q || []).push(arguments) }</script>
24 25 26<!-- Plausible Script Ends --> 27 28<!--My8cKJTuUilt2Vvmb0igB9BsOCrMSS2F--> 29 30<link rel="preconnect" href="https://www.googletagmanager.com" crossorigin> 31<link rel="dns-prefetch" href="https://www.googletagmanager.com"> 32<link rel="preload" href="https://fonts.gstatic.com/s/poppins/v20/pxiEyp8kv8JHgFVrJJfecg.woff2" as="font" type="font/woff2" crossorigin="anonymous"/> 33 34<style> 35.needsclick.kl-teaser-UEa7DA { display:none!important; } 36.bg-white.w-full.max-w-\[580px\].text-center.rounded-lg.shadow-lg { 37 max-width: 580px; 38} 39</style> 40 <style> 41 #dcw-share-cart-restore-overlay { 42 display: none; 43 position: fixed; 44 inset: 0; 45 z-index: 9999; 46 align-items: center; 47 justify-content: center; 48 background: #fff; 49 color: #1f2937; 50 font-size: 1.125rem; 51 line-height: 1.5; 52 text-align: center; 53 padding: 1.5rem; 54 } 55 56 html.dcw-share-cart-restoring #dcw-share-cart-restore-overlay { 57 display: flex; 58 } 59 60 html.dcw-share-cart-restoring { 61 overflow: hidden; 62 } 63</style>
64<script> 65 (function () { 66 var hash = window.location.hash.replace(/^#/, ''); 67 68 if (!hash) { 69 return; 70 } 71 72 var params = new URLSearchParams(hash); 73 var token = (params.get('token') || '').trim(); 74 75 if (!token) { 76 return; 77 } 78 79 document.documentElement.classList.add('dcw-share-cart-restoring'); 80 })(); 81</script>
81 82
83<script nonce="N2Q3enk5eGFoZ3hyejB4MzJxOThhNGsyd2lybnZpbno="> 84 window.getWpGA4Cookie = function(name) { 85 match = document.cookie.match(new RegExp(name + '=([^;]+)')); 86 if (match) return decodeURIComponent(match[1].replace(/\+/g, ' ')) ; 87 }; 88 89 window.ga4AllowServices = false; 90 91 var isCookieRestrictionModeEnabled = 0, 92 currentWebsiteId = 1, 93 cookieRestrictionName = 'user_allowed_save_cookie'; 94 95 if (isCookieRestrictionModeEnabled) { 96 allowedCookies = window.getWpGA4Cookie(cookieRestrictionName); 97 98 if (allowedCookies !== undefined) { 99 allowedWebsites = JSON.parse(allowedCookies); 100 101 if (allowedWebsites[currentWebsiteId] === 1) { 102 window.ga4AllowServices = true; 103 } 104 } 105 } else { 106 window.ga4AllowServices = true; 107 } 108</script>
108 109
109<script nonce="N2Q3enk5eGFoZ3hyejB4MzJxOThhNGsyd2lybnZpbno="> 110 if (window.ga4AllowServices) { 111 window.dataLayer = window.dataLayer || []; 112 var dl4Objects = [{"pageName":"Shopping Cart","pageType":"cart","event":"view_cart","cart_total":0,"total":0,"ecommerce":{"items":[],"value":0,"currency":"USD"}}]; 113 for (var i in dl4Objects) { 114 window.dataLayer.push({ecommerce: null}); 115 window.dataLayer.push(dl4Objects[i]); 116 } 117 var wpGA4Cookies = ['wp_ga4_user_id','wp_ga4_customerGroup']; 118 wpGA4Cookies.map(function (cookieName) { 119 var cookieValue = window.getWpGA4Cookie(cookieName); 120 if (cookieValue) { 121 var dl4Object = {}; 122 dl4Object[cookieName.replace('wp_ga4_', '')] = cookieValue; 123 window.dataLayer.push(dl4Object); 124 } 125 }); 126 } 127 </script>
127 128 129 <!-- Google Tag Manager -->
130<script nonce="N2Q3enk5eGFoZ3hyejB4MzJxOThhNGsyd2lybnZpbno=" > if (window.ga4AllowServices) { 131 132window.addEventListener('init-external-scripts', () => {
vendor: 335 bytes, lines 132-138
132 133 134(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start': 135new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0], 136j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src= 137'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f); 138})(window,document,'script','dataLayer','
138GTM-5XR7MB7
vendor: 7 bytes, lines 138-139
138'); 139
140}, {once: true, passive: true}); 141 142} </script>
142 143<!-- End Google Tag Manager --> 144 145
146<script nonce="N2Q3enk5eGFoZ3hyejB4MzJxOThhNGsyd2lybnZpbno=">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;} 147attributes=Object.assign(this.defaultAttributes,attributes);if(typeof attributes.expires==='number'){attributes.expires=new Date(new Date()*1+attributes.expires*864e+5);} 148attributes.expires=attributes.expires?attributes.expires.toUTCString():'';try{var result=JSON.stringify(value);if(/^[\{\[]/.test(result)){value=result;}}catch(e){} 149value=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;} 150stringifiedAttributes+='; '+attributeName;if(attributes[attributeName]===true){continue;} 151stringifiedAttributes+='='+attributes[attributeName].split(';')[0];} 152return(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;} 153var 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);} 154try{var name=this.converter.write(parts[0]);cookie=this.converter.read(cookie);if(json){try{cookie=JSON.parse(cookie);}catch(e){}} 155jar[name]=cookie;if(key===name){break;}}catch(e){}} 156return key?jar[key]:jar;}}</script>
156 157
158<script nonce="N2Q3enk5eGFoZ3hyejB4MzJxOThhNGsyd2lybnZpbno=">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();} 159document.dispatchEvent(new Event('pr-global-privacy-control-api:configured'));};if(!this.config.canProcessSignal){setConfigurationResult(false);return;} 160if(this.cache.get('isApplicableForUser')){setConfigurationResult(this.cache.get('isApplicableForUser'));return;} 161if(!navigator.globalPrivacyControl){setConfigurationResult(false);return;} 162if(!this.config.isGeotargetingEnabled){this.cache.set('isApplicableForUser',true);setConfigurationResult(true);return;} 163this.geotargeting.isApplicable().then(result=>{this.cache.set('isApplicableForUser',result);setConfigurationResult(result);}).catch(()=>setConfigurationResult(true));},shouldApply:function(){if(!this.isConfigured){return false;} 164return 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} 165this.handlers.push(handler);if(prGlobalPrivacyControlApi.isConfigured&&prGlobalPrivacyControlApi.shouldApply()){handler.callback();handler.executed=true;}},processPendingHandlers:function(){if(!prGlobalPrivacyControlApi.shouldApply()){return;} 166if(!prCookieService.get('pr-gpc-signal-handled')){prCookieService.set('pr-gpc-signal-handled',true,{expires:null});} 167this.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 167
167
168<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>
168 169 170 171
171<script type="text/javascript" nonce="N2Q3enk5eGFoZ3hyejB4MzJxOThhNGsyd2lybnZpbno=">(()=>{let userAllowedCookies=prCookieService.get('user_allowed_save_cookie');if(!userAllowedCookies){return;} 172let customerConsent=prCookieService.get('pr-cookie-consent');if(!customerConsent){return;} 173try{customerConsent=JSON.parse(customerConsent);}catch(error){return;} 174const categoryKey='marketing';if(customerConsent.includes('all')||customerConsent.includes(categoryKey)){return;} 175let intervalId=setInterval(prCookieService.set.bind(prCookieService,'mg_dnt',true,{expires:null}),500);document.addEventListener('pr-cookie-consent-api:configured',()=>{clearInterval(intervalId);});})();</script>
175 176 177<!-- Critical CSS for <lite-youtube> element to avoid CLS: https://web.dev/cls/ --> 178<style> 179 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>
180<script> 181 var BASE_URL = 'https://www.flooringinc.com/'; 182 var THEME_PATH = 'https://www.flooringinc.com/static/version1789462004/frontend/Dcw/hyvadesktop/en_US'; 183 var COOKIE_CONFIG = { 184 "expires": null, 185 "path": "\u002F", 186 "domain": ".www.flooringinc.com", 187 "secure": true, 188 "lifetime": "3600", 189 "cookie_restriction_enabled": false }; 190 var CURRENT_STORE_CODE = 'default'; 191 var CURRENT_WEBSITE_ID = '1'; 192 193 window.hyva = window.hyva || {} 194 195 window.cookie_consent_groups = window.cookie_consent_groups || {} 196 window.cookie_consent_groups['necessary'] = true; 197 198 window.cookie_consent_config = window.cookie_consent_config || {}; 199 window.cookie_consent_config['necessary'] = [].concat( 200 window.cookie_consent_config['necessary'] || [], 201 [ 202 'user_allowed_save_cookie', 203 'form_key', 204 'mage-messages', 205 'private_content_version', 206 'mage-cache-sessid', 207 'last_visited_store', 208 'section_data_ids' 209 ] 210 ); 211</script>
vendor: 1 bytes, line 211
211
212<script> 213 'use strict'; 214 (function( hyva, undefined ) { 215 216 function lifetimeToExpires(options, defaults) { 217 218 const lifetime = options.lifetime || defaults.lifetime; 219 220 if (lifetime) { 221 const date = new Date; 222 date.setTime(date.getTime() + lifetime * 1000); 223 return date; 224 } 225 226 return null; 227 } 228 229 function generateRandomString() { 230 231 const allowedCharacters = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ', 232 length = 16; 233 234 let formKey = '', 235 charactersLength = allowedCharacters.length; 236 237 for (let i = 0; i < length; i++) { 238 formKey += allowedCharacters[Math.round(Math.random() * (charactersLength - 1))] 239 } 240 241 return formKey; 242 } 243 244 const sessionCookieMarker = {noLifetime: true} 245 246 const cookieTempStorage = {}; 247 248 const internalCookie = { 249 get(name) { 250 const v = document.cookie.match('(^|;) ?' + name + '=([^;]*)(;|$)'); 251 return v ? v[2] : null; 252 }, 253 set(name, value, days, skipSetDomain) { 254 let expires, 255 path, 256 domain, 257 secure, 258 samesite; 259 260 const defaultCookieConfig = { 261 expires: null, 262 path: '/', 263 domain: null, 264 secure: false, 265 lifetime: null, 266 samesite: 'lax' 267 }; 268 269 const cookieConfig = window.COOKIE_CONFIG || {}; 270 271 expires = days && days !== sessionCookieMarker 272 ? lifetimeToExpires({lifetime: 24 * 60 * 60 * days, expires: null}, defaultCookieConfig) 273 : lifetimeToExpires(window.COOKIE_CONFIG, defaultCookieConfig) || defaultCookieConfig.expires; 274 275 path = cookieConfig.path || defaultCookieConfig.path; 276 domain = !skipSetDomain && (cookieConfig.domain || defaultCookieConfig.domain); 277 secure = cookieConfig.secure || defaultCookieConfig.secure; 278 samesite = cookieConfig.samesite || defaultCookieConfig.samesite; 279 280 document.cookie = name + "=" + encodeURIComponent(value) + 281 (expires && days !== sessionCookieMarker ? '; expires=' + expires.toGMTString() : '') + 282 (path ? '; path=' + path : '') + 283 (domain ? '; domain=' + domain : '') + 284 (secure ? '; secure' : '') + 285 (samesite ? '; samesite=' + samesite : 'lax'); 286 }, 287 isWebsiteAllowedToSaveCookie() { 288 const allowedCookies = this.get('user_allowed_save_cookie'); 289 if (allowedCookies) { 290 const allowedWebsites = JSON.parse(unescape(allowedCookies)); 291 292 return allowedWebsites[CURRENT_WEBSITE_ID] === 1; 293 } 294 return false; 295 }, 296 getGroupByCookieName(name) { 297 const cookieConsentConfig = window.cookie_consent_config || {}; 298 let group = null; 299 for (let prop in cookieConsentConfig) { 300 if (!cookieConsentConfig.hasOwnProperty(prop)) continue; 301 if (cookieConsentConfig[prop].includes(name)) { 302 group = prop; 303 break; 304 } 305 } 306 return group; 307 }, 308 isCookieAllowed(name) { 309 const cookieGroup = this.getGroupByCookieName(name); 310 return cookieGroup 311 ? window.cookie_consent_groups[cookieGroup] 312 : this.isWebsiteAllowedToSaveCookie(); 313 }, 314 saveTempStorageCookies() { 315 for (const [name, data] of Object.entries(cookieTempStorage)) { 316 if (this.isCookieAllowed(name)) { 317 this.set(name, data['value'], data['days'], data['skipSetDomain']); 318 delete cookieTempStorage[name]; 319 } 320 } 321 } 322 }; 323 324 hyva.getCookie = (name) => { 325 const cookieConfig = window.COOKIE_CONFIG || {}; 326 327 if (cookieConfig.cookie_restriction_enabled && ! internalCookie.isCookieAllowed(name)) { 328 return cookieTempStorage[name] ? cookieTempStorage[name]['value'] : null; 329 } 330 331 return internalCookie.get(name); 332 } 333 334 hyva.setCookie = (name, value, days, skipSetDomain) => { 335 const cookieConfig = window.COOKIE_CONFIG || {}; 336 337 if (cookieConfig.cookie_restriction_enabled && ! internalCookie.isCookieAllowed(name)) { 338 cookieTempStorage[name] = {value, days, skipSetDomain}; 339 return; 340 } 341 return internalCookie.set(name, value, days, skipSetDomain); 342 } 343 344 345 hyva.setSessionCookie = (name, value, skipSetDomain) => { 346 return hyva.setCookie(name, value, sessionCookieMarker, skipSetDomain) 347 } 348 349 hyva.getBrowserStorage = () => { 350 const browserStorage = window.localStorage || window.sessionStorage; 351 if (!browserStorage) { 352 console.warn('Browser Storage is unavailable'); 353 return false;
354 } 355 try { 356 browserStorage.setItem('storage_test', '1'); 357 browserStorage.removeItem('storage_test'); 358 } catch (error) { 359 console.warn('Browser Storage is not accessible', error); 360 return false; 361 } 362 return browserStorage; 363 } 364 365 hyva.postForm = (postParams) => { 366 const form = document.createElement("form"); 367 368 let data = postParams.data; 369 370 if (! postParams.skipUenc && ! data.uenc) { 371 data.uenc = btoa(window.location.href); 372 } 373 form.method = "POST"; 374 form.action = postParams.action; 375 376 Object.keys(postParams.data).map(key => { 377 const field = document.createElement("input"); 378 field.type = 'hidden' 379 field.value = postParams.data[key]; 380 field.name = key; 381 form.appendChild(field); 382 }); 383 384 const form_key = document.createElement("input"); 385 form_key.type = 'hidden'; 386 form_key.value = hyva.getFormKey(); 387 form_key.name="form_key"; 388 form.appendChild(form_key); 389 390 document.body.appendChild(form); 391 392 form.submit(); 393 } 394 395 hyva.getFormKey = function () { 396 let formKey = hyva.getCookie('form_key'); 397 398 if (!formKey) { 399 formKey = generateRandomString(); 400 hyva.setCookie('form_key', formKey); 401 } 402 403 return formKey; 404 } 405 406 hyva.formatPrice = (value, showSign, options = {}) => { 407 const formatter = new Intl.NumberFormat( 408 'en\u002DUS', 409 Object.assign({ 410 style: 'currency', 411 currency: 'USD', 412 signDisplay: showSign ? 'always' : 'auto' 413 }, options) 414 ); 415 return (typeof Intl.NumberFormat.prototype.formatToParts === 'function') ? 416 formatter.formatToParts(value).map(({type, value}) => { 417 switch (type) { 418 case 'currency': 419 return '\u0024' || value; 420 case 'minusSign': 421 return '- '; 422 case 'plusSign': 423 return '+ '; 424 default : 425 return value; 426 } 427 }).reduce((string, part) => string + part) : 428 formatter.format(value); 429 } 430 431 const formatStr = function (str, nStart) { 432 const args = Array.from(arguments).slice(2); 433 434 return str.replace(/(%+)([0-9]+)/g, (m, p, n) => { 435 const idx = parseInt(n) - nStart; 436 437 if (args[idx] === null || args[idx] === void 0) { 438 return m; 439 } 440 return p.length % 2 441 ? p.slice(0, -1).replace('%%', '%') + args[idx] 442 : p.replace('%%', '%') + n; 443 }) 444 } 445 446 hyva.str = function (string) { 447 const args = Array.from(arguments); 448 args.splice(1, 0, 1); 449 450 return formatStr.apply(undefined, args); 451 } 452 453 hyva.strf = function () { 454 const args = Array.from(arguments); 455 args.splice(1, 0, 0); 456 457 return formatStr.apply(undefined, args); 458 } 459 460 /** 461 * Take a html string as `content` parameter and 462 * extract an element from the DOM to replace in 463 * the current page under the same selector, 464 * defined by `targetSelector` 465 */ 466 hyva.replaceDomElement = (targetSelector, content) => { 467 // Parse the content and extract the DOM node using the `targetSelector` 468 const parser = new DOMParser(); 469 const doc = parser.parseFromString(content, 'text/html'); 470 const contentNode = doc.querySelector(targetSelector); 471 472 // Bail if content can't be found 473 if (!contentNode) { 474 return; 475 } 476 477 hyva.activateScripts(contentNode) 478 479 // Replace the old DOM node with the new content
480 document.querySelector(targetSelector).replaceWith(contentNode); 481 482 // Reload customerSectionData and display cookie-messages if present 483 window.dispatchEvent(new CustomEvent("reload-customer-section-data")); 484 hyva.initMessages(); 485 } 486 487 hyva.activateScripts = (contentNode) => { 488 // Extract all the script tags from the content. 489 // Script tags won't execute when inserted into a dom-element directly, 490 // therefore we need to inject them to the head of the document. 491 const tmpScripts = contentNode.getElementsByTagName('script'); 492 493 if (tmpScripts.length > 0) { 494 // Push all script tags into an array 495 // (to prevent dom manipulation while iterating over dom nodes) 496 const scripts = []; 497 for (let i = 0; i < tmpScripts.length; i++) { 498 scripts.push(tmpScripts[i]); 499 } 500 501 // Iterate over all script tags and duplicate+inject each into the head 502 for (let i = 0; i < scripts.length; i++) { 503 let script = document.createElement('script'); 504 script.innerHTML = scripts[i].innerHTML; 505 506 document.head.appendChild(script); 507 508 // Remove the original (non-executing) node from the content 509 scripts[i].parentNode.removeChild(scripts[i]); 510 } 511 } 512 return contentNode; 513 } 514 515 const replace = {['+']: '-', ['/']: '_', ['=']: ','}; 516 hyva.getUenc = () => btoa(window.location.href).replace(/[+/=]/g, match => replace[match]); 517 518 let currentTrap; 519 520 const focusableElements = (rootElement) => { 521 const selector = 'button, [href], input, select, textarea, details, [tabindex]:not([tabindex="-1"]'; 522 return Array.from(rootElement.querySelectorAll(selector)) 523 .filter(el => { 524 return el.style.display !== 'none' 525 && !el.disabled 526 && el.tabIndex !== -1 527 && (el.offsetWidth || el.offsetHeight || el.getClientRects().length) 528 }) 529 } 530 531 const focusTrap = (e) => { 532 const isTabPressed = e.key === 'Tab' || e.keyCode === 9; 533 if (!isTabPressed) return; 534 535 const focusable = focusableElements(currentTrap) 536 const firstFocusableElement = focusable[0] 537 const lastFocusableElement = focusable[focusable.length - 1] 538 539 e.shiftKey 540 ? document.activeElement === firstFocusableElement && (lastFocusableElement.focus(), e.preventDefault()) 541 : document.activeElement === lastFocusableElement && (firstFocusableElement.focus(), e.preventDefault()) 542 }; 543 544 hyva.releaseFocus = (rootElement) => { 545 if (currentTrap && (!rootElement || rootElement === currentTrap)) { 546 currentTrap.removeEventListener('keydown', focusTrap) 547 currentTrap = null 548 } 549 } 550 hyva.trapFocus = (rootElement) => { 551 if (!rootElement) return; 552 hyva.releaseFocus() 553 currentTrap = rootElement 554 rootElement.addEventListener('keydown', focusTrap) 555 const firstElement = focusableElements(rootElement)[0] 556 firstElement && firstElement.focus() 557 } 558 559 hyva.alpineInitialized = (fn) => window.addEventListener('alpine:initialized', fn, {once: true}) 560 window.addEventListener('user-allowed-save-cookie', () => internalCookie.saveTempStorageCookies()) 561 562 }( window.hyva = window.hyva || {} )); 563</script>
vendor: 1 bytes, line 563
563
564<script> 565 if (!window.IntersectionObserver) { 566 window.IntersectionObserver = function (callback) { 567 this.observe = el => el && callback(this.takeRecords()); 568 this.takeRecords = () => [{isIntersecting: true, intersectionRatio: 1}]; 569 this.disconnect = () => {}; 570 this.unobserve = () => {}; 571 } 572 } 573</script>
573 574<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>
575<script> 576// Lightweight click handler: if Zendesk is already available, open messenger and hide the button. 577// If Zendesk is not available yet we do nothing here â the DOMContentLoaded handler below is 578// responsible for loading the script (avoids double-loading the Zendesk snippet). 579(function () { 580 const btn = document.getElementById('open-chatbox'); 581 if (!btn) return; 582 583 btn.addEventListener('click', function () { 584 if (typeof zE !== 'undefined') { 585 try { 586 zE('messenger', 'open'); 587 } catch (e) { 588 // ignore if API is not ready yet 589 } 590 this.style.display = 'none'; 591 this.setAttribute('aria-hidden', 'true'); 592 } 593 // If zE is not defined we intentionally don't load the script here to avoid 594 // duplicate loading. The DOMContentLoaded listener below will handle loading. 595 }); 596})(); 597</script>
vendor: 2 bytes, line 597
597
598<script> 599/* ===== Load UserWay on click ===== */ 600document.addEventListener('DOMContentLoaded', function () { 601 602 const userWayButton = document.getElementById('uw-widget-custom-trigger'); 603 const zendeskButton = document.getElementById('open-chatbox'); 604 605 /* ---- UserWay Script Functions ---- */ 606 function initUserWay() { 607 if (window.UserWay) { 608 window.UserWay.widgetToggle(); 609 return; 610 } 611 } 612 613 function loadUserWay() { 614 if (window.UserWay) return; // Skip if already loaded 615 616 const userwayScript = document.createElement('script'); 617 userwayScript.src = 'https://cdn.userway.org/widget.js'; 618 userwayScript.type = 'text/javascript'; 619 userwayScript.async = true; 620 userwayScript.crossOrigin = 'anonymous'; 621 userwayScript.setAttribute('data-account', 'vfvO52o2Kn'); 622 document.head.append(userwayScript); 623 624 /* Hide UserWay accessibility icon when initialized */ 625 document.addEventListener('userway:init_completed', function (event) { 626 const instance = event.detail.userWayInstance; 627 instance.iconVisibilityOff(); 628 629 const userwayIframe = document.getElementById("launcher"); 630 if (userwayIframe) { 631 const userwaySiblings = Array.from(userwayIframe.parentNode.children); 632 const userwaySiblingDiv = userwaySiblings.find(el => el.tagName === 'DIV'); 633 if (userwaySiblingDiv) { 634 userwaySiblingDiv.id = 'userway-live-chat'; 635 } 636 } 637 }, { once: true }); 638 } 639 640 if (userWayButton) { 641 userWayButton.addEventListener('click', initUserWay); 642 } 643 644 /* ---- Load UserWay on Scroll ---- */ 645 let hasLoaded = false; 646 function handleScroll() { 647 if (!hasLoaded) { 648 hasLoaded = true; 649 loadUserWay(); 650 // Remove scroll listener after loading 651 window.removeEventListener('scroll', handleScroll); 652 } 653 } 654 655 window.addEventListener('scroll', handleScroll); 656 657 /* ---- Load Zendesk Script ---- */ 658 function hideChatButton() { 659 try { 660 if (zendeskButton) { 661 zendeskButton.style.display = 'none'; 662 zendeskButton.setAttribute('aria-hidden', 'true'); 663 } 664 } catch (e) { 665 // ignore 666 } 667 } 668 669 function loadZendesk() { 670 // If already loaded, open messenger and hide the button 671 if (window.zE) { 672 try { zE('messenger', 'open'); } catch (e) { } 673 hideChatButton(); 674 return; 675 } 676 677 // If script is already injected, do nothing (we'll open on load) 678 if (document.getElementById('ze-snippet')) return; 679 680 const zendeskScript = document.createElement('script'); 681 zendeskScript.id = 'ze-snippet'; 682 zendeskScript.src = 'https://static.zdassets.com/ekr/snippet.js?key=f007eb69-6b5d-407a-bdff-0706af960a4d'; 683 684 zendeskScript.onload = function () { 685 // Wait a short moment to ensure widget initializes 686 setTimeout(() => { 687 if (typeof zE !== 'undefined') { 688 try { zE('messenger', 'open'); } catch (e) { } 689 hideChatButton(); 690 } 691 }, 300); 692 }; 693 694 document.head.append(zendeskScript); 695 } 696 697 if (zendeskButton) { 698 zendeskButton.addEventListener('click', loadZendesk); 699 } 700 701}); 702</script>
702 703 704<style> 705.checkout-index-index button#open-chatbox{display:none} 706.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>');} 707</style></div>
708<script> 709 window.addEventListener('load', function () { 710 window.magentoStorefrontEvents = magentoStorefrontEvents; 711 magentoStorefrontEvents.context.setStorefrontInstance( 712 {"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"} ); 713 magentoStorefrontEvents.context.setMagentoExtension({ 714 magentoExtensionVersion: "8.0.1", 715 }); 716 magentoStorefrontEvents.context.setDataServicesExtension({ 717 version: "8.0.1", 718 }); 719 magentoStorefrontEvents.context.setPage({ 720 pageType: "Default" 721 }); 722 magentoStorefrontEvents.context.setContext("pageExtended", { 723 action: "page-view" 724 }); 725 726 727 magentoStorefrontEvents.publish.pageView(); 728 }); 729</script>
729 730</head> 731<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 checkout-cart-index page-layout-1column" id="html-body"> 732<div id="dcw-share-cart-restore-overlay" aria-live="polite" aria-busy="true"> 733 <p>Loading your shared cart...</p> 734</div> 735<form id="dcw-share-cart-restore-form" 736 method="post" 737 action="https://www.flooringinc.com/sharecart/cart/apply/" 738 style="display: none;"> 739 <input type="hidden" name="form_key" value="tGAOudjzgYs06SIA"> 740 <input type="hidden" name="share_cart_apply" value="1"> 741 <input type="hidden" name="token" value=""> 742</form>
743<script> 744 (function () { 745 if (!document.documentElement.classList.contains('dcw-share-cart-restoring')) { 746 return; 747 } 748 749 var hash = window.location.hash.replace(/^#/, ''); 750 var params = new URLSearchParams(hash); 751 var token = (params.get('token') || '').trim(); 752 var form = document.getElementById('dcw-share-cart-restore-form'); 753 754 if (!token || !form) { 755 document.documentElement.classList.remove('dcw-share-cart-restoring'); 756 return; 757 } 758 759 form.querySelector('[name="token"]').value = token; 760 form.submit(); 761 })(); 762</script>
762 763<!-- Google Tag Manager (noscript) -->
vendor: 69 bytes, lines 763-764
763 764<noscript><iframe src="https://www.googletagmanager.com/ns.html?id=
764GTM-5XR7MB7
vendor: 85 bytes, lines 764-765
764" 765height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
766<!-- End Google Tag Manager (noscript) --> 767
768<script nonce="N2Q3enk5eGFoZ3hyejB4MzJxOThhNGsyd2lybnZpbno="> 769var prCookieConsentApi = { 770 CUSTOMER_CONSENT: 'pr-cookie-consent', 771 SYSTEM_COOKIES: [ 772 'PHPSESSID', 773 this.CUSTOMER_CONSENT, 774 'user_allowed_save_cookie', 775 ], 776 config: {}, 777 whitelist: {}, 778 isConfigured: false, 779 /** 780 * Contains callbacks that run after all configuration come 781 * 782 * @type {function[]} 783 */ 784 configuredCallbacks: [], 785 initCookieBlocking: function () { 786 var cookieDesc = Object.getOwnPropertyDescriptor(Document.prototype, 'cookie') 787 || Object.getOwnPropertyDescriptor(HTMLDocument.prototype, 'cookie'); 788 if (cookieDesc && cookieDesc.configurable) { 789 var api = this; 790 Object.defineProperty(document, 'cookie', { 791 get: function () { 792 return cookieDesc.get.call(document); 793 }, 794 set: function (cookie) { 795 let cookieName = cookie.substring(0, cookie.indexOf('=')).trim(); 796 document.dispatchEvent(new CustomEvent('pr-cookie-consent-api:cookie-blocking:validation', { 797 detail: {cookieName: cookieName, isAllowed: api.isAllowed(cookieName), cookie: cookie} 798 })); 799 800 if (! api.isAllowed(cookieName)) { 801 api.logger.warn('CookieConsent: blocked cookie "' + cookieName + '"'); 802 return; 803 } 804 cookieDesc.set.call(document, cookie); 805 } 806 }); 807 } 808 }, 809 getCookieValue: function (name) { 810 var values = document.cookie.match('(^|;)\\s*' + name + '\\s*=\\s*([^;]+)'); 811 return values ? decodeURIComponent(values.pop()) : ''; 812 }, 813 configure: function (configJson) { 814 this.logger.init(); 815 this.userScript.init(); 816 try { 817 this.config = JSON.parse(configJson); 818 if (this.config.canManageCookie === null) { 819 console.error('CookieConsent: restriction config is invalid'); 820 } 821 this.isConfigured = true; 822 823 this.configuredCallbacks.forEach(function (callback) { 824 callback(); 825 }.bind(this)); 826 827 this.clearRejectedCookie(); 828 } catch (e) { 829 console.error('CookieConsent: error has happened during parse JSON'); 830 return false; 831 } 832 833 document.dispatchEvent(new Event('pr-cookie-consent-api:configured')); 834 }, 835 /** 836 * @param {function} callback 837 * @returns {prCookieConsentApi} 838 */ 839 addConfiguredCallback: function (callback) { 840 this.configuredCallbacks.push(callback); 841 return this; 842 }, 843 isAllowedCategory: function (categoryKey) { 844 if (! this.config.canManageCookie) { 845 return true; 846 } 847 if (this.isEssentialCategory(categoryKey)) { 848 return true; 849 } 850 if (this.isOptIn()) { 851 if (this.isAllCategoriesAllowed()) { 852 return true; 853 } 854 return this.consent.get().includes(categoryKey); 855 } 856 return this.config.canUseCookieBeforeOptIn; 857 }, 858 getDomain: function (cookieName) { 859 return this.config.cookies[cookieName] ? this.config.cookies[cookieName].domain : null; 860 }, 861 isAllowed: function (cookieName) { 862 if (this.isSystemCookie(cookieName)) { 863 return true; 864 } 865 if (! this.config.canManageCookie) { 866 return true; 867 } 868 if (this.whitelist[cookieName]) { 869 return true; 870 } 871 cookieName = this.getTrueCookieName(cookieName); 872 if (! this.isOptIn()) { 873 if (this.config.canUseCookieBeforeOptIn) { 874 return true; 875 } 876 if (this.isKnownCookie(cookieName)) { 877 return this.isInEssentialCategory(cookieName); 878 } 879 return false; 880 } 881 if (! this.isKnownCookie(cookieName)) { 882 return ! this.config.canBlockUnknownCookie; 883 } 884 return this.isInAllowedCategory(cookieName); 885 }, 886 isAllCategoriesAllowed: function () { 887 if (null === this.cache.get('allowAllCategories')) { 888 var customerConsent = this.consent.get(); 889 if (customerConsent && customerConsent.includes('all') ) { 890 this.cache.set('allowAllCategories', true); 891 } else { 892 var allowedWebsites = this.websiteRestriction.getAllowed(); 893 this.cache.set('allowAllCategories', allowedWebsites[this.config.mage.website] === 1); 894 } 895 } 896 return this.cache.get('allowAllCategories'); 897 }, 898 isEssentialCategory: function (categoryKey) { 899 return this.config.essentialCategoryKeys.includes(categoryKey); 900 }, 901 isInEssentialCategory: function (cookieName) { 902 return this.isEssentialCategory(this.getCookieCategory(cookieName)); 903 }, 904 isInAllowedCategory: function (cookieName) { 905 return this.isAllowedCategory(this.getCookieCategory(cookieName)); 906 }, 907 getCookieCategory: function (cookieName) {
908 return this.config.cookieToCategoryMapping[cookieName]; 909 }, 910 isOptIn: function () { 911 var allowedWithDefaultCookie = this.websiteRestriction.getAllowed()[this.config.mage.website] === 1; 912 return Boolean(this.consent.get()) || allowedWithDefaultCookie; 913 }, 914 isSystemCookie: function (cookieName) { 915 return this.SYSTEM_COOKIES.includes(cookieName); 916 }, 917 isKnownCookie: function (cookieName) { 918 return this.config.cookieToCategoryMapping.hasOwnProperty(cookieName); 919 }, 920 getTrueCookieName: function (cookieName) { 921 var keys = Object.keys(this.config.dynamicNamesPatterns), key; 922 for (var i = 0, length = keys.length; i < length; i++) { 923 key = keys[i]; 924 if (new RegExp(this.config.dynamicNamesPatterns[key]).test(cookieName)) { 925 return key; 926 } 927 } 928 return cookieName; 929 }, 930 clearRejectedCookie: function () { 931 let cookies = prCookieService.get(); 932 Object.keys(cookies).forEach(function(cookieName) { 933 if (this.isAllowed(cookieName)) { 934 return; 935 } 936 937 var encodedCookieName = cookieName = encodeURIComponent(String(cookieName)) 938 .replace(/%(23|24|26|2B|5E|60|7C)/g, decodeURIComponent) 939 .replace(/[\(\)]/g, escape); 940 941 this.whitelist[encodedCookieName] = true; 942 if (this.getDomain(cookieName)) { 943 prCookieService.remove(cookieName, {domain: this.getDomain(cookieName)}); 944 } else { 945 prCookieService.remove(cookieName); 946 if (this.config.cookie.parentDomain) { 947 prCookieService.remove(cookieName, {domain: this.config.cookie.parentDomain}); 948 } 949 } 950 this.logger.warn('CookieConsent: remove cookie "' + cookieName + '"'); 951 if (typeof prCookieService.get(cookieName) !== 'undefined') { 952 this.logger.error('CookieConsent: fail to remove cookie "' + cookieName + '"'); 953 } 954 this.whitelist[encodedCookieName] = false; 955 }.bind(this)); 956 } 957}; 958 959prCookieConsentApi.userScript = { 960 /**
961 * List of callbacks and categories they depend on. 962 */ 963 pendingScripts: [], 964 /** 965 * Run script after model is configured or after user provided consent. 966 */ 967 init: function () { 968 prCookieConsentApi.addConfiguredCallback(this.executePendingScripts.bind(this)); 969 prCookieConsentApi.consent.addCallback(this.executePendingScripts.bind(this)); 970 }, 971 /** 972 * Run or delay script. 973 * 974 * @param {function} callback 975 * @param {string} categoryKey 976 */ 977 execute: function (callback, categoryKey) { 978 if (prCookieConsentApi.isConfigured && prCookieConsentApi.isAllowedCategory(categoryKey)) { 979 callback(); 980 return; 981 } 982 983 this.pendingScripts.push({callback: callback, categoryKey: categoryKey, executed: false}); 984 }, 985 /** 986 * Run pending scripts. 987 */ 988 executePendingScripts: function () { 989 this.pendingScripts.forEach(function (script) { 990 if (false === script.executed && prCookieConsentApi.isAllowedCategory(script.categoryKey)) { 991 script.callback(); 992 script.executed = true; 993 } 994 }.bind(this)); 995 }, 996}; 997 998prCookieConsentApi.websiteRestriction = { 999 getAllowed: function () { 1000 var allowedWebsites = prCookieConsentApi.getCookieValue(prCookieConsentApi.config.mage.cookieName); 1001 return allowedWebsites ? JSON.parse(allowedWebsites) : {}; 1002 }, 1003 allowCurrent: function () { 1004 return this.set(prCookieConsentApi.config.mage.website, true); 1005 }, 1006 disallowCurrent: function () { 1007 return this.set(prCookieConsentApi.config.mage.website, false); 1008 }, 1009 /** 1010 * @param {number} website 1011 * @param {boolean} flag 1012 * @return {CookieRestriction.websiteRestriction} 1013 */ 1014 set: function (website, flag) { 1015 var allowedWebsites = this.getAllowed(); 1016 1017 if (flag) { 1018 allowedWebsites[website] = 1; 1019 } else { 1020 delete allowedWebsites[website]; 1021 } 1022 1023 prCookieService.set(prCookieConsentApi.config.mage.cookieName, allowedWebsites, { 1024 path: prCookieConsentApi.config.cookie.path, 1025 expires: prCookieConsentApi.config.mage.lifetime ? Math.ceil(prCookieConsentApi.config.mage.lifetime / 86400) : 0 1026 }); 1027 1028 return this; 1029 } 1030}; 1031 1032prCookieConsentApi.cache = { 1033 cacheData: {allowAllCategories: null}, 1034 get: function (key) { 1035 return this.cacheData[key]; 1036 }, 1037 set: function (key, value) { 1038 this.cacheData[key] = value; 1039 }, 1040 reset: function () { 1041 this.cacheData = {allowAllCategories: null}; 1042 } 1043}; 1044 1045prCookieConsentApi.logger = { 1046 level: 0, /* disabled */ 1047 init: function () { 1048 if (window.location.hash === '#pr-enable-cookie-log') { 1049 this.level = 1; /* only warnings and errors */ 1050 } 1051 if (window.location.hash === '#pr-enable-cookie-log-all') { 1052 this.level = 2; /* all logs */ 1053 } 1054 }, 1055 log: function () { 1056 this.level > 1 && console.log.apply(console, arguments); 1057 }, 1058 warn: function () { 1059 this.level > 0 && console.warn.apply(console, arguments); 1060 }, 1061 error: function () { 1062 this.level > 0 && console.error.apply(console, arguments); 1063 } 1064}; 1065 1066prCookieConsentApi.consent = { 1067 /** 1068 * Contains callbacks that run after user consent. 1069 * 1070 * @type {function[]} 1071 */ 1072 callbacks: [], 1073 allowAllCategories: function () { 1074 prCookieConsentApi.cache.reset(); 1075 prCookieConsentApi.consent.set(['all']); 1076 return this; 1077 }, 1078 declineAll: function () { 1079 prCookieConsentApi.cache.reset(); 1080 prCookieConsentApi.consent.set([]); 1081 return this; 1082 }, 1083 set: function (allowedCategories) { 1084 prCookieService.set(prCookieConsentApi.CUSTOMER_CONSENT, JSON.stringify(allowedCategories), { 1085 expires: prCookieConsentApi.config.consent.expiry, 1086 path: prCookieConsentApi.config.cookie.path, 1087 domain: prCookieConsentApi.config.cookie.domain 1088 }); 1089 1090 if (allowedCategories.includes('all')) {
1091 prCookieConsentApi.websiteRestriction.allowCurrent(); 1092 } else { 1093 prCookieConsentApi.websiteRestriction.disallowCurrent(); 1094 } 1095 prCookieConsentApi.cache.reset(); 1096 1097 var isAccepting = allowedCategories.length; 1098 1099 this.callbacks.forEach(function (callback) { 1100 callback(allowedCategories) 1101 }); 1102 1103 fetch(prCookieConsentApi.config.consent.logUrl, { 1104 method: 'POST', 1105 headers: { 1106 'Content-Type': 'application/json', 1107 'X-Requested-With': 'XMLHttpRequest' 1108 }, 1109 body: JSON.stringify({acceptedKeys: allowedCategories}) 1110 }) 1111 .then(this.pageReloadAfterAction.bind(this, isAccepting)); 1112 }, 1113 /** 1114 * Reload page by configuration and action 1115 * 1116 * @param isAccepting 1117 */ 1118 pageReloadAfterAction: function (isAccepting) { 1119 if (isAccepting && prCookieConsentApi.config.consent.reloadAfterAccept) { 1120 window.location.reload(); 1121 } 1122 1123 if (! isAccepting && prCookieConsentApi.config.consent.reloadAfterDecline) { 1124 window.location.reload(); 1125 } 1126 }, 1127 get: function () { 1128 var consent = prCookieConsentApi.getCookieValue(prCookieConsentApi.CUSTOMER_CONSENT); 1129 return consent ? JSON.parse(consent) : false; 1130 }, 1131 addCallback: function (callback) { 1132 this.callbacks.push(callback); 1133 return this; 1134 }, 1135}; 1136 1137prCookieConsentApi.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
11370022\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'); 1138prCookieConsentApi.initCookieBlocking(); 1139 1140if (typeof define === 'function') { 1141 define('prCookieService', function () {return prCookieService}); 1142 define('prCookieConsentApi', function () {return prCookieConsentApi;}); 1143} 1144</script>
1144 1145 1146 1147
1147<script type="text/javascript" nonce="N2Q3enk5eGFoZ3hyejB4MzJxOThhNGsyd2lybnZpbno="> 1148 (() => { 1149 document.addEventListener('pr-cookie-consent-api:cookie-blocking:validation', (event) => { 1150 if ('mg_dnt' !== event.detail.cookieName) { 1151 return; 1152 } 1153 1154 setTimeout(() => { 1155 const categoryKey = 'marketing'; 1156 let cookieValue = (event.detail.cookie.match(/^[^=]+=(.*?)(?:$|;)/) || [])[1]?.trim(); 1157 1158 if (prCookieConsentApi.isAllowedCategory(categoryKey) && cookieValue.length) { 1159 prCookieService.remove('mg_dnt', prCookieConsentApi.config.cookie); 1160 return; 1161 } 1162 1163 if (! prCookieConsentApi.isAllowedCategory(categoryKey) && ! cookieValue.length) { 1164 prCookieService.set('mg_dnt', true, { ...prCookieConsentApi.config.cookie, expires: null }); 1165 } 1166 }, 100); 1167 }); 1168 1169 let handleCookieConsent = () => { 1170 const categoryKey = 'marketing'; 1171 if (prCookieConsentApi.isAllowedCategory(categoryKey)) { 1172 prCookieService.remove('mg_dnt', prCookieConsentApi.config.cookie); 1173 } else { 1174 prCookieService.set('mg_dnt', true, { ...prCookieConsentApi.config.cookie, expires: null }); 1175 } 1176 }; 1177 1178 prCookieConsentApi.consent.addCallback(handleCookieConsent); 1179 handleCookieConsent(); 1180 })(); 1181 </script>
1181 1182 1183
1183<script> 1184 (function () { 1185 'use strict'; 1186 1187 window.amRecaptchaModel = { 1188 formsToProtect: "form\u005Baction\u002A\u003D\u0022faq\u002Findex\u002Fsave\u0022\u005D", 1189 isEnabledOnPayments: "", 1190 checkoutRecaptchaValidateUrl: "https://www.flooringinc.com/amcapthca/checkout/validate/", 1191 invisibleCaptchaCustomForm: "\u002D1", 1192 recaptchaConfig: { 1193 lang: "hl\u003Den" || 'hl=en', 1194 theme: "light", 1195 badge: "bottomright", 1196 sitekey: "6Lc6gcYqAAAAADiXHrgCFqC4Sewhxs-nrHYgN4oo", 1197 size: "normal" 1198 }, 1199 url: 'https://www.google.com/recaptcha/api.js', 1200 isCaptchaScriptLoaded: false, 1201 isInvisible: "normal" === 'invisible', 1202 1203 /** 1204 * Submit event 1205 * 1206 * @param {Object} $event 1207 * @return {void} 1208 */ 1209 execute: function ($event) { 1210 const eventTarget = $event?.target; 1211 if (this.isCaptchaScriptLoaded) { 1212 this.executeCaptcha(eventTarget); 1213 } else { 1214 window.addEventListener('amcaptcha-script-loaded', () => { 1215 this.isCaptchaScriptLoaded = true; 1216 this.executeCaptcha(eventTarget); 1217 this.initAmcaptchaBadges(); 1218 }); 1219 1220 this.loadRecaptchaScript(); 1221 } 1222 }, 1223 1224 /** 1225 * Execute original submit 1226 * 1227 * @param {Object} $event 1228 * @param {HTMLElement} $el 1229 * @return {void} 1230 */ 1231 recaptchaCallback: function ($event, $el) { 1232 this.shouldExecuteCallback($event, $el) && $el.dispatchEvent(new CustomEvent('amrecaptcha-executable-callback')); 1233 }, 1234 1235 /** 1236 * Reset captcha 1237 * 1238 * @param {Object} $event 1239 * @param {HTMLElement} $el 1240 */ 1241 expiredCallback: function($event, $el) { 1242 this.shouldExecuteCallback($event, $el) && grecaptcha.reset($event.detail.widgetId); 1243 }, 1244 1245 /** 1246 * Checks if event is fired on submitted element 1247 * 1248 * @param {Object} $event 1249 * @param {HTMLElement} $el 1250 * @return {boolean} 1251 */ 1252 shouldExecuteCallback: function($event, $el) { 1253 const eventWidgetId = $event.detail.widgetId; 1254 const elementWidgetId = $el.dataset.amCaptchaWidgetId || $el.closest('form')?.dataset.amCaptchaWidgetId; 1255 1256 return eventWidgetId === elementWidgetId; 1257 }, 1258 1259 /** 1260 * Run captcha for widget by id 1261 * 1262 * @param {HTMLElement} eventTarget 1263 * @return {void} 1264 */ 1265 executeCaptcha: function(eventTarget) { 1266 if (!eventTarget.dataset.hasOwnProperty('amCaptchaRendered')) { 1267 this.bindCaptchaGlobalCallbacks(eventTarget); 1268 this.renderCaptcha(eventTarget); 1269 eventTarget.dataset.amCaptchaRendered = ''; 1270 } 1271 1272 const widgetId = this.getWidgetId(eventTarget); 1273 1274 if (!widgetId) { 1275 typeof window.dispatchMessages !== "undefined" && window.dispatchMessages([ 1276 { 1277 type: "error", 1278 text: 'Recaptcha\u0020cannot\u0020properly\u0020validate\u0020form.' 1279 } 1280 ]); 1281 return; 1282 } 1283 1284 window.dispatchEvent(new CustomEvent('amcaptcha-loading-start')); 1285 grecaptcha.reset(widgetId); 1286 1287 if (!this.isInvisible) { 1288 this.stopAmcaptchaLoading(); 1289 return; 1290 } 1291 1292 grecaptcha.execute(widgetId) 1293 .then(() => this.stopAmcaptchaLoading()) 1294 .catch(() => this.stopAmcaptchaLoading()); 1295 }, 1296 1297 /** 1298 * Add recaptcha script to page 1299 * 1300 * @return {void} 1301 */ 1302 loadRecaptchaScript: function () { 1303 const lang = window.amRecaptchaModel.recaptchaConfig.lang; 1304 const url = `${window.amRecaptchaModel.url}?onload=amRecaptchaLoadCallback&render=explicit&${lang}`; 1305 const script = document.createElement('script'); 1306 1307 script.type = 'text/javascript'; 1308 script.src = url; 1309 script.async = true; 1310 document.head.appendChild(script); 1311 }, 1312 1313 /** 1314 * Stop loader on page 1315 * 1316 * @return {void} 1317 */ 1318 stopAmcaptchaLoading: function () { 1319 window.dispatchEvent(new CustomEvent('amcaptcha-loading-stop')); 1320 }, 1321 1322 /** 1323 * Add attributes to hide captcha badge 1324 * 1325 * @return {void} 1326 */ 1327 initAmcaptchaBadges: function () { 1328 if (!this.isInvisible) { 1329 return; 1330 } 1331 1332 document.querySelectorAll('.grecaptcha-badge')?.forEach(captchaBadge => { 1333 captchaBadge?.setAttribute('x-data', '{ visible: true }'); 1334 captchaBadge?.setAttribute('x-on:amcaptcha-loading-start.window', 'visible = true'); 1335 captchaBadge?.setAttribute('x-on:amcaptcha-loading-stop.window', 'visible = false'); 1336 captchaBadge?.setAttribute(':class', '!visible && "invisible"'); 1337 }); 1338 }, 1339 1340 /** 1341 * Get form widgetId 1342 * 1343 * @param {HTMLElement} eventTarget 1344 * @return {string} 1345 */ 1346 getWidgetId: function (eventTarget) { 1347 return eventTarget.dataset.amCaptchaWidgetId 1348 || eventTarget.closest('form')?.dataset.amCaptchaWidgetId; 1349 }, 1350 1351 /** 1352 * Add captcha badge or checkbox to protected form. 1353 * Store widgetId in dataset to pass this info in callbacks 1354 * 1355 * @param {HTMLElement} eventTarget 1356 * @return {void} 1357 */ 1358 renderCaptcha: function (eventTarget) { 1359 const captchaElement = document.createElement('div'); 1360 const formContent = eventTarget.closest('form')?.querySelector('[data-element="form-content"]') 1361 ?? eventTarget.closest('form'); 1362 formContent?.appendChild(captchaElement); 1363 1364 eventTarget.dataset.amCaptchaWidgetId = grecaptcha.render(captchaElement, { 1365 ...window.amRecaptchaModel?.recaptchaConfig, 1366 callback: () => { 1367 window.dispatchEvent(new CustomEvent( 1368 'amrecaptcha-callback', { 1369 detail: this.getCaptchaCallbackDetail(eventTarget) 1370 })); 1371 }, 1372 'expired-callback': () => { 1373 window.dispatchEvent(new CustomEvent( 1374 'amrecaptcha-expired-callback', { 1375 detail: this.getCaptchaCallbackDetail(eventTarget) 1376 })); 1377 } 1378 }); 1379 }, 1380 1381 /** 1382 * Get detail property for callback event 1383 * 1384 * @param {HTMLElement} eventTarget 1385 * @return {object} 1386 */ 1387 getCaptchaCallbackDetail: function (eventTarget) { 1388 return { 1389 widgetId: eventTarget.dataset.amCaptchaWidgetId, 1390 form: eventTarget 1391 } 1392 }, 1393 1394 /** 1395 * Add functions that will be called on the global state 1396 * 1397 * @param {HTMLElement} eventTarget 1398 * @return {void} 1399 */ 1400 bindCaptchaGlobalCallbacks: function (eventTarget) { 1401 eventTarget.setAttribute( 1402 'x-on:amrecaptcha-callback.window', 1403 `amRecaptchaModel.recaptchaCallback($event, $el)` 1404 ); 1405 eventTarget.setAttribute( 1406 'x-on:amrecaptcha-expired-callback.window', 1407 'amRecaptchaModel.expiredCallback($event, $el)' 1408 ); 1409 } 1410 }; 1411 })(window.amRecaptchaModel = window.amRecaptchaModel || {}); 1412 1413 window.amRecaptchaLoadCallback = function () { 1414 window.dispatchEvent(new CustomEvent('amcaptcha-script-loaded')); 1415 } 1416 </script>
1416 1417 1418 1419 <!--suppress HtmlUnknownTarget --> 1420 <!-- BV | Magento Extension 9.1.7 --> 1421
1421<script> 1422 window.addEventListener('init-external-scripts', () => { 1423 const bvScript = document.createElement('script'); 1424 bvScript.src = '//apps.bazaarvoice.com/deployments/incstores/main_site/production/en_US/bv.js'; 1425 bvScript.type = 'text/javascript'; 1426 bvScript.async = true; 1427 document.head.append(bvScript); 1428 }, {once: true, passive: true}); 1429 </script>
vendor: 1 bytes, line 1429
1429
1430<script> 1431 function initSocialLoginPost() { 1432 return { 1433 submitForm(form) { 1434 event.preventDefault(); 1435 var loginRefererElement = document.getElementById("sociallogin-login-referer"); 1436 var value = loginRefererElement.value; 1437 fetch(form.action, { 1438 headers: { 1439 contentType: "application/json;charset=utf-8", 1440 }, 1441 body: new URLSearchParams({ 1442 form_key: hyva.getFormKey(), 1443 'refress-redirect-url':value 1444 }), 1445 method: "POST", 1446 mode: "cors", 1447 credentials: "include", 1448 }).then(response => { 1449 if (response.redirected) { 1450 window.location.href = response.url; 1451 } else { 1452 window.dispatchMessages("warning", "Post request failed", 5000); 1453 } 1454 }) 1455 } 1456 } 1457 } 1458</script>
1458 1459<form style="display:none;" class="form" x-data="initSocialLoginPost()" @submit="submitForm($el)" 1460 action="https://www.flooringinc.com/sociallogin/account/loginPost/" 1461 method="post" 1462 id="sociallogin-login-form" 1463> 1464 <input id="sociallogin-login-referer" name="refress-redirect-url" type="hidden" value="" /> 1465 <input id="sociallogin-login-submit" type="submit" value="sociallogin" style="font-size:0"/> 1466</form> 1467 1468<style> 1469 .pr-cookie-setting-bar-overlay, 1470 .pr-cookie-setting-bar-container { 1471 z-index: 999999999999999; 1472 } 1473</style> 1474
1475<script> 1476 'use strict'; 1477 var prCookieSettingBar = { 1478 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
1478ilters, 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
1478se 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}, 1479 show: function () {}, 1480 hide: function () {}, 1481 syncCategoriesDataWithConsent: function () { 1482 this.config.categories = this.config.categories.map(category => { 1483 category.is_allowed = prCookieConsentApi.isAllowedCategory(category.key); 1484 return category; 1485 }); 1486 }, 1487 allowAll: function () { 1488 prCookieConsentApi.consent.allowAllCategories(); 1489 this.syncCategoriesDataWithConsent(); 1490 window.prCookieSettingBar.hide(); 1491 }, 1492 declineAll: function () { 1493 prCookieConsentApi.consent.declineAll(); 1494 this.syncCategoriesDataWithConsent(); 1495 window.prCookieSettingBar.hide(); 1496 }, 1497 confirm: function () { 1498 var allowedCategories = [...prCookieConsentApi.config.essentialCategoryKeys]; 1499 this.config.categories.forEach((category) => { 1500 if (allowedCategories.includes(category.key) || !category.is_allowed) { 1501 return; 1502 } 1503 1504 allowedCategories.push(category.key); 1505 }); 1506 1507 prCookieConsentApi.consent.set(allowedCategories); 1508 this.syncCategoriesDataWithConsent(); 1509 window.prCookieSettingBar.hide(); 1510 } 1511 }; 1512</script>
1512 1513 1514<div x-data="{...hyva.modal(), init() { 1515 window.prCookieSettingBar.show = this.show.bind(this, 'pr-cookie-setting-bar', event); 1516 window.prCookieSettingBar.hide = this.hide.bind(this); 1517 }}" x-init="init()"> 1518 <div x-cloak x-bind="overlay('pr-cookie-setting-bar')" 1519 x-spread="overlay('pr-cookie-setting-bar')" 1520 class="fixed inset-0 bg-black bg-opacity-50 z-50 pr-cookie-setting-bar-overlay"> 1521 <div class="fixed flex justify-center items-center text-left z-40 pr-cookie-setting-bar-container inset-0"> 1522 <div x-ref="pr-cookie-setting-bar" role="dialog" aria-modal="true" 1523 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"> 1524 <div class="pr-cookie-setting-bar-wrap text-[13px] px-4 pt-2 pb-4 relative" 1525 id="pr-cookie-setting-bar" 1526 :class="config.cookieDetailsIsOpen && 'h-screen overflow-hidden'" 1527 x-data="prCookieSettingBar" 1528 x-init="syncCategoriesDataWithConsent()" 1529> 1530 <button @click="hide" class="ml-auto -mt-2 -mr-4 block top-2 right-2 p-2"> 1531 <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"> 1532 <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"/> 1533<title>x</title></svg> 1534 </button> 1535 <h3 class="font-bold text-xl leading-normal mb-3" x-text="config.overview.title"></h3> 1536 <div class="pr-cookie-description" x-html="config.overview.text"></div> 1537 <div class="pr-actions-buttons flex flex-wrap items-center justify-center py-4 mb-6 border-container border-b"> 1538 <button type="button" class="action btn btn-primary m-2" x-text="config.acceptButtonConfig.label" @click="allowAll();"></button> 1539 <button type="button" class="action btn btn-secondary m-2" x-text="config.declineButtonConfig.label" @click="declineAll()"></button> 1540 </div> 1541 <h3 class="pr-cookie-manage-title font-bold text-xl mb-0" x-text="config.consentPreferences.header"></h3> 1542 <ul class="message-system-list mt-8"> 1543 <template x-for="category in config.categories"> 1544 <li class="mt-0 mb-4"> 1545 <div class="accordion-title"> 1546 <div class="pr-cookie-option flex justify-between pb-2 mt-8 text-sm"> 1547 <strong class="option-label mr-4" x-text="category.name"></strong> 1548 <template x-if="category.is_essential"> 1549 <strong class="option-status whitespace-nowrap text-green-700" x-text="config.consentPreferences.essential_category_status"></strong> 1550 </template> 1551 <template x-if="! category.is_essential"> 1552 <div class="pr-cookie-switch"> 1553 <label class="switch-label" aria-label="Switch"> 1554 <input type="checkbox" 1555 class="sr-only" 1556 x-model="category.is_allowed" 1557 x-bind:name="category.key" 1558 > 1559 <span class="switch-area flex items-center w-11 h-6 rounded-3xl border border-container cursor-pointer transition-all" 1560 :class="category.is_allowed ? 'bg-green-500 border-green-700' : 'bg-gray-200 border-gray-300'" 1561 > 1562 <span class="switch-nob block w-5 h-5 rounded-full transition-all" 1563 :class="category.is_allowed ? 'bg-white ml-auto mr-[2px]' : 'bg-gray-500 mr-auto ml-[2px]'" 1564 ></span> 1565 </span> 1566 </label> 1567 </div> 1568 </template> 1569 </div> 1570 <div class="first-details" x-data="{ isOpen: false }"> 1571 <div class="pr-cookie-category-description text-gray-700 mb-4" x-text="category.description"></div> 1572 <template x-if="config.canShowCookieDetails"> 1573 <div> 1574 <div class="lvl1">
1575 <span class="pr-cookie-details text-blue-700 cursor-pointer underline hover:no-underline" 1576 x-on:click="isOpen = true; config.cookieDetailsIsOpen = isOpen" 1577 x-text="config.consentPreferences.cookie_details_link" 1578 x-bind:data-category-key="category.key"></span> 1579 </div> 1580 <div class="second-details absolute bg-white px-4 pt-2 pb-4 inset-0 h-full" 1581 x-show="isOpen" 1582 > 1583 <div class="pr-cookie-view flex flex-col h-full"> 1584 <template x-if="isOpen"> 1585 <button @click="hide" class="ml-auto -mt-2 -mr-2 block top-2 right-2 p-2"> 1586 <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"> 1587 <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"/> 1588<title>x</title></svg> 1589 </button> 1590 </template> 1591 <div class="flex justify-between items-center text-sm mb-2"> 1592 <button class="pr-cookie-details-hide px-3 -ml-3 mr-3 flex items-center cursor-pointer hover:text-blue-800" 1593 x-show="isOpen" 1594 x-on:click="isOpen = false; config.cookieDetailsIsOpen = isOpen"> 1595 <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"> 1596 <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"/> 1597<title>arrow-left</title></svg> 1598 Back 1599 </button> 1600 <strong class="option-label" x-text="category.name"></strong> 1601 </div> 1602 <div class="pr-cookies-list h-full px-4 -mx-4 mb-3 overflow-auto"> 1603 <h3 class="pr-cookie-view-title mb-2 font-bold text-base">Cookies List</h3> 1604 <template x-if="category.details.length > 0"> 1605 <template x-for="group in category.details"> 1606 <div class="pr-cookie-item text-xs py-2 border-container border-b"> 1607 <h4 class="pr-cookie-details-title font-semibold mb-1" x-text="group.name"></h4> 1608 <details class="pr-cookie-details-info"> 1609 <summary class="cursor-pointer text-blue-600 hover:text-blue-500"> 1610 <h5 class="inline-block font-semibold"> 1611 View Cookies 1612 </h5> 1613 </summary> 1614 <div class="pr-cookie-group-wrp"> 1615 <template x-for="cookie in group.cookies"> 1616 <div class="pr-cookie-group mt-1 mb-4 p-4 bg-gray-100 rounded"> 1617 <div class="pr-cookie-group-row mb-2 flex"> 1618 <sp
1618an class="w-24 flex-shrink-0 mr-4">Name</span> 1619 <span class="truncate" x-text="cookie.name"></span> 1620 </div> 1621 <div class="pr-cookie-group-row mb-2 flex"> 1622 <span class="w-24 flex-shrink-0 mr-4">Domain</span> 1623 <span class="truncate" x-text="cookie.domainLabel"></span> 1624 </div> 1625 <div class="pr-cookie-group-row mb-2 flex"> 1626 <span class="w-24 flex-shrink-0 mr-4">Duration</span> 1627 <span x-text="cookie.durationLabel"></span> 1628 </div> 1629 <div class="pr-cookie-group-row mb-2 flex"> 1630 <span class="w-24 flex-shrink-0 mr-4">Type</span> 1631 <span x-text="cookie.typeLabel"></span> 1632 </div> 1633 <div class="pr-cookie-group-row mb-2 flex"> 1634 <span class="w-24 flex-shrink-0 mr-4">Category</span> 1635 <span x-text="cookie.category_key"></span> 1636 </div> 1637 <div class="pr-cookie-group-row flex"> 1638 <span class="w-24 flex-shrink-0 mr-4">Description</span> 1639 <span x-text="cookie.description"></span> 1640 </div> 1641 </div> 1642 </template> 1643 </div> 1644 </details> 1645 </div> 1646 </template> 1647 </template> 1648 <template x-if="category.details.length === 0"> 1649 <p>There are no cookies.</p> 1650 </template> 1651 </div> 1652 1653 <template x-if="isOpen"> 1654 <div> 1655 <button class="action btn btn-primary" 1656 :style="`color: ${config.confirmButtonConfig.text_color}; background-color: ${config.confirmButtonConfig.background_color}; border-color: ${config.confirmButtonConfig.background_color}`" 1657 x-text="config.confirmButtonConfig.label" 1658 @click="prCookieSettingBar.confirm()"> 1659 </button> 1660 </div> 1661 </template> 1662 </div> 1663 </div> 1664 </div> 1665 </template> 1666 </div> 1667 </div> 1668 </li> 1669 </template> 1670 <button class="action btn btn-primary" 1671 :style="`color: ${config.confirmButtonConfig.text_color}; background-color: ${config.confirmButtonConfig.background_color}; border-color: ${config.confirmButtonConfig.background_color}`" 1672 x-text="config.confirmButtonConfig.label" 1673 @click="prCookieSettingBar.confirm()"> 1674 </button> 1675 </ul> 1676</div> 1677 </div> 1678 </div> 1679 </div> 1680</div>
1681<script type="text/javascript" nonce="N2Q3enk5eGFoZ3hyejB4MzJxOThhNGsyd2lybnZpbno="> 1682 (() => { 1683 const updateCookieConsentConfig = () => { 1684 const categoryMap = {}; 1685 Object.entries(prCookieConsentApi.config.cookieToCategoryMapping).forEach(([cookieName, categoryName]) => { 1686 if (! categoryMap[categoryName]) { 1687 categoryMap[categoryName] = []; 1688 } 1689 categoryMap[categoryName].push(cookieName); 1690 }); 1691 1692 Object.entries(categoryMap).forEach(([category, cookies]) => { 1693 const existingList = window.cookie_consent_config[category] || []; 1694 window.cookie_consent_config[category] = Array.from(new Set(existingList.concat(cookies))); 1695 }); 1696 1697 let cookieCategories = ["necessary","preferences","statistics","marketing"]; 1698 window.cookie_consent_groups = {}; 1699 cookieCategories.forEach((category) => { 1700 window.cookie_consent_groups[category] = prCookieConsentApi.isAllowedCategory(category); 1701 }); 1702 } 1703 1704 const updateConsent = () => { 1705 window.cookie_consent_groups = window.cookie_consent_groups || {} 1706 Object.keys(window.cookie_consent_groups).forEach(categoryKey => { 1707 window.cookie_consent_groups[categoryKey] = prCookieConsentApi.isAllowedCategory(categoryKey); 1708 }); 1709 window.dispatchEvent(new CustomEvent('user-allowed-save-cookie')); 1710 } 1711 1712 document.addEventListener('pr-cookie-consent-api:configured', () => { 1713 updateCookieConsentConfig(); 1714 prCookieConsentApi.consent.addCallback(updateConsent); 1715 }); 1716 1717 if (prCookieConsentApi.isConfigured) { 1718 updateCookieConsentConfig(); 1719 prCookieConsentApi.consent.addCallback(updateConsent); 1720 } 1721 })(); 1722</script>
1722 1723<div id="prgdpr-consentpopups-container" 1724 x-data="prDataPrivacyConsentPopupsLoadInit()" 1725 @private-content-loaded.window="receiveCustomerData($event.detail.data)" 1726></div>
1727<script> 1728 function prDataPrivacyConsentPopupsLoadInit() { 1729 return { 1730 receiveCustomerData: function (data) { 1731 if (! data.hasOwnProperty('data_privacy')) { 1732 return; 1733 } 1734 1735 if (data.data_privacy.countNotifies !== 0 || data.data_privacy.countPopups !== 0) { 1736 this.loadPopups(); 1737 } 1738 }, 1739 loadPopups: function () { 1740 fetch('https://www.flooringinc.com/data-privacy/consentpopups/load/') 1741 .then((response) => { 1742 if (! response.ok) { 1743 throw new Error('Network response was not ok'); 1744 } 1745 1746 return response.json(); 1747 }) 1748 .then(data => this.$el.innerHTML = data.html) 1749 .catch(error => console.warn(error)); 1750 } 1751 } 1752 } 1753 1754 function prDataPrivacyConsentPopupsInit(popups, notifies) { 1755 return { 1756 popups: popups, 1757 notifies: notifies, 1758 data: null, 1759 isShowModal: true, 1760 init: function () { 1761 for (popup of this.popups) { 1762 popup.isShowModal = true; 1763 } 1764 1765 for (notify of this.notifies) { 1766 notify.isShowModal = true; 1767 } 1768 }, 1769 closeModal(popup) { 1770 popup.isShowModal = false; 1771 }, 1772 sendRequest: function (url, consent) { 1773 if (consent.cms_page) { 1774 consent.checkboxLabel = 'I agree'; 1775 } 1776 1777 fetch(url, { 1778 method: 'POST', 1779 headers: {'X-Requested-With': 'XMLHttpRequest'}, 1780 body: JSON.stringify({'consent': consent}) 1781 }); 1782 }, 1783 print: function (popup) { 1784 let printWindow = window.open('', 'Print', 'height=600,width=800'); 1785 printWindow.document.write( 1786 `<html><head><title>${popup.cms_page.title}</title></head><body>${popup.cms_page.content}</body></html` 1787 ); 1788 printWindow.document.close(); 1789 printWindow.focus(); 1790 printWindow.print(); 1791 printWindow.onafterprint = function () { 1792 printWindow.close(); 1793 }; 1794 1795 return true; 1796 } 1797 } 1798 } 1799</script>
1799 1800
1801<script nonce="N2Q3enk5eGFoZ3hyejB4MzJxOThhNGsyd2lybnZpbno="> 1802 (() => { 1803 const updateConsents = () => { 1804 if (! Array.isArray(prCookieConsentApi.consent.get()) || prCookieConsentApi.consent.get().length > 0) { 1805 prCookieConsentApi.consent.declineAll(); 1806 } 1807 } 1808 1809 prGlobalPrivacyControlApi.signalHandlers.addHandler(updateConsents); 1810 })(); 1811</script>
1811 1812<input name="form_key" type="hidden" value="tGAOudjzgYs06SIA" /> 1813
1813<script> 1814 window.amRecaptchaModel = window.amRecaptchaModel || {}; 1815 </script>
1815 1816<div class="page-wrapper"><div class="container hidden"> 1817 <div class="pt-2 pb-2 flex flex-row items-end justify-end"> 1818 <div class="pl-3"> 1819 <a href="https://www.flooringinc.com/knowledge-base/" class="hover:underline"> 1820 FAQ</a> 1821 </div> 1822 </div> 1823</div> 1824<header class="page-header"><div class="panel wrapper"><div class="header_top flex justify-between items-center" x-data="notificationAjaxCall()" x-init="initNotificationFunc()"> 1825 <div class="header_left_notification text-size14 font-normal" x-html="left_notification_html"></div> 1826 <div class="header_middle_notification flex"> 1827 <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"> 1828<path d="M18.125 0V9.09091H0V0H18.125ZM19.9375 0H29V9.09091H19.9375V0ZM10.875 20V10.9091H29V20H10.875ZM0 20V10.9091H9.0625V20H0Z" fill="#15324C"/> 1829</svg> 500+ Million Sqft Covered</a></div> 1830 1831<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"> 1832<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"/> 1833</svg> 125K+ Verified Reviews</a></div> 1834 1835<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"> 1836<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"/> 1837<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"/> 1838<circle cx="5" cy="5" r="1" fill="white"/> 1839</svg> Price Match Guarantee</a></div> 1840 1841<div class="flex items-center"><a href="/moneybackguarantee" class="flex items-center gap-2"> 1842<svg xmlns="http://www.w3.org/2000/svg" width="14" height="18" viewBox="0 0 14 18" fill="none"> 1843<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"/> 1844</svg> Money Back Guarantee</a></div> 1845</div> </div> 1846 <div class="header_right_notifications font-normal"> 1847 <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> 1848<li><a href="/contact">Contact Us</a></li> 1849<li><a href="/sales/guest/form">Track Order</a></li> 1850</ul></div></div></div> </div> 1851</div> 1852
1853<script> 1854 function notificationAjaxCall() { 1855 return { 1856 availability_notification: '', 1857 left_notification_html: '', 1858 right_notification_html: '', 1859 initNotificationFunc: function () { 1860 fetch(BASE_URL+'notifications/index/show', { 1861 method: "GET", 1862 headers: { 'Content-Type': 'application/json' }, 1863 }) 1864 .then(response => { 1865 if (! response.ok) console.warn('GET request failed'); 1866 return response.json(); 1867 }) 1868 .then(data => { 1869 if (data) { 1870 this.availability_notification = data.availability_notification; 1871 this.left_notification_html = data.left_notification_html; 1872 this.right_notification_html = data.right_notification_html; 1873 } 1874 }); 1875 } 1876 } 1877 } 1878</script>
1878</div><div class="header content">
1878<script> 1879 function initQuoteCartDrawer() { 1880 return { 1881 open: false, 1882 cartData: {}, 1883 getQuoteCartData(data) { 1884 if (data.quotecart) { 1885 this.cartData = data.quotecart 1886 this.setCartItems(); 1887 } 1888 }, 1889 cartItems: [], 1890 setCartItems() { 1891 this.cartItems = this.cartData && this.cartData.items.sort(function(a,b) { return a.item_id - b.item_id }) || {} 1892 }, 1893 deleteItemFromCart(itemId) { 1894 var formKey = document.querySelector('input[name=form_key]').value; 1895 fetch(BASE_URL+"amasty_quote/sidebar/removeItem/", { 1896 "headers": { 1897 "content-type": "application/x-www-form-urlencoded; charset=UTF-8", 1898 }, 1899 "body": "form_key="+ formKey + "&item_id="+itemId, 1900 "method": "POST", 1901 "mode": "cors", 1902 "credentials": "include" 1903 }).then(function (response) { 1904 if (response.redirected) { 1905 window.location.href = response.url; 1906 } else if (response.ok) { 1907 return response.json(); 1908 } else { 1909 typeof window.dispatchMessages !== "undefined" && window.dispatchMessages( 1910 [{ 1911 type: "warning", 1912 text: "Could not remove item from quote." 1913 }], 5000 1914 ); 1915 } 1916 }).then(function (response) { 1917 typeof window.dispatchMessages !== "undefined" && window.dispatchMessages( 1918 [{ 1919 type: response.success ? "success" : "error", 1920 text: response.success 1921 ? "You removed the item." 1922 : response.error_message 1923 }], 5000 1924 ); 1925 var reloadCustomerDataEvent = new CustomEvent("reload-customer-section-data"); 1926 window.dispatchEvent(reloadCustomerDataEvent); 1927 }); 1928 } 1929 } 1930 } 1931</script>
1931 1932<section id="cart-quote-drawer" 1933 x-data="initQuoteCartDrawer()" 1934 @private-content-loaded.window="getQuoteCartData(event.detail.data)" 1935 @toggle-quote-cart.window="open=true;" 1936 @keydown.window.escape="open=false" 1937> 1938 <template x-if="cartData && cartData.summary_count"> 1939 <div role="dialog" 1940 aria-labelledby="cart-drawer-title" 1941 aria-modal="true" 1942 @click.away="open = false" 1943 class="fixed inset-y-0 right-0 z-30 flex max-w-full"> 1944 <div class="backdrop" 1945 x-show="open" 1946 x-transition:enter="ease-in-out duration-500" 1947 x-transition:enter-start="opacity-0" 1948 x-transition:enter-end="opacity-100" 1949 x-transition:leave="ease-in-out duration-500" 1950 x-transition:leave-start="opacity-100" 1951 x-transition:leave-end="opacity-0" 1952 @click="open = false" 1953 aria-label="Close panel"></div> 1954 <div class="relative w-screen max-w-md shadow-2xl" 1955 x-show="open" 1956 x-transition:enter="transform transition ease-in-out duration-500 sm:duration-700" 1957 x-transition:enter-start="translate-x-full" 1958 x-transition:enter-end="translate-x-0" 1959 x-transition:leave="transform transition ease-in-out duration-500 sm:duration-700" 1960 x-transition:leave-start="translate-x-0" 1961 x-transition:leave-end="translate-x-full" 1962 > 1963 <div 1964 x-show="open" 1965 x-transition:enter="ease-in-out duration-500" 1966 x-transition:enter-start="opacity-0" 1967 x-transition:enter-end="opacity-100" 1968 x-transition:leave="ease-in-out duration-500" 1969 x-transition:leave-start="opacity-100" 1970 x-transition:leave-end="opacity-0" class="absolute top-0 right-0 flex mr-3 mt-2"> 1971 <button @click="open = false" aria-label="Close panel" 1972 class="p-2 text-gray-300 transition duration-150 ease-in-out hover:text-black"> 1973 <svg class="w-6 h-6" fill="none" viewBox="0 0 24 24" stroke="currentColor"> 1974 <path stroke-linecap="round" stroke-linejoin="round" 1975 stroke-width="2" d="M6 18L18 6M6 6l12 12"> 1976 </path> 1977 </svg> 1978 </button> 1979 </div> 1980 <div class="flex flex-col h-full py-6 space-y-6 bg-white shadow-xl"> 1981 <header class="px-4 sm:px-6"> 1982 <div id="cart-drawer-title" class="text-lg font-medium leading-7 text-gray-900"> 1983 My Quote Cart </div> 1984 </header> 1985 <div class="relative grid gap-6 px-4 py-6 overflow-y-auto bg-white border-b 1986 sm:gap-8 sm:px-6 border-container"> 1987 <template x-for="item in cartItems"> 1988 <div class="flex items-start p-3 -m-3 space-x-4 transition duration-150 1989 ease-in-out rounded-lg hover:bg-gray-100"> 1990 <a :href="item.product_url" class="w-1/4"> 1991 <img 1992 :src="item.product_image.src" 1993 :width="item.product_image.width" 1994 :height="item.product_image.height" 1995 loading="lazy" 1996 /> 1997 </a> 1998 <div class="w-3/4 relative"> 1999 <div> 2000 <div class="text-xl"> 2001 <a :href="item.product_url" class="hover:underline"> 2002 <span x-html="item.qty"></span> x <span x-html="item.product_name"></span> 2003 </a> 2004 </div> 2005 <div class="text-sm"><span x-html="item.product_sku"></div> 2006 </div> 2007 <template x-for="option in item.options"> 2008 <div class="pt-2"> 2009 <p class="font-semibold" x-text="option.label + ':'"></p> 2010 <p class="text-secondary" x-html="option.value"></p> 2011 </div> 2012 </template> 2013 <div><span x-html="item.product_price"></span></div> 2014 <div class="pt-4"> 2015 <a :href="item.configure_url" 2016 x-show="item.product_type !== 'grouped'" 2017 class="inline-flex p-2 mr-2 btn btn-primary"> 2018 <svg fill="none" viewBox="0 0 24 24" stroke="currentColor" 2019 size="16" class="w-5 h-5"> 2020 <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" 2021 d="M15.232 5.232l3.536 3.536m-2.036-5.036a2.5 2.5 0 113.536 2022 3.536L6.5 21.036H3v-3.572L16.732 3.732z"> 2023 </path> 2024 </svg> 2025 </a> 2026 <button class="inline-flex p-2 btn btn-primary" 2027 @click="deleteItemFromCart(item.item_id)" 2028 > 2029 <svg fill="none" viewBox="0 0 24 24" stroke="currentColor" 2030 size="16" class="w-5 h-5"> 2031 <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" 2032 d="M19 7l-.867 12.142A2 2 0 0116.138 21H7.862a2 2 0 2033 01-1.995-1.858L5 7m5 4v6m4-6v6m1-10V4a1 1 0 00-1-1h-4a1 1 2034 0 00-1 1v3M4 7h16"> 2035 </path> 2036 </svg> 2037 </button> 2038 </div> 2039 </div> 2040 </div> 2041 </template> 2042 </div> 2043 <div class="relative grid gap-6 px-4 py-6 bg-white sm:gap-8 sm:px-6"> 2044 <div class="w-full p-3 -m-3 space-x-4 transition duration-150 ease-in-out rounded-lg 2045 hover:bg-gray-100">
2046 <span>Cart Subtotal:</span> 2047 <span class="text-gray-900 font-bold" x-text="hyva.formatPrice(cartData.subtotalAmount)"></span> 2048 </div> 2049 <div class="w-full"> 2050 <a href="https://www.flooringinc.com/amasty_quote/cart/" 2051 class="btn btn-secondary justify-center"> 2052 View and Edit Cart </a> 2053 </div> 2054 </div> 2055 </div> 2056 </div> 2057 </div> 2058 </template> 2059</section> 2060<div class="widget block block-static-block"> 2061 <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()"> 2062 <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> 2063</div> 2064
2065<script> 2066function globalNotificationAjaxCall() { 2067 return { 2068 global_notification_text: '', 2069 initGlobalNotificationFunc: function () { 2070 fetch(BASE_URL+'notifications/index/GlobalNotification?full_action_name=checkout_cart_index&cat_prod_id=', { 2071 method: "GET", 2072 headers: { 'Content-Type': 'application/json' }, 2073 }) 2074 .then(response => { 2075 if (! response.ok) console.warn('GET request failed'); 2076 return response.json(); 2077 }) 2078 .then(data => { 2079 if (data) { 2080 if (data.notification_text !='') { 2081 document.querySelector('.notification4.bg-custom-green').style.display = 'block'; 2082 this.global_notification_text = data.notification_text; 2083 } 2084 } 2085 }); 2086 } 2087 } 2088} 2089</script>
2089</div></div></div> 2090</div>
2090<script> 2091 function initHeader () { 2092 return { 2093 searchOpen: false, 2094 cart: {}, 2095 quoteCart: {}, 2096 activeCartType: 'cart', 2097 getData(data) { 2098 if (data.cart) { 2099 this.cart = data.cart; 2100 // this.cart.summary_count=this.cart.items.length; 2101 } 2102 if (data.quotecart) { 2103 this.quoteCart = data.quotecart; 2104 } 2105 if (data.active_cart_icon) { 2106 this.activeCartType = data.active_cart_icon; 2107 } 2108 } 2109 } 2110 } 2111 function initCompareHeader() { 2112 return { 2113 compareProducts: null, 2114 itemCount: 0, 2115 receiveCompareData(data) { 2116 if (data['compare-products']) { 2117 this.compareProducts = data['compare-products']; 2118 this.itemCount = this.compareProducts.count; 2119 } 2120 } 2121 } 2122 } 2123</script>
2123 2124 2125<div id="header" 2126 class="relative z-30 w-full bg-white" 2127 x-data="initHeader()" 2128 @keydown.window.escape="searchOpen = false;" 2129 @private-content-loaded.window="getData(event.detail.data)" 2130> 2131 <div class="content flex flex-wrap items-center justify-between w-full pt-4 pb-4 mx-auto mt-0"> 2132 <!--Logo--> 2133 <div class="logo relative z-20"> 2134 <div class="order-1 sm:order-2 lg:order-1 w-full pb-2 sm:w-auto sm:pb-0"> 2135 <a class="flex items-center text-xl font-medium tracking-wide text-gray-800 2136 no-underline hover:no-underline font-title" 2137 href="https://www.flooringinc.com/" 2138 title="Flooring Inc. The Flooring Superstore" 2139 aria-label="store logo"> 2140 <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> 2141 </a> 2142</div> 2143 </div> 2144 2145 <!--Main Navigation--> 2146 <div x-data="initMenuMobile_6ab67d17cd4a9()" 2147 class="z-50 order-2 sm:order-1 lg:order-2 navigation xl:hidden" 2148> 2149 <!-- mobile --> 2150 <div @load.window="setActiveMenu($root)" 2151 class="mobile-menu bg-lightblue" 2152 :class="{'h-screen fixed top-0 left-0 w-full' : open}" 2153 @toggle-mobile-menu.window="open = !open" 2154 @keydown.window.escape="open=false" 2155 > 2156 <div class="flex items-baseline justify-between ml-0 menu-icon"> 2157 <div class="flex justify-end w-full"> 2158 <a @click="$dispatch('toggle-mobile-menu')" 2159 class="flex items-center justify-center cursor-pointer" 2160 :class="{ 'ml-auto': open }"> 2161 <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> 2162 <picture class="menu_icon -mt-0 mr-2 block"><source type="image/webp" srcset="https://www.flooringinc.com/static/version1789462004/frontend/Dcw/hyvadesktop/en_US/images/menu-icon.webp"><img class="menu_icon -mt-0 mr-2 block" :class="{ 'block' : !open, 'hidden': open }" src="https://www.flooringinc.com/static/version1789462004/frontend/Dcw/hyvadesktop/en_US/images/menu-icon.png" width="25" height="17" alt="menu-icon"></picture> 2163 </a> 2164 </div> 2165 </div> 2166 <div class="menu-overlay hidden" :class="{ 'hidden' : !open }" @click="$dispatch('toggle-mobile-menu')"></div> 2167 <nav 2168 class="hidden w-full h-full duration-150 ease-in-out transform transition-display pt-5 pr-5 pl-12" 2169 :class="{ 'hidden' : !open }" 2170 > 2171 <span class="menu-label text-size28 font-medium text-black pt-1 pb-4" :class="{ 'hidden' : !open, 'block': open }">Menu</span> 2172 <div class="nav-in overflow-y-auto overflow-x-hidden h-5/6"> 2173 <div class="level-0"> 2174 <span class="flex items-center transition-transform duration-150 ease-in-out transform mb-3"> 2175 <a class="flex items-center w-full cursor-pointer level-0 text-size24 font-medium text-black no-underline" 2176 @click="mobilePanelActiveId = 2177 mobilePanelActiveId === 'category-node-1826' ? 2178 0 : 'category-node-1826'" 2179 title="Flooring By Category"> 2180 Flooring By Category </a> 2181 <a class="absolute right-0 cursor-pointer menu_arw1" :class="{ 2182 'active' : mobilePanelActiveId, 2183 '' : !mobilePanelActiveId 2184 }" 2185 @click="mobilePanelActiveId = 2186 mobilePanelActiveId === 'category-node-1826' ? 2187 0 : 'category-node-1826'" 2188 > 2189 <picture><source type="image/webp" srcset="https://www.flooringinc.com/static/version1789462004/frontend/Dcw/hyvadesktop/en_US/images/menu-arw.webp"><img src="https://www.flooringinc.com/static/version1789462004/frontend/Dcw/hyvadesktop/en_US/images/menu-arw.png" width="17" height="10" alt="menu-arw"></picture> 2190 </a> 2191 </span> 2192 <div 2193 class="w-full h-full transition-transform duration-200 ease-in-out block transform" 2194 :class="{ 2195 'block' : mobilePanelActiveId !== 'category-node-1826', 2196 'hidden' : mobilePanelActiveId === 'category-node-1826', 2197 }" 2198 > 2199 2200 <li class="imgcat list-none relative" x-data="{ show: false }" > 2201 <a 2202 @click="show = !show" 2203 title="Rubber Flooring" 2204 class="flex items-center w-full cursor-pointer text-size18 font-normal text-black mb-4 mob-width-adjust" 2205 >
2206 <span> 2207 Rubber Flooring </span> 2208 </a> 2209 2210 <picture class="absolute menu_arw"><source type="image/webp" srcset="https://www.flooringinc.com/static/version1789462004/frontend/Dcw/hyvadesktop/en_US/images/menu-arw.webp"><img src="https://www.flooringinc.com/static/version1789462004/frontend/Dcw/hyvadesktop/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> 2211 <ul class="z-10 w-full" x-show="show"> 2212 <li class="level-2"> 2213 <a href="https://www.flooringinc.com/shop/rubber-flooring/all-rubber-flooring.html" 2214 title="All Rubber Flooring" 2215 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 2216 All Rubber Flooring</a> 2217 </li> 2218 <li class="level-2"> 2219 <a href="https://www.flooringinc.com/shop/rubber-flooring/rubber-rolls.html" 2220 title="Rubber Flooring Rolls" 2221 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 2222 Rubber Flooring Rolls</a> 2223 </li> 2224 <li class="level-2"> 2225 <a href="https://www.flooringinc.com/shop/rubber-flooring/rubber-tiles.html" 2226 title="Rubber Floor Tiles" 2227 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 2228 Rubber Floor Tiles</a> 2229 </li> 2230 <li class="level-2"> 2231 <a href="https://www.flooringinc.com/shop/rubber-flooring/rubber-mats.html" 2232 title="Rubber Mats" 2233 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 2234 Rubber Mats</a> 2235 </li> 2236 <li class="level-2"> 2237 <a href="https://www.flooringinc.com/shop/rubber-flooring/playground-flooring.html" 2238 title="Playground Flooring" 2239 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 2240 Playground Flooring</a> 2241 </li> 2242 <li class="level-2"> 2243 <a href="https://www.flooringinc.com/shop/rubber-flooring/outdoor-rubber-flooring.html" 2244 title="Outdoor Rubber Flooring" 2245 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 2246 Outdoor Rubber Flooring</a> 2247 </li> 2248 </ul> 2249 <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> 2250 2251 2252 2253 <li class="imgcat list-none relative" x-data="{ show: false }" > 2254 <a 2255 @click="show = !show" 2256 title="Garage Flooring" 2257 class="flex items-center w-full cursor-pointer text-size18 font-normal text-black mb-4 mob-width-adjust" 2258 >
2259 <span> 2260 Garage Flooring </span> 2261 </a> 2262 2263 <picture class="absolute menu_arw"><source type="image/webp" srcset="https://www.flooringinc.com/static/version1789462004/frontend/Dcw/hyvadesktop/en_US/images/menu-arw.webp"><img src="https://www.flooringinc.com/static/version1789462004/frontend/Dcw/hyvadesktop/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> 2264 <ul class="z-10 w-full" x-show="show"> 2265 <li class="level-2"> 2266 <a href="https://www.flooringinc.com/shop/garage-flooring/all-garage-flooring.html" 2267 title="All Garage Flooring" 2268 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 2269 All Garage Flooring</a> 2270 </li> 2271 <li class="level-2"> 2272 <a href="https://www.flooringinc.com/shop/garage-flooring/garage-rolls.html" 2273 title="Garage Flooring Rolls" 2274 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 2275 Garage Flooring Rolls</a> 2276 </li> 2277 <li class="level-2"> 2278 <a href="https://www.flooringinc.com/shop/garage-flooring/garage-tiles.html" 2279 title="Garage Floor Tiles" 2280 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 2281 Garage Floor Tiles</a> 2282 </li> 2283 <li class="level-2"> 2284 <a href="https://www.flooringinc.com/shop/garage-flooring/garage-gym-flooring.html" 2285 title="Garage Gym Flooring" 2286 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 2287 Garage Gym Flooring</a> 2288 </li> 2289 <li class="level-2"> 2290 <a href="https://www.flooringinc.com/shop/garage-flooring/coatings-epoxy.html" 2291 title="Garage Floor Epoxy" 2292 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 2293 Garage Floor Epoxy</a> 2294 </li> 2295 <li class="level-2"> 2296 <a href="https://www.flooringinc.com/shop/garage-flooring/trailer-flooring.html" 2297 title="Trailer Flooring" 2298 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 2299 Trailer Flooring</a> 2300 </li> 2301 </ul> 2302 <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> 2303 2304 2305 2306 <li class="imgcat list-none relative" x-data="{ show: false }" > 2307 <a 2308 @click="show = !show" 2309 title="Dance Flooring" 2310 class="flex items-center w-full cursor-pointer text-size18 font-normal text-black mb-4 mob-width-adjust" 2311 >
2312 <span> 2313 Dance Flooring </span> 2314 </a> 2315 2316 <picture class="absolute menu_arw"><source type="image/webp" srcset="https://www.flooringinc.com/static/version1789462004/frontend/Dcw/hyvadesktop/en_US/images/menu-arw.webp"><img src="https://www.flooringinc.com/static/version1789462004/frontend/Dcw/hyvadesktop/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> 2317 <ul class="z-10 w-full" x-show="show"> 2318 <li class="level-2"> 2319 <a href="https://www.flooringinc.com/shop/dance-flooring/marley-flooring.html" 2320 title="Marley Floor Rolls" 2321 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 2322 Marley Floor Rolls</a> 2323 </li> 2324 <li class="level-2"> 2325 <a href="https://www.flooringinc.com/shop/dance-flooring/dance-floor-tiles.html" 2326 title="Dance Floor Tiles" 2327 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 2328 Dance Floor Tiles</a> 2329 </li> 2330 <li class="level-2"> 2331 <a href="https://www.flooringinc.com/shop/dance-flooring/portable-dance-floor-kits.html" 2332 title="Portable Dance Floors & Kits" 2333 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 2334 Portable Dance Floors & Kits</a> 2335 </li> 2336 <li class="level-2"> 2337 <a href="https://www.flooringinc.com/shop/dance-flooring/subflooring.html" 2338 title="Subflooring" 2339 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 2340 Subflooring</a> 2341 </li> 2342 <li class="level-2"> 2343 <a href="https://www.flooringinc.com/shop/dance-flooring/adhesives-cleaners-accessories.html" 2344 title="Adhesives, Cleaners & Accessories" 2345 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 2346 Adhesives, Cleaners & Accessories</a> 2347 </li> 2348 <li class="level-2"> 2349 <a href="https://www.flooringinc.com/shop/dance-flooring/all-dance-flooring.html" 2350 title="All Dance Flooring" 2351 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 2352 All Dance Flooring</a> 2353 </li> 2354 </ul> 2355 <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> 2356 2357 2358 2359 <li class="imgcat list-none relative" x-data="{ show: false }" > 2360 <a 2361 @click="show = !show" 2362 title="Foam Flooring" 2363 class="flex items-center w-full cursor-pointer text-size18 font-normal text-black mb-4 mob-width-adjust" 2364 >
2365 <span> 2366 Foam Flooring </span> 2367 </a> 2368 2369 <picture class="absolute menu_arw"><source type="image/webp" srcset="https://www.flooringinc.com/static/version1789462004/frontend/Dcw/hyvadesktop/en_US/images/menu-arw.webp"><img src="https://www.flooringinc.com/static/version1789462004/frontend/Dcw/hyvadesktop/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> 2370 <ul class="z-10 w-full" x-show="show"> 2371 <li class="level-2"> 2372 <a href="https://www.flooringinc.com/shop/foam-flooring/foam-tiles.html" 2373 title="Foam Floor Tiles" 2374 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 2375 Foam Floor Tiles</a> 2376 </li> 2377 <li class="level-2"> 2378 <a href="https://www.flooringinc.com/shop/foam-flooring/kids-baby-play-mats.html" 2379 title="Kids & Baby Play Mats" 2380 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 2381 Kids & Baby Play Mats</a> 2382 </li> 2383 <li class="level-2"> 2384 <a href="https://www.flooringinc.com/shop/foam-flooring/gymnastic-folding-mats.html" 2385 title="Gymnastics Mats " 2386 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 2387 Gymnastics Mats </a> 2388 </li> 2389 <li class="level-2"> 2390 <a href="https://www.flooringinc.com/shop/foam-flooring/wrestling-mats.html" 2391 title="Wrestling Mats" 2392 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 2393 Wrestling Mats</a> 2394 </li> 2395 <li class="level-2"> 2396 <a href="https://www.flooringinc.com/shop/foam-flooring/martial-arts-mats.html" 2397 title="Martial Arts Mats " 2398 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 2399 Martial Arts Mats </a> 2400 </li> 2401 <li class="level-2"> 2402 <a href="https://www.flooringinc.com/shop/foam-flooring/trade-show-flooring.html" 2403 title="Trade Show Flooring" 2404 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 2405 Trade Show Flooring</a> 2406 </li> 2407 </ul> 2408 <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> 2409 2410 2411 2412 <li class="imgcat list-none relative" x-data="{ show: false }" > 2413 <a 2414 @click="show = !show" 2415 title="Outdoor Flooring" 2416 class="flex items-center w-full cursor-pointer text-size18 font-normal text-black mb-4 mob-width-adjust" 2417 >
2418 <span> 2419 Outdoor Flooring </span> 2420 </a> 2421 2422 <picture class="absolute menu_arw"><source type="image/webp" srcset="https://www.flooringinc.com/static/version1789462004/frontend/Dcw/hyvadesktop/en_US/images/menu-arw.webp"><img src="https://www.flooringinc.com/static/version1789462004/frontend/Dcw/hyvadesktop/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> 2423 <ul class="z-10 w-full" x-show="show"> 2424 <li class="level-2"> 2425 <a href="https://www.flooringinc.com/shop/outdoor-flooring/playground-flooring.html" 2426 title="Playground Flooring" 2427 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 2428 Playground Flooring</a> 2429 </li> 2430 <li class="level-2"> 2431 <a href="https://www.flooringinc.com/shop/outdoor-flooring/sport-and-court-flooring.html" 2432 title="Sports Flooring & Court Tiles" 2433 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 2434 Sports Flooring & Court Tiles</a> 2435 </li> 2436 <li class="level-2"> 2437 <a href="https://www.flooringinc.com/shop/outdoor-flooring/artificial-grass.html" 2438 title="Turf & Artificial Grass" 2439 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 2440 Turf & Artificial Grass</a> 2441 </li> 2442 <li class="level-2"> 2443 <a href="https://www.flooringinc.com/shop/outdoor-flooring/composite-decking.html" 2444 title="Composite Decking" 2445 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 2446 Composite Decking</a> 2447 </li> 2448 <li class="level-2"> 2449 <a href="https://www.flooringinc.com/shop/outdoor-flooring/rooftop-deck-flooring.html" 2450 title="Rooftop Deck Flooring" 2451 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 2452 Rooftop Deck Flooring</a> 2453 </li> 2454 <li class="level-2"> 2455 <a href="https://www.flooringinc.com/shop/outdoor-flooring/drainage-tiles.html" 2456 title="Drainage Tile & Mats" 2457 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 2458 Drainage Tile & Mats</a> 2459 </li> 2460 </ul> 2461 <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> 2462 2463 2464 2465 <li class="imgcat list-none relative" x-data="{ show: false }" > 2466 <a 2467 @click="show = !show" 2468 title="Turf & Artificial Grass" 2469 class="flex items-center w-full cursor-pointer text-size18 font-normal text-black mb-4 mob-width-adjust" 2470 >
2471 <span> 2472 Turf & Artificial Grass </span> 2473 </a> 2474 2475 <picture class="absolute menu_arw"><source type="image/webp" srcset="https://www.flooringinc.com/static/version1789462004/frontend/Dcw/hyvadesktop/en_US/images/menu-arw.webp"><img src="https://www.flooringinc.com/static/version1789462004/frontend/Dcw/hyvadesktop/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> 2476 <ul class="z-10 w-full" x-show="show"> 2477 <li class="level-2"> 2478 <a href="https://www.flooringinc.com/shop/artificial-grass/sport-field-turf.html" 2479 title="Sport & Gym Turf" 2480 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 2481 Sport & Gym Turf</a> 2482 </li> 2483 <li class="level-2"> 2484 <a href="https://www.flooringinc.com/shop/artificial-grass/landscape-turf.html" 2485 title="Landscape Turf" 2486 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 2487 Landscape Turf</a> 2488 </li> 2489 <li class="level-2"> 2490 <a href="https://www.flooringinc.com/shop/artificial-grass/pet-turf.html" 2491 title="Pet Turf" 2492 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 2493 Pet Turf</a> 2494 </li> 2495 <li class="level-2"> 2496 <a href="https://www.flooringinc.com/shop/artificial-grass/putting-greens.html" 2497 title="Golf & Putting Green Turf" 2498 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 2499 Golf & Putting Green Turf</a> 2500 </li> 2501 <li class="level-2"> 2502 <a href="https://www.flooringinc.com/shop/artificial-grass/turf-accessories.html" 2503 title="Turf Accessories" 2504 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 2505 Turf Accessories</a> 2506 </li> 2507 <li class="level-2"> 2508 <a href="https://www.flooringinc.com/shop/artificial-grass/all-artificial-grass.html" 2509 title="All Turf & Artificial Grass" 2510 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 2511 All Turf & Artificial Grass</a> 2512 </li> 2513 </ul> 2514 <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> 2515 2516 2517 2518 <li class="imgcat list-none relative" x-data="{ show: false }" > 2519 <a 2520 @click="show = !show" 2521 title="Carpet Tiles & Rolls" 2522 class="flex items-center w-full cursor-pointer text-size18 font-normal text-black mb-4 mob-width-adjust" 2523 >
2524 <span> 2525 Carpet Tiles & Rolls </span> 2526 </a> 2527 2528 <picture class="absolute menu_arw"><source type="image/webp" srcset="https://www.flooringinc.com/static/version1789462004/frontend/Dcw/hyvadesktop/en_US/images/menu-arw.webp"><img src="https://www.flooringinc.com/static/version1789462004/frontend/Dcw/hyvadesktop/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> 2529 <ul class="z-10 w-full" x-show="show"> 2530 <li class="level-2"> 2531 <a href="https://www.flooringinc.com/shop/carpet/carpet-tiles.html" 2532 title="Carpet Tiles" 2533 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 2534 Carpet Tiles</a> 2535 </li> 2536 <li class="level-2"> 2537 <a href="https://www.flooringinc.com/shop/carpet/carpet-rolls.html" 2538 title="Carpet Rolls" 2539 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 2540 Carpet Rolls</a> 2541 </li> 2542 <li class="level-2"> 2543 <a href="https://www.flooringinc.com/shop/carpet/home-theater-carpet.html" 2544 title="Home Theater Carpet" 2545 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 2546 Home Theater Carpet</a> 2547 </li> 2548 <li class="level-2"> 2549 <a href="https://www.flooringinc.com/shop/carpet/peel-stick-carpet.html" 2550 title="Peel and Stick Carpet Tiles" 2551 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 2552 Peel and Stick Carpet Tiles</a> 2553 </li> 2554 <li class="level-2"> 2555 <a href="https://www.flooringinc.com/shop/carpet/outdoor-carpet.html" 2556 title="Outdoor Carpet" 2557 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 2558 Outdoor Carpet</a> 2559 </li> 2560 <li class="level-2"> 2561 <a href="https://www.flooringinc.com/shop/carpet/waterproof-carpet.html" 2562 title="Waterproof Carpet" 2563 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 2564 Waterproof Carpet</a> 2565 </li> 2566 </ul> 2567 <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> 2568 2569 2570 2571 <li class="imgcat list-none relative" x-data="{ show: false }" > 2572 <a 2573 @click="show = !show" 2574 title="Vinyl Flooring" 2575 class="flex items-center w-full cursor-pointer text-size18 font-normal text-black mb-4 mob-width-adjust" 2576 >
2577 <span> 2578 Vinyl Flooring </span> 2579 </a> 2580 2581 <picture class="absolute menu_arw"><source type="image/webp" srcset="https://www.flooringinc.com/static/version1789462004/frontend/Dcw/hyvadesktop/en_US/images/menu-arw.webp"><img src="https://www.flooringinc.com/static/version1789462004/frontend/Dcw/hyvadesktop/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/vinyl/vinyl-sheet.html" 2585 title="Vinyl Sheet Flooring" 2586 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 2587 Vinyl Sheet Flooring</a> 2588 </li> 2589 <li class="level-2"> 2590 <a href="https://www.flooringinc.com/shop/vinyl/vinyl-tiles-planks.html" 2591 title="Vinyl Tiles & Planks" 2592 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 2593 Vinyl Tiles & Planks</a> 2594 </li> 2595 <li class="level-2"> 2596 <a href="https://www.flooringinc.com/shop/vinyl/waterproof-vinyl.html" 2597 title="Waterproof Vinyl Flooring" 2598 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 2599 Waterproof Vinyl Flooring</a> 2600 </li> 2601 <li class="level-2"> 2602 <a href="https://www.flooringinc.com/shop/vinyl/rigid-core-vinyl.html" 2603 title="Rigid Core Vinyl Flooring" 2604 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 2605 Rigid Core Vinyl Flooring</a> 2606 </li> 2607 <li class="level-2"> 2608 <a href="https://www.flooringinc.com/shop/vinyl/commercial-vinyl.html" 2609 title="Commercial Vinyl Flooring" 2610 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 2611 Commercial Vinyl Flooring</a> 2612 </li> 2613 </ul> 2614 2615 2616 2617 <li class="imgcat list-none relative" x-data="{ show: false }" > 2618 <a 2619 @click="show = !show" 2620 title="Wood & Laminate Flooring" 2621 class="flex items-center w-full cursor-pointer text-size18 font-normal text-black mb-4 mob-width-adjust" 2622 >
2623 <span> 2624 Wood & Laminate Flooring </span> 2625 </a> 2626 2627 <picture class="absolute menu_arw"><source type="image/webp" srcset="https://www.flooringinc.com/static/version1789462004/frontend/Dcw/hyvadesktop/en_US/images/menu-arw.webp"><img src="https://www.flooringinc.com/static/version1789462004/frontend/Dcw/hyvadesktop/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> 2628 <ul class="z-10 w-full" x-show="show"> 2629 <li class="level-2"> 2630 <a href="https://www.flooringinc.com/shop/wood-laminate/waterproof-laminate.html" 2631 title="Waterproof Laminate Flooring" 2632 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 2633 Waterproof Laminate Flooring</a> 2634 </li> 2635 <li class="level-2"> 2636 <a href="https://www.flooringinc.com/shop/wood-laminate/laminate.html" 2637 title="Laminate Flooring" 2638 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 2639 Laminate Flooring</a> 2640 </li> 2641 <li class="level-2"> 2642 <a href="https://www.flooringinc.com/shop/wood-laminate/hardwood.html" 2643 title="Engineered Hardwood Flooring" 2644 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 2645 Engineered Hardwood Flooring</a> 2646 </li> 2647 <li class="level-2"> 2648 <a href="https://www.flooringinc.com/shop/wood-laminate/oak.html" 2649 title="Oak Wood Flooring" 2650 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 2651 Oak Wood Flooring</a> 2652 </li> 2653 <li class="level-2"> 2654 <a href="https://www.flooringinc.com/shop/wood-laminate/commercial-wood-laminate.html" 2655 title="Commercial Wood & Laminate" 2656 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 2657 Commercial Wood & Laminate</a> 2658 </li> 2659 </ul> 2660 2661 2662 2663 <li class="imgcat list-none relative" x-data="{ show: false }" > 2664 <a 2665 @click="show = !show" 2666 title="Commercial Flooring" 2667 class="flex items-center w-full cursor-pointer text-size18 font-normal text-black mb-4 mob-width-adjust" 2668 >
2669 <span> 2670 Commercial Flooring </span> 2671 </a> 2672 2673 <picture class="absolute menu_arw"><source type="image/webp" srcset="https://www.flooringinc.com/static/version1789462004/frontend/Dcw/hyvadesktop/en_US/images/menu-arw.webp"><img src="https://www.flooringinc.com/static/version1789462004/frontend/Dcw/hyvadesktop/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> 2674 <ul class="z-10 w-full" x-show="show"> 2675 <li class="level-2"> 2676 <a href="https://www.flooringinc.com/shop/commercial-flooring/commercial-rubber-flooring.html" 2677 title="Commercial Rubber Flooring" 2678 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 2679 Commercial Rubber Flooring</a> 2680 </li> 2681 <li class="level-2"> 2682 <a href="https://www.flooringinc.com/shop/commercial-flooring/commercial-garage-flooring.html" 2683 title="Commercial Garage Flooring" 2684 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 2685 Commercial Garage Flooring</a> 2686 </li> 2687 <li class="level-2"> 2688 <a href="https://www.flooringinc.com/shop/commercial-flooring/commercial-carpet.html" 2689 title="Commercial Carpet Tiles" 2690 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 2691 Commercial Carpet Tiles</a> 2692 </li> 2693 <li class="level-2"> 2694 <a href="https://www.flooringinc.com/shop/commercial-flooring/commercial-vinyl.html" 2695 title="Commercial Vinyl Flooring" 2696 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 2697 Commercial Vinyl Flooring</a> 2698 </li> 2699 <li class="level-2"> 2700 <a href="https://www.flooringinc.com/shop/commercial-flooring/commercial-wood-laminate.html" 2701 title="Commercial Wood & Laminate Flooring" 2702 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 2703 Commercial Wood & Laminate Flooring</a> 2704 </li> 2705 <li class="level-2"> 2706 <a href="https://www.flooringinc.com/shop/commercial-flooring/gym-floor-covers-protection.html" 2707 title="Gym Floor Covers | Floor Protection" 2708 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 2709 Gym Floor Covers | Floor Protection</a> 2710 </li> 2711 </ul> 2712 <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> 2713 2714 2715 2716 <li class="imgcat list-none relative" x-data="{ show: false }" > 2717 <a 2718 @click="show = !show" 2719 title="Floors by Activity" 2720 class="flex items-center w-full cursor-pointer text-size18 font-normal text-black mb-4 mob-width-adjust" 2721 >
2722 <span> 2723 Floors by Activity </span> 2724 </a> 2725 2726 <picture class="absolute menu_arw"><source type="image/webp" srcset="https://www.flooringinc.com/static/version1789462004/frontend/Dcw/hyvadesktop/en_US/images/menu-arw.webp"><img src="https://www.flooringinc.com/static/version1789462004/frontend/Dcw/hyvadesktop/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> 2727 <ul class="z-10 w-full" x-show="show"> 2728 <li class="level-2"> 2729 <a href="https://www.flooringinc.com/shop/shop-by-activity/fitness-flooring.html" 2730 title="Fitness Flooring" 2731 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 2732 Fitness Flooring</a> 2733 </li> 2734 <li class="level-2"> 2735 <a href="https://www.flooringinc.com/shop/shop-by-activity/dance-marley-flooring.html" 2736 title="Dance Flooring | Marley Floor" 2737 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 2738 Dance Flooring | Marley Floor</a> 2739 </li> 2740 <li class="level-2"> 2741 <a href="https://www.flooringinc.com/shop/shop-by-activity/sport-and-court-flooring.html" 2742 title="Sport & Court Flooring" 2743 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 2744 Sport & Court Flooring</a> 2745 </li> 2746 <li class="level-2"> 2747 <a href="https://www.flooringinc.com/shop/shop-by-activity/martial-arts-flooring.html" 2748 title="Martial Arts Mats " 2749 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 2750 Martial Arts Mats </a> 2751 </li> 2752 <li class="level-2"> 2753 <a href="https://www.flooringinc.com/shop/shop-by-activity/cheer-mats.html" 2754 title="Cheer Mats" 2755 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 2756 Cheer Mats</a> 2757 </li> 2758 <li class="level-2"> 2759 <a href="https://www.flooringinc.com/shop/shop-by-activity/wrestling-mats.html" 2760 title="Wrestling Mats" 2761 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 2762 Wrestling Mats</a> 2763 </li> 2764 </ul> 2765 <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> 2766 2767 2768 2769 <li class="imgcat list-none relative" x-data="{ show: false }" > 2770 <a 2771 @click="show = !show" 2772 title="Floors by Space" 2773 class="flex items-center w-full cursor-pointer text-size18 font-normal text-black mb-4 mob-width-adjust" 2774 >
2775 <span> 2776 Floors by Space </span> 2777 </a> 2778 2779 <picture class="absolute menu_arw"><source type="image/webp" srcset="https://www.flooringinc.com/static/version1789462004/frontend/Dcw/hyvadesktop/en_US/images/menu-arw.webp"><img src="https://www.flooringinc.com/static/version1789462004/frontend/Dcw/hyvadesktop/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> 2780 <ul class="z-10 w-full" x-show="show"> 2781 <li class="level-2"> 2782 <a href="https://www.flooringinc.com/shop/shop-by-space/kitchen-flooring.html" 2783 title="Kitchen Flooring" 2784 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 2785 Kitchen Flooring</a> 2786 </li> 2787 <li class="level-2"> 2788 <a href="https://www.flooringinc.com/shop/shop-by-space/bathroom-flooring.html" 2789 title="Bathroom Flooring" 2790 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 2791 Bathroom Flooring</a> 2792 </li> 2793 <li class="level-2"> 2794 <a href="https://www.flooringinc.com/shop/shop-by-space/commercial-flooring.html" 2795 title="Commercial Flooring" 2796 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 2797 Commercial Flooring</a> 2798 </li> 2799 <li class="level-2"> 2800 <a href="https://www.flooringinc.com/shop/shop-by-space/gym-flooring.html" 2801 title="Gym Flooring" 2802 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 2803 Gym Flooring</a> 2804 </li> 2805 <li class="level-2"> 2806 <a href="https://www.flooringinc.com/shop/shop-by-space/garage-flooring.html" 2807 title="Garage Flooring" 2808 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 2809 Garage Flooring</a> 2810 </li> 2811 <li class="level-2"> 2812 <a href="https://www.flooringinc.com/shop/shop-by-space/outdoor-flooring.html" 2813 title="Outdoor Flooring" 2814 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 2815 Outdoor Flooring</a> 2816 </li> 2817 </ul> 2818 <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> 2819 2820 2821 2822 <li class="imgcat list-none relative" x-data="{ show: false }" > 2823 <a 2824 @click="show = !show" 2825 title="Underlayment & Flooring Accessories" 2826 class="flex items-center w-full cursor-pointer text-size18 font-normal text-black mb-4 mob-width-adjust" 2827 >
2828 <span> 2829 Underlayment & Flooring Accessories </span> 2830 </a> 2831 2832 <picture class="absolute menu_arw"><source type="image/webp" srcset="https://www.flooringinc.com/static/version1789462004/frontend/Dcw/hyvadesktop/en_US/images/menu-arw.webp"><img src="https://www.flooringinc.com/static/version1789462004/frontend/Dcw/hyvadesktop/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> 2833 <ul class="z-10 w-full" x-show="show"> 2834 <li class="level-2"> 2835 <a href="https://www.flooringinc.com/shop/installation-care/adhesives-glue.html" 2836 title="Flooring Adhesives & Glue" 2837 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 2838 Flooring Adhesives & Glue</a> 2839 </li> 2840 <li class="level-2"> 2841 <a href="https://www.flooringinc.com/shop/installation-care/tape.html" 2842 title="Floor and Mat Tape" 2843 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 2844 Floor and Mat Tape</a> 2845 </li> 2846 <li class="level-2"> 2847 <a href="https://www.flooringinc.com/shop/installation-care/accessories.html" 2848 title="Installation Accessories" 2849 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 2850 Installation Accessories</a> 2851 </li> 2852 <li class="level-2"> 2853 <a href="https://www.flooringinc.com/shop/installation-care/trims-moldings.html" 2854 title="Floor Trims & Moldings" 2855 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 2856 Floor Trims & Moldings</a> 2857 </li> 2858 <li class="level-2"> 2859 <a href="https://www.flooringinc.com/shop/installation-care/underlayment.html" 2860 title="Flooring Underlayment" 2861 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 2862 Flooring Underlayment</a> 2863 </li> 2864 <li class="level-2"> 2865 <a href="https://www.flooringinc.com/shop/installation-care/cleaners.html" 2866 title="Flooring Cleaners" 2867 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 2868 Flooring Cleaners</a> 2869 </li> 2870 </ul> 2871 <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> 2872 2873 2874 2875 <li class="imgcat list-none relative" x-data="{ show: false }" > 2876 <a 2877 @click="show = !show" 2878 title="Specials" 2879 class="flex items-center w-full cursor-pointer text-size18 font-normal text-black mb-4 mob-width-adjust" 2880 >
2881 <span> 2882 Specials </span> 2883 </a> 2884 2885 <picture class="absolute menu_arw"><source type="image/webp" srcset="https://www.flooringinc.com/static/version1789462004/frontend/Dcw/hyvadesktop/en_US/images/menu-arw.webp"><img src="https://www.flooringinc.com/static/version1789462004/frontend/Dcw/hyvadesktop/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> 2886 <ul class="z-10 w-full" x-show="show"> 2887 <li class="level-2"> 2888 <a href="https://www.flooringinc.com/shop/specials/hot-buys.html" 2889 title="Flooring Deals" 2890 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 2891 Flooring Deals</a> 2892 </li> 2893 <li class="level-2"> 2894 <a href="https://www.flooringinc.com/shop/specials/made-in-usa.html" 2895 title="American Made" 2896 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 2897 American Made</a> 2898 </li> 2899 <li class="level-2"> 2900 <a href="https://www.flooringinc.com/shop/specials/quick-ship.html" 2901 title="Quick Ship" 2902 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 2903 Quick Ship</a> 2904 </li> 2905 <li class="level-2"> 2906 <a href="https://www.flooringinc.com/shop/specials/new-arrivals.html" 2907 title="New Arrivals" 2908 class="level-2 pl-5 flex items-center w-full cursor-pointer text-size16 font-normal text-black mb-4"> 2909 New Arrivals</a> 2910 </li> 2911 </ul> 2912 2913 2914 </div> 2915 2916 2917 </div> 2918 <div class="menu_static_links"> 2919 <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> 2920<li><a tabindex="0" href="/shop-by-category/specials/hot-buys.html">Sale</a></li> 2921<li><a tabindex="0" href="/blog">Get Inspired & How To</a></li> 2922</ul></div></div></div> </div> 2923 </div> 2924 </nav> 2925 </div> 2926</div>
2927<script> 2928 'use strict'; 2929 2930 const initMenuMobile_6ab67d17cd4a9 = () => { 2931 return { 2932 mobilePanelActiveId: null, 2933 open: false, 2934 setActiveMenu(menuNode) { 2935 Array.from(menuNode.querySelectorAll('a')).filter(link => { 2936 return link.href === window.location.href.split('?')[0]; 2937 }).map(item => { 2938 item.classList.add('underline'); 2939 item.closest('div.level-0') && 2940 item.closest('div.level-0').querySelector('a.level-0').classList.add('underline'); 2941 }); 2942 } 2943 } 2944 } 2945 2946 window.addEventListener("scroll", function() { 2947 successMsgSticky2(); 2948 }); 2949 2950 // sticky header 2951 function successMsgSticky2() { 2952 if (window.innerWidth < 767) { 2953 var headerHeight = document.querySelector('.page-header .panel.wrapper').offsetHeight; 2954 var headerMainHeight = document.getElementById('header').offsetHeight; 2955 var scrollTop = window.scrollY; 2956 2957 if (scrollTop >= headerHeight) { 2958 document.body.classList.add('scroll-reached-hHgt'); 2959 document.body.style.paddingTop = headerMainHeight + 'px'; 2960 } else { 2961 document.body.classList.remove('scroll-reached-hHgt'); 2962 document.body.style.paddingTop = '0'; 2963 } 2964 } 2965 } 2966 2967 window.addEventListener("load", function() { 2968 successMsgSticky2(); 2969 }); 2970</script>
2970 2971<div x-data="initMenuDesktop_6ab67d17d86df()" 2972 class="z-20 order-2 sm:order-1 lg:order-2 navigation hidden xl:flex desktop__menu" 2973> 2974 <!-- desktop --> 2975 <div @load.window="setActiveMenu($root)" 2976 class="justify-between items-center mx-auto w-full max-w-7xl pl-2" 2977 > 2978 <nav 2979 class="flex flex-wrap" 2980 > 2981 <div class="level-0 flex py-2 items-center border-transparent transition transition-colors duration-500 group megamenu_items" :class="{ 'block' : open}" 2982 @mouseover.stop="hoverTopPosition = $event.currentTarget.offsetTop + $event.currentTarget.getBoundingClientRect().height" 2983 @mouseenter="desktopMegaMenuShow = true" @mouseleave="desktopMegaMenuShow = false" 2984 x-data="{ desktopMegaMenuShow: false }" 2985 > 2986 <!-- <a href="https://www.flooringinc.com/shop.html" --> 2987 <a 2988 @focus="hoverTopPosition = $event.currentTarget.parentNode.offsetTop + $event.currentTarget.parentNode.getBoundingClientRect().height" 2989 title="Flooring By Category" 2990 class="level-0 block p-2 text-base font-medium text-black whitespace-nowrap cursor-pointer megamenu_items_link"> 2991 <span>Flooring By Category</span> 2992 <span class="inline items-center releat"> 2993 <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"> 2994 <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"/> 2995<title>chevron-down</title></svg> 2996 </span> 2997 </a> 2998 <template x-if="desktopMegaMenuShow"> 2999 <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" 3000 style="display:none;" 3001 :style="`margin-top: 0; top: ${hoverTopPosition}px;`" 3002 > 3003 <div class="flex justify-between mt-0 mb-0 sub-megamenu"> 3004 <div class="mx-auto w-full"> 3005 <ul class="grid flex-1 w-full gap-y-0 gap-x-0 py-4 px-5 relative"> 3006 3007 <li :class="{ 'active': show }" class="level-1 level1 display-first" x-data="{ show: true }" 3008 x-on:click="show = true; removeDisplayFirst()" @click.away="show = false" 3009 > 3010 <a 3011 title="Rubber Flooring" 3012 class="level-1 w-1/4 py-1/5 px-6 text-size13 block text-sm rounded text-darkblack relative" 3013 3014 > 3015 Rubber Flooring 3016 <span class="inline items-center rotate-180 absolute"> 3017 <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"> 3018 <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"/> 3019<title>chevron-down</title></svg> 3020 </span> 3021 </a> 3022 3023 <div class="2xl:block w-1/4 mega-menu-rightBlock absolute top-0 right-0" x-show="show"> 3024 <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> 3025 3026 <ul class="z-10 w-1/2 absolute top-0 level2 flex flex-wrap pt-3 megamenu-extrablock" x-show="show">
3027 <span class="block w-full text-size28 font-medium no-underline text-darkblack pb-2">Rubber Flooring</span> 3028 3029 <li class="level-2 w-4/12 pr-6 pb-6"> 3030 <a href="https://www.flooringinc.com/shop/rubber-flooring/all-rubber-flooring.html" 3031 title="All Rubber Flooring" 3032 class="level-2 block"> 3033 <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> 3034 3035 <span class="block text-sm font-medium no-underline text-darkblack pr-4">All Rubber Flooring</span></a> 3036 </li> 3037 3038 <li class="level-2 w-4/12 pr-6 pb-6"> 3039 <a href="https://www.flooringinc.com/shop/rubber-flooring/rubber-rolls.html" 3040 title="Rubber Flooring Rolls" 3041 class="level-2 block"> 3042 <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> 3043 3044 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Rubber Flooring Rolls</span></a> 3045 </li> 3046 3047 <li class="level-2 w-4/12 pr-6 pb-6"> 3048 <a href="https://www.flooringinc.com/shop/rubber-flooring/rubber-tiles.html" 3049 title="Rubber Floor Tiles" 3050 class="level-2 block"> 3051 <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> 3052
3053 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Rubber Floor Tiles</span></a> 3054 </li> 3055 3056 <li class="level-2 w-4/12 pr-6 pb-6"> 3057 <a href="https://www.flooringinc.com/shop/rubber-flooring/rubber-mats.html" 3058 title="Rubber Mats" 3059 class="level-2 block"> 3060 <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> 3061 3062 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Rubber Mats</span></a> 3063 </li> 3064 3065 <li class="level-2 w-4/12 pr-6 pb-6"> 3066 <a href="https://www.flooringinc.com/shop/rubber-flooring/playground-flooring.html" 3067 title="Playground Flooring" 3068 class="level-2 block"> 3069 <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> 3070 3071 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Playground Flooring</span></a> 3072 </li> 3073 3074 <li class="level-2 w-4/12 pr-6 pb-6"> 3075 <a href="https://www.flooringinc.com/shop/rubber-flooring/outdoor-rubber-flooring.html" 3076 title="Outdoor Rubber Flooring" 3077 class="level-2 block"> 3078 <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> 3079
3080 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Outdoor Rubber Flooring</span></a> 3081 </li> 3082 3083 3084 <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> 3085 3086 3087 </ul> 3088 </li> 3089 3090 3091 3092 <li :class="{ 'active': show }" class="level-1 level1 " x-data="{ show: false }" 3093 x-on:click="show = true; removeDisplayFirst()" @click.away="show = false" 3094 > 3095 <a 3096 title="Garage Flooring" 3097 class="level-1 w-1/4 py-1/5 px-6 text-size13 block text-sm rounded text-darkblack relative" 3098 3099 > 3100 Garage Flooring 3101 <span class="inline items-center rotate-180 absolute"> 3102 <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"> 3103 <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"/> 3104<title>chevron-down</title></svg> 3105 </span> 3106 </a> 3107 3108 <div class="2xl:block w-1/4 mega-menu-rightBlock absolute top-0 right-0" x-show="show"> 3109 <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> 3110 3111 <ul class="z-10 w-1/2 absolute top-0 level2 flex flex-wrap pt-3 megamenu-extrablock" x-show="show">
3112 <span class="block w-full text-size28 font-medium no-underline text-darkblack pb-2">Garage Flooring</span> 3113 3114 <li class="level-2 w-4/12 pr-6 pb-6"> 3115 <a href="https://www.flooringinc.com/shop/garage-flooring/all-garage-flooring.html" 3116 title="All Garage Flooring" 3117 class="level-2 block"> 3118 <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> 3119 3120 <span class="block text-sm font-medium no-underline text-darkblack pr-4">All Garage Flooring</span></a> 3121 </li> 3122 3123 <li class="level-2 w-4/12 pr-6 pb-6"> 3124 <a href="https://www.flooringinc.com/shop/garage-flooring/garage-rolls.html" 3125 title="Garage Flooring Rolls" 3126 class="level-2 block"> 3127 <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> 3128 3129 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Garage Flooring Rolls</span></a> 3130 </li> 3131 3132 <li class="level-2 w-4/12 pr-6 pb-6"> 3133 <a href="https://www.flooringinc.com/shop/garage-flooring/garage-tiles.html" 3134 title="Garage Floor Tiles" 3135 class="level-2 block"> 3136 <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> 3137
3138 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Garage Floor Tiles</span></a> 3139 </li> 3140 3141 <li class="level-2 w-4/12 pr-6 pb-6"> 3142 <a href="https://www.flooringinc.com/shop/garage-flooring/garage-gym-flooring.html" 3143 title="Garage Gym Flooring" 3144 class="level-2 block"> 3145 <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> 3146 3147 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Garage Gym Flooring</span></a> 3148 </li> 3149 3150 <li class="level-2 w-4/12 pr-6 pb-6"> 3151 <a href="https://www.flooringinc.com/shop/garage-flooring/coatings-epoxy.html" 3152 title="Garage Floor Epoxy" 3153 class="level-2 block"> 3154 <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> 3155 3156 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Garage Floor Epoxy</span></a> 3157 </li> 3158 3159 <li class="level-2 w-4/12 pr-6 pb-6"> 3160 <a href="https://www.flooringinc.com/shop/garage-flooring/trailer-flooring.html" 3161 title="Trailer Flooring" 3162 class="level-2 block"> 3163 <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> 3164
3165 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Trailer Flooring</span></a> 3166 </li> 3167 3168 3169 <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> 3170 3171 3172 </ul> 3173 </li> 3174 3175 3176 3177 <li :class="{ 'active': show }" class="level-1 level1 " x-data="{ show: false }" 3178 x-on:click="show = true; removeDisplayFirst()" @click.away="show = false" 3179 > 3180 <a 3181 title="Dance Flooring" 3182 class="level-1 w-1/4 py-1/5 px-6 text-size13 block text-sm rounded text-darkblack relative" 3183 3184 > 3185 Dance Flooring 3186 <span class="inline items-center rotate-180 absolute"> 3187 <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"> 3188 <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"/> 3189<title>chevron-down</title></svg> 3190 </span> 3191 </a> 3192 3193 <div class="2xl:block w-1/4 mega-menu-rightBlock absolute top-0 right-0" x-show="show"> 3194 <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> 3195 3196 <ul class="z-10 w-1/2 absolute top-0 level2 flex flex-wrap pt-3 megamenu-extrablock" x-show="show">
3197 <span class="block w-full text-size28 font-medium no-underline text-darkblack pb-2">Dance Flooring</span> 3198 3199 <li class="level-2 w-4/12 pr-6 pb-6"> 3200 <a href="https://www.flooringinc.com/shop/dance-flooring/marley-flooring.html" 3201 title="Marley Floor Rolls" 3202 class="level-2 block"> 3203 <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> 3204 3205 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Marley Floor Rolls</span></a> 3206 </li> 3207 3208 <li class="level-2 w-4/12 pr-6 pb-6"> 3209 <a href="https://www.flooringinc.com/shop/dance-flooring/dance-floor-tiles.html" 3210 title="Dance Floor Tiles" 3211 class="level-2 block"> 3212 <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> 3213 3214 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Dance Floor Tiles</span></a> 3215 </li> 3216 3217 <li class="level-2 w-4/12 pr-6 pb-6"> 3218 <a href="https://www.flooringinc.com/shop/dance-flooring/portable-dance-floor-kits.html" 3219 title="Portable Dance Floors & Kits" 3220 class="level-2 block"> 3221 <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> 3222
3223 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Portable Dance Floors & Kits</span></a> 3224 </li> 3225 3226 <li class="level-2 w-4/12 pr-6 pb-6"> 3227 <a href="https://www.flooringinc.com/shop/dance-flooring/subflooring.html" 3228 title="Subflooring" 3229 class="level-2 block"> 3230 <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> 3231 3232 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Subflooring</span></a> 3233 </li> 3234 3235 <li class="level-2 w-4/12 pr-6 pb-6"> 3236 <a href="https://www.flooringinc.com/shop/dance-flooring/adhesives-cleaners-accessories.html" 3237 title="Adhesives, Cleaners & Accessories" 3238 class="level-2 block"> 3239 <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> 3240 3241 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Adhesives, Cleaners & Accessories</span></a> 3242 </li> 3243 3244 <li class="level-2 w-4/12 pr-6 pb-6"> 3245 <a href="https://www.flooringinc.com/shop/dance-flooring/all-dance-flooring.html" 3246 title="All Dance Flooring" 3247 class="level-2 block"> 3248 <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> 3249
3250 <span class="block text-sm font-medium no-underline text-darkblack pr-4">All Dance Flooring</span></a> 3251 </li> 3252 3253 3254 <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> 3255 3256 3257 </ul> 3258 </li> 3259 3260 3261 3262 <li :class="{ 'active': show }" class="level-1 level1 " x-data="{ show: false }" 3263 x-on:click="show = true; removeDisplayFirst()" @click.away="show = false" 3264 > 3265 <a 3266 title="Foam Flooring" 3267 class="level-1 w-1/4 py-1/5 px-6 text-size13 block text-sm rounded text-darkblack relative" 3268 3269 > 3270 Foam Flooring 3271 <span class="inline items-center rotate-180 absolute"> 3272 <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"> 3273 <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"/> 3274<title>chevron-down</title></svg> 3275 </span> 3276 </a> 3277 3278 <div class="2xl:block w-1/4 mega-menu-rightBlock absolute top-0 right-0" x-show="show"> 3279 <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> 3280 3281 <ul class="z-10 w-1/2 absolute top-0 level2 flex flex-wrap pt-3 megamenu-extrablock" x-show="show">
3282 <span class="block w-full text-size28 font-medium no-underline text-darkblack pb-2">Foam Flooring</span> 3283 3284 <li class="level-2 w-4/12 pr-6 pb-6"> 3285 <a href="https://www.flooringinc.com/shop/foam-flooring/foam-tiles.html" 3286 title="Foam Floor Tiles" 3287 class="level-2 block"> 3288 <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> 3289 3290 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Foam Floor Tiles</span></a> 3291 </li> 3292 3293 <li class="level-2 w-4/12 pr-6 pb-6"> 3294 <a href="https://www.flooringinc.com/shop/foam-flooring/kids-baby-play-mats.html" 3295 title="Kids & Baby Play Mats" 3296 class="level-2 block"> 3297 <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> 3298 3299 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Kids & Baby Play Mats</span></a> 3300 </li> 3301 3302 <li class="level-2 w-4/12 pr-6 pb-6"> 3303 <a href="https://www.flooringinc.com/shop/foam-flooring/gymnastic-folding-mats.html" 3304 title="Gymnastics Mats " 3305 class="level-2 block"> 3306 <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> 3307
3308 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Gymnastics Mats </span></a> 3309 </li> 3310 3311 <li class="level-2 w-4/12 pr-6 pb-6"> 3312 <a href="https://www.flooringinc.com/shop/foam-flooring/wrestling-mats.html" 3313 title="Wrestling Mats" 3314 class="level-2 block"> 3315 <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> 3316 3317 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Wrestling Mats</span></a> 3318 </li> 3319 3320 <li class="level-2 w-4/12 pr-6 pb-6"> 3321 <a href="https://www.flooringinc.com/shop/foam-flooring/martial-arts-mats.html" 3322 title="Martial Arts Mats " 3323 class="level-2 block"> 3324 <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> 3325 3326 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Martial Arts Mats </span></a> 3327 </li> 3328 3329 <li class="level-2 w-4/12 pr-6 pb-6"> 3330 <a href="https://www.flooringinc.com/shop/foam-flooring/trade-show-flooring.html" 3331 title="Trade Show Flooring" 3332 class="level-2 block"> 3333 <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> 3334
3335 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Trade Show Flooring</span></a> 3336 </li> 3337 3338 3339 <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> 3340 3341 3342 </ul> 3343 </li> 3344 3345 3346 3347 <li :class="{ 'active': show }" class="level-1 level1 " x-data="{ show: false }" 3348 x-on:click="show = true; removeDisplayFirst()" @click.away="show = false" 3349 > 3350 <a 3351 title="Outdoor Flooring" 3352 class="level-1 w-1/4 py-1/5 px-6 text-size13 block text-sm rounded text-darkblack relative" 3353 3354 > 3355 Outdoor Flooring 3356 <span class="inline items-center rotate-180 absolute"> 3357 <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"> 3358 <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"/> 3359<title>chevron-down</title></svg> 3360 </span> 3361 </a> 3362 3363 <div class="2xl:block w-1/4 mega-menu-rightBlock absolute top-0 right-0" x-show="show"> 3364 <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.
3364webp"><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> 3365 3366 <ul class="z-10 w-1/2 absolute top-0 level2 flex flex-wrap pt-3 megamenu-extrablock" x-show="show"> 3367 <span class="block w-full text-size28 font-medium no-underline text-darkblack pb-2">Outdoor Flooring</span> 3368 3369 <li class="level-2 w-4/12 pr-6 pb-6"> 3370 <a href="https://www.flooringinc.com/shop/outdoor-flooring/playground-flooring.html" 3371 title="Playground Flooring" 3372 class="level-2 block"> 3373 <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> 3374 3375 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Playground Flooring</span></a> 3376 </li> 3377 3378 <li class="level-2 w-4/12 pr-6 pb-6"> 3379 <a href="https://www.flooringinc.com/shop/outdoor-flooring/sport-and-court-flooring.html" 3380 title="Sports Flooring & Court Tiles" 3381 class="level-2 block"> 3382 <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> 3383
3384 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Sports Flooring & Court Tiles</span></a> 3385 </li> 3386 3387 <li class="level-2 w-4/12 pr-6 pb-6"> 3388 <a href="https://www.flooringinc.com/shop/outdoor-flooring/artificial-grass.html" 3389 title="Turf & Artificial Grass" 3390 class="level-2 block"> 3391 <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> 3392 3393 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Turf & Artificial Grass</span></a> 3394 </li> 3395 3396 <li class="level-2 w-4/12 pr-6 pb-6"> 3397 <a href="https://www.flooringinc.com/shop/outdoor-flooring/composite-decking.html" 3398 title="Composite Decking" 3399 class="level-2 block"> 3400 <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> 3401 3402 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Composite Decking</span></a> 3403 </li> 3404 3405 <li class="level-2 w-4/12 pr-6 pb-6"> 3406 <a href="https://www.flooringinc.com/shop/outdoor-flooring/rooftop-deck-flooring.html" 3407 title="Rooftop Deck Flooring" 3408 class="level-2 block"> 3409 <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> 3410
3411 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Rooftop Deck Flooring</span></a> 3412 </li> 3413 3414 <li class="level-2 w-4/12 pr-6 pb-6"> 3415 <a href="https://www.flooringinc.com/shop/outdoor-flooring/drainage-tiles.html" 3416 title="Drainage Tile & Mats" 3417 class="level-2 block"> 3418 <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> 3419 3420 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Drainage Tile & Mats</span></a> 3421 </li> 3422 3423 3424 <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> 3425 3426 3427 </ul> 3428 </li> 3429 3430 3431 3432 <li :class="{ 'active': show }" class="level-1 level1 " x-data="{ show: false }" 3433 x-on:click="show = true; removeDisplayFirst()" @click.away="show = false" 3434 > 3435 <a 3436 title="Turf & Artificial Grass" 3437 class="level-1 w-1/4 py-1/5 px-6 text-size13 block text-sm rounded text-darkblack relative" 3438 3439 > 3440 Turf & Artificial Grass 3441 <span class="inline items-center rotate-180 absolute"> 3442 <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"> 3443 <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"/> 3444<title>chevron-down</title></svg> 3445 </span> 3446 </a> 3447 3448 <ul class="z-10 w-1/2 absolute top-0 level2 flex flex-wrap pt-3 megamenu-extrablock" x-show="show">
3449 <span class="block w-full text-size28 font-medium no-underline text-darkblack pb-2">Turf & Artificial Grass</span> 3450 3451 <li class="level-2 w-4/12 pr-6 pb-6"> 3452 <a href="https://www.flooringinc.com/shop/artificial-grass/sport-field-turf.html" 3453 title="Sport & Gym Turf" 3454 class="level-2 block"> 3455 <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> 3456 3457 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Sport & Gym Turf</span></a> 3458 </li> 3459 3460 <li class="level-2 w-4/12 pr-6 pb-6"> 3461 <a href="https://www.flooringinc.com/shop/artificial-grass/landscape-turf.html" 3462 title="Landscape Turf" 3463 class="level-2 block"> 3464 <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> 3465 3466 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Landscape Turf</span></a> 3467 </li> 3468 3469 <li class="level-2 w-4/12 pr-6 pb-6"> 3470 <a href="https://www.flooringinc.com/shop/artificial-grass/pet-turf.html" 3471 title="Pet Turf" 3472 class="level-2 block"> 3473 <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> 3474
3475 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Pet Turf</span></a> 3476 </li> 3477 3478 <li class="level-2 w-4/12 pr-6 pb-6"> 3479 <a href="https://www.flooringinc.com/shop/artificial-grass/putting-greens.html" 3480 title="Golf & Putting Green Turf" 3481 class="level-2 block"> 3482 <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> 3483 3484 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Golf & Putting Green Turf</span></a> 3485 </li> 3486 3487 <li class="level-2 w-4/12 pr-6 pb-6"> 3488 <a href="https://www.flooringinc.com/shop/artificial-grass/turf-accessories.html" 3489 title="Turf Accessories" 3490 class="level-2 block"> 3491 <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> 3492 3493 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Turf Accessories</span></a> 3494 </li> 3495 3496 <li class="level-2 w-4/12 pr-6 pb-6"> 3497 <a href="https://www.flooringinc.com/shop/artificial-grass/all-artificial-grass.html" 3498 title="All Turf & Artificial Grass" 3499 class="level-2 block"> 3500 <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> 3501
3502 <span class="block text-sm font-medium no-underline text-darkblack pr-4">All Turf & Artificial Grass</span></a> 3503 </li> 3504 3505 3506 <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> 3507 3508 3509 </ul> 3510 </li> 3511 3512 3513 3514 <li :class="{ 'active': show }" class="level-1 level1 " x-data="{ show: false }" 3515 x-on:click="show = true; removeDisplayFirst()" @click.away="show = false" 3516 > 3517 <a 3518 title="Carpet Tiles & Rolls" 3519 class="level-1 w-1/4 py-1/5 px-6 text-size13 block text-sm rounded text-darkblack relative" 3520 3521 > 3522 Carpet Tiles & Rolls 3523 <span class="inline items-center rotate-180 absolute"> 3524 <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"> 3525 <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"/> 3526<title>chevron-down</title></svg> 3527 </span> 3528 </a> 3529 3530 <ul class="z-10 w-1/2 absolute top-0 level2 flex flex-wrap pt-3 megamenu-extrablock" x-show="show"> 3531 <span class="block w-full text-size28 font-medium no-underline text-darkblack pb-2">Carpet Tiles & Rolls</span> 3532 3533 <li class="level-2 w-4/12 pr-6 pb-6"> 3534 <a href="https://www.flooringinc.com/shop/carpet/carpet-tiles.html" 3535 title="Carpet Tiles" 3536 class="level-2 block"> 3537 <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> 3538
3539 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Carpet Tiles</span></a> 3540 </li> 3541 3542 <li class="level-2 w-4/12 pr-6 pb-6"> 3543 <a href="https://www.flooringinc.com/shop/carpet/carpet-rolls.html" 3544 title="Carpet Rolls" 3545 class="level-2 block"> 3546 <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> 3547 3548 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Carpet Rolls</span></a> 3549 </li> 3550 3551 <li class="level-2 w-4/12 pr-6 pb-6"> 3552 <a href="https://www.flooringinc.com/shop/carpet/home-theater-carpet.html" 3553 title="Home Theater Carpet" 3554 class="level-2 block"> 3555 <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> 3556 3557 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Home Theater Carpet</span></a> 3558 </li> 3559 3560 <li class="level-2 w-4/12 pr-6 pb-6"> 3561 <a href="https://www.flooringinc.com/shop/carpet/peel-stick-carpet.html" 3562 title="Peel and Stick Carpet Tiles" 3563 class="level-2 block"> 3564 <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> 3565
3566 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Peel and Stick Carpet Tiles</span></a> 3567 </li> 3568 3569 <li class="level-2 w-4/12 pr-6 pb-6"> 3570 <a href="https://www.flooringinc.com/shop/carpet/outdoor-carpet.html" 3571 title="Outdoor Carpet" 3572 class="level-2 block"> 3573 <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> 3574 3575 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Outdoor Carpet</span></a> 3576 </li> 3577 3578 <li class="level-2 w-4/12 pr-6 pb-6"> 3579 <a href="https://www.flooringinc.com/shop/carpet/waterproof-carpet.html" 3580 title="Waterproof Carpet" 3581 class="level-2 block"> 3582 <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> 3583 3584 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Waterproof Carpet</span></a> 3585 </li> 3586 3587 3588 <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> 3589 3590 3591 </ul> 3592 </li> 3593 3594 3595 3596 <li :class="{ 'active': show }" class="level-1 level1 " x-data="{ show: false }" 3597 x-on:click="show = true; removeDisplayFirst()" @click.away="show = false" 3598 > 3599 <a 3600 title="Vinyl Flooring" 3601 class="level-1 w-1/4 py-1/5 px-6 text-size13 block text-sm rounded text-darkblack relative" 3602 3603 > 3604 Vinyl Flooring 3605 <sp
3605an class="inline items-center rotate-180 absolute"> 3606 <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"> 3607 <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"/> 3608<title>chevron-down</title></svg> 3609 </span> 3610 </a> 3611 3612 <div class="2xl:block w-1/4 mega-menu-rightBlock absolute top-0 right-0" x-show="show"> 3613 <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> 3614 3615 <ul class="z-10 w-1/2 absolute top-0 level2 flex flex-wrap pt-3 megamenu-extrablock" x-show="show">
3616 <span class="block w-full text-size28 font-medium no-underline text-darkblack pb-2">Vinyl Flooring</span> 3617 3618 <li class="level-2 w-4/12 pr-6 pb-6"> 3619 <a href="https://www.flooringinc.com/shop/vinyl/vinyl-sheet.html" 3620 title="Vinyl Sheet Flooring" 3621 class="level-2 block"> 3622 <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> 3623 3624 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Vinyl Sheet Flooring</span></a> 3625 </li> 3626 3627 <li class="level-2 w-4/12 pr-6 pb-6"> 3628 <a href="https://www.flooringinc.com/shop/vinyl/vinyl-tiles-planks.html" 3629 title="Vinyl Tiles & Planks" 3630 class="level-2 block"> 3631 <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> 3632 3633 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Vinyl Tiles & Planks</span></a> 3634 </li> 3635 3636 <li class="level-2 w-4/12 pr-6 pb-6"> 3637 <a href="https://www.flooringinc.com/shop/vinyl/waterproof-vinyl.html" 3638 title="Waterproof Vinyl Flooring" 3639 class="level-2 block"> 3640 <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> 3641
3642 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Waterproof Vinyl Flooring</span></a> 3643 </li> 3644 3645 <li class="level-2 w-4/12 pr-6 pb-6"> 3646 <a href="https://www.flooringinc.com/shop/vinyl/rigid-core-vinyl.html" 3647 title="Rigid Core Vinyl Flooring" 3648 class="level-2 block"> 3649 <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> 3650 3651 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Rigid Core Vinyl Flooring</span></a> 3652 </li> 3653 3654 <li class="level-2 w-4/12 pr-6 pb-6"> 3655 <a href="https://www.flooringinc.com/shop/vinyl/commercial-vinyl.html" 3656 title="Commercial Vinyl Flooring" 3657 class="level-2 block"> 3658 <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> 3659 3660 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Commercial Vinyl Flooring</span></a> 3661 </li> 3662 3663 3664 <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> 3665 3666 3667 </ul> 3668 </li> 3669 3670 3671 3672 <li :class="{ 'active': show }" class="level-1 level1 " x-data="{ show: false }" 3673 x-on:click="show = true; removeDisplayFirst()" @click.away="show = false" 3674 > 3675 <a 3676 title="Wood & Laminate Flooring" 3677 class="level-1 w-1/4 py-1/5 px-6 text-size13 block text-sm rounded text-darkblack relative" 3678 3679 > 3680 Wood & Laminate Flooring 3681 <sp
3681an class="inline items-center rotate-180 absolute"> 3682 <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"> 3683 <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"/> 3684<title>chevron-down</title></svg> 3685 </span> 3686 </a> 3687 3688 <ul class="z-10 w-1/2 absolute top-0 level2 flex flex-wrap pt-3 megamenu-extrablock" x-show="show"> 3689 <span class="block w-full text-size28 font-medium no-underline text-darkblack pb-2">Wood & Laminate Flooring</span> 3690 3691 <li class="level-2 w-4/12 pr-6 pb-6"> 3692 <a href="https://www.flooringinc.com/shop/wood-laminate/waterproof-laminate.html" 3693 title="Waterproof Laminate Flooring" 3694 class="level-2 block"> 3695 <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> 3696 3697 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Waterproof Laminate Flooring</span></a> 3698 </li> 3699 3700 <li class="level-2 w-4/12 pr-6 pb-6"> 3701 <a href="https://www.flooringinc.com/shop/wood-laminate/laminate.html" 3702 title="Laminate Flooring" 3703 class="level-2 block"> 3704 <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> 3705 3706 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Laminate Flooring</span></a> 3707 </li> 3708 3709 <li class="level-2 w-4/12 pr-6 pb-6"> 3710 <a href="https://www.flooringinc.com/shop/wood-laminate/hardwood.html" 3711 title="Engineered Hardwood Flooring" 3712 class="level-2 block"> 3713 <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> 3714
3715 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Engineered Hardwood Flooring</span></a> 3716 </li> 3717 3718 <li class="level-2 w-4/12 pr-6 pb-6"> 3719 <a href="https://www.flooringinc.com/shop/wood-laminate/oak.html" 3720 title="Oak Wood Flooring" 3721 class="level-2 block"> 3722 <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> 3723 3724 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Oak Wood Flooring</span></a> 3725 </li> 3726 3727 <li class="level-2 w-4/12 pr-6 pb-6"> 3728 <a href="https://www.flooringinc.com/shop/wood-laminate/commercial-wood-laminate.html" 3729 title="Commercial Wood & Laminate" 3730 class="level-2 block"> 3731 <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> 3732 3733 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Commercial Wood & Laminate</span></a> 3734 </li> 3735 3736 3737 <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> 3738 3739 3740 </ul> 3741 </li> 3742 3743 3744 3745 <li :class="{ 'active': show }" class="level-1 level1 " x-data="{ show: false }" 3746 x-on:click="show = true; removeDisplayFirst()" @click.away="show = false" 3747 > 3748 <a 3749 title="Commercial Flooring" 3750 class="level-1 w-1/4 py-1/5 px-6 text-size13 block text-sm rounded text-darkblack relative" 3751 3752 > 3753 Commercial Flooring 3754 <sp
3754an class="inline items-center rotate-180 absolute"> 3755 <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"> 3756 <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"/> 3757<title>chevron-down</title></svg> 3758 </span> 3759 </a> 3760 3761 <div class="2xl:block w-1/4 mega-menu-rightBlock absolute top-0 right-0" x-show="show"> 3762 <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> 3763 3764 <ul class="z-10 w-1/2 absolute top-0 level2 flex flex-wrap pt-3 megamenu-extrablock" x-show="show">
3765 <span class="block w-full text-size28 font-medium no-underline text-darkblack pb-2">Commercial Flooring</span> 3766 3767 <li class="level-2 w-4/12 pr-6 pb-6"> 3768 <a href="https://www.flooringinc.com/shop/commercial-flooring/commercial-rubber-flooring.html" 3769 title="Commercial Rubber Flooring" 3770 class="level-2 block"> 3771 <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> 3772 3773 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Commercial Rubber Flooring</span></a> 3774 </li> 3775 3776 <li class="level-2 w-4/12 pr-6 pb-6"> 3777 <a href="https://www.flooringinc.com/shop/commercial-flooring/commercial-garage-flooring.html" 3778 title="Commercial Garage Flooring" 3779 class="level-2 block"> 3780 <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> 3781 3782 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Commercial Garage Flooring</span></a> 3783 </li> 3784 3785 <li class="level-2 w-4/12 pr-6 pb-6"> 3786 <a href="https://www.flooringinc.com/shop/commercial-flooring/commercial-carpet.html" 3787 title="Commercial Carpet Tiles" 3788 class="level-2 block"> 3789 <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> 3790
3791 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Commercial Carpet Tiles</span></a> 3792 </li> 3793 3794 <li class="level-2 w-4/12 pr-6 pb-6"> 3795 <a href="https://www.flooringinc.com/shop/commercial-flooring/commercial-vinyl.html" 3796 title="Commercial Vinyl Flooring" 3797 class="level-2 block"> 3798 <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> 3799 3800 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Commercial Vinyl Flooring</span></a> 3801 </li> 3802 3803 <li class="level-2 w-4/12 pr-6 pb-6"> 3804 <a href="https://www.flooringinc.com/shop/commercial-flooring/commercial-wood-laminate.html" 3805 title="Commercial Wood & Laminate Flooring" 3806 class="level-2 block"> 3807 <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> 3808 3809 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Commercial Wood & Laminate Flooring</span></a> 3810 </li> 3811 3812 <li class="level-2 w-4/12 pr-6 pb-6"> 3813 <a href="https://www.flooringinc.com/shop/commercial-flooring/gym-floor-covers-protection.html" 3814 title="Gym Floor Covers | Floor Protection" 3815 class="level-2 block"> 3816 <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> 3817
3818 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Gym Floor Covers | Floor Protection</span></a> 3819 </li> 3820 3821 3822 <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> 3823 3824 3825 </ul> 3826 </li> 3827 3828 3829 3830 <li :class="{ 'active': show }" class="level-1 level1 " x-data="{ show: false }" 3831 x-on:click="show = true; removeDisplayFirst()" @click.away="show = false" 3832 > 3833 <a 3834 title="Floors by Activity" 3835 class="level-1 w-1/4 py-1/5 px-6 text-size13 block text-sm rounded text-darkblack relative" 3836 3837 > 3838 Floors by Activity 3839 <span class="inline items-center rotate-180 absolute"> 3840 <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"> 3841 <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"/> 3842<title>chevron-down</title></svg> 3843 </span> 3844 </a> 3845 3846 <div class="2xl:block w-1/4 mega-menu-rightBlock absolute top-0 right-0" x-show="show"> 3847 <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> 3848 3849 <ul class="z-10 w-1/2 absolute top-0 level2 flex flex-wrap pt-3 megamenu-extrablock" x-show="show">
3850 <span class="block w-full text-size28 font-medium no-underline text-darkblack pb-2">Floors by Activity</span> 3851 3852 <li class="level-2 w-4/12 pr-6 pb-6"> 3853 <a href="https://www.flooringinc.com/shop/shop-by-activity/fitness-flooring.html" 3854 title="Fitness Flooring" 3855 class="level-2 block"> 3856 <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> 3857 3858 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Fitness Flooring</span></a> 3859 </li> 3860 3861 <li class="level-2 w-4/12 pr-6 pb-6"> 3862 <a href="https://www.flooringinc.com/shop/shop-by-activity/dance-marley-flooring.html" 3863 title="Dance Flooring | Marley Floor" 3864 class="level-2 block"> 3865 <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> 3866 3867 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Dance Flooring | Marley Floor</span></a> 3868 </li> 3869 3870 <li class="level-2 w-4/12 pr-6 pb-6"> 3871 <a href="https://www.flooringinc.com/shop/shop-by-activity/sport-and-court-flooring.html" 3872 title="Sport & Court Flooring" 3873 class="level-2 block"> 3874 <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> 3875
3876 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Sport & Court Flooring</span></a> 3877 </li> 3878 3879 <li class="level-2 w-4/12 pr-6 pb-6"> 3880 <a href="https://www.flooringinc.com/shop/shop-by-activity/martial-arts-flooring.html" 3881 title="Martial Arts Mats " 3882 class="level-2 block"> 3883 <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> 3884 3885 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Martial Arts Mats </span></a> 3886 </li> 3887 3888 <li class="level-2 w-4/12 pr-6 pb-6"> 3889 <a href="https://www.flooringinc.com/shop/shop-by-activity/cheer-mats.html" 3890 title="Cheer Mats" 3891 class="level-2 block"> 3892 <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> 3893 3894 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Cheer Mats</span></a> 3895 </li> 3896 3897 <li class="level-2 w-4/12 pr-6 pb-6"> 3898 <a href="https://www.flooringinc.com/shop/shop-by-activity/wrestling-mats.html" 3899 title="Wrestling Mats" 3900 class="level-2 block"> 3901 <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> 3902
3903 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Wrestling Mats</span></a> 3904 </li> 3905 3906 3907 <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> 3908 3909 3910 </ul> 3911 </li> 3912 3913 3914 3915 <li :class="{ 'active': show }" class="level-1 level1 " x-data="{ show: false }" 3916 x-on:click="show = true; removeDisplayFirst()" @click.away="show = false" 3917 > 3918 <a 3919 title="Floors by Space" 3920 class="level-1 w-1/4 py-1/5 px-6 text-size13 block text-sm rounded text-darkblack relative" 3921 3922 > 3923 Floors by Space 3924 <span class="inline items-center rotate-180 absolute"> 3925 <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"> 3926 <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"/> 3927<title>chevron-down</title></svg> 3928 </span> 3929 </a> 3930 3931 <ul class="z-10 w-1/2 absolute top-0 level2 flex flex-wrap pt-3 megamenu-extrablock" x-show="show"> 3932 <span class="block w-full text-size28 font-medium no-underline text-darkblack pb-2">Floors by Space</span> 3933 3934 <li class="level-2 w-4/12 pr-6 pb-6"> 3935 <a href="https://www.flooringinc.com/shop/shop-by-space/kitchen-flooring.html" 3936 title="Kitchen Flooring" 3937 class="level-2 block"> 3938 <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> 3939 3940 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Kitchen Flooring</span></a> 3941 </li> 3942 3943 <li class="level-2 w-4/12 pr-6 pb-6"> 3944 <a href="https://www.flooringinc.com/shop/shop-by-space/bathroom-flooring.html" 3945 title="Bathroom Flooring" 3946 class="level-2 block"> 3947 <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> 3948
3949 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Bathroom Flooring</span></a> 3950 </li> 3951 3952 <li class="level-2 w-4/12 pr-6 pb-6"> 3953 <a href="https://www.flooringinc.com/shop/shop-by-space/commercial-flooring.html" 3954 title="Commercial Flooring" 3955 class="level-2 block"> 3956 <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> 3957 3958 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Commercial Flooring</span></a> 3959 </li> 3960 3961 <li class="level-2 w-4/12 pr-6 pb-6"> 3962 <a href="https://www.flooringinc.com/shop/shop-by-space/gym-flooring.html" 3963 title="Gym Flooring" 3964 class="level-2 block"> 3965 <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> 3966 3967 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Gym Flooring</span></a> 3968 </li> 3969 3970 <li class="level-2 w-4/12 pr-6 pb-6"> 3971 <a href="https://www.flooringinc.com/shop/shop-by-space/garage-flooring.html" 3972 title="Garage Flooring" 3973 class="level-2 block"> 3974 <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> 3975
3976 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Garage Flooring</span></a> 3977 </li> 3978 3979 <li class="level-2 w-4/12 pr-6 pb-6"> 3980 <a href="https://www.flooringinc.com/shop/shop-by-space/outdoor-flooring.html" 3981 title="Outdoor Flooring" 3982 class="level-2 block"> 3983 <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> 3984 3985 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Outdoor Flooring</span></a> 3986 </li> 3987 3988 3989 <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> 3990 3991 3992 </ul> 3993 </li> 3994 3995 3996 3997 <li :class="{ 'active': show }" class="level-1 level1 " x-data="{ show: false }" 3998 x-on:click="show = true; removeDisplayFirst()" @click.away="show = false" 3999 > 4000 <a 4001 title="Underlayment & Flooring Accessories" 4002 class="level-1 w-1/4 py-1/5 px-6 text-size13 block text-sm rounded text-darkblack relative" 4003 4004 > 4005 Underlayment & Flooring Accessories 4006 <span class="inline items-center rotate-180 absolute"> 4007 <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"> 4008 <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"/> 4009<title>chevron-down</title></svg> 4010 </span> 4011 </a> 4012 4013 <div class="2xl:block w-1/4 mega-menu-rightBlock absolute top-0 right-0" x-show="show"> 4014 <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> 4015 4016 <ul class="z-10 w-1/2 absolute top-0 level2 flex flex-wrap pt-3 megamenu-extrablock" x-show="show">
4017 <span class="block w-full text-size28 font-medium no-underline text-darkblack pb-2">Underlayment & Flooring Accessories</span> 4018 4019 <li class="level-2 w-4/12 pr-6 pb-6"> 4020 <a href="https://www.flooringinc.com/shop/installation-care/adhesives-glue.html" 4021 title="Flooring Adhesives & Glue" 4022 class="level-2 block"> 4023 <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> 4024 4025 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Flooring Adhesives & Glue</span></a> 4026 </li> 4027 4028 <li class="level-2 w-4/12 pr-6 pb-6"> 4029 <a href="https://www.flooringinc.com/shop/installation-care/tape.html" 4030 title="Floor and Mat Tape" 4031 class="level-2 block"> 4032 <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> 4033 4034 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Floor and Mat Tape</span></a> 4035 </li> 4036 4037 <li class="level-2 w-4/12 pr-6 pb-6"> 4038 <a href="https://www.flooringinc.com/shop/installation-care/accessories.html" 4039 title="Installation Accessories" 4040 class="level-2 block"> 4041 <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> 4042
4043 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Installation Accessories</span></a> 4044 </li> 4045 4046 <li class="level-2 w-4/12 pr-6 pb-6"> 4047 <a href="https://www.flooringinc.com/shop/installation-care/trims-moldings.html" 4048 title="Floor Trims & Moldings" 4049 class="level-2 block"> 4050 <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> 4051 4052 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Floor Trims & Moldings</span></a> 4053 </li> 4054 4055 <li class="level-2 w-4/12 pr-6 pb-6"> 4056 <a href="https://www.flooringinc.com/shop/installation-care/underlayment.html" 4057 title="Flooring Underlayment" 4058 class="level-2 block"> 4059 <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> 4060 4061 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Flooring Underlayment</span></a> 4062 </li> 4063 4064 <li class="level-2 w-4/12 pr-6 pb-6"> 4065 <a href="https://www.flooringinc.com/shop/installation-care/cleaners.html" 4066 title="Flooring Cleaners" 4067 class="level-2 block"> 4068 <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> 4069
4070 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Flooring Cleaners</span></a> 4071 </li> 4072 4073 4074 <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> 4075 4076 4077 </ul> 4078 </li> 4079 4080 4081 4082 <li :class="{ 'active': show }" class="level-1 level1 " x-data="{ show: false }" 4083 x-on:click="show = true; removeDisplayFirst()" @click.away="show = false" 4084 > 4085 <a 4086 title="Specials" 4087 class="level-1 w-1/4 py-1/5 px-6 text-size13 block text-sm rounded text-darkblack relative" 4088 4089 > 4090 Specials 4091 <span class="inline items-center rotate-180 absolute"> 4092 <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"> 4093 <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"/> 4094<title>chevron-down</title></svg> 4095 </span> 4096 </a> 4097 4098 <ul class="z-10 w-1/2 absolute top-0 level2 flex flex-wrap pt-3 megamenu-extrablock" x-show="show"> 4099 <span class="block w-full text-size28 font-medium no-underline text-darkblack pb-2">Specials</span> 4100 4101 <li class="level-2 w-4/12 pr-6 pb-6"> 4102 <a href="https://www.flooringinc.com/shop/specials/hot-buys.html" 4103 title="Flooring Deals" 4104 class="level-2 block"> 4105 <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> 4106 4107 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Flooring Deals</span></a> 4108 </li> 4109 4110 <li class="level-2 w-4/12 pr-6 pb-6"> 4111 <a href="https://www.flooringinc.com/shop/specials/made-in-usa.html" 4112 title="American Made" 4113 class="level-2 block"> 4114 <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> 4115
4116 <span class="block text-sm font-medium no-underline text-darkblack pr-4">American Made</span></a> 4117 </li> 4118 4119 <li class="level-2 w-4/12 pr-6 pb-6"> 4120 <a href="https://www.flooringinc.com/shop/specials/quick-ship.html" 4121 title="Quick Ship" 4122 class="level-2 block"> 4123 <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> 4124 4125 <span class="block text-sm font-medium no-underline text-darkblack pr-4">Quick Ship</span></a> 4126 </li> 4127 4128 <li class="level-2 w-4/12 pr-6 pb-6"> 4129 <a href="https://www.flooringinc.com/shop/specials/new-arrivals.html" 4130 title="New Arrivals" 4131 class="level-2 block"> 4132 <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> 4133 4134 <span class="block text-sm font-medium no-underline text-darkblack pr-4">New Arrivals</span></a> 4135 </li> 4136 4137 4138 <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> 4139 4140 4141 </ul> 4142 </li> 4143 4144 4145 4146 4147 <!--<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>-->
4147 4148 4149 </ul> 4150 </div> 4151 4152 </div> 4153 </div> 4154 </template> 4155 </div> 4156 <div class="menu_static_links"> 4157 <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> 4158<li><a tabindex="0" href="/shop-by-category/specials/hot-buys.html">Sale</a></li> 4159<li><a tabindex="0" href="/blog">Get Inspired & How To</a></li> 4160</ul></div></div></div> </div> 4161 </nav> 4162 </div> 4163 4164</div>
4165<script> 4166 'use strict'; 4167 4168 const initMenuDesktop_6ab67d17d86df = () => { 4169 return { 4170 hoverTopPosition: '100%', 4171 setActiveMenu(menuNode) { 4172 Array.from(menuNode.querySelectorAll('a')).filter(link => { 4173 return link.href === window.location.href.split('?')[0]; 4174 }).map(item => { 4175 if (!item.classList.contains('level-0')) { 4176 item.classList.add('underline'); 4177 } 4178 item.closest('div.level-0') && 4179 item.closest('div.level-0').classList.add('border-secondary'); 4180 }); 4181 } 4182 } 4183 } 4184</script>
vendor: 1 bytes, line 4184
4184
4185<script> 4186 // Function to remove 'display-first' class from other list items 4187 function removeDisplayFirst() { 4188 var listItems = document.querySelectorAll('.level1'); 4189 listItems.forEach(function(item) { 4190 if (item.id !== this.id) { 4191 item.classList.remove('display-first'); 4192 } 4193 }); 4194 } 4195</script>
4195 4196 <!--Search--> 4197 <div class="w-full" 4198 id="search-content" 4199 :class="{ 'block': searchOpen}" 4200 @click.outside="searchOpen = false" 4201 > 4202 4203<div class="py-0 px-0 pl-5 mx-auto text-black" x-data="initMirasvitSearch()" @click.away="closeSearch"> 4204 <form class="form minisearch relative" id="search_mini_form" action="https://www.flooringinc.com/catalogsearch/result/" method="get" autocomplete="off"> 4205 <label class="hidden" for="search" data-role="minisearch-label"> 4206 <span>Search</span> 4207 </label> 4208 <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 4209 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)"/> 4210 <button class="action search absolute">btn</button> 4211 </form> 4212 4213 <div x-cloak x-show="isOpen" id="mirasvitSearchResults" class="search_box transition appearance-none absolute"> 4214 <div class="flex flex-row justify-center items-center w-full h-full fixed select-none z-50" 4215 style="left: 50%;top: 50%;transform: translateX(-50%) translateY(-50%);background: rgba(255,255,255,0.7);" 4216 x-show="isLoading" 4217 x-transition:enter="ease-out duration-200" 4218 x-transition:enter-start="opacity-0" 4219 x-transition:enter-end="opacity-100" 4220 x-transition:leave="ease-in duration-200" 4221 x-transition:leave-start="opacity-100" 4222 x-transition:leave-end="opacity-0"> 4223 <!-- By Sam Herbert (@sherb), for everyone. More @ http://goo.gl/7AJzbL --> 4224<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 57 57" stroke="currentColor" class="text-primary" width="57" height="57" role="img"> 4225 <g fill="none" fill-rule="evenodd"> 4226 <g transform="translate(1 1)" stroke-width="2"> 4227 <circle cx="5" cy="50" r="5"> 4228 <animate attributeName="cy" begin="0s" dur="2.2s" values="50;5;50;50" calcMode="linear" repeatCount="indefinite"/> 4229 <animate attributeName="cx" begin="0s" dur="2.2s" values="5;27;49;5" calcMode="linear" repeatCount="indefinite"/> 4230 </circle> 4231 <circle cx="27" cy="5" r="5"> 4232 <animate attributeName="cy" begin="0s" dur="2.2s" from="5" to="5" values="5;50;50;5" calcMode="linear" repeatCount="indefinite"/> 4233 <animate attributeName="cx" begin="0s" dur="2.2s" from="27" to="27" values="27;49;5;27" calcMode="linear" repeatCount="indefinite"/> 4234 </circle> 4235 <circle cx="49" cy="50" r="5"> 4236 <animate attributeName="cy" begin="0s" dur="2.2s" values="50;50;5;50" calcMode="linear" repeatCount="indefinite"/> 4237 <animate attributeName="cx" from="49" to="49" begin="0s" dur="2.2s" values="49;5;27;49" calcMode="linear" repeatCount="indefinite"/> 4238 </circle> 4239 </g> 4240 </g> 4241<title>loader</title></svg> 4242 <div class="ml-10 text-primary text-xl"> 4243 Loading... </div> 4244</div> 4245 4246 <template x-if="hotSearch"> 4247 <div class="hotSearch"> 4248 <p class="text-lg leading-normal transition appearance-none text-grey-800 lg:text-xl border-b border-100 p-2 flex"> 4249 Hot Searches </p> 4250 <div class="my-3 flex flex-wrap"> 4251 </div> 4252 </div> 4253 </template> 4254 4255 <template x-if="searchResults"> 4256 <div class="search_box_content w-full flex flex-wrap "> 4257 <div class="search_box_left relative"> 4258 <p class="product_title text-size20 font-medium text-black"> 4259 Top Results <template x-if="searchProducts != ''"> 4260 <small class="text-size16 font-medium text-black hidden">(<span x-html="searchProductsTotal"></span>)</small> 4261 </template> 4262 </p> 4263 <div class="viewAll absolute right-0"> 4264 <div> 4265 <a x-bind:href="numberResultsUrl"> 4266 <p class="text-size14 font-normal text-black underline number-results" x-html="numberResults"></p> 4267 </a> 4268 </div> 4269 </div> 4270 <div class="search_box_left_content lg:grid-cols-6"> 4271 <template x-for="item in searchProducts"> 4272 <div class="search_products flex"> 4273 <a x-bind:href="`${item.url}`" class=""> 4274 <div class="w-full product-image"> 4275 <img x-bind:src="`${item.imageUrl}`" width="275" height="182" class="w-full"/> 4276 </div> 4277 </a> 4278 <div class="w-full product-content"> 4279 <a x-bind:href="`${item.url}`" class=""><h4 class="product-name text-size14 font-medium text-black" x-html="item.name"></h4></a> 4280 <template x-if="item.rating > 0"> 4281 <div class="ratings flex item-center"> 4282 <div x-html="item.rating"></div>(<span x-html="item.reviews"></span>) 4283 </div> 4284 </template> 4285 <template x-if="item.orderFreeSample > 0"> 4286 <div x-cloak x-data="{showModal: false, htmlContent: '',pid: item.proId }"> 4287 <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> 4288 <div class="modal order-free-sample-popup z-50" x-show="showModal"> 4289 <div class="modal-overlay" x-on:click="showModal = false"></div> 4290 <button class="closemodal" type="button" x-on:click="showModal = false">Close X</button> 4291 <div class="modal-content"> 4292 <div x-html="htmlContent" :class="'htmlcontent' + item.proId"></div> 4293 </div> 4294 </div> 4295 </div> 4296 </template> 4297 <!-- <p class="mt-2 text-gray-600 text-xs truncate" x-html="item.description"></p> --> 4298 <template x-if="item.colorCount > 0"> 4299 <p class="text-size13 font-normal text-black truncate"> 4300 Available in <span x-html="item.colorCount"></span> colors 4301 </p> 4302 </template> 4303 <!--<div class="truncate-content"> 4304 <p class="text-size13 font-normal text-black truncate" x-html="item.dealOfTheMonth"></p> 4305 <p class="text-size13 font-normal text-black truncate" x-html="item.freeShipping"></p> 4306 <p class="text-size13 font-normal text-black truncate" x-html="item.shipNextDay"></p> 4307 </div>--> 4308 <div class="price_container flex item-center justify-between">
4309 <span class="text-size14 font-semibold text-black" x-html="item.price"></span> 4310 </div> 4311 </div> 4312 4313 </div> 4314 </template> 4315 <template x-if="searchProducts == ''"> 4316 <p>No results found.</p> 4317 </template> 4318 </div> 4319 </div> 4320 <div class="results-rightside"> 4321 <template x-if="searchCategories != ''"> 4322 <div class="mb-6 category-rest"> 4323 <p class="categorie-title text-size20 font-medium text-black pb-2"> 4324 In Categories <small class="text-size16 font-medium text-black hidden">(<span x-html="searchCategoriesTotal"></span>)</small> 4325 </p> 4326 <div class="catgry-list"> 4327 <template x-for="category in searchCategories"> 4328 <a x-bind:href="`${category.url}`"> 4329 <div class="text-size14 font-normal text-black"> 4330 <span class="text-size14 font-normal text-black cursor-pointer" x-html="category.name.split('>').pop().trim()"></span> 4331 </div> 4332 </a> 4333 </template> 4334 </div> 4335 </div> 4336 </template> 4337 4338 <!-- <template x-if="searchPages != ''"> 4339 <div class="mb-6"> 4340 <p class="text-lg leading-normal transition appearance-none text-grey-800 lg:text-xl border-b border-100 p-2 flex"> 4341 Pages <small class="text-size16 font-medium text-black">(<span x-html="searchPagesTotal"></span>)</small> 4342 </p> 4343 <div class="px-2"> 4344 <template x-for="page in searchPages"> 4345 <a x-bind:href="`${page.url}`"> 4346 <div class="my-2 flex flex-wrap"> 4347 <span class="text-size14 font-normal text-black cursor-pointer" x-html="page.name"></span> 4348 </div> 4349 </a> 4350 </template> 4351 </div> 4352 </div> 4353 </template> --> 4354 4355 <template x-if="searchPosts != ''"> 4356 <div class="search_box_right"> 4357 <p class="blog-title text-size20 font-medium text-black"> 4358 In Blogs <!-- <small class="<//?= $titleNumberCSS ?>">(<span x-html="searchPostsTotal"></span>)</small> --> 4359 </p> 4360 <div class="search_box_right_content"> 4361 <template x-for="item in searchPosts"> 4362 <div> 4363 <a x-bind:href="`${item.url}`" class="blog-items block"> 4364 <div> 4365 <span class="blog-name text-size14 font-normal text-black" x-html="item.name"></span> 4366 </div> 4367 </a> 4368 <span class="item_description text-size14 font-normal text-black opacity-50 mb-4 block" x-html="item.description"></span> 4369 </div> 4370 </template> 4371 </div> 4372 </div> 4373 </template> 4374 </div> 4375 4376 </div> 4377 </template> 4378 4379 <template x-if="noResults"> 4380 <div class="p-2 text-size20 font-medium text-black overflow-hidden"> 4381 <p class="text-lg leading-normal transition appearance-none text-grey-800 lg:text-xl" x-html="noResultsText"></p> 4382 </div> 4383 </template> 4384 </div> 4385</div> 4386
4387<script> 4388 function initMirasvitSearch() { 4389 return { 4390 //initialize Variables 4391 hotSearch: false, 4392 searchResults: false, 4393 noResults: false, 4394 isLoading: false, 4395 isOpen: false, 4396 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"}, 4397 xhttp: false, 4398 noResultsText: '', 4399 numberResults: '', 4400 numberResultsUrl: '', 4401 searchProductsTotal: '', 4402 searchCategoriesTotal: '', 4403 searchPagesTotal: '', 4404 4405 searchProducts: [], 4406 searchCategories: [], 4407 searchPages: [], 4408 searchPosts: [], 4409 4410 searchMap: { 4411 'magento_cms_page': 'Pages', 4412 'magento_catalog_category': 'Categories', 4413 'magento_catalog_product': 'Products', 4414 'magefan_blog_post': 'Posts' 4415 }, 4416 4417 hotSearchClickEvent: function (ev) { 4418 var hotSearchClick = event.currentTarget.innerText; 4419 document.getElementById("search").value = hotSearchClick; 4420 4421 this.doSearch(hotSearchClick); 4422 }, 4423 4424 openSearch: function () { 4425 //this.isOpen = true; 4426 searchValue = document.getElementById("search").value.length; 4427 4428 if (searchValue >= this.blockConfig.minSearchLength) { 4429 this.hideHotSearch(); 4430 } else { 4431 this.showHotSearch(); 4432 this.hideSearchResults(); 4433 } 4434 }, 4435 4436 startSearch: function (e) { 4437 if (e) { 4438 //this.isOpen = true; 4439 } 4440 }, 4441 4442 getSearchresult: function () { 4443 this.isOpen = true; 4444 }, 4445 4446 closeSearch: function () { 4447 this.isOpen = false; 4448 }, 4449 4450 showHotSearch: function () { 4451 this.hotSearch = true; 4452 }, 4453 4454 hideHotSearch: function () { 4455 this.hotSearch = false; 4456 4457 }, 4458 4459 showSearchResults: function () { 4460 this.searchResults = true; 4461 // this.isOpen = true; 4462 }, 4463 4464 hideSearchResults: function () { 4465 this.searchResults = false; 4466 // this.isOpen = false; 4467 }, 4468 4469 showNoResults: function () { 4470 this.noResults = true; 4471 }, 4472 4473 hideNoResults: function () { 4474 this.noResults = false; 4475 }, 4476 4477 setNoResultsText(text) { 4478 if (!text) { 4479 return; 4480 } 4481 console.log(text); 4482 this.noResultsText = text; 4483 this.isOpen = true; 4484 }, 4485 4486 setNumberResults(text) { 4487 this.numberResults = text; 4488 }, 4489 4490 setNumberResultsUrl(text) { 4491 this.numberResultsUrl = text; 4492 }, 4493 4494 resetSearchData: function () { 4495 // Reinitialize Variables to avoid wrong search results. 4496 this.searchPages = []; 4497 this.searchPagesTotal = 0; 4498 this.searchCategories = []; 4499 this.searchCategoriesTotal = 0; 4500 this.searchProducts = []; 4501 this.searchProductsTotal = 0; 4502 }, 4503 4504 doSearch: function (query) { 4505 this.isOpen = false;
4506 var self = this; 4507 // Min search length 4508 if (query.length < this.blockConfig.minSearchLength) { 4509 this.showHotSearch(); 4510 this.isLoading = false; 4511 this.hideSearchResults(); 4512 this.hideNoResults(); 4513 4514 return; 4515 } else { 4516 this.hideHotSearch(); 4517 this.isLoading = true; 4518 this.showSearchResults(); 4519 this.hideNoResults(); 4520 } 4521 4522 // AJAX for searchautocomplete/ajax/suggest/ 4523 if (this.xhttp) { 4524 try { 4525 this.xhttp.abort(); 4526 } catch { 4527 4528 } 4529 } 4530 this.xhttp = new XMLHttpRequest(); 4531 var xhttp = this.xhttp; 4532 4533 var queryEncoded = encodeURIComponent(query); 4534 var url = this.blockConfig.url.replace(/\/$/, "") + "/?q=" + queryEncoded + "&store_id=" + this.blockConfig.storeId + "&cat=false"; 4535 4536 xhttp.open("GET", url, true); 4537 xhttp.setRequestHeader("Content-Type", "application/json"); 4538 4539 xhttp.onreadystatechange = function () { 4540 if (this.readyState === 4 && this.status === 200) { 4541 4542 4543 // Response from ajax call in JSON. 4544 var response = JSON.parse(this.responseText); 4545 console.log(response); 4546 self.resetSearchData(); 4547 4548 // Product Search Results 4549 for (index in response.indexes) { 4550 4551 if (response.indexes[index].items.length > 0) { 4552 self.getSearchresult(); 4553 var res = response.indexes[index]; 4554 var map = null; 4555 4556 if (self.searchMap[res.identifier]) { 4557 map = self.searchMap[res.identifier]; 4558 self['search' + map] = res.items; 4559 self['search' + map + 'Total'] = res.totalItems; 4560 } 4561 } 4562 } 4563 4564 // Extract totalItems from response.textAll and format if > 999 4565 let textAll = response.textAll; 4566 if (response.textAll) { 4567 // Remove the â symbol (or any trailing characters you'd like to remove) 4568 textAll = textAll.replace(/â$/, '').trim(); 4569 // Find number within textAll using regex 4570 let totalItemsMatch = textAll.match(/\d+/); // Extracts the first number found 4571 if (totalItemsMatch) { 4572 let totalItemsFromTextAll = parseInt(totalItemsMatch[0], 10); 4573 if (totalItemsFromTextAll > 999) { 4574 // Format with comma if > 999 4575 textAll = textAll.replace(totalItemsMatch[0], totalItemsFromTextAll.toLocaleString()); 4576 } 4577 } 4578 console.log("Formatted textAll:", textAll); 4579 self.setNumberResults(textAll); // Update the UI with the formatted textAll 4580 } 4581 4582 self.isLoading = false; 4583 self.hideNoResults(); 4584 self.setNumberResults(textAll); 4585 self.setNumberResultsUrl(response.urlAll); 4586 4587 if (response.noResults) {console.log(response.textEmpty); 4588 self.showNoResults(); 4589 self.setNoResultsText(response.textEmpty); 4590 self.hideSearchResults(); 4591 4592 } 4593 }else{ 4594 this.isOpen = false; 4595 } 4596 }; 4597 4598 xhttp.send(); 4599 } 4600 } 4601 } 4602</script>
4602 </div> 4603 4604 <div class="flex items-center order-3"> 4605 <!--Compare Icon--> 4606 <a id="compare-link" 4607 class="relative invisible inline-block mx-1 no-underline sm:ml-3 hover:text-black" 4608 :class="{ 'invisible': !(itemCount > 0) }" 4609 href="https://www.flooringinc.com/catalog/product_compare/index/" 4610 title="Compare Products" 4611 x-data="initCompareHeader()" 4612 @private-content-loaded.window="receiveCompareData($event.detail.data)" 4613 > 4614 <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"> 4615 <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"/> 4616<title>scale</title></svg> 4617 4618 <span class="sr-only label"> 4619 Compare Products </span> 4620 4621 <span class="absolute top-0 right-0 h-5 px-2 py-1 -mt-5 -mr-4 text-xs font-semibold 4622 leading-none text-center text-white uppercase transform -translate-x-1 4623 translate-y-1/2 bg-yellow-500 rounded-full" 4624 > 4625 <span x-text="itemCount"></span> 4626 <span x-show="itemCount === 1" class="sr-only"> 4627 item </span> 4628 <span x-show="itemCount > 1" class="sr-only"> 4629 items </span> 4630 </span> 4631 </a> 4632 4633 <!--Search Icon--> 4634 <button id="menu-search-icon" 4635 class="inline-block ml-1 no-underline sm:ml-3 hover:text-black hidden" 4636 @click.prevent=" 4637 searchOpen = !searchOpen; 4638 $nextTick(function () { document.querySelector('#search').select(); }); 4639 " 4640 > 4641 <span class="sr-only label"> 4642 Search </span> 4643 4644 <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"> 4645 <path stroke-linecap="round" stroke-linejoin="round" d="M21 21l-6-6m2-5a7 7 0 11-14 0 7 7 0 0114 0z"/> 4646<title>search</title></svg> 4647 </button> 4648 4649 <!--Customer Icon & Dropdown--> 4650
4650<script> 4651"use strict"; 4652 4653function initComponent() { 4654 return { 4655 cart: false, 4656 customer: false, 4657 receiveCustomerData(data) { 4658 if (data.cart) { 4659 this.cart = data.cart; 4660 } 4661 if (data.customer) { 4662 this.customer = data.customer; 4663 } 4664 } 4665 } 4666} 4667</script>
4667 4668 4669 4670<div x-data="{ open: false }" class="relative inline-block acc-dropdown"> 4671 <div class="arrow-cus"> 4672 <a 4673 href="https://www.flooringinc.com/customer/account/" 4674 id="customer-menu" 4675 class="block hover:text-black " 4676 @click.prevent="$dispatch('popup-register', 4677 { open: true,openRegister : false,openLogin : true,openCreate :true, 4678 openButtonLogin :true, 4679 openButtonRegister :false, 4680 })" 4681 :aria-expanded="open ? 'true' : 'false'" 4682 aria-label="My Account" 4683 > 4684 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="currentColor" 4685 class="w-8 h-8 md:h-6 md:w-6" aria-hidden="true"> 4686 <circle fill="none" cx="12" cy="7" r="3"></circle> 4687 <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 4688 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 4689 0-7 3.141-7 7v1h2v-1c0-2.757 2.243-5 5-5h4c2.757 0 5 2.243 5 5v1H21z"> 4690 </path> 4691 </svg> 4692 4693 </a> 4694 </div> 4695 <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 4696 shadow-lg sm:w-48 lg:mt-3 bg-container-lighter" 4697 :class="{ 'hidden' : !open }" 4698 @click.outside="open = false" 4699 x-cloak x-show="open" 4700 aria-labelledby="customer-menu" 4701 > 4702 4703<a class="block px-4 py-2 lg:px-5 lg:py-2 hover:bg-gray-100" 4704 onclick="hyva.setCookie && hyva.setCookie( 4705 'login_redirect', 4706 window.location.href, 4707 1 4708 )" 4709 href="https://www.flooringinc.com/customer/account/index/"> 4710 Sign In </a> 4711<a class="block px-4 py-2 lg:px-5 lg:py-2 hover:bg-gray-100" 4712 href="https://www.flooringinc.com/customer/account/create/" 4713 title="" 4714 > 4715 Create an Account </a> 4716 </nav> 4717</div> 4718 <!--Quote Cart Icon (show when activeCartType is 'quote' and quote has items)--> 4719 <template x-if="activeCartType === 'quote' && quoteCart.summary_count"> 4720 <a id="menu-cart-quote-icon" 4721 class="relative inline-block ml-1 no-underline sm:ml-3 hover:text-black pl-3" 4722 :class="{ 4723 'hidden': !(activeCartType === 'quote' && quoteCart.summary_count), 4724 'block': activeCartType === 'quote' && quoteCart.summary_count }" 4725 href="https://www.flooringinc.com/amasty_quote/cart/" 4726 > 4727 <span class="checkout-icon"> 4728 <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"> 4729 <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"/> 4730<title>shopping-cart</title></svg> 4731 </span> 4732 <span x-text="quoteCart.summary_count" 4733 class="absolute top-0 right-0 h-5 px-2 py-1 -mt-5 -mr-4 text-xs font-semibold 4734 leading-none text-center text-white uppercase transform -translate-x-1 4735 translate-y-1/2 rounded-full bg-primary" 4736 :class="{ 4737 'hidden': !quoteCart.summary_count, 4738 'block': quoteCart.summary_count }" 4739 ></span> 4740 </a> 4741 </template> 4742 <!--Regular Cart Icon (show when activeCartType is 'cart' or when quote mode but quote empty - always show an icon)-->
4742 4743 <a id="menu-cart-icon" 4744 x-show="activeCartType === 'cart' || (activeCartType === 'quote' && !quoteCart.summary_count)" 4745 @click.prevent.stop="$dispatch('toggle-cart',{});" class="relative inline-block ml-6 no-underline hover:text-black" 4746 href="https://www.flooringinc.com/checkout/cart/index/" 4747 > 4748 <span class="sr-only label"> 4749 Cart </span> 4750 4751 <span class="cart-icon"> 4752 <img src="https://www.flooringinc.com/static/version1789462004/frontend/Dcw/hyvadesktop/en_US/images/cart-icon.svg" alt="cart-icon" width="24" height="24"> 4753 <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> 4754 </span> 4755 4756 <span x-text="cart.summary_count" 4757 class="absolute top-0 right-0 h-5 px-2 py-1 -mt-5 -mr-4 text-xs font-semibold 4758 leading-none text-center text-white uppercase transform -translate-x-1 4759 translate-y-1/2 rounded-full bg-primary" 4760 :class="{ 4761 'hidden': !cart.summary_count, 4762 'block': cart.summary_count }" 4763 ></span> 4764 </a> 4765 4766 </div> 4767 </div> 4768
4769 <!--Cart Drawer--> 4770
4770<script> 4771 function initCartDrawer() { 4772 return { 4773 open: false, 4774 isLoading: false, 4775 cart: {}, 4776 maxItemsToDisplay: 10, 4777 itemsCount: 0, 4778 totalCartAmount: 0, 4779 getData(data) { 4780 if (data.cart) { 4781 this.cart = data.cart; 4782 this.itemsCount = data.cart.items && data.cart.items.length || 0; 4783 this.totalCartAmount = this.cart.summary_count; 4784 //this.cart.summary_count = this.itemsCount; 4785 this.setCartItems(); 4786 } 4787 this.isLoading = false; 4788 }, 4789 cartItems: [], 4790 getItemCountTitle() { 4791 return hyva.strf('(%0 of %1)', this.maxItemsToDisplay, this.totalCartAmount) 4792 }, 4793 setCartItems() { 4794 if(this.cart.items){ 4795 this.cartItems = this.cart.items && this.cart.items.sort((a, b) => b.item_id - a.item_id) || []; 4796 } else { 4797 this.cartItems = []; 4798 } 4799 if (this.maxItemsToDisplay > 0) { 4800 this.cartItems = this.cartItems.slice(0, parseInt(this.maxItemsToDisplay, 10)); 4801 } 4802 getCustomerData(['customer'], function(data) { 4803 if(data.messages.messages[0]){ 4804 var messagesType = data.messages.messages[0].type; 4805 var messagesText = data.messages.messages[0].text; 4806 if(messagesType === "success"){ 4807 dispatchMessages([ 4808 { 4809 type: messagesType, 4810 text: messagesText 4811 } 4812 ]); 4813 this.openCartDrawer(); 4814 } else { 4815 dispatchMessages([ 4816 { 4817 type: messagesType, 4818 text: messagesText 4819 } 4820 ]); 4821 } 4822 } 4823 window.dispatchEvent(new CustomEvent('amcart-loading-stop')); 4824 }); 4825 4826 if(document.querySelectorAll('.btn_cart')) { 4827 var addtocartnew = document.querySelectorAll('.btn_cart'); 4828 4829 addtocartnew.forEach(addtocartnew => { 4830 addtocartnew.addEventListener('click', () => { 4831 setTimeout(() => { 4832 }, 2500); 4833 }); 4834 }); 4835 } 4836 if(document.getElementById('product-addtocart-button')) { 4837 var addtocartnew2 = document.getElementById('product-addtocart-button'); 4838 4839 addtocartnew2.addEventListener('click', () => { 4840 setTimeout(() => { 4841 }, 2500); 4842 }); 4843 } 4844 4845 4846 }, 4847 deleteItemFromCart(itemId) { 4848 this.isLoading = true; 4849 4850 const formKey = hyva.getFormKey(); 4851 const postUrl = BASE_URL + 'amasty_quote/quote/removeFromMinicart'; 4852 fetch(postUrl, { 4853 "headers": { 4854 "content-type": "application/x-www-form-urlencoded; charset=UTF-8", 4855 }, 4856 "body": "form_key=" + formKey + "&item_id=" + itemId, 4857 "method": "POST", 4858 "mode": "cors", 4859 "credentials": "include" 4860 }).then(response => { 4861 window.location.href = window.location.pathname; // Reload the page after item remove 4862 if (response.redirected) { 4863 window.location.href = response.url; 4864 } else if (response.ok) { 4865 return response.json(); 4866 } else { 4867 window.dispatchMessages && window.dispatchMessages([{ 4868 type: 'warning',
4869 text: 'Could\u0020not\u0020remove\u0020item\u0020from\u0020quote.' 4870 }]); 4871 this.isLoading = false; 4872 } 4873 }).then(result => { 4874 window.dispatchMessages && window.dispatchMessages([{ 4875 type: result.success ? 'success' : 'error', 4876 text: result.success 4877 ? 'You\u0020removed\u0020the\u0020item.' 4878 : result.error_message 4879 }], result.success ? 5000 : 0) 4880 window.dispatchEvent(new CustomEvent('reload-customer-section-data')); 4881 }); 4882 }, 4883 toggleCartDrawer(event) { 4884 if (event.detail && event.detail.isOpen !== undefined) { 4885 if (event.detail.isOpen) { 4886 this.openCartDrawer() 4887 } else { 4888 this.open = false 4889 this.$refs && this.$refs.cartDialogContent && hyva.releaseFocus(this.$refs.cartDialogContent) 4890 } 4891 } else { 4892 this.openCartDrawer() 4893 } 4894 }, 4895 openCartDrawer() { 4896 this.open = true; 4897 this.$nextTick(() => { 4898 this.$refs && this.$refs.cartDialogContent && hyva.trapFocus(this.$refs.cartDialogContent) 4899 }) 4900 }, 4901 closeCartDrawer() { 4902 this.$dispatch('toggle-cart', { isOpen: false }) 4903 } 4904 } 4905 } 4906 function getCustomerData(sections, callback) { 4907 fetch('/customer/section/load/?sections=') 4908 .then(response => response.json()) 4909 .then(data => callback(data)) 4910 .catch(error => console.error('Error fetching customer data:', error)); 4911 } 4912</script>
4912 4913<section x-cloak 4914 x-show="cart" 4915 id="cart-drawer" 4916 x-data="initCartDrawer()" 4917 @private-content-loaded.window="getData($event.detail.data)" 4918 @toggle-cart.window="toggleCartDrawer($event)" 4919 @keydown.window.escape="closeCartDrawer" 4920> 4921 <div role="dialog" 4922 aria-labelledby="cart-drawer-title" 4923 aria-modal="true" 4924 @click.outside="open=false" 4925 class="fixed inset-y-0 right-0 z-30 flex max-w-full"> 4926 <div class="backdrop" 4927 x-show="open" 4928 x-transition:enter="ease-in-out duration-500" 4929 x-transition:enter-start="opacity-0" 4930 x-transition:enter-end="opacity-100" 4931 x-transition:leave="ease-in-out duration-500" 4932 x-transition:leave-start="opacity-100" 4933 x-transition:leave-end="opacity-0" 4934 role="button" 4935 @click="closeCartDrawer" 4936 aria-label="Close minicart"></div> 4937 <div class="relative w-screen max-w-md shadow-2xl" 4938 x-show="open" 4939 x-transition:enter="transform transition ease-in-out duration-500 sm:duration-700" 4940 x-transition:enter-start="translate-x-full" 4941 x-transition:enter-end="translate-x-0" 4942 x-transition:leave="transform transition ease-in-out duration-500 sm:duration-700" 4943 x-transition:leave-start="translate-x-0" 4944 x-transition:leave-end="translate-x-full" 4945 > 4946 <div 4947 x-show="open" 4948 x-transition:enter="ease-in-out duration-500" 4949 x-transition:enter-start="opacity-0" 4950 x-transition:enter-end="opacity-100" 4951 x-transition:leave="ease-in-out duration-500" 4952 x-transition:leave-start="opacity-100" 4953 x-transition:leave-end="opacity-0" class="absolute top-0 right-0 flex pr-6 pt-19"> 4954 <button @click="open=false" aria-label="Close panel" 4955 class="p-0 text-black transition duration-150 ease-in-out hover:text-black"> 4956 <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"> 4957 <path stroke-linecap="round" stroke-linejoin="round" d="M6 18L18 6M6 6l12 12"/> 4958<title>x</title></svg> 4959 </button> 4960 </div> 4961 <div class="flex flex-col h-full bg-lightblue"> 4962 4963 <header class="px-4 pt-19 pb-6"> 4964 <h2 id="cart-drawer-title" class="text-size18 font-medium text-black"> 4965 <template x-if="!itemsCount"> 4966 <div>My Cart</div></template> 4967<template x-if="itemsCount"> 4968 <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> 4969</template> 4970 <span class="items-total text-xs text-black" 4971 x-show="maxItemsToDisplay && maxItemsToDisplay < itemsCount" 4972 x-text="getItemCountTitle()"> 4973 </span> 4974 </h2> 4975 </header> 4976 4977 4978<template x-if="!itemsCount"> 4979 <div class="relative px-4 py-6 border-bs sm:px-6 border-container"> 4980 Cart is empty </div> 4981 </template> 4982 <div class="relative grid overflow-y-auto overflow-x-hidden bg-lightblue cart-items"> 4983 <template x-for="item in cartItems"> 4984 <div class="flex items-start cart-item px-4 pt-5 pb-6 transition duration-150 4985 ease-in-out"> 4986 <template x-if="!item.product_has_url"> 4987 <a :href="item.product_url" class="w-1/4 pr-6 image"> 4988 <img 4989 :src="item.product_image.src" 4990 :width="item.product_image.width" 4991 :height="item.product_image.height" 4992 loading="lazy" 4993 /> 4994 </a> 4995 </template> 4996 <template x-if="item.product_has_url == 1"> 4997 <a :href="item.product_url" class="w-1/4 pr-6 image"> 4998 <img 4999 :src="item.product_image.src" 5000 :width="item.product_image.width" 5001 :height="item.product_image.height" 5002 loading="lazy" 5003 /> 5004 </a> 5005 </template> 5006 <div class="w-3/4"> 5007 <div> 5008 <template x-if="!item.product_has_url"> 5009 <a :href="item.product_url" class="prosku"> 5010 <p><span class="product-title text-size16 font-semibold text-darkblack" x-html="item.product_name"></span></p> 5011 </a> 5012 </template> 5013 <template x-if="item.product_has_url == 1"> 5014 <a :href="item.product_url" class="prosku"> 5015 <p><span class="product-title text-size16 font-semibold text-darkblack" x-html="item.product_name"></span></p> 5016 </a> 5017 </template> 5018 </div> 5019 <template x-for="option in item.options"> 5020 <div class="flex pt-2 pb-1 item-options w-full" 5021 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)"> 5022 <div class="flex w-full"> 5023 <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> 5024 <template x-if="!item.product_has_url"> 5025 <a :href="item.product_url" 5026 x-show="item.product_type !== 'grouped' && option.label != 'Configurable Product Image'" 5027 class="inline-flex"><p class="pl-1 text-size14 font-normal text-black" x-html="option.value"></p></a> 5028 </template> 5029 <template x-if="item.product_has_url == 1"> 5030 <a :href="item.product_url" 5031 x-show="item.product_type !== 'grouped' && option.label != 'Configurable Product Image'" 5032 class="inline-flex"><p class="pl-1 text-size14 font-normal text-black" x-html="option.value"></p></a> 5033 </template> 5034 </div> 5035 </div> 5036 </template> 5037 <p class="pb-4 pt-1"><span x-html="item.product_price" class="text-size20 font-bold text-custom-blue pricebox"></span></p> 5038 <div class="text-xl flex qty-fields items-center"> 5039 <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> 5040 <div class="ml-auto"> 5041 <button 5042 @click="deleteItemFromCart(item.item_id)" 5043 > 5044 <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> 5045 </button> 5046 </div> 5047 </div> 5048 5049 </div> 5050 </div> 5051 </template> 5052 </div> 5053<template x-if="itemsCount"> 5054 5055 <div class="relative bg-lightblue grid pt-3 pb-4"> 5056 <div class="w-full transition duration-150 ease-in-out sub-total"> 5057 <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> 5058 </div> 5059 5060 <div class="w-full transition duration-150 ease-in-out 5061 chekout-btn"> 5062 <a href="https://www.flooringinc.com/checkout/cart/" 5063 class="no-underline block relative font-medium text-size16 text-custom-white bg-custom-blue"> 5064 Proceed to Cart </a> 5065 </div> 5066 </div> 5067</template> 5068 </div> 5069 </div> 5070 <div class="flex flex-row justify-center items-center w-full h-full fixed select-none z-50" 5071 style="left: 50%;top: 50%;transform: translateX(-50%) translateY(-50%);background: rgba(255,255,255,0.7);" 5072 x-show="isLoading" 5073 x-transition:enter="ease-out duration-200" 5074 x-transition:enter-start="opacity-0" 5075 x-transition:enter-end="opacity-100" 5076 x-transition:leave="ease-in duration-200" 5077 x-transition:leave-start="opacity-100" 5078 x-transition:leave-end="opacity-0"> 5079 <!-- By Sam Herbert (@sherb), for everyone. More @ http://goo.gl/7AJzbL --> 5080<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 57 57" stroke="currentColor" class="text-primary" width="57" height="57" role="img"> 5081 <g fill="none" fill-rule="evenodd"> 5082 <g transform="translate(1 1)" stroke-width="2"> 5083 <circle cx="5" cy="50" r="5">
5084 <animate attributeName="cy" begin="0s" dur="2.2s" values="50;5;50;50" calcMode="linear" repeatCount="indefinite"/> 5085 <animate attributeName="cx" begin="0s" dur="2.2s" values="5;27;49;5" calcMode="linear" repeatCount="indefinite"/> 5086 </circle> 5087 <circle cx="27" cy="5" r="5"> 5088 <animate attributeName="cy" begin="0s" dur="2.2s" from="5" to="5" values="5;50;50;5" calcMode="linear" repeatCount="indefinite"/> 5089 <animate attributeName="cx" begin="0s" dur="2.2s" from="27" to="27" values="27;49;5;27" calcMode="linear" repeatCount="indefinite"/> 5090 </circle> 5091 <circle cx="49" cy="50" r="5"> 5092 <animate attributeName="cy" begin="0s" dur="2.2s" values="50;50;5;50" calcMode="linear" repeatCount="indefinite"/> 5093 <animate attributeName="cx" from="49" to="49" begin="0s" dur="2.2s" values="49;5;27;49" calcMode="linear" repeatCount="indefinite"/> 5094 </circle> 5095 </g> 5096 </g> 5097<title>loader</title></svg> 5098 <div class="ml-10 text-primary text-xl"> 5099 Loading... </div> 5100</div> 5101 </div> 5102 </template> 5103</section> 5104 5105 <!--Authentication Pop-Up--> 5106
5106<script> 5107 function initAuthentication() { 5108 return { 5109 open: false, 5110 forceAuthentication: false, 5111 checkoutUrl: 'https://www.flooringinc.com/checkout/index/', 5112 errors: 0, 5113 hasCaptchaToken: 0, 5114 displayErrorMessage: false, 5115 errorMessages: [], 5116 setErrorMessages: function setErrorMessages(messages) { 5117 this.errorMessages = [messages]; 5118 this.displayErrorMessage = this.errorMessages.length; 5119 }, 5120 submitForm: function () { 5121 // Do not rename $form, the variable is expected to be declared in the recaptcha output 5122 const $form = document.querySelector('#login-form-new'); 5123 5124 if (this.errors === 0) { 5125 this.dispatchLoginRequest($form); 5126 } 5127 }, 5128 onPrivateContentLoaded: function (data) { 5129 const isLoggedIn = data.customer && data.customer.firstname; 5130 if (data.cart && !isLoggedIn) { 5131 this.forceAuthentication = !data.cart.isGuestCheckoutAllowed; 5132 } 5133 }, 5134 redirectIfAuthenticated: function (event) { 5135 if (event.detail && event.detail.url) { 5136 this.checkoutUrl = event.detail.url; 5137 } 5138 if (!this.forceAuthentication) { 5139 window.location.href = this.checkoutUrl; 5140 } 5141 }, 5142 dispatchLoginRequest: function(form) { 5143 this.isLoading = true; 5144 const username = this.$refs['customer-email'].value; 5145 const password = this.$refs['customer-password'].value; 5146 const formKey = hyva.getFormKey(); 5147 const bodyFields = { 5148 'username': username, 5149 'password': password, 5150 'formKey': formKey 5151 }; 5152 const fieldName = 'g\u002Drecaptcha\u002Dresponse'; 5153 const recaptchaField = fieldName && form[fieldName]; 5154 if (recaptchaField) { 5155 bodyFields[fieldName] = recaptchaField.value; 5156 } 5157 fetch('https://www.flooringinc.com/customer/ajax/login/', { 5158 method: 'POST', 5159 headers: { 5160 'Content-Type': 'application/json', 5161 'X-Requested-With': 'XMLHttpRequest' 5162 }, 5163 body: JSON.stringify(bodyFields) 5164 } 5165 ).then(response => { 5166 return response.json() 5167 } 5168 ).then(data=> { 5169 this.isLoading = false; 5170 if (data.errors) { 5171 dispatchMessages([{ 5172 type: 'error', 5173 text: data.message 5174 }], 5000); 5175 this.errors = 1; 5176 this.hasCaptchaToken = 0; 5177 } else { 5178 window.location.href = this.checkoutUrl; 5179 } 5180 }); 5181 } 5182 } 5183 } 5184</script>
5184 5185<section id="authentication-popup" 5186 x-data="initAuthentication()" 5187 @private-content-loaded.window="onPrivateContentLoaded($event.detail.data)" 5188 @toggle-authentication.window="open = forceAuthentication; redirectIfAuthenticated(event)" 5189 @keydown.window.escape="open = false" 5190> 5191 <div role="dialog" 5192 aria-modal="true" 5193 @click.outside="open = false" 5194 class="inset-y-0 right-0 z-30 flex max-w-full" 5195 :class="{'fixed': open }" x-cloak x-show="open" 5196 > 5197 <div class="relative w-screen max-w-md pt-16 bg-container-lighter" 5198 x-show="open" 5199 x-cloak="" 5200 x-transition:enter="transform transition ease-in-out duration-500 sm:duration-700" 5201 x-transition:enter-start="translate-x-full" 5202 x-transition:enter-end="translate-x-0" 5203 x-transition:leave="transform transition ease-in-out duration-500 sm:duration-700" 5204 x-transition:leave-start="translate-x-0" 5205 x-transition:leave-end="translate-x-full" 5206 > 5207 <div 5208 x-show="open" 5209 x-cloak="" 5210 x-transition:enter="ease-in-out duration-500" 5211 x-transition:enter-start="opacity-0" 5212 x-transition:enter-end="opacity-100" 5213 x-transition:leave="ease-in-out duration-500" 5214 x-transition:leave-start="opacity-100" 5215 x-transition:leave-end="opacity-0" class="absolute top-0 right-0 flex p-2 mt-2"> 5216 <button @click="open = false;" aria-label="Close panel" 5217 class="p-2 text-gray-300 transition duration-150 ease-in-out hover:text-black"> 5218 <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"> 5219 <path stroke-linecap="round" stroke-linejoin="round" d="M6 18L18 6M6 6l12 12"/> 5220<title>x</title></svg> 5221 </button> 5222 </div> 5223 <div class="flex flex-col h-full py-6 space-y-6 bg-white shadow-xl overflow-y-auto"> 5224 <div class="block-customer-login bg-container border border-container mx-4 p-4 shadow-sm"> 5225 <p id="authenticate-customer-login" class="text-lg leading-7 text-gray-900"> 5226 <strong class="font-medium">Checkout using your account</strong> 5227 </p> 5228 5229 <form class="form form-login" 5230 method="post" 5231 @submit.prevent="submitForm();" 5232 id="login-form-new" 5233 > 5234 <div class="fieldset login"> 5235 <div class="field email required"> 5236 <label class="label" for="form-login-username" form="login-form" > 5237 <span>Email Address</span> 5238 </label> 5239 <div class="control"> 5240 <input name="username" 5241 id="form-login-username" 5242 x-ref="customer-email" 5243 @change="errors = 0" 5244 type="email" 5245 required 5246 class="form-input input-text" 5247 > 5248 </div> 5249 </div> 5250 <div class="field password required"> 5251 <label for="form-login-password" class="label" form="login-form"> 5252 <span>Password</span> 5253 </label> 5254 <div class="control"> 5255 <input name="password" 5256 id="form-login-password" 5257 type="password" 5258 class="form-input input-text" 5259 required 5260 x-ref="customer-password" 5261 @change="errors = 0" 5262 > 5263 </div> 5264 </div> 5265 5266 <input name="context" type="hidden" value="checkout" /> 5267 <div class="actions-toolbar flex justify-between pt-6 pb-2 items-center"> 5268 <button type="submit" class="inline-flex btn btn-primary disabled:opacity-75" 5269 > 5270 Sign In </button> 5271 <a href="https://www.flooringinc.com/customer/account/forgotpassword/" 5272 > 5273 Forgot Your Password? </a> 5274 </div> 5275 5276 </div> 5277 </form> 5278 </div> 5279 <div class="mx-4"> 5280 </div> 5281 <div class="block-new-customer bg-container border border-container mx-4 p-4 shadow-sm">
5282 <p id="authenticate-new-customer" class="text-lg mb-2 leading-7 text-gray-900"> 5283 <strong class="font-medium">Checkout as a new customer</strong> 5284 </p> 5285 5286 <div class="block-content"> 5287 <p class="mb-1"> 5288 Creating an account has many benefits: </p> 5289 <ul class="list-disc pl-5"> 5290 <li> See order and shipping status</li> 5291 <li> Track order history</li> 5292 <li> Check out faster</li> 5293 </ul> 5294 <div class="actions-toolbar flex justify-between mt-6 mb-2 items-center"> 5295 <a href="https://www.flooringinc.com/customer/account/create/" 5296 class="inline-flex btn btn-primary"> 5297 Create an Account </a> 5298 </div> 5299 </div> 5300 </div> 5301 </div> 5302 </div> 5303 </div> 5304</section> 5305 5306 <!--Cart Quote Drawer--> 5307
5307<script> 5308 function initQuoteCartDrawer() { 5309 return { 5310 open: false, 5311 cartData: {}, 5312 getQuoteCartData(data) { 5313 if (data.quotecart) { 5314 this.cartData = data.quotecart 5315 this.setCartItems(); 5316 } 5317 }, 5318 cartItems: [], 5319 setCartItems() { 5320 this.cartItems = this.cartData && this.cartData.items.sort(function(a,b) { return a.item_id - b.item_id }) || {} 5321 }, 5322 deleteItemFromCart(itemId) { 5323 var formKey = document.querySelector('input[name=form_key]').value; 5324 fetch(BASE_URL+"amasty_quote/sidebar/removeItem/", { 5325 "headers": { 5326 "content-type": "application/x-www-form-urlencoded; charset=UTF-8", 5327 }, 5328 "body": "form_key="+ formKey + "&item_id="+itemId, 5329 "method": "POST", 5330 "mode": "cors", 5331 "credentials": "include" 5332 }).then(function (response) { 5333 if (response.redirected) { 5334 window.location.href = response.url; 5335 } else if (response.ok) { 5336 return response.json(); 5337 } else { 5338 typeof window.dispatchMessages !== "undefined" && window.dispatchMessages( 5339 [{ 5340 type: "warning", 5341 text: "Could not remove item from quote." 5342 }], 5000 5343 ); 5344 } 5345 }).then(function (response) { 5346 typeof window.dispatchMessages !== "undefined" && window.dispatchMessages( 5347 [{ 5348 type: response.success ? "success" : "error", 5349 text: response.success 5350 ? "You removed the item." 5351 : response.error_message 5352 }], 5000 5353 ); 5354 var reloadCustomerDataEvent = new CustomEvent("reload-customer-section-data"); 5355 window.dispatchEvent(reloadCustomerDataEvent); 5356 }); 5357 } 5358 } 5359 } 5360</script>
5360 5361<section id="cart-quote-drawer" 5362 x-data="initQuoteCartDrawer()" 5363 @private-content-loaded.window="getQuoteCartData(event.detail.data)" 5364 @toggle-quote-cart.window="open=true;" 5365 @keydown.window.escape="open=false" 5366> 5367 <template x-if="cartData && cartData.summary_count"> 5368 <div role="dialog" 5369 aria-labelledby="cart-drawer-title" 5370 aria-modal="true" 5371 @click.away="open = false" 5372 class="fixed inset-y-0 right-0 z-30 flex max-w-full"> 5373 <div class="backdrop" 5374 x-show="open" 5375 x-transition:enter="ease-in-out duration-500" 5376 x-transition:enter-start="opacity-0" 5377 x-transition:enter-end="opacity-100" 5378 x-transition:leave="ease-in-out duration-500" 5379 x-transition:leave-start="opacity-100" 5380 x-transition:leave-end="opacity-0" 5381 @click="open = false" 5382 aria-label="Close panel"></div> 5383 <div class="relative w-screen max-w-md shadow-2xl" 5384 x-show="open" 5385 x-transition:enter="transform transition ease-in-out duration-500 sm:duration-700" 5386 x-transition:enter-start="translate-x-full" 5387 x-transition:enter-end="translate-x-0" 5388 x-transition:leave="transform transition ease-in-out duration-500 sm:duration-700" 5389 x-transition:leave-start="translate-x-0" 5390 x-transition:leave-end="translate-x-full" 5391 > 5392 <div 5393 x-show="open" 5394 x-transition:enter="ease-in-out duration-500" 5395 x-transition:enter-start="opacity-0" 5396 x-transition:enter-end="opacity-100" 5397 x-transition:leave="ease-in-out duration-500" 5398 x-transition:leave-start="opacity-100" 5399 x-transition:leave-end="opacity-0" class="absolute top-0 right-0 flex mr-3 mt-2"> 5400 <button @click="open = false" aria-label="Close panel" 5401 class="p-2 text-gray-300 transition duration-150 ease-in-out hover:text-black"> 5402 <svg class="w-6 h-6" fill="none" viewBox="0 0 24 24" stroke="currentColor"> 5403 <path stroke-linecap="round" stroke-linejoin="round" 5404 stroke-width="2" d="M6 18L18 6M6 6l12 12"> 5405 </path> 5406 </svg> 5407 </button> 5408 </div> 5409 <div class="flex flex-col h-full py-6 space-y-6 bg-white shadow-xl"> 5410 <header class="px-4 sm:px-6"> 5411 <div id="cart-drawer-title" class="text-lg font-medium leading-7 text-gray-900"> 5412 My Quote Cart </div> 5413 </header> 5414 <div class="relative grid gap-6 px-4 py-6 overflow-y-auto bg-white border-b 5415 sm:gap-8 sm:px-6 border-container"> 5416 <template x-for="item in cartItems"> 5417 <div class="flex items-start p-3 -m-3 space-x-4 transition duration-150 5418 ease-in-out rounded-lg hover:bg-gray-100"> 5419 <a :href="item.product_url" class="w-1/4"> 5420 <img 5421 :src="item.product_image.src" 5422 :width="item.product_image.width" 5423 :height="item.product_image.height" 5424 loading="lazy" 5425 /> 5426 </a> 5427 <div class="w-3/4 relative"> 5428 <div> 5429 <div class="text-xl"> 5430 <a :href="item.product_url" class="hover:underline"> 5431 <span x-html="item.qty"></span> x <span x-html="item.product_name"></span> 5432 </a> 5433 </div> 5434 <div class="text-sm"><span x-html="item.product_sku"></div> 5435 </div> 5436 <template x-for="option in item.options"> 5437 <div class="pt-2"> 5438 <p class="font-semibold" x-text="option.label + ':'"></p> 5439 <p class="text-secondary" x-html="option.value"></p> 5440 </div> 5441 </template> 5442 <div><span x-html="item.product_price"></span></div> 5443 <div class="pt-4"> 5444 <a :href="item.configure_url" 5445 x-show="item.product_type !== 'grouped'" 5446 class="inline-flex p-2 mr-2 btn btn-primary"> 5447 <svg fill="none" viewBox="0 0 24 24" stroke="currentColor" 5448 size="16" class="w-5 h-5"> 5449 <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" 5450 d="M15.232 5.232l3.536 3.536m-2.036-5.036a2.5 2.5 0 113.536 5451 3.536L6.5 21.036H3v-3.572L16.732 3.732z"> 5452 </path> 5453 </svg> 5454 </a> 5455 <button class="inline-flex p-2 btn btn-primary" 5456 @click="deleteItemFromCart(item.item_id)" 5457 > 5458 <svg fill="none" viewBox="0 0 24 24" stroke="currentColor" 5459 size="16" class="w-5 h-5"> 5460 <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" 5461 d="M19 7l-.867 12.142A2 2 0 0116.138 21H7.862a2 2 0 5462 01-1.995-1.858L5 7m5 4v6m4-6v6m1-10V4a1 1 0 00-1-1h-4a1 1 5463 0 00-1 1v3M4 7h16"> 5464 </path> 5465 </svg> 5466 </button> 5467 </div> 5468 </div> 5469 </div> 5470 </template> 5471 </div> 5472 <div class="relative grid gap-6 px-4 py-6 bg-white sm:gap-8 sm:px-6"> 5473 <div class="w-full p-3 -m-3 space-x-4 transition duration-150 ease-in-out rounded-lg 5474 hover:bg-gray-100">
5475 <span>Cart Subtotal:</span> 5476 <span class="text-gray-900 font-bold" x-text="hyva.formatPrice(cartData.subtotalAmount)"></span> 5477 </div> 5478 <div class="w-full"> 5479 <a href="https://www.flooringinc.com/amasty_quote/cart/" 5480 class="btn btn-secondary justify-center"> 5481 View and Edit Cart </a> 5482 </div> 5483 </div> 5484 </div> 5485 </div> 5486 </div> 5487 </template> 5488</section> 5489 5490</div> 5491 5492<div x-data="initKlaviyoCustomerTracking()" 5493 @private-content-loaded.window="sendCustomerDataToKlaviyo(event.detail.data)"></div> 5494
5494<script> 5495 function initKlaviyoCustomerTracking() { 5496 return { 5497 sendCustomerDataToKlaviyo(data) { 5498 window.addEventListener('init-external-scripts', () => { 5499 const _learnq = window._learnq || []; 5500 const customer = data.customer; 5501 var resource = document.createElement('script'); 5502 resource.async = "true"; 5503 resource.src = "https://static.klaviyo.com/onsite/js/klaviyo.js?company_id=WAwVDg"; 5504 var script = document.getElementsByTagName('script')[0]; 5505 script.parentNode.insertBefore(resource, script); 5506 5507 if (customer && customer.email) { 5508 script.addEventListener('load', function() { 5509 _learnq.push(['identify', { 5510 $email: customer.email, 5511 $first_name: customer.firstname ? customer.firstname : '', 5512 $last_name: customer.lastname ? customer.lastname : '' 5513 }]); 5514 }); 5515 } 5516 }, {once: true, passive: true}); 5517 } 5518 } 5519 } 5520 </script>
5520 5521<a class="action skip sr-only contentarea" 5522 href="#contentarea"> 5523 <span> 5524 Skip to Content </span> 5525</a> 5526<div class="widget block block-static-block"> 5527 <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]"> 5528 <style>#html-body [data-pb-style=LJM3NLA]{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="LJM3NLA"><div data-content-type="html" data-appearance="default" data-element="main" data-decoded="true"><center> 5529<p style="font-size: medium;">ð Fall Flooring Refresh - Save Up To 35% Off - Sale Ends Sunday 9/27 </p> 5530 5531</center> 5532</div></div></div></div></div></div> 5533</header><div class="top-container"><nav class="breadcrumbs order-2 w-full" aria-label="Breadcrumb"> 5534 <div class="breadcrumbs-in py-8"> 5535 <ol class="items list-reset rounded flex flex-wrap text-grey text-sm"> 5536 <li class="item flex Homepage"> 5537 <a href="/" 5538 class="no-underline text-sm font-normal" 5539 title="Homepage" 5540 >Homepage</a> 5541 </li> 5542 <li class="item flex Shopping Cart"> 5543 <span aria-hidden="true" class="separator text-primary-lighter px-2 text-sm font-normal">/</span> 5544 <a href="" 5545 class="text-sm font-semibold current" 5546 aria-current="page" 5547 >Shopping Cart</a> 5548 </li> 5549 </ol> 5550 </div> 5551</nav> 5552</div><main id="maincontent" class="page-main"><div id="contentarea" tabindex="-1"></div> 5553<div class="page messages">
5553<script> 5554 function initMessages() { 5555 "use strict"; 5556 return { 5557 messages: window.mageMessages || [], 5558 isEmpty() { 5559 return this.messages.reduce( 5560 function (isEmpty, message) { 5561 return isEmpty && message === undefined 5562 }, true 5563 ) 5564 }, 5565 removeMessage(messageIndex) { 5566 this.messages[messageIndex] = undefined; 5567 }, 5568 addMessages(messages, hideAfter) { 5569 messages.map((message) => { 5570 /* Code to avoid multiple messages on the page */ 5571 5572 if (message.text.includes("A customer with the same email address already exists")) { 5573 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>.'; 5574 } 5575 if(this.messages!="") { 5576 this.messages=[]; 5577 } 5578 this.messages = this.messages.concat(message); 5579 if (hideAfter) { 5580 this.setHideTimeOut(this.messages.length -1, hideAfter); 5581 } 5582 }); 5583 }, 5584 setHideTimeOut(messageIndex, hideAfter) { 5585 setTimeout((messageIndex) => { 5586 this.removeMessage(messageIndex); 5587 }, hideAfter, messageIndex); 5588 }, 5589 eventListeners: { 5590 ['@messages-loaded.window']() { 5591 this.addMessages(event.detail.messages, event.detail.hideAfter) 5592 }, 5593 ['@private-content-loaded.window'](event) { 5594 const data = event.detail.data; 5595 if ( 5596 data.messages && 5597 data.messages.messages && 5598 data.messages.messages.length 5599 ) { 5600 this.addMessages(data.messages.messages); 5601 } 5602 }, 5603 ['@clear-messages.window']() { 5604 this.messages = []; 5605 } 5606 } 5607 } 5608 } 5609</script>
5609 5610<section id="messages" 5611 x-data="initMessages()" 5612 x-bind="eventListeners" 5613> 5614 <template x-if="!isEmpty()"> 5615 <div class="w-full"> 5616 <div role="alert" class="messages container"> 5617 <template x-for="(message, index) in messages" :key="index"> 5618 <div> 5619 <template x-if="message"> 5620 <div class="message" :class="message.type" 5621 :ui-id="'message-' + message.type" 5622 > 5623 <span x-html="message.text"></span> 5624 <a href="#" class="close cursor-pointer" title="close" 5625 @click.prevent="removeMessage(index)"> 5626 <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"> 5627 <path stroke-linecap="round" stroke-linejoin="round" d="M6 18L18 6M6 6l12 12"/> 5628<title>x</title></svg> 5629 </a> 5630 </div> 5631 </template> 5632 </div> 5633 </template> 5634 </div> 5635 </div> 5636 </template> 5637</section></div><div class="container flex flex-col md:flex-row flex-wrap font-bold"> 5638 <h1 class="text-gray-900 page-title title-font" 5639 > 5640 <span class="base" data-ui-id="page-title-wrapper" >Shopping Cart</span> </h1> 5641 </div> 5642<div class="widget block block-static-block"> 5643 <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> 5644<div class="widget block block-static-block"> 5645 <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> 5646<div class="columns"><div class="column main">
5646<script> 5647 5648 5649</script>
vendor: 2 bytes, line 5649
5649
5650<script> 5651 function samplesubmit(mainproduct,inputValue,productids,colors,spidsColors,confproname,confproid,childproids) { 5652 this.isLoading = true; 5653 const formKey = hyva.getFormKey(); 5654 const postUrl = BASE_URL + 'sampleproduct/Sample/Products/'; 5655 fetch(postUrl, { 5656 "headers": { 5657 "content-type": "application/x-www-form-urlencoded; charset=UTF-8", 5658 }, 5659 "body": "form_key=" + formKey + "&action_type=" + inputValue+ "&pids=" + productids+ "&colors=" + colors+ "&spidsColors=" + spidsColors+ "&confproname=" + confproname+ "&confproid=" + confproid +"&childproid=" + childproids, 5660 "method": "POST", 5661 "mode": "cors", 5662 "credentials": "include" 5663 }).then(response => { 5664 //this.isLoading = false; 5665 //window.dispatchEvent(new CustomEvent('reload-customer-section-data')); 5666 //fetchHtmlContent(mainproduct); 5667 if (! response.ok) console.warn('GET request failed'); 5668 return response.json(); 5669 }).then(result => { 5670 this.isLoading = false; 5671 window.dispatchEvent(new CustomEvent('reload-customer-section-data')); 5672 fetchHtmlContent(mainproduct,result.is_sample_added); 5673 }); 5674 } 5675 </script>
5675 5676
5676<script> 5677 function fetchHtmlContent(pid,is_sample_added) { 5678 console.log('Fetching HTML content for PID:', pid); 5679 const formKey = hyva.getFormKey(); 5680 const randomString = Math.random().toString(36).substring(2, 15); 5681 const postUrl = BASE_URL + 'sampleproduct/sample/popup/?pid='+pid; 5682 fetch(postUrl) 5683 .then(response => response.text()) 5684 .then(html => { 5685 console.log('Response received:', html); 5686 let myDivelements = document.getElementsByClassName('htmlcontent'+pid); 5687 var numberofelements=myDivelements.length; 5688 for(var i=0;i<numberofelements;++i){ 5689 myDivelements[i].innerHTML = html; 5690 } 5691 if(is_sample_added == 1 ){ //&& window.innerWidth <= 767 5692 document.querySelector(".order-free-sample-popup .closemodal").dispatchEvent(new Event('click')); 5693 document.querySelector("#menu-cart-icon").dispatchEvent(new Event('click')); 5694 } 5695 }) 5696 .catch(error => { 5697 console.error(error); 5698 }); 5699 } 5700</script>
5700 5701
5701<script> 5702 if (window.require) { 5703 require(['jquery', 'domReady!'], function($){ 5704 if ($('.mfblogunveil').length) { 5705 require(['Magefan_Blog/js/lib/mfblogunveil'], function(){ 5706 $('.mfblogunveil').mfblogunveil(); 5707 }); 5708 } 5709 }); 5710 } else { 5711 /* e.g. hyva theme */ 5712 document.addEventListener("DOMContentLoaded", function(){ 5713 var items = document.getElementsByClassName('mfblogunveil'); 5714 var el, url; 5715 if (items.length) { 5716 for (var i=0; i<items.length;i++) { 5717 el = items[i]; 5718 url = el.getAttribute('data-original'); 5719 if (!url) { 5720 continue; 5721 } 5722 if ('IMG' == el.tagName) { 5723 el.src = url; 5724 } else { 5725 el.style.backgroundImage = "url('" + url + "')"; 5726 } 5727 } 5728 } 5729 }); 5730 } 5731 </script>
5731 5732 5733
5734<script> 5735 window.checkoutConfig = false; 5736 window.customerData = window.checkoutConfig.customerData; 5737 window.isCustomerLoggedIn = window.checkoutConfig.isCustomerLoggedIn; 5738</script>
5738 5739
5740<script> 5741 'use strict'; 5742 (function( hyva, undefined ) { 5743 /** 5744 * Takes a form element and submits it through fetch, 5745 * then replaces the result into the document without 5746 * refreshing the page 5747 */ 5748 hyva.postCart = (form) => { 5749 if (!form.action) { 5750 return; 5751 } 5752 const action = form.action; 5753 const formData = new FormData(form); 5754 5755 if (!formData.uenc) { 5756 formData.append('uenc', hyva.getUenc()); 5757 } 5758 5759 formData.append('form_key', hyva.getFormKey()); 5760 5761 window.fetch(action, { 5762 method: 'POST', 5763 body: formData 5764 }).then((result) => { 5765 return result.text() 5766 }).then((content) => { 5767 5768 hyva.replaceDomElement('#maincontent', content); 5769 //Cart Improvements Start 5770 if (document.querySelector('.page.messages')) { 5771 document.querySelector('.page.messages').style.display = 'none'; 5772 } 5773 5774 setTimeout(() => { 5775 let messageElement = document.querySelector('.message.success span'); 5776 let errorMessageElement = document.querySelector('.message.error span'); 5777 if (messageElement) { 5778 let messageText = messageElement.innerText || messageElement.textContent; 5779 if (messageText.includes('coupon code')) { 5780 let parentContainer = messageElement.closest('.page.messages'); 5781 if (parentContainer) { 5782 parentContainer.style.display = 'none'; 5783 let couponSuccessMsg = document.querySelector('.coupon-success-msg'); 5784 if (couponSuccessMsg) { 5785 couponSuccessMsg.innerText = messageText; 5786 } 5787 } 5788 } else { 5789 if (document.querySelector('.page.messages')) { 5790 document.querySelector('.page.messages').style.display = 'block'; 5791 } 5792 } 5793 } 5794 5795 if (errorMessageElement) { 5796 let errorMessageText = errorMessageElement.innerText || errorMessageElement.textContent; 5797 if (errorMessageText.includes('coupon code')) { 5798 let parentContainer = errorMessageElement.closest('.page.messages'); 5799 if (parentContainer) { 5800 parentContainer.style.display = 'none'; 5801 let couponErrorMsg = document.querySelector('.coupon-error-msg'); 5802 if (couponErrorMsg) { 5803 couponErrorMsg.innerText = errorMessageText; 5804 } 5805 } 5806 } else { 5807 if (document.querySelector('.page.messages')) { 5808 document.querySelector('.page.messages').style.display = 'block'; 5809 } 5810 } 5811 } 5812 }, 50); 5813 //Cart Improvements End 5814 5815 // Select all tbody elements with a class that contains 'sku-' 5816 let elements = document.querySelectorAll("tbody[class*='sku-']"); 5817 if (elements) { 5818 let skuGroups = {}; 5819 elements.forEach(el => { 5820 // Find the class that starts with 'sku-' 5821 let skuClass = Array.from(el.classList).find(cls => cls.startsWith("sku-")); 5822 5823 if (skuClass) { 5824 // Initialize array for each SKU type 5825 if (!skuGroups[skuClass]) { 5826 skuGroups[skuClass] = []; 5827 } 5828 skuGroups[skuClass].push(el); 5829 } 5830 }); 5831 5832 // Loop through each SKU group and hide all except the last one
5833 Object.values(skuGroups).forEach(group => { 5834 group.forEach((el, index) => { 5835 el.style.display = index === group.length - 1 ? "table-row-group" : "none"; 5836 }); 5837 }); 5838 } 5839 }).catch((error) => { 5840 console.error(error); 5841 typeof window.dispatchMessages !== "undefined" && window.dispatchMessages( 5842 [{ 5843 type: "error", 5844 text: "Something\u0020went\u0020wrong.\u0020Please\u0020try\u0020again." 5845 }], 10000 5846 ); 5847 }) 5848 } 5849 }( window.hyva = window.hyva || {} )); 5850</script>
5850 5851
5852<script> 5853 5854 function initCartForm(){ 5855 return { 5856 cartIsEmpty: !!window.checkoutConfig, 5857 checkCartShouldUpdate(data) { 5858 const cart = data.cart; 5859 5860 if (this.cartIsEmpty !== !!window.checkoutConfig) { 5861 this.cartIsEmpty = !!window.checkoutConfig; 5862 this.reloadCartContent(); 5863 return; 5864 } 5865 5866 if (cart) { 5867 if (!window.checkoutConfig) { 5868 if (cart.items.length) { 5869 this.reloadCartContent(); 5870 } 5871 return; 5872 } 5873 5874 const roundUp = (number) => { 5875 return Math.round(number * 100); 5876 } 5877 5878 const decimalNumbersAreEqual = (number1, number2) => { 5879 return roundUp(number1) === roundUp(number2); 5880 } 5881 5882 if (window.checkoutConfig && cart) { 5883 if (decimalNumbersAreEqual( 5884 cart.items.reduce((totalQty, cartItem) => totalQty + cartItem.qty, 0), 5885 window.checkoutConfig.quoteData.items_qty 5886 ) && 5887 decimalNumbersAreEqual( 5888 cart.subtotalAmount, 5889 window.checkoutConfig.totalsData.total_segments.find((segment) => segment.code === "subtotal").value 5890 ) 5891 ) { 5892 return; 5893 } 5894 } 5895 } 5896 this.reloadCartContent(); 5897 }, 5898 reloadCartContent() { 5899 window.fetch(window.location.href, { 5900 method: "GET" 5901 }).then((result) => { 5902 return result.text() 5903 5904 }).then((body) => { 5905 hyva.setCookie('mage-cache-sessid', '', -1, true); 5906 window.checkoutConfig = null; 5907 hyva.replaceDomElement('#maincontent', body) 5908 5909 }).catch((error) => { 5910 console.error(error); 5911 window.location.reload() 5912 }) 5913 }, 5914 onStorageChange(event) { 5915 if (event.key === 'private_content_version') { 5916 window.dispatchEvent(new CustomEvent("reload-customer-section-data")); 5917 } 5918 } 5919 } 5920 } 5921</script>
5921 5922<div x-data="initCartForm()" 5923 class="cart-form clearfix" 5924 @private-content-loaded.window="checkCartShouldUpdate($event.detail.data)" 5925 @storage.window="onStorageChange($event)" 5926> 5927 <div class="cart-empty flex flex-wrap w-full py-8 items-center justify-center"> 5928 <div class="cart-empty-left mr-8"> 5929 <picture><source type="image/webp" srcset="https://www.flooringinc.com/static/version1789462004/frontend/Dcw/hyvadesktop/en_US/images/shopping-cart-icon.webp"><img src="https://www.flooringinc.com/static/version1789462004/frontend/Dcw/hyvadesktop/en_US/images/shopping-cart-icon.png" alt="shopping-cart-icon" width="150" height="150"></picture> 5930 </div> 5931 <div class="cart-empty-right text-center"> 5932 <h4 class="text-size24 font-medium text-black mb-2">Your cart's empty</h4> 5933 <!-- Content for guest users --> 5934 <p class="text-size16 font-normal text-black mb-2">Have an account? Sign in to see your cart.</p> 5935 <p><a class="action" href="/customer/account/login/">Sign In</a></p> 5936 5937 </div> 5938</div> 5939 </div>
5940<script> 5941document.addEventListener("DOMContentLoaded", function () { 5942 // Select all tbody elements with a class that contains 'sku-' 5943 let elements = document.querySelectorAll("tbody[class*='sku-']"); 5944 5945 let skuGroups = {}; 5946 5947 elements.forEach(el => { 5948 // Find the class that starts with 'sku-' 5949 let skuClass = Array.from(el.classList).find(cls => cls.startsWith("sku-")); 5950 5951 if (skuClass) { 5952 // Initialize array for each SKU type 5953 if (!skuGroups[skuClass]) { 5954 skuGroups[skuClass] = []; 5955 } 5956 skuGroups[skuClass].push(el); 5957 } 5958 }); 5959 5960 // Loop through each SKU group and hide all except the last one 5961 Object.values(skuGroups).forEach(group => { 5962 group.forEach((el, index) => { 5963 el.style.display = index === group.length - 1 ? "table-row-group" : "none"; 5964 }); 5965 }); 5966}); 5967</script>
5967
5967<script nonce="N2Q3enk5eGFoZ3hyejB4MzJxOThhNGsyd2lybnZpbno="> 5968 function hasWebP() { 5969 var elem = document.createElement('canvas'); 5970 5971 if (!!(elem.getContext && elem.getContext('2d'))) { 5972 return elem.toDataURL('image/webp').indexOf('data:image/webp') === 0; 5973 } 5974 return false; 5975 } 5976 5977 if (hasWebP()) { 5978 document.body.classList.add("webp"); 5979 } else { 5980 document.body.classList.add("no-webp"); 5981 }</script>
5981 <div x-data="initKlaviyoCartTracking()" x-init="sendKlaviyoCartData()" x-defer="interact"></div> 5982
5982<script> 5983 function initKlaviyoCartTracking() { 5984 return { 5985 sendKlaviyoCartData() { 5986 fetch( 5987 '/reclaim/checkout/reload?form_key=' + hyva.getFormKey(), 5988 { 5989 method: 'POST', 5990 body: {}, 5991 headers: {contentType: 'application/json'} 5992 } 5993 ) 5994 } 5995 } 5996 } 5997 </script>
5997 5998</div></div><div x-data="recommendedProducts_below_main_content()" 5999 x-init="initProductRecBlock()" 6000 id="recs_block_below_main_content" 6001 class="products__recommendations"> 6002 <template x-if="productBanners"> 6003 <div> 6004 <template x-for="banner in productBanners"> 6005 <div class="product-slider" x-defer="intersect"> 6006 <section class="my-12 text-gray-700 body-font" 6007 tabindex="0" 6008 role="region" 6009 aria-label="Recommended products carousel" 6010 aria-roledescription="carousel" 6011 @keydown.arrow-right.prevent="$refs.next.click()" 6012 @keydown.arrow-left.prevent="$refs.prev.click()" 6013 > 6014 <div class="relative"> 6015 <div class="flex w-full"> 6016 <h3 x-text='banner.storefrontLabel' 6017 class="font-semibold"></h3> 6018 </div> 6019 <div class="relative flex flex-nowrap w-full recommended-slider-items products_slider" data-content-type="recommended-products"> 6020 <div class="sr-only" 6021 aria-live="polite" 6022 x-text="'Showing ' + banner.products.length + ' recommended products'"> 6023 </div> 6024 <div id="recommended-slider" class="overflow-x-hidden max-slide" data-role="glider-recommended"> 6025 <template x-for="product in banner.products"> 6026 <div class="flex shrink-0 w-full js_slide md:w-1/3 lg:w-1/5 xl:w-1/6 recommended-slider-item"> 6027 <form method="post" x-bind:action="createAddToCartUrl(product.productId)" 6028 @submit.prevent="addToCartRecsEvent($event.target, banner.unitId, product.productId)" 6029 class="item product product-item product_addtocart_form card card-interactive flex flex-col w-full catergory_slider_content bg-white"> 6030 <input name="form_key" type="hidden" :value="hyva.getFormKey()"/> 6031 <input type="hidden" name="product" x-bind:value="product.productId"> 6032 <a :href="new URL(product.url, window.location.origin).pathname" @click="recsClickEvent(banner.unitId, product.productId, product.url)" 6033 class="product photo product-item-photo block cursor-pointer" 6034 tabindex="-1"> 6035 <div class="product-list-image relative w-full overflow-hidden" 6036 x-data="recProductImage(product)" 6037 :class="{ 'is-hovered': hovered }" 6038 x-on:mouseenter="onEnter()" 6039 x-on:mousemove.debounce.80ms="onMove()" 6040 x-on:mouseleave="onLeave()"> 6041 <img class="product-list-image-primary hover:shadow-sm object-contain w-full" 6042 loading="eager" 6043 x-bind:alt="product.image?.label" 6044 x-bind:title="product.image?.label" 6045 x-bind:src="primarySrc" 6046 width="360" 6047 height="360" 6048 decoding="async" 6049 fetchpriority="high" 6050 style="position: static !important;"> 6051 <template x-if="hoverUrl && hovered"> 6052 <img class="product-list-image-hover absolute inset-0 w-full h-full object-contain pointer-events-none" 6053 x-bind:src="hoverUrl" 6054 loading="lazy" 6055 decoding="async" 6056 fetchpriority="low" 6057 width="360" 6058 height="360" 6059 x-bind:alt="product.image?.label" 6060 aria-hidden="true"> 6061 </template> 6062 </div> 6063 </a> 6064 <div class="product-info flex flex-col flex-grow"> 6065 <div 6066 class="items-center justify-center font-semibold "> 6067 <a :href="new URL(product.url, window.location.origin).pathname" class="product-item-link text-size16 text-black font-bold no-underline relative block cursor-pointer" 6068 @click="recsClickEvent(banner.unitId, product.productId, product.url)" 6069 x-text="product.name"></a> 6070 </div> 6071 6072 <div class="ratings" data-nosnippet> 6073 <div data-bv-show="rating_summary" 6074 x-bind:data-bv-product-id="product.sku" 6075 x-bind:data-bv-redirect-url="product.url"> 6076 </div> 6077 </div> 6078 6079 <template x-if="product.prices"> 6080 <div class="pt-1 text-gray-900 price-box price-final_price" x-bind:data-product-id="product.productId">
6081 <span class="normal-price"> 6082 <span class="price-container price-final_price"> 6083 <!-- <span x-show="product.prices.minimum.final !== product.prices.maximum.final" 6084 class="price-start-label">Starting From:</span> --> 6085 <span id="product-price" class="price-wrapper "> 6086 <!-- <span class="price" x-text="hyva.formatPrice(product.prices.minimum.final)"></span> --> 6087 <div x-data="productPricing(product)"> 6088 <div :class="priceContainerClasses" 6089 :itemprop="schema ? 'offers' : ''" 6090 :itemscope="schema ? true : false" 6091 :itemtype="schema ? 'http://schema.org/Offer' : ''"> 6092 6093 <!-- Price Wrapper --> 6094 <span :id="priceId" 6095 :data-label="priceDisplayLabel" 6096 :data-price-amount="priceAmount" 6097 :data-price-type="priceType" 6098 :class="priceWrapperClasses"> 6099 <template x-if="priceType === 'finalPrice' && product.type === 'configurable'"> 6100 <span class="price-start-label">Starting From:</span> 6101 </template> 6102 6103 <!-- Adjusted Price Logic --> 6104 <template x-if="calculatorType && (coverage > 0 || (width > 0 && length > 0 && height > 0))"> 6105 <span> 6106 <template x-if="minPriceVolume > 0"> 6107 <span> 6108 <template x-if="regularPrice > specialPrice && specialPrice > 0"> 6109 <span x-text="formatCurrency(specialPrice / minPriceVolume)"></span> 6110 </template> 6111 <template x-if="!(regularPrice > specialPrice && specialPrice > 0)"> 6112 <span x-text="formatCurrency(regularPrice / minPriceVolume)"></span> 6113 </template> 6114 <span x-text="'/' + calculatorType"></span> 6115 </span> 6116 </template> 6117 </span> 6118 </template> 6119 <template x-if="!calculatorType || minPriceVolume <= 0"> 6120 <sp
6120an class="price"> 6121 <span x-text="formatCurrency(displayValue)"></span> 6122 <span x-text="displayValueType"></span> 6123 </span> 6124 </template> 6125 </span> 6126 6127 <!-- MRP and Discount --> 6128 <!-- <template x-if="regularPrice > specialPrice && product.type === 'configurable'"> 6129 <span class="price-mrp"> 6130 <template x-if="minPriceVolume > 0 && calculatorType"> 6131 <span class="price-mrp-new"> 6132 <span x-text="formatCurrency(regularPrice / minPriceVolume)"></span> 6133 <span x-text="'/' + calculatorType"></span> 6134 </span> 6135 <span class="savePrice" x-text="'Save ' + discountPercentage + '%'"></span> 6136 </template> 6137 <template x-if="!(minPriceVolume > 0 && calculatorType)"> 6138 <span class="price-mrp-new"> 6139 <span x-text="formatCurrency(regularPrice)"></span> 6140 <span>/each</span> 6141 </span> 6142 <span class="savePrice" x-text="'Save ' + discountPercentage + '%'"></span> 6143 </template> 6144 </span> 6145 </template> --> 6146 6147 <!-- Adjustments --> 6148 <template x-if="adjustmentsHtml"> 6149 <span x-html="adjustmentsHtml"></span> 6150 </template> 6151 6152 <!-- Schema --> 6153 <template x-if="schema"> 6154 <meta itemprop="price" :content="priceAmount" /> 6155 <meta itemprop="priceCurrency" :content="priceCurrency" /> 6156 </template> 6157 </div> 6158 </div> 6159 </span> 6160 </span> 6161 </span> 6162 </div> 6163 </template> 6164 <!-- End of product price --> 6165 </div> 6166 </form> 6167 </div> 6168 </template> 6169 </div> 6170 <div class="carousel-nav flex items-center justify-center"> 6171 <button aria-label="Previous" aria-controls="recommended-slider" x-ref="prev" class="glider-prev1"></button> 6172 <button aria-label="Next" aria-controls="recommended-slider" x-ref="next" class="glider-next1"></button> 6173 </div> 6174 </div> 6175 </div> 6176 </section> 6177 </div> 6178 </template> 6179 </div> 6180 </template> 6181</div> 6182
6183<script> 6184 function recommendedProducts_below_main_content() { 6185 return { 6186 productBanners: [], 6187 pagePreconfiguredDeferred: {}, 6188 bannerPlacement: 'below-main-content', 6189 allProductIds: '', 6190 initProductRecBlock: function (placement) { 6191 let self = this; 6192 window.magentoStorefrontEvents.subscribe.recsResponseReceived(function () { 6193 let recsData = window.magentoStorefrontEvents.context.getRecommendations(); 6194 self.renderProductRecs(recsData); 6195 }); 6196 }, 6197 renderProductRecs: function (recsData) { 6198 let self = this; 6199 let allProductIds = []; 6200 6201 recsData.units.sort((a, b) => a.displayOrder - b.displayOrder); 6202 6203 recsData.units.forEach(function (unit, index) { 6204 if (unit.pagePlacement === self.bannerPlacement) { 6205 self.productBanners.push(unit); 6206 6207 // Collect all product IDs from this unit 6208 if (unit.products && unit.products.length > 0) { 6209 unit.products.forEach(function(product) { 6210 allProductIds.push(product.productId); 6211 }); 6212 } 6213 6214 /** @todo move event outside of recsResponseReceived event **/ 6215 window.magentoStorefrontEvents.publish.recsUnitRender( 6216 unit.unitId, magentoStorefrontEvents.context 6217 ); 6218 } 6219 }); 6220 6221 // Store comma-separated product IDs 6222 self.allProductIds = allProductIds.join(','); 6223 6224 // Fetch calculated prices and hover images for all products at once 6225 if (self.allProductIds) { 6226 self.fetchAllCalculatedPrices(self.allProductIds); 6227 if (window.matchMedia('(hover: hover) and (pointer: fine)').matches) { 6228 self.fetchAllHoverImages(self.allProductIds); 6229 } 6230 } 6231 }, 6232 fetchAllHoverImages: function (productIds) { 6233 const baseUrl = "https\u003A\u002F\u002Fwww.flooringinc.com\u002F"; 6234 const fetchUrl = baseUrl + 'hyvaproductrecommendation/product/listhoverimage/productId/' + productIds; 6235 6236 if (!window.hoverImagesCachePromise) { 6237 window.hoverImagesCachePromise = fetch(fetchUrl) 6238 .then(response => response.json()) 6239 .then(data => { 6240 window.hoverImagesCache = data.success && data.hoverImages 6241 ? data.hoverImages 6242 : {}; 6243 return window.hoverImagesCache; 6244 }) 6245 .catch(() => { 6246 window.hoverImagesCache = {}; 6247 return window.hoverImagesCache; 6248 }); 6249 } 6250 6251 return window.hoverImagesCachePromise; 6252 }, 6253 fetchAllCalculatedPrices: function(productIds) { 6254 var baseUrl = "https://www.flooringinc.com/"; 6255 var fetchUrl = baseUrl + 'hyvaproductrecommendation/product/calculatedprice/productId/' + productIds; 6256 6257 // Create a promise that other components can wait for 6258 if (!window.calculatedPricesCachePromise) { 6259 window.calculatedPricesCachePromise = fetch(fetchUrl) 6260 .then(response => response.json()) 6261 .then(data => { 6262 // Store the price data globally so productPricing can access it 6263 if (!window.calculatedPricesCache) { 6264 window.calculatedPricesCache = {}; 6265 } 6266 window.calculatedPricesCache = data; 6267 return data; 6268 }) 6269 .catch(error => { 6270 console.log('Error fetching calculated prices:', error); 6271 return {}; 6272 }); 6273 } 6274 return window.calculatedPricesCachePromise; 6275 }, 6276 addToCartRecsEvent: function (e, unitId, productId) { 6277 // requires recommendationsContext to be set 6278 magentoStorefrontEvents.publish.recsItemAddToCartClick( 6279 unitId, productId, magentoStorefrontEvents.context 6280 ); 6281 // Timeout to prevent submission before event has fired. 6282 setTimeout(() => e.submit(), 500); 6283 }, 6284 scrollViewEvent: function (unitId) { 6285 magentoStorefrontEvents.publish.recsUnitView( 6286 unitId, magentoStorefrontEvents.context 6287 ); 6288 }, 6289 recsClickEvent: function (unitId, productId, productUrl) { 6290 magentoStorefrontEvents.publish.recsItemClick( 6291 unitId, productId, magentoStorefrontEvents.context 6292 ); 6293 // Timeout to prevent submission before event has fired. 6294 //setTimeout(() => window.location.href = productUrl, 500); 6295 }, 6296 createAddToCartUrl: function (productId) { 6297 const currentLocationUENC = encodeURIComponent( 6298 this.encodeUenc(BASE_URL), 6299 ); 6300 return BASE_URL + 6301 "checkout/cart/add/uenc/" + 6302 currentLocationUENC + 6303 "/product/" + 6304 productId 6305 }, 6306 encodeUenc: function (value) { 6307 const regex = /=/gi; 6308 return btoa(value).replace(regex, ","); 6309 }, 6310 } 6311 } 6312</script>
vendor: 1 bytes, line 6312
6312
6313<script> 6314 'use strict'; 6315(() => { 6316 const initCarousels = (elements) => { 6317 if (typeof Glider === 'undefined') { 6318 console.error("Glider.js is not loaded."); 6319 return; 6320 } 6321 6322 elements.forEach((carousel) => { 6323 const gliderElement = carousel.querySelector('[data-role="glider-recommended"]'); 6324 if (!gliderElement) { 6325 console.warn("Glider element not found."); 6326 return; 6327 } 6328 6329 const gliderPrev = carousel.querySelector('.glider-prev1'); 6330 const gliderNext = carousel.querySelector('.glider-next1'); 6331 6332 const totalSlides = gliderElement.querySelectorAll('.js_slide').length; 6333 6334 // Hide arrows if slides are 6 or less 6335 if (totalSlides <= 6) { 6336 if (gliderPrev) gliderPrev.style.display = 'none'; 6337 if (gliderNext) gliderNext.style.display = 'none'; 6338 } else { 6339 if (gliderPrev) gliderPrev.style.display = ''; 6340 if (gliderNext) gliderNext.style.display = ''; 6341 } 6342 // Initialize Glider 6343 const glider = new Glider(gliderElement, { 6344 slidesToShow: 6, 6345 slidesToScroll: 1, 6346 scrollLock: false, 6347 draggable: true, 6348 dragVelocity: 1.3, 6349 arrows: { 6350 prev: gliderPrev, 6351 next: gliderNext, 6352 }, 6353 responsive: [ 6354 { breakpoint: 768, settings: { slidesToShow: 2, slidesToScroll: 1 } }, 6355 { breakpoint: 1024, settings: { slidesToShow: 4, slidesToScroll: 1 } }, 6356 { breakpoint: 1366, settings: { slidesToShow: 6, slidesToScroll: 1} }, 6357 ], 6358 }); 6359 6360 const preventDraggingOnInputs = (gliderElement) => { 6361 gliderElement.querySelectorAll('select, input').forEach((el) => { 6362 el.addEventListener('mousedown', (event) => { 6363 event.stopPropagation(); // Prevent Glider drag from starting 6364 }); 6365 6366 el.addEventListener('touchstart', (event) => { 6367 event.stopPropagation(); // Prevent drag on touch devices 6368 }); 6369 }); 6370 }; 6371 6372 // Call this inside initCarousels after Glider initialization 6373 preventDraggingOnInputs(gliderElement); 6374 6375 // Add event listener to handle the disabled class 6376 gliderElement.addEventListener('glider-refresh', () => { 6377 requestAnimationFrame(() => { 6378 const hasNext = gliderElement.scrollWidth - gliderElement.scrollLeft > gliderElement.clientWidth; 6379 const hasPrev = gliderElement.scrollLeft > 0; 6380 6381 gliderNext.classList.toggle('disabled', !hasNext); 6382 gliderPrev.classList.toggle('disabled', !hasPrev); 6383 gliderNext.setAttribute('aria-disabled', !hasNext); 6384 gliderPrev.setAttribute('aria-disabled', !hasPrev); 6385 }); 6386 }); 6387 6388 // Force a refresh to ensure state is accurate on initialization 6389 glider.refresh(); 6390 }); 6391 }; 6392 6393 const loadGliderScript = (callback) => { 6394 const script = document.createElement('script'); 6395 script.type = 'text/javascript'; 6396 script.src = "https://www.flooringinc.com/static/version1789462004/frontend/Dcw/hyvadesktop/en_US/Magento_PageBuilder/js/glider.min.js"; 6397 script.addEventListener('load', callback); 6398 document.head.appendChild(script); 6399 }; 6400 6401 const observeCarousels = () => { 6402 const observer = new MutationObserver((mutationsList) => { 6403 let found = false; 6404 6405 for (const mutation of mutationsList) { 6406 if (mutation.type === 'childList') { 6407 for (const node of mutation.addedNodes) { 6408 if (node.nodeType === 1) { 6409 const carousels = node.querySelectorAll?.('[data-content-type="recommended-products"]'); 6410 if (carousels.length) { 6411 found = true; 6412 requestAnimationFrame(() => { 6413 observer.disconnect(); 6414 initCarousels(carousels); 6415 }); 6416 break; 6417 } 6418 } 6419 } 6420 } 6421 if (found) break; 6422 } 6423 }); 6424 6425 observer.observe(document.body, { childList: true, subtree: true }); 6426 }; 6427 6428 window.addEventListener('DOMContentLoaded', () => { 6429 loadGliderScript(() => { 6430 // Check if carousels are already in the DOM 6431 const carouselElements = document.querySelectorAll('[data-content-type="recommended-products"]'); 6432 if (carouselElements.length > 0) { 6433 initCarousels(carouselElements); 6434 } else { 6435 // Use MutationObserver to wait for dynamic content 6436 observeCarousels(); 6437 } 6438 }); 6439 }); 6440})(); 6441</script>
6441 6442
6443<script> 6444 function recProductImage(product) { 6445 return { 6446 hovered: false, 6447 over: false, 6448 hoverTimer: null, 6449 hoverUrl: null, 6450 isDesktopHover: window.matchMedia('(hover: hover) and (pointer: fine)').matches, 6451 primarySrc() { 6452 const url = product.image?.url || ''; 6453 if (!url) { 6454 return ''; 6455 } 6456 return url + (url.includes('?') ? '&' : '?') + 'width=428&height=210'; 6457 }, 6458 init() { 6459 if (!this.isDesktopHover) { 6460 return; 6461 } 6462 this.resolveHoverUrl(); 6463 }, 6464 resolveHoverUrl() { 6465 const id = String(product.productId); 6466 const apply = (url) => { 6467 if (url) { 6468 this.hoverUrl = url; 6469 } 6470 }; 6471 6472 if (window.hoverImagesCache?.[id]) { 6473 apply(window.hoverImagesCache[id]); 6474 return; 6475 } 6476 6477 if (window.hoverImagesCachePromise) { 6478 window.hoverImagesCachePromise.then(() => apply(window.hoverImagesCache?.[id])); 6479 } 6480 }, 6481 onEnter() { 6482 if (!this.isDesktopHover || !this.hoverUrl) { 6483 return; 6484 } 6485 this.over = true; 6486 clearTimeout(this.hoverTimer); 6487 this.hoverTimer = setTimeout(() => { 6488 if (this.over) { 6489 this.hovered = true; 6490 } 6491 }, 80); 6492 }, 6493 onMove() { 6494 if (!this.isDesktopHover || !this.over || !this.hoverUrl) { 6495 return; 6496 } 6497 this.hovered = true; 6498 }, 6499 onLeave() { 6500 this.over = false; 6501 this.hovered = false; 6502 clearTimeout(this.hoverTimer); 6503 }, 6504 destroy() { 6505 clearTimeout(this.hoverTimer); 6506 }, 6507 }; 6508 } 6509 6510 function productPricing(product) { 6511 return { 6512 // Variables 6513 regularPrice: 0, 6514 specialPrice: 0, 6515 calculatorType: '', 6516 coverage: 0, 6517 width: 0, 6518 length: 0, 6519 height: 0, 6520 minPriceVolume: 0, 6521 displayValue: 0, 6522 priceAmount: 0, 6523 priceType: 'finalPrice', 6524 priceCurrency: 'USD', 6525 discountPercentage: 0, 6526 adjustmentsHtml: '', // Placeholder for adjustment logic 6527 schema: true, 6528 displayValueType: '/each', 6529 6530 // Dynamic Classes 6531 priceContainerClasses: 'price-container', 6532 priceWrapperClasses: 'price-wrapper', 6533 priceId: '', // Add logic for dynamic IDs if needed 6534 priceDisplayLabel: '', 6535 6536 // Initialization 6537 init() { 6538 // Load product attributes 6539 //console.log("product==="+JSON.stringify(product)); 6540 const attributes = product.attributes; 6541 6542 // Regular and Special Prices 6543 this.regularPrice = product.prices.minimum.regular || 0; 6544 this.specialPrice = product.prices.minimum.final || this.regularPrice; 6545 6546 // Calculator Type and Dimensions 6547 this.calculatorType = attributes.incstores_pim_calculator_type || ''; 6548 this.coverage = attributes.config_coverage || 0; 6549 this.width = (attributes.incstores_pim_width_inches || 0) / 12; 6550 this.length = (attributes.incstores_pim_length_inches || 0) / 12; 6551 this.height = (attributes.incstores_pim_height_inches || 0) / 12; 6552 6553 // Calculate Price per Volume 6554 if (this.calculatorType && (this.coverage > 0 || (this.width > 0 && this.length > 0 && this.height > 0))) { 6555 if (this.calculatorType === 'case') { 6556 this.minPriceVolume = this.coverage; 6557 } else { 6558 this.minPriceVolume = this.width * this.length * this.height; 6559 } 6560 6561 if (this.minPriceVolume > 0) { 6562 const pricePerUnit = 6563 this.regularPrice > this.specialPrice && this.specialPrice > 0 6564 ? this.specialPrice / this.minPriceVolume 6565 : this.regularPrice / this.minPriceVolume; 6566 6567 this.displayValue = pricePerUnit; 6568 } 6569 } else { 6570 this.displayValue = this.regularPrice; 6571 } 6572 6573 const productId = product.productId; 6574 const self = this; 6575 6576 // Wait for the batch price cache to be ready 6577 if (window.calculatedPricesCachePromise) { 6578 window.calculatedPricesCachePromise.then(() => { 6579 // Now the cache should be populated 6580 if (window.calculatedPricesCache && window.calculatedPricesCache[productId]) { 6581 let productData = window.calculatedPricesCache[productId]; 6582 if (productData.success && productData.priceData && productData.priceData.price) { 6583 let customPrice = productData.priceData.price; 6584 let calType = productData.priceData.calType;
6585 self.displayValue = customPrice; 6586 self.displayValueType = '/' + calType; 6587 if (calType == 'none') { 6588 self.displayValueType = ''; 6589 } 6590 } 6591 } 6592 }); 6593 } else { 6594 // Fallback: fetch individual product price if batch call was not initiated 6595 var baseUrl = "https://www.flooringinc.com/"; 6596 var fetchUrl = baseUrl + 'hyvaproductrecommendation/product/calculatedprice/productId/' + productId; 6597 6598 fetch(fetchUrl) 6599 .then(response => response.json()) 6600 .then(data => { 6601 if (data.success) { 6602 let customPrice = data.priceData.price; 6603 if (data.priceData.price) { 6604 let calType = data.priceData.calType; 6605 self.displayValue = customPrice; 6606 self.displayValueType = '/' + calType; 6607 if (calType == 'none') { 6608 self.displayValueType = ''; 6609 } 6610 } 6611 } 6612 }) 6613 .catch(error => { 6614 console.log(error); 6615 }); 6616 } 6617 6618 // Calculate Discount 6619 if (this.regularPrice > this.specialPrice) { 6620 const savePrice = this.regularPrice - this.specialPrice; 6621 this.discountPercentage = Math.round((savePrice * 100) / this.regularPrice); 6622 } 6623 }, 6624 6625 // Utility Functions 6626 formatCurrency(value) { 6627 value = Number(String(value).replace(/,/g, '')); 6628 return `$${value.toFixed(2)}`; 6629 }, 6630 }; 6631 } 6632</script>
vendor: 1 bytes, line 6632
6632
6633<script> 6634 document.addEventListener("DOMContentLoaded", function () { 6635 let relatedProducts = document.querySelector(".related-products-section"); 6636 let recommendations = document.querySelector(".products__recommendations"); 6637 6638 if (relatedProducts && recommendations) { 6639 relatedProducts.parentNode.insertBefore(recommendations, relatedProducts.nextSibling); 6640 } 6641 }); 6642</script>
6642 6643</main><footer class="page-footer"><div class="footer content"> 6644<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> 6645<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> 6646<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> 6647<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">
6647<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> 6648<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> 6649</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"> 6650 <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> 6651<li style="line-height: 10px;"><a id="T6SH02B" tabindex="0" href="/contact">Contact Us</a></li> 6652<li style="line-height: 10px;"><a tabindex="0" href="/about">About Us</a></li> 6653<li style="line-height: 10px;"><a id="EHRBRCU" tabindex="0" href="/careers">Careers</a></li> 6654<li style="line-height: 10px;"><a tabindex="0" href="/privacy-policy">Privacy Policy</a></li> 6655<li style="line-height: 10px;"><a tabindex="0" href="/affirm">Affirm</a></li> 6656<li style="line-height: 10px;"><a tabindex="0" href="/our-commitment-accessibility">Accessibility</a></li> 6657<li style="line-height: 10px;"><a tabindex="0" href="/terms-and-conditions">Terms & Conditions</a></li> 6658</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> 6659<li><a tabindex="0" href="/shipping-info">Shipping</a></li> 6660<li><a id="ER5IYQ2" tabindex="0" href="/sales/guest/form">Track Order</a></li> 6661<li><a tabindex="0" href="/returns-exchanges">Returns & Exchanges</a></li> 6662<li><a tabindex="0" href="/moneybackguarantee">Money Back Guarantee</a></li> 6663<li id="W8TRHHE"><a tabindex="0" href="/pro-advantage">Pro Advantage</a></li> 6664<li><a href="/dor-sites">Sales & Use Tax</a></li> 6665</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> 6666<li><a tabindex="0" href="/knowledge-base">FAQs</a></li> 6667<li><a tabindex="0" href="/sample-request">Samples</a></li> 6668<li><a tabindex="0" href="https://flooringinc.cashstar.com/store/recipient?locale=en-us">Gift Cards</a></li> 6669<li><a href="/promotions-disclaimer">Promotions</a></li> 6670</ul></div></div></div></div></div></div></div> 6671</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"> 6672 <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"> 6673 <form class="form subscribe" action="https://www.flooringinc.com/newsletter/subscriber/new/" method="post" x-data="initNewsletterForm()" @submit.prevent="submitForm(
6673)" id="newsletter-validate-detail"> 6674 <div class="mb-3 text-sm font-medium tracking-widest text-gray-900 uppercase title-font"> 6675 <h4 class="text-lg font-medium text-black mb-1 capitalize">Get Ready To Be Floored!</h4> 6676 <p calss="sub_heading capitalize">Join our insider's club</p> 6677 </div> 6678 <div class="flex flex-wrap justify-center gap-2 md:justify-start"> 6679 <label for="newsletter-subscribe" class="sr-only"> 6680 Email Address </label> 6681 <input name="email" type="email" required id="newsletter-subscribe" class="form-input inline-flex w-full" placeholder="Enter email address"> 6682 <input name="form_key" type="hidden" value="tGAOudjzgYs06SIA"> <button class="btn btn-primary"> 6683 Subscribe Now </button> 6684 </div> 6685 <div> 6686 <template x-if="displayErrorMessage"> 6687 <p class="flex items-center text-red"> 6688 <span class="inline-block w-8 h-8 mr-3"> 6689 <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"> 6690 <path stroke-linecap="round" stroke-linejoin="round" d="M12 8v4m0 4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z"></path> 6691<title>exclamation-circle</title></svg> 6692 </span> 6693 <template x-for="errorMessage in errorMessages"> 6694 <span x-html="errorMessage"></span> 6695 </template> 6696 </p> 6697 </template> 6698 </div> 6699 </form> 6700 <div class="w-full"> 6701 </div> 6702
6702<script> 6703 function initNewsletterForm() { 6704 return { 6705 errors: 0, 6706 hasCaptchaToken: 0, 6707 displayErrorMessage: false, 6708 errorMessages: [], 6709 setErrorMessages(messages) { 6710 this.errorMessages = [messages] 6711 this.displayErrorMessage = this.errorMessages.length 6712 }, 6713 submitForm() { 6714 // Do not rename $form, the variable is expected to be declared in the recaptcha output 6715 const $form = document.querySelector('#newsletter-validate-detail'); 6716 6717 if (this.errors === 0) { 6718 $form.submit(); 6719 } 6720 } 6721 } 6722 } 6723 </script>
6723 6724</div> 6725 6726<div class="pr-4 lg:w-1/4 md:w-1/2"> 6727 6728</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> 6729</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"> 6730 <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> 6731<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> 6732<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> 6733</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> 6734<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> 6735<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> 6736<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> 6737<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> 6738<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> 6739<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> 6740<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> 6741</ul></div></div></div></div><div data-content-type="html" data-appearance="default" data-element="main" data-decoded="true"><style> 6742.checkout-cart-index .summary-cart .cart-discount{display:block;} 6743.page-with-filter .products.wrapper.mode-list.products-list .item.product .catergory_slider_content .compare-buttons .compare-buttons-mobile{order:2;} 6744.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;} 6745@media(min-width:1280px){.mega_menu_banner img{max-width: 239px !important;}} 6746.cms-home .catergory_slider_content .product-item-link{font-size: .875rem;line-height: 1.313rem;} 6747@media(min-width: 768px){ 6748.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);}
6748.catergory_slider_content .compare-buttons .orderSampleContent{order:3;} 6749.catergory_slider_content .compare-buttons .ship-fax-plp .ship-iconsada{display: block;} 6750.page-products #maincontent .products.mode-grid .catergory_slider_content .compare-buttons .orderSampleContent{order: 3;} 6751 .category_banner .pagebuilder-column-group .pagebuilder-column-line .pagebuilder-column figure picture{height: 100% !important;object-fit:cover;} 6752[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;} 6753.cms-home [data-content-type=products][data-appearance=carousel] [data-role=glider-content] .item.product:not(.glider-slide){min-width: 370px;} 6754[data-content-type=products][data-appearance=carousel] [data-role=glider-content]:not(.glider)::-webkit-scrollbar{width: 10px;} 6755[data-content-type=products][data-appearance=carousel] [data-role=glider-content]:not(.glider)::-webkit-scrollbar-track {background: #ffffff !important;} 6756[data-content-type=products][data-appearance=carousel] [data-role=glider-content]:not(.glider)::-webkit-scrollbar-thumb {background: #ffffff !important;} 6757} 6758@media(min-width: 768px){ 6759 .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;} 6760 .featured_partners .swiper-container:not(.swiper-initialized) .swiper-slide{width: 16%;} 6761 .featured_partners .swiper-container:not(.swiper-initialized)::-webkit-scrollbar{width: 10px;} 6762 .featured_partners .swiper-container:not(.swiper-initialized)::-webkit-scrollbar-track {background: #ffffff !important;} 6763 .featured_partners .swiper-container:not(.swiper-initialized)::-webkit-scrollbar-thumb {background: #ffffff !important;} 6764 .featured_partners .swiper-container:not(.swiper-initialized)::-webkit-scrollbar-thumb:hover {background: #ffffff !important;} 6765} 6766@media(max-width:767px){.page-products #maincontent .toolbar.toolbar-products .pages-items{justify-content: center;gap: 10px;box-shadow: none;}} 6767</style></div></div> 6768</div></div></div></div><div data-content-type="html" data-appearance="default" data-element="main" data-decoded="true">
6768<script> 6769 document.addEventListener('DOMContentLoaded', function () { 6770 const gallery = document.querySelector('#gallery'); 6771 const header = document.querySelector('#header'); 6772 if (!gallery || !header) return; 6773 const stickyTop = header.offsetHeight; 6774 // parent/container where sticky should stop 6775 const parent = gallery.parentElement; 6776 function checkSticky() { 6777 const rect = gallery.getBoundingClientRect(); 6778 const parentRect = parent.getBoundingClientRect(); 6779 // sticky active only while parent still has space 6780 const isSticky = 6781 rect.top <= stickyTop && 6782 parentRect.bottom > rect.height + stickyTop; 6783 document.body.classList.toggle('gallery-sticky', isSticky); 6784 } 6785 checkSticky(); 6786 window.addEventListener('scroll', checkSticky); 6787 window.addEventListener('resize', checkSticky); 6788 }); 6789</script>
6789 6790<style> 6791@media (min-width: 1200px) { 6792 .megamenu_items:hover>.megamenu { 6793 max-width: 1440px; 6794 } 6795} 6796.products__recommendations .products_slider .catergory_slider_content .color_counts{margin-bottom: 15px;} 6797html.order_active .page-header #header{z-index: -1;} 6798html.order_active{overflow: hidden !important;} 6799@media(min-width: 768px){.checkout-cart-index #shopping-cart-table .cart.item .item-info td{flex-wrap: nowrap;}} 6800</style> 6801<style> 6802.cms-home .order-free-sample-popup{display: none;} 6803.cms-home.order_active .order-free-sample-popup{display: flex;} 6804@media(min-width:768px){ 6805.page-with-filter .widget-product-carousel .catergory_slider_content .compare-buttons{flex-wrap: wrap;} 6806.page-with-filter .widget-product-carousel .catergory_slider_content .compare-buttons .ship-fax-plp{order:1;} 6807.page-with-filter .widget-product-carousel .catergory_slider_content .compare-buttons .compare-buttons-mobile{width: 100%;order: 2;display: flex;justify-content: space-between;} 6808.page-with-filter .widget-product-carousel .catergory_slider_content .compare-buttons .orderSampleContent .order_btn{margin-top: 10px;} 6809.page-with-filter .widget-product-carousel .catergory_slider_content .compare-buttons{border-top: 0px;padding-top:0px;margin-top: 0px;} 6810.catalog-product-view .products_slider .compare-buttons .qty_fields .btn_cart{width:110px} 6811} 6812@media(max-width:767px){ 6813.page-with-filter .widget-product-carousel .catergory_slider_content .compare-buttons{flex-wrap: wrap;} 6814.page-with-filter .widget-product-carousel .catergory_slider_content .compare-buttons .ship-fax-plp{order:1;width: 100%;} 6815.page-with-filter .widget-product-carousel .catergory_slider_content .compare-buttons .compareBtn{order:2;justify-content: flex-start;width: auto;margin-top: 10px;} 6816.page-with-filter .widget-product-carousel .catergory_slider_content .compare-buttons .orderSampleContent{order:3;margin-top: 10px;} 6817.page-with-filter .widget-product-carousel .catergory_slider_content .compare-buttons .compare-buttons-mobile{order:2;width: 100%;display: flex;justify-content: space-between;} 6818} 6819#related_cart_slider .js_slides{margin-right: 0;margin-left: 0;} 6820@media (min-width: 1024px) { 6821.container { 6822 max-width: 1440px !important; 6823} 6824} 6825.page-with-filter .product-item .product-info .price-box .price-container .price-wrapper span.price{font-size: 20px !important;color: #1e1e1e !important;} 6826.page-with-filter .product-item .product-info .price-box .price-container .price-wrapper{font-size: 20px !important;line-height: 20px !important} 6827.brand_logo_listpage img, div.brand_logo_listpage img{max-width:100px} 6828.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;} 6829 6830.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;} 6831 6832@media(max-width: 767px){ 6833 .related_products_list_view .glider-track{width: 100% !important;flex-wrap: nowrap;align-items: flex-start;} 6834 .related_products_list_view .related_products_list_view_content{width: 100% !important;min-width: 280px;max-width: 280px;} 6835} 6836 6837.dcw-share-cart .space-y-4>:not([hidden])~:not([hidden]) { 6838 --tw-space-y-reverse: 0; 6839 margin-top: calc(1rem * (1 - var(--tw-space-y-reverse))); 6840 margin-bottom: calc(1rem * var(--tw-space-y-reverse)); 6841} 6842.dcw-share-cart .bg-black\/50 { 6843 background-color: #00000080; 6844} 6845.dcw-share-cart .z-\[999\] { 6846 z-index: 999; 6847} 6848</style></div></div>
6849<script> 6850 window.addEventListener('init-external-scripts', () => { 6851 const klaviyoScript = document.createElement('script'); 6852 klaviyoScript.src = '//static.klaviyo.com/onsite/js/klaviyo.js?company_id=WAwVDg'; 6853 klaviyoScript.type = 'text/javascript'; 6854 klaviyoScript.async = true; 6855 document.head.append(klaviyoScript); 6856 }, {once: true, passive: true}); 6857</script>
vendor: 1 bytes, line 6857
6857
6858<script> 6859 document.addEventListener('DOMContentLoaded', function() { 6860 const buttons = document.querySelectorAll('.cms-home .order_btn'); 6861 buttons.forEach(button => { 6862 button.addEventListener('click', function() { 6863 const modal = this.closest('.orderSampleContent').querySelector('.order-free-sample-popup'); 6864 if (modal) { 6865 modal.style.display = 'block'; 6866 } 6867 }); 6868 }); 6869 6870 // Handle closing the modal 6871 document.querySelectorAll('.cms-home .order-free-sample-popup .closemodal').forEach(closeBtn => { 6872 closeBtn.addEventListener('click', function() { 6873 const modal = this.closest('.order-free-sample-popup'); 6874 if (modal) { 6875 modal.style.display = 'none'; 6876 } 6877 }); 6878 }); 6879 }); 6880</script>
6880 6881
6882<script> 6883 document.addEventListener('DOMContentLoaded', function () { 6884 function updateRatingsClass(ratingEl) { 6885 const hasReviews = ratingEl.querySelector('.bv_numReviews_component_container'); 6886 ratingEl.classList.toggle('no-reviews', !hasReviews); 6887 } 6888 document.querySelectorAll('.ratings').forEach(ratingEl => { 6889 updateRatingsClass(ratingEl); 6890 const observer = new MutationObserver(() => { 6891 updateRatingsClass(ratingEl); 6892 }); 6893 observer.observe(ratingEl, { 6894 childList: true, 6895 subtree: true 6896 }); 6897 }); 6898 }); 6899</script>
6899 6900 6901<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'"/> 6902<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'"/> 6903<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'"/> 6904<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'"/> 6905<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'"/> 6906<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'"/> 6907<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'"/> 6908<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'"/> 6909<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'"/> 6910<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>
6911<script> 6912 function dataServicesShoppingCartContextData() 6913 { 6914 return { 6915 initContext(cartData) { 6916 let contextCartItems = []; 6917 6918 cartData.items.forEach(function (item){ 6919 contextCartItems.push({ 6920 id: item.item_id, 6921 formattedPrice: parseFloat(item.product_price_value ? item.product_price_value : 0), 6922 quantity: item.qty, 6923 product: { 6924 productType: item.product_type, 6925 productId: item.product_id, 6926 name: item.product_name, 6927 sku: item.product_sku, 6928 mainImageUrl : item.product_image.src 6929 }, 6930 prices: { 6931 price: { 6932 value: parseFloat(item.product_price_value ? item.product_price_value : 0) 6933 } 6934 } 6935 }) 6936 }); 6937 6938 magentoStorefrontEvents.context.setShoppingCart({ 6939 id: cartData.dsCartId, 6940 totalQuantity: cartData.summary_count, 6941 prices: { 6942 subtotalExcludingTax: { 6943 value: parseFloat(cartData.subtotalAmountExclTax ? cartData.subtotalAmountExclTax : 0) 6944 }, 6945 subtotalIncludingTax: { 6946 value: parseFloat(cartData.subtotalAmount ? cartData.subtotalAmount : 0) 6947 } 6948 }, 6949 items: contextCartItems, 6950 possibleOnepageCheckout: cartData.possible_onepage_checkout, 6951 giftMessageSelected : false, 6952 giftWrappingSelected : false 6953 }); 6954 6955 window.dispatchEvent(new Event("shoppingCartContextSet")); 6956 } 6957 } 6958 } 6959</script>
6959 6960<div x-data="dataServicesShoppingCartContextData()" 6961 @private-content-loaded.window="initContext($event.detail.data.cart)"></div> 6962 6963
6964<script> 6965 (function () { 6966 'use strict'; 6967 6968 /** 6969 * Config to determine which element is responsible for the form submission 6970 * 6971 * @type {[{elementSelector: undefined|string, submitAttribute: string}]} 6972 */ 6973 const formWrapperConfig = [{"elementSelector":null,"submitAttribute":"submit"},{"elementSelector":"[type=\"submit\"]","submitAttribute":"click"}]; 6974 6975 /** 6976 * Replace protected forms submit with amRecaptchaModel.execute($event) method. 6977 * Call original submit on amrecaptcha-callback event after successful captcha validation. 6978 * 6979 * @return {void} 6980 */ 6981 const wrapFormSubmit = function () { 6982 document.addEventListener("DOMContentLoaded", function () { 6983 const formsSelector = window.amRecaptchaModel?.formsToProtect || ''; 6984 if (formsSelector.length === 0) { 6985 return; 6986 } 6987 6988 document.querySelectorAll(formsSelector)?.forEach(formElement => { 6989 if (!formElement) { 6990 return; 6991 } 6992 6993 const { elementToWrap, attributeNameToWrap } = resolveElementWrapping(formElement); 6994 if (!elementToWrap || !attributeNameToWrap) { 6995 return; 6996 } 6997 6998 setElementAttributes(formElement, elementToWrap, attributeNameToWrap); 6999 }); 7000 }); 7001 }; 7002 7003 /** 7004 * Find submit event and DOM element that has this event using formWrapperConfig. 7005 * 7006 * @param {HTMLElement} formElement 7007 * @return {{elementToWrap: undefined|string, attributeNameToWrap: undefined|string}} 7008 */ 7009 const resolveElementWrapping = function (formElement) { 7010 let result = { 7011 elementToWrap: undefined, 7012 attributeNameToWrap: undefined 7013 }; 7014 7015 formWrapperConfig.forEach(({ elementSelector, submitAttribute }) => { 7016 const elementToWrap = !!elementSelector ? formElement.querySelector(elementSelector) : formElement; 7017 if (!elementToWrap) { 7018 return; 7019 } 7020 7021 const attributeNameToWrap = elementToWrap.getAttributeNames().find( 7022 (elementAttribute) => { 7023 /** @type {string[]} */ 7024 const submitAttributeVariations = ['@', 'x-on:'].map(variation => variation + submitAttribute); 7025 7026 return submitAttributeVariations.some( 7027 (submitAttributeVariation) => elementAttribute.startsWith(submitAttributeVariation) 7028 ) 7029 } 7030 ); 7031 if (!attributeNameToWrap) { 7032 return; 7033 } 7034 7035 result.elementToWrap = elementToWrap; 7036 result.attributeNameToWrap = attributeNameToWrap; 7037 }); 7038 7039 return result; 7040 } 7041 7042 /** 7043 * Set attribute to wrap original submit, add eventListeners for captcha callbacks 7044 * 7045 * @param {HTMLElement} formElement 7046 * @param {HTMLElement} elementToWrap 7047 * @param {string} attributeNameToWrap 7048 */ 7049 const setElementAttributes = function (formElement, elementToWrap, attributeNameToWrap) { 7050 const originalSubmit = elementToWrap.getAttribute(attributeNameToWrap); 7051 elementToWrap.removeAttribute(attributeNameToWrap); 7052 7053 /** 7054 * To properly set submit attribute - we need to replace '@' with 'x-on:' 7055 * and add preventDefault behaviour 7056 */ 7057 elementToWrap.setAttribute( 7058 attributeNameToWrap.replace(/^@/, 'x-on:').replace(/.prevent$/, '') + '.prevent', 7059 'amRecaptchaModel.execute($event)' 7060 ); 7061 elementToWrap.setAttribute( 7062 'x-on:amrecaptcha-executable-callback', 7063 originalSubmit 7064 ); 7065 } 7066 7067 wrapFormSubmit(); 7068 })(window.amRecaptchaModel = window.amRecaptchaModel || {}); 7069</script>
7069 7070
7071<script> 7072 function initAuthenticationBss() { 7073 return { 7074 open: false, 7075 openLogin : false, 7076 openRegister : false, 7077 openForgot : false, 7078 openCreate : true, 7079 passwordsMatching: true, 7080 openMessage: false, 7081 errors: 0, 7082 message: "", 7083 hasCaptchaToken: 0, 7084 openButtonLogin : false, 7085 openButtonRegister : false, 7086 openSuccessMessage : false, 7087 checkUseReCaptcha: 1, 7088 recaptchaLoading: null, 7089 initSocial() { 7090 if (!this.checkUseReCaptcha) { 7091 return Promise.resolve(); 7092 } 7093 if (this.recaptchaLoading) { 7094 return this.recaptchaLoading; 7095 } 7096 if (typeof window.grecaptcha !== 'undefined') { 7097 this.recaptchaLoading = Promise.resolve(); 7098 return this.recaptchaLoading; 7099 } 7100 this.recaptchaLoading = new Promise((resolve, reject) => { 7101 const recaptchaUrl = `https://www.google.com/recaptcha/api.js?render=6LdQFsgqAAAAAFaiT_SQ7C9UmCcxWxpMd6pIMAEO&hl=en`; 7102 const script = document.createElement('script'); 7103 script.setAttribute('type', 'text/javascript'); 7104 script.setAttribute('src', recaptchaUrl); 7105 script.onload = () => resolve(); 7106 script.onerror = () => reject(new Error('Failed to load reCAPTCHA')); 7107 document.head.appendChild(script); 7108 }); 7109 return this.recaptchaLoading; 7110 }, 7111 loadRecaptchaOnInteraction() { 7112 if (!this.checkUseReCaptcha) { 7113 return; 7114 } 7115 // Avoid scroll/mousemove/wheel â they fire on load / DevTools / trackpads. 7116 const events = ['pointerdown', 'keydown', 'touchstart']; 7117 const load = () => { 7118 events.forEach((eventName) => { 7119 window.removeEventListener(eventName, load, { capture: true }); 7120 }); 7121 this.initSocial(); 7122 }; 7123 events.forEach((eventName) => { 7124 window.addEventListener(eventName, load, { once: true, passive: true, capture: true }); 7125 }); 7126 }, 7127 checkPasswordsMatch() { 7128 if (document.getElementById('password').value === 7129 document.getElementById('password-confirmation').value) { 7130 this.passwordsMatching = true; 7131 return true; 7132 } 7133 this.passwordsMatching = false; 7134 return false; 7135 }, 7136 submitForm: function () { 7137 const $form = document.querySelector('#login-form'); 7138 if (this.errors === 0) { 7139 this.dispatchLoginRequest($form); 7140 } 7141 }, 7142 submitForgotForm : function () { 7143 const $form = document.querySelector('#fotgot-form'); 7144 if (this.errors === 0) { 7145 this.dispatchForgotRequest($form); 7146 } 7147 }, 7148 submitRegisterForm : function () { 7149 const $form = document.querySelector('#create-form'); 7150 if (this.errors === 0) { 7151 this.dispatchRegisterRequest($form); 7152 } 7153 }, 7154 validateCaptcha : async function () { 7155 await this.initSocial(); 7156 return new Promise((resolve, reject) => { 7157 if (typeof window.grecaptcha === 'undefined') { 7158 return reject(new Error('reCAPTCHA is not available')); 7159 } 7160 grecaptcha.ready(function () { 7161 grecaptcha.execute('6LdQFsgqAAAAAFaiT_SQ7C9UmCcxWxpMd6pIMAEO', {action: 'submit'}).then(function (token) { 7162 return resolve(token); 7163 }).catch(reject); 7164 }); 7165 }); 7166 }, 7167 dispatchLoginRequest:async function (form) { 7168 if (this.checkUseReCaptcha) { 7169 let token = await this.validateCaptcha(); 7170 if(token) 7171 { 7172 document.getElementById("g-recaptcha-response").setAttribute('value',token); 7173 } 7174 } 7175 const username = this.$refs['customer-email'].value; 7176 const password = this.$refs['customer-password'].value; 7177 const recaptchaValue = document.getElementById("g-recaptcha-response").value; 7178 const postUrl = "https://www.flooringinc.com/sociallogin/popup/login/"; 7179 fetch(postUrl, { 7180 headers: { 7181 contentType: "application/x-www-form-urlencoded; charset=UTF-8", 7182 }, 7183 body: new URLSearchParams({ 7184 username: username, 7185 password: password, 7186 ['g-recaptcha-response']: recaptchaValue, 7187 form_key: hyva.getFormKey(), 7188 }), 7189 method: "POST", 7190 mode: "cors", 7191 credentials: "include", 7192 }).then(response => { 7193 return response.json() 7194 } 7195 ).then(data => { 7196 this.isLoading = false;
7197 if (data.error) { 7198 this.message = data.message; 7199 this.openMessage = true; 7200 this.errors = 1; 7201 this.hasCaptchaToken = 0; 7202 } else { 7203 this.message = data.message; 7204 this.openMessage = false; 7205 this.openSuccessMessage = true; 7206 if (data.redirect !== '' && data.redirect != null) { 7207 window.location.href = data.redirect; 7208 } else { 7209 location.reload(true); 7210 } 7211 } 7212 }); 7213 }, 7214 dispatchForgotRequest:async function (form) { 7215 if (this.checkUseReCaptcha) { 7216 let token = await this.validateCaptcha(); 7217 if(token) 7218 { 7219 document.getElementById("g-recaptcha-response").setAttribute('value',token); 7220 } 7221 } 7222 const email = form.querySelector("#email_address").value; 7223 const recaptchaValue = document.getElementById("g-recaptcha-response").value; 7224 const postUrl = "https://www.flooringinc.com/sociallogin/popup/forgot/"; 7225 fetch(postUrl, { 7226 headers: { 7227 contentType: "application/x-www-form-urlencoded; charset=UTF-8", 7228 }, 7229 body: new URLSearchParams({ 7230 email: email, 7231 ['g-recaptcha-response']: recaptchaValue, 7232 form_key: hyva.getFormKey(), 7233 }), 7234 method: "POST", 7235 mode: "cors", 7236 credentials: "include", 7237 }).then(response => { 7238 return response.json() 7239 } 7240 ).then(data => { 7241 this.isLoading = false; 7242 if (data.error) { 7243 this.message = data.message; 7244 this.openMessage = true; 7245 this.errors = 1; 7246 this.hasCaptchaToken = 0; 7247 } else { 7248 if (data.redirect !== '' && data.redirect != null) { 7249 window.location.href = data.redirect; 7250 } else { 7251 location.reload(true); 7252 } 7253 } 7254 }); 7255 }, 7256 dispatchRegisterRequest:async function (form) { 7257 if (this.checkUseReCaptcha) { 7258 let token = await this.validateCaptcha(); 7259 if(token) 7260 { 7261 document.getElementById("g-recaptcha-response").setAttribute('value',token); 7262 } 7263 } 7264 const firstname = form.querySelector("#firstname").value; 7265 const lastname = form.querySelector("#lastname").value; 7266 const email = form.querySelector("#email_address").value; 7267 const password = form.querySelector("#password").value; 7268 const passwordConfirmation = form.querySelector("#password-confirmation").value; 7269 const recaptchaValue = document.getElementById("g-recaptcha-response").value; 7270 const postUrl = "https://www.flooringinc.com/sociallogin/popup/create/"; 7271 fetch(postUrl, { 7272 headers: { 7273 contentType: "application/x-www-form-urlencoded; charset=UTF-8", 7274 }, 7275 body: new URLSearchParams({ 7276 ['g-recaptcha-response']: recaptchaValue, 7277 firstname: firstname, 7278 lastname: lastname, 7279 email: email, 7280 password: password, 7281 password_confirmation: passwordConfirmation, 7282 form_key: hyva.getFormKey(), 7283 }), 7284 method: "POST", 7285 mode: "cors", 7286 credentials: "include", 7287 }).then(response => { 7288 return response.json() 7289 } 7290 ).then(data => { 7291 this.isLoading = false;
7292 if (data.error) { 7293 this.message = data.message; 7294 this.openMessage = true; 7295 this.hasCaptchaToken = 0; 7296 } else { 7297 this.message = data.message; 7298 this.openMessage = false; 7299 this.openSuccessMessage = true; 7300 if (data.redirect !== '' && data.redirect != null) { 7301 window.location.href = data.redirect; 7302 } else { 7303 location.reload(true); 7304 } 7305 } 7306 }); 7307 }, 7308 eventListeners: { 7309 ['@popup-register.window']($event) { 7310 this.open = true; 7311 this.openRegister = $event.detail.openRegister; 7312 this.openLogin = $event.detail.openLogin; 7313 this.openCreate = $event.detail.openCreate; 7314 this.openButtonLogin = $event.detail.openButtonLogin; 7315 this.openButtonRegister = $event.detail.openButtonRegister; 7316 this.initSocial(); 7317 } 7318 } 7319 } 7320 } 7321</script>
7321 7322 7323<section id="authentication-popup-bss" 7324 x-data="initAuthenticationBss()" x-init="loadRecaptchaOnInteraction()" 7325 @keydown.window.escape="open = false" 7326<div role="dialog" 7327 aria-modal="true" 7328 class="hidden inset-y-0 right-0 z-30 flex max-w-full" 7329 :class="{ 'hidden': !open, 'fixed': open }" 7330 x-bind="eventListeners" 7331> 7332 <div class="relative bg-container-lighter bss_login_popup" 7333 x-show="open" 7334 @click.outside="open = false" 7335 x-transition:enter="transform transition ease-in-out duration-500 sm:duration-700" 7336 x-transition:enter-start="translate-x-full" 7337 x-transition:enter-end="translate-x-0" 7338 x-transition:leave="transform transition ease-in-out duration-500 sm:duration-700" 7339 x-transition:leave-start="translate-x-0" 7340 x-transition:leave-end="translate-x-full" 7341 > 7342 <div 7343 x-show="open" 7344 x-transition:enter="ease-in-out duration-500" 7345 x-transition:enter-start="opacity-0" 7346 x-transition:enter-end="opacity-100" 7347 x-transition:leave="ease-in-out duration-500" 7348 x-transition:leave-start="opacity-100" 7349 x-transition:leave-end="opacity-0" class="absolute flex close_icon" style="width: 11px;height: 11px;background: transparent;"> 7350 <button @click="open = false;" aria-label="Close panel" 7351 class="transition duration-150 ease-in-out text-black cursor-pointer"> 7352 <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> 7353 </button> 7354 </div> 7355 <div class="flex h-full flex-col bss_login_popup_in overflow-y-auto" > 7356 <div class="message mx-4 message-error" x-show="openMessage"> 7357 <div> 7358 <span x-html="message"></span> 7359 </div> 7360 <div class="cursor-pointer" title="close" @click="openMessage = false"> 7361 <svg class="fill-current text-white" xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 18 18"> 7362 <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 7363 4.47 1.06 1.06L9 10.06l4.47 4.47 1.06-1.06L10.06 9z"> 7364 </path> 7365 </svg> 7366 </div> 7367 </div> 7368 <div class="message mx-4 message-error success" x-show="openSuccessMessage"> 7369 <div> 7370 <span x-html="message"></span> 7371 </div> 7372 <div class="cursor-pointer" title="close" @click="openSuccessMessage = false"> 7373 <svg class="fill-current text-white" xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 18 18"> 7374 <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 7375 4.47 1.06 1.06L9 10.06l4.47 4.47 1.06-1.06L10.06 9z"> 7376 </path> 7377 </svg> 7378 </div> 7379 </div> 7380 <div class="block-customer-login for_got" x-show="openForgot"> 7381 <h2 id="authenticate-customer-login" class="text-size18 font-medium text-darkblack"> 7382 Forgot Password </h2> 7383 <form class="form form-fotgotpassword" 7384 method="post" 7385 @submit.prevent="submitForgotForm();" 7386 id="fotgot-form"> 7387 <fieldset class="fieldset"> 7388 <div class="text-size14 font-normal text-black mb-4">Please enter your email address below to receive a password reset link.</div> 7389 <div class="field email required"> 7390 <label for="email_address" class="label"><span>Email</span></label> 7391 <div class="control"> 7392 <input type="email" name="email" alt="email" id="email_address" class="form-input" required 7393 value=""> 7394 </div> 7395 </div> 7396 </fieldset> 7397 <div class="actions-toolbar"> 7398 <div class="primary"> 7399 <button type="submit" class="action submit primary"><span>Reset My Password</span></button> 7400 </div> 7401 <div class="secondary ml-4 self-center"> 7402 <a class="action back cursor-pointer" 7403 @click ="openForgot = false,openLogin = true, 7404 openButtonLogin = true" 7405 >
7406 <span class="text-size14 font-medium text-black"> 7407 Back </span> 7408 </a> 7409 </div> 7410 </div> 7411 </form> 7412</div> 7413 7414 7415 7416 <div class="w-full"> 7417 <input id="g-recaptcha-response" type="hidden" value=""/> 7418 </div> 7419 <div class="block-new-customer social_login" 7420 x-show="openButtonLogin"> 7421 <h2 id="authenticate-new-customer" class="text-size18 font-semibold text-darkblack"> 7422 Log In </h2> 7423 <div class="block-content"> 7424 <div id="add_button_login_byclass" x-data="bssButtonSocial()" x-ref="registerSocialButton"> 7425 <div class=""> 7426 <div class="sociallogin-buttons" x-ref="loginSocialButton"> 7427 <ul class="sociallogin-clearfix flex flex-wrap"> 7428 <li class="w-full text-size14 font-medium text-darkblack relative sociallogin-button 7429 googleplus" title="Login with Google"> 7430 <a class="sociallogin-button-link sociallogin-button-click" id="sociallogin-button-click" 7431 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" 7432 data-width="630" 7433 data-height="650" 7434 x-ref="googleplus" 7435 @click="popupSocial($refs.googleplus)"> 7436 <span class="sociallogin-button-auto"> 7437 <span class="sociallogin-button-icon"> 7438 </span> 7439 <span class="sociallogin-button-text">Login with Google</span> 7440 </span> 7441 </a> 7442 </li> 7443 </ul> 7444 </div> 7445 7446 </div> 7447 <div style="clear: both;"></div> 7448 </div> 7449 </div> 7450 </div> 7451 <div class="block-customer-login" x-show="openLogin" x-data="{ show: false }"> 7452 <span class="or-label text-size14 font-normal text-darkblack"> Or</span> 7453 7454 <form class="form form-login" 7455 method="post" 7456 @submit.prevent="submitForm();" 7457 id="login-form" 7458 > 7459 <div class="fieldset login"> 7460 <div class="field email required"> 7461 <label class="label hidden" for="customer-email"> 7462 <span>Email Address</span> 7463 </label> 7464 <div class="control"> 7465 <input name="username" 7466 x-ref="customer-email" 7467 @change="errors = 0" 7468 type="email" 7469 required 7470 class="form-input input-text" id="customer-email" placeholder="Email address" 7471 > 7472 </div> 7473 </div> 7474 <div class="field password required" > 7475 <label for="pass" class="label hidden">
7476 <span>Password</span> 7477 </label> 7478 <div class="control"> 7479 <input name="password" 7480 type="password" 7481 class="form-input input-text" id="pass" placeholder="Password" 7482 required 7483 x-ref="customer-password" 7484 @change="errors = 0" 7485 > 7486 </div> 7487 </div> 7488 7489 <input name="context" type="hidden" value="checkout"/> 7490 7491 <div class="actions-toolbar flex justify-between items-center" > 7492 <div class="flex items-center"> 7493 <input type="checkbox" name="show-password" @click="showPassword()" id="show-password" value="" class="checkbox"> 7494 <label class="cursor-pointer text-size12 font-normal text-darkblack" style="margin:0;" for="show-password">Show password</label> 7495 <!-- <span class="cursor-pointer text-size12 font-normal text-darkblack" @click="showPasswordForLable()" id="show-password-label" > 7496 Show Password 7497 </span> --> 7498 </div> 7499 <span class="cursor-pointer text-size12 font-normal text-darkblack" @click="openForgot = true,openLogin = false,openButtonLogin = false"> 7500 Forgot Your Password? </span> 7501 7502 7503 </div> 7504 <div class="actions-toolbar flex justify-between items-center"> 7505 <button type="submit" class="inline-flex btn btn-primary login_btn"> 7506 Log In </button> 7507 </div> 7508 </div> 7509 </form> 7510</div> 7511
7512<script> 7513 function showPassword(){ 7514 var showPwd=document.getElementById("show-password"); 7515 var password=document.getElementById("pass"); 7516 if(showPwd.checked==true) { 7517 password.type="text"; 7518 } else { 7519 password.type="password"; 7520 } 7521 } 7522 function showPasswordForLable(){ 7523 var password=document.getElementById("pass"); 7524 if (password.type === "password") { 7525 password.type = "text"; 7526 } else { 7527 password.type = "password"; 7528 } 7529 } 7530</script>
7530 7531 <div class="block-new-customer new_customer text-center" x-show ="openCreate"> 7532 <h2 id="authenticate-new-customer" class="text-size13 font-normal text-darkblack"> 7533 New Customer? </h2> 7534 <div class="block-content"> 7535 <div class="actions-toolbar"> 7536 <a class="block btn btn-primary cursor-pointer text-size18 font-semibold text-custom-blue" 7537 href="https://www.flooringinc.com/customer/account/create/" > 7538 Sign Up Now </a> 7539 </div> 7540 <div class="block-new-customer"> 7541 <h3 class="text-size16 font-normal text-black"> 7542 <a class="block underline" 7543 href="https://www.flooringinc.com/pro-advantage/" 7544 > 7545 Become a Pro </a> 7546 </h3> 7547 </div> 7548 </div> 7549 </div> 7550 <div class="block-new-customer social_login margin" x-show="openButtonRegister"> 7551 <h2 id="authenticate-new-customer" class="text-size18 font-medium text-darkblack"> 7552 Social Register </h2> 7553 <div class="block-content"> 7554 <div id="add_button_register_byclass" x-data="bssButtonSocial()" x-ref="registerSocialButton"> 7555 <div class=""> 7556 <div class="sociallogin-buttons"> 7557 <ul class="sociallogin-clearfix flex flex-wrap"> 7558 <li class="w-full text-size14 font-medium text-darkblack relative sociallogin-button googleplus" title="Register with Google"> 7559 <a class="sociallogin-button-link sociallogin-button-click" id="sociallogin-button-click" 7560 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" 7561 data-width="630" 7562 data-height="650" 7563 x-ref="googleplus" 7564 @click="popupSocial($refs.googleplus)"> 7565 <span class="sociallogin-button-auto"> 7566 <span class="sociallogin-button-icon"> 7567 </span> 7568 <span class="sociallogin-button-text">Register with Google</span> 7569 </span> 7570 </a> 7571 </li> 7572 </ul> 7573 </div> 7574 </div> 7575 <div style="clear: both;"></div> 7576 </div> 7577 </div> 7578 </div> 7579 </div> 7580 </div> 7581</div> 7582</section>
7583<script> 7584 var classLogin = [".checkout-container .opc-wrapper"]; 7585 var classRegister = [""]; 7586 classLogin = classLogin[0].trim().split(/\s+/); 7587 classRegister = classRegister[0].trim().split(/\s+/); 7588 if(classLogin && classLogin.length > 0 && classLogin[0]){ 7589 classLogin.forEach(element => { 7590 var classLoginElement = document.querySelector(element); 7591 var loginSocialButton = document.getElementById('add_button_login_byclass'); 7592 if (classLoginElement && loginSocialButton) { 7593 const cloneLoginSocialButton = loginSocialButton.cloneNode(true); 7594 classLoginElement.appendChild(cloneLoginSocialButton); 7595 cloneLoginSocialButton.style.display='block'; 7596 } 7597 }); 7598 } 7599 7600 if(classRegister && classRegister.length > 0 && classRegister[0]){ 7601 classRegister.forEach(element => { 7602 var classRegisterElement = document.querySelector(element); 7603 var registerSocialButton = document.getElementById('add_button_register_byclass'); 7604 if (classRegisterElement && registerSocialButton) { 7605 const cloneRegisterSocialButton = registerSocialButton.cloneNode(true); 7606 classRegisterElement.appendChild(cloneRegisterSocialButton); 7607 cloneRegisterSocialButton.style.display='block'; 7608 } 7609 }); 7610 } 7611 7612 function bssButtonSocial() { 7613 return { 7614 renderShowmore : function (element) { 7615 var socialButton = element.querySelector('.sociallogin-clearfix').getElementsByTagName("li"); 7616 for (let i = 0; i <= socialButton.length - 1; i++) { 7617 socialButton[i].style.display = 'block'; 7618 } 7619 element.querySelector('.sociallogin-showmore').style.display = 'none'; 7620 }, 7621 popupSocial: function (element) { 7622 var href = element.getAttribute('data-href'); 7623 var width = element.getAttribute('data-width'); 7624 var height = element.getAttribute('data-height'); 7625 var popup_window = null; 7626 if (!width) { 7627 width = 650; 7628 } 7629 7630 if(!height) { 7631 height = 350; 7632 } 7633 7634 var left = parseInt((window.innerWidth- width) / 2); 7635 var top = parseInt((window.innerHeight - height) / 2); 7636 7637 var params = [ 7638 'resizable=yes', 7639 'scrollbars=no', 7640 'toolbar=no', 7641 'menubar=no', 7642 'location=no', 7643 'directories=no', 7644 'status=yes', 7645 'width='+ width, 7646 'height='+ height, 7647 'left='+ left, 7648 'top='+ top 7649 ]; 7650 7651 if(popup_window) { 7652 popup_window.close(); 7653 } 7654 7655 if(href) { 7656 popup_window = window.open(href,'',params.join(',')); 7657 popup_window.focus(); 7658 7659 }else{ 7660 alert('This Login Application was not configured correctly. Please contact our customer support.'); 7661 } 7662 return false; 7663 } 7664 } 7665 } 7666 7667</script>
7667 7668 7669 7670 7671
7671<script> 7672 (() => { 7673 function changeNoCookieDomain() { 7674 const categoryKey = "marketing"; 7675 if (! prCookieConsentApi.isAllowedCategory(categoryKey)) { 7676 return; 7677 } 7678 7679 let iframes = document.querySelectorAll('iframe'), 7680 youtubeNoCookieIframes = Array.from(iframes) 7681 .filter((iframe) => iframe.src.indexOf('youtube-nocookie.com') !== -1); 7682 7683 youtubeNoCookieIframes.forEach((iframe) => { 7684 iframe.src = iframe.src.replace('youtube-nocookie.com', 'youtube.com'); 7685 }); 7686 } 7687 7688 if (prCookieConsentApi) { 7689 changeNoCookieDomain(); 7690 return; 7691 } 7692 7693 document.addEventListener('pr-cookie-consent-api:configured', changeNoCookieDomain); 7694 })(); 7695 </script>
7695 7696
7697<script> 7698 'use strict'; 7699 7700 (() => { 7701 window.addEventListener('DOMContentLoaded', () => { 7702 if (document.querySelectorAll('lite-youtube').length > 0) { 7703 const link = document.createElement('link'), 7704 script = document.createElement('script'); 7705 7706 link.rel = 'stylesheet'; 7707 link.type = 'text/css'; 7708 link.href = 'https\u003A\u002F\u002Fwww.flooringinc.com\u002Fstatic\u002Fversion1789462004\u002Ffrontend\u002FDcw\u002Fhyvadesktop\u002Fen_US\u002FMageQuest_LiteYouTube\u002Fcss\u002Flite\u002Dyt\u002Dembed.min.css'; 7709 document.head.appendChild(link); 7710 7711 script.type = 'text/javascript'; 7712 script.src = 'https\u003A\u002F\u002Fwww.flooringinc.com\u002Fstatic\u002Fversion1789462004\u002Ffrontend\u002FDcw\u002Fhyvadesktop\u002Fen_US\u002FMageQuest_LiteYouTube\u002Fjs\u002Flite\u002Dyt\u002Dembed.min.js'; 7713 document.head.appendChild(script); 7714 } 7715 }); 7716 })(); 7717</script>
vendor: 1 bytes, line 7717
7717
7718<script data-mfmofile="true"> 7719 document.addEventListener("DOMContentLoaded", function() { 7720 if (document.querySelectorAll('.mf-ytw-wrapper').length || document.querySelectorAll('[data-mf-ytw-youtube-link]').length) { 7721 !function (f, b, e, v, t, s) { 7722 if(f.mfytwcss)return; 7723 f.mfytwcss=1; 7724 t = b.createElement(e); 7725 t.rel = 'stylesheet'; 7726 t.type = 'text/css'; 7727 t.href = v; 7728 s = b.getElementsByTagName('HEAD')[0]; 7729 s.appendChild(t) 7730 }(window, document, 'link', 'https://www.flooringinc.com/static/version1789462004/frontend/Dcw/hyvadesktop/en_US/Magefan_YouTubeWidget/css/youtubewidget.min.css'); 7731 } 7732 if (document.querySelectorAll('.mf-ytw-wrapper').length) { 7733 !function (f, b, e, v, t, s) { 7734 if(f.mfytwjs)return; 7735 f.mfytwjs=1; 7736 t = b.createElement(e); 7737 t.type = 'text/javascript'; 7738 t.src = v; 7739 s = b.getElementsByTagName('HEAD')[0]; 7740 s.appendChild(t) 7741 }(window, document, 'script', 'https://www.flooringinc.com/static/version1789462004/frontend/Dcw/hyvadesktop/en_US/Magefan_YouTubeWidget/js/iframe.min.js'); 7742 } 7743 if (document.querySelectorAll('[data-mf-ytw-youtube-link]').length) { 7744 !function (f, b, e, v, t) { 7745 if(f.mflinkjs)return; 7746 f.mflinkjs=1; 7747 t = b.createElement(e); 7748 t.type = 'text/javascript'; 7749 t.src = v; 7750 s = b.getElementsByTagName('HEAD')[0]; 7751 s.appendChild(t) 7752 }(window, document, 'script', 'https://www.flooringinc.com/static/version1789462004/frontend/Dcw/hyvadesktop/en_US/Magefan_YouTubeWidget/js/link.min.js'); 7753 } 7754 }); 7755</script>
7755 7756 7757 <div id="pr-gpc-notification-modal" style="display: none;"> 7758 <div class="pr-gpc-notification-wrap"> 7759 <h2>Your Opt-Out Preferences Honored</h2> 7760<p>Your browser's privacy preference (GPC) has been detected.</p> 7761<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> 7762</div> </div> 7763 7764
7764<script type="text/x-magento-init" nonce="N2Q3enk5eGFoZ3hyejB4MzJxOThhNGsyd2lybnZpbno="> 7765 { 7766 "#pr-gpc-notification-modal": { 7767 "Plumrocket_GlobalPrivacyControl/js/opt-out-notification": {} 7768 } 7769 } 7770 </script>
7770 7771 7772
7773<script> 7774 (() => { 7775 function src_default(Alpine) { 7776 Alpine.directive("intersect", (el, { value, expression, modifiers }, { evaluateLater, cleanup }) => { 7777 let evaluate = evaluateLater(expression); 7778 let options = { 7779 rootMargin: getRootMargin(modifiers), 7780 threshold: getThreshhold(modifiers) 7781 }; 7782 let observer = new IntersectionObserver((entries) => { 7783 entries.forEach((entry) => { 7784 if (entry.isIntersecting === (value === "leave")) 7785 return; 7786 evaluate(); 7787 modifiers.includes("once") && observer.disconnect(); 7788 }); 7789 }, options); 7790 observer.observe(el); 7791 cleanup(() => { 7792 observer.disconnect(); 7793 }); 7794 }); 7795 } 7796 function getThreshhold(modifiers) { 7797 if (modifiers.includes("full")) 7798 return 0.99; 7799 if (modifiers.includes("half")) 7800 return 0.5; 7801 if (!modifiers.includes("threshold")) 7802 return 0; 7803 let threshold = modifiers[modifiers.indexOf("threshold") + 1]; 7804 if (threshold === "100") 7805 return 1; 7806 if (threshold === "0") 7807 return 0; 7808 return Number(`.${threshold}`); 7809 } 7810 function getLengthValue(rawValue) { 7811 let match = rawValue.match(/^(-?[0-9]+)(px|%)?$/); 7812 return match ? match[1] + (match[2] || "px") : void 0; 7813 } 7814 function getRootMargin(modifiers) { 7815 const key = "margin"; 7816 const fallback = "0px 0px 0px 0px"; 7817 const index = modifiers.indexOf(key); 7818 if (index === -1) 7819 return fallback; 7820 let values = []; 7821 for (let i = 1; i < 5; i++) { 7822 values.push(getLengthValue(modifiers[index + i] || "")); 7823 } 7824 values = values.filter((v) => v !== void 0); 7825 return values.length ? values.join(" ").trim() : fallback; 7826 } 7827 7828 document.addEventListener("alpine:init", () => { 7829 window.Alpine.plugin(src_default); 7830 }); 7831 })(); 7832</script>
vendor: 1 bytes, line 7832
7832
7833<script> 7834 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"})) { 7835 document.querySelectorAll(selector).forEach(el => el.setAttribute('x-defer', `${deferUntil}`)); 7836 } 7837</script>
vendor: 1 bytes, line 7837
7837
7838<script> 7839 (function () { 7840 "use strict"; 7841 7842 const hasAlpine = new Promise(resolve => { 7843 window.addEventListener('alpine:initialized', resolve, {once: true, passive: true}); 7844 }); 7845 7846 const hasInteract = new Promise(resolve => { 7847 (events => { 7848 const onInteract = () => { 7849 resolve(); 7850 events.forEach(type => window.removeEventListener(type, onInteract)); 7851 } 7852 events.forEach(type => window.addEventListener(type, onInteract, {once: true, passive: true})) 7853 })(['touchstart', 'mouseover', 'wheel', 'scroll', 'keydown']) 7854 }); 7855 7856 const onIntersect = (el) => { 7857 return new Promise(resolve => { 7858 const observer = new IntersectionObserver(entries => { 7859 for (const entry of entries) { 7860 if (entry.isIntersecting) { 7861 observer.disconnect() 7862 resolve(); 7863 } 7864 } 7865 }, {}); 7866 observer.observe(el); 7867 }); 7868 } 7869 7870 function runComponent(el) { 7871 hasAlpine.then(() => { 7872 el.removeAttribute('x-ignore'); 7873 queueMicrotask(() => Alpine.initTree(el)); 7874 }); 7875 } 7876 7877 function initDeferredComponents() { 7878 document.querySelectorAll('[x-data][x-defer]').forEach(el => { 7879 el.setAttribute('x-ignore', ''); 7880 const deferUntil = (el.getAttribute('x-defer') || '').trim(); 7881 switch (deferUntil) { 7882 case 'interact': 7883 hasInteract.then(() => runComponent(el)); 7884 break; 7885 case 'intersect': 7886 onIntersect(el).then(() => runComponent(el)) 7887 break; 7888 case 'idle': 7889 window.requestIdleCallback 7890 ? window.requestIdleCallback(() => runComponent(el), {timeout: 4000}) 7891 : setTimeout(() => runComponent(el), 4000); 7892 break; 7893 case 'eager': 7894 runComponent(el); 7895 break; 7896 default: 7897 if (deferUntil.startsWith('event:') && deferUntil.length > 6) { 7898 window.addEventListener(deferUntil.substring(6), () => runComponent(el), {once: true, passive: true}); 7899 } 7900 } 7901 }); 7902 } 7903 7904 window.addEventListener('alpine:init', initDeferredComponents, {once: true, passive: true}); 7905 })() 7906</script>
7906 7907
7908<script type="module" 7909 src="https://www.flooringinc.com/static/version1789462004/frontend/Dcw/hyvadesktop/en_US/Hyva_Theme/js/alpine3.min.js" 7910 defer 7911 crossorigin 7912></script>
vendor: 1 bytes, line 7912
7912
7913<script> 7914 'use strict'; 7915 function dispatchMessages(messages, hideAfter) { 7916 const messagesEvent = new CustomEvent("messages-loaded", { 7917 detail: { 7918 messages: messages, 7919 hideAfter: hideAfter 7920 } 7921 }); 7922 window.dispatchEvent(messagesEvent); 7923 } 7924 7925 if (typeof hyva === 'undefined' || (!hyva.getBrowserStorage || !hyva.getCookie || !hyva.setCookie)) { 7926 console.warn("Hyvä helpers are not loaded yet. Make sure they are included before this script"); 7927 } 7928 7929 (function( hyva, undefined ) { 7930 7931 hyva.initFormKey = () => { 7932 const inputSelector = 'input[name="form_key"]', 7933 formKey = hyva.getFormKey(); 7934 7935 Array.from(document.querySelectorAll(inputSelector)).map(function (input) { 7936 input.value = formKey 7937 }); 7938 } 7939 7940 hyva.initMessages = () => { 7941 try { 7942 const messages = hyva.getCookie('mage-messages'); 7943 window.mageMessages = messages ? JSON.parse(decodeURIComponent(messages).replace(/\+/g, ' ')) : []; 7944 7945 dispatchMessages(window.mageMessages); 7946 7947 // empty `mage-messages` cookie 7948 const skipSetDomain = true; 7949 hyva.setCookie('mage-messages','', -1, skipSetDomain); 7950 7951 } catch (error) { 7952 console.warn('Error parsing Cookie Messages:', error); 7953 } 7954 } 7955 7956 window.addEventListener('DOMContentLoaded', hyva.initFormKey); 7957 hyva.alpineInitialized(hyva.initMessages) 7958 7959 }( window.hyva = window.hyva || {} )); 7960</script>
vendor: 1 bytes, line 7960
7960
7961<script> 7962 'use strict'; 7963 { 7964 const private_content_key = 'mage-cache-storage'; 7965 const private_content_expire_key = 'mage-cache-timeout'; 7966 const private_content_version_key = 'private_content_version'; 7967 const section_data_ids_key = 'section_data_ids'; 7968 const mage_cache_session_id_key = 'mage-cache-sessid'; 7969 const last_visited_store_key = 'last_visited_store'; 7970 7971 const ttl = 3600; 7972 7973 if (typeof hyva === 'undefined' || (!hyva.getBrowserStorage || !hyva.getCookie || !hyva.setCookie)) { 7974 console.warn("Hyvä helpers are not loaded yet. Make sure they are included before this script"); 7975 } 7976 7977 function loadSectionData () { 7978 const browserStorage = hyva.getBrowserStorage(); 7979 if (!browserStorage) { 7980 typeof window.dispatchMessages !== "undefined" && window.dispatchMessages( 7981 [{ 7982 type: "warning", 7983 text: "Please enable LocalStorage in your browser." 7984 }] 7985 ); 7986 return; 7987 } 7988 try { 7989 let isInvalid = false; 7990 7991 if (hyva.getCookie(last_visited_store_key) !== CURRENT_STORE_CODE) { 7992 isInvalid = true; 7993 } 7994 hyva.setCookie(last_visited_store_key, CURRENT_STORE_CODE, false, false); 7995 7996 if (!hyva.getCookie(mage_cache_session_id_key)) { 7997 isInvalid = true; 7998 browserStorage.removeItem(private_content_key); 7999 const skipSetDomain = true; 8000 const days = false; 8001 hyva.setCookie(mage_cache_session_id_key, true, days, skipSetDomain) 8002 } 8003 8004 const cookieVersion = hyva.getCookie(private_content_version_key); 8005 const storageVersion = browserStorage.getItem(private_content_version_key); 8006 8007 if (cookieVersion && !storageVersion || cookieVersion !== storageVersion) { 8008 isInvalid = true; 8009 } 8010 8011 const privateContentExpires = browserStorage.getItem(private_content_expire_key); 8012 if (privateContentExpires && new Date(privateContentExpires) < new Date()) { 8013 browserStorage.removeItem(private_content_key); 8014 } 8015 8016 if (isInvalid && cookieVersion) { 8017 fetchPrivateContent([]); 8018 } else if (cookieVersion && storageVersion && cookieVersion === storageVersion) { 8019 const privateContent = JSON.parse(browserStorage.getItem(private_content_key)); 8020 if ( 8021 privateContent && 8022 privateContentExpires && 8023 privateContent.cart && 8024 privateContent.customer 8025 ) { 8026 dispatchPrivateContent(privateContent); 8027 } else { 8028 fetchPrivateContent([]); 8029 } 8030 } else { 8031 if (document.getElementById('default-section-data')) { 8032 const privateContent = JSON.parse(document.getElementById('default-section-data').innerText.trim()); 8033 dispatchPrivateContent(privateContent); 8034 } else { 8035 dispatchPrivateContent({}); 8036 } 8037 } 8038 8039 } catch (error) { 8040 console.warn('Error retrieving Private Content:', error); 8041 } 8042 } 8043 8044 hyva.alpineInitialized(loadSectionData) 8045 window.addEventListener('reload-customer-section-data', loadSectionData); 8046 8047 function dispatchPrivateContent(data) { 8048 const privateContentEvent = new CustomEvent("private-content-loaded", { 8049 detail: { 8050 data: data 8051 } 8052 }); 8053 window.dispatchEvent(privateContentEvent); 8054 } 8055 8056 function fetchPrivateContent(sections) { 8057 fetch(`${BASE_URL}customer/section/load/?sections=${encodeURIComponent(sections.join(','))}`, { 8058 method: 'GET', 8059 headers: { 8060 'Content-Type': 'application/json', 8061 'X-Requested-With': 'XMLHttpRequest' 8062 } 8063 }) 8064 .then(response => response.json()) 8065 .then( 8066 data => { 8067 if (data) { 8068 try { 8069 const browserStorage = hyva.getBrowserStorage(); 8070 8071 // merge new data preserving non-invalidated sections 8072 const oldSectionData = JSON.parse(browserStorage.getItem(private_content_key) || '{}') || {}; 8073 8074 if ((! data.cart || ! data.cart.cartId) && oldSectionData['checkout-data']) { 8075 delete oldSectionData['checkout-data']; 8076 } 8077 const newSectionData = Object.assign(oldSectionData, data); 8078 8079 dispatchPrivateContent(newSectionData); 8080 8081 // don't persist messages, they've been dispatched already 8082 if (newSectionData.messages && newSectionData.messages.messages ) { 8083 newSectionData.messages.messages = []; 8084 } 8085 8086 browserStorage.setItem(private_content_key, JSON.stringify(newSectionData)); 8087 8088 const expiresAt = new Date(Date.now() + (ttl * 1000)).toISOString(); 8089 browserStorage.setItem(private_content_expire_key, expiresAt); 8090 8091 const newCookieVersion = hyva.getCookie(private_content_version_key); 8092 browserStorage.setItem(private_content_version_key, newCookieVersion); 8093 8094 // We don't need the section_data_ids in Hyvä, but we store them for compatibility 8095 // with Luma Fallback. Otherwise, not all sections are loaded in Luma Checkout 8096 hyva.setCookie( 8097 section_data_ids_key, 8098 JSON.stringify( 8099 Object.keys(data).reduce((sectionDataIds, sectionKey) => { 8100 sectionDataIds[sectionKey] = data[sectionKey]['data_id']; 8101 return sectionDataIds; 8102 }, {}) 8103 ), 8104 false, 8105 true 8106 ); 8107 } catch (error) { 8108 console.warn("Couldn't store privateContent", error); 8109 } 8110 } 8111 } 8112 ); 8113 } 8114 } 8115</script>
vendor: 1 bytes, line 8115
8115
8116<script> 8117 (() => { 8118 document.addEventListener('submit', event => event.target.action = event.target.action.replace('%25uenc%25', hyva.getUenc())); 8119 })() 8120</script>
vendor: 1 bytes, line 8120
8120
8121<script> 8122 (events => { 8123 const dispatchUserInteractionEvent = () => { 8124 events.forEach(type => window.removeEventListener(type, dispatchUserInteractionEvent)) 8125 window.dispatchEvent(new Event('init-external-scripts')) 8126 }; 8127 events.forEach(type => window.addEventListener(type, dispatchUserInteractionEvent, {once: true, passive: true})) 8128 })(['touchstart', 'mouseover', 'wheel', 'scroll', 'keydown']) 8129</script>
8129 8130<style> 8131[data-bv-show=inline_rating] .bv_sub_container .bv_numReviews_component_container .bv_text{margin: -2px 0 0 0 !important;display: flex !important;} 8132@media(max-width: 767px){ 8133[data-bv-show=inline_rating] .bv_sub_container .bv_numReviews_component_container .bv_text{margin: 4px 0 0 0 !important;} 8134} 8135@media screen and (min-width: 768px) and (max-width: 1440px) { 8136 .product-item .product-info .price-box .price-container .price-wrapper span.price{font-size: 18px !important;} 8137 .product-item .product-info .price-box .price-container .price-wrapper{font-size: 18px;} 8138} 8139@media(max-width: 1550px){ 8140.products__recommendations .product-slider .glider-track .recommended-slider-item{min-width:auto;} 8141} 8142.page-products .spot-light .catergory_slider_content{border-radius: 10px;} 8143.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;} 8144@media(max-width: 767px){ 8145.page-products .spot-light .catergory_slider_content .product-info{padding-left: 0 !important;padding-right: 0px !important;} 8146} 8147.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; 8148} 8149.page-products .spot-light .spot-bottom .order_btn:hover{background: #15324c !important;transition-duration: .15s;} 8150.page-products .spot-light .catergory_slider_content .color_counts .color_count{font-size: 12px;color: rgb(127 127 127 / var(--tw-text-opacity)} 8151 8152 8153.category-top-filter .pagebuilder-column h3 span, .category-top-filter .pagebuilder-column h3 span a, .category-top-filter .pagebuilder-column h3 a{display: block;} 8154.checkout-payment-method .payment-method .payment-method-title.field.choice input#paypal_express+label {display: block;} 8155.catalog-product-view .product-info-main .color_swatches .swatch-attribute-options .select_none.swatch-option{display: none;} 8156@media(min-width: 768px){ 8157 .checkout-cart-index #shopping-cart-table .cart.item .item-info td.col.item{flex-wrap: nowrap;} 8158} 8159@media(min-width: 1500px){ 8160 .checkout-cart-index #shopping-cart-table .col.qty{min-width: 169px;max-width: 169px;width: 169px;} 8161} 8162@media only screen and (max-width: 1340px) and (min-width: 1000px){ 8163 .checkout-cart-index #maincontent #shopping-cart-table .product-item-details{max-width: 40%;} 8164} 8165</style>
8166<script> 8167document.addEventListener('DOMContentLoaded', function() { 8168 if (window.innerWidth <= 767) { 8169 document.querySelectorAll('.page-with-filter.page-products .sidebar .filter-content .card .filter-options-title').forEach(function(title) { 8170 const span = title.querySelector('span'); 8171 if (span && span.textContent.trim().includes('Revenue Ranking')) { 8172 const parentCard = title.closest('.card'); 8173 if (parentCard && !parentCard.id) { 8174 parentCard.id = 'filter-id-revenue_ranking'; 8175 } 8176 } 8177 }); 8178 } 8179}); 8180</script>
8180 8181<style> 8182.page-with-filter.page-products .sidebar .filter-content .card#filter-id-revenue_ranking{display: none;} 8183.checkout-index-index .kl_sms_phone_number-field{margin-bottom: 20px;} 8184@media(min-width: 768px){ 8185 .catalog-product-view .modal.order-free-sample-popup .right .order-free-sample-prod-info .product-info:after{right: -10px;top: -10px;} 8186} 8187@media(max-width: 767px){ 8188 .catalog-product-view .order-free-sample-popup .border .product-info:after{left: 35px;} 8189} 8190.checkout-index-index .notification4 {display: none} 8191 #related_cart_slider .js_slides{margin-right: 0;margin-left: 0;} 8192</style>
8193<script> 8194 function initConfigurableOptions(productId, optionConfig) { 8195 8196 function findPathParam(key) { 8197 const baseUrl = (BASE_URL.substr(0, 2) === '//' ? 'http:' : '') + BASE_URL; 8198 const baseUrlParts = (new URL(baseUrl)).pathname.replace(/\/$/, '').split('/'); 8199 const pathParts = window.location.pathname.split('/').slice(baseUrlParts.length + 3); 8200 for (let i = 0; i < pathParts.length; i += 2) { 8201 if (pathParts[i] === key && pathParts.length > i) { 8202 return pathParts[i + 1]; 8203 } 8204 } 8205 } 8206 8207 return { 8208 optionConfig, 8209 productId, 8210 attributeCode:'', 8211 itemId: (new URLSearchParams(window.location.search)).get('id') || findPathParam('id'), 8212 ssrGalleryChildId: 0, 8213 allowedAttributeOptions: [], 8214 selectedValues: [], 8215 init() { 8216 this.checkIsFirst(); 8217 this.findAllowedAttributeOptions(); 8218 this.$nextTick(() => { 8219 if (typeof this.optionConfig.defaultValues === 'object') { 8220 for (const [optionId, value] of Object.entries(this.optionConfig.defaultValues)) { 8221 this.changeOption(optionId, value + ''); 8222 } 8223 } 8224 }); 8225 }, 8226 checkIsFirst() { 8227 this.isLoadedFirst = true; 8228 setTimeout(() => { 8229 this.isLoadedFirst = false; 8230 }, "3000"); 8231 }, 8232 findSimpleIndex() { 8233 this.productIndex = this.calculateSimpleIndexForPartialSelection(this.selectedValues); 8234 }, 8235 calculateSimpleIndexForPartialSelection(selectedValues) { 8236 if (selectedValues.length === 0) return 0; 8237 let productIndexIds = Object.keys(this.optionConfig.index); 8238 Object.keys(this.optionConfig.attributes).forEach((attribute) => { 8239 const productsWithAttributeMatch = selectedValues[attribute] 8240 ? productIndexIds.filter((productIndex) => { 8241 return this.optionConfig.index[productIndex][attribute] === this.selectedValues[attribute] 8242 }) 8243 : []; 8244 8245 productIndexIds = productsWithAttributeMatch.length ? productsWithAttributeMatch : productIndexIds 8246 }) 8247 return productIndexIds[0]; 8248 }, 8249 calculateSimpleIndexForFullSelection(selectedValues) { 8250 const productIndexes = this.optionConfig.index; 8251 return Object.keys(productIndexes).find(productIndex => { 8252 const productCandidateOptions = productIndexes[productIndex]; 8253 8254 for (const productOption in productCandidateOptions) { 8255 if ( 8256 ! selectedValues[productOption] || 8257 selectedValues[productOption] !== productCandidateOptions[productOption] 8258 ) { 8259 return false; 8260 } 8261 } 8262 return productIndex; 8263 }); 8264 }, 8265 productIndex: 0, 8266 findAllowedAttributeOptions() { 8267 this.allowedAttributeOptions = this.calculateAllowedAttributeOptions(this.selectedValues); 8268 }, 8269 calculateAllowedAttributeOptions(selectedValues) { 8270 const allAttributes = this.optionConfig.attributes; 8271 const allAttributesSorted = Object.values(allAttributes).sort((a,b) => { 8272 return a.position - b.position 8273 }); 8274 8275 const selectionWithoutAttr = attrId => { 8276 return Object.keys(selectedValues).reduce((acc, id) => { 8277 if (id !== attrId) acc[id] = selectedValues[id]; 8278 return acc; 8279 }, {}) 8280 } 8281 8282 const newAllowedAttributeOptions = []; 8283 8284 allAttributesSorted.forEach(attribute => { 8285 const availableIndexes = this.calculateAvailableProductIndexes(selectionWithoutAttr(attribute.id)); 8286 if (attribute?.code === 'incstores_pim_color_axis') { 8287 newAllowedAttributeOptions[attribute.id] = 8288 allAttributes[attribute.id].options 8289 .filter(option => { 8290 return !!option.products.find(product => availableIndexes.includes(product)); 8291 }) 8292 .sort((a, b) => {
8293 const cheapestA = this.findCheapestProductForPartialSelectionForSort({ 8294 ...selectedValues, 8295 [attribute.id]: a.id 8296 }); 8297 8298 const cheapestB = this.findCheapestProductForPartialSelectionForSort({ 8299 ...selectedValues, 8300 [attribute.id]: b.id 8301 }); 8302 8303 if (!cheapestA && !cheapestB) return 0; 8304 if (!cheapestA) return 1; 8305 if (!cheapestB) return -1; 8306 8307 const priceA = this.optionConfig.optionPrices[cheapestA].customPrice.amount; 8308 const priceB = this.optionConfig.optionPrices[cheapestB].customPrice.amount; 8309 8310 return priceA - priceB; 8311 }); 8312 } else { 8313 newAllowedAttributeOptions[attribute.id] = allAttributes[attribute.id].options.filter(option => { 8314 return !!option.products.find(product => { 8315 //====== For Custom Design link - fetch child product id on page load START ====== 8316 if(document.querySelector('input[name="selected_option_child_id"]')){ 8317 if(document.querySelector('input[name="selected_option_child_id"]').value == ''){ 8318 document.querySelector('input[name="selected_option_child_id"]').value = product; 8319 } 8320 } 8321 //====== For Custom Design link - fetch child product id on page load END ====== 8322 return availableIndexes.includes(product); 8323 }) 8324 }); 8325 } 8326 }); 8327 return newAllowedAttributeOptions; 8328 }, 8329 calculateAvailableProductIndexes(selectedOptions) { 8330 if (Object.keys(selectedOptions).length === 0) { 8331 return Object.keys(this.optionConfig.index); 8332 } 8333 8334 const selectedIds = Object.keys(selectedOptions); 8335 if (Object.values(this.optionConfig.salable || {}).length) { 8336 const selectedOptionIndexes = selectedIds.map(attrId => { 8337 const optionValue = selectedOptions[attrId]; 8338 return this.optionConfig.salable[attrId] && this.optionConfig.salable[attrId][optionValue] || [] 8339 }) 8340 return selectedOptionIndexes.reduce((acc, optionIndexes) => { 8341 return acc.filter(index => optionIndexes.includes(index)); 8342 }); 8343 } else { 8344 const productIndexes = this.optionConfig.index; 8345 return Object.keys(productIndexes).filter(index => { 8346 return selectedIds.find( 8347 attrId => productIndexes[index][attrId] === `${selectedOptions[attrId]}` 8348 ) 8349 }); 8350 } 8351 }, 8352 findAttributeByOptionId(optionId) { 8353 for (const attributeId in this.optionConfig.attributes) { 8354 const attributeOptions = this.optionConfig.attributes[attributeId].options || []; 8355 if (attributeOptions.find(option => option.id === optionId)) { 8356 return attributeId; 8357 } 8358 } 8359 }, 8360 getAllowedAttributeOptions(attributeId) { 8361 return this.allowedAttributeOptions[attributeId] || [] 8362 }, 8363 getProductIdsForOption(option) { 8364 const attributeId = this.findAttributeByOptionId(option.id); 8365 const allOptions = this.optionConfig.attributes[attributeId]; 8366 const opt = (allOptions && allOptions.options || []).find(o => o.id === option.id); 8367 return opt && opt.products 8368 ? opt.products 8369 : []; 8370 }, 8371 findProductIdsForPartialSelection(optionSelection) { 8372 const candidateProducts = Object.values(optionSelection).reduce((candidates, optionId) => { 8373 const newCandidates = this.getProductIdsForOption({id: optionId}); 8374 return candidates === null 8375 ? newCandidates 8376 : candidates.filter(productId => newCandidates.includes(productId)); 8377 }, null); 8378 return candidateProducts || []; 8379 },
8380 findCheapestProductForPartialSelection(optionSelection) { 8381 const candidateProducts = this.findProductIdsForPartialSelection(optionSelection); 8382 return candidateProducts.reduce((cheapest, simpleIdx) => { 8383 // in the first iteration we start with simpleIdx as the currently cheapest product 8384 if (! this.optionConfig.optionPrices[cheapest]) return simpleIdx; 8385 const knownCheapestPrice = this.optionConfig.optionPrices[cheapest].finalPrice.amount; 8386 return knownCheapestPrice > this.optionConfig.optionPrices[simpleIdx].finalPrice.amount 8387 ? simpleIdx 8388 : cheapest; 8389 }, 0) 8390 }, 8391 findCheapestProductForPartialSelectionForSort(optionSelection) { 8392 const candidateProducts = this.findProductIdsForPartialSelection(optionSelection); 8393 return candidateProducts.reduce((cheapest, simpleIdx) => { 8394 // in the first iteration we start with simpleIdx as the currently cheapest product 8395 if (! this.optionConfig.optionPrices[cheapest]) return simpleIdx; 8396 const knownCheapestPrice = this.optionConfig.optionPrices[cheapest].customPrice.amount; 8397 return knownCheapestPrice > this.optionConfig.optionPrices[simpleIdx].customPrice.amount 8398 ? simpleIdx 8399 : cheapest; 8400 }, 0) 8401 }, 8402 findProductIdToUseForOptionPrice(option) { 8403 // try to find a product for a complete selection 8404 const attributeId = this.findAttributeByOptionId(option.id); 8405 const optionSelection = Object.assign({}, this.selectedValues, {[attributeId]: option.id}); 8406 const matchingSimpleIndex = this.calculateSimpleIndexForFullSelection(optionSelection); 8407 // if there is no complete selection, use the cheapest product for the option 8408 return matchingSimpleIndex || this.findCheapestProductForPartialSelection(optionSelection); 8409 }, 8410 getAttributeOptionLabel(option) { 8411 const optionProduct = this.findProductIdToUseForOptionPrice(option); 8412 if ((! optionProduct) || (optionProduct === this.productIndex)) { 8413 return option.label; 8414 } 8415 8416 const currentPrice = this.getOptionPriceAdjustmentBasePrice(); 8417 8418 if (this.optionConfig.optionPrices[optionProduct]) { 8419 const optionPrice = this.optionConfig.optionPrices[optionProduct].finalPrice.amount; 8420 if (optionPrice !== currentPrice){ 8421 return option.label + ' ' + hyva.formatPrice(optionPrice - currentPrice, true); 8422 } 8423 } 8424 return option.label; 8425 }, 8426 getOptionPriceAdjustmentBasePrice() { 8427 if (this.optionConfig.optionPrices[this.productIndex]) { 8428 return this.optionConfig.optionPrices[this.productIndex].finalPrice.amount 8429 } 8430 const cheapestForSelection = this.findCheapestProductForPartialSelection(this.selectedValues); 8431 return this.optionConfig.optionPrices[cheapestForSelection] 8432 ? this.optionConfig.optionPrices[cheapestForSelection].finalPrice.amount 8433 : this.optionConfig.prices.finalPrice.amount; // default price if no option selection 8434 }, 8435 changeOption(optionId, value) { 8436 if (value !== '' 8437 && typeof this.optionIsEnabled === 'function' 8438 && !this.optionIsEnabled(optionId, value)) { 8439 return; 8440 } 8441 var checkbox = document.getElementById('overage_percent'); 8442 if(checkbox){ 8443 checkbox.checked = true; // Check the checkbox 8444 } 8445 var galleryImgOpacity = document.querySelector('#gallery .prod_slider img.first-image'); 8446 if (galleryImgOpacity) { 8447 galleryImgOpacity.classList.add('opacity-0'); 8448 } 8449 if (value === '') { 8450 // create new array so the length property is reset if no option is selected (avoiding delete) 8451 this.selectedValues = this.selectedValues.reduce((newSelection, val, opt) => { 8452 if (opt !== optionId) { 8453 newSelection[opt] = val; 8454 } 8455 return newSelection; 8456 }, []); 8457 } else { 8458 const currentUrl = window.location.href; 8459 // Create a URL object 8460 const url = new URL(currentUrl); 8461 // Use searchParams to get the color option 8462 const colorOption = url.searchParams.get('color-option'); 8463 const variantOption = url.searchParams.get('variant-option'); 8464 if(colorOption!==null && variantOption!==null){ 8465 if(this.optionConfig.attributes[optionId]['code'] == 'incstores_pim_color_axis') 8466 { 8467 this.selectedValues[optionId] = colorOption; 8468 } 8469 if(this.optionConfig.attributes[optionId]['code'] == 'incstores_pim_variant_axis') 8470 { 8471 this.selectedValues[optionId] = variantOption; 8472 } 8473 } 8474 else if(colorOption!==null){ 8475 if(this.optionConfig.attributes[optionId]['code'] == 'incstores_pim_color_axis') 8476 { 8477 this.selectedValues[optionId] = colorOption; 8478 } 8479 8480 } 8481 else if(this.isLoadedFirst == true && (0 > 0 || 0 > 0)) 8482 { 8483 if(this.optionConfig.attributes[optionId]['code'] == 'incstores_pim_color_axis') 8484 { 8485 this.selectedValues[optionId] = '0'; 8486 } 8487 if(this.optionConfig.attributes[optionId]['code'] == 'incstores_pim_variant_axis') 8488 { 8489 this.selectedValues[optionId] = '0'; 8490 } 8491 } 8492 else 8493 { 8494 this.selectedValues[optionId] = value; 8495 } 8496 8497 var addToCartButton = document.querySelector('.pdp-addtocart-btn'); 8498 if (addToCartButton) { 8499 if (!addToCartButton.classList.contains('pointer-events-none')) { 8500 addToCartButton.classList.add('pointer-events-none'); 8501 addToCartButton.classList.add('opacity-50'); 8502 } 8503 } 8504 8505 var productId = this.findProductIdsForPartialSelection(this.selectedValues)[0]; 8506 var baseUrl = "https://www.flooringinc.com/"; 8507 8508 if (typeof productId === 'undefined') { 8509 let attributeCode = this.optionConfig.attributes[optionId]['code']; 8510 setTimeout(() => { 8511 if (attributeCode == 'incstores_pim_color_axis') { 8512 if (typeof this.autoSelectCompatibleOtherOption === 'function') { 8513 this.autoSelectCompatibleOtherOption(optionId); 8514 } 8515 } else if (attributeCode == 'incstores_pim_variant_axis' 8516 || attributeCode == 'product_option') { 8517 if (typeof this.autoSelectCompatibleColorOption === 'function') { 8518 this.autoSelectCompatibleColorOption(optionId); 8519 } 8520 } 8521 }, 300); 8522 } else { 8523 var fetchUrl = baseUrl+'customattribute/index/index/productId/'+productId; 8524 8525 fetch(fetchUrl) 8526 .then(response => response.json()) 8527 .then(data => { 8528 8529 if (document.getElementById('dimensions-attributes')) { 8530 document.getElementById('dimensions-attributes').innerHTML= data.detailsHtml.dimensionsHtml; 8531 } 8532 8533 if (document.getElementById('details-attributes')) { 8534 document.getElementById('details-attributes').innerHTML= data.detailsHtml.productDetails; 8535 } 8536 8537 if (document.getElementById('ship-to-text')) { 8538 document.getElementById('ship-to-text').value= data.shipToText; 8539 } 8540 8541 var addToCartButton = document.querySelector('.pdp-addtocart-btn'); 8542 if (addToCartButton) { 8543 addToCartButton.classList.remove('pointer-events-none'); 8544 addToCartButton.classList.remove('opacity-50'); 8545 } 8546 }) 8547 .catch(error => { 8548 console.log(error); 8549 }); 8550 } 8551 8552 } 8553 this.findSimpleIndex(); 8554 this.findAllowedAttributeOptions(); 8555 this.updateCalculatorType();// custom coding 8556 this.updateMinRollcut();// custom coding 8557 this.updateMaxRollLengthRestriction();// custom coding 8558 this.updateTileSizeArea(); // custom coding 8559 this.updateExactWidth(); // custom coding 8560 this.updateExactLength(); // custom coding 8561 this.updateExactHeight(); // custom coding 8562 this.updateCoveragePerCase(); // custom coding 8563 this.updateTileMinQty(); // custom coding 8564 this.updateShippingDetails(); // custom coding 8565 this.updatePrices(); 8566 this.updateSquareFootage(); 8567 8568 //If the page loads first time it will stop the gallery change, so configurable product image will display 8569 if (!this.isLoadedFirst) { 8570 this.updateGallery(); 8571 } 8572 8573 //====== For Custom Design link - fetch child product id when option clicked START ====== 8574 if(document.querySelector('input[name="selected_option_child_id"]')){ 8575 document.querySelector('input[name="selected_option_child_id"]').value = this.productIndex; 8576 } 8577 if(document.querySelector('input[name="custom_length"]') && document.getElementById('roll_length')){ 8578 document.querySelector('input[name="custom_length"]').value = document.getElementById('roll_length').value; 8579 } 8580 //====== For Custom Design link - fetch child product id when option clicked END ====== 8581 window.dispatchEvent( 8582 new CustomEvent( 8583 'configurable-selection-changed', 8584 { 8585 detail: { 8586 productId: this.productId, 8587 optionId: optionId, 8588 value: value, 8589 productIndex: this.productIndex, 8590 selectedValues: this.selectedValues, 8591 attributeCode: this.optionConfig.attributes[optionId]['code'], 8592 candidates: this.findProductIdsForPartialSelection(this.selectedValues), 8593 } 8594 } 8595 ) 8596 ); 8597 8598 /* =============================== disabled product option checking & remove START =============== */ 8599 if (!this.optionConfig?.ship_region_enabled 8600 && document.querySelector('.swatch-attribute .selectOptionColor') 8601 ) { 8602 var quickship_lebel_should_show; 8603 var quickship_active_color_option_exist = 0; 8604 setTimeout(() => { 8605 document.querySelectorAll('.swatch-attribute .selectOptionColor').forEach(function(option_box) { 8606 if (!option_box.querySelector('div, label')) { 8607 option_box.remove(); 8608 } 8609 }); 8610 8611 }, 300); 8612 } 8613 /* =============================== disabled product option checking & remove END =============== */ 8614 8615 /* ========== remove validation when click on available color start =============== */ 8616 if(document.querySelector('.normal_color_swatch_option .selectOptionColor') ){ 8617 setTimeout(() => { 8618 const colorBoxes = document.querySelectorAll( 8619 '.normal_color_swatch_option .selectOptionColor' 8620 ); 8621 var colorNotAvailable = 0; 8622 const colorerrorDiv = document.getElementById('normal-color-swatch-option-error-msg'); 8623
8624 colorBoxes.forEach((colorBox) => { 8625 if (colorBox.querySelector('.select_none label.checked')) { 8626 colorNotAvailable = 1; 8627 } 8628 }); 8629 if (!colorNotAvailable){ 8630 colorerrorDiv.textContent = ''; 8631 colorerrorDiv.style.display = 'none'; 8632 } 8633 8634 }, 300); 8635 } 8636 /* ========== remove validation when click on available color end =============== */ 8637 8638 /* =============================== color label show / hide if color option not showing END =============== */ 8639 8640 /* =============================== other label show / hide if the option not showing START =============== */ 8641 if (typeof this.syncOtherSwatchOptionVisibility === 'function') { 8642 this.syncOtherSwatchOptionVisibility(); 8643 } else { 8644 const swatchAttribute = document.querySelector('.swatch-attribute.other_swatch_option'); 8645 if (swatchAttribute) { 8646 setTimeout(() => { 8647 const selectOptionColors = swatchAttribute.querySelectorAll('.selectOptionColor'); 8648 if (selectOptionColors.length > 1) { 8649 swatchAttribute.style.display = 'block'; 8650 } else { 8651 swatchAttribute.style.display = 'none'; 8652 } 8653 }, 300); 8654 } 8655 } 8656 /* =============================== other label show / hide if the option not showing END =============== */ 8657 8658 }, 8659 calculateIsMinimalPrice() { 8660 return ( 8661 this.selectedValues.filter(value => !!value).length < 8662 Object.keys(this.optionConfig.attributes).length 8663 ); 8664 }, 8665 updatePrices() { 8666 const value = this.productIndex ? 8667 this.optionConfig.optionPrices[this.productIndex] : 8668 this.optionConfig.prices; 8669 8670 window.dispatchEvent( 8671 new CustomEvent( 8672 "update-prices-" + this.productId, 8673 { 8674 detail: Object.assign( 8675 value, 8676 { 8677 isMinimalPrice: this.calculateIsMinimalPrice(), 8678 calculatorType: this.optionConfig?.calculator_type?.[this.productIndex] ?? '', 8679 getIncstoresPimCoverage: this.optionConfig?.coverage_per_case?.[this.productIndex] ?? '', 8680 unitOfMeasure: this.optionConfig?.unit_of_measure?.[this.productIndex] ?? '', 8681 altUnitOfMeasure: this.optionConfig?.alt_unit_of_measure?.[this.productIndex] ?? 'sqft', 8682 availableQuantity: this.optionConfig?.available_quantity?.[this.productIndex] ?? '', 8683 } 8684 ) 8685 } 8686 ) 8687 ); 8688 setTimeout(() => { 8689 var calculatorType = this.optionConfig.calculator_type[this.productIndex]; 8690 var priceElement = document.querySelector('div.items-baseline .final-price .price'); 8691 8692 if (priceElement && calculatorType != 'none' && calculatorType != 'pre_cut_roll') { 8693 var customOptionPrice = priceElement.childNodes[0].nodeValue.trim(); 8694 let priceLabelElement = document.querySelector('.final-price .price-label'); 8695 var priceLabel = ""; 8696 8697 if (priceLabelElement) { 8698 priceLabel = priceLabelElement.textContent.trim(); 8699 } 8700 8701 document.querySelectorAll('.display-option-price').forEach(el => { 8702 el.textContent = "("+customOptionPrice+priceLabel+")"; 8703 }); 8704 } else if (calculatorType == 'none') { 8705 //None type 8706 var priceElement = document.querySelector('.none .final-price .price'); 8707 var customOptionPrice = ""; 8708 8709 if (priceElement) { 8710 customOptionPrice = priceElement.childNodes[0].nodeValue.trim(); 8711 } 8712 document.querySelectorAll('.display-option-price').forEach(el => { 8713 el.textContent = "("+customOptionPrice+")"; 8714 }); 8715 } else if (calculatorType == 'pre_cut_roll') { 8716 let priceLabelElement = document.querySelector('.final-price .price-label'); 8717 var priceLabel = ""; 8718 8719 if (priceLabelElement) { 8720 priceLabel = priceLabelElement.textContent.trim(); 8721 } 8722 var priceElement = document.querySelector('.pre_cut_roll .final-price .price'); 8723 var customOptionPrice = ""; 8724 8725 if (priceElement) { 8726 customOptionPrice = priceElement.childNodes[0].nodeValue.trim(); 8727 } 8728 document.querySelectorAll('.display-option-price').forEach(el => { 8729 el.textContent = "("+customOptionPrice+priceLabel+")"; 8730 }); 8731 } 8732 }, "500"); 8733 }, 8734 updateTileSizeArea() { 8735 const overage_percent = this.optionConfig.overage_percent[this.productIndex]; 8736 const coverage_per_case = this.optionConfig.coverage_per_case[this.productIndex]; 8737 const exact_width = this.optionConfig.exact_width[this.productIndex]; 8738 const exact_length = this.optionConfig.exact_length[this.productIndex]; 8739 window.dispatchEvent( 8740 new CustomEvent( 8741 "update-tile-size-area-" + this.productId, 8742 { 8743 detail: { 8744 overage_percent: overage_percent, 8745 coverage_per_case: coverage_per_case, 8746 exact_width: exact_width, 8747 exact_length: exact_length, 8748 calculator_type: this.optionConfig.calculator_type[this.productIndex], 8749 } 8750 } 8751 ) 8752 ); 8753 }, 8754 updateExactWidth() { 8755 const exact_width = this.optionConfig.exact_width[this.productIndex]; 8756 window.dispatchEvent( 8757 new CustomEvent( 8758 "update-exact-width-" + this.productId, 8759 {detail: exact_width} 8760 ) 8761 ); 8762 }, 8763 updateExactLength() { 8764 const exact_length = this.optionConfig.exact_length[this.productIndex]; 8765 window.dispatchEvent( 8766 new CustomEvent(
8767 "update-exact-length-" + this.productId, 8768 {detail: exact_length} 8769 ) 8770 ); 8771 }, 8772 updateExactHeight() { 8773 const exact_height = this.optionConfig.exact_height[this.productIndex]; 8774 window.dispatchEvent( 8775 new CustomEvent( 8776 "update-exact-height-" + this.productId, 8777 {detail: exact_height} 8778 ) 8779 ); 8780 }, 8781 updateCoveragePerCase() { 8782 const coverage_per_case = this.optionConfig.coverage_per_case[this.productIndex]; 8783 //const tile_size_area = ""; 8784 window.dispatchEvent( 8785 new CustomEvent( 8786 "update-coverage-per-case-" + this.productId, 8787 {detail: coverage_per_case} 8788 ) 8789 ); 8790 }, 8791 updateTileMinQty() { 8792 const min_tile_quantity = this.optionConfig.min_tile_quantity[this.productIndex]; 8793 window.dispatchEvent( 8794 new CustomEvent( 8795 "update-min-tile-quantity-" + this.productId, 8796 {detail: min_tile_quantity} 8797 ) 8798 ); 8799 }, 8800 getAttributeIdByCode(attributeCode) { 8801 let attributes = this.optionConfig.attributes; 8802 8803 for (let id in attributes) { 8804 if (attributes[id].code === attributeCode) { 8805 return id; 8806 } 8807 } 8808 8809 return null; 8810 }, 8811 updateCalculatorType() { 8812 const has_corner_border_center = this.optionConfig.has_corner_border_center[this.productIndex]; 8813 const calculator_type = this.optionConfig.calculator_type[this.productIndex]; 8814 if(calculator_type == 'sqft' && has_corner_border_center !=1){ 8815 var cbcelements = document.querySelectorAll('.cbc'); 8816 cbcelements.forEach(function(element) { 8817 element.style.display = 'none'; 8818 }); 8819 var noneelements = document.querySelectorAll('.none'); 8820 noneelements.forEach(function(element) { 8821 element.style.display = 'none'; 8822 }); 8823 var rollelements = document.querySelectorAll('.roll'); 8824 rollelements.forEach(function(element) { 8825 element.style.display = 'none'; 8826 }); 8827 var cbcelements = document.querySelectorAll('.case'); 8828 cbcelements.forEach(function(element) { 8829 element.style.display = 'none'; 8830 }); 8831 var elements = document.querySelectorAll('.sqft'); 8832 elements.forEach(function(element) { 8833 element.style.display = 'block'; 8834 }); 8835 8836 var elements = document.querySelectorAll('.pre_cut_roll'); 8837 elements.forEach(function(element) { 8838 element.style.display = 'none'; 8839 }); 8840 const button = document.getElementById("product-addtocart-button-fake"); 8841 if (button && button.getAttribute("data-flooring-handler") !== "addToCartClickVerify") { 8842 button.setAttribute("data-flooring-handler", "addToCartClickVerify"); 8843 } 8844 } else if(calculator_type == 'sqft' && has_corner_border_center ==1){ 8845 var sqftelements = document.querySelectorAll('.sqft'); 8846 sqftelements.forEach(function(element) { 8847 element.style.display = 'none'; 8848 }); 8849 var caseelements = document.querySelectorAll('.case'); 8850 caseelements.forEach(function(element) { 8851 element.style.display = 'none'; 8852 }); 8853 var rollelements = document.querySelectorAll('.roll');
8854 rollelements.forEach(function(element) { 8855 element.style.display = 'none'; 8856 }); 8857 var noneelements = document.querySelectorAll('.none'); 8858 noneelements.forEach(function(element) { 8859 element.style.display = 'none'; 8860 }); 8861 var elements = document.querySelectorAll('.cbc'); 8862 elements.forEach(function(element) { 8863 element.style.display = 'block'; 8864 }); 8865 var elements = document.querySelectorAll('.price-details .sqft'); 8866 elements.forEach(function(element) { 8867 element.style.display = 'none'; 8868 }); 8869 8870 var elements = document.querySelectorAll('.pre_cut_roll'); 8871 elements.forEach(function(element) { 8872 element.style.display = 'none'; 8873 }); 8874 const button = document.getElementById("product-addtocart-button-fake"); 8875 if (button && button.getAttribute("data-flooring-handler") !== "addToCartClickVerify") { 8876 button.setAttribute("data-flooring-handler", "addToCartClickVerify"); 8877 } 8878 }else if(calculator_type == 'case'){ 8879 var sqftelements = document.querySelectorAll('.sqft'); 8880 sqftelements.forEach(function(element) { 8881 element.style.display = 'none'; 8882 }); 8883 var cbcelements = document.querySelectorAll('.cbc'); 8884 cbcelements.forEach(function(element) { 8885 element.style.display = 'none'; 8886 }); 8887 var noneelements = document.querySelectorAll('.none'); 8888 noneelements.forEach(function(element) { 8889 element.style.display = 'none'; 8890 }); 8891 var rollelements = document.querySelectorAll('.roll'); 8892 rollelements.forEach(function(element) { 8893 element.style.display = 'none'; 8894 }); 8895 var elements = document.querySelectorAll('.case'); 8896 elements.forEach(function(element) { 8897 element.style.display = 'block'; 8898 }); 8899 8900 var elements = document.querySelectorAll('.pre_cut_roll'); 8901 elements.forEach(function(element) { 8902 element.style.display = 'none'; 8903 }); 8904 const button = document.getElementById("product-addtocart-button-fake"); 8905 if (button && button.getAttribute("data-flooring-handler") !== "addToCartClickVerify") { 8906 button.setAttribute("data-flooring-handler", "addToCartClickVerify"); 8907 } 8908 } else if(calculator_type == 'roll'){ 8909 var sqftelements = document.querySelectorAll('.sqft'); 8910 sqftelements.forEach(function(element) { 8911 element.style.display = 'none'; 8912 }); 8913 var cbcelements = document.querySelectorAll('.cbc'); 8914 cbcelements.forEach(function(element) { 8915 element.style.display = 'none'; 8916 }); 8917 var caseelements = document.querySelectorAll('.case'); 8918 caseelements.forEach(function(element) { 8919 element.style.display = 'none'; 8920 }); 8921 var noneelements = document.querySelectorAll('.none'); 8922 noneelements.forEach(function(element) { 8923 element.style.display = 'none'; 8924 }); 8925 var elements = document.querySelectorAll('.roll'); 8926 elements.forEach(function(element) { 8927 element.style.display = 'block'; 8928 }); 8929 const button = document.getElementById("product-addtocart-button-fake"); 8930 if (button && button.getAttribute("data-flooring-handler") !== "addToCartClickVerify") { 8931 button.setAttribute("data-flooring-handler", "addToCartClickVerify"); 8932 } 8933 8934 var elements = document.querySelectorAll('.pre_cut_roll');
8935 elements.forEach(function(element) { 8936 element.style.display = 'none'; 8937 }); 8938 } else if(calculator_type == 'pre_cut_roll'){ 8939 var sqftelements = document.querySelectorAll('.sqft'); 8940 sqftelements.forEach(function(element) { 8941 element.style.display = 'none'; 8942 }); 8943 var cbcelements = document.querySelectorAll('.cbc'); 8944 cbcelements.forEach(function(element) { 8945 element.style.display = 'none'; 8946 }); 8947 var caseelements = document.querySelectorAll('.case'); 8948 caseelements.forEach(function(element) { 8949 element.style.display = 'none'; 8950 }); 8951 var noneelements = document.querySelectorAll('.none'); 8952 noneelements.forEach(function(element) { 8953 element.style.display = 'none'; 8954 }); 8955 var elements = document.querySelectorAll('.roll'); 8956 elements.forEach(function(element) { 8957 element.style.display = 'none'; 8958 }); 8959 var elements = document.querySelectorAll('.pre_cut_roll'); 8960 elements.forEach(function(element) { 8961 element.style.display = 'block'; 8962 }); 8963 const button = document.getElementById("product-addtocart-button-fake"); 8964 if (button && button.getAttribute("data-flooring-handler") !== "addToCartClickforPreCutRoll") { 8965 button.setAttribute("data-flooring-handler", "addToCartClickforPreCutRoll"); 8966 } 8967 } else { 8968 var sqftelements = document.querySelectorAll('.sqft'); 8969 sqftelements.forEach(function(element) { 8970 element.style.display = 'none'; 8971 }); 8972 var cbcelements = document.querySelectorAll('.cbc'); 8973 cbcelements.forEach(function(element) { 8974 element.style.display = 'none'; 8975 }); 8976 var caseelements = document.querySelectorAll('.case'); 8977 caseelements.forEach(function(element) { 8978 element.style.display = 'none'; 8979 }); 8980 var rollelements = document.querySelectorAll('.roll'); 8981 rollelements.forEach(function(element) { 8982 element.style.display = 'none'; 8983 }); 8984 var cbcelements = document.querySelectorAll('.case'); 8985 cbcelements.forEach(function(element) { 8986 element.style.display = 'none'; 8987 }); 8988 var elements = document.querySelectorAll('.none'); 8989 elements.forEach(function(element) { 8990 element.style.display = 'block'; 8991 }); 8992 const noneButton = document.getElementById("product-addtocart-button-fake"); 8993 if (noneButton && noneButton.getAttribute("data-flooring-handler") !== "addToCartClickforNone") { 8994 noneButton.setAttribute("data-flooring-handler", "addToCartClickforNone"); 8995 } 8996 8997 var elements = document.querySelectorAll('.pre_cut_roll'); 8998 elements.forEach(function(element) { 8999 element.style.display = 'none'; 9000 }); 9001 } 9002 }, 9003 updateMinRollcut() { 9004 const min_rollcut = this.optionConfig.min_rollcut[this.productIndex]; 9005 var exactlength = ''; 9006 window.dispatchEvent( 9007 new CustomEvent( 9008 "update-min-rollcut-" + this.productId, 9009 {detail: min_rollcut} 9010 ) 9011 ); 9012 }, 9013 9014 updateMaxRollLengthRestriction() { 9015 const max_roll_length_restriction = this.optionConfig.max_roll_length_restriction[this.productIndex]; 9016 const exact_width = this.optionConfig.exact_width[this.productIndex]; 9017 const exact_length = this.optionConfig.exact_length[this.productIndex]; 9018 const min_rollcut = this.optionConfig.min_rollcut[this.productIndex]; 9019 9020 window.dispatchEvent( 9021 new CustomEvent( 9022 "update-max-roll-length-restriction-" + this.productId, 9023 { 9024 detail: { 9025 max_roll_length_restriction: max_roll_length_restriction, 9026 min_rollcut: min_rollcut, 9027 exact_width: exact_width, 9028 exact_length: exact_length, 9029 } 9030 } 9031 ) 9032 ); 9033 }, 9034 updateShippingDetails() { 9035 const pdp_shipping_text = this.optionConfig.pdp_shipping_text[this.productIndex]; 9036 const expected_days_ship = this.optionConfig.expected_days_ship[this.productIndex]; 9037 window.dispatchEvent( 9038 new CustomEvent( 9039 "update-shipping-details-" + this.productId, 9040 { 9041 detail: { 9042 pdp_shipping_text: pdp_shipping_text, 9043 expected_days_ship: expected_days_ship, 9044 } 9045 } 9046 ) 9047 ); 9048 }, 9049 updateGallery () { 9050 if (this.isLoadedFirst && this.ssrGalleryChildId > 0) { 9051 return; 9052 } 9053 9054 if (this.productIndex) { 9055 const images = this.optionConfig.images[this.productIndex]; 9056 images && window.dispatchEvent(new CustomEvent( 9057 "update-gallery", 9058 { detail: this.sortImagesByPosition(images) } 9059 )); 9060 } else { 9061 window.dispatchEvent(new Event("reset-gallery")); 9062 } 9063 }, 9064 updateSquareFootage () { 9065 let squareFootageElement = document.getElementsByName('square_footage'); 9066 9067 if (squareFootageElement.length > 0) { 9068 var squareFootage = squareFootageElement[0].value; 9069 9070 if (squareFootage) { 9071 // Trigger the 'keyup' event 9072 var event = new KeyboardEvent('keyup', { 9073 'key': 'Enter', // You can set this to any key, like 'Enter' 9074 'bubbles': true, 9075 'cancelable': true 9076 }); 9077 9078 squareFootageElement[0].dispatchEvent(event); 9079 } 9080 } 9081 }, 9082 sortImagesByPosition(images) { 9083 return images.sort((x, y) => { 9084 return x.position === y.position ? 0 : (parseInt(x.position) > parseInt(y.position) ? 1 : -1) 9085 }); 9086 }, 9087 onGetCartData(data) { 9088 this.preselectCartItems(data); 9089 this.preselectQuerystringItems(); 9090 this.preselectLocationHashItems(); 9091 }, 9092 preselectCartItems(data) { 9093 // pre-select options based on cart data for current (quote) itemId 9094 const cart = data && data.cart; 9095 if (cart && cart.items) { 9096 const cartItem = cart.items.find((item) => { 9097 return ( 9098 item.item_id === this.itemId 9099 && item.product_id === this.productId 9100 ) 9101 }); 9102 if (cartItem && cartItem.options && cartItem.options.length) { 9103 cartItem.options.map(option => { 9104 this.changeOption(option.option_id, option.option_value); 9105 }) 9106 } 9107 } 9108 }, 9109 preselectQuerystringItems() { 9110 // pre-select option like ?size=167 9111 const urlQueryParams = new URLSearchParams(window.location.search.replace('?','')); 9112 Object.values(this.optionConfig.attributes).map(attribute => { 9113 urlQueryParams.get(attribute.code) && 9114 this.changeOption(attribute.id, urlQueryParams.get(attribute.code)); 9115 }); 9116 }, 9117 preselectLocationHashItems() { 9118 // pre-select option like #144=167 9119 const urlHashParams = new URLSearchParams(window.location.hash.replace('#','')); 9120 Object.values(this.optionConfig.attributes).map(attribute => { 9121 urlHashParams.get(attribute.id) && 9122 this.changeOption(attribute.id, urlHashParams.get(attribute.id)); 9123 }); 9124 } 9125 } 9126 } 9127 9128 function isOptionVisible(element) { 9129 const computedStyle = window.getComputedStyle(element); 9130 return computedStyle.display !== 'none' && computedStyle.visibility !== 'hidden'; 9131 } 9132</script>
vendor: 1 bytes, line 9132
9132
9133<script> 9134 function initCompareOnProductList() { 9135 return { 9136 addToCompare(productId) { 9137 const formKey = hyva.getFormKey(); 9138 const postUrl = BASE_URL + 'catalog/product_compare/add/'; 9139 9140 fetch(postUrl, { 9141 "headers": { 9142 "content-type": "application/x-www-form-urlencoded; charset=UTF-8", 9143 }, 9144 "body": "form_key=" + formKey + "&product=" + productId + "&uenc=" + hyva.getUenc(), 9145 "method": "POST", 9146 "mode": "cors", 9147 "credentials": "include" 9148 }).then(function (response) { 9149 if (response.redirected) { 9150 window.location.href = response.url; 9151 } 9152 }).catch(function (error) { 9153 typeof window.dispatchMessages !== "undefined" && window.dispatchMessages( 9154 [{ 9155 type: "error", 9156 text: error 9157 }], 5000 9158 ); 9159 }); 9160 } 9161 }; 9162 } 9163</script>
vendor: 1 bytes, line 9163
9163
9164<script> 9165 function initWishlist() { 9166 return { 9167 addToWishlist(productId) { 9168 const formKey = hyva.getFormKey(); 9169 const postUrl = BASE_URL + 'wishlist/index/add/'; 9170 9171 fetch(postUrl, { 9172 "headers": { 9173 "content-type": "application/x-www-form-urlencoded; charset=UTF-8", 9174 }, 9175 "body": "form_key=" + formKey + "&product=" + productId + "&uenc=" + hyva.getUenc(), 9176 "method": "POST", 9177 "mode": "cors", 9178 "credentials": "include" 9179 }).then(function (response) { 9180 if (response.redirected) { 9181 window.location.href = response.url; 9182 } else if (response.ok) { 9183 return response.json(); 9184 } else { 9185 typeof window.dispatchMessages !== "undefined" && window.dispatchMessages( 9186 [{ 9187 type: "warning", 9188 text: "Could not add item to wishlist." 9189 }], 5000 9190 ); 9191 } 9192 }).then(function (response) { 9193 if (!response) { return } 9194 typeof window.dispatchMessages !== "undefined" && window.dispatchMessages( 9195 [{ 9196 type: (response.success) ? "success" : "error", 9197 text: (response.success) 9198 ? "Product has been added to your Wish List." 9199 : response.error_message 9200 }], 5000 9201 ); 9202 const reloadCustomerDataEvent = new CustomEvent("reload-customer-section-data"); 9203 window.dispatchEvent(reloadCustomerDataEvent); 9204 }).catch(function (error) { 9205 typeof window.dispatchMessages !== "undefined" && window.dispatchMessages( 9206 [{ 9207 type: "error", 9208 text: error 9209 }], 5000 9210 ); 9211 }); 9212 } 9213 } 9214 } 9215</script>
vendor: 1 bytes, line 9215
9215
9216<script> 9217 function initSwatchOptions(swatchConfig, swatchLabelValues = null) { 9218 const normalizedSwatchLabelValues = ( 9219 swatchLabelValues 9220 && typeof swatchLabelValues === 'object' 9221 && !Array.isArray(swatchLabelValues) 9222 ) ? swatchLabelValues : {}; 9223 9224 return { 9225 swatchConfig, 9226 swatchLabelValues: normalizedSwatchLabelValues, 9227 resolveSwatchLabel(attributeId, optionId) { 9228 if (optionId === undefined || optionId === null || optionId === '') { 9229 return ''; 9230 } 9231 9232 const optionKey = String(optionId); 9233 const labels = ( 9234 this.swatchLabelValues 9235 && typeof this.swatchLabelValues === 'object' 9236 && !Array.isArray(this.swatchLabelValues) 9237 ) ? this.swatchLabelValues : {}; 9238 const flatLabel = labels[optionKey] ?? labels[optionId]; 9239 if (flatLabel !== undefined && flatLabel !== null && flatLabel !== '') { 9240 return String(flatLabel); 9241 } 9242 9243 const attrConfig = this.swatchConfig?.[attributeId] ?? this.swatchConfig?.[String(attributeId)]; 9244 const attrLabels = attrConfig?.swatchLabelValues; 9245 if (attrLabels) { 9246 const attrLabel = attrLabels[optionKey] ?? attrLabels[optionId]; 9247 if (attrLabel !== undefined && attrLabel !== null && attrLabel !== '') { 9248 return String(attrLabel); 9249 } 9250 } 9251 9252 const swatchOption = attrConfig?.[optionKey] ?? attrConfig?.[optionId]; 9253 if (swatchOption?.label) { 9254 return String(swatchOption.label); 9255 } 9256 9257 return this.getOptionLabelFromOptionConfig(attributeId, optionId) || ''; 9258 }, 9259 getAttributeSwatchData(attributeId) { 9260 const attributeKey = String(attributeId); 9261 const rawConfig = this.swatchConfig?.[attributeId] ?? this.swatchConfig?.[attributeKey]; 9262 const labels = ( 9263 this.swatchLabelValues 9264 && typeof this.swatchLabelValues === 'object' 9265 && !Array.isArray(this.swatchLabelValues) 9266 ) ? this.swatchLabelValues : {}; 9267 if (!rawConfig) { 9268 return {details: {}, swatchLabelValues: labels}; 9269 } 9270 const swatchConfig = Object.assign({}, rawConfig); 9271 if (swatchConfig['additional_data']) { 9272 try { 9273 swatchConfig['details'] = JSON.parse(swatchConfig['additional_data']); 9274 } catch (error) { 9275 swatchConfig['details'] = {}; 9276 } 9277 } else { 9278 swatchConfig['details'] = swatchConfig['details'] ?? {}; 9279 } 9280 swatchConfig['swatchLabelValues'] = labels; 9281 9282 return swatchConfig; 9283 }, 9284 getAllAttributeOptions(attributeId) { 9285 return ( 9286 this.optionConfig.attributes[attributeId] && 9287 this.optionConfig.attributes[attributeId].options 9288 ) || [] 9289 }, 9290 optionIsActive(attributeId, optionId) { 9291 const optionKey = String(optionId); 9292 return !!this.getAllowedAttributeOptions(attributeId).find( 9293 option => String(option.id) === optionKey 9294 ); 9295 }, 9296 optionIsEnabled(attributeId, optionId) { 9297 const attributeKey = String(attributeId); 9298 const optionKey = String(optionId); 9299 const index = this.optionConfig?.index || {}; 9300 for (const productId in index) { 9301 const productOptions = index[productId] || {}; 9302 if ( 9303 String(productOptions[attributeKey]) === optionKey 9304 || String(productOptions[attributeId]) === optionKey 9305 ) { 9306 return true; 9307 } 9308 } 9309 const attributeOptions = ( 9310 this.optionConfig?.attributes?.[attributeId]?.options 9311 || this.optionConfig?.attributes?.[attributeKey]?.options 9312 || [] 9313 ); 9314 const match = attributeOptions.find((option) => String(option.id) === optionKey); 9315 if (!match?.products?.length) { 9316 return false;
9317 } 9318 return match.products.some((childId) => { 9319 const key = String(childId); 9320 return Object.prototype.hasOwnProperty.call(index, key) 9321 || Object.prototype.hasOwnProperty.call(index, childId); 9322 }); 9323 }, 9324 mapSwatchTypeNumberToTypeCode(typeNumber) { 9325 switch ("" + typeNumber) { 9326 case "1": 9327 return "color" 9328 case "2": 9329 return "image" 9330 case "3": 9331 return "empty" 9332 case "0": 9333 default: 9334 return "text" 9335 } 9336 }, 9337 getTypeOfFirstOption(attributeId) { 9338 for (const optionId in this.swatchConfig[attributeId]) { 9339 const option = this.swatchConfig[attributeId][optionId]; 9340 if (typeof option.type !== 'undefined') { 9341 return this.mapSwatchTypeNumberToTypeCode(option.type); 9342 } 9343 } 9344 }, 9345 getVisualSwatchType(attributeId, targetOptionId) { 9346 // If a type configuration is present for the given option id, use it 9347 const config = this.swatchConfig[attributeId]; 9348 if (config[targetOptionId] && typeof config[targetOptionId].type !== 'undefined') { 9349 return this.mapSwatchTypeNumberToTypeCode(config[targetOptionId].type); 9350 } 9351 9352 // Otherwise - if no config is present for the target option - use the type of the first option 9353 // with a type property from the attribute, thus assuming its the same type as the target option. 9354 // (This edge case condition can occur on single swatch products if some options are not salable) 9355 return this.getTypeOfFirstOption(attributeId); 9356 }, 9357 getSwatchType(attributeId, optionId) { 9358 // Deserialize the attribute details the first time they are used 9359 if (this.swatchConfig[attributeId] && ! this.swatchConfig[attributeId].details) { 9360 this.swatchConfig[attributeId] = this.getAttributeSwatchData(attributeId); 9361 } 9362 const type = this.swatchConfig[attributeId] && 9363 this.swatchConfig[attributeId].details && 9364 this.swatchConfig[attributeId].details.swatch_input_type || 9365 "empty"; 9366 return type === 'visual' ? this.getVisualSwatchType(attributeId, optionId) : type; 9367 }, 9368 isTextSwatch(attributeId, optionId) { 9369 return this.getSwatchType(attributeId, optionId) === 'text'; 9370 }, 9371 isVisualSwatch(attributeId, optionId) { 9372 const type = this.getSwatchType(attributeId, optionId); 9373 9374 return ['image', 'color'].includes(type); 9375 }, 9376 getSwatchBackgroundStyle(attributeId, optionId) { 9377 const config = this.getSwatchConfig(attributeId, optionId); 9378 const type = this.getSwatchType(attributeId, optionId); 9379 9380 if (type === "color") { 9381 return 'background-color:' + config.value; 9382 } else if (type === "image") { 9383 return "background: #ffffff url('" + config.value + "') no-repeat center"; 9384 } else { 9385 return ''; 9386 } 9387 }, 9388 getSwatchText(attributeId, optionId) { 9389 return this.resolveSwatchLabel(attributeId, optionId); 9390 }, 9391 getLegacyColorSwatchImageHtml(attributeId, optionId) { 9392 const map = this._legacyColorSwatchImages || {}; 9393 return this.getSwatchTextUrl(attributeId, optionId, map); 9394 }, 9395 getSwatchTextUrl(attributeId, optionId, childSwatch) { 9396 const config = this.getSwatchConfig(attributeId, optionId); 9397 const optionKey = String(optionId); 9398 const swatchMap = ( 9399 childSwatch 9400 && typeof childSwatch === 'object' 9401 && !Array.isArray(childSwatch) 9402 ) ? childSwatch : {}; 9403 const swatchUrl = swatchMap[optionKey] ?? swatchMap[optionId]; 9404 if(swatchUrl != "" && swatchUrl != null && isValidURL(swatchUrl)){ 9405 return "<img loading='lazy' src="+swatchUrl+" title="+swatchUrl+" alt="+swatchUrl+"/>"; 9406 } else if(config && config.value!="" && config.value!= null && isValidURL(config.value)){ 9407 return "<img loading='lazy' src="+config.value+" title="+config.value+" alt="+config.value+"/>"; 9408 } else { 9409 var placeHoldernew = BASE_URL+'media/catalog/product/placeholder/default/swatch_placeholder.png'; 9410 9411 return "<img width= '60px' height='60px' src="+placeHoldernew+" title="+placeHoldernew+" alt="+placeHoldernew+"/>"; 9412 } 9413 }, 9414 getOptionLabelFromOptionConfig(attributeId, optionId) { 9415 const optionKey = String(optionId); 9416 const option = this.getAllAttributeOptions(attributeId).find( 9417 (entry) => String(entry.id) === optionKey 9418 ); 9419 return option?.label || ''; 9420 }, 9421 getSwatchConfig(attributeId, optionId) { 9422 const attrConfig = this.swatchConfig[attributeId] ?? this.swatchConfig[String(attributeId)]; 9423 if (!attrConfig) { 9424 return false;
9425 } 9426 return attrConfig[optionId] ?? attrConfig[String(optionId)] ?? false; 9427 }, 9428 activeTooltipItem: false, 9429 tooltipPositionElement: false, 9430 isTooltipVisible() { 9431 return this.activeTooltipItem && 9432 this.getSwatchConfig( 9433 this.activeTooltipItem.attribute, 9434 this.activeTooltipItem.item 9435 ); 9436 }, 9437 getTooltipImageStyle(attributeId, optionId) { 9438 const config = this.getSwatchConfig(attributeId, optionId); 9439 const type = this.getSwatchType(attributeId, optionId); 9440 9441 if (type === "color") { 9442 return 'background-color:' + config.value + '; width: 110px; height: 90px;'; 9443 } else if (type === "image") { 9444 return "background: #ffffff url('" + config.thumb + 9445 "') center center no-repeat; width: 110px; height: 90px;"; 9446 } else { 9447 return 'display:none'; 9448 } 9449 }, 9450 getTooltipPosition() { 9451 if (!this.tooltipPositionElement) { 9452 return ''; 9453 } 9454 const rect = this.tooltipPositionElement.getBoundingClientRect(); 9455 const elementWidth = rect.width; 9456 const elementHeight = rect.height; 9457 const container = document.querySelector('.swatch___render'); 9458 if (!container) { 9459 return ''; 9460 } 9461 const containerRect = container.getBoundingClientRect(); 9462 const topPosition = rect.top - containerRect.top + 10; 9463 const leftPosition = rect.left - containerRect.left; 9464 9465 return ` 9466 top: ${topPosition}px; 9467 left: ${leftPosition}px; 9468 `; 9469 }, 9470 getSwatchConfigLabel(attributeId, optionId) { 9471 const label = this.resolveSwatchLabel(attributeId, optionId); 9472 return label !== '' ? label : false; 9473 }, 9474 getTooltipLabel() { 9475 return this.getSwatchConfigLabel(this.activeTooltipItem.attribute, this.activeTooltipItem.item); 9476 //return this.getSwatchConfig(this.activeTooltipItem.attribute, this.activeTooltipItem.item).label 9477 }, 9478 focusedLabel: false, 9479 focusLabel(optionId) { 9480 this.focusedLabel = optionId; 9481 }, 9482 blurLabel() { 9483 this.focusedLabel = false; 9484 }, 9485 showSwatches: true, 9486 initShowSwatchesIntersect() { 9487 this.showSwatches = true; 9488 }, 9489 9490 quickShipValidation(attributeCode, attributeId, optionId){ 9491 if (optionId === undefined || optionId === null || optionId === '') { 9492 return 0; 9493 } 9494 var is_quick_ship_color = 0; 9495 var optionConfigObj = this.optionConfig; 9496 if (!optionConfigObj || typeof optionConfigObj !== 'object') { 9497 return 0; 9498 } 9499 if(attributeCode == 'incstores_pim_color_axis'){ 9500 var attributes = optionConfigObj.attributes; 9501 if (!attributes || !attributes[attributeId] || !attributes[attributeId]['options']) { 9502 return 0; 9503 } 9504 var quickShipColorIds = optionConfigObj.quick_ship_color_ids || []; 9505 if (quickShipColorIds.length) { 9506 return quickShipColorIds.some(function (id) { 9507 return String(id) === String(optionId); 9508 }) ? 1 : 0; 9509 } 9510 var quickShipMap = optionConfigObj.quick_ship; 9511 if (!quickShipMap) { 9512 return 0; 9513 } 9514 var attributes_options = attributes[attributeId]['options']; 9515 9516 attributes_options.forEach(function(option_details) { 9517 if(option_details['id'] == optionId){ 9518 option_details['products'].forEach(function(child_product_id) { 9519 if(quickShipMap[String(child_product_id)] == 1 || quickShipMap[child_product_id] == 1){ 9520 is_quick_ship_color = 1; 9521 return false;
9522 } 9523 }); 9524 } 9525 }); 9526 } 9527 return is_quick_ship_color; 9528 }, 9529 9530 hasQuickShipColorOptions(attributeCode, attributeId) { 9531 if (!this.optionConfig?.attributes?.[attributeId]?.options?.length) { 9532 return false; 9533 } 9534 if (this.selectedValues) { 9535 Object.keys(this.selectedValues).forEach(function (key) { 9536 void this.selectedValues[key]; 9537 }.bind(this)); 9538 } 9539 var colorIds = this.optionConfig.quick_ship_color_ids || []; 9540 var options = this.optionConfig.attributes[attributeId].options; 9541 for (var i = 0; i < options.length; i++) { 9542 var optionId = options[i].id; 9543 var isQuick = colorIds.length 9544 ? colorIds.some(function (id) { return String(id) === String(optionId); }) 9545 : (this.quickShipValidation(attributeCode, attributeId, optionId) === 1); 9546 if (!isQuick) { 9547 continue; 9548 } 9549 if (!this.optionIsEnabled(attributeId, optionId)) { 9550 continue; 9551 } 9552 if (!this.optionIsActive(attributeId, optionId)) { 9553 continue; 9554 } 9555 return true; 9556 } 9557 return false; 9558 }, 9559 9560 hasNormalColorOptions(attributeCode, attributeId) { 9561 if (!this.optionConfig?.attributes?.[attributeId]?.options?.length) { 9562 return false; 9563 } 9564 if (this.shipRegionZipActive && this.customerRegionCode) { 9565 return false; 9566 } 9567 var colorIds = this.optionConfig.quick_ship_color_ids || []; 9568 var options = this.optionConfig.attributes[attributeId].options; 9569 for (var i = 0; i < options.length; i++) { 9570 var optionId = options[i].id; 9571 var isQuick = colorIds.length 9572 ? colorIds.some(function (id) { return String(id) === String(optionId); }) 9573 : (this.quickShipValidation(attributeCode, attributeId, optionId) === 1); 9574 if (!isQuick) { 9575 if (!this.optionIsEnabled(attributeId, optionId)) { 9576 continue; 9577 } 9578 if (!this.optionIsActive(attributeId, optionId)) { 9579 continue; 9580 } 9581 return true; 9582 } 9583 } 9584 return false; 9585 }, 9586 9587 shouldShowQuickShipSection(attributeCode, attributeId) { 9588 if (this.shipRegionZipActive && this.customerRegionCode) { 9589 return false; 9590 } 9591 return this.hasQuickShipColorOptions(attributeCode, attributeId); 9592 }, 9593 9594 getOtherSwatchAttributeId(section = null) { 9595 const target = section || document.querySelector('.swatch-attribute.other_swatch_option'); 9596 if (!target || !this.optionConfig?.attributes) { 9597 return null; 9598 } 9599 for (const key in this.optionConfig.attributes) { 9600 const code = this.optionConfig.attributes[key]?.code;
9601 if (code && code !== 'incstores_pim_color_axis' && target.classList.contains(code)) { 9602 return parseInt(key, 10); 9603 } 9604 } 9605 for (const key in this.optionConfig.attributes) { 9606 const code = this.optionConfig.attributes[key]?.code; 9607 if (code && code !== 'incstores_pim_color_axis') { 9608 return parseInt(key, 10); 9609 } 9610 } 9611 return null; 9612 }, 9613 9614 /** 9615 * Count salable/enabled options only. Disabled Magento variants stay out of the UI. 9616 * Hide "Select An Option" when fewer than two enabled options remain. 9617 */ 9618 countEnabledOtherSwatchOptions(attrId) { 9619 if (!attrId) { 9620 return 0; 9621 } 9622 const options = this.optionConfig?.attributes?.[attrId]?.options || []; 9623 return options.filter((option) => this.optionIsEnabled(attrId, option.id)).length; 9624 }, 9625 9626 countVisibleOtherSwatchOptions() { 9627 return this.countEnabledOtherSwatchOptions(this.getOtherSwatchAttributeId()); 9628 }, 9629 9630 syncOtherSwatchOptionVisibility() { 9631 const sections = document.querySelectorAll('.swatch-attribute.other_swatch_option'); 9632 if (!sections.length) { 9633 return; 9634 } 9635 const self = this; 9636 const applyVisibility = () => { 9637 sections.forEach((variantSection) => { 9638 const attrId = self.getOtherSwatchAttributeId(variantSection); 9639 if (!attrId) { 9640 return; 9641 } 9642 const optionCount = self.countEnabledOtherSwatchOptions(attrId); 9643 const shouldShow = optionCount > 1; 9644 variantSection.classList.toggle('dcw-single-option-hidden', !shouldShow); 9645 // Theme CSS defaults other_swatch_option to display:none â force block/none. 9646 variantSection.style.setProperty( 9647 'display', 9648 shouldShow ? 'block' : 'none', 9649 'important' 9650 ); 9651 if (!shouldShow && optionCount === 1) { 9652 const options = self.optionConfig?.attributes?.[attrId]?.options || []; 9653 const enabledOption = options.find((option) => self.optionIsEnabled(attrId, option.id)); 9654 const optionId = enabledOption?.id; 9655 if (optionId !== undefined 9656 && String(self.selectedValues[attrId]) !== String(optionId) 9657 && typeof self.changeOption === 'function') { 9658 self.changeOption(attrId, optionId); 9659 } 9660 } 9661 }); 9662 }; 9663 applyVisibility(); 9664 window.setTimeout(applyVisibility, 300); 9665 }, 9666 9667 /** 9668 * After color selection only (including disabled colors): if current variant/option 9669 * is incompatible, auto-select the cheapest compatible one. Never run on variant clicks.
9670 */ 9671 autoSelectCompatibleOtherOption(colorAttrId) { 9672 if (!colorAttrId || !this.optionConfig?.attributes) { 9673 return; 9674 } 9675 const selectedColor = this.selectedValues[colorAttrId]; 9676 if (!selectedColor) { 9677 return; 9678 } 9679 9680 let otherAttrId = null; 9681 if (typeof this.getAttributeIdByCode === 'function') { 9682 otherAttrId = this.getAttributeIdByCode('incstores_pim_variant_axis') 9683 || this.getAttributeIdByCode('product_option'); 9684 } 9685 if (!otherAttrId) { 9686 const section = document.querySelector('.swatch-attribute.other_swatch_option'); 9687 otherAttrId = this.getOtherSwatchAttributeId(section); 9688 } 9689 if (!otherAttrId || !this.optionConfig.attributes[otherAttrId]) { 9690 return; 9691 } 9692 9693 const currentOther = this.selectedValues[otherAttrId]; 9694 const isCurrentCompatible = currentOther 9695 && typeof this.optionIsActive === 'function' 9696 && this.optionIsActive(otherAttrId, currentOther); 9697 9698 if (isCurrentCompatible) { 9699 return; 9700 } 9701 9702 const options = this.optionConfig.attributes[otherAttrId].options || []; 9703 let lowestPrice = null; 9704 let lowestOptionId = null; 9705 9706 options.forEach((option) => { 9707 if (typeof this.optionIsEnabled === 'function' 9708 && !this.optionIsEnabled(otherAttrId, option.id)) { 9709 return; 9710 } 9711 const productIds = option.products || []; 9712 productIds.forEach((productId) => { 9713 const product = this.optionConfig.index[productId] 9714 || this.optionConfig.index[String(productId)]; 9715 if (!product || String(product[colorAttrId]) !== String(selectedColor)) { 9716 return; 9717 } 9718 const priceData = this.optionConfig.optionPrices[productId] 9719 || this.optionConfig.optionPrices[String(productId)]; 9720 if (!priceData) { 9721 return; 9722 } 9723 const price = priceData.finalPrice.amount; 9724 if (lowestPrice === null || price < lowestPrice) { 9725 lowestPrice = price; 9726 lowestOptionId = option.id; 9727 } 9728 }); 9729 }); 9730 9731 if (lowestOptionId === null 9732 || String(this.selectedValues[otherAttrId]) === String(lowestOptionId)) { 9733 return; 9734 } 9735 9736 if (typeof this.changeOption === 'function') { 9737 this.changeOption(otherAttrId, lowestOptionId); 9738 return; 9739 } 9740 9741 const el = document.querySelector( 9742 'input[name="super_attribute[' + otherAttrId + ']"][value="' + lowestOptionId + '"]' 9743 ); 9744 if (el) { 9745 el.click(); 9746 } 9747 }, 9748 9749 /** 9750 * After variant / Select An Option change: if current color is unavailable, 9751 * auto-select the cheapest compatible color. Never run on color clicks. 9752 */ 9753 autoSelectCompatibleColorOption(otherAttrId) { 9754 if (!otherAttrId || !this.optionConfig?.attributes) { 9755 return; 9756 } 9757 const selectedOther = this.selectedValues[otherAttrId]; 9758 if (!selectedOther) { 9759 return; 9760 } 9761 9762 let colorAttrId = null; 9763 if (typeof this.getAttributeIdByCode === 'function') { 9764 colorAttrId = this.getAttributeIdByCode('incstores_pim_color_axis'); 9765 }
9766 if (!colorAttrId && typeof this.getShipRegionColorAttributeId === 'function') { 9767 colorAttrId = this.getShipRegionColorAttributeId(); 9768 } 9769 if (!colorAttrId || !this.optionConfig.attributes[colorAttrId]) { 9770 return; 9771 } 9772 9773 const currentColor = this.selectedValues[colorAttrId]; 9774 const isCurrentCompatible = currentColor 9775 && typeof this.optionIsActive === 'function' 9776 && this.optionIsActive(colorAttrId, currentColor); 9777 9778 if (isCurrentCompatible) { 9779 return; 9780 } 9781 9782 const options = this.optionConfig.attributes[colorAttrId].options || []; 9783 let lowestPrice = null; 9784 let lowestOptionId = null; 9785 9786 options.forEach((option) => { 9787 if (typeof this.optionIsEnabled === 'function' 9788 && !this.optionIsEnabled(colorAttrId, option.id)) { 9789 return; 9790 } 9791 const productIds = option.products || []; 9792 productIds.forEach((productId) => { 9793 const product = this.optionConfig.index[productId] 9794 || this.optionConfig.index[String(productId)]; 9795 if (!product || String(product[otherAttrId]) !== String(selectedOther)) { 9796 return; 9797 } 9798 const priceData = this.optionConfig.optionPrices[productId] 9799 || this.optionConfig.optionPrices[String(productId)]; 9800 if (!priceData) { 9801 return; 9802 } 9803 const price = priceData.finalPrice.amount; 9804 if (lowestPrice === null || price < lowestPrice) { 9805 lowestPrice = price; 9806 lowestOptionId = option.id; 9807 } 9808 }); 9809 }); 9810 9811 if (lowestOptionId === null 9812 || String(this.selectedValues[colorAttrId]) === String(lowestOptionId)) { 9813 return; 9814 } 9815 9816 if (typeof this.changeOption === 'function') { 9817 this.changeOption(colorAttrId, lowestOptionId); 9818 return; 9819 } 9820 9821 const el = document.querySelector( 9822 'input[name="super_attribute[' + colorAttrId + ']"][value="' + lowestOptionId + '"]' 9823 ); 9824 if (el) { 9825 el.click(); 9826 } 9827 }, 9828 9829 syncNormalColorSwatchQuickShipVisibility() { 9830 if (this.shipRegionZipActive && this.customerRegionCode) { 9831 return; 9832 } 9833 if (typeof this.quickShipValidation !== 'function') { 9834 if (typeof this.syncNormalColorSwatchSectionVisibility === 'function') { 9835 this.syncNormalColorSwatchSectionVisibility(); 9836 } 9837 return; 9838 } 9839 const self = this; 9840 document.querySelectorAll('.normal_color_swatch_option .selectOptionColor').forEach(function (el) { 9841 const input = el.querySelector('input.product-option-value-input[name^="super_attribute"]'); 9842 if (!input) { 9843 return; 9844 } 9845 const nameMatch = input.name.match(/super_attribute\[(\d+)\]/); 9846 if (!nameMatch) { 9847 return; 9848 } 9849 const attributeId = parseInt(nameMatch[1], 10); 9850 const optionId = input.value; 9851 const attributeCode = input.getAttribute('data-attributecode') || 'incstores_pim_color_axis'; 9852 if (self.quickShipValidation(attributeCode, attributeId, optionId) === 1) { 9853 el.classList.add('hidden'); 9854 el.style.display = 'none'; 9855 } else { 9856 el.classList.remove('hidden'); 9857 el.style.display = ''; 9858 } 9859 }); 9860 if (typeof this.syncNormalColorSwatchSectionVisibility === 'function') { 9861 this.syncNormalColorSwatchSectionVisibility(); 9862 } 9863 }, 9864 9865 getColorAttributeId() { 9866 if (typeof this.getAttributeIdByCode === 'function') { 9867 const id = this.getAttributeIdByCode('incstores_pim_color_axis'); 9868 return id ? parseInt(String(id), 10) : null; 9869 } 9870 if (!this.optionConfig?.attributes) { 9871 return null; 9872 } 9873 for (const key in this.optionConfig.attributes) { 9874 if (this.optionConfig.attributes[key]?.code === 'incstores_pim_color_axis') { 9875 return parseInt(key, 10); 9876 } 9877 } 9878 return null; 9879 }, 9880 9881 /** 9882 * Hide entire "Select A Color" block when every color is Quick Ship (or none left). 9883 */ 9884 syncNormalColorSwatchSectionVisibility() { 9885 const sections = document.querySelectorAll('.normal_color_swatch_option'); 9886 if (!sections.length) { 9887 return; 9888 } 9889 const colorAttrId = this.getColorAttributeId(); 9890 const shouldShow = colorAttrId 9891 && typeof this.hasNormalColorOptions === 'function' 9892 && this.hasNormalColorOptions('incstores_pim_color_axis', colorAttrId); 9893 9894 sections.forEach((section) => { 9895 if (!shouldShow) { 9896 section.classList.add('hidden'); 9897 section.style.setProperty('display', 'none', 'important'); 9898 } else { 9899 section.classList.remove('hidden', 'sr-only'); 9900 section.style.setProperty('display', 'block', 'important'); 9901 } 9902 }); 9903 } 9904 } 9905 } 9906 9907 function isValidURL(url) { 9908 // Regular expression for URL validation 9909 var pattern = /^(https?:\/\/)?([\w.]+)\.([a-z]{2,})(\/[\w\.-]*)*\/?$/i; 9910 return pattern.test(url); 9911} 9912</script>
vendor: 1 bytes, line 9912
9912
9913<script> 9914 'use strict'; 9915 9916 (function () { 9917 const modals = []; 9918 const excludedFromFocusTrapping = new Set(); 9919 9920 function trapFocusInNextModalWithOverlay() { 9921 for (let idx = modals.length -1; idx >= 0; idx--) { 9922 const nextOnStack = modals[idx]; 9923 const nextDialogElement = nextOnStack.instance.$refs[nextOnStack.name]; 9924 if (! isOverlayDisabled(nextDialogElement)) { 9925 hyva.trapFocus(nextDialogElement); 9926 break; 9927 } 9928 } 9929 } 9930 9931 function focusables(dialogElement) { 9932 const selector = 'button, [href], input, textarea, select, details, [tabindex]:not([tabindex="-1"])'; 9933 return Array.from(dialogElement.querySelectorAll(selector)) 9934 .filter(el => !el.hasAttribute('disabled')); 9935 } 9936 9937 function firstVisible(elements) { 9938 const a = Array.from(elements); 9939 for (let i = 0; i < a.length; i++) { 9940 if (a[i].offsetWidth || a[i].offsetHeight || a[i].getClientRects().length) return a[i]; 9941 } 9942 return null; 9943 } 9944 9945 function isInViewport(element) { 9946 const rect = element && element.getBoundingClientRect(); 9947 return rect && 9948 rect.top >= 0 && 9949 rect.left >= 0 && 9950 rect.right <= window.innerWidth && 9951 rect.bottom <= window.innerHeight; 9952 } 9953 9954 function setFocusAfterTransition(dialogElement, duration) { 9955 const nested = Array.from(dialogElement.querySelectorAll('[role="dialog"]')); 9956 const candidates = Array.from(dialogElement.querySelectorAll('[x-focus-first]')); 9957 next: for (let candidate of candidates) { 9958 for (let child of nested) { 9959 if (child.contains(candidate)) continue next; 9960 } 9961 setTimeout(() => candidate.focus(), 50); 9962 break; 9963 } 9964 window.setTimeout(() => { 9965 const focusElement = firstVisible(dialogElement.querySelectorAll('[x-focus-first]')) || 9966 focusables(dialogElement)[0] || 9967 null; 9968 focusElement && isInViewport(focusElement) && focusElement.focus(); 9969 }, Math.max(1, duration)); 9970 } 9971 9972 function determineTrigger($refs, dialog, trigger) { 9973 if (typeof trigger === 'undefined' && typeof dialog === 'object' && dialog.target instanceof HTMLElement) { 9974 return dialog.target; 9975 } 9976 if (typeof dialog === 'string' && typeof trigger === 'object' && trigger.target instanceof HTMLElement) { 9977 return trigger.target; 9978 } 9979 if (typeof trigger === 'string') { 9980 try { 9981 return $refs[trigger] || document.querySelector(trigger) 9982 } catch (e) {} 9983 } 9984 if (trigger instanceof Element) { 9985 return trigger; 9986 } 9987 9988 return null; 9989 } 9990 9991 function isOverlayDisabled(dialog) { 9992 return dialog && dialog.hasAttribute('x-no-overlay') 9993 } 9994 9995 function areRemainingModalsWithoutOverlay(modals) 9996 { 9997 const overflowDisabled = modals.map(modal => modal.instance.$refs[modal.name]).filter(isOverlayDisabled); 9998 9999 return overflowDisabled.length === modals.length; 10000 } 10001 10002 window.hyva.modal = function(options) { 10003 10004 const config = Object.assign({ 10005 dialog: 'dialog', duration: 300, transitionEnter: 'transition ease-out duration-300', 10006 transitionEnterStart: 'opacity-0', 10007 transitionEnterEnd: 'opacity-100', 10008 transitionLeave: 'transition ease-in duration-300', 10009 transitionLeaveStart: 'opacity-100', 10010 transitionLeaveEnd: 'opacity-0', 10011 }, options); 10012 let lastHide = 0; 10013 10014 return { 10015 opened: {}, 10016 show(dialog, trigger) { 10017 const focusTargetAfterHide = determineTrigger(this.$refs, dialog, trigger); 10018 const name = typeof dialog === 'string' ? dialog : config.dialog; 10019 const dialogElement = this.$refs[name]; 10020 if (! dialogElement) { 10021 return; 10022 } 10023 const useOverlay = ! dialogElement.hasAttribute('x-no-overlay'); 10024 10025 dialogElement.scrollTop = 0; 10026 10027 if (this.opened[name]) { 10028 return; 10029 } 10030 10031 if (focusTargetAfterHide) { 10032 focusTargetAfterHide.setAttribute('aria-expanded', 'true'); 10033 } 10034 10035 this.opened[name] = true; 10036 useOverlay && this.$nextTick(() => hyva.trapFocus(dialogElement)); 10037 setFocusAfterTransition(dialogElement, config.duration); 10038 10039 const frame = {name, instance: this, focusTarget: focu
10039sTargetAfterHide, time: Date.now()}; 10040 10041 modals.push(frame); 10042 if (useOverlay) { 10043 document.body.classList.add('overflow-hidden'); 10044 } 10045 return new Promise(resolve => frame.resolve = resolve); 10046 }, 10047 cancel() { 10048 this.hide(false); 10049 }, 10050 ok() { 10051 this.hide(true); 10052 }, 10053 hide(value) { 10054 if (Date.now() - lastHide < config.duration) { 10055 return; 10056 } 10057 lastHide = Date.now(); 10058 10059 const modal = modals.pop() || {}; 10060 const name = modal.name; 10061 this.opened[name] = false; 10062 hyva.releaseFocus(modal.instance.$refs[modal.name]) 10063 trapFocusInNextModalWithOverlay(); 10064 10065 const nextFocusAfterHide = modal.focusTarget; 10066 nextFocusAfterHide && setTimeout(() => { 10067 nextFocusAfterHide.setAttribute('aria-expanded', 'false'); 10068 nextFocusAfterHide.focus() 10069 }, config.duration); 10070 10071 if (modals.length === 0 || areRemainingModalsWithoutOverlay(modals)) { 10072 document.body.classList.remove('overflow-hidden'); 10073 } 10074 10075 modal.resolve(value); 10076 }, 10077 overlay(dialog) { 10078 const name = typeof dialog === 'string' ? dialog : config.dialog; 10079 return { 10080 ['x-show']() { 10081 return this.opened[name] 10082 }, 10083 ['x-transition:enter']: config.transitionEnter, 10084 ['x-transition:enter-start']: config.transitionEnterStart, 10085 ['x-transition:enter-end']: config.transitionEnterEnd, 10086 ['x-transition:leave']: config.transitionLeave, 10087 ['x-transition:leave-start']: config.transitionLeaveStart, 10088 ['x-transition:leave-end']: config.transitionLeaveEnd, 10089 ['@hyva-modal-show.window'](event) { 10090 event.detail && event.detail.dialog === name && this.show(name, event.detail.focusAfterHide) 10091 } 10092 }; 10093 } 10094 }; 10095 } 10096 10097 window.hyva.modal.peek = () => modals.length > 0 && modals[modals.length -1] 10098 10099 window.hyva.modal.pop = function () { 10100 if (modals.length > 0) { 10101 const modal = modals[modals.length -1]; 10102 modal.instance.hide(); 10103 } 10104 } 10105 10106 window.hyva.modal.excludeSelectorsFromFocusTrap = function (selectors) { 10107 typeof selectors === 'string' || selectors instanceof String 10108 ? excludedFromFocusTrapping.add(selectors) 10109 : selectors.map(selector => excludedFromFocusTrapping.add(selector)); 10110 } 10111 10112 window.hyva.modal.eventListeners = { 10113 keydown: event => { 10114 if (event.key === 'Escape') { 10115 window.hyva.modal.pop(); 10116 } 10117 }, 10118 click: event => { 10119 if (modals.length > 0) { 10120 const modal = modals[modals.length -1]; 10121 const dialog = modal.instance.$refs[modal.name]; 10122 if (modal.time + 50 < Date.now() && // if last click processing is more than 50ms ago 10123 ! isOverlayDisabled(dialog) && // if dialog has overlay 10124 ! dialog.contains(event.target)) { // if click is outside of dialog 10125 modal.instance.hide(); 10126 } 10127 } 10128 } 10129 }; 10130 10131 document.addEventListener('keydown', window.hyva.modal.eventListeners.keydown); 10132 10133 document.addEventListener('click', window.hyva.modal.eventListeners.click); 10134 })(); 10135</script>
vendor: 1 bytes, line 10135
10135
10136<script> 10137 'use strict'; 10138 10139 (() => { 10140 const equalizeButtonWidths = (buttons) => { 10141 const buttonList = buttons.querySelectorAll('[data-element="link"], [data-element="empty_link"]'); 10142 let buttonMinWidth = 0; 10143 10144 buttonList.forEach(button => { 10145 const buttonWidth = button.offsetWidth; 10146 10147 if (buttonWidth > buttonMinWidth) { 10148 buttonMinWidth = buttonWidth; 10149 } 10150 }); 10151 10152 buttonList.forEach(button => { 10153 button.style.minWidth = `${buttonMinWidth}px`; 10154 }); 10155 }; 10156 10157 window.addEventListener('DOMContentLoaded', () => { 10158 document.querySelectorAll('[data-content-type="buttons"][data-same-width="true"]').forEach(buttons => { 10159 equalizeButtonWidths(buttons); 10160 }); 10161 }); 10162 })(); 10163</script>
vendor: 1 bytes, line 10163
10163
10164<script> 10165 'use strict'; 10166 10167 (() => { 10168 const initCarousels = (elements) => { 10169 if (!Glider) { 10170 return; 10171 } 10172 10173 const initProductCarousel = (carousel) => { 10174 const gliderElement = carousel.querySelector('[data-role="glider-content"]'); 10175 10176 if (!gliderElement) { 10177 return; 10178 } 10179 10180 const gliderDots = carousel.querySelector('.glider-dots'); 10181 const gliderPrev = carousel.querySelector('.glider-prev'); 10182 const gliderNext = carousel.querySelector('.glider-next'); 10183 10184 const glider = new Glider(gliderElement, { 10185 slidesToShow: 1.2, 10186 slidesToScroll: 2, 10187 scrollLock: true, 10188 draggable: true, 10189 dragVelocity: 2.5, 10190 dots: gliderDots, 10191 arrows: { 10192 prev: gliderPrev, 10193 next: gliderNext, 10194 }, 10195 responsive: [ 10196 { 10197 breakpoint: 768, 10198 settings: { 10199 slidesToShow: 3, 10200 slidesToScroll: 3, 10201 } 10202 }, 10203 { 10204 breakpoint: 1024, 10205 settings: { 10206 slidesToShow: 4, 10207 slidesToScroll: 4, 10208 } 10209 }, 10210 { 10211 breakpoint: 1200, 10212 settings: { 10213 slidesToShow: 5, 10214 slidesToScroll: 5, 10215 } 10216 } 10217 ], 10218 }); 10219 10220 carousel.classList.remove('overflow-x-scroll'); 10221 gliderPrev.classList.remove('hidden'); 10222 gliderNext.classList.remove('hidden'); 10223 10224 if (carousel.dataset.autoplay !== 'false') { 10225 gliderAutoplay( 10226 glider, 10227 carousel.dataset.autoplaySpeed, 10228 carousel.dataset.infiniteLoop 10229 ); 10230 } 10231 }; 10232 10233 const initSliderCarousel = (slider) => { 10234 slider.innerHTML = `<div data-role="glider-content">${slider.innerHTML}</div>`; 10235 slider.classList.add('glider-contain'); 10236 10237 slider.insertAdjacentHTML( 10238 'beforeend', 10239 '\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
10239003D\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
10239003D\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' 10240 ); 10241 10242 const gliderElement = slider.querySelector('[data-role="glider-content"]'); 10243 const gliderDots = slider.querySelector('.glider-dots'); 10244 const gliderPrev = slider.querySelector('.glider-prev'); 10245 const gliderNext = slider.querySelector('.glider-next'); 10246 10247 const glider = new Glider(gliderElement, { 10248 slidesToShow: 1, 10249 slidesToScroll: 1, 10250 scrollLock: true, 10251 scrollLockDelay: 250, 10252 draggable: true, 10253 dragVelocity: 2.5, 10254 dots: gliderDots, 10255 arrows: { 10256 prev: gliderPrev, 10257 next: gliderNext, 10258 }, 10259 }); 10260 10261 slider.classList.add('glider-initialized'); 10262 if (slider.dataset.showArrows === 'true') { 10263 gliderPrev.classList.remove('hidden'); 10264 gliderNext.classList.remove('hidden'); 10265 } 10266 10267 if (slider.dataset.autoplay !== 'false') { 10268 gliderAutoplay( 10269 glider, 10270 slider.dataset.autoplaySpeed, 10271 slider.dataset.infiniteLoop 10272 ); 10273 } 10274 }; 10275 10276 const gliderAutoplay = (glider, milliseconds, loop) => { 10277 const pagesCount = glider.track.childElementCount; 10278 let slideTimeout = null; 10279 let nextIndex = 1; 10280 let paused = false; 10281 10282 const slide = () => { 10283 slideTimeout = setTimeout( 10284 () => { 10285 if (loop && nextIndex >= pagesCount) { 10286 nextIndex = 0; 10287 } 10288 glider.scrollItem(nextIndex); 10289 }, 10290 parseInt(milliseconds) 10291 ); 10292 }; 10293 10294 glider.ele.addEventListener('glider-animated', () => { 10295 nextIndex = glider.slide + glider.opt.slidesToScroll; 10296 window.clearInterval(slideTimeout); 10297 if (!paused && (loop || nextIndex < pagesCount)) { 10298 slide(); 10299 } 10300 }); 10301 10302 const pause = () => { 10303 if (!paused) { 10304 clearInterval(slideTimeout); 10305 paused = true; 10306 } 10307 }; 10308 10309 const unpause = () => { 10310 if (paused) { 10311 slide(); 10312 paused = false; 10313 } 10314 }; 10315 10316 glider.ele.parentElement.addEventListener('mouseover', pause, {passive: true}); 10317 glider.ele.parentElement.addEventListener('touchstart', pause, {passive: true}); 10318 glider.ele.parentElement.addEventListener('mouseout', unpause, {passive: true}); 10319 glider.ele.parentElement.addEventListener('touchend', unpause, {passive: true}); 10320 10321 slide(); 10322 }; 10323 10324 elements.forEach(element => { 10325 if (element.dataset.contentType === 'products') { 10326 initProductCarousel(element); 10327 } 10328 if (element.dataset.contentType === 'slider') { 10329 initSliderCarousel(element); 10330 } 10331 }); 10332 }; 10333 10334 window.addEventListener('DOMContentLoaded', () => { 10335 const carouselElements = document.querySelectorAll( 10336 `[data-content-type="products"][data-appearance="carousel"], 10337 [data-content-type="slider"]` 10338 ); 10339 10340 if (carouselElements.length > 0) { 10341 const script = document.createElement('script'); 10342 script.type = 'text/javascript'; 10343 10344 script.addEventListener('load', () => { 10345 initCarousels(carouselElements); 10346 }); 10347 10348 window.addEventListener('init-external-scripts', () => { 10349 script.src = 'https\u003A\u002F\u002Fwww.flooringinc.com\u002Fstatic\u002Fversion1789462004\u002Ffrontend\u002FDcw\u002Fhyvadesktop\u002Fen_US\u002FMagento_PageBuilder\u002Fjs\u002Fglider.min.js'; 10350 }, {once: true, passive: true}); 10351 document.head.appendChild(script); 10352 } 10353 }); 10354 })(); 10355</script>
vendor: 1 bytes, line 10355
10355
10356<script> 10357 'use strict'; 10358 10359 (() => { 10360 const initMaps = (elements) => { 10361 const renderMap = (element) => { 10362 const dataLocations = element.dataset.locations; 10363 10364 // Hide map if no locations set 10365 if (!dataLocations || dataLocations === '[]') { 10366 element.classList.add('hidden'); 10367 return; 10368 } 10369 10370 const map = new google.maps.Map( 10371 element, 10372 getMapOptions( 10373 element.dataset.showControls !== 'true', 10374 element.dataset.showControls === 'true' 10375 ) 10376 ); 10377 const locations = JSON.parse(dataLocations); 10378 const latitudeLongitudeBounds = new google.maps.LatLngBounds(); 10379 const bounds = []; 10380 10381 locations.forEach(location => { 10382 const position = { 10383 lat: parseFloat(location.position.latitude), 10384 lng: parseFloat(location.position.longitude), 10385 }; 10386 bounds.push(position); 10387 10388 const infowindow = new google.maps.InfoWindow({ 10389 content: getInfoWindowContent(location), 10390 }); 10391 const marker = new google.maps.Marker({ 10392 position: position, 10393 map, 10394 title: location.location_name, 10395 }); 10396 10397 marker.addListener('click', () => { 10398 infowindow.open(map, marker); 10399 }); 10400 }); 10401 10402 // Set bounds if multiple locations 10403 if (bounds.length > 1) { 10404 bounds.forEach(function (bound) { 10405 latitudeLongitudeBounds.extend(bound); 10406 }); 10407 map.fitBounds(latitudeLongitudeBounds); 10408 } 10409 10410 // Center if single location 10411 if (bounds.length === 1) { 10412 map.setCenter(bounds[0]); 10413 } 10414 }; 10415 10416 const getMapOptions = (disableDefaultUI, mapTypeControl) => { 10417 const style = ''; 10418 return { 10419 zoom: 8, 10420 scrollwheel: false, 10421 disableDoubleClickZoom: false, 10422 mapTypeControlOptions: { 10423 style: google.maps.MapTypeControlStyle.DEFAULT, 10424 }, 10425 styles: style ? JSON.parse(style) : [], 10426 disableDefaultUI: disableDefaultUI, 10427 mapTypeControl: mapTypeControl, 10428 }; 10429 }; 10430 10431 const getInfoWindowContent = (location) => { 10432 const title = location.location_name ? 10433 `<h3 class="text-2xl font-medium text-gray-900 title-font">${location.location_name}</h3>` : ''; 10434 const comment = location.comment ? `<p class="px-1 pt-3 text-primary">${location.comment}</p>` : ''; 10435 const phone = location.phone ? `<p class="px-1 pt-3 text-primary">Phone: ${location.phone}</p>` : ''; 10436 const street = location.address ? `${location.address}<br/>` : ''; 10437 const city = location.city ? `${location.city}<br/>` : ''; 10438 const state = location.state ? `${location.state}<br/>` : ''; 10439 const zipCode = location.zipcode ? `${location.zipcode}<br/>` : ''; 10440 const country = location.country ? location.country : ''; 10441 10442 return `<div> 10443 ${title} 10444 ${comment} 10445 ${phone} 10446 <p class="px-1 pt-3 text-primary"> 10447 ${street} 10448 ${city} 10449 ${state} 10450 ${zipCode} 10451 ${country} 10452 </p> 10453 </div>`; 10454 }; 10455 10456 const hideAllMaps = () => { 10457 document.querySelectorAll('[data-content-type="map"]').forEach(element => { 10458 element.classList.add('hidden'); 10459 }); 10460 }; 10461 10462 window.gm_authFailure = () => { 10463 hideAllMaps(); 10464 }; 10465 10466 if (typeof google.maps === 'undefined') { 10467 hideAllMaps(); 10468 return; 10469 } 10470
10471 elements.forEach(element => { 10472 if (element.dataset.contentType === 'map') { 10473 renderMap(element); 10474 } 10475 }); 10476 }; 10477 10478 window.addEventListener('DOMContentLoaded', () => { 10479 const mapElements = document.querySelectorAll('[data-content-type="map"]'); 10480 10481 if (mapElements.length > 0) { 10482 const script = document.createElement('script'); 10483 script.type = 'text/javascript'; 10484 10485 script.addEventListener('load', () => { 10486 initMaps(mapElements); 10487 }); 10488 10489 script.src = 'https\u003A\u002F\u002Fmaps.googleapis.com\u002Fmaps\u002Fapi\u002Fjs\u003Fv\u003D3\u0026key\u003D'; 10490 document.head.appendChild(script); 10491 } 10492 }); 10493 })(); 10494</script>
vendor: 1 bytes, line 10494
10494
10495<script> 10496 'use strict'; 10497 10498 (() => { 10499 const initParallaxImage = (element) => { 10500 if (!window.jarallax) { 10501 return; 10502 } 10503 10504 element.classList.add('jarallax'); 10505 element.dataset.jarallax = ''; 10506 const parallaxSpeed = parseFloat(element.dataset.parallaxSpeed) || 0.5; 10507 const elementStyle = window.getComputedStyle(element); 10508 10509 window.jarallax(element, { 10510 imgPosition: elementStyle.backgroundPosition || '50% 50%', 10511 imgRepeat: elementStyle.backgroundRepeat || 'no-repeat', 10512 imgSize: elementStyle.backgroundSize || 'cover', 10513 speed: parallaxSpeed, 10514 }); 10515 }; 10516 10517 const initVideoBackground = (element) => { 10518 if (!window.jarallax) { 10519 return; 10520 } 10521 10522 let slider = null; 10523 10524 if (element.classList.contains('pagebuilder-slide-wrapper')) { 10525 const viewportElement = document.createElement('div'); 10526 slider = element.closest('[data-content-type=slider]'); 10527 viewportElement.classList.add('jarallax-viewport-element'); 10528 element.dataset.elementInViewport = '.jarallax-viewport-element'; 10529 element.appendChild(viewportElement); 10530 } 10531 10532 element.classList.add('jarallax'); 10533 element.dataset.jarallax = ''; 10534 const parallaxSpeed = parseFloat(element.dataset.parallaxSpeed) || 0.5; 10535 10536 window.jarallax(element, { 10537 imgSrc: element.dataset.videoFallbackSrc, 10538 speed: parallaxSpeed, 10539 videoLoop: element.dataset.videoLoop, 10540 videoPlayOnlyVisible: element.dataset.videoPlayOnlyVisible, 10541 videoLazyLoading: element.dataset.videoLazyLoad, 10542 disableVideo: false, 10543 elementInViewport: element.dataset.elementInViewport && 10544 element.querySelector(element.dataset.elementInViewport), 10545 }); 10546 10547 if (slider) { 10548 if (slider.dataset.afterChangeIsSet) { 10549 return; 10550 } 10551 10552 slider.addEventListener('glider-loaded', () => { 10553 slider.querySelectorAll('.jarallax').forEach(videoSlide => { 10554 videoSlide.jarallax && videoSlide.jarallax.onScroll(); 10555 }); 10556 }); 10557 10558 slider.addEventListener('glider-animated', () => { 10559 slider.querySelectorAll('.jarallax').forEach(videoSlide => { 10560 videoSlide.jarallax && videoSlide.jarallax.onScroll(); 10561 }); 10562 }); 10563 10564 slider.dataset.afterChangeIsSet = true; 10565 } 10566 }; 10567 10568 window.addEventListener('DOMContentLoaded', () => { 10569 const parallaxImageElements = document.querySelectorAll( 10570 `[data-content-type="row"][data-background-type="image"][data-enable-parallax="1"], 10571 [data-content-type="row"] > [data-background-type="image"][data-enable-parallax="1"]` 10572 ); 10573 10574 const videoBackgroundsElements = document.querySelectorAll( 10575 `[data-content-type="row"][data-background-type="video"][data-enable-parallax="1"], 10576 [data-content-type="row"] > [data-background-type="video"][data-enable-parallax="1"], 10577 [data-content-type="banner"] [data-background-type="video"], 10578 [data-content-type="slide"] [data-background-type="video"]` 10579 ); 10580 10581 if (parallaxImageElements.length > 0 || videoBackgroundsElements.length > 0) { 10582 const jarallaxScript = document.createElement('script'); 10583 jarallaxScript.type = 'text/javascript'; 10584 10585 jarallaxScript.addEventListener('load', () => { 10586 parallaxImageElements.forEach(row => { 10587 initParallaxImage(row); 10588 }); 10589 10590 const jarallaxVideoScript = document.createElement('script'); 10591 jarallaxVideoScript.type = 'text/javascript'; 10592 10593 jarallaxVideoScript.addEventListener('load', () => {
10594 videoBackgroundsElements.forEach(element => { 10595 initVideoBackground(element); 10596 }); 10597 }); 10598 10599 jarallaxVideoScript.src = 'https\u003A\u002F\u002Fwww.flooringinc.com\u002Fstatic\u002Fversion1789462004\u002Ffrontend\u002FDcw\u002Fhyvadesktop\u002Fen_US\u002FMagento_PageBuilder\u002Fjs\u002Fjarallax\u002Dvideo.min.js'; 10600 document.head.appendChild(jarallaxVideoScript); 10601 }); 10602 10603 jarallaxScript.src = 'https\u003A\u002F\u002Fwww.flooringinc.com\u002Fstatic\u002Fversion1789462004\u002Ffrontend\u002FDcw\u002Fhyvadesktop\u002Fen_US\u002FMagento_PageBuilder\u002Fjs\u002Fjarallax.min.js'; 10604 document.head.appendChild(jarallaxScript); 10605 } 10606 }); 10607 })(); 10608</script>
vendor: 1 bytes, line 10608
10608
10609<script> 10610 'use strict'; 10611 10612 (() => { 10613 const applyShowOnHover = (element) => { 10614 const showOverlayOnHover = (element) => { 10615 const overlay = element.querySelector('.pagebuilder-overlay'); 10616 const color = overlay.dataset.overlayColor; 10617 10618 element.addEventListener('mouseover', () => { 10619 overlay.style.backgroundColor = color; 10620 }); 10621 element.addEventListener('mouseout', () => { 10622 overlay.style.backgroundColor = 'transparent'; 10623 }); 10624 }; 10625 10626 const showButtonOnHover = (element) => { 10627 const button = element.querySelector('.pagebuilder-banner-button'); 10628 10629 element.addEventListener('mouseover', () => { 10630 button.style.opacity = '1'; 10631 button.style.visibility = 'visible'; 10632 }); 10633 element.addEventListener('mouseout', () => { 10634 button.style.opacity = '0'; 10635 button.style.visibility = 'hidden'; 10636 }); 10637 }; 10638 10639 if (element.dataset.showOverlay === 'hover') { 10640 showOverlayOnHover(element); 10641 } 10642 if (element.dataset.showButton === 'hover') { 10643 showButtonOnHover(element); 10644 } 10645 }; 10646 10647 window.addEventListener('DOMContentLoaded', () => { 10648 document.querySelectorAll('[data-content-type="banner"],[data-content-type="slider"]').forEach(element => { 10649 applyShowOnHover(element); 10650 }); 10651 }); 10652 })(); 10653</script>
vendor: 1 bytes, line 10653
10653
10654<script> 10655 'use strict'; 10656 10657 (() => { 10658 document.querySelectorAll('[data-content-type="tab-item"]').forEach(tabItem => { 10659 tabItem.setAttribute('x-show', `tab === '${tabItem.id}'`); 10660 }); 10661 10662 document.querySelectorAll('[data-content-type="tabs"]').forEach(tab => { 10663 const defaultActiveTab = parseInt(tab.dataset.activeTab) || 0; 10664 10665 tab.querySelectorAll('.tab-header').forEach((tabHeader, index) => { 10666 const tabLink = tabHeader.querySelector('a'); 10667 const tabId = tabLink.getAttribute('href').replace('#', ''); 10668 10669 tabHeader.setAttribute(':class', `{ 'active': tab === '${tabId}' }`); 10670 tabLink.setAttribute('x-on:click.prevent', `tab = '${tabId}'`); 10671 10672 if (index === defaultActiveTab) { 10673 tab.setAttribute('x-data', `{ tab: '${tabId}' }`); 10674 } 10675 }); 10676 }); 10677 })(); 10678</script>
vendor: 1 bytes, line 10678
10678
10679<script> 10680 'use strict'; 10681 10682 const grecaptchaV2LoadCallbacks = []; 10683 10684 function executeRecaptchaLoadCallbacks () { 10685 while (window.grecaptcha && grecaptchaV2LoadCallbacks.length > 0) { 10686 const callback = grecaptchaV2LoadCallbacks.pop(); 10687 typeof callback === 'string' ? window[callback]() : callback(); 10688 } 10689 } 10690 10691 (function() { 10692 const loadRecaptchaScript = (event) => { 10693 10694 if (window.grecaptcha || !event.target.form) { 10695 return; 10696 } 10697 10698 const url = 'https://www.google.com/recaptcha/api.js?onload=executeRecaptchaLoadCallbacks'; 10699 const siteKey = '6LdQFsgqAAAAAFaiT_SQ7C9UmCcxWxpMd6pIMAEO'; 10700 const script = document.createElement('script'); 10701 script.type = 'text/javascript'; 10702 script.src = siteKey ? `${url}&render=${siteKey}` : `${url}&render=explicit`; 10703 script.async = true; 10704 document.head.appendChild(script); 10705 10706 script.addEventListener('load', () => { 10707 Array.from(document.querySelectorAll('button[data-recaptcha-btn]:disabled')).forEach(btn => btn.removeAttribute('disabled')); 10708 }); 10709 } 10710 10711 window.forceLoadRecaptchaScript = (form) => { 10712 loadRecaptchaScript({target: {form: form || 'dummy'}}); 10713 executeRecaptchaLoadCallbacks(); 10714 }; 10715 10716 document.body.addEventListener('input', loadRecaptchaScript, { once: true }); 10717 document.body.addEventListener('focus', loadRecaptchaScript, { once: true }); 10718 10719 }()); 10720 10721</script>
vendor: 1 bytes, line 10721
10721
10722<script> 10723 window.addEventListener("scroll", function() { 10724 var header = document.querySelector('header.page-header'); 10725 var body = document.querySelector("body"); 10726 const header_top = document.querySelector('.header_top'); 10727 const notification4 = document.querySelector('.notification4'); 10728 var top_1 = document.querySelector("header.page-header > .panel.wrapper"); 10729 var content = document.getElementById("textContent"); 10730 10731 10732 if(header_top && notification4){ 10733 if ((header_top.textContent.length > 10) && (notification4.textContent.length > 10)) { 10734 if (window.pageYOffset > 76) { 10735 //document.querySelector("#header").style.cssText = "position:fixed;left:0;top:0;width:100%;transition: all ease-in-out 0.5s"; 10736 //document.querySelector(".page-wrapper").style.cssText = "padding-top:112px"; 10737 document.querySelector('body').classList.add('sticki'); 10738 } else { 10739 //document.querySelector("#header").style.cssText = "position:static;transition: all ease-in-out 0.5s"; 10740 //document.querySelector(".page-wrapper").style.cssText = "padding-top:0px"; 10741 document.querySelector('body').classList.remove('sticki'); 10742 } 10743 } 10744 } 10745 10746 if(header_top && notification4){ 10747 if ((header_top.textContent.length > 10) && (notification4.textContent.length < 10)) { 10748 if (window.pageYOffset > 36) { 10749 //document.querySelector("#header").style.cssText = "position:fixed;left:0;top:0;width:100%;transition: all ease-in-out 0.5s"; 10750 //document.querySelector(".page-wrapper").style.cssText = "padding-top:112px"; 10751 document.querySelector('body').classList.add('sticki'); 10752 } else { 10753 //document.querySelector("#header").style.cssText = "position:static;transition: all ease-in-out 0.5s"; 10754 //document.querySelector(".page-wrapper").style.cssText = "padding-top:0px"; 10755 document.querySelector('body').classList.remove('sticki'); 10756 } 10757 } 10758 } 10759 10760 if(header_top && !notification4){ 10761 if (header_top.textContent.length > 10) { 10762 if (window.pageYOffset > 36) { 10763 //document.querySelector("#header").style.cssText = "position:fixed;left:0;top:0;width:100%;transition: all ease-in-out 0.5s"; 10764 //document.querySelector(".page-wrapper").style.cssText = "padding-top:112px"; 10765 document.querySelector('body').classList.add('sticki'); 10766 } else { 10767 //document.querySelector("#header").style.cssText = "position:static;transition: all ease-in-out 0.5s"; 10768 //document.querySelector(".page-wrapper").style.cssText = "padding-top:0px"; 10769 document.querySelector('body').classList.remove('sticki'); 10770 } 10771 } 10772 } 10773 }); 10774 10775 window.addEventListener("DOMContentLoaded", function() { 10776 window.addEventListener("scroll", function() { 10777 // scroll for plp content sticky 10778 anchor_scroll(); 10779 }); 10780 function anchor_scroll() { 10781 var anchor_scroll = document.querySelector('.anchor-scroll'); 10782 if (!anchor_scroll) { 10783 return; // Exit if the element is not found 10784 } 10785 let sticky = anchor_scroll.offsetTop; 10786 10787 if (window.pageYOffset > sticky) { 10788 anchor_scroll.classList.add("scroll-fixed"); 10789 } else { 10790 anchor_scroll.classList.remove("scroll-fixed"); 10791 } 10792 } 10793 10794 document.querySelectorAll('.anchor-scroll a[href^="."], .at-glance-content a[href^="."]').forEach(anchor => { 10795 anchor.addEventListener('click', function (e) { 10796 e.preventDefault(); 10797 10798 const targetClass = this.getAttribute('href').substring(1); 10799 const targetElement = document.querySelector(`.${targetClass}`); 10800 let anchor_scroll = document.querySelector('.anchor-scroll > div'); 10801 var header_off = document.querySelector('#header').offsetHeight; 10802 if (anchor_scroll) { 10803 var header_off = document.querySelector('#header').offsetHeight + anchor_scroll.offsetHeight; 10804 } else { 10805 var header_off = document.querySelector('#header').offsetHeight; 10806 } 10807 10808 if (targetElement) { 10809 const offset = header_off; 10810 const bodyRect = document.body.getBoundingClientRect().top; 10811 const elementRect = targetElement.getBoundingClientRect().top; 10812 const elementPosition = elementRect - bodyRect; 10813 const offsetPosition = elementPosition - offset; 10814 10815 window.scrollTo({ 10816 top: offsetPosition, 10817 behavior: 'smooth' 10818 }); 10819 } 10820 }); 10821 }); 10822 }); 10823</script>
10823 10824 10825 <section x-cloak x-data="{isLoading: false}" 10826 @amcaptcha-loading-start.window="isLoading = true" @amcaptcha-loading-stop.window="isLoading = false"> 10827 <div class="flex flex-row justify-center items-center w-full h-full fixed select-none z-50" 10828 style="left: 50%;top: 50%;transform: translateX(-50%) translateY(-50%);background: rgba(255,255,255,0.7);" 10829 x-show="isLoading" 10830 x-transition:enter="ease-out duration-200" 10831 x-transition:enter-start="opacity-0" 10832 x-transition:enter-end="opacity-100" 10833 x-transition:leave="ease-in duration-200" 10834 x-transition:leave-start="opacity-100" 10835 x-transition:leave-end="opacity-0"> 10836 <!-- By Sam Herbert (@sherb), for everyone. More @ http://goo.gl/7AJzbL --> 10837<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 57 57" stroke="currentColor" class="text-primary" width="57" height="57" role="img"> 10838 <g fill="none" fill-rule="evenodd"> 10839 <g transform="translate(1 1)" stroke-width="2"> 10840 <circle cx="5" cy="50" r="5"> 10841 <animate attributeName="cy" begin="0s" dur="2.2s" values="50;5;50;50" calcMode="linear" repeatCount="indefinite"/> 10842 <animate attributeName="cx" begin="0s" dur="2.2s" values="5;27;49;5" calcMode="linear" repeatCount="indefinite"/> 10843 </circle> 10844 <circle cx="27" cy="5" r="5"> 10845 <animate attributeName="cy" begin="0s" dur="2.2s" from="5" to="5" values="5;50;50;5" calcMode="linear" repeatCount="indefinite"/> 10846 <animate attributeName="cx" begin="0s" dur="2.2s" from="27" to="27" values="27;49;5;27" calcMode="linear" repeatCount="indefinite"/> 10847 </circle> 10848 <circle cx="49" cy="50" r="5"> 10849 <animate attributeName="cy" begin="0s" dur="2.2s" values="50;50;5;50" calcMode="linear" repeatCount="indefinite"/> 10850 <animate attributeName="cx" from="49" to="49" begin="0s" dur="2.2s" values="49;5;27;49" calcMode="linear" repeatCount="indefinite"/> 10851 </circle> 10852 </g> 10853 </g> 10854<title>loader</title></svg> 10855 <div class="ml-10 text-primary text-xl"> 10856 Loading... </div> 10857</div> 10858 </section> 10859
10860<script> 10861 'use strict'; 10862 10863 function responseSerialize(response) { 10864 if (response.redirected) { 10865 window.location.href = response.url; 10866 } else if (response.ok) { 10867 return response.json(); 10868 } else { 10869 // Check if result is Promise then throw to new Error 10870 let defaultErrMsg = 'Something went wrong. Please contact the website admin for more information.', 10871 result; 10872 result = response.text(); 10873 if (typeof result?.then === 'function') { 10874 result.then(res => { 10875 let errorMessage; 10876 try { 10877 errorMessage = JSON.parse(res); 10878 errorMessage = errorMessage?.message ? errorMessage.message : defaultErrMsg; 10879 } catch (e) { 10880 errorMessage = defaultErrMsg; 10881 } 10882 window.dispatchMessages([ 10883 { 10884 type: 'error', 10885 text: errorMessage 10886 } 10887 ], 3000); 10888 }); 10889 } else { 10890 throw new Error(defaultErrMsg); 10891 } 10892 } 10893 } 10894 10895 if (typeof window.buildRestAPIUrl !== 'function') { 10896 window.buildRestAPIUrl = function (url, params = {}) { 10897 const method = 'rest', 10898 storeCode = 'default', 10899 version = 'V1', 10900 serviceUrl = ':method/:storeCode/:version'; 10901 10902 let urlParts; 10903 10904 params.method = method; 10905 params.storeCode = storeCode; 10906 params.version = version; 10907 10908 url = serviceUrl + url; 10909 10910 urlParts = url.split('/'); 10911 urlParts = urlParts.filter(Boolean); 10912 10913 Object.entries(urlParts).forEach (entry => { 10914 let [key, part] = entry; 10915 part = part.replace(':', ''); 10916 10917 if (params[part] !== undefined) { 10918 urlParts[key] = params[part]; 10919 } 10920 }); 10921 10922 return urlParts.join('/'); 10923 } 10924 } 10925 10926 if (typeof window.isObjectEmpty !== 'function') { 10927 window.isObjectEmpty = function (obj) { 10928 return ( 10929 Object.prototype.toString.call(obj) === '[object Object]' && 10930 JSON.stringify(obj) === '{}' 10931 ); 10932 } 10933 } 10934 10935 if (typeof window.mergeDeep !== 'function') { 10936 /** 10937 * Deep merge two objects. 10938 * 10939 * @param target 10940 * @param sources 10941 * @returns {*} 10942 */ 10943 window.mergeDeep = (target, ...sources) => { 10944 /** 10945 * Simple object check. 10946 * 10947 * @param item 10948 * @returns {boolean} 10949 */ 10950 const isObject = (item) => { 10951 return (item && typeof item === 'object' && !Array.isArray(item)); 10952 }; 10953 10954 if (!sources.length) return target; 10955 const source = sources.shift(); 10956 10957 if (isObject(target) && isObject(source)) { 10958 for (const key in source) { 10959 if (isObject(source[key])) { 10960 if (!target[key]) Object.assign(target, { [key]: {} }); 10961 mergeDeep(target[key], source[key]); 10962 } else { 10963 Object.assign(target, { [key]: source[key] }); 10964 } 10965 } 10966 } 10967 10968 return mergeDeep(target, ...sources); 10969 } 10970 } 10971</script>
10971 10972 10973<div x-data="{...hyva.modal(), ...initAmcartDialogPopup()}" 10974 x-init="initDialogPopup($dispatch)" 10975 x-spread="eventListeners" 10976 x-bind="eventListeners"> 10977 <div x-cloak x-spread="overlay('amcart-dialog-popup')" x-bind="overlay('amcart-dialog-popup')" 10978 class="fixed inset-0 flex items-center justify-center text-left bg-black bg-opacity-50 z-30"> 10979 <div x-ref="amcart-dialog-popup" role="dialog" aria-labelledby="amcart-dialog-popup-content" 10980 class="flex flex-col max-h-screen max-w-4xl overflow-auto bg-amcart-background shadow-xl rounded-lg p-4"> 10981 <div class="flex justify-between pb-4 border-b"> 10982 <div x-text="title" class="text-2xl font-extrabold text-amcart-text"></div> 10983 <button @click="$dispatch('amcart-close-dialog-popup')" 10984 aria-label="Close" 10985 class="text-gray-300 transition hover:text-black hover:drop-shadow-md"> 10986 <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"> 10987 <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"/> 10988<title>x</title></svg> 10989 </button> 10990 </div> 10991 <div id="amcart-dialog-popup-content" class="amcart-dialog-popup-content"></div> 10992 <div class="flex flex-row pt-3 border-t"> 10993 <template x-for="(button, index) in buttons" :key="index"> 10994 <button class="btn mr-4 last:mr-0 text-amcart-button hover:brightness-105 hover:shadow-lg" 10995 :class="{ 10996 'bg-amcart-continue-btn hover:bg-amcart-continue-btn': index === 0, 10997 'bg-amcart-view-cart-btn hover:bg-amcart-view-cart-btn': index === 1 10998 }" 10999 :aria-label="button.name" 11000 x-html="button.name" 11001 @click="dispatchButtonAction(button.action.name, button.action.payload)"></button> 11002 </template> 11003 </div> 11004 </div> 11005 </div> 11006</div> 11007
11008<script> 11009 'use strict'; 11010 11011 function initAmcartDialogPopup() { 11012 const dialogPopupName = 'amcart-dialog-popup'; 11013 const selectors = { 11014 addToCartForm: '.amcart-product-info #amcart_product_addtocart_form', 11015 ratingSummarySelector: '.amcart-product-info .rating-summary' 11016 } 11017 11018 return { 11019 eventListeners: { 11020 ['@amcart-open-dialog-popup.window']({detail: popupData}) { 11021 // Close any existing modal before opening 11022 window.hyva.modal.pop(); 11023 11024 this.initPopupWithData(popupData); 11025 this.$nextTick(() => { 11026 this.show(dialogPopupName); 11027 }); 11028 }, 11029 ['@amcart-close-dialog-popup']() { 11030 this.hide(dialogPopupName); 11031 }, 11032 ['@amcart-dialog-submit']({ detail: actionToDispatch }) { 11033 const form = document.querySelector(selectors.addToCartForm); 11034 11035 if (form.checkValidity()) { 11036 this.dispatch(actionToDispatch, form); 11037 this.hide(dialogPopupName); 11038 } else { 11039 form.reportValidity(); 11040 } 11041 }, 11042 ['@amcart-hide-popup']() { 11043 this.hide(dialogPopupName); 11044 } 11045 }, 11046 title: '', 11047 buttons: [], 11048 message: '', 11049 selected_options: null, 11050 dispatch: null, 11051 11052 /** 11053 * @param {Object} $dispatch 11054 * @return {void} 11055 */ 11056 initDialogPopup: function ($dispatch) { 11057 this.dispatch = $dispatch; 11058 }, 11059 11060 /** 11061 * @param {CartResponse} popupData 11062 * @return {void} 11063 */ 11064 initPopupWithData: function (popupData) { 11065 this.title = popupData.title; 11066 this.buttons = popupData.buttons; 11067 this.selected_options = popupData.selected_options; 11068 hyva.replaceDomElement('#amcart-dialog-popup-content', this.preprocessMessage(popupData.message)); 11069 this.$nextTick(() => { 11070 this.postProcessPopupContent(); 11071 }); 11072 }, 11073 11074 /** 11075 * @param {string} message 11076 * @return {string} 11077 */ 11078 preprocessMessage: function (message) { 11079 /** 11080 * Disable labels for input inside popup due to the possibility of their duplication on the page. 11081 * Because this can lead to unexpected behaviour. 11082 * 11083 * Make form id unique for popup 11084 */ 11085 return message 11086 .replaceAll(':for=', 'for-data=') 11087 .replaceAll('product_addtocart_form', 'amcart_product_addtocart_form'); 11088 }, 11089 11090 /** 11091 * @return {void} 11092 */ 11093 postProcessPopupContent: function () { 11094 this.disableRatingSummary(); 11095 this.clickSelectedOptions(); 11096 }, 11097 11098 /** 11099 * @return {void} 11100 */ 11101 disableRatingSummary: function () { 11102 const ratingSummaryElement = document.querySelector(selectors.ratingSummarySelector); 11103 11104 if (!!ratingSummaryElement) { 11105 ratingSummaryElement.removeAttribute('onClick'); 11106 ratingSummaryElement.classList.remove('cursor-pointer'); 11107 } 11108 }, 11109 11110 /** 11111 * @return {void} 11112 */ 11113 clickSelectedOptions: function () { 11114 if (!this.selected_options) { 11115 return; 11116 } 11117 11118 for(const [attributeId, attributeValue] of Object.entries(this.selected_options)) { 11119 const swatchOptionTemplate = document.querySelector( 11120 `.amcart-product-info template[x-for*="attributes[${attributeId}]"]` 11121 ); 11122 11123 if (!!swatchOptionTemplate && !!swatchOptionTemplate.parentElement) { 11124 const swatchInput = swatchOptionTemplate.parentElement 11125 .querySelector(`input[value="${attributeValue}"]`); 11126 swatchInput && swatchInput.click(); 11127 } 11128 } 11129 }, 11130 11131 /** 11132 * @param {string} name 11133 * @param {string|undefined} payload 11134 * @return {void} 11135 */ 11136 dispatchButtonAction: function (name, payload) { 11137 this.dispatch(name, payload); 11138 } 11139 }; 11140 } 11141</script>
11141 11142
11143<script> 11144 (function () { 11145 'use strict'; 11146 11147 const addToCartProductListFormSelector = '.product_addtocart_form'; 11148 const addToCartProductPageFormSelector = '#product_addtocart_form'; 11149 const setFormsEvent = function () { 11150 const productListForms = document.querySelectorAll(addToCartProductListFormSelector); 11151 const productPageForm = document.querySelector(addToCartProductPageFormSelector); 11152 11153 productPageForm && addDispatcher(productPageForm); 11154 productListForms.forEach((form) => { 11155 // disable html5 validation 11156 form.setAttribute('novalidate', ''); 11157 addDispatcher(form); 11158 }); 11159 } 11160 11161 const addDispatcher = function(form) { 11162 form.removeAttribute('@submit'); 11163 form.removeAttribute('@submit.prevent'); 11164 form.setAttribute('x-data', ''); 11165 form.setAttribute('x-on:submit.prevent', '$dispatch(\'amcart-add-to-cart-action\', $el)'); 11166 } 11167 11168 setFormsEvent(); 11169 11170 window.addEventListener('amcart-set-forms-event', setFormsEvent); 11171 })(); 11172</script>
11172 11173
11174<script> 11175 (function () { 11176 'use strict'; 11177 11178 /** 11179 * @typedef {Object} CartResponse 11180 * 11181 * Popup common props 11182 * @property {[ 11183 * name: string, 11184 * action: { 11185 * name: string, 11186 * payload: string|undefined 11187 * } 11188 * ]|undefined} buttons 11189 * @property {string|undefined} popup_action 11190 * @property {string|undefined} message 11191 * @property {string|undefined} title 11192 * 11193 * DialogPopup props 11194 * @property {string|null|undefined} selected_options 11195 * 11196 * ConfirmationPopup props 11197 * @property {string|undefined} align 11198 * @property {string|undefined} checkout 11199 * @property {string|undefined} product_id 11200 * @property {string|undefined} product_sku 11201 * @property {string|undefined} related 11202 * @property {number|undefined} timer 11203 * 11204 * Redirect props 11205 * @property {string|undefined} redirect url to redirect 11206 */ 11207 11208 let globalActionName; 11209 11210 const addToCartAction = ({detail: form}) => { 11211 const isProductForm = form.id === 'product_addtocart_form'; 11212 11213 globalActionName = getCartAction(form); 11214 11215 if (isProductForm) { 11216 window.dispatchEvent(new CustomEvent('amcart-trigger-grouped-form-validate')); 11217 11218 if (form.checkValidity()) { 11219 performRequest(form, isProductForm); 11220 } 11221 } else { 11222 performRequest(form, isProductForm) 11223 } 11224 }; 11225 11226 const performRequest = function (form, isProductForm) { 11227 const cartUrl = `${BASE_URL}amasty_cart/cart/${getCartAction(form)}`; 11228 const isProductPage = document.body.classList.contains('catalog-product-view'); 11229 const headers = { 11230 'content-type': 'application/x-www-form-urlencoded; charset=UTF-8' 11231 }; 11232 const formData = new FormData(form); 11233 formData.set('product_page', isProductPage && isProductForm); 11234 formData.set('last_category_id', hyva.getBrowserStorage().getItem('last_category_id')); 11235 formData.set('form_key', hyva.getFormKey()); 11236 !formData.get('id') && formData.get('item') && formData.set('id', formData.get('item')); 11237 11238 const body = new URLSearchParams(formData); 11239 11240 window.dispatchEvent(new CustomEvent('amcart-loading-start')); 11241 window.dispatchEvent(new CustomEvent('amcart-add-start', { detail: form })); 11242 11243 fetch(cartUrl, {headers: {...headers}, body: body, method: 'POST'}) 11244 .then(response => response.json()) 11245 .then((result) => { 11246 resultActionResolver.resolve(result); 11247 const relatedProductDialog = document.querySelector('.related-product-dialog-wrapper'); 11248 const cartLink = document.getElementById('menu-cart-icon'); 11249 const isRelatedProductForm = form.closest('.related-products-pdp-section'); 11250 if (relatedProductDialog && !isRelatedProductForm) { 11251 setTimeout(() => { 11252 window.dispatchEvent( 11253 new CustomEvent('hyva-modal-show', { detail: { dialog: 'related-product-slider-dialog' } }) 11254 ); 11255 }, 2000); 11256 } else if (cartLink) { 11257 cartLink.click(); 11258 } 11259 }).catch((error) => { 11260 typeof window.dispatchMessages !== "undefined" && window.dispatchMessages( 11261 [{ 11262 type: "error", 11263 text: error 11264 }], 5000 11265 ); 11266 }).finally(() => { 11267 window.dispatchEvent(new CustomEvent('amcart-loading-stop')); 11268 }); 11269 }; 11270 11271 const getCartAction = function(formNode) { 11272 return formNode.action.includes('updateItemOptions') 11273 ? `UpdateItemOptions` 11274 : 'add'; 11275 }; 11276 11277 const resultActionResolver = { 11278 /** 11279 * @param {CartResponse} result 11280 */ 11281 resolve: function (result) { 11282 11283 if(typeof result.is_add_to_cart != "undefined"){ 11284 var msg = result.message; 11285 /*if($($.parseHTML(result.message)).filter(".message.error").text()){ 11286 msg = $($.parseHTML(result.message)).filter(".message.error").text(); 11287 }*/ 11288 11289 var parser = new DOMParser(); 11290 var doc = parser.parseFromString(result.message, 'text/html'); 11291 var errorMsg = doc.querySelector('.message.error') ? doc.querySelector('.message.error').textContent : ''; 11292 11293 if (errorMsg) { 11294 msg = errorMsg; 11295 } 11296 11297 window.dispatchMessages && window.dispatchMessages([{ 11298 type: 'error', 11299 text: msg 11300 }]); 11301 11302 } 11303 switch (true) { 11304 case !!result.popup_action: 11305 var parser = new DOMParser(); 11306 var doc = parser.parseFromString(result.message, 'text/html'); 11307 var errorMsg = doc.querySelector('.message.error') ? doc.querySelector('.message.error').textContent : ''; 11308 if (errorMsg) { 11309 msg = errorMsg; 11310 window.dispatchMessages && window.dispatchMessages([{ 11311 type: 'error', 11312 text: msg 11313 }]); 11314 } else { 11315 window.dispatchEvent(new CustomEvent(result.popup_action, {detail: result})); 11316 window.dispatchEvent(new CustomEvent('reload-customer-section-data')); 11317 11318 if (globalActionName == 'UpdateItemOptions') { 11319 window.location.href = `${BASE_URL}checkout/cart`; 11320 } 11321 } 11322 break; 11323 case !!result.redirect: 11324 window.location.href = result.redirect; 11325 break; 11326 } 11327 } 11328 } 11329 11330 if (document.body.classList.contains('catalog-category-view')) { 11331 hyva.getBrowserStorage().setItem( 11332 'last_category_id', 11333 '' 11334 ); 11335 } 11336 11337 const groupedOptions = document.querySelector('div[x-data^=initGroupedOptions]'); 11338 11339 if (!!groupedOptions) { 11340 groupedOptions.setAttribute('x-on:amcart-trigger-grouped-form-validate.window', 'validateForm()'); 11341 } 11342 11343 window.addEventListener('amcart-add-to-cart-action', addToCartAction); 11344 })(); 11345</script>
11345<script> 11346 (function () { 11347 'use strict'; 11348 11349 const addToQuoteButtonSelector = '.amquote-addto-button:not(.amasty-quote-login):not(.amasty-quote-link)'; 11350 document.querySelectorAll(addToQuoteButtonSelector).forEach((button) => { 11351 if (!button.hasAttribute('x-data')) { 11352 button.setAttribute('x-data', ''); 11353 } 11354 11355 button.removeAttribute('@click.prevent'); 11356 button.setAttribute( 11357 'x-on:click.prevent', 11358 '$dispatch(\'amcart-add-to-quote-action\', $el)'); 11359 }); 11360 })(); 11361</script>
vendor: 1 bytes, line 11361
11361
11362<script> 11363 (function () { 11364 'use strict'; 11365 11366 const addToQuoteAction = ({ detail: element }) => { 11367 const formNode = element.nodeName === 'FORM' 11368 ? element 11369 : element.form ?? element.closest('form'); 11370 11371 window.dispatchEvent(new CustomEvent('amcart-trigger-grouped-form-validate')); 11372 if (!formNode || !formNode.checkValidity()) { 11373 return formNode?.reportValidity(); 11374 } 11375 11376 performRequest(formNode); 11377 } 11378 11379 const performRequest = (formNode) => { 11380 const url = `${BASE_URL}amasty_cart/quote/${getAction(formNode)}`; 11381 const headers = { 11382 'content-type': 'application/x-www-form-urlencoded; charset=UTF-8' 11383 }; 11384 const formData = new FormData(formNode); 11385 const isProductPage = formNode.id === 'product_addtocart_form' 11386 && document.body.classList.contains('catalog-product-view'); 11387 formData.set('product_page', isProductPage); 11388 formData.set('last_category_id', hyva.getBrowserStorage().getItem('last_category_id')); 11389 formData.set('id', formData.get('item')); 11390 11391 window.dispatchEvent(new CustomEvent('amcart-loading-start')); 11392 window.dispatchEvent(new CustomEvent('amcart-add-start', { detail: formNode })); 11393 11394 fetch(url, { headers: { ...headers }, body: new URLSearchParams(formData), method: 'POST' }) 11395 .then(response => response.json()) 11396 .then((result) => { 11397 switch (true) { 11398 case !!result.popup_action: 11399 window.dispatchEvent(new CustomEvent(result.popup_action, { detail: result })); 11400 window.dispatchEvent(new CustomEvent('reload-customer-section-data')); 11401 break; 11402 case !!result.redirect: 11403 window.location.href = result.redirect; 11404 break; 11405 } 11406 }).catch((error) => { 11407 typeof window.dispatchMessages !== "undefined" && window.dispatchMessages( 11408 [{ 11409 type: "error", 11410 text: error 11411 }], 5000 11412 ); 11413 }).finally(() => { 11414 window.dispatchEvent(new CustomEvent('amcart-loading-stop')); 11415 }); 11416 }; 11417 11418 const getAction = (formNode) => { 11419 return (formNode.action.includes('amasty_quote') && formNode.action.includes('updateItemOptions')) 11420 ? 'updateItemOptions' 11421 : 'add'; 11422 }; 11423 11424 window.addEventListener('amcart-add-to-quote-action', addToQuoteAction); 11425 })(); 11426</script>
11426 11427 11428 11429
11429<script> 11430 'use strict'; 11431 11432 (function () { 11433 const initCompareFunctions = ['initCompareOnProductList', 'initCompareOnProductView']; 11434 11435 initCompareFunctions.forEach(compareFunction => { 11436 window[compareFunction] = function () { 11437 return { 11438 addToCompare: function (productId) { 11439 var loader=document.getElementById('loading'); 11440 console.log("11111111"); 11441 loader.style.display='block'; 11442 console.log("Add To compare amasty ajax cart qqqqq"); 11443 const postUrl = BASE_URL + 'catalog/product_compare/add/'; 11444 const headers = { 11445 "content-type": "application/x-www-form-urlencoded; charset=UTF-8", 11446 }; 11447 const body = new URLSearchParams({ 11448 form_key: hyva.getFormKey(), 11449 product: productId, 11450 is_ajax: true 11451 }); 11452 11453 fetch(postUrl, {headers: headers, body: body, method: 'POST'}).then((response) => { 11454 if (response.redirected) { 11455 window.location.href = response.url; 11456 } else if (response.ok) { 11457 window.dispatchEvent(new CustomEvent('reload-customer-section-data')); 11458 } else { 11459 typeof window.dispatchMessages !== "undefined" && window.dispatchMessages( 11460 [{ 11461 type: "warning", 11462 text: "Could not add item to the comparison list." 11463 }], 11464 1000 11465 ); 11466 } 11467 }).catch((error) => { 11468 typeof window.dispatchMessages !== "undefined" && window.dispatchMessages( 11469 [{ 11470 type: 'error', 11471 text: error 11472 }], 11473 1000 11474 ); 11475 }); 11476 } 11477 }; 11478 }; 11479 }); 11480 })(); 11481 </script>
11481 11482 11483 11484 11485 11486 11487<section x-data="{isLoading: false}" x-cloak 11488 @amcart-loading-start.window="isLoading = true" 11489 @amcart-loading-stop.window="isLoading = false"> 11490 </section> 11491 11492<div x-data="prDataPrivacyCheckboxDetailModalComponent.create()" 11493 @set-is-show-modal.window="isShowModal = $event.detail" 11494 @keydown.escape="closeModal" 11495> 11496 <div x-ref="pr-data-privacy-checkbox-detail" x-show="isShowModal" x-cloak> 11497 <div class="inset-0 fixed z-50"> 11498 <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" 11499 x-show="isShowModal" x-transition 11500 > 11501 <span class="absolute top-3 right-3 cursor-pointer hover:text-gray-700 p-1" @click="closeModal"> 11502 <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" width="20" height="20" role="img"> 11503 <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"/> 11504<title>x</title></svg> 11505 </span> 11506 <template x-if="data.checkbox"> 11507 <div id="prgdpr-consent-checkboxes-modal" class="flex flex-col"> 11508 <div class="modal-header flex flex-col flex-shrink-0 flex-grow-0 mb-5"> 11509 <h2 class="text-xl lg:text-2lx pb-3 mb-1 border-container border-b" x-html="data.checkbox.policy.title"></h2> 11510 <a data-contentid="prgdpr-print-content" 11511 class="ml-auto text-sm text-blue-600 hover:underline" 11512 href="#" 11513 @click.prevent="print()" 11514 > 11515 Print </a> 11516 </div> 11517 <div class="prgdpr-consent-checkboxes-item-content overflow-y-auto mb-5" id="prgdpr-print-content"> 11518 <div class="prose max-w-none" x-html="data.checkbox.policy.content"></div> 11519 </div> 11520 <div class="modal-footer flex-shrink-0 flex-grow-0 pt-5 mt-auto border-container border-t"> 11521 <button type="button" 11522 class="action iagree btn btn-primary" 11523 @click="data.checkbox.checked = data.checkbox.isAlreadyChecked = true; $dispatch('prgdpr-checkbox-agree', 'checkbox' + data.checkbox.consentId); closeModal();" 11524 > 11525 I agree </button> 11526 </div> 11527 </div> 11528</template> 11529 </div> 11530 11531 <div class="bg-gray-800 opacity-50 absolute inset-0" @click="closeModal"></div> 11532 </div> 11533 </div> 11534</div> 11535
11536<script> 11537 const prDataPrivacyCheckboxDetailModalComponent = { 11538 data: null, 11539 isShowModal: false, 11540 create: function () { 11541 this.data = Alpine.reactive({checkbox: null}); 11542 return this; 11543 }, 11544 setCheckbox: function (checkbox) { 11545 this.data.checkbox = checkbox; 11546 }, 11547 showModal: function () { 11548 this.isShowModal = true; 11549 }, 11550 closeModal() { 11551 this.isShowModal = false; 11552 }, 11553 print: function () { 11554 let printWindow = window.open('', 'Print', 'height=600,width=800'); 11555 printWindow.document.write( 11556 `<html><head><title>${this.data.checkbox.policy.title}</title></head><body>${this.data.checkbox.policy.content}</body></html` 11557 ); 11558 printWindow.document.close(); 11559 printWindow.focus(); 11560 printWindow.print(); 11561 printWindow.onafterprint = function () { 11562 printWindow.close(); 11563 }; 11564 11565 return true; 11566 } 11567 }; 11568</script>
11568 11569
11570<script> 11571 window.addEventListener('load', function () { 11572 magentoStorefrontEvents.context.setPage({ 11573 pageType: "Cart" 11574 }); 11575 magentoStorefrontEvents.context.setContext("pageExtended", { 11576 action: "cart-view" 11577 }); 11578 11579 }); 11580 window.addEventListener('shoppingCartContextSet', function () { 11581 magentoStorefrontEvents.publish.shoppingCartView(); 11582 }); 11583</script>
11583 11584
11585<script> 11586 function adobeProductRecsDataFetcher() { 11587 "use strict"; 11588 return { 11589 pagePreconfiguredDeferred: {}, 11590 productBanners: '', 11591 fetchData: function () { 11592 let self = this; 11593 let storefrontEvents = window.magentoStorefrontEvents; 11594 11595 storefrontEvents.context.setContext("recsContext", { 11596 alternateEnvironmentId: "" 11597 }); 11598 11599 this.pagePreconfiguredDeferred = new Promise((resolve, reject) => { 11600 self.pagePreconfiguredDeferred.resolve = resolve; 11601 self.pagePreconfiguredDeferred.reject = reject; 11602 }) 11603 11604 document.addEventListener("recsRequestSent", (function () { 11605 storefrontEvents.publish.recsRequestSent(); 11606 })); 11607 11608 window.addEventListener("recsResponseReceived", (function (n) { 11609 let rec = storefrontEvents.context.getRecommendations(); 11610 11611 rec = n.detail, storefrontEvents.context.setRecommendations({ 11612 units: rec 11613 }); 11614 storefrontEvents.publish.recsResponseReceived(); 11615 })); 11616 11617 this.fetchRecommendationsData(); 11618 }, 11619 fetchRecommendationsData: function () { 11620 let client; 11621 let promise = new Promise(function(resolve, reject) { 11622 let interval = setInterval(() => { 11623 client = new RecommendationsClient(); 11624 if(client._environmentId !== "") { 11625 clearInterval(interval); 11626 resolve(); 11627 } 11628 }, 300); 11629 }) 11630 .then(() => { 11631 document.dispatchEvent(new Event("recsRequestSent")); 11632 client.fetchPreconfigured().then(response => { 11633 const units = response.data.results; 11634 const filteredUnits = units.filter(unit => unit.products.length); 11635 const responseEvent = new CustomEvent("recsResponseReceived", { 11636 detail: filteredUnits, 11637 }); 11638 11639 window.dispatchEvent(responseEvent); 11640 }); 11641 }); 11642 } 11643 } 11644 } 11645</script>
11645 11646<div x-data="adobeProductRecsDataFetcher()" x-init="fetchData()"></div>
11647<script type="application/ld+json">{"@context":"https:\/\/schema.org","@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"item":{"@id":"\/","name":"Homepage","@type":"WebPage"}}]}</script>
11647<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>
11647<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>
11647
11647<script defer src="https://www.dwin1.com/94345.js"></script>
11647 11648
11649<script nonce="N2Q3enk5eGFoZ3hyejB4MzJxOThhNGsyd2lybnZpbno="> 11650 (() => { 11651 const updateSettingBar = () => { 11652 const intervalId = setInterval(() => { 11653 const bar = document.getElementById('pr-cookie-setting-bar'); 11654 if (! bar) { 11655 return; 11656 } 11657 11658 clearInterval(intervalId); 11659 bar.querySelectorAll('input[type="checkbox"], button.action') 11660 .forEach(el => el.disabled = true); 11661 11662 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'; 11663 bar.querySelector('.pr-cookie-description') 11664 .insertAdjacentHTML('beforebegin', notification); 11665 }, 400); 11666 } 11667 11668 prGlobalPrivacyControlApi.signalHandlers.addHandler(updateSettingBar); 11669 })(); 11670</script>
vendor: 1 bytes, line 11670
11670
11671<script type="application/json" id="default-section-data"> 11672 {"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":1790345750},"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>
11672 11673</div><div x-data="fpcTracking()" x-init="sendRequest()"></div>
11674<script> 11675 function fpcTracking() { 11676 return { 11677 url: 'https://www.flooringinc.com/amasty_fpc/reports/', 11678 sendRequest() { 11679 const ttfb = window.performance.timing.responseStart - window.performance.timing.fetchStart; 11680 fetch(`${this.url}?` + new URLSearchParams({ ttfb }), { 11681 method: 'GET', 11682 headers: { 11683 'Content-Type': 'application/json', 11684 'X-Requested-With': 'XMLHttpRequest', 11685 } 11686 }) 11687 } 11688 } 11689 } 11690</script>
11690 11691<!-- amasty-fpc-status -->
11691<script> 11692 const wpGA4ServerSide = { 11693 pushClick: function(productId, listId, listName, index, elm) { 11694 if (elm && elm.hasAttribute('onclick')) { 11695 var requestUrl = 'https://www.flooringinc.com/weltpixel_ga4/track/productclick/'; 11696 if (productId && listId && listName) { 11697 fetch(requestUrl, { 11698 method: 'POST', 11699 headers: { 11700 'Content-Type': 'application/x-www-form-urlencoded', 11701 'X-Requested-With': 'XMLHttpRequest' 11702 }, 11703 body: 'product_id=' + productId + '&list_id=' + listId +'&list_name=' + listName + '&index=' + index 11704 }) 11705 .then(res => res.json()) 11706 .then(data => { 11707 }); 11708 } 11709 } 11710 }, 11711 11712 pushViewItemList: function(hashId) { 11713 if (hashId && document.getElementById('wp_ga4_server_side_view_item_list')) { 11714 var requestUrl = 'https://www.flooringinc.com/weltpixel_ga4/track/viewitemlist/'; 11715 fetch(requestUrl, { 11716 method: 'POST', 11717 headers: { 11718 'Content-Type': 'application/x-www-form-urlencoded', 11719 'X-Requested-With': 'XMLHttpRequest' 11720 }, 11721 11722 body: 'hash_id='+hashId 11723 }) 11724 .then(res => res.json()) 11725 .then(data => { 11726 }); 11727 } 11728 } 11729 }; 11730 11731 window.wpGA4ServerSide = wpGA4ServerSide; 11732 11733 let allowGa4Services = window.ga4AllowServices ?? true; 11734 11735 if (allowGa4Services) { 11736 const {fetch: originalFetch} = window; 11737 window.fetch = async (...args) => { 11738 let [resource, config] = args; 11739 let response = await originalFetch(resource, config); 11740 11741 if ((typeof resource == 'string') && resource.search('/customer\/section\/load/') > 0) { 11742 response.clone().json().then(data => { 11743 if (data.wp_ga4.datalayer) { 11744 const dataLayerData = JSON.parse(data.wp_ga4.datalayer); 11745 dataLayerData.forEach((dataLayerItem) => { 11746 window.dataLayer.push({ecommerce: null}); 11747 window.dataLayer.push(dataLayerItem); 11748 }); 11749 } 11750 }); 11751 } 11752 return response; 11753 }; 11754 } 11755 11756 </script>
11756 11757
11757<script> 11758 let allowGa4ServicesMeta = window.ga4AllowServices ?? true; 11759 if (allowGa4ServicesMeta) { 11760 const {fetch: originalFetchMeta} = window; 11761 window.fetch = async (...args) => { 11762 let [resource, config] = args; 11763 let response = await originalFetchMeta(resource, config); 11764 11765 if ((typeof resource == 'string') && resource.search('/customer\/section\/load/') > 0) { 11766 response.clone().json().then(data => { 11767 if (data.wp_ga4 && data.wp_ga4.metapixel) { 11768 const metaPixel = JSON.parse(data.wp_ga4.metapixel); 11769 for (index in metaPixel) { 11770 fbq(metaPixel[index].track, metaPixel[index].eventName, metaPixel[index].eventData); 11771 } 11772 } 11773 }); 11774 } 11775 return response; 11776 }; 11777 } 11778 </script>
vendor: 1 bytes, line 11778
11778
11779<script type="text/javascript">window.NREUM||(NREUM={});NREUM.info={"beacon":"bam.nr-data.net","licenseKey":"NRJS-d3390ca2649c82069a5","applicationID":"1112615138","transactionName":"YwMDN0NXChZSVRBZWlpJIABFXwsLHFUMVVZfCRQXHlUFF0cZDV5RUR4=","queueTime":0,"applicationTime":582,"atts":"T0QAQQtNGRg=","errorBeacon":"bam.nr-data.net","agent":""}</script>
11779</body> 11780</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.