numerable:i=!0}=e,c=e.get,a=e.set;if(!o||void 0===n&&!c&&!a)return new Error("property and value are required");let l=r||globalThis,u=l?.[o],s={};if(void 0!==n)s.value=n;else{if(c){let e=t(c);e&&(s.get=e)}if(a){let e=t(a);e&&(s.set=e)}}let p={...s,enumerable:i||!1,configurable:!1};void 0!==n&&(p.writable=!1);try{Object.defineProperty(l,o,p)}catch(e){return e instanceof TypeError?u:e}return u}function t(e,t){return"function"==typeof e?e:!0===e?.async&&"function"==typeof e.func?t?async function(t){return e.func(t)}:async function(){return e.func()}:"function"==typeof e?.func?e.func:void 0}try{e({property:"strictDefine",value:e})}catch{}try{e({property:"defineStrictObject",value:o})}catch{}try{e({property:"defineStrictMethod",value:n})}catch{}var r=["toString","toLocaleString","valueOf","constructor","prototype"];function o(t){let{context:n,property:c,propertiesToExclude:a=[],skipPrototype:l=!1,hardenPrototypePropertiesToExclude:u=[]}=t;if(!c)return new Error("property is required");let s=(n||globalThis)[c],p={},f=i(n,c);s&&("object"==typeof s||"function"==typeof s)&&Reflect.ownKeys(s).forEach(t=>{if(!a.includes(t)&&!r.includes(t)){let r=i(s,t);if(r&&(r.writable||r.configurable)){let{value:o,get:n,set:i,enumerable:c=!1}=r,a={};void 0!==o?a.value=o:n?a.get=n:i&&(a.set=i);try{let r=e({context:s,property:t,...a,enumerable:c});p[t]=r}catch(e){if(!(e instanceof TypeError))throw e;try{p[t]=r.value||r.get||r.set}catch{}}}}});let d={originalObject:s,originalProperties:p};if(!l&&void 0!==s?.prototype){let e=o({context:s,property:"prototype",propertiesToExclude:u,skipPrototype:!0});e instanceof Error||(d.originalPrototype=e?.originalObject,d.originalPrototypeProperties=e?.originalProperties)}return e({context:n,property:c,value:s,enumerable:f?.enumerable}),d}function n(t,r){let o=(r||globalThis)[t],n=i(r||globalThis,t);return o&&n&&(n.writable||n.configurable)?(Object.freeze(o),e({context:globalThis,property:t,value:o})):o}function i(e,t){if(e&&t)try{return Reflect.getOwnPropertyDescriptor(e,t)}catch{return}}function c(e){if("string"!=typeof e)return e;try{return decodeURIComponent(e).toLowerCase().trim()}catch{return e.toLowerCase().trim()}}function a(e,t){return e instanceof Headers?e.forEach((r,o)=>{l(o,t)||e.delete(o)}):Object.keys(e).forEach(r=>{l(r,t)||delete e[r]}),e}function l(e,t){return!t.has(c(e)||"")}function u(e,t){let r=!0,o=function(e){let t,r;if(globalThis.Request&&e instanceof Request)t=e.url;else{if("function"!=typeof e?.toString)throw new Error("Unsupported type for url");t=e.toString()}try{return new URL(t).pathname}catch{return r=t.replace(/#.+/gi,"").split("?").shift(),r.startsWith("/")?r:`/${r}`}}(e),n=c(o);return n&&t.some(e=>n.includes(e))&&(r=!1),r}function s(t,r,o){let n=fetch,i=XMLHttpRequest,c=new Set(r);function s(){let e=new i,r=e.open,n=e.setRequestHeader;return e.open=function(){let n=Array.from(arguments),i=n[1];if(n.length<2||u(i,t))return r.apply(e,n);throw new Error(o||`Request not allowed for path ${i}`)},e.setRequestHeader=function(t,r){l(decodeURIComponent(t),c)&&n.call(e,t,r)},e}return e({property:"fetch",value:function(){let e=function(e,t){return globalThis.Request&&e[0]instanceof Request&&e[0]?.headers?a(e[0].headers,t):e[1]?.headers&&a(e[1].headers,t),e}(arguments,c);return u(arguments[0],t)?n.apply(globalThis,Array.from(e)):new Promise((e,t)=>{t(new Error(o||`Request not allowed for path ${arguments[0]}`))})},enumerable:!0}),e({property:"XMLHttpRequest",value:s,enumerable:!0}),Object.keys(i).forEach(e=>{s[e]=i[e]}),{fetch:n,XMLHttpRequest:i}}var p=["TextEncoder","TextDecoder","XMLHttpRequestEventTarget","EventTarget","URL","JSON","Reflect","Object","Array","Map","Set","WeakMap","WeakSet","Promise","Symbol","Error"],f=["addEventListener","removeEventListener","dispatchEvent","encodeURI","encodeURIComponent","decodeURI","decodeURIComponent"];const d=function(){let t=globalThis.open,r=document.open;function o(e,r,o){let n="string"!=typeof e,i=t.call(window,e,r,o);return n||e&&function(e){return e.startsWith("//")&&/(?:[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?\.)+[a-z0-9][a-z0-9-]{0,61}[a-z0-9]/g.test(`${location.protocol}:${e}`)&&(e=`${location.protocol}${e}`),!e.startsWith("http")||new URL(e).hostname===location.hostname}(e)?{}:i}return e({property:"open",value:o,context:globalThis,enumerable:!0}),e({property:"open",value:function(e,t,n){return e?o(e,t,n):r.call(document,e||"",t||"",n||"")},context:document,enumerable:!0}),{open:t,documentOpen:r}},y=function(){let t=document.createElement,r=Element.prototype.setAttribute,o=Element.prototype.setAttributeNS;return e({property:"createElement",context:document,value:function(n,i){let a=t.call(document,n,i);if("iframe"===c(n)){e({property:"srcdoc",context:a,get:()=>"",set:()=>{console.warn("`srcdoc` is not allowed in iframe elements.")}});let t=function(e,t){"srcdoc"!==e.toLowerCase()?r.call(a,e,t):console.warn("`srcdoc` attribute is not allowed to be set.")},n=function(e,t,r){"srcdoc"!==t.toLowerCase()?o.call(a,e,t,r):console.warn("`srcdoc` attribute is not allowed to be set.")};a.setAttribute=t,a.setAttributeNS=n}return a},enumerable:!0}),{createElement:t,setAttribute:r,setAttributeNS:o}},m=["client-binding"],b=["/_api/v1/access-tokens","/_api/v2/dynamicmodel","/_api/one-app-session-web/v3/businesses"],h=function(){let t=setTimeout,r=setInterval;return o("setTimeout",0,globalThis),o("setInterval",0,globalThis),{setTimeout:t,setInterval:r};function o(t,r,o){let n=o||globalThis,i=n[t];if(!i||"function"!=typeof i)throw new Error(`Function ${t} not found or is not a function`);e({property:t,value:function(){let e=Array.from(arguments);if("string"!=typeof e[r])return i.apply(n,e);console.warn(`Calling ${t} with a String Argument at index ${r} is not allowed`)},context:o,enumerable:!0})}},v=function(){if(navigator&&"serviceWorker"in navigator){let t=navigator.serviceWorker.register;return e({context:navigator.serviceWorker,property:"register",value:function(){console.log("Service worker registration is not allowed")},enumerable:!0}),{register:t}}return{}};performance.mark("overrideGlobals started");const{isExcludedFromSecurityExperiments:g,experiments:w}=window.viewerModel,E=!g&&w["specs.thunderbolt.securityExperiments"];try{d(),E&&y(),w["specs.thunderbolt.hardenFetchAndXHR"]&&E&&s(b,m),v(),(e=>{let t=[],r=[];r=r.concat(["TextEncoder","TextDecoder"]),e&&(r=r.concat(["XMLHttpRequestEventTarget","EventTarget"])),r=r.concat(["URL","JSON"]),e&&(t=t.concat(["addEventListener","removeEventListener"])),t=t.concat(["encodeURI","encodeURIComponent","decodeURI","decodeURIComponent"]),r=r.concat(["String","Number"]),e&&r.push("Object"),r=r.concat(["Reflect"]),t.forEach(e=>{n(e),["addEventListener","removeEventListener"].includes(e)&&n(e,document)}),r.forEach(e=>{o({property:e})})})(E),E&&h()}catch(e){window?.viewerModel?.mode.debug&&console.error(e);const t=new Error("TB006");window.fedops?.reportError(t,"security_overrideGlobals"),window.Sentry?window.Sentry.captureException(t):globalThis.defineStrictProperty("sentryBuffer",[t],window,!1)}performance.mark("overrideGlobals ended")})();
//# sourceMappingURL=https://static.parastorage.com/services/wix-thunderbolt/dist/overrideGlobals.inline.ec13bfcf.bundle.min.js.map
top of page
Odel
Srilanka's biggest fashion retailer
Odel’s vision has always been to provide the best of experience to its customers. With the launch of its biggest ever store, Odel management decided to appoint world renowned design firm Blocher & Blocher partners to come and create an experience which is at par with international experiences.
Design development & Engineering
While Blocher partners worked on creating a world-class experience, Odel appointed Shark to execute the project for them. With us coming on board we worked very closely with the design team to develop and evolve finishes and details which are at par with the client's expectations.
Material research localisation & prototyping
Shark dedicated a complete team to research on the material and developed detailed floor drawings for this. All the material were developed into locally available materials and approved by the client. Numerous workshops were conducted were mock-ups were developed, discussed and finalised at our manufacturing unit in India.
Manufacturing
Post approval of prototyping all all the shop fittings were manufactured within 60 days and detailed quality check documentation was done.
Export logistics & offshore installation
All shopfitting were manufactured in-house and shipped , with our fitout team of 10 flying to Colombo to execute the onsite installation with precision.