@weaverse/react 0.7.52 → 0.7.54

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