@weaverse/react 0.7.52 → 0.7.53

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 (3) hide show
  1. package/dist/index.js +1394 -1
  2. package/dist/index.mjs +1362 -1
  3. package/package.json +3 -3
package/dist/index.mjs CHANGED
@@ -1 +1,1362 @@
1
- var Ze=Object.defineProperty;var G=(e,t)=>{for(var o in t)Ze(e,o,{get:t[o],enumerable:!0})};export*from"@weaverse/core";import{Weaverse as Zt}from"@weaverse/core";import{createContext as Jt}from"react";import*as S from"react";import{useContext as Je}from"react";var Y=S.forwardRef((e,t)=>{let{isDesignMode:o}=Je(h),{text:r,clickAction:n,linkTo:i,openInNewTab:l,...a}=e;return n==="none"?S.createElement("button",{ref:t,...a},r):S.createElement("a",{ref:t,href:o?void 0:i,target:l?"_blank":"_self",rel:"noreferrer",...a},r)});Y.defaultProps={type:"button",text:"Button",clickAction:"none",linkTo:"",openInNewTab:!1};var K={"@desktop":{borderRadius:"8px",border:"none",backgroundColor:"#393e46",color:"#fff",fontSize:"14px",fontWeight:"medium",padding:"10px 20px",height:"42px",minWidth:"120px",textDecoration:"none",textAlign:"center",":hover":{backgroundColor:"#222831"}}},q=Y;import Re,{forwardRef as et}from"react";var X=et((e,t)=>{let{children:o,...r}=e;return Re.createElement("div",{ref:t,...r},o)}),Z={"@desktop":{display:"flex",alignItems:"flex-start",justifyContent:"flex-start",gridArea:"1 / 1 / 3 / 6",overflow:"hidden"}};X.defaultProps={};var J=X;import b,{forwardRef as nt,useContext as it,useEffect as lt}from"react";var Q=["days","hours","minutes","seconds"],L="wv-cd-evergreen-start",R="https://graph.instagram.com";import ot from"clsx";function rt(e){return{"@desktop":e["@desktop"],"@mobile":e["@mobile"]}}var z={};function ee(e,t){let{css:o,type:r,className:n=""}=e.data,i="",l="",a=e.Element?.permanentCss;if(a)if(r in z)l=z[r];else{let{className:d}=t.css(a)();Object.assign(z,{[r]:d}),l=d}if(i=l,o){let d=rt(o),g=t.css(d)().className||"",{stitchesClass:v}=e,p=(e.ref.current?.className||"").replace(v,"").replace(n,"").replace(l,"").trim();i=ot(l,n,g,p),e.stitchesClass=g}return i}function te(e){let t=6e4,o=60*t,r=24*o,n=Math.floor(e/r),i=Math.floor((e-n*r)/o),l=Math.floor((e-n*r-i*o)/t),a=Math.floor((e-n*r-i*o-l*t)/1e3);return{days:n,hours:i,minutes:l,seconds:a}}function oe(e){let t=e.match(/(?:https?:\/\/)?(?:www\.)?(?:youtube\.com|youtu\.be)\/(?:watch\?v=)?(.+)/);return t?t[1]:null}function re(e){let t=e.match(/(?:https?:\/\/)?(?:www\.)?vimeo\.com\/(.+)/);return t?t[1]:null}import A from"react";function ne({value:e,label:t}){return A.createElement("div",{className:"wv-cd-block"},A.createElement("div",{className:"wv-cd-number"},typeof e=="string"?e:e.toString().padStart(2,"0")),t&&A.createElement("div",{className:"wv-cd-label"},t))}var ie=nt((e,t)=>{let{isDesignMode:o}=it(h),{timerType:r,startTime:n,endTime:i,periods:l,redirectWhenTimerStops:a,redirectUrl:d,openInNewTab:g,showColon:v,showLabel:p,...c}=e,[u,f]=b.useState(0),x=l*60*1e3,k=()=>{!o&&a&&d&&window.open(d,g?"_blank":"_self")},T=()=>{let m=n;if(r==="evergreen"){let I=localStorage.getItem(L);I?(m=Number.parseInt(I),m+x<Date.now()&&(m=Date.now(),localStorage.setItem(L,m.toString()))):(m=Date.now(),localStorage.setItem(L,m.toString()))}return m},D=m=>m<Date.now()&&i>Date.now(),H=()=>{let m=T(),I=r==="fixed-time"?i:m+x,O=D(m)?Math.max(I-Date.now(),0):0;O>0&&O<1e3&&k(),f(O)};lt(()=>{let m=setInterval(H,1e3);return()=>{clearInterval(m)}},[n,i,x,r]);let Xe=te(u);return b.createElement("div",{ref:t,...c},Q.map(m=>b.createElement(b.Fragment,{key:m},b.createElement(ne,{label:p?m:"",value:u===0?"--":Xe[m]}),m!=="seconds"&&b.createElement("div",{className:"wv-cd-separator"},v&&b.createElement("span",null,":")))))}),le={"@desktop":{fontFamily:"Inter",fontSize:"36px",fontWeight:500,display:"flex",alignItems:"center",overflow:"hidden",justifyContent:"center",gap:10,lineHeight:"initial",".wv-cd-block":{width:48,textAlign:"center",".wv-cd-label":{fontSize:10}},".wv-cd-separator":{span:{lineHeight:"100%"},".hidden":{visibility:"hidden"}}}};ie.defaultProps={timerType:"fixed-time",startTime:Date.now(),endTime:Date.now()+1e3*60*60*24,periods:90,redirectWhenTimerStops:!1,redirectUrl:"",openInNewTab:!1,showLabel:!0,showColon:!0};var se=ie;import M from"react";var ae=M.forwardRef((e,t)=>{let{src:o,alt:r,objectFit:n,objectPosition:i,clickAction:l,openLinkInNewTab:a,linkTo:d,...g}=e,v={"--img-object-fit":n,"--img-object-position":i},p=M.createElement("img",{alt:r,"data-blink-src":o});return l==="openLink"&&d&&(p=M.createElement("a",{href:d,target:a?"_blank":"_self"},p)),M.createElement("div",{ref:t,...g,style:v},p)}),pe={"@desktop":{display:"flex",overflow:"hidden",img:{width:"100%",height:"100%",objectFit:"var(--img-object-fit, cover)",objectPosition:"var(--img-object-position, center)"}}};ae.defaultProps={src:"https://ucarecdn.com/cf54e41e-36a0-4547-a140-a302e0387890/",alt:"Image alt text",objectFit:"cover",objectPosition:"center",clickAction:"none",openLinkInNewTab:!1,linkTo:""};var me=ae;import W,{forwardRef as mt}from"react";import de from"react";function ce(e){let{bgColor:t,imgUrl:o,objectFit:r,objectPosition:n}=e,i={["--layout-bg-color"]:t,["--layout-bg-image-object-fit"]:r,["--layout-bg-image-position"]:n};return o||t?de.createElement("div",{style:i,className:"wv-layout-background"},o&&de.createElement("img",{width:"100%",height:"100%","data-blink-src":o,alt:"Section background"})):null}import pt from"react";function ue(e){let{enableOverlay:t,overlayOpacity:o}=e;if(t){let r={["--layout-overlay-opacity"]:o/100};return pt.createElement("div",{className:"wv-layout-overlay",style:r})}return null}var fe=mt((e,t)=>{let{children:o,rows:r,gap:n,rowSize:i,columns:l,contentSize:a,gridSize:d,backgroundColor:g,backgroundImage:v,objectFit:p,objectPosition:c,enableOverlay:u,overlayOpacity:f,...x}=e,k={"--layout-content-width":"100vw","--content-size":a+"px","--grid-size":d+"px","--rows":r,"--columns":l,"--gap":n+"px","--row-size":i+"px","--col-size":"calc((var(--grid-size) - calc(var(--columns) - 1) * var(--gap)) / var(--columns))"};return W.createElement("div",{ref:t,...x,style:k},W.createElement(ce,{imgUrl:v,bgColor:g,objectFit:p,objectPosition:c}),W.createElement(ue,{enableOverlay:u,overlayOpacity:f}),W.createElement("div",{"data-layout-content":!0},o))}),ge={"@desktop":{position:"relative","> [data-layout-content]":{paddingTop:"var(--gap)",paddingBottom:"var(--gap)",margin:"0 auto",display:"grid",gridTemplateRows:"repeat(var(--rows), var(--row-size))",gridTemplateColumns:"calc((var(--layout-content-width) - var(--content-size)) / 2) 1fr repeat(var(--columns), minmax(0, var(--col-size))) 1fr calc((var(--layout-content-width) - var(--content-size)) / 2)",gridAutoRows:"var(--row-size)",gap:"var(--gap)",maxWidth:"var(--layout-content-width)"},".wv-layout-background":{display:"block",position:"absolute",inset:0,backgroundColor:"var(--layout-bg-color)",img:{objectFit:"var(--layout-bg-image-object-fit, cover)",objectPosition:"var(--layout-bg-image-position, 50% 50%)"}},".wv-layout-overlay":{display:"block",position:"absolute",inset:0,backgroundColor:"rgba(0, 0, 0, var(--layout-overlay-opacity, 0.5))"}},"@mobile":{padding:"0 16px","> [data-layout-content]":{display:"flex",flexDirection:"column"}}};fe.defaultProps={contentSize:1600,gridSize:1224,rows:16,columns:12,gap:16,rowSize:48};var ve=fe;import ye,{forwardRef as ct}from"react";var he=ct((e,t)=>{let{place:o,zoom:r,...n}=e;return ye.createElement("div",{ref:t,...n},ye.createElement("iframe",{loading:"lazy",width:"100%",height:"100%",title:"map",src:`https://maps.google.com/maps?z=${r}&t=m&q=${o}&ie=UTF8&&output=embed`,style:{pointerEvents:"none"}}))}),we={"@desktop":{iframe:{border:"none"}},"@mobile":{iframe:{border:"none"}}};he.defaultProps={place:"Hanoi",zoom:14};var xe=he;import*as E from"react";var be=E.forwardRef((e,t)=>{let{children:o,value:r,...n}=e;return E.createElement("div",{ref:t,...n},E.createElement("div",{className:"wv-text-content",dangerouslySetInnerHTML:{__html:r}}))}),Ce={"@desktop":{padding:"10px",overflow:"hidden",".wv-text-content":{wordBreak:"break-word",overflowWrap:"break-word",whiteSpace:"break-spaces"}}};be.defaultProps={value:"<p>The quick brown fox jumps over the lazy dog</p>"};var Pe=be;import j,{forwardRef as yt,useContext as ht}from"react";import B from"react";function ke(e){let{src:t,type:o,controls:r,autoPlay:n,loop:i,muted:l}=e;return B.createElement("video",{controls:r,autoPlay:n,loop:i,muted:l,controlsList:"nodownload",disablePictureInPicture:!0},B.createElement("source",{src:t,type:o||"video/mp4"}),B.createElement("source",{src:t,type:"video/ogg"}),"Your browser does not support the video tag.")}import gt from"react";function Se(e){let{vimeoId:t,controls:o,autoPlay:r,loop:n,muted:i}=e,l=`autoplay=${r}&loop=${n}&controls=${o}&muted=${i}`,a=`https://player.vimeo.com/video/${t}?${l}`;return gt.createElement("iframe",{src:a,width:"100%",height:"100%",allowFullScreen:!0})}import vt from"react";function Ee(e){let{youtubeId:t,controls:o,autoPlay:r,loop:n,muted:i}=e,l=new URLSearchParams({autoplay:r?"1":"0",controls:o?"1":"0",loop:n?"1":"0",mute:i?"1":"0"}),a=`https://www.youtube.com/embed/${t}?playlist=${t}&${l.toString()}`;return vt.createElement("iframe",{src:a,width:"100%",height:"100%",allowFullScreen:!0,allow:`accelerometer;${r?"autoplay;":""} clipboard-write; encrypted-media; gyroscope; picture-in-picture`})}var Te=yt((e,t)=>{let{isDesignMode:o}=ht(h),{src:r,controls:n,poster:i,autoPlay:l,loop:a,muted:d,...g}=e,p={src:r,controls:n,poster:i,autoPlay:!o&&l,loop:a,muted:d},c,u=oe(r),f=re(r);return u?c=j.createElement(Ee,{...p,youtubeId:u}):f?c=j.createElement(Se,{...p,vimeoId:f}):c=j.createElement(ke,{...p}),j.createElement("div",{ref:t,...g},c)}),Ie={"@desktop":{video:{height:"100%",width:"100%",aspectRatio:"16 / 9"},iframe:{border:"none"}},"@mobile":{iframe:{border:"none"}}};Te.defaultProps={src:"https://youtu.be/wM-NT6hcw48",poster:"https://ucarecdn.com/c413b8fe-ceec-4948-9c42-a0434c4ca920/-/preview/-/quality/smart/-/format/auto/",loop:!1,controls:!1,autoPlay:!0,muted:!0};var Le=Te;import w,{forwardRef as Kt,useEffect as qt,useState as $e}from"react";import V,{forwardRef as xt}from"react";var bt=xt((e,t)=>{let{element:o,children:r,...n}=e;return V.createElement("div",{"data-wv-placeholder":!0,ref:t,...n},V.createElement("div",{style:{fontWeight:600,marginBottom:"10px"}},o),V.createElement("div",null,r))}),Me=bt;var $={};G($,{Modal:()=>$t,ModalClose:()=>Ae,ModalContent:()=>ze,ModalHeader:()=>Gt,ModalTrigger:()=>Ut});import{Close as Bt,Portal as Vt,Root as _t,Trigger as Ft}from"@radix-ui/react-dialog";import y,{forwardRef as F}from"react";import Wt from"react";var _={};G(_,{ArrowLeft:()=>Et,ArrowRight:()=>Tt,CircleNotch:()=>Ct,Eye:()=>Mt,Image:()=>It,Minus:()=>kt,Plus:()=>St,ShoppingCart:()=>Lt,X:()=>Pt});import s from"react";var Ct=e=>s.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24",...e},s.createElement("circle",{style:{opacity:".25"},cx:"12",cy:"12",r:"10",stroke:"currentColor",strokeWidth:"4"}),s.createElement("path",{style:{opacity:".75"},fill:"currentColor",d:"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z"})),Pt=e=>s.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",width:"20",height:"20",fill:"currentColor",viewBox:"0 0 256 256",...e},s.createElement("rect",{width:"256",height:"256",fill:"none"}),s.createElement("line",{x1:"200",y1:"56",x2:"56",y2:"200",fill:"none",stroke:"currentColor",strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:"12"}),s.createElement("line",{x1:"200",y1:"200",x2:"56",y2:"56",fill:"none",stroke:"currentColor",strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:"12"})),kt=e=>s.createElement("svg",{width:"196",height:"196",fill:"currentColor",stroke:"currentColor",xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 384 512",...e},s.createElement("path",{d:"M376 232H8c-4.42 0-8 3.58-8 8v32c0 4.42 3.58 8 8 8h368c4.42 0 8-3.58 8-8v-32c0-4.42-3.58-8-8-8z"})),St=e=>s.createElement("svg",{width:"196",height:"196",fill:"currentColor",stroke:"currentColor",xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 384 512",...e},s.createElement("path",{d:"M376 232H216V72c0-4.42-3.58-8-8-8h-32c-4.42 0-8 3.58-8 8v160H8c-4.42 0-8 3.58-8 8v32c0 4.42 3.58 8 8 8h160v160c0 4.42 3.58 8 8 8h32c4.42 0 8-3.58 8-8V280h160c4.42 0 8-3.58 8-8v-32c0-4.42-3.58-8-8-8z"})),Et=e=>s.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",width:"192",height:"192",fill:"currentColor",viewBox:"0 0 256 256",...e},s.createElement("rect",{width:"256",height:"256",fill:"none"}),s.createElement("line",{x1:"216",y1:"128",x2:"40",y2:"128",fill:"none",stroke:"currentColor",strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:"16"}),s.createElement("polyline",{points:"112 56 40 128 112 200",fill:"none",stroke:"currentColor",strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:"16"})),Tt=e=>s.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",width:"192",height:"192",fill:"currentColor",viewBox:"0 0 256 256",...e},s.createElement("rect",{width:"256",height:"256",fill:"none"}),s.createElement("line",{x1:"40",y1:"128",x2:"216",y2:"128",fill:"none",stroke:"currentColor",strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:"16"}),s.createElement("polyline",{points:"144 56 216 128 144 200",fill:"none",stroke:"currentColor",strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:"16"})),It=e=>s.createElement("svg",{xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true",fill:"currentColor",viewBox:"0 0 640 512",...e},s.createElement("path",{d:"M480 80C480 35.82 515.8 0 560 0C604.2 0 640 35.82 640 80C640 124.2 604.2 160 560 160C515.8 160 480 124.2 480 80zM0 456.1C0 445.6 2.964 435.3 8.551 426.4L225.3 81.01C231.9 70.42 243.5 64 256 64C268.5 64 280.1 70.42 286.8 81.01L412.7 281.7L460.9 202.7C464.1 196.1 472.2 192 480 192C487.8 192 495 196.1 499.1 202.7L631.1 419.1C636.9 428.6 640 439.7 640 450.9C640 484.6 612.6 512 578.9 512H55.91C25.03 512 .0006 486.1 .0006 456.1L0 456.1z"})),Lt=e=>s.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",width:"192",height:"192",fill:"currentColor",viewBox:"0 0 256 256",...e},s.createElement("rect",{width:"256",height:"256",fill:"none"}),s.createElement("path",{d:"M184,184H69.8L41.9,30.6A8,8,0,0,0,34.1,24H16",fill:"none",stroke:"currentColor",strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:"16"}),s.createElement("circle",{cx:"80",cy:"204",r:"20",fill:"none",stroke:"currentColor",strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:"16"}),s.createElement("circle",{cx:"184",cy:"204",r:"20",fill:"none",stroke:"currentColor",strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:"16"}),s.createElement("path",{d:"M62.5,144H188.1a15.9,15.9,0,0,0,15.7-13.1L216,64H48",fill:"none",stroke:"currentColor",strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:"16"})),Mt=e=>s.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",width:"192",height:"192",fill:"currentColor",viewBox:"0 0 256 256",...e},s.createElement("rect",{width:"256",height:"256",fill:"none"}),s.createElement("path",{d:"M128,56C48,56,16,128,16,128s32,72,112,72,112-72,112-72S208,56,128,56Z",fill:"none",stroke:"currentColor",strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:"12"}),s.createElement("circle",{cx:"128",cy:"128",r:"40",fill:"none",stroke:"currentColor",strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:"12"}));import jt from"clsx";function P({name:e,className:t,...o}){let r=_[e],n=jt("wv-icon",t);return Wt.createElement(r,{className:n,...o})}import{Content as Nt,Overlay as Dt,Title as Ht}from"@radix-ui/react-dialog";import{keyframes as We,styled as N}from"@stitches/react";var Ot=We({"0%":{opacity:0},"100%":{opacity:1}}),zt=We({"0%":{opacity:0,transform:"translate(-50%, -48%) scale(.96)"},"100%":{opacity:1,transform:"translate(-50%, -50%) scale(1)"}}),je=N(Dt,{display:"block !important",backgroundColor:"rgba(0, 0, 0, .3)",position:"fixed",zIndex:9999,inset:0,animation:`${Ot} 300ms cubic-bezier(0.16, 1, 0.3, 1)`}),Ne=N(Ht,{margin:"0 0 24px",fontWeight:500,fontSize:24,"@media (max-width: 768px)":{margin:"0 0 16px",fontSize:20}}),De=N(Nt,{backgroundColor:"white",borderRadius:6,boxShadow:"hsl(206 22% 7% / 35%) 0px 10px 38px -10px, hsl(206 22% 7% / 20%) 0px 10px 20px -15px",position:"fixed",top:"50%",left:"50%",transform:"translate(-50%, -50%)",padding:24,animation:`${zt} 300ms cubic-bezier(0.16, 1, 0.3, 1)`,zIndex:9999,maxWidth:"90vw",width:"auto","*":{maxWidth:"100%"},"&:focus":{outline:"none"},'&[data-size="fullscreen"]':{width:"100vw",height:"100vh",maxWidth:"100vw",borderRadius:0},"@media (max-width: 768px)":{width:"90vw",padding:12,'&[data-size="fullscreen"]':{width:"100vw"}}}),He=N("button",{all:"unset",cursor:"pointer",fontFamily:"inherit",borderRadius:"100%",height:25,width:25,padding:4,display:"inline-flex",alignItems:"center",justifyContent:"center",color:"rgb(55, 65, 81)",position:"absolute",top:8,right:8,"&:hover":{backgroundColor:"rgba(112, 112, 112, .1)"},svg:{width:20,height:20}});import{useEffect as At}from"react";function Oe(e){let{open:t,defaultOpen:o,onOpenChange:r}=e;return At(()=>{t||o?document.body.classList.add("wv-modal-open"):document.body.classList.remove("wv-modal-open")},[t,o]),i=>{i?document.body.classList.add("wv-modal-open"):document.body.classList.remove("wv-modal-open"),r?.(i)}}var $t=e=>{let{children:t,open:o,defaultOpen:r,onOpenChange:n,...i}=e,l=Oe(e);return y.createElement(_t,{open:o,defaultOpen:r,onOpenChange:l,...i},t)},Ut=Ft,Gt=F((e,t)=>{let{children:o,...r}=e;return y.createElement(Ne,{ref:t,...r,"data-wv-modal-header":!0},o)}),ze=F((e,t)=>{let{children:o,size:r,portal:n,...i}=e,l=y.createElement(y.Fragment,null,y.createElement(je,null),y.createElement(De,{...i,onCloseAutoFocus:a=>a.preventDefault(),"data-wv-modal":!0,"data-size":r,ref:t},y.createElement(Ae,null),y.createElement("div",{className:"wv-modal-content"},o)));return n?y.createElement(Vt,null,l):l});ze.defaultProps={size:"auto",portal:!1};var Ae=F((e,t)=>{let{asChild:o,children:r,...n}=e,i=y.createElement(He,null,y.createElement(P,{name:"X"}));return y.createElement(Bt,{asChild:!0,...n,ref:t},o?r:i)});import Be from"react";function Ve(){return Be.createElement("span",{className:"wv-spinner-wrapper"},Be.createElement(P,{name:"CircleNotch",className:"wv-spinner"}))}import Yt from"react";function _e({children:e}){return Yt.createElement("span",{className:"wv-tooltip"},e)}var Fe={Placeholder:Me,Spinner:Ve,ModalComponents:$,Icon:P,Tooltip:_e};var Xt=Kt((e,t)=>{let{token:o,username:r,numberOfImages:n,imagesPerRow:i,gap:l,...a}=e,[d,g]=$e([]),[v,p]=$e(null);if(qt(()=>{if(o){let u=new URLSearchParams({access_token:o,fields:"id,media_type,caption,media_url,permalink,thumbnail_url"});fetch(`${R}/me/media?${u.toString()}`).then(f=>f.json()).then(f=>{f.error?p(f):(p(null),g([...f.data]))}).catch(p)}},[o]),!o||v)return w.createElement("div",{ref:t,...a},w.createElement(Fe.Placeholder,{element:"Instagram"},o?"Invalid or expired token!":"Connect to Instagram to display photos on your site."));let c={"--wv-ig-images-per-row":i,"--wv-ig-images-gap":l+"px"};return w.createElement("div",{ref:t,...a,style:c},w.createElement("div",{className:"wv-ig-media-container"},d.slice(0,n).map(u=>{let{id:f,permalink:x,caption:k,media_url:T,media_type:D,thumbnail_url:H}=u;return D==="VIDEO"?w.createElement("video",{key:f,controls:!0,poster:H},w.createElement("source",{src:T,type:"video/mp4"})):w.createElement("a",{key:f,href:x,target:"_blank",rel:"noreferrer"},w.createElement("img",{alt:k,src:T}))})))});Xt.defaultProps={token:"",username:"",numberOfImages:8,imagesPerRow:4,gap:0};var U={Countdown:{Component:se,type:"countdown",defaultCss:le},Button:{Component:q,type:"button",defaultCss:K},Container:{Component:J,type:"container",defaultCss:Z},Image:{Component:me,type:"image",defaultCss:pe},Layout:{Component:ve,type:"layout",defaultCss:ge},Map:{Component:xe,type:"map",defaultCss:we},Text:{Component:Pe,type:"text",defaultCss:Ce},Video:{Component:Le,type:"video",defaultCss:Ie}};var Cr=e=>{let t=new Zt(e);return Object.keys(U).forEach(o=>{t.registerElement(U[o])}),t},h=Jt({}),Ue=h.Provider,Pr=h.Consumer;import{isBrowser as Qt}from"@weaverse/core";import C,{useContext as Ge,useEffect as Ye,useRef as Rt,useState as Ke}from"react";var Lr=({context:e})=>{let[,t]=Ke(e.projectData),o=Rt(),r=()=>t({});Ye(()=>(e.subscribe(r),e.contentRootElement=o.current,()=>{e.unsubscribe(r)}),[]);let n=e?.studioBridge?.eventHandlers||{},i=e.stitchesInstance.theme.className;return e.projectData?.rootId?C.createElement("div",{className:`weaverse-content-root ${i}`,...n,ref:o},C.createElement(Ue,{value:e},C.createElement(qe,{id:e.projectData.rootId}))):null},eo=({instance:e})=>{let{stitchesInstance:t,elementInstances:o}=Ge(h),[r,n]=Ke(e.data),{id:i,type:l,childIds:a=[],css:d,className:g,...v}=r;Ye(()=>{let c=u=>n({...u});return e.subscribe(c),Qt&&!e.ref.current&&Object.assign(e.ref,{current:document.querySelector(`[data-wv-id="${i}"]`)}),()=>e.unsubscribe(c)},[]);let p=o.get(l);if(p?.Component){let c=p.Component;return c.$$typeof===Symbol.for("react.forward_ref")&&(v.ref=e.ref),C.createElement(c,{key:i,"data-wv-type":l,"data-wv-id":i,className:ee(e,t),...v},a.map(u=>C.createElement(qe,{key:u,id:u})))}else return console.log(`Unknown element: ${l}`),null},qe=({id:e})=>{let t=Ge(h),{itemInstances:o}=t,r=o.get(e);return r?C.createElement(eo,{key:e,instance:r}):C.createElement("div",{style:{display:"none"}},"Item instance ",e," not found")};export{Fe as Components,U as Elements,h as WeaverseContext,Pr as WeaverseContextConsumer,Ue as WeaverseContextProvider,Lr as WeaverseRoot,Cr as createRootContext};
1
+ var __defProp = Object.defineProperty;
2
+ var __export = (target, all) => {
3
+ for (var name in all)
4
+ __defProp(target, name, { get: all[name], enumerable: true });
5
+ };
6
+
7
+ // src/index.ts
8
+ export * from "@weaverse/core";
9
+
10
+ // src/context.ts
11
+ import { Weaverse } from "@weaverse/core";
12
+ import { createContext } from "react";
13
+
14
+ // src/elements/Button.tsx
15
+ import * as React from "react";
16
+ import { useContext } from "react";
17
+ var Button = React.forwardRef((props, ref) => {
18
+ let { isDesignMode } = useContext(WeaverseContext);
19
+ let { text, clickAction, linkTo, openInNewTab, ...rest } = props;
20
+ if (clickAction === "none") {
21
+ return /* @__PURE__ */ React.createElement("button", {
22
+ ref,
23
+ ...rest
24
+ }, text);
25
+ }
26
+ return /* @__PURE__ */ React.createElement("a", {
27
+ ref,
28
+ href: !isDesignMode ? linkTo : void 0,
29
+ target: openInNewTab ? "_blank" : "_self",
30
+ rel: "noreferrer",
31
+ ...rest
32
+ }, text);
33
+ });
34
+ Button.defaultProps = {
35
+ type: "button",
36
+ text: "Button",
37
+ clickAction: "none",
38
+ linkTo: "",
39
+ openInNewTab: false
40
+ };
41
+ var css = {
42
+ "@desktop": {
43
+ borderRadius: "8px",
44
+ border: "none",
45
+ backgroundColor: "#393e46",
46
+ color: "#fff",
47
+ fontSize: "14px",
48
+ fontWeight: "medium",
49
+ padding: "10px 20px",
50
+ height: "42px",
51
+ minWidth: "120px",
52
+ textDecoration: "none",
53
+ textAlign: "center",
54
+ ":hover": {
55
+ backgroundColor: "#222831"
56
+ }
57
+ }
58
+ };
59
+ var Button_default = Button;
60
+
61
+ // src/elements/Container.tsx
62
+ import React2, { forwardRef as forwardRef2 } from "react";
63
+ var Container = forwardRef2(
64
+ (props, ref) => {
65
+ let { children, ...rest } = props;
66
+ return /* @__PURE__ */ React2.createElement("div", {
67
+ ref,
68
+ ...rest
69
+ }, children);
70
+ }
71
+ );
72
+ var css2 = {
73
+ "@desktop": {
74
+ display: "flex",
75
+ alignItems: "flex-start",
76
+ justifyContent: "flex-start",
77
+ gridArea: "1 / 1 / 3 / 6",
78
+ overflow: "hidden"
79
+ }
80
+ };
81
+ Container.defaultProps = {};
82
+ var Container_default = Container;
83
+
84
+ // src/elements/Countdown/index.tsx
85
+ import React4, { forwardRef as forwardRef3, useContext as useContext2, useEffect } from "react";
86
+
87
+ // src/constant/index.ts
88
+ var TIMES = ["days", "hours", "minutes", "seconds"];
89
+ var COUNTDOWN_KEY = "wv-cd-evergreen-start";
90
+ var INSTAGRAM_API = "https://graph.instagram.com";
91
+
92
+ // src/utils/css.ts
93
+ import clsx from "clsx";
94
+ function formatCSS(css9) {
95
+ return {
96
+ "@desktop": css9["@desktop"],
97
+ "@mobile": css9["@mobile"]
98
+ };
99
+ }
100
+ var permanentClasses = {};
101
+ function generateItemClassName(instance, stitchesInstance) {
102
+ let { css: css9, type, className: cls = "" } = instance.data;
103
+ let className = "";
104
+ let permanentClass = "";
105
+ let perCss = instance.Element?.permanentCss;
106
+ if (perCss) {
107
+ if (type in permanentClasses) {
108
+ permanentClass = permanentClasses[type];
109
+ } else {
110
+ let { className: perCls } = stitchesInstance.css(perCss)();
111
+ Object.assign(permanentClasses, { [type]: perCls });
112
+ permanentClass = perCls;
113
+ }
114
+ }
115
+ className = permanentClass;
116
+ if (css9) {
117
+ let formattedCss = formatCSS(css9);
118
+ let newStitchesClass = stitchesInstance.css(formattedCss)().className || "";
119
+ let { stitchesClass } = instance;
120
+ let otherClass = (instance.ref.current?.className || "").replace(stitchesClass, "").replace(cls, "").replace(permanentClass, "").trim();
121
+ className = clsx(permanentClass, cls, newStitchesClass, otherClass);
122
+ instance.stitchesClass = newStitchesClass;
123
+ }
124
+ return className;
125
+ }
126
+
127
+ // src/utils/index.ts
128
+ function getTime(_seconds) {
129
+ let ONE_MINUTE = 60 * 1e3;
130
+ let ONE_HOUR = 60 * ONE_MINUTE;
131
+ let ONE_DAY = 24 * ONE_HOUR;
132
+ let days = Math.floor(_seconds / ONE_DAY);
133
+ let hours = Math.floor((_seconds - days * ONE_DAY) / ONE_HOUR);
134
+ let minutes = Math.floor(
135
+ (_seconds - days * ONE_DAY - hours * ONE_HOUR) / ONE_MINUTE
136
+ );
137
+ let seconds = Math.floor(
138
+ (_seconds - days * ONE_DAY - hours * ONE_HOUR - minutes * ONE_MINUTE) / 1e3
139
+ );
140
+ return { days, hours, minutes, seconds };
141
+ }
142
+ function getYoutubeEmbedId(url) {
143
+ const match = url.match(
144
+ /(?:https?:\/\/)?(?:www\.)?(?:youtube\.com|youtu\.be)\/(?:watch\?v=)?(.+)/
145
+ );
146
+ return match ? match[1] : null;
147
+ }
148
+ function getVimeoId(url) {
149
+ const match = url.match(/(?:https?:\/\/)?(?:www\.)?vimeo\.com\/(.+)/);
150
+ return match ? match[1] : null;
151
+ }
152
+
153
+ // src/elements/Countdown/TimerBlock.tsx
154
+ import React3 from "react";
155
+ function TimerBlock({ value, label }) {
156
+ return /* @__PURE__ */ React3.createElement("div", {
157
+ className: "wv-cd-block"
158
+ }, /* @__PURE__ */ React3.createElement("div", {
159
+ className: "wv-cd-number"
160
+ }, typeof value === "string" ? value : value.toString().padStart(2, "0")), label && /* @__PURE__ */ React3.createElement("div", {
161
+ className: "wv-cd-label"
162
+ }, label));
163
+ }
164
+
165
+ // src/elements/Countdown/index.tsx
166
+ var Countdown = forwardRef3(
167
+ (props, ref) => {
168
+ const { isDesignMode } = useContext2(WeaverseContext);
169
+ let {
170
+ timerType,
171
+ startTime: startTimeProp,
172
+ endTime: endTimeProp,
173
+ periods: periodsProp,
174
+ redirectWhenTimerStops,
175
+ redirectUrl,
176
+ openInNewTab,
177
+ showColon,
178
+ showLabel,
179
+ ...rest
180
+ } = props;
181
+ const [remaining, setRemaining] = React4.useState(0);
182
+ let periods = periodsProp * 60 * 1e3;
183
+ const handleEnd = () => {
184
+ if (!isDesignMode && redirectWhenTimerStops && redirectUrl)
185
+ window.open(redirectUrl, openInNewTab ? "_blank" : "_self");
186
+ };
187
+ const getStartTime = () => {
188
+ let startTime = startTimeProp;
189
+ if (timerType === "evergreen") {
190
+ const start = localStorage.getItem(COUNTDOWN_KEY);
191
+ if (start) {
192
+ startTime = Number.parseInt(start);
193
+ if (startTime + periods < Date.now()) {
194
+ startTime = Date.now();
195
+ localStorage.setItem(COUNTDOWN_KEY, startTime.toString());
196
+ }
197
+ } else {
198
+ startTime = Date.now();
199
+ localStorage.setItem(COUNTDOWN_KEY, startTime.toString());
200
+ }
201
+ }
202
+ return startTime;
203
+ };
204
+ const checkActive = (startTime) => startTime < Date.now() && endTimeProp > Date.now();
205
+ const handleRemaining = () => {
206
+ let startTime = getStartTime();
207
+ let endTime = timerType === "fixed-time" ? endTimeProp : startTime + periods;
208
+ let isActive = checkActive(startTime);
209
+ const remainingTime = isActive ? Math.max(endTime - Date.now(), 0) : 0;
210
+ if (remainingTime > 0 && remainingTime < 1e3) {
211
+ handleEnd();
212
+ }
213
+ setRemaining(remainingTime);
214
+ };
215
+ useEffect(() => {
216
+ let intervalFlag = setInterval(
217
+ handleRemaining,
218
+ 1e3
219
+ );
220
+ return () => {
221
+ clearInterval(intervalFlag);
222
+ };
223
+ }, [startTimeProp, endTimeProp, periods, timerType]);
224
+ const timer = getTime(remaining);
225
+ return /* @__PURE__ */ React4.createElement("div", {
226
+ ref,
227
+ ...rest
228
+ }, TIMES.map((time) => {
229
+ return /* @__PURE__ */ React4.createElement(React4.Fragment, {
230
+ key: time
231
+ }, /* @__PURE__ */ React4.createElement(TimerBlock, {
232
+ label: showLabel ? time : "",
233
+ value: remaining === 0 ? "--" : timer[time]
234
+ }), time !== "seconds" && /* @__PURE__ */ React4.createElement("div", {
235
+ className: "wv-cd-separator"
236
+ }, showColon && /* @__PURE__ */ React4.createElement("span", null, ":")));
237
+ }));
238
+ }
239
+ );
240
+ var css3 = {
241
+ "@desktop": {
242
+ fontFamily: "Inter",
243
+ fontSize: "36px",
244
+ fontWeight: 500,
245
+ display: "flex",
246
+ alignItems: "center",
247
+ overflow: "hidden",
248
+ justifyContent: "center",
249
+ gap: 10,
250
+ lineHeight: "initial",
251
+ ".wv-cd-block": {
252
+ width: 48,
253
+ textAlign: "center",
254
+ ".wv-cd-label": {
255
+ fontSize: 10
256
+ }
257
+ },
258
+ ".wv-cd-separator": {
259
+ span: {
260
+ lineHeight: "100%"
261
+ },
262
+ ".hidden": {
263
+ visibility: "hidden"
264
+ }
265
+ }
266
+ }
267
+ };
268
+ Countdown.defaultProps = {
269
+ timerType: "fixed-time",
270
+ startTime: Date.now(),
271
+ endTime: Date.now() + 1e3 * 60 * 60 * 24,
272
+ periods: 90,
273
+ redirectWhenTimerStops: false,
274
+ redirectUrl: "",
275
+ openInNewTab: false,
276
+ showLabel: true,
277
+ showColon: true
278
+ };
279
+ var Countdown_default = Countdown;
280
+
281
+ // src/elements/Image.tsx
282
+ import React5 from "react";
283
+ var Image = React5.forwardRef(
284
+ (props, ref) => {
285
+ let {
286
+ src,
287
+ alt,
288
+ objectFit,
289
+ objectPosition,
290
+ clickAction,
291
+ openLinkInNewTab,
292
+ linkTo,
293
+ ...rest
294
+ } = props;
295
+ let style = {
296
+ "--img-object-fit": objectFit,
297
+ "--img-object-position": objectPosition
298
+ };
299
+ let content = /* @__PURE__ */ React5.createElement("img", {
300
+ alt,
301
+ "data-blink-src": src
302
+ });
303
+ if (clickAction === "openLink" && linkTo) {
304
+ let target = openLinkInNewTab ? "_blank" : "_self";
305
+ content = /* @__PURE__ */ React5.createElement("a", {
306
+ href: linkTo,
307
+ target
308
+ }, content);
309
+ }
310
+ return /* @__PURE__ */ React5.createElement("div", {
311
+ ref,
312
+ ...rest,
313
+ style
314
+ }, content);
315
+ }
316
+ );
317
+ var css4 = {
318
+ "@desktop": {
319
+ display: "flex",
320
+ overflow: "hidden",
321
+ img: {
322
+ width: "100%",
323
+ height: "100%",
324
+ objectFit: "var(--img-object-fit, cover)",
325
+ objectPosition: "var(--img-object-position, center)"
326
+ }
327
+ }
328
+ };
329
+ Image.defaultProps = {
330
+ src: "https://ucarecdn.com/cf54e41e-36a0-4547-a140-a302e0387890/",
331
+ alt: "Image alt text",
332
+ objectFit: "cover",
333
+ objectPosition: "center",
334
+ clickAction: "none",
335
+ openLinkInNewTab: false,
336
+ linkTo: ""
337
+ };
338
+ var Image_default = Image;
339
+
340
+ // src/elements/Layout/index.tsx
341
+ import React8, { forwardRef as forwardRef4 } from "react";
342
+
343
+ // src/elements/Layout/Background.tsx
344
+ import React6 from "react";
345
+ function Background(props) {
346
+ let { bgColor, imgUrl, objectFit, objectPosition } = props;
347
+ let style = {
348
+ ["--layout-bg-color"]: bgColor,
349
+ ["--layout-bg-image-object-fit"]: objectFit,
350
+ ["--layout-bg-image-position"]: objectPosition
351
+ };
352
+ if (imgUrl || bgColor) {
353
+ return /* @__PURE__ */ React6.createElement("div", {
354
+ style,
355
+ className: "wv-layout-background"
356
+ }, imgUrl && /* @__PURE__ */ React6.createElement("img", {
357
+ width: "100%",
358
+ height: "100%",
359
+ "data-blink-src": imgUrl,
360
+ alt: "Section background"
361
+ }));
362
+ }
363
+ return null;
364
+ }
365
+
366
+ // src/elements/Layout/Overlay.tsx
367
+ import React7 from "react";
368
+ function Overlay(props) {
369
+ let { enableOverlay, overlayOpacity } = props;
370
+ if (enableOverlay) {
371
+ let style = {
372
+ ["--layout-overlay-opacity"]: overlayOpacity / 100
373
+ };
374
+ return /* @__PURE__ */ React7.createElement("div", {
375
+ className: "wv-layout-overlay",
376
+ style
377
+ });
378
+ }
379
+ return null;
380
+ }
381
+
382
+ // src/elements/Layout/index.tsx
383
+ var Layout = forwardRef4((props, ref) => {
384
+ let {
385
+ children,
386
+ rows,
387
+ gap,
388
+ rowSize,
389
+ columns,
390
+ contentSize,
391
+ gridSize,
392
+ backgroundColor,
393
+ backgroundImage,
394
+ objectFit,
395
+ objectPosition,
396
+ enableOverlay,
397
+ overlayOpacity,
398
+ ...rest
399
+ } = props;
400
+ let style = {
401
+ "--layout-content-width": "100vw",
402
+ "--content-size": contentSize + "px",
403
+ "--grid-size": gridSize + "px",
404
+ "--rows": rows,
405
+ "--columns": columns,
406
+ "--gap": gap + "px",
407
+ "--row-size": rowSize + "px",
408
+ "--col-size": "calc((var(--grid-size) - calc(var(--columns) - 1) * var(--gap)) / var(--columns))"
409
+ };
410
+ return /* @__PURE__ */ React8.createElement("div", {
411
+ ref,
412
+ ...rest,
413
+ style
414
+ }, /* @__PURE__ */ React8.createElement(Background, {
415
+ imgUrl: backgroundImage,
416
+ bgColor: backgroundColor,
417
+ objectFit,
418
+ objectPosition
419
+ }), /* @__PURE__ */ React8.createElement(Overlay, {
420
+ enableOverlay,
421
+ overlayOpacity
422
+ }), /* @__PURE__ */ React8.createElement("div", {
423
+ "data-layout-content": true
424
+ }, children));
425
+ });
426
+ var css5 = {
427
+ "@desktop": {
428
+ position: "relative",
429
+ "> [data-layout-content]": {
430
+ paddingTop: "var(--gap)",
431
+ paddingBottom: "var(--gap)",
432
+ margin: "0 auto",
433
+ display: "grid",
434
+ gridTemplateRows: "repeat(var(--rows), var(--row-size))",
435
+ gridTemplateColumns: "calc((var(--layout-content-width) - var(--content-size)) / 2) 1fr repeat(var(--columns), minmax(0, var(--col-size))) 1fr calc((var(--layout-content-width) - var(--content-size)) / 2)",
436
+ gridAutoRows: "var(--row-size)",
437
+ gap: "var(--gap)",
438
+ maxWidth: "var(--layout-content-width)"
439
+ },
440
+ ".wv-layout-background": {
441
+ display: "block",
442
+ position: "absolute",
443
+ inset: 0,
444
+ backgroundColor: "var(--layout-bg-color)",
445
+ img: {
446
+ objectFit: "var(--layout-bg-image-object-fit, cover)",
447
+ objectPosition: "var(--layout-bg-image-position, 50% 50%)"
448
+ }
449
+ },
450
+ ".wv-layout-overlay": {
451
+ display: "block",
452
+ position: "absolute",
453
+ inset: 0,
454
+ backgroundColor: "rgba(0, 0, 0, var(--layout-overlay-opacity, 0.5))"
455
+ }
456
+ },
457
+ "@mobile": {
458
+ padding: "0 16px",
459
+ "> [data-layout-content]": {
460
+ display: "flex",
461
+ flexDirection: "column"
462
+ }
463
+ }
464
+ };
465
+ Layout.defaultProps = {
466
+ contentSize: 1600,
467
+ gridSize: 1224,
468
+ rows: 16,
469
+ columns: 12,
470
+ gap: 16,
471
+ rowSize: 48
472
+ };
473
+ var Layout_default = Layout;
474
+
475
+ // src/elements/Map.tsx
476
+ import React9, { forwardRef as forwardRef5 } from "react";
477
+ var Map = forwardRef5((props, ref) => {
478
+ let { place, zoom, ...rest } = props;
479
+ return /* @__PURE__ */ React9.createElement("div", {
480
+ ref,
481
+ ...rest
482
+ }, /* @__PURE__ */ React9.createElement("iframe", {
483
+ loading: "lazy",
484
+ width: "100%",
485
+ height: "100%",
486
+ title: "map",
487
+ src: `https://maps.google.com/maps?z=${zoom}&t=m&q=${place}&ie=UTF8&&output=embed`,
488
+ style: { pointerEvents: "none" }
489
+ }));
490
+ });
491
+ var css6 = {
492
+ "@desktop": {
493
+ iframe: {
494
+ border: "none"
495
+ }
496
+ },
497
+ "@mobile": {
498
+ iframe: {
499
+ border: "none"
500
+ }
501
+ }
502
+ };
503
+ Map.defaultProps = {
504
+ place: "Hanoi",
505
+ zoom: 14
506
+ };
507
+ var Map_default = Map;
508
+
509
+ // src/elements/Text.tsx
510
+ import * as React10 from "react";
511
+ var Text = React10.forwardRef(
512
+ (props, ref) => {
513
+ let { children, value, ...rest } = props;
514
+ return /* @__PURE__ */ React10.createElement("div", {
515
+ ref,
516
+ ...rest
517
+ }, /* @__PURE__ */ React10.createElement("div", {
518
+ className: "wv-text-content",
519
+ dangerouslySetInnerHTML: { __html: value }
520
+ }));
521
+ }
522
+ );
523
+ var css7 = {
524
+ "@desktop": {
525
+ padding: "10px",
526
+ overflow: "hidden",
527
+ ".wv-text-content": {
528
+ wordBreak: "break-word",
529
+ overflowWrap: "break-word",
530
+ whiteSpace: "break-spaces"
531
+ }
532
+ }
533
+ };
534
+ Text.defaultProps = {
535
+ value: "<p>The quick brown fox jumps over the lazy dog</p>"
536
+ };
537
+ var Text_default = Text;
538
+
539
+ // src/elements/Video/index.tsx
540
+ import React14, { forwardRef as forwardRef7, useContext as useContext3 } from "react";
541
+
542
+ // src/elements/Video/HTMLVideo.tsx
543
+ import React11 from "react";
544
+ function HTMLVideo(props) {
545
+ let { src, type, controls, autoPlay, loop, muted } = props;
546
+ return /* @__PURE__ */ React11.createElement("video", {
547
+ controls,
548
+ autoPlay,
549
+ loop,
550
+ muted,
551
+ controlsList: "nodownload",
552
+ disablePictureInPicture: true
553
+ }, /* @__PURE__ */ React11.createElement("source", {
554
+ src,
555
+ type: type || "video/mp4"
556
+ }), /* @__PURE__ */ React11.createElement("source", {
557
+ src,
558
+ type: "video/ogg"
559
+ }), "Your browser does not support the video tag.");
560
+ }
561
+
562
+ // src/elements/Video/Vimeo.tsx
563
+ import React12 from "react";
564
+ function Vimeo(props) {
565
+ let { vimeoId, controls, autoPlay, loop, muted } = props;
566
+ let params = `autoplay=${autoPlay}&loop=${loop}&controls=${controls}&muted=${muted}`;
567
+ let vimeoSrc = `https://player.vimeo.com/video/${vimeoId}?${params}`;
568
+ return /* @__PURE__ */ React12.createElement("iframe", {
569
+ src: vimeoSrc,
570
+ width: "100%",
571
+ height: "100%",
572
+ allowFullScreen: true
573
+ });
574
+ }
575
+
576
+ // src/elements/Video/Youtube.tsx
577
+ import React13 from "react";
578
+ function Youtube(props) {
579
+ let { youtubeId, controls, autoPlay, loop, muted } = props;
580
+ let params = new URLSearchParams({
581
+ autoplay: autoPlay ? "1" : "0",
582
+ controls: controls ? "1" : "0",
583
+ loop: loop ? "1" : "0",
584
+ mute: muted ? "1" : "0"
585
+ });
586
+ let youtubeSrc = `https://www.youtube.com/embed/${youtubeId}?playlist=${youtubeId}&${params.toString()}`;
587
+ let allow = `accelerometer;${autoPlay ? "autoplay;" : ""} clipboard-write; encrypted-media; gyroscope; picture-in-picture`;
588
+ return /* @__PURE__ */ React13.createElement("iframe", {
589
+ src: youtubeSrc,
590
+ width: "100%",
591
+ height: "100%",
592
+ allowFullScreen: true,
593
+ allow
594
+ });
595
+ }
596
+
597
+ // src/elements/Video/index.tsx
598
+ var Video = forwardRef7((props, ref) => {
599
+ let { isDesignMode } = useContext3(WeaverseContext);
600
+ let {
601
+ src,
602
+ controls,
603
+ poster,
604
+ autoPlay: originAutoPlay,
605
+ loop,
606
+ muted,
607
+ ...rest
608
+ } = props;
609
+ let autoPlay = !isDesignMode && originAutoPlay;
610
+ let videoProps = { src, controls, poster, autoPlay, loop, muted };
611
+ let content;
612
+ let youtubeId = getYoutubeEmbedId(src);
613
+ let vimeoId = getVimeoId(src);
614
+ if (youtubeId) {
615
+ content = /* @__PURE__ */ React14.createElement(Youtube, {
616
+ ...videoProps,
617
+ youtubeId
618
+ });
619
+ } else if (vimeoId) {
620
+ content = /* @__PURE__ */ React14.createElement(Vimeo, {
621
+ ...videoProps,
622
+ vimeoId
623
+ });
624
+ } else {
625
+ content = /* @__PURE__ */ React14.createElement(HTMLVideo, {
626
+ ...videoProps
627
+ });
628
+ }
629
+ return /* @__PURE__ */ React14.createElement("div", {
630
+ ref,
631
+ ...rest
632
+ }, content);
633
+ });
634
+ var css8 = {
635
+ "@desktop": {
636
+ video: {
637
+ height: "100%",
638
+ width: "100%",
639
+ aspectRatio: "16 / 9"
640
+ },
641
+ iframe: {
642
+ border: "none"
643
+ }
644
+ },
645
+ "@mobile": {
646
+ iframe: {
647
+ border: "none"
648
+ }
649
+ }
650
+ };
651
+ Video.defaultProps = {
652
+ src: "https://youtu.be/wM-NT6hcw48",
653
+ poster: "https://ucarecdn.com/c413b8fe-ceec-4948-9c42-a0434c4ca920/-/preview/-/quality/smart/-/format/auto/",
654
+ loop: false,
655
+ controls: false,
656
+ autoPlay: true,
657
+ muted: true
658
+ };
659
+ var Video_default = Video;
660
+
661
+ // src/elements/Instagram.tsx
662
+ import React21, { forwardRef as forwardRef10, useEffect as useEffect4, useState } from "react";
663
+
664
+ // src/components/Placeholder.tsx
665
+ import React15, { forwardRef as forwardRef8 } from "react";
666
+ var Placeholder = forwardRef8(
667
+ (props, ref) => {
668
+ let { element, children, ...rest } = props;
669
+ return /* @__PURE__ */ React15.createElement("div", {
670
+ "data-wv-placeholder": true,
671
+ ref,
672
+ ...rest
673
+ }, /* @__PURE__ */ React15.createElement("div", {
674
+ style: { fontWeight: 600, marginBottom: "10px" }
675
+ }, element), /* @__PURE__ */ React15.createElement("div", null, children));
676
+ }
677
+ );
678
+ var Placeholder_default = Placeholder;
679
+
680
+ // src/components/Modal/index.tsx
681
+ var Modal_exports = {};
682
+ __export(Modal_exports, {
683
+ Modal: () => Modal,
684
+ ModalClose: () => ModalClose,
685
+ ModalContent: () => ModalContent,
686
+ ModalHeader: () => ModalHeader,
687
+ ModalTrigger: () => ModalTrigger
688
+ });
689
+ import { Close, Portal, Root, Trigger } from "@radix-ui/react-dialog";
690
+ import React18, { forwardRef as forwardRef9 } from "react";
691
+
692
+ // src/components/Icons/index.tsx
693
+ import React17 from "react";
694
+
695
+ // src/components/Icons/Phosphor.tsx
696
+ var Phosphor_exports = {};
697
+ __export(Phosphor_exports, {
698
+ ArrowLeft: () => ArrowLeft,
699
+ ArrowRight: () => ArrowRight,
700
+ CircleNotch: () => CircleNotch,
701
+ Eye: () => Eye,
702
+ Image: () => Image2,
703
+ Minus: () => Minus,
704
+ Plus: () => Plus,
705
+ ShoppingCart: () => ShoppingCart,
706
+ X: () => X
707
+ });
708
+ import React16 from "react";
709
+ var CircleNotch = (props) => {
710
+ return /* @__PURE__ */ React16.createElement("svg", {
711
+ xmlns: "http://www.w3.org/2000/svg",
712
+ fill: "none",
713
+ viewBox: "0 0 24 24",
714
+ ...props
715
+ }, /* @__PURE__ */ React16.createElement("circle", {
716
+ style: { opacity: ".25" },
717
+ cx: "12",
718
+ cy: "12",
719
+ r: "10",
720
+ stroke: "currentColor",
721
+ strokeWidth: "4"
722
+ }), /* @__PURE__ */ React16.createElement("path", {
723
+ style: { opacity: ".75" },
724
+ fill: "currentColor",
725
+ d: "M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z"
726
+ }));
727
+ };
728
+ var X = (props) => {
729
+ return /* @__PURE__ */ React16.createElement("svg", {
730
+ xmlns: "http://www.w3.org/2000/svg",
731
+ width: "20",
732
+ height: "20",
733
+ fill: "currentColor",
734
+ viewBox: "0 0 256 256",
735
+ ...props
736
+ }, /* @__PURE__ */ React16.createElement("rect", {
737
+ width: "256",
738
+ height: "256",
739
+ fill: "none"
740
+ }), /* @__PURE__ */ React16.createElement("line", {
741
+ x1: "200",
742
+ y1: "56",
743
+ x2: "56",
744
+ y2: "200",
745
+ fill: "none",
746
+ stroke: "currentColor",
747
+ strokeLinecap: "round",
748
+ strokeLinejoin: "round",
749
+ strokeWidth: "12"
750
+ }), /* @__PURE__ */ React16.createElement("line", {
751
+ x1: "200",
752
+ y1: "200",
753
+ x2: "56",
754
+ y2: "56",
755
+ fill: "none",
756
+ stroke: "currentColor",
757
+ strokeLinecap: "round",
758
+ strokeLinejoin: "round",
759
+ strokeWidth: "12"
760
+ }));
761
+ };
762
+ var Minus = (props) => {
763
+ return /* @__PURE__ */ React16.createElement("svg", {
764
+ width: "196",
765
+ height: "196",
766
+ fill: "currentColor",
767
+ stroke: "currentColor",
768
+ xmlns: "http://www.w3.org/2000/svg",
769
+ viewBox: "0 0 384 512",
770
+ ...props
771
+ }, /* @__PURE__ */ React16.createElement("path", {
772
+ d: "M376 232H8c-4.42 0-8 3.58-8 8v32c0 4.42 3.58 8 8 8h368c4.42 0 8-3.58 8-8v-32c0-4.42-3.58-8-8-8z"
773
+ }));
774
+ };
775
+ var Plus = (props) => {
776
+ return /* @__PURE__ */ React16.createElement("svg", {
777
+ width: "196",
778
+ height: "196",
779
+ fill: "currentColor",
780
+ stroke: "currentColor",
781
+ xmlns: "http://www.w3.org/2000/svg",
782
+ viewBox: "0 0 384 512",
783
+ ...props
784
+ }, /* @__PURE__ */ React16.createElement("path", {
785
+ d: "M376 232H216V72c0-4.42-3.58-8-8-8h-32c-4.42 0-8 3.58-8 8v160H8c-4.42 0-8 3.58-8 8v32c0 4.42 3.58 8 8 8h160v160c0 4.42 3.58 8 8 8h32c4.42 0 8-3.58 8-8V280h160c4.42 0 8-3.58 8-8v-32c0-4.42-3.58-8-8-8z"
786
+ }));
787
+ };
788
+ var ArrowLeft = (props) => {
789
+ return /* @__PURE__ */ React16.createElement("svg", {
790
+ xmlns: "http://www.w3.org/2000/svg",
791
+ width: "192",
792
+ height: "192",
793
+ fill: "currentColor",
794
+ viewBox: "0 0 256 256",
795
+ ...props
796
+ }, /* @__PURE__ */ React16.createElement("rect", {
797
+ width: "256",
798
+ height: "256",
799
+ fill: "none"
800
+ }), /* @__PURE__ */ React16.createElement("line", {
801
+ x1: "216",
802
+ y1: "128",
803
+ x2: "40",
804
+ y2: "128",
805
+ fill: "none",
806
+ stroke: "currentColor",
807
+ strokeLinecap: "round",
808
+ strokeLinejoin: "round",
809
+ strokeWidth: "16"
810
+ }), /* @__PURE__ */ React16.createElement("polyline", {
811
+ points: "112 56 40 128 112 200",
812
+ fill: "none",
813
+ stroke: "currentColor",
814
+ strokeLinecap: "round",
815
+ strokeLinejoin: "round",
816
+ strokeWidth: "16"
817
+ }));
818
+ };
819
+ var ArrowRight = (props) => {
820
+ return /* @__PURE__ */ React16.createElement("svg", {
821
+ xmlns: "http://www.w3.org/2000/svg",
822
+ width: "192",
823
+ height: "192",
824
+ fill: "currentColor",
825
+ viewBox: "0 0 256 256",
826
+ ...props
827
+ }, /* @__PURE__ */ React16.createElement("rect", {
828
+ width: "256",
829
+ height: "256",
830
+ fill: "none"
831
+ }), /* @__PURE__ */ React16.createElement("line", {
832
+ x1: "40",
833
+ y1: "128",
834
+ x2: "216",
835
+ y2: "128",
836
+ fill: "none",
837
+ stroke: "currentColor",
838
+ strokeLinecap: "round",
839
+ strokeLinejoin: "round",
840
+ strokeWidth: "16"
841
+ }), /* @__PURE__ */ React16.createElement("polyline", {
842
+ points: "144 56 216 128 144 200",
843
+ fill: "none",
844
+ stroke: "currentColor",
845
+ strokeLinecap: "round",
846
+ strokeLinejoin: "round",
847
+ strokeWidth: "16"
848
+ }));
849
+ };
850
+ var Image2 = (props) => {
851
+ return /* @__PURE__ */ React16.createElement("svg", {
852
+ xmlns: "http://www.w3.org/2000/svg",
853
+ "aria-hidden": "true",
854
+ fill: "currentColor",
855
+ viewBox: "0 0 640 512",
856
+ ...props
857
+ }, /* @__PURE__ */ React16.createElement("path", {
858
+ d: "M480 80C480 35.82 515.8 0 560 0C604.2 0 640 35.82 640 80C640 124.2 604.2 160 560 160C515.8 160 480 124.2 480 80zM0 456.1C0 445.6 2.964 435.3 8.551 426.4L225.3 81.01C231.9 70.42 243.5 64 256 64C268.5 64 280.1 70.42 286.8 81.01L412.7 281.7L460.9 202.7C464.1 196.1 472.2 192 480 192C487.8 192 495 196.1 499.1 202.7L631.1 419.1C636.9 428.6 640 439.7 640 450.9C640 484.6 612.6 512 578.9 512H55.91C25.03 512 .0006 486.1 .0006 456.1L0 456.1z"
859
+ }));
860
+ };
861
+ var ShoppingCart = (props) => {
862
+ return /* @__PURE__ */ React16.createElement("svg", {
863
+ xmlns: "http://www.w3.org/2000/svg",
864
+ width: "192",
865
+ height: "192",
866
+ fill: "currentColor",
867
+ viewBox: "0 0 256 256",
868
+ ...props
869
+ }, /* @__PURE__ */ React16.createElement("rect", {
870
+ width: "256",
871
+ height: "256",
872
+ fill: "none"
873
+ }), /* @__PURE__ */ React16.createElement("path", {
874
+ d: "M184,184H69.8L41.9,30.6A8,8,0,0,0,34.1,24H16",
875
+ fill: "none",
876
+ stroke: "currentColor",
877
+ strokeLinecap: "round",
878
+ strokeLinejoin: "round",
879
+ strokeWidth: "16"
880
+ }), /* @__PURE__ */ React16.createElement("circle", {
881
+ cx: "80",
882
+ cy: "204",
883
+ r: "20",
884
+ fill: "none",
885
+ stroke: "currentColor",
886
+ strokeLinecap: "round",
887
+ strokeLinejoin: "round",
888
+ strokeWidth: "16"
889
+ }), /* @__PURE__ */ React16.createElement("circle", {
890
+ cx: "184",
891
+ cy: "204",
892
+ r: "20",
893
+ fill: "none",
894
+ stroke: "currentColor",
895
+ strokeLinecap: "round",
896
+ strokeLinejoin: "round",
897
+ strokeWidth: "16"
898
+ }), /* @__PURE__ */ React16.createElement("path", {
899
+ d: "M62.5,144H188.1a15.9,15.9,0,0,0,15.7-13.1L216,64H48",
900
+ fill: "none",
901
+ stroke: "currentColor",
902
+ strokeLinecap: "round",
903
+ strokeLinejoin: "round",
904
+ strokeWidth: "16"
905
+ }));
906
+ };
907
+ var Eye = (props) => {
908
+ return /* @__PURE__ */ React16.createElement("svg", {
909
+ xmlns: "http://www.w3.org/2000/svg",
910
+ width: "192",
911
+ height: "192",
912
+ fill: "currentColor",
913
+ viewBox: "0 0 256 256",
914
+ ...props
915
+ }, /* @__PURE__ */ React16.createElement("rect", {
916
+ width: "256",
917
+ height: "256",
918
+ fill: "none"
919
+ }), /* @__PURE__ */ React16.createElement("path", {
920
+ d: "M128,56C48,56,16,128,16,128s32,72,112,72,112-72,112-72S208,56,128,56Z",
921
+ fill: "none",
922
+ stroke: "currentColor",
923
+ strokeLinecap: "round",
924
+ strokeLinejoin: "round",
925
+ strokeWidth: "12"
926
+ }), /* @__PURE__ */ React16.createElement("circle", {
927
+ cx: "128",
928
+ cy: "128",
929
+ r: "40",
930
+ fill: "none",
931
+ stroke: "currentColor",
932
+ strokeLinecap: "round",
933
+ strokeLinejoin: "round",
934
+ strokeWidth: "12"
935
+ }));
936
+ };
937
+
938
+ // src/components/Icons/index.tsx
939
+ import clsx2 from "clsx";
940
+ function Icon({ name, className, ...props }) {
941
+ let WeaverseIcon = Phosphor_exports[name];
942
+ let cls = clsx2("wv-icon", className);
943
+ return /* @__PURE__ */ React17.createElement(WeaverseIcon, {
944
+ className: cls,
945
+ ...props
946
+ });
947
+ }
948
+
949
+ // src/components/Modal/styled.ts
950
+ import { Content, Overlay as Overlay2, Title } from "@radix-ui/react-dialog";
951
+ import { keyframes, styled } from "@stitches/react";
952
+ var overlayShow = keyframes({
953
+ "0%": { opacity: 0 },
954
+ "100%": { opacity: 1 }
955
+ });
956
+ var contentShow = keyframes({
957
+ "0%": { opacity: 0, transform: "translate(-50%, -48%) scale(.96)" },
958
+ "100%": { opacity: 1, transform: "translate(-50%, -50%) scale(1)" }
959
+ });
960
+ var StyledOverlay = styled(Overlay2, {
961
+ display: "block !important",
962
+ backgroundColor: "rgba(0, 0, 0, .3)",
963
+ position: "fixed",
964
+ zIndex: 9999,
965
+ inset: 0,
966
+ animation: `${overlayShow} 300ms cubic-bezier(0.16, 1, 0.3, 1)`
967
+ });
968
+ var StyledTitle = styled(Title, {
969
+ margin: "0 0 24px",
970
+ fontWeight: 500,
971
+ fontSize: 24,
972
+ "@media (max-width: 768px)": {
973
+ margin: "0 0 16px",
974
+ fontSize: 20
975
+ }
976
+ });
977
+ var StyledContent = styled(Content, {
978
+ backgroundColor: "white",
979
+ borderRadius: 6,
980
+ boxShadow: "hsl(206 22% 7% / 35%) 0px 10px 38px -10px, hsl(206 22% 7% / 20%) 0px 10px 20px -15px",
981
+ position: "fixed",
982
+ top: "50%",
983
+ left: "50%",
984
+ transform: "translate(-50%, -50%)",
985
+ padding: 24,
986
+ animation: `${contentShow} 300ms cubic-bezier(0.16, 1, 0.3, 1)`,
987
+ zIndex: 9999,
988
+ maxWidth: "90vw",
989
+ width: "auto",
990
+ "*": {
991
+ maxWidth: "100%"
992
+ },
993
+ "&:focus": { outline: "none" },
994
+ '&[data-size="fullscreen"]': {
995
+ width: "100vw",
996
+ height: "100vh",
997
+ maxWidth: "100vw",
998
+ borderRadius: 0
999
+ },
1000
+ "@media (max-width: 768px)": {
1001
+ width: "90vw",
1002
+ padding: 12,
1003
+ '&[data-size="fullscreen"]': {
1004
+ width: "100vw"
1005
+ }
1006
+ }
1007
+ });
1008
+ var StyledCloseIcon = styled("button", {
1009
+ all: "unset",
1010
+ cursor: "pointer",
1011
+ fontFamily: "inherit",
1012
+ borderRadius: "100%",
1013
+ height: 25,
1014
+ width: 25,
1015
+ padding: 4,
1016
+ display: "inline-flex",
1017
+ alignItems: "center",
1018
+ justifyContent: "center",
1019
+ color: "rgb(55, 65, 81)",
1020
+ position: "absolute",
1021
+ top: 8,
1022
+ right: 8,
1023
+ "&:hover": {
1024
+ backgroundColor: "rgba(112, 112, 112, .1)"
1025
+ },
1026
+ svg: {
1027
+ width: 20,
1028
+ height: 20
1029
+ }
1030
+ });
1031
+
1032
+ // src/components/Modal/useOpenChangeEffect.ts
1033
+ import { useEffect as useEffect2 } from "react";
1034
+ function useOpenChangeEffect(props) {
1035
+ let { open, defaultOpen, onOpenChange } = props;
1036
+ useEffect2(() => {
1037
+ let isOpen = open || defaultOpen;
1038
+ if (isOpen) {
1039
+ document.body.classList.add("wv-modal-open");
1040
+ } else {
1041
+ document.body.classList.remove("wv-modal-open");
1042
+ }
1043
+ }, [open, defaultOpen]);
1044
+ let handleOpenChange = (open2) => {
1045
+ if (open2) {
1046
+ document.body.classList.add("wv-modal-open");
1047
+ } else {
1048
+ document.body.classList.remove("wv-modal-open");
1049
+ }
1050
+ onOpenChange?.(open2);
1051
+ };
1052
+ return handleOpenChange;
1053
+ }
1054
+
1055
+ // src/components/Modal/index.tsx
1056
+ var Modal = (props) => {
1057
+ let { children, open, defaultOpen, onOpenChange, ...rest } = props;
1058
+ let handleOpenChange = useOpenChangeEffect(props);
1059
+ return /* @__PURE__ */ React18.createElement(Root, {
1060
+ open,
1061
+ defaultOpen,
1062
+ onOpenChange: handleOpenChange,
1063
+ ...rest
1064
+ }, children);
1065
+ };
1066
+ var ModalTrigger = Trigger;
1067
+ var ModalHeader = forwardRef9(
1068
+ (props, ref) => {
1069
+ let { children, ...rest } = props;
1070
+ return /* @__PURE__ */ React18.createElement(StyledTitle, {
1071
+ ref,
1072
+ ...rest,
1073
+ "data-wv-modal-header": true
1074
+ }, children);
1075
+ }
1076
+ );
1077
+ var ModalContent = forwardRef9(
1078
+ (props, ref) => {
1079
+ let { children, size, portal, ...rest } = props;
1080
+ let modalContent = /* @__PURE__ */ React18.createElement(React18.Fragment, null, /* @__PURE__ */ React18.createElement(StyledOverlay, null), /* @__PURE__ */ React18.createElement(StyledContent, {
1081
+ ...rest,
1082
+ onCloseAutoFocus: (e) => e.preventDefault(),
1083
+ "data-wv-modal": true,
1084
+ "data-size": size,
1085
+ ref
1086
+ }, /* @__PURE__ */ React18.createElement(ModalClose, null), /* @__PURE__ */ React18.createElement("div", {
1087
+ className: "wv-modal-content"
1088
+ }, children)));
1089
+ if (portal) {
1090
+ return /* @__PURE__ */ React18.createElement(Portal, null, modalContent);
1091
+ }
1092
+ return modalContent;
1093
+ }
1094
+ );
1095
+ ModalContent.defaultProps = {
1096
+ size: "auto",
1097
+ portal: false
1098
+ };
1099
+ var ModalClose = forwardRef9(
1100
+ (props, ref) => {
1101
+ let { asChild, children, ...rest } = props;
1102
+ let closeIcon = /* @__PURE__ */ React18.createElement(StyledCloseIcon, null, /* @__PURE__ */ React18.createElement(Icon, {
1103
+ name: "X"
1104
+ }));
1105
+ return /* @__PURE__ */ React18.createElement(Close, {
1106
+ asChild: true,
1107
+ ...rest,
1108
+ ref
1109
+ }, asChild ? children : closeIcon);
1110
+ }
1111
+ );
1112
+
1113
+ // src/components/Spinner.tsx
1114
+ import React19 from "react";
1115
+ function Spinner() {
1116
+ return /* @__PURE__ */ React19.createElement("span", {
1117
+ className: "wv-spinner-wrapper"
1118
+ }, /* @__PURE__ */ React19.createElement(Icon, {
1119
+ name: "CircleNotch",
1120
+ className: "wv-spinner"
1121
+ }));
1122
+ }
1123
+
1124
+ // src/components/Tooltip.tsx
1125
+ import React20 from "react";
1126
+ function Tooltip({ children }) {
1127
+ return /* @__PURE__ */ React20.createElement("span", {
1128
+ className: "wv-tooltip"
1129
+ }, children);
1130
+ }
1131
+
1132
+ // src/components/index.ts
1133
+ var Components = {
1134
+ Placeholder: Placeholder_default,
1135
+ Spinner,
1136
+ ModalComponents: Modal_exports,
1137
+ Icon,
1138
+ Tooltip
1139
+ };
1140
+
1141
+ // src/elements/Instagram.tsx
1142
+ var Instagram = forwardRef10(
1143
+ (props, ref) => {
1144
+ let { token, username, numberOfImages, imagesPerRow, gap, ...rest } = props;
1145
+ let [media, setMedia] = useState([]);
1146
+ let [error, setError] = useState(null);
1147
+ useEffect4(() => {
1148
+ if (token) {
1149
+ let params = new URLSearchParams({
1150
+ access_token: token,
1151
+ fields: "id,media_type,caption,media_url,permalink,thumbnail_url"
1152
+ });
1153
+ fetch(`${INSTAGRAM_API}/me/media?${params.toString()}`).then((res) => res.json()).then((res) => {
1154
+ if (res.error) {
1155
+ setError(res);
1156
+ } else {
1157
+ setError(null);
1158
+ setMedia([...res.data]);
1159
+ }
1160
+ }).catch(setError);
1161
+ }
1162
+ }, [token]);
1163
+ if (!token || error) {
1164
+ return /* @__PURE__ */ React21.createElement("div", {
1165
+ ref,
1166
+ ...rest
1167
+ }, /* @__PURE__ */ React21.createElement(Components.Placeholder, {
1168
+ element: "Instagram"
1169
+ }, !token ? "Connect to Instagram to display photos on your site." : "Invalid or expired token!"));
1170
+ }
1171
+ let style = {
1172
+ "--wv-ig-images-per-row": imagesPerRow,
1173
+ "--wv-ig-images-gap": gap + "px"
1174
+ };
1175
+ return /* @__PURE__ */ React21.createElement("div", {
1176
+ ref,
1177
+ ...rest,
1178
+ style
1179
+ }, /* @__PURE__ */ React21.createElement("div", {
1180
+ className: "wv-ig-media-container"
1181
+ }, media.slice(0, numberOfImages).map((item) => {
1182
+ let {
1183
+ id,
1184
+ permalink,
1185
+ caption,
1186
+ media_url,
1187
+ media_type,
1188
+ thumbnail_url
1189
+ } = item;
1190
+ if (media_type === "VIDEO") {
1191
+ return /* @__PURE__ */ React21.createElement("video", {
1192
+ key: id,
1193
+ controls: true,
1194
+ poster: thumbnail_url
1195
+ }, /* @__PURE__ */ React21.createElement("source", {
1196
+ src: media_url,
1197
+ type: "video/mp4"
1198
+ }));
1199
+ }
1200
+ return /* @__PURE__ */ React21.createElement("a", {
1201
+ key: id,
1202
+ href: permalink,
1203
+ target: "_blank",
1204
+ rel: "noreferrer"
1205
+ }, /* @__PURE__ */ React21.createElement("img", {
1206
+ alt: caption,
1207
+ src: media_url
1208
+ }));
1209
+ })));
1210
+ }
1211
+ );
1212
+ Instagram.defaultProps = {
1213
+ token: "",
1214
+ username: "",
1215
+ numberOfImages: 8,
1216
+ imagesPerRow: 4,
1217
+ gap: 0
1218
+ };
1219
+
1220
+ // src/elements/index.ts
1221
+ var Elements = {
1222
+ Countdown: {
1223
+ Component: Countdown_default,
1224
+ type: "countdown",
1225
+ defaultCss: css3
1226
+ },
1227
+ Button: {
1228
+ Component: Button_default,
1229
+ type: "button",
1230
+ defaultCss: css
1231
+ },
1232
+ Container: {
1233
+ Component: Container_default,
1234
+ type: "container",
1235
+ defaultCss: css2
1236
+ },
1237
+ Image: {
1238
+ Component: Image_default,
1239
+ type: "image",
1240
+ defaultCss: css4
1241
+ },
1242
+ Layout: {
1243
+ Component: Layout_default,
1244
+ type: "layout",
1245
+ defaultCss: css5
1246
+ },
1247
+ Map: {
1248
+ Component: Map_default,
1249
+ type: "map",
1250
+ defaultCss: css6
1251
+ },
1252
+ Text: {
1253
+ Component: Text_default,
1254
+ type: "text",
1255
+ defaultCss: css7
1256
+ },
1257
+ Video: {
1258
+ Component: Video_default,
1259
+ type: "video",
1260
+ defaultCss: css8
1261
+ }
1262
+ };
1263
+
1264
+ // src/context.ts
1265
+ var createRootContext = (configs) => {
1266
+ let rootContext = new Weaverse(configs);
1267
+ Object.keys(Elements).forEach((key) => {
1268
+ rootContext.registerElement(Elements[key]);
1269
+ });
1270
+ return rootContext;
1271
+ };
1272
+ var WeaverseContext = createContext({});
1273
+ var WeaverseContextProvider = WeaverseContext.Provider;
1274
+ var WeaverseContextConsumer = WeaverseContext.Consumer;
1275
+
1276
+ // src/renderer.tsx
1277
+ import { isBrowser } from "@weaverse/core";
1278
+ import React22, { useContext as useContext4, useEffect as useEffect5, useRef, useState as useState2 } from "react";
1279
+ var WeaverseRoot = ({ context }) => {
1280
+ let [, setData] = useState2(context.projectData);
1281
+ let rootRef = useRef();
1282
+ let renderRoot = () => setData({});
1283
+ useEffect5(() => {
1284
+ context.subscribe(renderRoot);
1285
+ context.contentRootElement = rootRef.current;
1286
+ return () => {
1287
+ context.unsubscribe(renderRoot);
1288
+ };
1289
+ }, []);
1290
+ let eventHandlers = context?.studioBridge?.eventHandlers || {};
1291
+ let themeClass = context.stitchesInstance.theme.className;
1292
+ if (context.projectData?.rootId) {
1293
+ return /* @__PURE__ */ React22.createElement("div", {
1294
+ className: `weaverse-content-root ${themeClass}`,
1295
+ ...eventHandlers,
1296
+ ref: rootRef
1297
+ }, /* @__PURE__ */ React22.createElement(WeaverseContextProvider, {
1298
+ value: context
1299
+ }, /* @__PURE__ */ React22.createElement(ItemInstance, {
1300
+ id: context.projectData.rootId
1301
+ })));
1302
+ }
1303
+ return null;
1304
+ };
1305
+ var ItemComponent = ({ instance }) => {
1306
+ let { stitchesInstance, elementInstances } = useContext4(WeaverseContext);
1307
+ let [data, setData] = useState2(instance.data);
1308
+ let { id, type, childIds = [], css: css9, className, ...rest } = data;
1309
+ useEffect5(() => {
1310
+ let render = (data2) => setData({ ...data2 });
1311
+ instance.subscribe(render);
1312
+ if (isBrowser && !instance.ref.current) {
1313
+ Object.assign(instance.ref, {
1314
+ current: document.querySelector(`[data-wv-id="${id}"]`)
1315
+ });
1316
+ }
1317
+ return () => instance.unsubscribe(render);
1318
+ }, []);
1319
+ let Element = elementInstances.get(type);
1320
+ if (Element?.Component) {
1321
+ let Component = Element.Component;
1322
+ if (Component.$$typeof === Symbol.for("react.forward_ref")) {
1323
+ rest.ref = instance.ref;
1324
+ }
1325
+ return /* @__PURE__ */ React22.createElement(Component, {
1326
+ key: id,
1327
+ "data-wv-type": type,
1328
+ "data-wv-id": id,
1329
+ className: generateItemClassName(instance, stitchesInstance),
1330
+ ...rest
1331
+ }, childIds.map((id2) => /* @__PURE__ */ React22.createElement(ItemInstance, {
1332
+ key: id2,
1333
+ id: id2
1334
+ })));
1335
+ } else {
1336
+ console.log(`Unknown element: ${type}`);
1337
+ return null;
1338
+ }
1339
+ };
1340
+ var ItemInstance = ({ id }) => {
1341
+ let context = useContext4(WeaverseContext);
1342
+ let { itemInstances } = context;
1343
+ let instance = itemInstances.get(id);
1344
+ if (!instance) {
1345
+ return /* @__PURE__ */ React22.createElement("div", {
1346
+ style: { display: "none" }
1347
+ }, "Item instance ", id, " not found");
1348
+ }
1349
+ return /* @__PURE__ */ React22.createElement(ItemComponent, {
1350
+ key: id,
1351
+ instance
1352
+ });
1353
+ };
1354
+ export {
1355
+ Components,
1356
+ Elements,
1357
+ WeaverseContext,
1358
+ WeaverseContextConsumer,
1359
+ WeaverseContextProvider,
1360
+ WeaverseRoot,
1361
+ createRootContext
1362
+ };