@dcl/wearable-preview 1.0.0-1495135029.commit-20ca0d2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (34) hide show
  1. package/asset-manifest.json +24 -0
  2. package/favicon.ico +0 -0
  3. package/index.html +1 -0
  4. package/logo.png +0 -0
  5. package/manifest.json +25 -0
  6. package/package.json +13 -0
  7. package/robots.txt +3 -0
  8. package/static/css/2.9a9d0aaf.chunk.css +363 -0
  9. package/static/css/2.9a9d0aaf.chunk.css.map +1 -0
  10. package/static/css/main.9839592e.chunk.css +2 -0
  11. package/static/css/main.9839592e.chunk.css.map +1 -0
  12. package/static/js/2.e5e71ab0.chunk.js +3 -0
  13. package/static/js/2.e5e71ab0.chunk.js.LICENSE.txt +109 -0
  14. package/static/js/2.e5e71ab0.chunk.js.map +1 -0
  15. package/static/js/main.7dacfc54.chunk.js +2 -0
  16. package/static/js/main.7dacfc54.chunk.js.map +1 -0
  17. package/static/js/runtime-main.e9e23d7b.js +2 -0
  18. package/static/js/runtime-main.e9e23d7b.js.map +1 -0
  19. package/static/media/brand-icons.278156e4.woff2 +0 -0
  20. package/static/media/brand-icons.65a2fb6d.ttf +0 -0
  21. package/static/media/brand-icons.6729d297.svg +1008 -0
  22. package/static/media/brand-icons.cac87dc0.woff +0 -0
  23. package/static/media/brand-icons.d68fa3e6.eot +0 -0
  24. package/static/media/flags.99f63ae7.png +0 -0
  25. package/static/media/icons.38c6d8ba.woff2 +0 -0
  26. package/static/media/icons.425399f8.woff +0 -0
  27. package/static/media/icons.62d9dae4.svg +1518 -0
  28. package/static/media/icons.a01e3f2d.eot +0 -0
  29. package/static/media/icons.c656b8ca.ttf +0 -0
  30. package/static/media/outline-icons.53671035.ttf +0 -0
  31. package/static/media/outline-icons.687a4990.woff2 +0 -0
  32. package/static/media/outline-icons.752905fa.eot +0 -0
  33. package/static/media/outline-icons.9c4845b4.svg +366 -0
  34. package/static/media/outline-icons.ddae9b1b.woff +0 -0
@@ -0,0 +1,2 @@
1
+ (this["webpackJsonp@dcl/wearable-preview"]=this["webpackJsonp@dcl/wearable-preview"]||[]).push([[0],{469:function(e,t,n){},863:function(e,t,n){},866:function(e,t,n){"use strict";n.r(t);var r=n(4),a=n.n(r),c=n(182),o=n.n(c),i=(n(469),n(77)),s=n(219),u=n(341),d=n(299),l=n.n(d),f=n(86),b=n.n(f),h=n(222),m=n(147),w=n(63),p=(n(865),n(451)),v=n.n(p),j=["hair_mat","avatarskin_mat"];function g(e){var t=e.getChildren().filter((function(e){return"__root__"!==e.id}));if(t.length>0){for(var n=t[0],r=n.getBoundingInfo(),a=r.boundingBox.minimumWorld.add(n.position),c=r.boundingBox.maximumWorld.add(n.position),o=1;o<t.length;o++){var i=t[o],s=(r=i.getBoundingInfo()).boundingBox.minimumWorld.add(i.position),u=r.boundingBox.maximumWorld.add(i.position);a=w.m.Minimize(a,s),c=w.m.Maximize(c,u)}e.setBoundingInfo(new w.b(a,c))}}function O(){return O=Object(m.a)(b.a.mark((function e(t,n){var r,a,c,o,i,s,u,d,l,f,m,p,O,x,y,k,I,E,S,B,C,R,A,L,M=arguments;return b.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return r=M.length>2&&void 0!==M[2]?M[2]:".glb",a=new w.f(t,!0,{preserveDrawingBuffer:!0,stencil:!0}),(c=new w.j(a)).autoClear=!0,c.clearColor=new w.d(0,0,0,0),c.preventDefaultOnPointerDown=!1,o=v()(),i=function(e){return e.onReadyObservable.addOnce((function(){return o.resolve(e)}))},w.k.Append(n,"",c,i,null,null,r),e.next=11,o;case 11:s=e.sent,new w.g("glow",s,{mainTextureFixedSize:1024,blurKernelSize:64}).intensity=1,(u=new w.a("camera",0,0,0,new w.m(0,0,0),s)).mode=w.c.PERSPECTIVE_CAMERA,u.position=new w.m(-2,2,2),u.useAutoRotationBehavior=!0,u.setTarget(w.m.Zero()),u.lowerRadiusLimit=u.upperRadiusLimit=u.radius,u.attachControl(t,!0),new w.e("directional",new w.m(0,0,1),s).intensity=1,new w.h("top",new w.m(0,-1,0),s).intensity=1,new w.h("bottom",new w.m(0,1,0),s).intensity=1,new w.l("spot",new w.m(-2,2,2),new w.m(2,-2,-2),Math.PI/2,1e3,s).intensity=1,d=new w.i("parent",s),l=Object(h.a)(s.meshes);try{for(l.s();!(f=l.n()).done;)(m=f.value)!==d&&m.setParent(d)}catch(b){l.e(b)}finally{l.f()}p=Object(h.a)(j);try{for(p.s();!(O=p.n()).done;){x=O.value,y=Object(h.a)(s.materials);try{for(y.s();!(k=y.n()).done;)(I=k.value).name.toLowerCase().includes(x)&&(I.alpha=0,s.removeMaterial(I))}catch(b){y.e(b)}finally{y.f()}E=Object(h.a)(s.textures);try{for(E.s();!(S=E.n()).done;)(B=S.value).name.toLowerCase().includes(x)&&(B.dispose(),s.removeTexture(B))}catch(b){E.e(b)}finally{E.f()}}}catch(b){p.e(b)}finally{p.f()}g(d),C=d.getBoundingInfo().boundingBox.extendSize,R=C.length(),A=new w.m(1/R,1/R,1/R),d.scaling=A,L=d.getBoundingInfo().boundingBox.center.multiply(A),d.position.subtractInPlace(L),a.runRenderLoop((function(){return s.render()}));case 42:case"end":return e.stop()}}),e)}))),O.apply(this,arguments)}var x=n(296),y=n(297),k="https://nft-api.decentraland.org",I=function(){function e(){Object(x.a)(this,e)}return Object(y.a)(e,[{key:"fetchItem",value:function(){var e=Object(m.a)(b.a.mark((function e(t,n){var r,a,c;return b.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,fetch("".concat(k,"/v1/items?contractAddress=").concat(t,"&itemId=").concat(n));case 2:return r=e.sent,e.next=5,r.json();case 5:if(a=e.sent,0!==(c=a.data).length){e.next=9;break}throw new Error('Item not found for contractAddress="'.concat(t,'" itemId="').concat(n,'"'));case 9:return e.abrupt("return",c[0]);case 10:case"end":return e.stop()}}),e)})));return function(t,n){return e.apply(this,arguments)}}()},{key:"fetchNFT",value:function(){var e=Object(m.a)(b.a.mark((function e(t,n){var r,a,c;return b.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,fetch("".concat(k,"/v1/nfts?contractAddress=").concat(t,"&tokenId=").concat(n));case 2:return r=e.sent,e.next=5,r.json();case 5:if(a=e.sent,0!==(c=a.data).length){e.next=9;break}throw new Error('NFT not found for contractAddress="'.concat(t,'" tokenId="').concat(n,'"'));case 9:return e.abrupt("return",c[0].nft);case 10:case"end":return e.stop()}}),e)})));return function(t,n){return e.apply(this,arguments)}}()}]),e}(),E=new I,S=function(){function e(){Object(x.a)(this,e)}return Object(y.a)(e,[{key:"fetchWearable",value:function(){var e=Object(m.a)(b.a.mark((function e(t){var n,r,a;return b.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,fetch("".concat("https://peer.decentraland.org","/lambdas/collections/wearables?wearableId=").concat(t));case 2:return n=e.sent,e.next=5,n.json();case 5:if(r=e.sent,0!==(a=r.wearables).length){e.next=9;break}throw new Error('Wearable not found for urn="'.concat(t,'"'));case 9:return e.abrupt("return",a[0]);case 10:case"end":return e.stop()}}),e)})));return function(t){return e.apply(this,arguments)}}()}]),e}(),B=new S;function C(e){var t=e.contractAddress,n=e.itemId,a=e.tokenId,c=function(e){var t=Object(r.useState)(!1),n=Object(i.a)(t,2),a=n[0],c=n[1],o=Object(r.useState)(null),s=Object(i.a)(o,2),u=s[0],d=s[1],l=Object(r.useState)(""),f=Object(i.a)(l,2),b=f[0],h=f[1];return Object(r.useEffect)((function(){c(!0),e().then((function(e){return d(e)})).catch((function(e){return h(e.message)})).finally((function(){return c(!1)}))}),[]),[u,a,b]}(Object(m.a)(b.a.mark((function e(){var r,c;return b.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(t){e.next=2;break}throw new Error("You must provide a valid contract address");case 2:if(r="urn:decentraland:matic:collections-v2:".concat(t,":").concat(n),n||a){e.next=7;break}throw new Error("You must provide either tokenId or itemId");case 7:if(n||!a){e.next=12;break}return e.next=10,E.fetchNFT(t,a);case 10:c=e.sent,r=c.network!==s.Network.ETHEREUM?"urn:decentraland:matic:collections-v2:".concat(t,":").concat(c.itemId):c.image.split("contents/")[1].split("/thumbnail")[0];case 12:return e.abrupt("return",B.fetchWearable(r));case 13:case"end":return e.stop()}}),e)})))),o=Object(i.a)(c,3);return[o[0],o[1],o[2]]}n(863);var R=n(115),A=function(){var e=Object(r.useState)(""),t=Object(i.a)(e,2),n=t[0],a=t[1],c=function(){var e=Object(r.useState)({width:void 0,height:void 0}),t=Object(i.a)(e,2),n=t[0],a=t[1];return Object(r.useEffect)((function(){function e(){a({width:window.innerWidth,height:window.innerHeight})}return window.addEventListener("resize",e),e(),function(){return window.removeEventListener("resize",e)}}),[]),n}(),o=c.width,d=c.height,f=Object(r.useState)({}),b=Object(i.a)(f,2),h=b[0],m=b[1],w=Object(r.useState)(!1),p=Object(i.a)(w,2),v=p[0],j=p[1],g=Object(r.useState)(!0),x=Object(i.a)(g,2),y=x[0],k=x[1],I=Object(r.useState)(!1),E=Object(i.a)(I,2),S=E[0],B=E[1],A=Object(r.useRef)(null),L=new URLSearchParams(window.location.search),M=C({contractAddress:L.get("contract"),tokenId:L.get("token"),itemId:L.get("item")}),W=Object(i.a)(M,3),z=W[0],N=W[1],P=W[2],T=Object(r.useState)(""),_=Object(i.a)(T,2),F=_[0],D=_[1],U=Object(r.useState)(!0),H=Object(i.a)(U,2),J=H[0],Y=H[1],G=n||P,K=(y||N)&&!G,V=!!F&&!J&&!K,Z=J&&!K;return Object(r.useEffect)((function(){if(A.current&&z){var e=s.Rarity.getGradient(z.rarity),t=Object(i.a)(e,2),n=t[0],r=t[1],c="radial-gradient(".concat(n,", ").concat(r,")");m({backgroundImage:c,opacity:1}),D(z.thumbnail);var o=z.data.representations[0];if(o.mainFile.endsWith("png"))Y(!1),k(!1),B(!0);else{var u=o.contents.find((function(e){return e.key===o.mainFile}));u?function(e,t){return O.apply(this,arguments)}(A.current,u.url).then((function(){return console.log("done")})).catch((function(e){return a(e.message)})).finally((function(){console.log("finally"),k(!1),B(!0)})):(console.warn("Content not found for wearable",z),a("Content not found"))}}}),[A.current,z]),Object(R.jsxs)("div",{className:l()("Preview",{"is-dragging":v,"is-loading":K,"is-loaded":S,"is-3d":J,"has-error":!!G}),style:h,children:[K&&Object(R.jsx)(u.Center,{children:Object(R.jsx)(u.Loader,{active:!0,size:"large"})}),Object(R.jsx)("img",{src:F,className:l()("thumbnail",{"is-visible":V})}),Object(R.jsx)("canvas",{id:"wearable-preview",className:l()({"is-visible":Z}),width:o,height:d,ref:A,onMouseDown:function(){return j(J&&!G)},onMouseUp:function(){return j(!1)}}),G&&Object(R.jsx)("div",{className:"error",children:G})]})},L=a.a.memo(A);o.a.render(Object(R.jsx)(a.a.StrictMode,{children:Object(R.jsx)(L,{})}),document.getElementById("root"))}},[[866,1,2]]]);
2
+ //# sourceMappingURL=main.7dacfc54.chunk.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["lib/babylon.ts","lib/api/nft.ts","lib/api/peer.ts","hooks/useWearable.ts","hooks/useFetch.ts","components/Preview/Preview.tsx","hooks/useWindowSize.ts","index.tsx"],"names":["hideMaterialList","refreshBoundingInfo","parent","children","getChildren","filter","mesh","id","length","child","boundingInfo","getBoundingInfo","min","boundingBox","minimumWorld","add","position","max","maximumWorld","i","siblingMin","siblingMax","Vector3","Minimize","Maximize","setBoundingInfo","BoundingInfo","canvas","url","a","extension","engine","Engine","preserveDrawingBuffer","stencil","root","Scene","autoClear","clearColor","Color4","preventDefaultOnPointerDown","sceneFuture","future","sceneResolver","scene","onReadyObservable","addOnce","resolve","SceneLoader","Append","GlowLayer","mainTextureFixedSize","blurKernelSize","intensity","camera","ArcRotateCamera","mode","Camera","PERSPECTIVE_CAMERA","useAutoRotationBehavior","setTarget","Zero","lowerRadiusLimit","upperRadiusLimit","radius","attachControl","DirectionalLight","HemisphericLight","SpotLight","Math","PI","Mesh","meshes","setParent","materialName","materials","material","name","toLowerCase","includes","alpha","removeMaterial","textures","texture","dispose","removeTexture","bounds","extendSize","size","scale","scaling","center","multiply","subtractInPlace","runRenderLoop","render","NFT_API_URL","NFTApi","contractAddress","itemId","fetch","resp","json","data","Error","tokenId","nft","nftApi","PeerApi","urn","wearables","peerApi","useWearable","options","fetcher","useState","isLoading","setIsLoading","result","setResult","error","setError","useEffect","then","catch","message","finally","useFetch","fetchNFT","network","Network","ETHEREUM","image","split","fetchWearable","Preview","previewError","setPreviewError","width","undefined","height","windowSize","setWindowSize","handleResize","window","innerWidth","innerHeight","addEventListener","removeEventListener","useWindowSize","style","setStyle","isDragging","setIsDragging","isLoadingModel","setIsLoadingModel","isLoaded","setIsLoaded","canvasRef","useRef","params","URLSearchParams","location","search","get","wearable","isLoadingWearable","wearableError","setImage","is3D","setIs3D","showImage","showCanvas","current","Rarity","getGradient","rarity","light","dark","backgroundImage","opacity","thumbnail","representation","representations","mainFile","endsWith","content","contents","find","key","loadWearable","console","log","warn","className","classNames","active","src","ref","onMouseDown","onMouseUp","React","memo","ReactDOM","StrictMode","document","getElementById"],"mappings":"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","file":"static/js/main.7dacfc54.chunk.js","sourcesContent":["import {\n ArcRotateCamera,\n BoundingInfo,\n Camera,\n Color4,\n DirectionalLight,\n Engine,\n GlowLayer,\n HemisphericLight,\n Mesh,\n Scene,\n SceneLoader,\n SpotLight,\n Vector3,\n} from '@babylonjs/core'\nimport '@babylonjs/loaders'\nimport future from 'fp-future'\n\nconst hideMaterialList = ['hair_mat', 'avatarskin_mat']\n\nfunction refreshBoundingInfo(parent: Mesh) {\n const children = parent.getChildren().filter((mesh) => mesh.id !== '__root__')\n if (children.length > 0) {\n const child = children[0] as Mesh\n // child.showBoundingBox = true\n let boundingInfo = child.getBoundingInfo()\n\n let min = boundingInfo.boundingBox.minimumWorld.add(child.position)\n let max = boundingInfo.boundingBox.maximumWorld.add(child.position)\n\n for (let i = 1; i < children.length; i++) {\n const child = children[i] as Mesh\n // child.showBoundingBox = true\n boundingInfo = child.getBoundingInfo()\n const siblingMin = boundingInfo.boundingBox.minimumWorld.add(child.position)\n const siblingMax = boundingInfo.boundingBox.maximumWorld.add(child.position)\n\n min = Vector3.Minimize(min, siblingMin)\n max = Vector3.Maximize(max, siblingMax)\n }\n\n parent.setBoundingInfo(new BoundingInfo(min, max))\n }\n}\n\nexport async function loadWearable(canvas: HTMLCanvasElement, url: string, extension = '.glb') {\n // Create engine\n const engine = new Engine(canvas, true, {\n preserveDrawingBuffer: true,\n stencil: true,\n })\n\n // Load GLTF\n const root = new Scene(engine)\n root.autoClear = true\n root.clearColor = new Color4(0, 0, 0, 0) //Color3.FromHexString(Rarity.getColor(Rarity.UNIQUE)).toColor4()\n root.preventDefaultOnPointerDown = false\n const sceneFuture = future<Scene>()\n const sceneResolver = (scene: Scene) => scene.onReadyObservable.addOnce(() => sceneFuture.resolve(scene))\n SceneLoader.Append(url, '', root, sceneResolver, null, null, extension)\n const scene = await sceneFuture\n\n // effects\n var glow = new GlowLayer('glow', scene, {\n mainTextureFixedSize: 1024,\n blurKernelSize: 64,\n })\n glow.intensity = 1\n\n // Setup Camera\n var camera = new ArcRotateCamera('camera', 0, 0, 0, new Vector3(0, 0, 0), scene)\n camera.mode = Camera.PERSPECTIVE_CAMERA\n camera.position = new Vector3(-2, 2, 2)\n camera.useAutoRotationBehavior = true\n camera.setTarget(Vector3.Zero())\n camera.lowerRadiusLimit = camera.upperRadiusLimit = camera.radius\n camera.attachControl(canvas, true)\n\n // Setup lights\n var directional = new DirectionalLight('directional', new Vector3(0, 0, 1), scene)\n directional.intensity = 1\n var top = new HemisphericLight('top', new Vector3(0, -1, 0), scene)\n top.intensity = 1\n var bottom = new HemisphericLight('bottom', new Vector3(0, 1, 0), scene)\n bottom.intensity = 1\n var spot = new SpotLight('spot', new Vector3(-2, 2, 2), new Vector3(2, -2, -2), Math.PI / 2, 1000, scene)\n spot.intensity = 1\n\n // Setup parent\n var parent = new Mesh('parent', scene)\n for (const mesh of scene.meshes) {\n if (mesh !== parent) {\n mesh.setParent(parent)\n }\n }\n\n // Clean up\n for (const materialName of hideMaterialList) {\n for (let material of scene.materials) {\n if (material.name.toLowerCase().includes(materialName)) {\n material.alpha = 0\n scene.removeMaterial(material)\n }\n }\n for (let texture of scene.textures) {\n if (texture.name.toLowerCase().includes(materialName)) {\n texture.dispose()\n scene.removeTexture(texture)\n }\n }\n }\n\n // resize and center\n refreshBoundingInfo(parent)\n const bounds = parent.getBoundingInfo().boundingBox.extendSize\n const size = bounds.length()\n const scale = new Vector3(1 / size, 1 / size, 1 / size)\n parent.scaling = scale\n const center = parent.getBoundingInfo().boundingBox.center.multiply(scale)\n parent.position.subtractInPlace(center)\n\n // render loop\n engine.runRenderLoop(() => scene.render())\n}\n","import { Item, NFT } from '@dcl/schemas'\n\nconst NFT_API_URL = 'https://nft-api.decentraland.org'\n\nclass NFTApi {\n async fetchItem(contractAddress: string, itemId: string) {\n const resp = await fetch(`${NFT_API_URL}/v1/items?contractAddress=${contractAddress}&itemId=${itemId}`)\n const { data }: { data: Item[] } = await resp.json()\n if (data.length === 0) {\n throw new Error(`Item not found for contractAddress=\"${contractAddress}\" itemId=\"${itemId}\"`)\n }\n return data[0]\n }\n async fetchNFT(contractAddress: string, tokenId: string) {\n const resp = await fetch(`${NFT_API_URL}/v1/nfts?contractAddress=${contractAddress}&tokenId=${tokenId}`)\n const { data }: { data: { nft: NFT }[] } = await resp.json()\n if (data.length === 0) {\n throw new Error(`NFT not found for contractAddress=\"${contractAddress}\" tokenId=\"${tokenId}\"`)\n }\n return data[0].nft\n }\n}\n\nexport const nftApi = new NFTApi()\n","import { Wearable as WearableBroken, WearableRepresentation } from '@dcl/schemas'\n\nconst PEER_URL = 'https://peer.decentraland.org'\n\ntype Wearable = Omit<WearableBroken, 'data'> & {\n data: Omit<WearableBroken['data'], 'representations'> & {\n representations: (Omit<WearableRepresentation, 'contents'> & { contents: { key: string; url: string }[] })[]\n }\n}\n\nclass PeerApi {\n async fetchWearable(urn: string) {\n const resp = await fetch(`${PEER_URL}/lambdas/collections/wearables?wearableId=${urn}`)\n const { wearables }: { wearables: Wearable[] } = await resp.json()\n if (wearables.length === 0) {\n throw new Error(`Wearable not found for urn=\"${urn}\"`)\n }\n return wearables[0]\n }\n}\n\nexport const peerApi = new PeerApi()\n","import { Network } from '@dcl/schemas'\nimport { nftApi } from '../lib/api/nft'\nimport { peerApi } from '../lib/api/peer'\nimport { useFetch } from './useFetch'\n\nexport function useWearable(options: { contractAddress: string; itemId?: string | null; tokenId?: string | null }) {\n let { contractAddress, itemId, tokenId } = options\n const [wearable, isWearableLoading, wearableError] = useFetch(async () => {\n if (!contractAddress) {\n throw new Error('You must provide a valid contract address')\n }\n let urn = `urn:decentraland:matic:collections-v2:${contractAddress}:${itemId}`\n if (!itemId && !tokenId) {\n throw new Error(`You must provide either tokenId or itemId`)\n } else if (!itemId && tokenId) {\n const nft = await nftApi.fetchNFT(contractAddress, tokenId)\n urn =\n nft.network !== Network.ETHEREUM\n ? `urn:decentraland:matic:collections-v2:${contractAddress}:${nft.itemId}`\n : nft.image.split('contents/')[1].split('/thumbnail')[0] // since the Ethereum collections have a different URN, we extract it from the image path\n }\n return peerApi.fetchWearable(urn)\n })\n\n return [wearable, isWearableLoading, wearableError] as const\n}\n","import { useEffect, useState } from 'react'\n\nexport function useFetch<T>(fetcher: () => Promise<T>) {\n const [isLoading, setIsLoading] = useState(false)\n const [result, setResult] = useState<T | null>(null)\n const [error, setError] = useState('')\n useEffect(() => {\n setIsLoading(true)\n fetcher()\n .then((result) => setResult(result))\n .catch((error) => setError(error.message))\n .finally(() => setIsLoading(false))\n }, [])\n return [result, isLoading, error] as const\n}\n","import React, { useEffect, useRef, useState } from 'react'\nimport { Rarity } from '@dcl/schemas'\nimport { Center, Loader } from 'decentraland-ui'\nimport classNames from 'classnames'\nimport { loadWearable } from '../../lib/babylon'\nimport { useWearable } from '../../hooks/useWearable'\nimport { useWindowSize } from '../../hooks/useWindowSize'\nimport './Preview.css'\n\nconst Preview: React.FC = () => {\n const [previewError, setPreviewError] = useState('')\n const { width, height } = useWindowSize()\n const [style, setStyle] = useState<React.CSSProperties>({})\n const [isDragging, setIsDragging] = useState(false)\n const [isLoadingModel, setIsLoadingModel] = useState(true)\n const [isLoaded, setIsLoaded] = useState(false)\n const canvasRef = useRef<HTMLCanvasElement>(null)\n const params = new URLSearchParams(window.location.search)\n const contractAddress = params.get('contract')!\n const tokenId = params.get('token')\n const itemId = params.get('item')\n const [wearable, isLoadingWearable, wearableError] = useWearable({ contractAddress, tokenId, itemId })\n const [image, setImage] = useState('')\n const [is3D, setIs3D] = useState(true)\n\n const error = previewError || wearableError\n const isLoading = (isLoadingModel || isLoadingWearable) && !error\n const showImage = !!image && !is3D && !isLoading\n const showCanvas = is3D && !isLoading\n\n useEffect(() => {\n if (canvasRef.current && wearable) {\n // rarity background\n const [light, dark] = Rarity.getGradient(wearable.rarity)\n const backgroundImage = `radial-gradient(${light}, ${dark})`\n setStyle({ backgroundImage, opacity: 1 })\n\n // set background image\n setImage(wearable.thumbnail)\n\n // load model or image (for texture only wearables)\n const representation = wearable.data.representations[0]\n if (representation.mainFile.endsWith('png')) {\n setIs3D(false)\n setIsLoadingModel(false)\n setIsLoaded(true)\n } else {\n // load model\n const content = representation.contents.find((content) => content.key === representation.mainFile)\n if (content) {\n loadWearable(canvasRef.current, content.url)\n .then(() => console.log('done'))\n .catch((error) => setPreviewError(error.message))\n .finally(() => {\n console.log('finally')\n setIsLoadingModel(false)\n setIsLoaded(true)\n })\n } else {\n console.warn('Content not found for wearable', wearable)\n setPreviewError('Content not found')\n }\n }\n }\n }, [canvasRef.current, wearable])\n\n return (\n <div\n className={classNames('Preview', {\n 'is-dragging': isDragging,\n 'is-loading': isLoading,\n 'is-loaded': isLoaded,\n 'is-3d': is3D,\n 'has-error': !!error,\n })}\n style={style}\n >\n {isLoading && (\n <Center>\n <Loader active size=\"large\" />\n </Center>\n )}\n <img\n src={image}\n className={classNames('thumbnail', {\n 'is-visible': showImage,\n })}\n />\n <canvas\n id=\"wearable-preview\"\n className={classNames({\n 'is-visible': showCanvas,\n })}\n width={width}\n height={height}\n ref={canvasRef}\n onMouseDown={() => setIsDragging(is3D && !error)}\n onMouseUp={() => setIsDragging(false)}\n ></canvas>\n {error && <div className=\"error\">{error}</div>}\n </div>\n )\n}\n\nexport default React.memo(Preview)\n","import { useState, useEffect } from 'react'\n\n// Define general type for useWindowSize hook, which includes width and height\ninterface Size {\n width: number | undefined\n height: number | undefined\n}\n\nexport function useWindowSize(): Size {\n // Initialize state with undefined width/height so server and client renders match\n // Learn more here: https://joshwcomeau.com/react/the-perils-of-rehydration/\n const [windowSize, setWindowSize] = useState<Size>({\n width: undefined,\n height: undefined,\n })\n useEffect(() => {\n // Handler to call on window resize\n function handleResize() {\n // Set window width/height to state\n setWindowSize({\n width: window.innerWidth,\n height: window.innerHeight,\n })\n }\n // Add event listener\n window.addEventListener('resize', handleResize)\n // Call handler right away so state gets updated with initial window size\n handleResize()\n // Remove event listener on cleanup\n return () => window.removeEventListener('resize', handleResize)\n }, []) // Empty array ensures that effect is only run on mount\n return windowSize\n}\n","import React from 'react'\nimport ReactDOM from 'react-dom'\nimport './index.css'\nimport { Preview } from './components/Preview'\n\nReactDOM.render(\n <React.StrictMode>\n <Preview />\n </React.StrictMode>,\n document.getElementById('root')\n)\n"],"sourceRoot":""}
@@ -0,0 +1,2 @@
1
+ !function(e){function r(r){for(var n,l,a=r[0],i=r[1],p=r[2],c=0,s=[];c<a.length;c++)l=a[c],Object.prototype.hasOwnProperty.call(o,l)&&o[l]&&s.push(o[l][0]),o[l]=0;for(n in i)Object.prototype.hasOwnProperty.call(i,n)&&(e[n]=i[n]);for(f&&f(r);s.length;)s.shift()();return u.push.apply(u,p||[]),t()}function t(){for(var e,r=0;r<u.length;r++){for(var t=u[r],n=!0,a=1;a<t.length;a++){var i=t[a];0!==o[i]&&(n=!1)}n&&(u.splice(r--,1),e=l(l.s=t[0]))}return e}var n={},o={1:0},u=[];function l(r){if(n[r])return n[r].exports;var t=n[r]={i:r,l:!1,exports:{}};return e[r].call(t.exports,t,t.exports,l),t.l=!0,t.exports}l.m=e,l.c=n,l.d=function(e,r,t){l.o(e,r)||Object.defineProperty(e,r,{enumerable:!0,get:t})},l.r=function(e){"undefined"!==typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},l.t=function(e,r){if(1&r&&(e=l(e)),8&r)return e;if(4&r&&"object"===typeof e&&e&&e.__esModule)return e;var t=Object.create(null);if(l.r(t),Object.defineProperty(t,"default",{enumerable:!0,value:e}),2&r&&"string"!=typeof e)for(var n in e)l.d(t,n,function(r){return e[r]}.bind(null,n));return t},l.n=function(e){var r=e&&e.__esModule?function(){return e.default}:function(){return e};return l.d(r,"a",r),r},l.o=function(e,r){return Object.prototype.hasOwnProperty.call(e,r)},l.p="/";var a=this["webpackJsonp@dcl/wearable-preview"]=this["webpackJsonp@dcl/wearable-preview"]||[],i=a.push.bind(a);a.push=r,a=a.slice();for(var p=0;p<a.length;p++)r(a[p]);var f=i;t()}([]);
2
+ //# sourceMappingURL=runtime-main.e9e23d7b.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../webpack/bootstrap"],"names":["webpackJsonpCallback","data","moduleId","chunkId","chunkIds","moreModules","executeModules","i","resolves","length","Object","prototype","hasOwnProperty","call","installedChunks","push","modules","parentJsonpFunction","shift","deferredModules","apply","checkDeferredModules","result","deferredModule","fulfilled","j","depId","splice","__webpack_require__","s","installedModules","exports","module","l","m","c","d","name","getter","o","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","p","jsonpArray","this","oldJsonpFunction","slice"],"mappings":"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","file":"static/js/runtime-main.e9e23d7b.js","sourcesContent":[" \t// install a JSONP callback for chunk loading\n \tfunction webpackJsonpCallback(data) {\n \t\tvar chunkIds = data[0];\n \t\tvar moreModules = data[1];\n \t\tvar executeModules = data[2];\n\n \t\t// add \"moreModules\" to the modules object,\n \t\t// then flag all \"chunkIds\" as loaded and fire callback\n \t\tvar moduleId, chunkId, i = 0, resolves = [];\n \t\tfor(;i < chunkIds.length; i++) {\n \t\t\tchunkId = chunkIds[i];\n \t\t\tif(Object.prototype.hasOwnProperty.call(installedChunks, chunkId) && installedChunks[chunkId]) {\n \t\t\t\tresolves.push(installedChunks[chunkId][0]);\n \t\t\t}\n \t\t\tinstalledChunks[chunkId] = 0;\n \t\t}\n \t\tfor(moduleId in moreModules) {\n \t\t\tif(Object.prototype.hasOwnProperty.call(moreModules, moduleId)) {\n \t\t\t\tmodules[moduleId] = moreModules[moduleId];\n \t\t\t}\n \t\t}\n \t\tif(parentJsonpFunction) parentJsonpFunction(data);\n\n \t\twhile(resolves.length) {\n \t\t\tresolves.shift()();\n \t\t}\n\n \t\t// add entry modules from loaded chunk to deferred list\n \t\tdeferredModules.push.apply(deferredModules, executeModules || []);\n\n \t\t// run deferred modules when all chunks ready\n \t\treturn checkDeferredModules();\n \t};\n \tfunction checkDeferredModules() {\n \t\tvar result;\n \t\tfor(var i = 0; i < deferredModules.length; i++) {\n \t\t\tvar deferredModule = deferredModules[i];\n \t\t\tvar fulfilled = true;\n \t\t\tfor(var j = 1; j < deferredModule.length; j++) {\n \t\t\t\tvar depId = deferredModule[j];\n \t\t\t\tif(installedChunks[depId] !== 0) fulfilled = false;\n \t\t\t}\n \t\t\tif(fulfilled) {\n \t\t\t\tdeferredModules.splice(i--, 1);\n \t\t\t\tresult = __webpack_require__(__webpack_require__.s = deferredModule[0]);\n \t\t\t}\n \t\t}\n\n \t\treturn result;\n \t}\n\n \t// The module cache\n \tvar installedModules = {};\n\n \t// object to store loaded and loading chunks\n \t// undefined = chunk not loaded, null = chunk preloaded/prefetched\n \t// Promise = chunk loading, 0 = chunk loaded\n \tvar installedChunks = {\n \t\t1: 0\n \t};\n\n \tvar deferredModules = [];\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"/\";\n\n \tvar jsonpArray = this[\"webpackJsonp@dcl/wearable-preview\"] = this[\"webpackJsonp@dcl/wearable-preview\"] || [];\n \tvar oldJsonpFunction = jsonpArray.push.bind(jsonpArray);\n \tjsonpArray.push = webpackJsonpCallback;\n \tjsonpArray = jsonpArray.slice();\n \tfor(var i = 0; i < jsonpArray.length; i++) webpackJsonpCallback(jsonpArray[i]);\n \tvar parentJsonpFunction = oldJsonpFunction;\n\n\n \t// run deferred modules from other chunks\n \tcheckDeferredModules();\n"],"sourceRoot":""}