@bluepic/embed 0.6.17 → 0.6.18

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.
@@ -230,7 +230,7 @@ Use Save As... to download, then click back to return to this page.`)&&(location
230
230
 
231
231
  `);for(;n!==-1;){let e=p.slice(0,n).trim();p=p.slice(n+2),n=p.indexOf(`
232
232
 
233
- `);let t=e.split(/\r?\n/),r=``;for(let e of t)e.startsWith(`data:`)&&(r+=e.slice(5).trim());c(r)}}}catch(e){throw f.cancel().catch(()=>{}),e}if(!s||s.length===0)throw Error(`No files found`);return{files:s,creditsConsumed:0}}async function xN(e,t,n,r,i,a,o,s,c,l,u,d){let f=null,p=!1,m=!1;if((r===`png`||r===`jpeg`||r===`webp`)&&!s&&e){console.log(`[RENDER]: Local rendering started`),p=!0;try{let n=t.frames?.x??1,i=t.frames?.y??1,a=t.width/n,o=t.height/i,s=Array(n*i).fill(0).map((e,t)=>({x:t%n*a,y:o*Math.floor(t/n),width:a,height:o}));if(s.length>1){let t=await e.render({type:_N[r],resolution:1,quality:100,vectorExportOptions:{keepGroupTransforms:!0,mode:`optimized`,rasterizeAllMasks:!1,vectorizeAllTexts:!0},watermark:c,resultType:`canvas`,externalCanvas:null,svgLoadWaitDelay:d});f=[];for(let e of s){let n=await Vj({imageSource:t,cropX:e.x,cropY:e.y,cropWidth:e.width,cropHeight:e.height,quality:100,type:_N[r]},`blob`);f.push(n)}}else f=[await e.render({type:_N[r],resolution:1,quality:100,vectorExportOptions:{keepGroupTransforms:!0,mode:`optimized`,rasterizeAllMasks:!1,vectorizeAllTexts:!0},watermark:c,resultType:`blob`,externalCanvas:null,svgLoadWaitDelay:d})]}catch(e){console.error(`[RENDER]: Local rendering error`,e),m=!0}}if(!f){console.log(`[RENDER]: Remote rendering started`);try{let e=await yN(i,a,n,t.width,t.height,t.frames?.x??1,t.frames?.y??1,r,o,u);if(e.type===`application/zip`){f=[];let{unzip:t}=await Promise.resolve().then(()=>($M(),aM)),n=await t(e);for(let[e,t]of Object.entries(n.entries)){let n=await t.blob(Jj.getType(e)||`image/png`);f.push(n)}}else f=[e]}catch(e){throw console.error(`[RENDER]: Remote rendering error`,e),Error(`Failed to render serial remotely`)}}return{files:f,renderLocation:p&&!m?`client`:`server`,clientRenderFailed:m}}function Hse(e,n,r,i,a,o,s,c,l,u,d,f,p,h,g,_,v,y=(0,t.ref)(void 0),b=(0,t.ref)(void 0),x=(0,t.ref)(void 0),S=(0,t.ref)(void 0),C=(0,t.ref)(void 0)){let{createPopup:w,createMessage:T}=oS(),E=(0,t.computed)(()=>(S.value?.length??0)>=2&&!!b.value),D=(0,t.computed)(()=>u.value||(e.value?.enforceServersideRendering??!1)),O=(0,t.computed)(()=>d.value||(e.value?.enforceServersideRendering??!1)),k=(0,t.computed)(()=>{try{return(0,bv.default)({templateId:i.value,data:n.value,serial:e.value,campaignId:s.value})}catch(e){return console.error(`Error computing session state hash`,e),`SESSION_STATE_HASH_ERROR`}}),A=new Set;function j(t){let n=e.value?.format??`png`,r=t?.width??e.value?.width,i=t?.height??e.value?.height;return n in vN?{type:`video`,width:r,height:i,format:n,duration:e.value?.animation?.duration??0,vcodec:`libx264`}:{type:`image`,width:r,height:i,format:n}}function M(e,t,n={usage:`campaign-conversion`},r){return async()=>{if((n.always?!h.value:p.value)&&s.value&&e!==null&&!A.has(e)){A.add(e);try{await Use(c.apiBaseUrl,c.env,s.value,i.value??`TEMPLATE_ID_UNDEFINED`,t,e,n.usage,[j(r)])}catch(t){console.error(`[CREDITS] Failed to consume credits on output`,t),A.delete(e)}}}}let N=(0,t.ref)([]),P=(0,t.ref)(!1),F=(0,t.ref)();function I(e,t){return e.map(async e=>{let n=`${c.apiBaseUrl}/api/public/temp-image`,r=new FormData;r.append(`file`,e,`${m()}.${t}`);let i=await fetch(n,{method:`POST`,body:r});if(!i.ok)throw Error(`Failed to upload asset: ${i.statusText}`);return(await i.json()).url})}function L(){let t=S.value?.find(e=>e.id===b.value);return{id:b.value??`default`,width:t?.width??e.value?.width??0,height:t?.height??e.value?.height??0}}function ee(t,n,r){return!s.value||!e.value?async()=>{}:M((0,bi.generateBillingKey)(s.value,i.value??`TEMPLATE_ID_UNDEFINED`,n,e.value,t.id),`${r}:${t.id}`,{usage:`campaign-conversion`},t)}async function te(o,l,u,d,f){let p=r.value.actionalConnections,m=r.value.socialConnections,_=Object.entries(m).filter(([e,t])=>t).map(([e])=>e),v=a.value??i.value??`TEMPLATE_ID_UNDEFINED`,b=L();d.setDelivered([{...b,fileCount:o.length}]),p.webhook||p.redirect||_.length>0?N.value=I(o,l):N.value=[];let T=()=>({assets:[],templateId:i.value??`TEMPLATE_ID_UNDEFINED`,campaignId:s.value??-1,data:n.value,caption:y.value??e.value?.caption});if(_.length===0){if(p.download&&!p.webhook&&!p.redirect){await wN(o,v),await f(),d.download({trigger:`auto`,withinSocialShare:!1});return}if(p.webhook&&!p.download&&!p.redirect){await EN(p.webhook,{...T(),assets:await Promise.all(N.value)}),await f(),d.webhook({trigger:`auto`,webhookHost:Zj(p.webhook)});return}if(p.redirect&&!p.download&&!p.webhook)return d.redirect({trigger:`auto`,redirectHost:Zj(p.redirect)}),await f(),await DN(p.redirect,{...T(),assets:await Promise.all(N.value)})}let O;if(E.value&&u===`image`&&S.value){let t=vS(n.value),r=k.value,a=e.value?.format??`png`,u=D.value,p=new Map;C.value?.activate(),O=use({canvases:S.value,primaryCanvasId:b.id,primaryFiles:o,primaryRemote:N.value,prerender:a!==`pdf`&&!u,renderCanvas:async e=>{let n,o;try{if(!C.value)throw Error(`No sibling renderers`);({live:n,serial:o}=await C.value.renderer(e.id))}catch(t){console.warn(`[EXPORT] sibling ${e.id} has no local renderer, using the server`,t),n=void 0,o=await e.loadSerial()}let l=n=>xN(n,o,t,a,s.value,i.value??`TEMPLATE_ID_UNDEFINED`,c,u,h.value,r,e.id,x.value),d=await l(n);return d.renderLocation===`client`&&d.files[0]&&await iM(d.files[0])&&(console.warn(`[EXPORT] local render of ${e.id} came out blank, using the server`),d=await l(void 0)),d.files},upload:e=>I(e,l),consume:e=>{if(e.id===b.id)return f();let n=p.get(e.id);return n||(n=ee(e,t,r),p.set(e.id,n)),n()},onSelectionChange:e=>d.setDelivered(e)})}w({draggable:!1,disableBackgroundEffect:window.innerWidth>700,transculent:!0,type:window.innerWidth<=700?`layer`:`frame`,content:()=>(0,t.h)(sse,{templateId:i.value??`TEMPLATE_ID_UNDEFINED`,campaignId:s.value??-1,data:n.value,exportOptions:r.value,caption:y.value??e.value?.caption,assets:o,assetsRemote:N.value,baseName:a.value,mediaType:u,bridge:g.value,analytics:d,consumeCredit:f,primaryCanvas:{...b,segments:e.value?.frames??{x:1,y:1}},multiCanvas:O,snapshots:C.value?.snapshots,snapshotFailed:C.value?.snapshotFailed,demandSnapshots:C.value?.demand}),customClasses:[`bx-template-editor-export-popup`,`flush-content-x`]})}function R(){let e=r.value.actionalConnections,t=r.value.socialConnections,n=[];e.download&&n.push(`download`),e.webhook&&n.push(`webhook`),e.redirect&&n.push(`redirect`);let i=Object.entries(t).filter(([,e])=>e).map(([e])=>e);return{enabledActions:n,enabledSocials:i,optionCount:n.length+i.length}}async function ne(){if(!s.value)return console.error(`No campaign ID available for export`);if(!e.value)return console.error(`No serial available for export`);if(!o.value)return console.error(`No live template component reference available for export`);let t=e.value?.format??`png`,r=t in vN?`video`:`image`,{enabledActions:a,enabledSocials:l,optionCount:u}=R(),d=new Qj(v.value,{templateId:i.value??`TEMPLATE_ID_UNDEFINED`,campaignId:s.value,format:t,mediaType:r,watermark:h.value,enforceServerSideRendering:r===`video`?O.value:D.value,enabledActions:a,enabledSocials:l,optionCount:u,dataStateHash:k.value,tabSessionId:Vse,canvasId:b.value,canvasWidth:e.value.width,canvasHeight:e.value.height,availableCanvasCount:Math.max(1,S.value?.length??1)});E.value&&r===`image`&&C.value?.activate();let p=performance.now(),m=()=>Math.round(performance.now()-p);if(d.attempt(),P.value=!0,F.value=void 0,t in _N){console.log(`[EXPORT] Starting image export`,t),console.log(`sessionState`,k.value);let r;try{r=await xN(o.value,e.value,n.value,t,s.value,i.value??`TEMPLATE_ID_UNDEFINED`,c,D.value,h.value,k.value,b.value,x.value)}catch(e){throw P.value=!1,d.renderFailure({renderLocation:`unknown`,renderDurationMs:m(),error:e instanceof Error?e.message:String(e)}),e}P.value=!1,d.renderSuccess({renderLocation:r.renderLocation,renderDurationMs:m(),fileCount:r.files.length,clientRenderFailed:r.clientRenderFailed});let a=M((0,bi.generateBillingKey)(s.value,i.value??`TEMPLATE_ID_UNDEFINED`,n.value,e.value,b.value),k.value);await te(r.files,t,`image`,d,a)}else if(t in vN){let r=null,a;F.value=0;let l=!rM()||O.value?`server`:`client`;if(l===`server`){let e=0,o=0,l=0;try{let[a]=(await bN(s.value,i.value??`TEMPLATE_ID_UNDEFINED`,n.value,t,c,t=>{t.type===`keyframe`?(e=t.frame,l=t.totalFrames):t.type===`encode_video`&&(o=t.frame,l=t.totalFrames),F.value=(e+o)/(l*2)},b.value)).files,u=await fetch(a);if(!u.ok)throw Error(`Failed to download the rendered video: ${u.status}`);r=await u.blob()}catch(e){console.error(`[VIDEO EXPORT] Server rendering failed`,e),a=e instanceof Error?e.message:String(e)}finally{P.value=!1,F.value=void 0}}else{let t=o.value,n=e.value.animation.fps,i=Math.ceil(e.value.animation.duration*n),s=document.createElement(`canvas`),c=async(e,n)=>(f.value=n,await t.render({type:_N.png,resolution:1,quality:100,vectorExportOptions:{keepGroupTransforms:!0,mode:`optimized`,rasterizeAllMasks:!1,vectorizeAllTexts:!0},resultType:`canvas`,watermark:h.value,externalCanvas:s,svgLoadWaitDelay:x.value}));try{r=await lse({fps:n,totalFrames:i,renderFrame:c,onProgress:(e,t)=>{F.value=e/t}})}catch(e){console.error(`[VIDEO EXPORT] Local encoding failed`,e),a=e instanceof Error?e.message:String(e)}finally{P.value=!1,F.value=void 0}}if(r){d.renderSuccess({renderLocation:l,renderDurationMs:m(),fileCount:1,clientRenderFailed:!1});let a=l===`server`?async()=>{}:M((0,bi.generateBillingKey)(s.value,i.value??`TEMPLATE_ID_UNDEFINED`,n.value,e.value,b.value),k.value);await te([r],t,`video`,d,a)}else d.renderFailure({renderLocation:l,renderDurationMs:m(),error:a??`Video rendering produced no file`}),T({type:`error`,message:`The video could not be exported. Please try again.`})}else P.value=!1,F.value=void 0,d.renderFailure({renderLocation:`unknown`,renderDurationMs:m(),error:`Unsupported export format: ${t}`}),T({type:`error`,message:`This format can't be exported in the design generator.`})}let re=!1;async function ie(){if(re||!_.value||!e.value||!o.value)return;let t=e.value.format??`png`,n=null;if(t in _N){if(t===`pdf`||D.value)return;n=t}else if(t in vN){if(O.value||!rM())return;n=`png`}else return;re=!0;try{console.log(`[RENDER]: Pre-caching local rendering assets`),await o.value.render({type:_N[n],resolution:1,quality:100,vectorExportOptions:{keepGroupTransforms:!0,mode:`optimized`,rasterizeAllMasks:!1,vectorizeAllTexts:!0},watermark:!1,resultType:`blob`,externalCanvas:null,svgLoadWaitDelay:0}),console.log(`[RENDER]: Pre-cache complete`)}catch(e){console.warn(`[RENDER]: Pre-cache local render failed (ignored)`,e),re=!1}}async function B(t,n=`image`){s.value&&e.value&&await M((0,bi.generateBillingKey)(s.value,i.value??`TEMPLATE_ID_UNDEFINED`,t,e.value,b.value),(0,bv.default)({templateId:i.value,data:t,serial:e.value,campaignId:s.value}),{usage:n===`video`?`batch-video`:`batch-image`,always:!0})()}return{triggerExport:ne,consumeOutputFor:B,preCacheLocalRender:ie,rendering:P,videoRenderingProgress:F}}async function Use(e,t,n,r,i,a,o=`campaign-conversion`,s=[]){console.log(`[CREDITS] Reporting export for billing`,{usage:o,assets:s});let c={campaignId:n,templateId:r,usage:o,assets:s,sessionState:i,balanceName:`EMBED`,billingKey:a};await fetch(`${e}/api/public/consume-credits?env=${encodeURIComponent(t)}`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify(c)})}function Wse(){return typeof navigator>`u`?!1:!!(/iPhone|iPad|iPod/i.test(navigator.userAgent)||navigator.maxTouchPoints>1&&/Macintosh/.test(navigator.userAgent))}function SN(e){if(!Wse()||typeof navigator.share!=`function`||typeof navigator.canShare!=`function`)return!1;try{return navigator.canShare({files:e})}catch{return!1}}function CN(e){return e.map(({blob:e,name:t})=>new File([e],t,{type:e.type}))}async function wN(e,t){return TN(nM([{canvas:{id:`default`,width:0,height:0},files:e}],t),t)}async function Gse(e,t){return TN(nM(e,t),t)}async function TN(e,t){let n=CN(e);if(SN(n))try{await navigator.share({files:n});return}catch(e){if(e instanceof Error&&e.name===`AbortError`)return;console.warn(`[download] iOS native share failed, falling back to download`,e)}if(e.length===1){let[{blob:t,name:n}]=e;(0,zj.default)(t,n,t.type)}else{let{downloadZip:n}=await Promise.resolve().then(()=>(gN(),eN)),r=await(await n(e.map(({blob:e,name:t})=>({input:e,name:t})))).blob();(0,zj.default)(r,`${t}.${Jj.getExtension(r.type)}`,r.type)}}async function EN(e,t){let n={templateId:t.templateId,campaignId:t.campaignId,data:t.data,assets:t.assets,caption:t.caption,...t.canvases?{canvases:t.canvases}:{}},r=await fetch(e,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify(n)});if(!r.ok)throw Error(`Failed to send webhook: ${r.statusText}`)}async function DN(e,t){let n=new URL(e);n.searchParams.set(`templateId`,t.templateId),n.searchParams.set(`campaignId`,t.campaignId.toString()),n.searchParams.set(`data`,JSON.stringify(t.data)),t.caption&&n.searchParams.set(`caption`,t.caption),t.assets.forEach((e,t)=>{n.searchParams.set(`asset_${t+1}`,e)}),window.location.href=n.toString()}var ON=1024;function kN(){return typeof crypto<`u`&&`randomUUID`in crypto?crypto.randomUUID().slice(0,8):Math.random().toString(36).slice(2,10)}function Kse(e){let n=(0,t.ref)([]),r=(0,t.ref)(``),i=(0,t.ref)(new Set);function a(){if(!e.storageKey.value)return null;try{let t=sessionStorage.getItem(e.storageKey.value);if(!t)return null;let n=JSON.parse(t);return n&&n.v===1&&Array.isArray(n.rows)?n:null}catch{return null}}function o(t){return{id:kN(),data:{...vS(e.seed()),...vS(t??{})}}}function s(){let t=e.initial?.length?{v:1,rows:e.initial}:a();t&&t.rows.length>0?(n.value=t.rows.slice(0,ON).map(t=>({id:t.id||kN(),data:{...vS(e.seed()),...t.data??{}}})),r.value=t.activeRowId&&n.value.some(e=>e.id===t.activeRowId)?t.activeRowId:n.value[0].id):(n.value=[o()],r.value=n.value[0].id)}s(),(0,t.watch)(e.storageKey,()=>s());let c;function l(){e.storageKey.value&&(clearTimeout(c),c=setTimeout(()=>{try{let t={v:1,rows:n.value,activeRowId:r.value};sessionStorage.setItem(e.storageKey.value,JSON.stringify(t))}catch{}},250))}(0,t.watch)([n,r],l,{deep:!0});let u=(0,t.computed)(()=>n.value.findIndex(e=>e.id===r.value)),d=(0,t.computed)(()=>n.value[u.value]??n.value[0]),f=(0,t.computed)(()=>n.value.filter(e=>i.value.has(e.id))),p=(0,t.computed)(()=>f.value.length>0?f.value:n.value),m=(0,t.computed)(()=>n.value.length>0&&f.value.length===n.value.length),h=(0,t.computed)(()=>n.value.length>=ON);function g(e){n.value.some(t=>t.id===e)&&(r.value=e)}function _(e){let t=Math.min(n.value.length-1,Math.max(0,u.value+e));r.value=n.value[t].id}function v(e=r.value){if(h.value)return;let t=n.value.findIndex(t=>t.id===e),i=o((n.value[t]??n.value[n.value.length-1])?.data);return n.value.splice((t>=0?t:n.value.length-1)+1,0,i),r.value=i.id,i}function y(e){let t=new Set(e);if(t.size===0)return;let a=n.value.filter(e=>!t.has(e.id));if(a.length===0){let e=o();n.value=[e],r.value=e.id}else{let e=u.value;n.value=a,a.some(e=>e.id===r.value)||(r.value=a[Math.min(e,a.length-1)].id)}let s=new Set(i.value);e.forEach(e=>s.delete(e)),i.value=s}function b(e,t){let r=n.value.findIndex(t=>t.id===e),i=r+t;if(r<0||i<0||i>=n.value.length)return;let a=n.value.slice();[a[r],a[i]]=[a[i],a[r]],n.value=a}function x(e,t){let n=new Set(i.value);t??!n.has(e)?n.add(e):n.delete(e),i.value=n}function S(e){i.value=e?new Set(n.value.map(e=>e.id)):new Set}function C(e,t){let r=Math.min(e+t,ON)-n.value.length;for(let e=0;e<r;e++)n.value.push(o(n.value[n.value.length-1]?.data));return n.value.slice(e,e+t)}function w(e,t){let a=e.map(e=>o(e)),s=t===`replace`?a:[...n.value,...a],c=s.slice(0,ON);return n.value=c.length>0?c:[o()],n.value.some(e=>e.id===r.value)||(r.value=n.value[0].id),t===`replace`&&(i.value=new Set),{imported:a.length,dropped:s.length-c.length}}function T(e){e.length!==0&&(n.value=e.slice(0,ON),n.value.some(e=>e.id===r.value)||(r.value=n.value[0].id))}return{rows:n,activeRowId:r,activeIndex:u,activeRow:d,selectedIds:i,selectedRows:f,targetRows:p,allSelected:m,atCapacity:h,setActive:g,activateOffset:_,addRow:v,removeRows:y,moveRow:b,toggleSelected:x,selectAll:S,ensureRowsFrom:C,importRows:w,replaceAll:T,makeRow:o}}var qse={class:`intro`},Jse={class:`field`},Yse=[`id`],Xse={key:0,class:`field`},Zse=[`id`],Qse={key:1,class:`field`},$se=[`id`],ece={key:2,class:`field checkbox-field`},tce={class:`summary`,"aria-live":`polite`},nce={class:`buttons`},rce={class:`intro`},ice={class:`progress-meta`},ace={key:0},oce={class:`buttons`},sce={class:`intro`},cce={class:`buttons`},lce=U((0,t.defineComponent)({__name:`BatchExportPopup`,props:{kind:{},rowCount:{},templateName:{},isVideoTemplate:{type:Boolean},videoBatchMaxSize:{},consumesCredits:{type:Boolean},namingBindings:{},run:{type:Function}},emits:[`cancel`,`done`],setup(e,{expose:n,emit:r}){let i=e,a=r,o={format:h(`bx-batch-format`),naming:h(`bx-batch-naming`),delimiter:h(`bx-batch-delimiter`)},s=ON,c=[{label:`PNG`,value:`png`},{label:`JPEG`,value:`jpeg`},{label:`WebP`,value:`webp`},{label:`PDF`,value:`pdf`}],l=[{label:`MP4`,value:`mp4`},{label:`MOV`,value:`mov`}],u=(0,t.computed)(()=>{let e=i.isVideoTemplate?l:c;return i.kind===`files`?e:[...e.map(e=>({...e,label:`${e.label} link`})),{label:`Template link (prefilled editor)`,value:`template-link`}]}),d=(0,t.ref)(i.isVideoTemplate?`mp4`:`png`),f=(0,t.computed)(()=>[{label:`Row number`,value:`__index`},...i.namingBindings.map(e=>({label:e.label,value:e.key}))]),p=(0,t.ref)(`__index`),m=[{label:`Comma (,)`,value:`,`},{label:`Semicolon (;)`,value:`;`}],g=(0,t.ref)(`,`),_=(0,t.ref)(!0),v=(0,t.computed)(()=>i.isVideoTemplate&&d.value!==`template-link`),y=(0,t.computed)(()=>!v.value||i.rowCount<=i.videoBatchMaxSize),b=(0,t.computed)(()=>y.value?``:i.videoBatchMaxSize<=1?`Video batch export is not part of your plan: videos export one row at a time. Select a single row, or use the template link format.`:`Your plan renders up to ${i.videoBatchMaxSize} videos per batch. Select at most ${i.videoBatchMaxSize} rows.`),x=(0,t.computed)(()=>i.rowCount>0&&i.rowCount<=s&&y.value);function S(e,t){let n=bi.BillingV3.BILLABLE_USAGE_UNIT_COST_CENTI[e]*t/bi.BillingV3.CENTICREDITS_PER_CREDIT;return n>=1?String(Math.round(n*100)/100):n.toFixed(2).replace(/0+$/,``).replace(/\.$/,``)}let C=(0,t.computed)(()=>{let e=i.rowCount,t=`${e} ${e===1?`row`:`rows`}`;return i.kind===`files`?i.consumesCredits?v.value?`${t} · ${S(`batch-video`,e)} credits will be consumed, one per video`:`${t} · ${S(`batch-image`,e)} credits will be consumed`:`${t} · watermarked, so no credits are consumed`:d.value===`template-link`?`${t} · links open the editor prefilled, nothing is rendered now`:_.value?v.value?`${t} · rendering the links now consumes ${S(`video-api`,e)} credits, one per video`:`${t} · rendering the links now consumes about ${S(`image-api`,e)} credits`:`${t} · each link renders (and is metered) when first opened`}),w=(0,t.ref)(`configure`),T=(0,t.ref)({done:0,total:0,failed:0,current:0}),E=(0,t.computed)(()=>T.value.total?Math.min(1,(T.value.done+T.value.failed+T.value.current)/T.value.total):0),D=(0,t.computed)(()=>i.kind===`files`?`Rendering ${v.value?`videos`:`images`}… ${T.value.done} of ${T.value.total}`:`Rendering the links… ${T.value.done} of ${T.value.total}`),O,k=(0,t.ref)(),A=(0,t.ref)(0),j=(0,t.ref)([]),M=(0,t.ref)([]),N=(0,t.computed)(()=>{let e=M.value.map(e=>e.index+1),t=e.slice(0,5),n=e.length-t.length;return e.length===1?`row ${t[0]}`:n>0?`rows ${t.join(`, `)} and ${n} more`:`rows ${t.slice(0,-1).join(`, `)} and ${t[t.length-1]}`}),P=(0,t.ref)(``),F=(0,t.ref)(``);async function I(){if(x.value){O=new AbortController,w.value=`running`,T.value={done:0,total:i.rowCount,failed:0,current:0};try{let e=await i.run({kind:i.kind,format:d.value,naming:p.value===`__index`?{kind:`index`}:{kind:`binding`,key:p.value},delimiter:g.value,prewarm:_.value&&d.value!==`template-link`,signal:O.signal,onProgress:e=>{T.value={done:e.done,total:e.total,failed:e.failed??0,current:e.current??0}}});k.value=e.output,A.value=e.fileCount??0,j.value=e.overBudget??[],M.value=e.failedRows??[],P.value=e.prewarmed?` · ${e.prewarmed.done-e.prewarmed.failed} of ${T.value.total} links rendered${e.prewarmed.failed?`, ${e.prewarmed.failed} failed`:``}`:``,e.cancelled&&(F.value=`Export cancelled.`),a(`done`,e)}catch(e){console.error(`[batch] export failed`,e),F.value=i.kind===`files`?`The export failed: no row rendered, so there is nothing to download. Nothing was charged. Please try again.`:`The export failed. Please try again.`}w.value=`done`}}function L(){O?.abort()}async function ee(){if(k.value){if(i.kind===`csv`){(0,zj.default)(k.value.blob,k.value.fileName,`text/csv`);return}await wN([k.value.blob],k.value.fileName.replace(/\.[a-z0-9]+$/i,``))}}return n({cancelRun:L}),(n,r)=>((0,t.openBlock)(),(0,t.createElementBlock)(`div`,{class:(0,t.normalizeClass)([`bx-batch-export-popup`,{[`phase-`+w.value]:!0}])},[w.value===`configure`?((0,t.openBlock)(),(0,t.createElementBlock)(t.Fragment,{key:0},[(0,t.createElementVNode)(`p`,qse,[e.kind===`files`?((0,t.openBlock)(),(0,t.createElementBlock)(t.Fragment,{key:0},[(0,t.createTextVNode)(` Renders `+(0,t.toDisplayString)(e.rowCount)+` `+(0,t.toDisplayString)(e.rowCount===1?`row`:`rows`)+` on the server and hands you `+(0,t.toDisplayString)(e.rowCount===1?`the file`:`a zip`)+`. `,1)],64)):((0,t.openBlock)(),(0,t.createElementBlock)(t.Fragment,{key:1},[(0,t.createTextVNode)(` Writes the `+(0,t.toDisplayString)(e.rowCount)+` `+(0,t.toDisplayString)(e.rowCount===1?`row`:`rows`)+` to a CSV — one column per field, plus a link to the result of every row. `,1)],64))]),(0,t.createElementVNode)(`div`,Jse,[(0,t.createElementVNode)(`span`,{class:`label`,id:o.format},`Format`,8,Yse),(0,t.createVNode)(bC,{modelValue:d.value,"onUpdate:modelValue":r[0]||=e=>d.value=e,options:u.value,bordered:``,"aria-labelledby":o.format},null,8,[`modelValue`,`options`,`aria-labelledby`])]),e.kind===`files`?((0,t.openBlock)(),(0,t.createElementBlock)(`div`,Xse,[(0,t.createElementVNode)(`span`,{class:`label`,id:o.naming},`Name files by`,8,Zse),(0,t.createVNode)(bC,{modelValue:p.value,"onUpdate:modelValue":r[1]||=e=>p.value=e,options:f.value,bordered:``,"aria-labelledby":o.naming},null,8,[`modelValue`,`options`,`aria-labelledby`])])):(0,t.createCommentVNode)(``,!0),e.kind===`csv`?((0,t.openBlock)(),(0,t.createElementBlock)(`div`,Qse,[(0,t.createElementVNode)(`span`,{class:`label`,id:o.delimiter},`Separator`,8,$se),(0,t.createVNode)(bC,{modelValue:g.value,"onUpdate:modelValue":r[2]||=e=>g.value=e,options:m,bordered:``,"aria-labelledby":o.delimiter},null,8,[`modelValue`,`aria-labelledby`])])):(0,t.createCommentVNode)(``,!0),e.kind===`csv`&&d.value!==`template-link`?((0,t.openBlock)(),(0,t.createElementBlock)(`div`,ece,[(0,t.createVNode)(rT,{modelValue:_.value,"onUpdate:modelValue":r[3]||=e=>_.value=e,size:`medium`,disabled:!y.value},null,8,[`modelValue`,`disabled`]),r[6]||=(0,t.createElementVNode)(`span`,{class:`label`},`Render the links now`,-1),r[7]||=(0,t.createElementVNode)(`span`,{class:`hint`},`Otherwise every link renders when it is first opened.`,-1)])):(0,t.createCommentVNode)(``,!0),b.value?((0,t.openBlock)(),(0,t.createBlock)(Bj,{key:3,type:`warning`,bordered:!0,"show-icon":!0},{default:(0,t.withCtx)(()=>[(0,t.createTextVNode)((0,t.toDisplayString)(b.value),1)]),_:1})):e.rowCount>(0,t.unref)(s)?((0,t.openBlock)(),(0,t.createBlock)(Bj,{key:4,type:`error`,bordered:!0,"show-icon":!0},{default:(0,t.withCtx)(()=>[(0,t.createTextVNode)(` A batch export is limited to `+(0,t.toDisplayString)((0,t.unref)(s))+` rows. Select the rows you want to export. `,1)]),_:1})):(0,t.createCommentVNode)(``,!0),(0,t.createElementVNode)(`div`,tce,(0,t.toDisplayString)(C.value),1),(0,t.createElementVNode)(`div`,nce,[(0,t.createVNode)(Xy,{secondary:``,onClick:r[4]||=e=>a(`cancel`)},{default:(0,t.withCtx)(()=>[...r[8]||=[(0,t.createTextVNode)(`Cancel`,-1)]]),_:1}),(0,t.createVNode)(Xy,{active:``,disabled:!x.value,onClick:I},{default:(0,t.withCtx)(()=>[(0,t.createTextVNode)((0,t.toDisplayString)(e.kind===`files`?`Export`:`Export CSV`),1)]),_:1},8,[`disabled`])])],64)):w.value===`running`?((0,t.openBlock)(),(0,t.createElementBlock)(t.Fragment,{key:1},[(0,t.createElementVNode)(`p`,rce,(0,t.toDisplayString)(D.value),1),(0,t.createVNode)(cS,{value:E.value},null,8,[`value`]),(0,t.createElementVNode)(`div`,ice,[(0,t.createElementVNode)(`span`,null,(0,t.toDisplayString)(T.value.done)+` / `+(0,t.toDisplayString)(T.value.total)+` `+(0,t.toDisplayString)((e.kind,`rendered`)),1),T.value.failed?((0,t.openBlock)(),(0,t.createElementBlock)(`span`,ace,(0,t.toDisplayString)(T.value.failed)+` failed`,1)):(0,t.createCommentVNode)(``,!0)]),(0,t.createElementVNode)(`div`,oce,[(0,t.createVNode)(Xy,{secondary:``,onClick:L},{default:(0,t.withCtx)(()=>[(0,t.createTextVNode)((0,t.toDisplayString)(e.kind===`files`?`Cancel`:`Stop rendering`),1)]),_:1})])],64)):((0,t.openBlock)(),(0,t.createElementBlock)(t.Fragment,{key:2},[(0,t.createElementVNode)(`p`,sce,[F.value?((0,t.openBlock)(),(0,t.createElementBlock)(t.Fragment,{key:0},[(0,t.createTextVNode)((0,t.toDisplayString)(F.value),1)],64)):e.kind===`files`?((0,t.openBlock)(),(0,t.createElementBlock)(t.Fragment,{key:1},[(0,t.createTextVNode)((0,t.toDisplayString)(A.value)+` `+(0,t.toDisplayString)(A.value===1?`file`:`files`)+` ready.`,1)],64)):((0,t.openBlock)(),(0,t.createElementBlock)(t.Fragment,{key:2},[(0,t.createTextVNode)(`CSV ready`+(0,t.toDisplayString)(P.value)+`.`,1)],64))]),M.value.length?((0,t.openBlock)(),(0,t.createBlock)(Bj,{key:0,type:`warning`,bordered:!0,"show-icon":!0},{default:(0,t.withCtx)(()=>[(0,t.createTextVNode)((0,t.toDisplayString)(M.value.length)+` of `+(0,t.toDisplayString)(T.value.total)+` `+(0,t.toDisplayString)(T.value.total===1?`row`:`rows`)+` failed and `+(0,t.toDisplayString)(M.value.length===1?`is`:`are`)+` not in the download (`+(0,t.toDisplayString)(N.value)+`). `,1),e.consumesCredits?((0,t.openBlock)(),(0,t.createElementBlock)(t.Fragment,{key:0},[(0,t.createTextVNode)(`Rows that rendered were charged; failed rows were not.`)],64)):((0,t.openBlock)(),(0,t.createElementBlock)(t.Fragment,{key:1},[(0,t.createTextVNode)(`Nothing was charged.`)],64))]),_:1})):(0,t.createCommentVNode)(``,!0),j.value.length?((0,t.openBlock)(),(0,t.createBlock)(Bj,{key:1,type:`warning`,bordered:!0,"show-icon":!0},{default:(0,t.withCtx)(()=>[(0,t.createTextVNode)((0,t.toDisplayString)(j.value.length)+` `+(0,t.toDisplayString)(j.value.length===1?`row exceeds`:`rows exceed`)+` the URL length the render API accepts (rows `+(0,t.toDisplayString)(j.value.join(`, `))+`). Those links may not render — shorten their texts or use the template link format. `,1)]),_:1})):(0,t.createCommentVNode)(``,!0),(0,t.createElementVNode)(`div`,cce,[(0,t.createVNode)(Xy,{secondary:``,onClick:r[5]||=e=>a(`cancel`)},{default:(0,t.withCtx)(()=>[...r[9]||=[(0,t.createTextVNode)(`Close`,-1)]]),_:1}),k.value?((0,t.openBlock)(),(0,t.createBlock)(Xy,{key:0,active:``,onClick:ee},{icon:(0,t.withCtx)(()=>[(0,t.createVNode)(Gb,null,{default:(0,t.withCtx)(()=>[(0,t.createVNode)((0,t.unref)(Rb))]),_:1})]),default:(0,t.withCtx)(()=>[(0,t.createTextVNode)(` Download `+(0,t.toDisplayString)(e.kind===`files`?A.value===1?`file`:`zip`:`CSV`),1)]),_:1})):(0,t.createCommentVNode)(``,!0)])],64))],2))}}),[[`__scopeId`,`data-v-5c0586a5`]]);function uce(e){let t=e.toLowerCase();return t===`true`||t===`wahr`||t===`ja`||t===`yes`||t===`1`?{type:`boolean`,value:!0}:t===`false`||t===`falsch`||t===`nein`||t===`no`||t===`0`?{type:`boolean`,value:!1}:null}function dce(e,t){let n=e.trim();return n===``||n.toLowerCase()===`null`||n.toLowerCase()===`n/a`?{type:`null`,value:null}:uce(n)||_ce(n)||gce(n)||fce(n,t)||mce(n)||hce(n)||{type:`string`,value:e}}function fce(e,t){let n=/^([€$£¥₹])\s*([\d\s.,]+)$/,r=/^([\d\s.,]+)\s*%$/,i=/^([\d\s.,]+)\s*([€$£¥₹])$/,a=e,o,s=!1,c=e.match(n);c&&(o=c[1],a=c[2],s=!0);let l=e.match(i);l&&(a=l[1],o=l[2],s=!0);let u=e.match(r);u&&(a=u[1],o=`%`,s=!0),a=a.replace(/\s/g,``);let d=t;if(t===`auto`&&!s&&(d=pce(a)),s){let e=a.lastIndexOf(`.`),t=a.lastIndexOf(`,`),n=Math.max(e,t);if(n>-1){let e=a.substring(n+1);a=e.length<=2&&e.length>0?a.substring(0,n).replace(/[.,]/g,``)+`.`+e:a.replace(/[.,]/g,``)}}else d===`de`?(/^\d{1,3}(\.\d{3})*(,\d+)?$/.test(a)||a.includes(`,`))&&(a=a.replace(/\./g,``).replace(`,`,`.`)):d===`en`&&(/^\d{1,3}(,\d{3})*(\.\d+)?$/.test(a)||a.includes(`,`)&&a.includes(`.`)||a.includes(`,`)&&!a.includes(`.`))&&(a=a.replace(/,/g,``));let f=parseFloat(a);return isNaN(f)?null:{type:`number`,value:f,unit:o}}function pce(e){let t=e.includes(`.`),n=e.includes(`,`);if(!t&&!n)return`en`;if(t&&!n){let t=e.split(`.`);return t.length===2&&t[1].length<=2?`en`:`de`}if(n&&!t){let t=e.split(`,`);return t.length===2&&t[1].length<=2?`de`:`en`}let r=e.lastIndexOf(`.`);return e.lastIndexOf(`,`)>r?`de`:`en`}function mce(e){for(let{pattern:t,format:n}of[{pattern:/^\d{4}-\d{2}-\d{2}(T\d{2}:\d{2}:\d{2})?/,format:`ISO`},{pattern:/^(\d{1,2})\.(\d{1,2})\.(\d{2,4})$/,format:`DD.MM.YYYY`},{pattern:/^(\d{1,2})\/(\d{1,2})\/(\d{2,4})$/,format:`MM/DD/YYYY`},{pattern:/^(\d{1,2})\.(\d{1,2})\.(\d{2,4})\s+(\d{1,2}):(\d{2})/,format:`DD.MM.YYYY HH:MM`}])if(t.test(e)){let t=new Date(e);if(n===`DD.MM.YYYY`){let t=e.match(/^(\d{1,2})\.(\d{1,2})\.(\d{2,4})$/);if(t){let[,e,r,i]=t,a=`${i.length===2?`20${i}`:i}-${r.padStart(2,`0`)}-${e.padStart(2,`0`)}`,o=new Date(a);if(!isNaN(o.getTime()))return{type:`date`,value:o,format:n}}}if(!isNaN(t.getTime()))return{type:`date`,value:t,format:n}}return null}function hce(e){try{return{type:`url`,value:e,protocol:new URL(e).protocol.replace(`:`,``)}}catch{return/^(www\.)?[\w-]+(\.[\w-]+)+/.test(e)?{type:`url`,value:e,protocol:`implicit`}:null}}function gce(e){try{let t=BS(e),n=`keyword`;n=e.startsWith(`#`)?`hex`:e.startsWith(`rgb(`)?`rgb`:e.startsWith(`rgba(`)?`rgba`:e.startsWith(`hsl(`)?`hsl`:e.startsWith(`hsla(`)?`hsla`:`name`;let r=t.rgb().object(),i=t.hsl().object();return{type:`color`,value:e,rgb:{r:r.r,g:r.g,b:r.b},hex:t.hex(),hsl:{h:i.h,s:i.s,l:i.l},alpha:t.alpha(),format:n}}catch{return null}}function _ce(e){if(e.startsWith(`{`)&&e.endsWith(`}`)||e.startsWith(`[`)&&e.endsWith(`]`))try{let t=JSON.parse(e);if(Array.isArray(t))return{type:`json-array`,value:t};if(typeof t==`object`&&t)return{type:`json-object`,value:t}}catch{}return null}function AN(e){return e.type===`string`?e.value:e.type===`number`?e.unit?`${e.value} ${e.unit}`:`${e.value}`:e.type===`boolean`?e.value?`true`:`false`:e.type===`date`?e.value.toISOString():e.type===`url`||e.type===`color`?e.value:e.type===`json-object`||e.type===`json-array`?JSON.stringify(e.value):e.type===`null`?`null`:``}function vce(e,t){return e.map(e=>e.map(e=>dce(e,t)))}function yce(e){let t=e.split(/\r?\n/).filter(e=>e.length>0).slice(0,20);if(t.length===0)return`,`;let n=(e,t)=>{let n=0,r=!1;for(let i=0;i<e.length;i++){let a=e[i];if(a===`"`){if(r&&e[i+1]===`"`){i++;continue}r=!r}else a===t&&!r&&n++}return n},r=t.map(e=>n(e,`,`)),i=t.map(e=>n(e,`;`)),a=r.reduce((e,t)=>e+t,0),o=i.reduce((e,t)=>e+t,0);if(a>0&&o===0)return`,`;if(o>0&&a===0)return`;`;if(a===0&&o===0)return`,`;let s=e=>{let t=e.reduce((e,t)=>e+t,0)/e.length;return e.reduce((e,n)=>e+(n-t)**2,0)/e.length},c=s(r),l=s(i);return c===l?a>=o?`,`:`;`:c<l?`,`:`;`}function bce(e,t=`,`){let n=[],r=[],i=``,a=!1,o=0,s=e.length;for(;o<s;){let s=e[o];if(a){if(s===`"`){if(e[o+1]===`"`){i+=`"`,o+=2;continue}a=!1,o++;continue}i+=s,o++;continue}if(s===`"`){a=!0,o++;continue}if(s===t){r.push(i),i=``,o++;continue}if(s===`\r`||s===`
233
+ `);let t=e.split(/\r?\n/),r=``;for(let e of t)e.startsWith(`data:`)&&(r+=e.slice(5).trim());c(r)}}}catch(e){throw f.cancel().catch(()=>{}),e}if(!s||s.length===0)throw Error(`No files found`);return{files:s,creditsConsumed:0}}async function xN(e,t,n,r,i,a,o,s,c,l,u,d){let f=null,p=!1,m=!1;if((r===`png`||r===`jpeg`||r===`webp`)&&!s&&e){console.log(`[RENDER]: Local rendering started`),p=!0;try{let n=t.frames?.x??1,i=t.frames?.y??1,a=t.width/n,o=t.height/i,s=Array(n*i).fill(0).map((e,t)=>({x:t%n*a,y:o*Math.floor(t/n),width:a,height:o}));if(s.length>1){let t=await e.render({type:_N[r],resolution:1,quality:100,vectorExportOptions:{keepGroupTransforms:!0,mode:`optimized`,rasterizeAllMasks:!1,vectorizeAllTexts:!0},watermark:c,resultType:`canvas`,externalCanvas:null,svgLoadWaitDelay:d});f=[];for(let e of s){let n=await Vj({imageSource:t,cropX:e.x,cropY:e.y,cropWidth:e.width,cropHeight:e.height,quality:100,type:_N[r]},`blob`);f.push(n)}}else f=[await e.render({type:_N[r],resolution:1,quality:100,vectorExportOptions:{keepGroupTransforms:!0,mode:`optimized`,rasterizeAllMasks:!1,vectorizeAllTexts:!0},watermark:c,resultType:`blob`,externalCanvas:null,svgLoadWaitDelay:d})]}catch(e){console.error(`[RENDER]: Local rendering error`,e),m=!0}}if(!f){console.log(`[RENDER]: Remote rendering started`);try{let e=await yN(i,a,n,t.width,t.height,t.frames?.x??1,t.frames?.y??1,r,o,u);if(e.type===`application/zip`){f=[];let{unzip:t}=await Promise.resolve().then(()=>($M(),aM)),n=await t(e);for(let[e,t]of Object.entries(n.entries)){let n=await t.blob(Jj.getType(e)||`image/png`);f.push(n)}}else f=[e]}catch(e){throw console.error(`[RENDER]: Remote rendering error`,e),Error(`Failed to render serial remotely`)}}return{files:f,renderLocation:p&&!m?`client`:`server`,clientRenderFailed:m}}function Hse(e,n,r,i,a,o,s,c,l,u,d,f,p,h,g,_,v,y=(0,t.ref)(void 0),b=(0,t.ref)(void 0),x=(0,t.ref)(void 0),S=(0,t.ref)(void 0),C=(0,t.ref)(void 0)){let{createPopup:w,createMessage:T}=oS(),E=(0,t.computed)(()=>(S.value?.length??0)>=2&&!!b.value),D=(0,t.computed)(()=>u.value||(e.value?.enforceServersideRendering??!1)),O=(0,t.computed)(()=>d.value||(e.value?.enforceServersideRendering??!1)),k=(0,t.computed)(()=>{try{return(0,bv.default)({templateId:i.value,data:n.value,serial:e.value,campaignId:s.value})}catch(e){return console.error(`Error computing session state hash`,e),`SESSION_STATE_HASH_ERROR`}}),A=new Set;function j(t){let n=e.value?.format??`png`,r=t?.width??e.value?.width,i=t?.height??e.value?.height;return n in vN?{type:`video`,width:r,height:i,format:n,duration:e.value?.animation?.duration??0,vcodec:`libx264`}:{type:`image`,width:r,height:i,format:n}}function M(e,t,n={usage:`campaign-conversion`},r){return async()=>{if((n.always?!h.value:p.value)&&s.value&&e!==null&&!A.has(e)){A.add(e);try{await Use(c.apiBaseUrl,c.env,s.value,i.value??`TEMPLATE_ID_UNDEFINED`,t,e,n.usage,[j(r)])}catch(t){console.error(`[CREDITS] Failed to consume credits on output`,t),A.delete(e)}}}}let N=(0,t.ref)([]),P=(0,t.ref)(!1),F=(0,t.ref)();function I(e,t){return e.map(async e=>{let n=`${c.apiBaseUrl}/api/public/temp-image`,r=new FormData;r.append(`file`,e,`${m()}.${t}`);let i=await fetch(n,{method:`POST`,body:r});if(!i.ok)throw Error(`Failed to upload asset: ${i.statusText}`);return(await i.json()).url})}function L(){let t=S.value?.find(e=>e.id===b.value);return{id:b.value??`default`,width:t?.width??e.value?.width??0,height:t?.height??e.value?.height??0}}function ee(t,n,r){return!s.value||!e.value?async()=>{}:M((0,bi.generateBillingKey)(s.value,i.value??`TEMPLATE_ID_UNDEFINED`,n,e.value,t.id),`${r}:${t.id}`,{usage:`campaign-conversion`},t)}async function te(o,l,u,d,f){let p=r.value.actionalConnections,m=r.value.socialConnections,_=Object.entries(m).filter(([e,t])=>t).map(([e])=>e),v=a.value??i.value??`TEMPLATE_ID_UNDEFINED`,b=L();d.setDelivered([{...b,fileCount:o.length}]),p.webhook||p.redirect||_.length>0?N.value=I(o,l):N.value=[];let T=()=>({assets:[],templateId:i.value??`TEMPLATE_ID_UNDEFINED`,campaignId:s.value??-1,data:n.value,caption:y.value??e.value?.caption}),O=E.value&&u===`image`&&!!S.value;if(_.length===0&&!O){if(p.download&&!p.webhook&&!p.redirect){await wN(o,v),await f(),d.download({trigger:`auto`,withinSocialShare:!1});return}if(p.webhook&&!p.download&&!p.redirect){await EN(p.webhook,{...T(),assets:await Promise.all(N.value)}),await f(),d.webhook({trigger:`auto`,webhookHost:Zj(p.webhook)});return}if(p.redirect&&!p.download&&!p.webhook)return d.redirect({trigger:`auto`,redirectHost:Zj(p.redirect)}),await f(),await DN(p.redirect,{...T(),assets:await Promise.all(N.value)})}let A;if(O&&S.value){let t=vS(n.value),r=k.value,a=e.value?.format??`png`,u=D.value,p=new Map;C.value?.activate(),A=use({canvases:S.value,primaryCanvasId:b.id,primaryFiles:o,primaryRemote:N.value,prerender:a!==`pdf`&&!u,renderCanvas:async e=>{let n,o;try{if(!C.value)throw Error(`No sibling renderers`);({live:n,serial:o}=await C.value.renderer(e.id))}catch(t){console.warn(`[EXPORT] sibling ${e.id} has no local renderer, using the server`,t),n=void 0,o=await e.loadSerial()}let l=n=>xN(n,o,t,a,s.value,i.value??`TEMPLATE_ID_UNDEFINED`,c,u,h.value,r,e.id,x.value),d=await l(n);return d.renderLocation===`client`&&d.files[0]&&await iM(d.files[0])&&(console.warn(`[EXPORT] local render of ${e.id} came out blank, using the server`),d=await l(void 0)),d.files},upload:e=>I(e,l),consume:e=>{if(e.id===b.id)return f();let n=p.get(e.id);return n||(n=ee(e,t,r),p.set(e.id,n)),n()},onSelectionChange:e=>d.setDelivered(e)})}w({draggable:!1,disableBackgroundEffect:window.innerWidth>700,transculent:!0,type:window.innerWidth<=700?`layer`:`frame`,content:()=>(0,t.h)(sse,{templateId:i.value??`TEMPLATE_ID_UNDEFINED`,campaignId:s.value??-1,data:n.value,exportOptions:r.value,caption:y.value??e.value?.caption,assets:o,assetsRemote:N.value,baseName:a.value,mediaType:u,bridge:g.value,analytics:d,consumeCredit:f,primaryCanvas:{...b,segments:e.value?.frames??{x:1,y:1}},multiCanvas:A,snapshots:C.value?.snapshots,snapshotFailed:C.value?.snapshotFailed,demandSnapshots:C.value?.demand}),customClasses:[`bx-template-editor-export-popup`,`flush-content-x`]})}function R(){let e=r.value.actionalConnections,t=r.value.socialConnections,n=[];e.download&&n.push(`download`),e.webhook&&n.push(`webhook`),e.redirect&&n.push(`redirect`);let i=Object.entries(t).filter(([,e])=>e).map(([e])=>e);return{enabledActions:n,enabledSocials:i,optionCount:n.length+i.length}}async function ne(){if(!s.value)return console.error(`No campaign ID available for export`);if(!e.value)return console.error(`No serial available for export`);if(!o.value)return console.error(`No live template component reference available for export`);let t=e.value?.format??`png`,r=t in vN?`video`:`image`,{enabledActions:a,enabledSocials:l,optionCount:u}=R(),d=new Qj(v.value,{templateId:i.value??`TEMPLATE_ID_UNDEFINED`,campaignId:s.value,format:t,mediaType:r,watermark:h.value,enforceServerSideRendering:r===`video`?O.value:D.value,enabledActions:a,enabledSocials:l,optionCount:u,dataStateHash:k.value,tabSessionId:Vse,canvasId:b.value,canvasWidth:e.value.width,canvasHeight:e.value.height,availableCanvasCount:Math.max(1,S.value?.length??1)});E.value&&r===`image`&&C.value?.activate();let p=performance.now(),m=()=>Math.round(performance.now()-p);if(d.attempt(),P.value=!0,F.value=void 0,t in _N){console.log(`[EXPORT] Starting image export`,t),console.log(`sessionState`,k.value);let r;try{r=await xN(o.value,e.value,n.value,t,s.value,i.value??`TEMPLATE_ID_UNDEFINED`,c,D.value,h.value,k.value,b.value,x.value)}catch(e){throw P.value=!1,d.renderFailure({renderLocation:`unknown`,renderDurationMs:m(),error:e instanceof Error?e.message:String(e)}),e}P.value=!1,d.renderSuccess({renderLocation:r.renderLocation,renderDurationMs:m(),fileCount:r.files.length,clientRenderFailed:r.clientRenderFailed});let a=M((0,bi.generateBillingKey)(s.value,i.value??`TEMPLATE_ID_UNDEFINED`,n.value,e.value,b.value),k.value);await te(r.files,t,`image`,d,a)}else if(t in vN){let r=null,a;F.value=0;let l=!rM()||O.value?`server`:`client`;if(l===`server`){let e=0,o=0,l=0;try{let[a]=(await bN(s.value,i.value??`TEMPLATE_ID_UNDEFINED`,n.value,t,c,t=>{t.type===`keyframe`?(e=t.frame,l=t.totalFrames):t.type===`encode_video`&&(o=t.frame,l=t.totalFrames),F.value=(e+o)/(l*2)},b.value)).files,u=await fetch(a);if(!u.ok)throw Error(`Failed to download the rendered video: ${u.status}`);r=await u.blob()}catch(e){console.error(`[VIDEO EXPORT] Server rendering failed`,e),a=e instanceof Error?e.message:String(e)}finally{P.value=!1,F.value=void 0}}else{let t=o.value,n=e.value.animation.fps,i=Math.ceil(e.value.animation.duration*n),s=document.createElement(`canvas`),c=async(e,n)=>(f.value=n,await t.render({type:_N.png,resolution:1,quality:100,vectorExportOptions:{keepGroupTransforms:!0,mode:`optimized`,rasterizeAllMasks:!1,vectorizeAllTexts:!0},resultType:`canvas`,watermark:h.value,externalCanvas:s,svgLoadWaitDelay:x.value}));try{r=await lse({fps:n,totalFrames:i,renderFrame:c,onProgress:(e,t)=>{F.value=e/t}})}catch(e){console.error(`[VIDEO EXPORT] Local encoding failed`,e),a=e instanceof Error?e.message:String(e)}finally{P.value=!1,F.value=void 0}}if(r){d.renderSuccess({renderLocation:l,renderDurationMs:m(),fileCount:1,clientRenderFailed:!1});let a=l===`server`?async()=>{}:M((0,bi.generateBillingKey)(s.value,i.value??`TEMPLATE_ID_UNDEFINED`,n.value,e.value,b.value),k.value);await te([r],t,`video`,d,a)}else d.renderFailure({renderLocation:l,renderDurationMs:m(),error:a??`Video rendering produced no file`}),T({type:`error`,message:`The video could not be exported. Please try again.`})}else P.value=!1,F.value=void 0,d.renderFailure({renderLocation:`unknown`,renderDurationMs:m(),error:`Unsupported export format: ${t}`}),T({type:`error`,message:`This format can't be exported in the design generator.`})}let re=!1;async function ie(){if(re||!_.value||!e.value||!o.value)return;let t=e.value.format??`png`,n=null;if(t in _N){if(t===`pdf`||D.value)return;n=t}else if(t in vN){if(O.value||!rM())return;n=`png`}else return;re=!0;try{console.log(`[RENDER]: Pre-caching local rendering assets`),await o.value.render({type:_N[n],resolution:1,quality:100,vectorExportOptions:{keepGroupTransforms:!0,mode:`optimized`,rasterizeAllMasks:!1,vectorizeAllTexts:!0},watermark:!1,resultType:`blob`,externalCanvas:null,svgLoadWaitDelay:0}),console.log(`[RENDER]: Pre-cache complete`)}catch(e){console.warn(`[RENDER]: Pre-cache local render failed (ignored)`,e),re=!1}}async function B(t,n=`image`){s.value&&e.value&&await M((0,bi.generateBillingKey)(s.value,i.value??`TEMPLATE_ID_UNDEFINED`,t,e.value,b.value),(0,bv.default)({templateId:i.value,data:t,serial:e.value,campaignId:s.value}),{usage:n===`video`?`batch-video`:`batch-image`,always:!0})()}return{triggerExport:ne,consumeOutputFor:B,preCacheLocalRender:ie,rendering:P,videoRenderingProgress:F}}async function Use(e,t,n,r,i,a,o=`campaign-conversion`,s=[]){console.log(`[CREDITS] Reporting export for billing`,{usage:o,assets:s});let c={campaignId:n,templateId:r,usage:o,assets:s,sessionState:i,balanceName:`EMBED`,billingKey:a};await fetch(`${e}/api/public/consume-credits?env=${encodeURIComponent(t)}`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify(c)})}function Wse(){return typeof navigator>`u`?!1:!!(/iPhone|iPad|iPod/i.test(navigator.userAgent)||navigator.maxTouchPoints>1&&/Macintosh/.test(navigator.userAgent))}function SN(e){if(!Wse()||typeof navigator.share!=`function`||typeof navigator.canShare!=`function`)return!1;try{return navigator.canShare({files:e})}catch{return!1}}function CN(e){return e.map(({blob:e,name:t})=>new File([e],t,{type:e.type}))}async function wN(e,t){return TN(nM([{canvas:{id:`default`,width:0,height:0},files:e}],t),t)}async function Gse(e,t){return TN(nM(e,t),t)}async function TN(e,t){let n=CN(e);if(SN(n))try{await navigator.share({files:n});return}catch(e){if(e instanceof Error&&e.name===`AbortError`)return;console.warn(`[download] iOS native share failed, falling back to download`,e)}if(e.length===1){let[{blob:t,name:n}]=e;(0,zj.default)(t,n,t.type)}else{let{downloadZip:n}=await Promise.resolve().then(()=>(gN(),eN)),r=await(await n(e.map(({blob:e,name:t})=>({input:e,name:t})))).blob();(0,zj.default)(r,`${t}.${Jj.getExtension(r.type)}`,r.type)}}async function EN(e,t){let n={templateId:t.templateId,campaignId:t.campaignId,data:t.data,assets:t.assets,caption:t.caption,...t.canvases?{canvases:t.canvases}:{}},r=await fetch(e,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify(n)});if(!r.ok)throw Error(`Failed to send webhook: ${r.statusText}`)}async function DN(e,t){let n=new URL(e);n.searchParams.set(`templateId`,t.templateId),n.searchParams.set(`campaignId`,t.campaignId.toString()),n.searchParams.set(`data`,JSON.stringify(t.data)),t.caption&&n.searchParams.set(`caption`,t.caption),t.assets.forEach((e,t)=>{n.searchParams.set(`asset_${t+1}`,e)}),window.location.href=n.toString()}var ON=1024;function kN(){return typeof crypto<`u`&&`randomUUID`in crypto?crypto.randomUUID().slice(0,8):Math.random().toString(36).slice(2,10)}function Kse(e){let n=(0,t.ref)([]),r=(0,t.ref)(``),i=(0,t.ref)(new Set);function a(){if(!e.storageKey.value)return null;try{let t=sessionStorage.getItem(e.storageKey.value);if(!t)return null;let n=JSON.parse(t);return n&&n.v===1&&Array.isArray(n.rows)?n:null}catch{return null}}function o(t){return{id:kN(),data:{...vS(e.seed()),...vS(t??{})}}}function s(){let t=e.initial?.length?{v:1,rows:e.initial}:a();t&&t.rows.length>0?(n.value=t.rows.slice(0,ON).map(t=>({id:t.id||kN(),data:{...vS(e.seed()),...t.data??{}}})),r.value=t.activeRowId&&n.value.some(e=>e.id===t.activeRowId)?t.activeRowId:n.value[0].id):(n.value=[o()],r.value=n.value[0].id)}s(),(0,t.watch)(e.storageKey,()=>s());let c;function l(){e.storageKey.value&&(clearTimeout(c),c=setTimeout(()=>{try{let t={v:1,rows:n.value,activeRowId:r.value};sessionStorage.setItem(e.storageKey.value,JSON.stringify(t))}catch{}},250))}(0,t.watch)([n,r],l,{deep:!0});let u=(0,t.computed)(()=>n.value.findIndex(e=>e.id===r.value)),d=(0,t.computed)(()=>n.value[u.value]??n.value[0]),f=(0,t.computed)(()=>n.value.filter(e=>i.value.has(e.id))),p=(0,t.computed)(()=>f.value.length>0?f.value:n.value),m=(0,t.computed)(()=>n.value.length>0&&f.value.length===n.value.length),h=(0,t.computed)(()=>n.value.length>=ON);function g(e){n.value.some(t=>t.id===e)&&(r.value=e)}function _(e){let t=Math.min(n.value.length-1,Math.max(0,u.value+e));r.value=n.value[t].id}function v(e=r.value){if(h.value)return;let t=n.value.findIndex(t=>t.id===e),i=o((n.value[t]??n.value[n.value.length-1])?.data);return n.value.splice((t>=0?t:n.value.length-1)+1,0,i),r.value=i.id,i}function y(e){let t=new Set(e);if(t.size===0)return;let a=n.value.filter(e=>!t.has(e.id));if(a.length===0){let e=o();n.value=[e],r.value=e.id}else{let e=u.value;n.value=a,a.some(e=>e.id===r.value)||(r.value=a[Math.min(e,a.length-1)].id)}let s=new Set(i.value);e.forEach(e=>s.delete(e)),i.value=s}function b(e,t){let r=n.value.findIndex(t=>t.id===e),i=r+t;if(r<0||i<0||i>=n.value.length)return;let a=n.value.slice();[a[r],a[i]]=[a[i],a[r]],n.value=a}function x(e,t){let n=new Set(i.value);t??!n.has(e)?n.add(e):n.delete(e),i.value=n}function S(e){i.value=e?new Set(n.value.map(e=>e.id)):new Set}function C(e,t){let r=Math.min(e+t,ON)-n.value.length;for(let e=0;e<r;e++)n.value.push(o(n.value[n.value.length-1]?.data));return n.value.slice(e,e+t)}function w(e,t){let a=e.map(e=>o(e)),s=t===`replace`?a:[...n.value,...a],c=s.slice(0,ON);return n.value=c.length>0?c:[o()],n.value.some(e=>e.id===r.value)||(r.value=n.value[0].id),t===`replace`&&(i.value=new Set),{imported:a.length,dropped:s.length-c.length}}function T(e){e.length!==0&&(n.value=e.slice(0,ON),n.value.some(e=>e.id===r.value)||(r.value=n.value[0].id))}return{rows:n,activeRowId:r,activeIndex:u,activeRow:d,selectedIds:i,selectedRows:f,targetRows:p,allSelected:m,atCapacity:h,setActive:g,activateOffset:_,addRow:v,removeRows:y,moveRow:b,toggleSelected:x,selectAll:S,ensureRowsFrom:C,importRows:w,replaceAll:T,makeRow:o}}var qse={class:`intro`},Jse={class:`field`},Yse=[`id`],Xse={key:0,class:`field`},Zse=[`id`],Qse={key:1,class:`field`},$se=[`id`],ece={key:2,class:`field checkbox-field`},tce={class:`summary`,"aria-live":`polite`},nce={class:`buttons`},rce={class:`intro`},ice={class:`progress-meta`},ace={key:0},oce={class:`buttons`},sce={class:`intro`},cce={class:`buttons`},lce=U((0,t.defineComponent)({__name:`BatchExportPopup`,props:{kind:{},rowCount:{},templateName:{},isVideoTemplate:{type:Boolean},videoBatchMaxSize:{},consumesCredits:{type:Boolean},namingBindings:{},run:{type:Function}},emits:[`cancel`,`done`],setup(e,{expose:n,emit:r}){let i=e,a=r,o={format:h(`bx-batch-format`),naming:h(`bx-batch-naming`),delimiter:h(`bx-batch-delimiter`)},s=ON,c=[{label:`PNG`,value:`png`},{label:`JPEG`,value:`jpeg`},{label:`WebP`,value:`webp`},{label:`PDF`,value:`pdf`}],l=[{label:`MP4`,value:`mp4`},{label:`MOV`,value:`mov`}],u=(0,t.computed)(()=>{let e=i.isVideoTemplate?l:c;return i.kind===`files`?e:[...e.map(e=>({...e,label:`${e.label} link`})),{label:`Template link (prefilled editor)`,value:`template-link`}]}),d=(0,t.ref)(i.isVideoTemplate?`mp4`:`png`),f=(0,t.computed)(()=>[{label:`Row number`,value:`__index`},...i.namingBindings.map(e=>({label:e.label,value:e.key}))]),p=(0,t.ref)(`__index`),m=[{label:`Comma (,)`,value:`,`},{label:`Semicolon (;)`,value:`;`}],g=(0,t.ref)(`,`),_=(0,t.ref)(!0),v=(0,t.computed)(()=>i.isVideoTemplate&&d.value!==`template-link`),y=(0,t.computed)(()=>!v.value||i.rowCount<=i.videoBatchMaxSize),b=(0,t.computed)(()=>y.value?``:i.videoBatchMaxSize<=1?`Video batch export is not part of your plan: videos export one row at a time. Select a single row, or use the template link format.`:`Your plan renders up to ${i.videoBatchMaxSize} videos per batch. Select at most ${i.videoBatchMaxSize} rows.`),x=(0,t.computed)(()=>i.rowCount>0&&i.rowCount<=s&&y.value);function S(e,t){let n=bi.BillingV3.BILLABLE_USAGE_UNIT_COST_CENTI[e]*t/bi.BillingV3.CENTICREDITS_PER_CREDIT;return n>=1?String(Math.round(n*100)/100):n.toFixed(2).replace(/0+$/,``).replace(/\.$/,``)}let C=(0,t.computed)(()=>{let e=i.rowCount,t=`${e} ${e===1?`row`:`rows`}`;return i.kind===`files`?i.consumesCredits?v.value?`${t} · ${S(`batch-video`,e)} credits will be consumed, one per video`:`${t} · ${S(`batch-image`,e)} credits will be consumed`:`${t} · watermarked, so no credits are consumed`:d.value===`template-link`?`${t} · links open the editor prefilled, nothing is rendered now`:_.value?v.value?`${t} · rendering the links now consumes ${S(`video-api`,e)} credits, one per video`:`${t} · rendering the links now consumes about ${S(`image-api`,e)} credits`:`${t} · each link renders (and is metered) when first opened`}),w=(0,t.ref)(`configure`),T=(0,t.ref)({done:0,total:0,failed:0,current:0}),E=(0,t.computed)(()=>T.value.total?Math.min(1,(T.value.done+T.value.failed+T.value.current)/T.value.total):0),D=(0,t.computed)(()=>i.kind===`files`?`Rendering ${v.value?`videos`:`images`}… ${T.value.done} of ${T.value.total}`:`Rendering the links… ${T.value.done} of ${T.value.total}`),O,k=(0,t.ref)(),A=(0,t.ref)(0),j=(0,t.ref)([]),M=(0,t.ref)([]),N=(0,t.computed)(()=>{let e=M.value.map(e=>e.index+1),t=e.slice(0,5),n=e.length-t.length;return e.length===1?`row ${t[0]}`:n>0?`rows ${t.join(`, `)} and ${n} more`:`rows ${t.slice(0,-1).join(`, `)} and ${t[t.length-1]}`}),P=(0,t.ref)(``),F=(0,t.ref)(``);async function I(){if(x.value){O=new AbortController,w.value=`running`,T.value={done:0,total:i.rowCount,failed:0,current:0};try{let e=await i.run({kind:i.kind,format:d.value,naming:p.value===`__index`?{kind:`index`}:{kind:`binding`,key:p.value},delimiter:g.value,prewarm:_.value&&d.value!==`template-link`,signal:O.signal,onProgress:e=>{T.value={done:e.done,total:e.total,failed:e.failed??0,current:e.current??0}}});k.value=e.output,A.value=e.fileCount??0,j.value=e.overBudget??[],M.value=e.failedRows??[],P.value=e.prewarmed?` · ${e.prewarmed.done-e.prewarmed.failed} of ${T.value.total} links rendered${e.prewarmed.failed?`, ${e.prewarmed.failed} failed`:``}`:``,e.cancelled&&(F.value=`Export cancelled.`),a(`done`,e)}catch(e){console.error(`[batch] export failed`,e),F.value=i.kind===`files`?`The export failed: no row rendered, so there is nothing to download. Nothing was charged. Please try again.`:`The export failed. Please try again.`}w.value=`done`}}function L(){O?.abort()}async function ee(){if(k.value){if(i.kind===`csv`){(0,zj.default)(k.value.blob,k.value.fileName,`text/csv`);return}await wN([k.value.blob],k.value.fileName.replace(/\.[a-z0-9]+$/i,``))}}return n({cancelRun:L}),(n,r)=>((0,t.openBlock)(),(0,t.createElementBlock)(`div`,{class:(0,t.normalizeClass)([`bx-batch-export-popup`,{[`phase-`+w.value]:!0}])},[w.value===`configure`?((0,t.openBlock)(),(0,t.createElementBlock)(t.Fragment,{key:0},[(0,t.createElementVNode)(`p`,qse,[e.kind===`files`?((0,t.openBlock)(),(0,t.createElementBlock)(t.Fragment,{key:0},[(0,t.createTextVNode)(` Renders `+(0,t.toDisplayString)(e.rowCount)+` `+(0,t.toDisplayString)(e.rowCount===1?`row`:`rows`)+` on the server and hands you `+(0,t.toDisplayString)(e.rowCount===1?`the file`:`a zip`)+`. `,1)],64)):((0,t.openBlock)(),(0,t.createElementBlock)(t.Fragment,{key:1},[(0,t.createTextVNode)(` Writes the `+(0,t.toDisplayString)(e.rowCount)+` `+(0,t.toDisplayString)(e.rowCount===1?`row`:`rows`)+` to a CSV — one column per field, plus a link to the result of every row. `,1)],64))]),(0,t.createElementVNode)(`div`,Jse,[(0,t.createElementVNode)(`span`,{class:`label`,id:o.format},`Format`,8,Yse),(0,t.createVNode)(bC,{modelValue:d.value,"onUpdate:modelValue":r[0]||=e=>d.value=e,options:u.value,bordered:``,"aria-labelledby":o.format},null,8,[`modelValue`,`options`,`aria-labelledby`])]),e.kind===`files`?((0,t.openBlock)(),(0,t.createElementBlock)(`div`,Xse,[(0,t.createElementVNode)(`span`,{class:`label`,id:o.naming},`Name files by`,8,Zse),(0,t.createVNode)(bC,{modelValue:p.value,"onUpdate:modelValue":r[1]||=e=>p.value=e,options:f.value,bordered:``,"aria-labelledby":o.naming},null,8,[`modelValue`,`options`,`aria-labelledby`])])):(0,t.createCommentVNode)(``,!0),e.kind===`csv`?((0,t.openBlock)(),(0,t.createElementBlock)(`div`,Qse,[(0,t.createElementVNode)(`span`,{class:`label`,id:o.delimiter},`Separator`,8,$se),(0,t.createVNode)(bC,{modelValue:g.value,"onUpdate:modelValue":r[2]||=e=>g.value=e,options:m,bordered:``,"aria-labelledby":o.delimiter},null,8,[`modelValue`,`aria-labelledby`])])):(0,t.createCommentVNode)(``,!0),e.kind===`csv`&&d.value!==`template-link`?((0,t.openBlock)(),(0,t.createElementBlock)(`div`,ece,[(0,t.createVNode)(rT,{modelValue:_.value,"onUpdate:modelValue":r[3]||=e=>_.value=e,size:`medium`,disabled:!y.value},null,8,[`modelValue`,`disabled`]),r[6]||=(0,t.createElementVNode)(`span`,{class:`label`},`Render the links now`,-1),r[7]||=(0,t.createElementVNode)(`span`,{class:`hint`},`Otherwise every link renders when it is first opened.`,-1)])):(0,t.createCommentVNode)(``,!0),b.value?((0,t.openBlock)(),(0,t.createBlock)(Bj,{key:3,type:`warning`,bordered:!0,"show-icon":!0},{default:(0,t.withCtx)(()=>[(0,t.createTextVNode)((0,t.toDisplayString)(b.value),1)]),_:1})):e.rowCount>(0,t.unref)(s)?((0,t.openBlock)(),(0,t.createBlock)(Bj,{key:4,type:`error`,bordered:!0,"show-icon":!0},{default:(0,t.withCtx)(()=>[(0,t.createTextVNode)(` A batch export is limited to `+(0,t.toDisplayString)((0,t.unref)(s))+` rows. Select the rows you want to export. `,1)]),_:1})):(0,t.createCommentVNode)(``,!0),(0,t.createElementVNode)(`div`,tce,(0,t.toDisplayString)(C.value),1),(0,t.createElementVNode)(`div`,nce,[(0,t.createVNode)(Xy,{secondary:``,onClick:r[4]||=e=>a(`cancel`)},{default:(0,t.withCtx)(()=>[...r[8]||=[(0,t.createTextVNode)(`Cancel`,-1)]]),_:1}),(0,t.createVNode)(Xy,{active:``,disabled:!x.value,onClick:I},{default:(0,t.withCtx)(()=>[(0,t.createTextVNode)((0,t.toDisplayString)(e.kind===`files`?`Export`:`Export CSV`),1)]),_:1},8,[`disabled`])])],64)):w.value===`running`?((0,t.openBlock)(),(0,t.createElementBlock)(t.Fragment,{key:1},[(0,t.createElementVNode)(`p`,rce,(0,t.toDisplayString)(D.value),1),(0,t.createVNode)(cS,{value:E.value},null,8,[`value`]),(0,t.createElementVNode)(`div`,ice,[(0,t.createElementVNode)(`span`,null,(0,t.toDisplayString)(T.value.done)+` / `+(0,t.toDisplayString)(T.value.total)+` `+(0,t.toDisplayString)((e.kind,`rendered`)),1),T.value.failed?((0,t.openBlock)(),(0,t.createElementBlock)(`span`,ace,(0,t.toDisplayString)(T.value.failed)+` failed`,1)):(0,t.createCommentVNode)(``,!0)]),(0,t.createElementVNode)(`div`,oce,[(0,t.createVNode)(Xy,{secondary:``,onClick:L},{default:(0,t.withCtx)(()=>[(0,t.createTextVNode)((0,t.toDisplayString)(e.kind===`files`?`Cancel`:`Stop rendering`),1)]),_:1})])],64)):((0,t.openBlock)(),(0,t.createElementBlock)(t.Fragment,{key:2},[(0,t.createElementVNode)(`p`,sce,[F.value?((0,t.openBlock)(),(0,t.createElementBlock)(t.Fragment,{key:0},[(0,t.createTextVNode)((0,t.toDisplayString)(F.value),1)],64)):e.kind===`files`?((0,t.openBlock)(),(0,t.createElementBlock)(t.Fragment,{key:1},[(0,t.createTextVNode)((0,t.toDisplayString)(A.value)+` `+(0,t.toDisplayString)(A.value===1?`file`:`files`)+` ready.`,1)],64)):((0,t.openBlock)(),(0,t.createElementBlock)(t.Fragment,{key:2},[(0,t.createTextVNode)(`CSV ready`+(0,t.toDisplayString)(P.value)+`.`,1)],64))]),M.value.length?((0,t.openBlock)(),(0,t.createBlock)(Bj,{key:0,type:`warning`,bordered:!0,"show-icon":!0},{default:(0,t.withCtx)(()=>[(0,t.createTextVNode)((0,t.toDisplayString)(M.value.length)+` of `+(0,t.toDisplayString)(T.value.total)+` `+(0,t.toDisplayString)(T.value.total===1?`row`:`rows`)+` failed and `+(0,t.toDisplayString)(M.value.length===1?`is`:`are`)+` not in the download (`+(0,t.toDisplayString)(N.value)+`). `,1),e.consumesCredits?((0,t.openBlock)(),(0,t.createElementBlock)(t.Fragment,{key:0},[(0,t.createTextVNode)(`Rows that rendered were charged; failed rows were not.`)],64)):((0,t.openBlock)(),(0,t.createElementBlock)(t.Fragment,{key:1},[(0,t.createTextVNode)(`Nothing was charged.`)],64))]),_:1})):(0,t.createCommentVNode)(``,!0),j.value.length?((0,t.openBlock)(),(0,t.createBlock)(Bj,{key:1,type:`warning`,bordered:!0,"show-icon":!0},{default:(0,t.withCtx)(()=>[(0,t.createTextVNode)((0,t.toDisplayString)(j.value.length)+` `+(0,t.toDisplayString)(j.value.length===1?`row exceeds`:`rows exceed`)+` the URL length the render API accepts (rows `+(0,t.toDisplayString)(j.value.join(`, `))+`). Those links may not render — shorten their texts or use the template link format. `,1)]),_:1})):(0,t.createCommentVNode)(``,!0),(0,t.createElementVNode)(`div`,cce,[(0,t.createVNode)(Xy,{secondary:``,onClick:r[5]||=e=>a(`cancel`)},{default:(0,t.withCtx)(()=>[...r[9]||=[(0,t.createTextVNode)(`Close`,-1)]]),_:1}),k.value?((0,t.openBlock)(),(0,t.createBlock)(Xy,{key:0,active:``,onClick:ee},{icon:(0,t.withCtx)(()=>[(0,t.createVNode)(Gb,null,{default:(0,t.withCtx)(()=>[(0,t.createVNode)((0,t.unref)(Rb))]),_:1})]),default:(0,t.withCtx)(()=>[(0,t.createTextVNode)(` Download `+(0,t.toDisplayString)(e.kind===`files`?A.value===1?`file`:`zip`:`CSV`),1)]),_:1})):(0,t.createCommentVNode)(``,!0)])],64))],2))}}),[[`__scopeId`,`data-v-5c0586a5`]]);function uce(e){let t=e.toLowerCase();return t===`true`||t===`wahr`||t===`ja`||t===`yes`||t===`1`?{type:`boolean`,value:!0}:t===`false`||t===`falsch`||t===`nein`||t===`no`||t===`0`?{type:`boolean`,value:!1}:null}function dce(e,t){let n=e.trim();return n===``||n.toLowerCase()===`null`||n.toLowerCase()===`n/a`?{type:`null`,value:null}:uce(n)||_ce(n)||gce(n)||fce(n,t)||mce(n)||hce(n)||{type:`string`,value:e}}function fce(e,t){let n=/^([€$£¥₹])\s*([\d\s.,]+)$/,r=/^([\d\s.,]+)\s*%$/,i=/^([\d\s.,]+)\s*([€$£¥₹])$/,a=e,o,s=!1,c=e.match(n);c&&(o=c[1],a=c[2],s=!0);let l=e.match(i);l&&(a=l[1],o=l[2],s=!0);let u=e.match(r);u&&(a=u[1],o=`%`,s=!0),a=a.replace(/\s/g,``);let d=t;if(t===`auto`&&!s&&(d=pce(a)),s){let e=a.lastIndexOf(`.`),t=a.lastIndexOf(`,`),n=Math.max(e,t);if(n>-1){let e=a.substring(n+1);a=e.length<=2&&e.length>0?a.substring(0,n).replace(/[.,]/g,``)+`.`+e:a.replace(/[.,]/g,``)}}else d===`de`?(/^\d{1,3}(\.\d{3})*(,\d+)?$/.test(a)||a.includes(`,`))&&(a=a.replace(/\./g,``).replace(`,`,`.`)):d===`en`&&(/^\d{1,3}(,\d{3})*(\.\d+)?$/.test(a)||a.includes(`,`)&&a.includes(`.`)||a.includes(`,`)&&!a.includes(`.`))&&(a=a.replace(/,/g,``));let f=parseFloat(a);return isNaN(f)?null:{type:`number`,value:f,unit:o}}function pce(e){let t=e.includes(`.`),n=e.includes(`,`);if(!t&&!n)return`en`;if(t&&!n){let t=e.split(`.`);return t.length===2&&t[1].length<=2?`en`:`de`}if(n&&!t){let t=e.split(`,`);return t.length===2&&t[1].length<=2?`de`:`en`}let r=e.lastIndexOf(`.`);return e.lastIndexOf(`,`)>r?`de`:`en`}function mce(e){for(let{pattern:t,format:n}of[{pattern:/^\d{4}-\d{2}-\d{2}(T\d{2}:\d{2}:\d{2})?/,format:`ISO`},{pattern:/^(\d{1,2})\.(\d{1,2})\.(\d{2,4})$/,format:`DD.MM.YYYY`},{pattern:/^(\d{1,2})\/(\d{1,2})\/(\d{2,4})$/,format:`MM/DD/YYYY`},{pattern:/^(\d{1,2})\.(\d{1,2})\.(\d{2,4})\s+(\d{1,2}):(\d{2})/,format:`DD.MM.YYYY HH:MM`}])if(t.test(e)){let t=new Date(e);if(n===`DD.MM.YYYY`){let t=e.match(/^(\d{1,2})\.(\d{1,2})\.(\d{2,4})$/);if(t){let[,e,r,i]=t,a=`${i.length===2?`20${i}`:i}-${r.padStart(2,`0`)}-${e.padStart(2,`0`)}`,o=new Date(a);if(!isNaN(o.getTime()))return{type:`date`,value:o,format:n}}}if(!isNaN(t.getTime()))return{type:`date`,value:t,format:n}}return null}function hce(e){try{return{type:`url`,value:e,protocol:new URL(e).protocol.replace(`:`,``)}}catch{return/^(www\.)?[\w-]+(\.[\w-]+)+/.test(e)?{type:`url`,value:e,protocol:`implicit`}:null}}function gce(e){try{let t=BS(e),n=`keyword`;n=e.startsWith(`#`)?`hex`:e.startsWith(`rgb(`)?`rgb`:e.startsWith(`rgba(`)?`rgba`:e.startsWith(`hsl(`)?`hsl`:e.startsWith(`hsla(`)?`hsla`:`name`;let r=t.rgb().object(),i=t.hsl().object();return{type:`color`,value:e,rgb:{r:r.r,g:r.g,b:r.b},hex:t.hex(),hsl:{h:i.h,s:i.s,l:i.l},alpha:t.alpha(),format:n}}catch{return null}}function _ce(e){if(e.startsWith(`{`)&&e.endsWith(`}`)||e.startsWith(`[`)&&e.endsWith(`]`))try{let t=JSON.parse(e);if(Array.isArray(t))return{type:`json-array`,value:t};if(typeof t==`object`&&t)return{type:`json-object`,value:t}}catch{}return null}function AN(e){return e.type===`string`?e.value:e.type===`number`?e.unit?`${e.value} ${e.unit}`:`${e.value}`:e.type===`boolean`?e.value?`true`:`false`:e.type===`date`?e.value.toISOString():e.type===`url`||e.type===`color`?e.value:e.type===`json-object`||e.type===`json-array`?JSON.stringify(e.value):e.type===`null`?`null`:``}function vce(e,t){return e.map(e=>e.map(e=>dce(e,t)))}function yce(e){let t=e.split(/\r?\n/).filter(e=>e.length>0).slice(0,20);if(t.length===0)return`,`;let n=(e,t)=>{let n=0,r=!1;for(let i=0;i<e.length;i++){let a=e[i];if(a===`"`){if(r&&e[i+1]===`"`){i++;continue}r=!r}else a===t&&!r&&n++}return n},r=t.map(e=>n(e,`,`)),i=t.map(e=>n(e,`;`)),a=r.reduce((e,t)=>e+t,0),o=i.reduce((e,t)=>e+t,0);if(a>0&&o===0)return`,`;if(o>0&&a===0)return`;`;if(a===0&&o===0)return`,`;let s=e=>{let t=e.reduce((e,t)=>e+t,0)/e.length;return e.reduce((e,n)=>e+(n-t)**2,0)/e.length},c=s(r),l=s(i);return c===l?a>=o?`,`:`;`:c<l?`,`:`;`}function bce(e,t=`,`){let n=[],r=[],i=``,a=!1,o=0,s=e.length;for(;o<s;){let s=e[o];if(a){if(s===`"`){if(e[o+1]===`"`){i+=`"`,o+=2;continue}a=!1,o++;continue}i+=s,o++;continue}if(s===`"`){a=!0,o++;continue}if(s===t){r.push(i),i=``,o++;continue}if(s===`\r`||s===`
234
234
  `){r.push(i),n.push(r),i=``,r=[],s===`\r`&&e[o+1]===`
235
235
  `?o+=2:o++;continue}i+=s,o++}return(i.length>0||r.length>0||a)&&(r.push(i),n.push(r)),n}function xce(e,t,n=`auto`){let r=bce(e,n===`auto`?yce(e):n),i=[];for(let e=0;e<Math.max(...r.map(e=>e.length));e++)r.every(t=>t[e]===void 0||t[e].trim()===``)&&i.push(e);return vce(r.map(e=>e.filter((e,t)=>!i.includes(t))),t)}var Sce=80;function jN(e){return String(e??``).normalize(`NFKD`).replace(/[̀-ͯ]/g,``).replace(/[^a-zA-Z0-9 _.-]+/g,` `).trim().replace(/\s+/g,`-`).replace(/^[.-]+|[.-]+$/g,``).slice(0,Sce)}function Cce(e,t,n){let r=String(e.length).length,i=new Map;return e.map((e,a)=>{let o=t.kind===`binding`?jN(wce(e.data[t.key])):``;o||=`${jN(n)||`file`}-${String(a+1).padStart(Math.max(r,2),`0`)}`;let s=i.get(o)??0;return i.set(o,s+1),s===0?o:`${o}_${s+1}`})}function wce(e){return e&&typeof e==`object`&&`src`in e?e.src:e}async function Tce(e){let{unzip:t}=await Promise.resolve().then(()=>($M(),aM)),n=await t(e),r=[];for(let[e,t]of Object.entries(n.entries))r.push(await t.blob(Jj.getType(e)||`image/png`));return r}async function Ece(e,t,n,r,i=()=>{}){let a=t in vN,o=Pi(a?1:4),s=Cce(e,n,r.name),c=Array(e.length),l=[],u=0,d=!1,f=(t,n)=>i({done:u,total:e.length,current:n,currentIndex:t,failed:l.length}),{serial:p}=r,m=p.frames?.x??1,h=p.frames?.y??1,g=r.remoteOptions;async function _(e,n){let i;if(a){let a=await bN(r.campaignId,r.templateId,e.data,t,g,e=>{let t=e;if(t.totalFrames){let e=((t.processedFrames??0)+(t.encodedFrames??0))/(2*t.totalFrames);f(n+1,Math.max(0,Math.min(.99,e)))}},r.canvasId);i=await Promise.all(a.files.map(e=>fetch(e).then(e=>e.blob())))}else{let n=await yN(r.campaignId,r.templateId,e.data,p.width,p.height,m,h,t,g,r.canvasId);i=n.type===`application/zip`?await Tce(n):[n]}if(d||r.signal?.aborted){d=!0;return}await r.consumeOutput(e.data,a?`video`:`image`),c[n]=i.map((e,r)=>({name:`${s[n]}${i.length>1?`-${r+1}`:``}.${Jj.getExtension(e.type)||t}`,blob:e})),u++,f(n+1,1)}await Promise.all(e.map((e,t)=>o(async()=>{if(d||r.signal?.aborted){d=!0;return}f(t+1,0);try{await _(e,t)}catch(e){console.error(`[batch] row ${t+1} failed`,e),l.push({index:t,message:Dce(e)}),f(t+1,1)}})));let v=c.filter(Boolean).flat();if(l.sort((e,t)=>e.index-t.index),v.length===0&&l.length>0)throw Error(`All ${l.length} batch rows failed to render (row ${l[0].index+1}: ${l[0].message})`);return{files:v,output:await Oce(v,jN(r.name)||`batch`),cancelled:d,failedRows:l}}function Dce(e){return e instanceof Error?e.message||e.name:typeof e==`string`?e:String(e)}async function Oce(e,t){if(e.length===1)return{blob:e[0].blob,fileName:e[0].name};let{downloadZip:n}=await Promise.resolve().then(()=>(gN(),eN));return{blob:await n(e.map(e=>({name:e.name,input:e.blob}))).blob(),fileName:`${t}.zip`}}var kce=`bluepic_result`;function MN(e,t){return/[",\r\n;]/.test(e)||e.includes(t)?`"${e.replace(/"/g,`""`)}"`:e}function Ace(e){return e==null?``:typeof e==`object`?`src`in e&&typeof e.src==`string`?e.src:JSON.stringify(e):String(e)}function jce(e){if(e!=null){if(typeof e==`string`)return e;if(typeof e==`number`||typeof e==`boolean`)return String(e);if(typeof e==`object`&&`src`in e){let t=e.src;return typeof t==`string`?t:void 0}return JSON.stringify(e)}}function Mce(e,t){let n=e.templateAlias?.trim();return`/${(n?n.includes(`/`)?n:e.orgSlug?`${e.orgSlug}/${n}`:null:null)??e.templateId}${e.canvasId?`/${encodeURIComponent(e.canvasId)}`:``}.${t}`}function Nce(e,t,n){if(n.format===`template-link`){let t=encodeURIComponent(JSON.stringify(e.data));return{url:`${n.templateLinkBaseUrl}?data=${t}`,overBudget:!1}}let r=new URLSearchParams,i=new Set;for(let e of t)for(let t of Rj(e.field))i.add(t);for(let t of i){let n=e.data[t],i=jce(n);i===void 0||bi.Studio.isReservedQueryKey(t)||r.set(bi.Studio.queryKeyForBinding(t,n),i)}let a=r.toString(),o=n.format===`jpeg`?`jpg`:n.format;return{url:`${n.urlRenderBaseUrl.replace(/\/+$/,``)}${Mce(n,o)}${a?`?${a}`:``}`,overBudget:bi.Studio.queryStringByteLength(a)>bi.Studio.MAX_QUERY_STRING_BYTES}}function Pce(e,t,n){let r=n.delimiter??`,`,i=[];for(let e of t)for(let t of Rj(e.field))i.includes(t)||i.push(t);let a=[...i,kce],o=[],s=[],c=[a.map(e=>MN(e,r)).join(r)];return e.forEach((e,a)=>{let l=Nce(e,t,n);o.push(l.url),l.overBudget&&s.push(a+1);let u=i.map(t=>MN(Ace(e.data[t]),r));u.push(MN(l.url,r)),c.push(u.join(r))}),{csv:``+c.join(`\r
236
236
  `)+`\r
@@ -230,7 +230,7 @@ Use Save As... to download, then click back to return to this page.`)&&(location
230
230
 
231
231
  `);for(;n!==-1;){let e=p.slice(0,n).trim();p=p.slice(n+2),n=p.indexOf(`
232
232
 
233
- `);let t=e.split(/\r?\n/),r=``;for(let e of t)e.startsWith(`data:`)&&(r+=e.slice(5).trim());c(r)}}}catch(e){throw f.cancel().catch(()=>{}),e}if(!s||s.length===0)throw Error(`No files found`);return{files:s,creditsConsumed:0}}async function xN(e,t,n,r,i,a,o,s,c,l,u,d){let f=null,p=!1,m=!1;if((r===`png`||r===`jpeg`||r===`webp`)&&!s&&e){console.log(`[RENDER]: Local rendering started`),p=!0;try{let n=t.frames?.x??1,i=t.frames?.y??1,a=t.width/n,o=t.height/i,s=Array(n*i).fill(0).map((e,t)=>({x:t%n*a,y:o*Math.floor(t/n),width:a,height:o}));if(s.length>1){let t=await e.render({type:_N[r],resolution:1,quality:100,vectorExportOptions:{keepGroupTransforms:!0,mode:`optimized`,rasterizeAllMasks:!1,vectorizeAllTexts:!0},watermark:c,resultType:`canvas`,externalCanvas:null,svgLoadWaitDelay:d});f=[];for(let e of s){let n=await Vj({imageSource:t,cropX:e.x,cropY:e.y,cropWidth:e.width,cropHeight:e.height,quality:100,type:_N[r]},`blob`);f.push(n)}}else f=[await e.render({type:_N[r],resolution:1,quality:100,vectorExportOptions:{keepGroupTransforms:!0,mode:`optimized`,rasterizeAllMasks:!1,vectorizeAllTexts:!0},watermark:c,resultType:`blob`,externalCanvas:null,svgLoadWaitDelay:d})]}catch(e){console.error(`[RENDER]: Local rendering error`,e),m=!0}}if(!f){console.log(`[RENDER]: Remote rendering started`);try{let e=await yN(i,a,n,t.width,t.height,t.frames?.x??1,t.frames?.y??1,r,o,u);if(e.type===`application/zip`){f=[];let{unzip:t}=await Promise.resolve().then(()=>($M(),aM)),n=await t(e);for(let[e,t]of Object.entries(n.entries)){let n=await t.blob(Jj.getType(e)||`image/png`);f.push(n)}}else f=[e]}catch(e){throw console.error(`[RENDER]: Remote rendering error`,e),Error(`Failed to render serial remotely`)}}return{files:f,renderLocation:p&&!m?`client`:`server`,clientRenderFailed:m}}function Hse(e,n,r,i,a,o,s,c,l,u,d,f,p,h,g,_,v,y=(0,t.ref)(void 0),b=(0,t.ref)(void 0),x=(0,t.ref)(void 0),S=(0,t.ref)(void 0),C=(0,t.ref)(void 0)){let{createPopup:w,createMessage:T}=oS(),E=(0,t.computed)(()=>(S.value?.length??0)>=2&&!!b.value),D=(0,t.computed)(()=>u.value||(e.value?.enforceServersideRendering??!1)),O=(0,t.computed)(()=>d.value||(e.value?.enforceServersideRendering??!1)),k=(0,t.computed)(()=>{try{return(0,bv.default)({templateId:i.value,data:n.value,serial:e.value,campaignId:s.value})}catch(e){return console.error(`Error computing session state hash`,e),`SESSION_STATE_HASH_ERROR`}}),A=new Set;function j(t){let n=e.value?.format??`png`,r=t?.width??e.value?.width,i=t?.height??e.value?.height;return n in vN?{type:`video`,width:r,height:i,format:n,duration:e.value?.animation?.duration??0,vcodec:`libx264`}:{type:`image`,width:r,height:i,format:n}}function M(e,t,n={usage:`campaign-conversion`},r){return async()=>{if((n.always?!h.value:p.value)&&s.value&&e!==null&&!A.has(e)){A.add(e);try{await Use(c.apiBaseUrl,c.env,s.value,i.value??`TEMPLATE_ID_UNDEFINED`,t,e,n.usage,[j(r)])}catch(t){console.error(`[CREDITS] Failed to consume credits on output`,t),A.delete(e)}}}}let N=(0,t.ref)([]),P=(0,t.ref)(!1),F=(0,t.ref)();function I(e,t){return e.map(async e=>{let n=`${c.apiBaseUrl}/api/public/temp-image`,r=new FormData;r.append(`file`,e,`${m()}.${t}`);let i=await fetch(n,{method:`POST`,body:r});if(!i.ok)throw Error(`Failed to upload asset: ${i.statusText}`);return(await i.json()).url})}function L(){let t=S.value?.find(e=>e.id===b.value);return{id:b.value??`default`,width:t?.width??e.value?.width??0,height:t?.height??e.value?.height??0}}function ee(t,n,r){return!s.value||!e.value?async()=>{}:M((0,bi.generateBillingKey)(s.value,i.value??`TEMPLATE_ID_UNDEFINED`,n,e.value,t.id),`${r}:${t.id}`,{usage:`campaign-conversion`},t)}async function te(o,l,u,d,f){let p=r.value.actionalConnections,m=r.value.socialConnections,_=Object.entries(m).filter(([e,t])=>t).map(([e])=>e),v=a.value??i.value??`TEMPLATE_ID_UNDEFINED`,b=L();d.setDelivered([{...b,fileCount:o.length}]),p.webhook||p.redirect||_.length>0?N.value=I(o,l):N.value=[];let T=()=>({assets:[],templateId:i.value??`TEMPLATE_ID_UNDEFINED`,campaignId:s.value??-1,data:n.value,caption:y.value??e.value?.caption});if(_.length===0){if(p.download&&!p.webhook&&!p.redirect){await wN(o,v),await f(),d.download({trigger:`auto`,withinSocialShare:!1});return}if(p.webhook&&!p.download&&!p.redirect){await EN(p.webhook,{...T(),assets:await Promise.all(N.value)}),await f(),d.webhook({trigger:`auto`,webhookHost:Zj(p.webhook)});return}if(p.redirect&&!p.download&&!p.webhook)return d.redirect({trigger:`auto`,redirectHost:Zj(p.redirect)}),await f(),await DN(p.redirect,{...T(),assets:await Promise.all(N.value)})}let O;if(E.value&&u===`image`&&S.value){let t=vS(n.value),r=k.value,a=e.value?.format??`png`,u=D.value,p=new Map;C.value?.activate(),O=use({canvases:S.value,primaryCanvasId:b.id,primaryFiles:o,primaryRemote:N.value,prerender:a!==`pdf`&&!u,renderCanvas:async e=>{let n,o;try{if(!C.value)throw Error(`No sibling renderers`);({live:n,serial:o}=await C.value.renderer(e.id))}catch(t){console.warn(`[EXPORT] sibling ${e.id} has no local renderer, using the server`,t),n=void 0,o=await e.loadSerial()}let l=n=>xN(n,o,t,a,s.value,i.value??`TEMPLATE_ID_UNDEFINED`,c,u,h.value,r,e.id,x.value),d=await l(n);return d.renderLocation===`client`&&d.files[0]&&await iM(d.files[0])&&(console.warn(`[EXPORT] local render of ${e.id} came out blank, using the server`),d=await l(void 0)),d.files},upload:e=>I(e,l),consume:e=>{if(e.id===b.id)return f();let n=p.get(e.id);return n||(n=ee(e,t,r),p.set(e.id,n)),n()},onSelectionChange:e=>d.setDelivered(e)})}w({draggable:!1,disableBackgroundEffect:window.innerWidth>700,transculent:!0,type:window.innerWidth<=700?`layer`:`frame`,content:()=>(0,t.h)(sse,{templateId:i.value??`TEMPLATE_ID_UNDEFINED`,campaignId:s.value??-1,data:n.value,exportOptions:r.value,caption:y.value??e.value?.caption,assets:o,assetsRemote:N.value,baseName:a.value,mediaType:u,bridge:g.value,analytics:d,consumeCredit:f,primaryCanvas:{...b,segments:e.value?.frames??{x:1,y:1}},multiCanvas:O,snapshots:C.value?.snapshots,snapshotFailed:C.value?.snapshotFailed,demandSnapshots:C.value?.demand}),customClasses:[`bx-template-editor-export-popup`,`flush-content-x`]})}function R(){let e=r.value.actionalConnections,t=r.value.socialConnections,n=[];e.download&&n.push(`download`),e.webhook&&n.push(`webhook`),e.redirect&&n.push(`redirect`);let i=Object.entries(t).filter(([,e])=>e).map(([e])=>e);return{enabledActions:n,enabledSocials:i,optionCount:n.length+i.length}}async function ne(){if(!s.value)return console.error(`No campaign ID available for export`);if(!e.value)return console.error(`No serial available for export`);if(!o.value)return console.error(`No live template component reference available for export`);let t=e.value?.format??`png`,r=t in vN?`video`:`image`,{enabledActions:a,enabledSocials:l,optionCount:u}=R(),d=new Qj(v.value,{templateId:i.value??`TEMPLATE_ID_UNDEFINED`,campaignId:s.value,format:t,mediaType:r,watermark:h.value,enforceServerSideRendering:r===`video`?O.value:D.value,enabledActions:a,enabledSocials:l,optionCount:u,dataStateHash:k.value,tabSessionId:Vse,canvasId:b.value,canvasWidth:e.value.width,canvasHeight:e.value.height,availableCanvasCount:Math.max(1,S.value?.length??1)});E.value&&r===`image`&&C.value?.activate();let p=performance.now(),m=()=>Math.round(performance.now()-p);if(d.attempt(),P.value=!0,F.value=void 0,t in _N){console.log(`[EXPORT] Starting image export`,t),console.log(`sessionState`,k.value);let r;try{r=await xN(o.value,e.value,n.value,t,s.value,i.value??`TEMPLATE_ID_UNDEFINED`,c,D.value,h.value,k.value,b.value,x.value)}catch(e){throw P.value=!1,d.renderFailure({renderLocation:`unknown`,renderDurationMs:m(),error:e instanceof Error?e.message:String(e)}),e}P.value=!1,d.renderSuccess({renderLocation:r.renderLocation,renderDurationMs:m(),fileCount:r.files.length,clientRenderFailed:r.clientRenderFailed});let a=M((0,bi.generateBillingKey)(s.value,i.value??`TEMPLATE_ID_UNDEFINED`,n.value,e.value,b.value),k.value);await te(r.files,t,`image`,d,a)}else if(t in vN){let r=null,a;F.value=0;let l=!rM()||O.value?`server`:`client`;if(l===`server`){let e=0,o=0,l=0;try{let[a]=(await bN(s.value,i.value??`TEMPLATE_ID_UNDEFINED`,n.value,t,c,t=>{t.type===`keyframe`?(e=t.frame,l=t.totalFrames):t.type===`encode_video`&&(o=t.frame,l=t.totalFrames),F.value=(e+o)/(l*2)},b.value)).files,u=await fetch(a);if(!u.ok)throw Error(`Failed to download the rendered video: ${u.status}`);r=await u.blob()}catch(e){console.error(`[VIDEO EXPORT] Server rendering failed`,e),a=e instanceof Error?e.message:String(e)}finally{P.value=!1,F.value=void 0}}else{let t=o.value,n=e.value.animation.fps,i=Math.ceil(e.value.animation.duration*n),s=document.createElement(`canvas`),c=async(e,n)=>(f.value=n,await t.render({type:_N.png,resolution:1,quality:100,vectorExportOptions:{keepGroupTransforms:!0,mode:`optimized`,rasterizeAllMasks:!1,vectorizeAllTexts:!0},resultType:`canvas`,watermark:h.value,externalCanvas:s,svgLoadWaitDelay:x.value}));try{r=await lse({fps:n,totalFrames:i,renderFrame:c,onProgress:(e,t)=>{F.value=e/t}})}catch(e){console.error(`[VIDEO EXPORT] Local encoding failed`,e),a=e instanceof Error?e.message:String(e)}finally{P.value=!1,F.value=void 0}}if(r){d.renderSuccess({renderLocation:l,renderDurationMs:m(),fileCount:1,clientRenderFailed:!1});let a=l===`server`?async()=>{}:M((0,bi.generateBillingKey)(s.value,i.value??`TEMPLATE_ID_UNDEFINED`,n.value,e.value,b.value),k.value);await te([r],t,`video`,d,a)}else d.renderFailure({renderLocation:l,renderDurationMs:m(),error:a??`Video rendering produced no file`}),T({type:`error`,message:`The video could not be exported. Please try again.`})}else P.value=!1,F.value=void 0,d.renderFailure({renderLocation:`unknown`,renderDurationMs:m(),error:`Unsupported export format: ${t}`}),T({type:`error`,message:`This format can't be exported in the design generator.`})}let re=!1;async function ie(){if(re||!_.value||!e.value||!o.value)return;let t=e.value.format??`png`,n=null;if(t in _N){if(t===`pdf`||D.value)return;n=t}else if(t in vN){if(O.value||!rM())return;n=`png`}else return;re=!0;try{console.log(`[RENDER]: Pre-caching local rendering assets`),await o.value.render({type:_N[n],resolution:1,quality:100,vectorExportOptions:{keepGroupTransforms:!0,mode:`optimized`,rasterizeAllMasks:!1,vectorizeAllTexts:!0},watermark:!1,resultType:`blob`,externalCanvas:null,svgLoadWaitDelay:0}),console.log(`[RENDER]: Pre-cache complete`)}catch(e){console.warn(`[RENDER]: Pre-cache local render failed (ignored)`,e),re=!1}}async function B(t,n=`image`){s.value&&e.value&&await M((0,bi.generateBillingKey)(s.value,i.value??`TEMPLATE_ID_UNDEFINED`,t,e.value,b.value),(0,bv.default)({templateId:i.value,data:t,serial:e.value,campaignId:s.value}),{usage:n===`video`?`batch-video`:`batch-image`,always:!0})()}return{triggerExport:ne,consumeOutputFor:B,preCacheLocalRender:ie,rendering:P,videoRenderingProgress:F}}async function Use(e,t,n,r,i,a,o=`campaign-conversion`,s=[]){console.log(`[CREDITS] Reporting export for billing`,{usage:o,assets:s});let c={campaignId:n,templateId:r,usage:o,assets:s,sessionState:i,balanceName:`EMBED`,billingKey:a};await fetch(`${e}/api/public/consume-credits?env=${encodeURIComponent(t)}`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify(c)})}function Wse(){return typeof navigator>`u`?!1:!!(/iPhone|iPad|iPod/i.test(navigator.userAgent)||navigator.maxTouchPoints>1&&/Macintosh/.test(navigator.userAgent))}function SN(e){if(!Wse()||typeof navigator.share!=`function`||typeof navigator.canShare!=`function`)return!1;try{return navigator.canShare({files:e})}catch{return!1}}function CN(e){return e.map(({blob:e,name:t})=>new File([e],t,{type:e.type}))}async function wN(e,t){return TN(nM([{canvas:{id:`default`,width:0,height:0},files:e}],t),t)}async function Gse(e,t){return TN(nM(e,t),t)}async function TN(e,t){let n=CN(e);if(SN(n))try{await navigator.share({files:n});return}catch(e){if(e instanceof Error&&e.name===`AbortError`)return;console.warn(`[download] iOS native share failed, falling back to download`,e)}if(e.length===1){let[{blob:t,name:n}]=e;(0,zj.default)(t,n,t.type)}else{let{downloadZip:n}=await Promise.resolve().then(()=>(gN(),eN)),r=await(await n(e.map(({blob:e,name:t})=>({input:e,name:t})))).blob();(0,zj.default)(r,`${t}.${Jj.getExtension(r.type)}`,r.type)}}async function EN(e,t){let n={templateId:t.templateId,campaignId:t.campaignId,data:t.data,assets:t.assets,caption:t.caption,...t.canvases?{canvases:t.canvases}:{}},r=await fetch(e,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify(n)});if(!r.ok)throw Error(`Failed to send webhook: ${r.statusText}`)}async function DN(e,t){let n=new URL(e);n.searchParams.set(`templateId`,t.templateId),n.searchParams.set(`campaignId`,t.campaignId.toString()),n.searchParams.set(`data`,JSON.stringify(t.data)),t.caption&&n.searchParams.set(`caption`,t.caption),t.assets.forEach((e,t)=>{n.searchParams.set(`asset_${t+1}`,e)}),window.location.href=n.toString()}var ON=1024;function kN(){return typeof crypto<`u`&&`randomUUID`in crypto?crypto.randomUUID().slice(0,8):Math.random().toString(36).slice(2,10)}function Kse(e){let n=(0,t.ref)([]),r=(0,t.ref)(``),i=(0,t.ref)(new Set);function a(){if(!e.storageKey.value)return null;try{let t=sessionStorage.getItem(e.storageKey.value);if(!t)return null;let n=JSON.parse(t);return n&&n.v===1&&Array.isArray(n.rows)?n:null}catch{return null}}function o(t){return{id:kN(),data:{...vS(e.seed()),...vS(t??{})}}}function s(){let t=e.initial?.length?{v:1,rows:e.initial}:a();t&&t.rows.length>0?(n.value=t.rows.slice(0,ON).map(t=>({id:t.id||kN(),data:{...vS(e.seed()),...t.data??{}}})),r.value=t.activeRowId&&n.value.some(e=>e.id===t.activeRowId)?t.activeRowId:n.value[0].id):(n.value=[o()],r.value=n.value[0].id)}s(),(0,t.watch)(e.storageKey,()=>s());let c;function l(){e.storageKey.value&&(clearTimeout(c),c=setTimeout(()=>{try{let t={v:1,rows:n.value,activeRowId:r.value};sessionStorage.setItem(e.storageKey.value,JSON.stringify(t))}catch{}},250))}(0,t.watch)([n,r],l,{deep:!0});let u=(0,t.computed)(()=>n.value.findIndex(e=>e.id===r.value)),d=(0,t.computed)(()=>n.value[u.value]??n.value[0]),f=(0,t.computed)(()=>n.value.filter(e=>i.value.has(e.id))),p=(0,t.computed)(()=>f.value.length>0?f.value:n.value),m=(0,t.computed)(()=>n.value.length>0&&f.value.length===n.value.length),h=(0,t.computed)(()=>n.value.length>=ON);function g(e){n.value.some(t=>t.id===e)&&(r.value=e)}function _(e){let t=Math.min(n.value.length-1,Math.max(0,u.value+e));r.value=n.value[t].id}function v(e=r.value){if(h.value)return;let t=n.value.findIndex(t=>t.id===e),i=o((n.value[t]??n.value[n.value.length-1])?.data);return n.value.splice((t>=0?t:n.value.length-1)+1,0,i),r.value=i.id,i}function y(e){let t=new Set(e);if(t.size===0)return;let a=n.value.filter(e=>!t.has(e.id));if(a.length===0){let e=o();n.value=[e],r.value=e.id}else{let e=u.value;n.value=a,a.some(e=>e.id===r.value)||(r.value=a[Math.min(e,a.length-1)].id)}let s=new Set(i.value);e.forEach(e=>s.delete(e)),i.value=s}function b(e,t){let r=n.value.findIndex(t=>t.id===e),i=r+t;if(r<0||i<0||i>=n.value.length)return;let a=n.value.slice();[a[r],a[i]]=[a[i],a[r]],n.value=a}function x(e,t){let n=new Set(i.value);t??!n.has(e)?n.add(e):n.delete(e),i.value=n}function S(e){i.value=e?new Set(n.value.map(e=>e.id)):new Set}function C(e,t){let r=Math.min(e+t,ON)-n.value.length;for(let e=0;e<r;e++)n.value.push(o(n.value[n.value.length-1]?.data));return n.value.slice(e,e+t)}function w(e,t){let a=e.map(e=>o(e)),s=t===`replace`?a:[...n.value,...a],c=s.slice(0,ON);return n.value=c.length>0?c:[o()],n.value.some(e=>e.id===r.value)||(r.value=n.value[0].id),t===`replace`&&(i.value=new Set),{imported:a.length,dropped:s.length-c.length}}function T(e){e.length!==0&&(n.value=e.slice(0,ON),n.value.some(e=>e.id===r.value)||(r.value=n.value[0].id))}return{rows:n,activeRowId:r,activeIndex:u,activeRow:d,selectedIds:i,selectedRows:f,targetRows:p,allSelected:m,atCapacity:h,setActive:g,activateOffset:_,addRow:v,removeRows:y,moveRow:b,toggleSelected:x,selectAll:S,ensureRowsFrom:C,importRows:w,replaceAll:T,makeRow:o}}var qse={class:`intro`},Jse={class:`field`},Yse=[`id`],Xse={key:0,class:`field`},Zse=[`id`],Qse={key:1,class:`field`},$se=[`id`],ece={key:2,class:`field checkbox-field`},tce={class:`summary`,"aria-live":`polite`},nce={class:`buttons`},rce={class:`intro`},ice={class:`progress-meta`},ace={key:0},oce={class:`buttons`},sce={class:`intro`},cce={class:`buttons`},lce=U((0,t.defineComponent)({__name:`BatchExportPopup`,props:{kind:{},rowCount:{},templateName:{},isVideoTemplate:{type:Boolean},videoBatchMaxSize:{},consumesCredits:{type:Boolean},namingBindings:{},run:{type:Function}},emits:[`cancel`,`done`],setup(e,{expose:n,emit:r}){let i=e,a=r,o={format:h(`bx-batch-format`),naming:h(`bx-batch-naming`),delimiter:h(`bx-batch-delimiter`)},s=ON,c=[{label:`PNG`,value:`png`},{label:`JPEG`,value:`jpeg`},{label:`WebP`,value:`webp`},{label:`PDF`,value:`pdf`}],l=[{label:`MP4`,value:`mp4`},{label:`MOV`,value:`mov`}],u=(0,t.computed)(()=>{let e=i.isVideoTemplate?l:c;return i.kind===`files`?e:[...e.map(e=>({...e,label:`${e.label} link`})),{label:`Template link (prefilled editor)`,value:`template-link`}]}),d=(0,t.ref)(i.isVideoTemplate?`mp4`:`png`),f=(0,t.computed)(()=>[{label:`Row number`,value:`__index`},...i.namingBindings.map(e=>({label:e.label,value:e.key}))]),p=(0,t.ref)(`__index`),m=[{label:`Comma (,)`,value:`,`},{label:`Semicolon (;)`,value:`;`}],g=(0,t.ref)(`,`),_=(0,t.ref)(!0),v=(0,t.computed)(()=>i.isVideoTemplate&&d.value!==`template-link`),y=(0,t.computed)(()=>!v.value||i.rowCount<=i.videoBatchMaxSize),b=(0,t.computed)(()=>y.value?``:i.videoBatchMaxSize<=1?`Video batch export is not part of your plan: videos export one row at a time. Select a single row, or use the template link format.`:`Your plan renders up to ${i.videoBatchMaxSize} videos per batch. Select at most ${i.videoBatchMaxSize} rows.`),x=(0,t.computed)(()=>i.rowCount>0&&i.rowCount<=s&&y.value);function S(e,t){let n=bi.BillingV3.BILLABLE_USAGE_UNIT_COST_CENTI[e]*t/bi.BillingV3.CENTICREDITS_PER_CREDIT;return n>=1?String(Math.round(n*100)/100):n.toFixed(2).replace(/0+$/,``).replace(/\.$/,``)}let C=(0,t.computed)(()=>{let e=i.rowCount,t=`${e} ${e===1?`row`:`rows`}`;return i.kind===`files`?i.consumesCredits?v.value?`${t} · ${S(`batch-video`,e)} credits will be consumed, one per video`:`${t} · ${S(`batch-image`,e)} credits will be consumed`:`${t} · watermarked, so no credits are consumed`:d.value===`template-link`?`${t} · links open the editor prefilled, nothing is rendered now`:_.value?v.value?`${t} · rendering the links now consumes ${S(`video-api`,e)} credits, one per video`:`${t} · rendering the links now consumes about ${S(`image-api`,e)} credits`:`${t} · each link renders (and is metered) when first opened`}),w=(0,t.ref)(`configure`),T=(0,t.ref)({done:0,total:0,failed:0,current:0}),E=(0,t.computed)(()=>T.value.total?Math.min(1,(T.value.done+T.value.failed+T.value.current)/T.value.total):0),D=(0,t.computed)(()=>i.kind===`files`?`Rendering ${v.value?`videos`:`images`}… ${T.value.done} of ${T.value.total}`:`Rendering the links… ${T.value.done} of ${T.value.total}`),O,k=(0,t.ref)(),A=(0,t.ref)(0),j=(0,t.ref)([]),M=(0,t.ref)([]),N=(0,t.computed)(()=>{let e=M.value.map(e=>e.index+1),t=e.slice(0,5),n=e.length-t.length;return e.length===1?`row ${t[0]}`:n>0?`rows ${t.join(`, `)} and ${n} more`:`rows ${t.slice(0,-1).join(`, `)} and ${t[t.length-1]}`}),P=(0,t.ref)(``),F=(0,t.ref)(``);async function I(){if(x.value){O=new AbortController,w.value=`running`,T.value={done:0,total:i.rowCount,failed:0,current:0};try{let e=await i.run({kind:i.kind,format:d.value,naming:p.value===`__index`?{kind:`index`}:{kind:`binding`,key:p.value},delimiter:g.value,prewarm:_.value&&d.value!==`template-link`,signal:O.signal,onProgress:e=>{T.value={done:e.done,total:e.total,failed:e.failed??0,current:e.current??0}}});k.value=e.output,A.value=e.fileCount??0,j.value=e.overBudget??[],M.value=e.failedRows??[],P.value=e.prewarmed?` · ${e.prewarmed.done-e.prewarmed.failed} of ${T.value.total} links rendered${e.prewarmed.failed?`, ${e.prewarmed.failed} failed`:``}`:``,e.cancelled&&(F.value=`Export cancelled.`),a(`done`,e)}catch(e){console.error(`[batch] export failed`,e),F.value=i.kind===`files`?`The export failed: no row rendered, so there is nothing to download. Nothing was charged. Please try again.`:`The export failed. Please try again.`}w.value=`done`}}function L(){O?.abort()}async function ee(){if(k.value){if(i.kind===`csv`){(0,zj.default)(k.value.blob,k.value.fileName,`text/csv`);return}await wN([k.value.blob],k.value.fileName.replace(/\.[a-z0-9]+$/i,``))}}return n({cancelRun:L}),(n,r)=>((0,t.openBlock)(),(0,t.createElementBlock)(`div`,{class:(0,t.normalizeClass)([`bx-batch-export-popup`,{[`phase-`+w.value]:!0}])},[w.value===`configure`?((0,t.openBlock)(),(0,t.createElementBlock)(t.Fragment,{key:0},[(0,t.createElementVNode)(`p`,qse,[e.kind===`files`?((0,t.openBlock)(),(0,t.createElementBlock)(t.Fragment,{key:0},[(0,t.createTextVNode)(` Renders `+(0,t.toDisplayString)(e.rowCount)+` `+(0,t.toDisplayString)(e.rowCount===1?`row`:`rows`)+` on the server and hands you `+(0,t.toDisplayString)(e.rowCount===1?`the file`:`a zip`)+`. `,1)],64)):((0,t.openBlock)(),(0,t.createElementBlock)(t.Fragment,{key:1},[(0,t.createTextVNode)(` Writes the `+(0,t.toDisplayString)(e.rowCount)+` `+(0,t.toDisplayString)(e.rowCount===1?`row`:`rows`)+` to a CSV — one column per field, plus a link to the result of every row. `,1)],64))]),(0,t.createElementVNode)(`div`,Jse,[(0,t.createElementVNode)(`span`,{class:`label`,id:o.format},`Format`,8,Yse),(0,t.createVNode)(bC,{modelValue:d.value,"onUpdate:modelValue":r[0]||=e=>d.value=e,options:u.value,bordered:``,"aria-labelledby":o.format},null,8,[`modelValue`,`options`,`aria-labelledby`])]),e.kind===`files`?((0,t.openBlock)(),(0,t.createElementBlock)(`div`,Xse,[(0,t.createElementVNode)(`span`,{class:`label`,id:o.naming},`Name files by`,8,Zse),(0,t.createVNode)(bC,{modelValue:p.value,"onUpdate:modelValue":r[1]||=e=>p.value=e,options:f.value,bordered:``,"aria-labelledby":o.naming},null,8,[`modelValue`,`options`,`aria-labelledby`])])):(0,t.createCommentVNode)(``,!0),e.kind===`csv`?((0,t.openBlock)(),(0,t.createElementBlock)(`div`,Qse,[(0,t.createElementVNode)(`span`,{class:`label`,id:o.delimiter},`Separator`,8,$se),(0,t.createVNode)(bC,{modelValue:g.value,"onUpdate:modelValue":r[2]||=e=>g.value=e,options:m,bordered:``,"aria-labelledby":o.delimiter},null,8,[`modelValue`,`aria-labelledby`])])):(0,t.createCommentVNode)(``,!0),e.kind===`csv`&&d.value!==`template-link`?((0,t.openBlock)(),(0,t.createElementBlock)(`div`,ece,[(0,t.createVNode)(rT,{modelValue:_.value,"onUpdate:modelValue":r[3]||=e=>_.value=e,size:`medium`,disabled:!y.value},null,8,[`modelValue`,`disabled`]),r[6]||=(0,t.createElementVNode)(`span`,{class:`label`},`Render the links now`,-1),r[7]||=(0,t.createElementVNode)(`span`,{class:`hint`},`Otherwise every link renders when it is first opened.`,-1)])):(0,t.createCommentVNode)(``,!0),b.value?((0,t.openBlock)(),(0,t.createBlock)(Bj,{key:3,type:`warning`,bordered:!0,"show-icon":!0},{default:(0,t.withCtx)(()=>[(0,t.createTextVNode)((0,t.toDisplayString)(b.value),1)]),_:1})):e.rowCount>(0,t.unref)(s)?((0,t.openBlock)(),(0,t.createBlock)(Bj,{key:4,type:`error`,bordered:!0,"show-icon":!0},{default:(0,t.withCtx)(()=>[(0,t.createTextVNode)(` A batch export is limited to `+(0,t.toDisplayString)((0,t.unref)(s))+` rows. Select the rows you want to export. `,1)]),_:1})):(0,t.createCommentVNode)(``,!0),(0,t.createElementVNode)(`div`,tce,(0,t.toDisplayString)(C.value),1),(0,t.createElementVNode)(`div`,nce,[(0,t.createVNode)(Xy,{secondary:``,onClick:r[4]||=e=>a(`cancel`)},{default:(0,t.withCtx)(()=>[...r[8]||=[(0,t.createTextVNode)(`Cancel`,-1)]]),_:1}),(0,t.createVNode)(Xy,{active:``,disabled:!x.value,onClick:I},{default:(0,t.withCtx)(()=>[(0,t.createTextVNode)((0,t.toDisplayString)(e.kind===`files`?`Export`:`Export CSV`),1)]),_:1},8,[`disabled`])])],64)):w.value===`running`?((0,t.openBlock)(),(0,t.createElementBlock)(t.Fragment,{key:1},[(0,t.createElementVNode)(`p`,rce,(0,t.toDisplayString)(D.value),1),(0,t.createVNode)(cS,{value:E.value},null,8,[`value`]),(0,t.createElementVNode)(`div`,ice,[(0,t.createElementVNode)(`span`,null,(0,t.toDisplayString)(T.value.done)+` / `+(0,t.toDisplayString)(T.value.total)+` `+(0,t.toDisplayString)((e.kind,`rendered`)),1),T.value.failed?((0,t.openBlock)(),(0,t.createElementBlock)(`span`,ace,(0,t.toDisplayString)(T.value.failed)+` failed`,1)):(0,t.createCommentVNode)(``,!0)]),(0,t.createElementVNode)(`div`,oce,[(0,t.createVNode)(Xy,{secondary:``,onClick:L},{default:(0,t.withCtx)(()=>[(0,t.createTextVNode)((0,t.toDisplayString)(e.kind===`files`?`Cancel`:`Stop rendering`),1)]),_:1})])],64)):((0,t.openBlock)(),(0,t.createElementBlock)(t.Fragment,{key:2},[(0,t.createElementVNode)(`p`,sce,[F.value?((0,t.openBlock)(),(0,t.createElementBlock)(t.Fragment,{key:0},[(0,t.createTextVNode)((0,t.toDisplayString)(F.value),1)],64)):e.kind===`files`?((0,t.openBlock)(),(0,t.createElementBlock)(t.Fragment,{key:1},[(0,t.createTextVNode)((0,t.toDisplayString)(A.value)+` `+(0,t.toDisplayString)(A.value===1?`file`:`files`)+` ready.`,1)],64)):((0,t.openBlock)(),(0,t.createElementBlock)(t.Fragment,{key:2},[(0,t.createTextVNode)(`CSV ready`+(0,t.toDisplayString)(P.value)+`.`,1)],64))]),M.value.length?((0,t.openBlock)(),(0,t.createBlock)(Bj,{key:0,type:`warning`,bordered:!0,"show-icon":!0},{default:(0,t.withCtx)(()=>[(0,t.createTextVNode)((0,t.toDisplayString)(M.value.length)+` of `+(0,t.toDisplayString)(T.value.total)+` `+(0,t.toDisplayString)(T.value.total===1?`row`:`rows`)+` failed and `+(0,t.toDisplayString)(M.value.length===1?`is`:`are`)+` not in the download (`+(0,t.toDisplayString)(N.value)+`). `,1),e.consumesCredits?((0,t.openBlock)(),(0,t.createElementBlock)(t.Fragment,{key:0},[(0,t.createTextVNode)(`Rows that rendered were charged; failed rows were not.`)],64)):((0,t.openBlock)(),(0,t.createElementBlock)(t.Fragment,{key:1},[(0,t.createTextVNode)(`Nothing was charged.`)],64))]),_:1})):(0,t.createCommentVNode)(``,!0),j.value.length?((0,t.openBlock)(),(0,t.createBlock)(Bj,{key:1,type:`warning`,bordered:!0,"show-icon":!0},{default:(0,t.withCtx)(()=>[(0,t.createTextVNode)((0,t.toDisplayString)(j.value.length)+` `+(0,t.toDisplayString)(j.value.length===1?`row exceeds`:`rows exceed`)+` the URL length the render API accepts (rows `+(0,t.toDisplayString)(j.value.join(`, `))+`). Those links may not render — shorten their texts or use the template link format. `,1)]),_:1})):(0,t.createCommentVNode)(``,!0),(0,t.createElementVNode)(`div`,cce,[(0,t.createVNode)(Xy,{secondary:``,onClick:r[5]||=e=>a(`cancel`)},{default:(0,t.withCtx)(()=>[...r[9]||=[(0,t.createTextVNode)(`Close`,-1)]]),_:1}),k.value?((0,t.openBlock)(),(0,t.createBlock)(Xy,{key:0,active:``,onClick:ee},{icon:(0,t.withCtx)(()=>[(0,t.createVNode)(Gb,null,{default:(0,t.withCtx)(()=>[(0,t.createVNode)((0,t.unref)(Rb))]),_:1})]),default:(0,t.withCtx)(()=>[(0,t.createTextVNode)(` Download `+(0,t.toDisplayString)(e.kind===`files`?A.value===1?`file`:`zip`:`CSV`),1)]),_:1})):(0,t.createCommentVNode)(``,!0)])],64))],2))}}),[[`__scopeId`,`data-v-5c0586a5`]]);function uce(e){let t=e.toLowerCase();return t===`true`||t===`wahr`||t===`ja`||t===`yes`||t===`1`?{type:`boolean`,value:!0}:t===`false`||t===`falsch`||t===`nein`||t===`no`||t===`0`?{type:`boolean`,value:!1}:null}function dce(e,t){let n=e.trim();return n===``||n.toLowerCase()===`null`||n.toLowerCase()===`n/a`?{type:`null`,value:null}:uce(n)||_ce(n)||gce(n)||fce(n,t)||mce(n)||hce(n)||{type:`string`,value:e}}function fce(e,t){let n=/^([€$£¥₹])\s*([\d\s.,]+)$/,r=/^([\d\s.,]+)\s*%$/,i=/^([\d\s.,]+)\s*([€$£¥₹])$/,a=e,o,s=!1,c=e.match(n);c&&(o=c[1],a=c[2],s=!0);let l=e.match(i);l&&(a=l[1],o=l[2],s=!0);let u=e.match(r);u&&(a=u[1],o=`%`,s=!0),a=a.replace(/\s/g,``);let d=t;if(t===`auto`&&!s&&(d=pce(a)),s){let e=a.lastIndexOf(`.`),t=a.lastIndexOf(`,`),n=Math.max(e,t);if(n>-1){let e=a.substring(n+1);a=e.length<=2&&e.length>0?a.substring(0,n).replace(/[.,]/g,``)+`.`+e:a.replace(/[.,]/g,``)}}else d===`de`?(/^\d{1,3}(\.\d{3})*(,\d+)?$/.test(a)||a.includes(`,`))&&(a=a.replace(/\./g,``).replace(`,`,`.`)):d===`en`&&(/^\d{1,3}(,\d{3})*(\.\d+)?$/.test(a)||a.includes(`,`)&&a.includes(`.`)||a.includes(`,`)&&!a.includes(`.`))&&(a=a.replace(/,/g,``));let f=parseFloat(a);return isNaN(f)?null:{type:`number`,value:f,unit:o}}function pce(e){let t=e.includes(`.`),n=e.includes(`,`);if(!t&&!n)return`en`;if(t&&!n){let t=e.split(`.`);return t.length===2&&t[1].length<=2?`en`:`de`}if(n&&!t){let t=e.split(`,`);return t.length===2&&t[1].length<=2?`de`:`en`}let r=e.lastIndexOf(`.`);return e.lastIndexOf(`,`)>r?`de`:`en`}function mce(e){for(let{pattern:t,format:n}of[{pattern:/^\d{4}-\d{2}-\d{2}(T\d{2}:\d{2}:\d{2})?/,format:`ISO`},{pattern:/^(\d{1,2})\.(\d{1,2})\.(\d{2,4})$/,format:`DD.MM.YYYY`},{pattern:/^(\d{1,2})\/(\d{1,2})\/(\d{2,4})$/,format:`MM/DD/YYYY`},{pattern:/^(\d{1,2})\.(\d{1,2})\.(\d{2,4})\s+(\d{1,2}):(\d{2})/,format:`DD.MM.YYYY HH:MM`}])if(t.test(e)){let t=new Date(e);if(n===`DD.MM.YYYY`){let t=e.match(/^(\d{1,2})\.(\d{1,2})\.(\d{2,4})$/);if(t){let[,e,r,i]=t,a=`${i.length===2?`20${i}`:i}-${r.padStart(2,`0`)}-${e.padStart(2,`0`)}`,o=new Date(a);if(!isNaN(o.getTime()))return{type:`date`,value:o,format:n}}}if(!isNaN(t.getTime()))return{type:`date`,value:t,format:n}}return null}function hce(e){try{return{type:`url`,value:e,protocol:new URL(e).protocol.replace(`:`,``)}}catch{return/^(www\.)?[\w-]+(\.[\w-]+)+/.test(e)?{type:`url`,value:e,protocol:`implicit`}:null}}function gce(e){try{let t=BS(e),n=`keyword`;n=e.startsWith(`#`)?`hex`:e.startsWith(`rgb(`)?`rgb`:e.startsWith(`rgba(`)?`rgba`:e.startsWith(`hsl(`)?`hsl`:e.startsWith(`hsla(`)?`hsla`:`name`;let r=t.rgb().object(),i=t.hsl().object();return{type:`color`,value:e,rgb:{r:r.r,g:r.g,b:r.b},hex:t.hex(),hsl:{h:i.h,s:i.s,l:i.l},alpha:t.alpha(),format:n}}catch{return null}}function _ce(e){if(e.startsWith(`{`)&&e.endsWith(`}`)||e.startsWith(`[`)&&e.endsWith(`]`))try{let t=JSON.parse(e);if(Array.isArray(t))return{type:`json-array`,value:t};if(typeof t==`object`&&t)return{type:`json-object`,value:t}}catch{}return null}function AN(e){return e.type===`string`?e.value:e.type===`number`?e.unit?`${e.value} ${e.unit}`:`${e.value}`:e.type===`boolean`?e.value?`true`:`false`:e.type===`date`?e.value.toISOString():e.type===`url`||e.type===`color`?e.value:e.type===`json-object`||e.type===`json-array`?JSON.stringify(e.value):e.type===`null`?`null`:``}function vce(e,t){return e.map(e=>e.map(e=>dce(e,t)))}function yce(e){let t=e.split(/\r?\n/).filter(e=>e.length>0).slice(0,20);if(t.length===0)return`,`;let n=(e,t)=>{let n=0,r=!1;for(let i=0;i<e.length;i++){let a=e[i];if(a===`"`){if(r&&e[i+1]===`"`){i++;continue}r=!r}else a===t&&!r&&n++}return n},r=t.map(e=>n(e,`,`)),i=t.map(e=>n(e,`;`)),a=r.reduce((e,t)=>e+t,0),o=i.reduce((e,t)=>e+t,0);if(a>0&&o===0)return`,`;if(o>0&&a===0)return`;`;if(a===0&&o===0)return`,`;let s=e=>{let t=e.reduce((e,t)=>e+t,0)/e.length;return e.reduce((e,n)=>e+(n-t)**2,0)/e.length},c=s(r),l=s(i);return c===l?a>=o?`,`:`;`:c<l?`,`:`;`}function bce(e,t=`,`){let n=[],r=[],i=``,a=!1,o=0,s=e.length;for(;o<s;){let s=e[o];if(a){if(s===`"`){if(e[o+1]===`"`){i+=`"`,o+=2;continue}a=!1,o++;continue}i+=s,o++;continue}if(s===`"`){a=!0,o++;continue}if(s===t){r.push(i),i=``,o++;continue}if(s===`\r`||s===`
233
+ `);let t=e.split(/\r?\n/),r=``;for(let e of t)e.startsWith(`data:`)&&(r+=e.slice(5).trim());c(r)}}}catch(e){throw f.cancel().catch(()=>{}),e}if(!s||s.length===0)throw Error(`No files found`);return{files:s,creditsConsumed:0}}async function xN(e,t,n,r,i,a,o,s,c,l,u,d){let f=null,p=!1,m=!1;if((r===`png`||r===`jpeg`||r===`webp`)&&!s&&e){console.log(`[RENDER]: Local rendering started`),p=!0;try{let n=t.frames?.x??1,i=t.frames?.y??1,a=t.width/n,o=t.height/i,s=Array(n*i).fill(0).map((e,t)=>({x:t%n*a,y:o*Math.floor(t/n),width:a,height:o}));if(s.length>1){let t=await e.render({type:_N[r],resolution:1,quality:100,vectorExportOptions:{keepGroupTransforms:!0,mode:`optimized`,rasterizeAllMasks:!1,vectorizeAllTexts:!0},watermark:c,resultType:`canvas`,externalCanvas:null,svgLoadWaitDelay:d});f=[];for(let e of s){let n=await Vj({imageSource:t,cropX:e.x,cropY:e.y,cropWidth:e.width,cropHeight:e.height,quality:100,type:_N[r]},`blob`);f.push(n)}}else f=[await e.render({type:_N[r],resolution:1,quality:100,vectorExportOptions:{keepGroupTransforms:!0,mode:`optimized`,rasterizeAllMasks:!1,vectorizeAllTexts:!0},watermark:c,resultType:`blob`,externalCanvas:null,svgLoadWaitDelay:d})]}catch(e){console.error(`[RENDER]: Local rendering error`,e),m=!0}}if(!f){console.log(`[RENDER]: Remote rendering started`);try{let e=await yN(i,a,n,t.width,t.height,t.frames?.x??1,t.frames?.y??1,r,o,u);if(e.type===`application/zip`){f=[];let{unzip:t}=await Promise.resolve().then(()=>($M(),aM)),n=await t(e);for(let[e,t]of Object.entries(n.entries)){let n=await t.blob(Jj.getType(e)||`image/png`);f.push(n)}}else f=[e]}catch(e){throw console.error(`[RENDER]: Remote rendering error`,e),Error(`Failed to render serial remotely`)}}return{files:f,renderLocation:p&&!m?`client`:`server`,clientRenderFailed:m}}function Hse(e,n,r,i,a,o,s,c,l,u,d,f,p,h,g,_,v,y=(0,t.ref)(void 0),b=(0,t.ref)(void 0),x=(0,t.ref)(void 0),S=(0,t.ref)(void 0),C=(0,t.ref)(void 0)){let{createPopup:w,createMessage:T}=oS(),E=(0,t.computed)(()=>(S.value?.length??0)>=2&&!!b.value),D=(0,t.computed)(()=>u.value||(e.value?.enforceServersideRendering??!1)),O=(0,t.computed)(()=>d.value||(e.value?.enforceServersideRendering??!1)),k=(0,t.computed)(()=>{try{return(0,bv.default)({templateId:i.value,data:n.value,serial:e.value,campaignId:s.value})}catch(e){return console.error(`Error computing session state hash`,e),`SESSION_STATE_HASH_ERROR`}}),A=new Set;function j(t){let n=e.value?.format??`png`,r=t?.width??e.value?.width,i=t?.height??e.value?.height;return n in vN?{type:`video`,width:r,height:i,format:n,duration:e.value?.animation?.duration??0,vcodec:`libx264`}:{type:`image`,width:r,height:i,format:n}}function M(e,t,n={usage:`campaign-conversion`},r){return async()=>{if((n.always?!h.value:p.value)&&s.value&&e!==null&&!A.has(e)){A.add(e);try{await Use(c.apiBaseUrl,c.env,s.value,i.value??`TEMPLATE_ID_UNDEFINED`,t,e,n.usage,[j(r)])}catch(t){console.error(`[CREDITS] Failed to consume credits on output`,t),A.delete(e)}}}}let N=(0,t.ref)([]),P=(0,t.ref)(!1),F=(0,t.ref)();function I(e,t){return e.map(async e=>{let n=`${c.apiBaseUrl}/api/public/temp-image`,r=new FormData;r.append(`file`,e,`${m()}.${t}`);let i=await fetch(n,{method:`POST`,body:r});if(!i.ok)throw Error(`Failed to upload asset: ${i.statusText}`);return(await i.json()).url})}function L(){let t=S.value?.find(e=>e.id===b.value);return{id:b.value??`default`,width:t?.width??e.value?.width??0,height:t?.height??e.value?.height??0}}function ee(t,n,r){return!s.value||!e.value?async()=>{}:M((0,bi.generateBillingKey)(s.value,i.value??`TEMPLATE_ID_UNDEFINED`,n,e.value,t.id),`${r}:${t.id}`,{usage:`campaign-conversion`},t)}async function te(o,l,u,d,f){let p=r.value.actionalConnections,m=r.value.socialConnections,_=Object.entries(m).filter(([e,t])=>t).map(([e])=>e),v=a.value??i.value??`TEMPLATE_ID_UNDEFINED`,b=L();d.setDelivered([{...b,fileCount:o.length}]),p.webhook||p.redirect||_.length>0?N.value=I(o,l):N.value=[];let T=()=>({assets:[],templateId:i.value??`TEMPLATE_ID_UNDEFINED`,campaignId:s.value??-1,data:n.value,caption:y.value??e.value?.caption}),O=E.value&&u===`image`&&!!S.value;if(_.length===0&&!O){if(p.download&&!p.webhook&&!p.redirect){await wN(o,v),await f(),d.download({trigger:`auto`,withinSocialShare:!1});return}if(p.webhook&&!p.download&&!p.redirect){await EN(p.webhook,{...T(),assets:await Promise.all(N.value)}),await f(),d.webhook({trigger:`auto`,webhookHost:Zj(p.webhook)});return}if(p.redirect&&!p.download&&!p.webhook)return d.redirect({trigger:`auto`,redirectHost:Zj(p.redirect)}),await f(),await DN(p.redirect,{...T(),assets:await Promise.all(N.value)})}let A;if(O&&S.value){let t=vS(n.value),r=k.value,a=e.value?.format??`png`,u=D.value,p=new Map;C.value?.activate(),A=use({canvases:S.value,primaryCanvasId:b.id,primaryFiles:o,primaryRemote:N.value,prerender:a!==`pdf`&&!u,renderCanvas:async e=>{let n,o;try{if(!C.value)throw Error(`No sibling renderers`);({live:n,serial:o}=await C.value.renderer(e.id))}catch(t){console.warn(`[EXPORT] sibling ${e.id} has no local renderer, using the server`,t),n=void 0,o=await e.loadSerial()}let l=n=>xN(n,o,t,a,s.value,i.value??`TEMPLATE_ID_UNDEFINED`,c,u,h.value,r,e.id,x.value),d=await l(n);return d.renderLocation===`client`&&d.files[0]&&await iM(d.files[0])&&(console.warn(`[EXPORT] local render of ${e.id} came out blank, using the server`),d=await l(void 0)),d.files},upload:e=>I(e,l),consume:e=>{if(e.id===b.id)return f();let n=p.get(e.id);return n||(n=ee(e,t,r),p.set(e.id,n)),n()},onSelectionChange:e=>d.setDelivered(e)})}w({draggable:!1,disableBackgroundEffect:window.innerWidth>700,transculent:!0,type:window.innerWidth<=700?`layer`:`frame`,content:()=>(0,t.h)(sse,{templateId:i.value??`TEMPLATE_ID_UNDEFINED`,campaignId:s.value??-1,data:n.value,exportOptions:r.value,caption:y.value??e.value?.caption,assets:o,assetsRemote:N.value,baseName:a.value,mediaType:u,bridge:g.value,analytics:d,consumeCredit:f,primaryCanvas:{...b,segments:e.value?.frames??{x:1,y:1}},multiCanvas:A,snapshots:C.value?.snapshots,snapshotFailed:C.value?.snapshotFailed,demandSnapshots:C.value?.demand}),customClasses:[`bx-template-editor-export-popup`,`flush-content-x`]})}function R(){let e=r.value.actionalConnections,t=r.value.socialConnections,n=[];e.download&&n.push(`download`),e.webhook&&n.push(`webhook`),e.redirect&&n.push(`redirect`);let i=Object.entries(t).filter(([,e])=>e).map(([e])=>e);return{enabledActions:n,enabledSocials:i,optionCount:n.length+i.length}}async function ne(){if(!s.value)return console.error(`No campaign ID available for export`);if(!e.value)return console.error(`No serial available for export`);if(!o.value)return console.error(`No live template component reference available for export`);let t=e.value?.format??`png`,r=t in vN?`video`:`image`,{enabledActions:a,enabledSocials:l,optionCount:u}=R(),d=new Qj(v.value,{templateId:i.value??`TEMPLATE_ID_UNDEFINED`,campaignId:s.value,format:t,mediaType:r,watermark:h.value,enforceServerSideRendering:r===`video`?O.value:D.value,enabledActions:a,enabledSocials:l,optionCount:u,dataStateHash:k.value,tabSessionId:Vse,canvasId:b.value,canvasWidth:e.value.width,canvasHeight:e.value.height,availableCanvasCount:Math.max(1,S.value?.length??1)});E.value&&r===`image`&&C.value?.activate();let p=performance.now(),m=()=>Math.round(performance.now()-p);if(d.attempt(),P.value=!0,F.value=void 0,t in _N){console.log(`[EXPORT] Starting image export`,t),console.log(`sessionState`,k.value);let r;try{r=await xN(o.value,e.value,n.value,t,s.value,i.value??`TEMPLATE_ID_UNDEFINED`,c,D.value,h.value,k.value,b.value,x.value)}catch(e){throw P.value=!1,d.renderFailure({renderLocation:`unknown`,renderDurationMs:m(),error:e instanceof Error?e.message:String(e)}),e}P.value=!1,d.renderSuccess({renderLocation:r.renderLocation,renderDurationMs:m(),fileCount:r.files.length,clientRenderFailed:r.clientRenderFailed});let a=M((0,bi.generateBillingKey)(s.value,i.value??`TEMPLATE_ID_UNDEFINED`,n.value,e.value,b.value),k.value);await te(r.files,t,`image`,d,a)}else if(t in vN){let r=null,a;F.value=0;let l=!rM()||O.value?`server`:`client`;if(l===`server`){let e=0,o=0,l=0;try{let[a]=(await bN(s.value,i.value??`TEMPLATE_ID_UNDEFINED`,n.value,t,c,t=>{t.type===`keyframe`?(e=t.frame,l=t.totalFrames):t.type===`encode_video`&&(o=t.frame,l=t.totalFrames),F.value=(e+o)/(l*2)},b.value)).files,u=await fetch(a);if(!u.ok)throw Error(`Failed to download the rendered video: ${u.status}`);r=await u.blob()}catch(e){console.error(`[VIDEO EXPORT] Server rendering failed`,e),a=e instanceof Error?e.message:String(e)}finally{P.value=!1,F.value=void 0}}else{let t=o.value,n=e.value.animation.fps,i=Math.ceil(e.value.animation.duration*n),s=document.createElement(`canvas`),c=async(e,n)=>(f.value=n,await t.render({type:_N.png,resolution:1,quality:100,vectorExportOptions:{keepGroupTransforms:!0,mode:`optimized`,rasterizeAllMasks:!1,vectorizeAllTexts:!0},resultType:`canvas`,watermark:h.value,externalCanvas:s,svgLoadWaitDelay:x.value}));try{r=await lse({fps:n,totalFrames:i,renderFrame:c,onProgress:(e,t)=>{F.value=e/t}})}catch(e){console.error(`[VIDEO EXPORT] Local encoding failed`,e),a=e instanceof Error?e.message:String(e)}finally{P.value=!1,F.value=void 0}}if(r){d.renderSuccess({renderLocation:l,renderDurationMs:m(),fileCount:1,clientRenderFailed:!1});let a=l===`server`?async()=>{}:M((0,bi.generateBillingKey)(s.value,i.value??`TEMPLATE_ID_UNDEFINED`,n.value,e.value,b.value),k.value);await te([r],t,`video`,d,a)}else d.renderFailure({renderLocation:l,renderDurationMs:m(),error:a??`Video rendering produced no file`}),T({type:`error`,message:`The video could not be exported. Please try again.`})}else P.value=!1,F.value=void 0,d.renderFailure({renderLocation:`unknown`,renderDurationMs:m(),error:`Unsupported export format: ${t}`}),T({type:`error`,message:`This format can't be exported in the design generator.`})}let re=!1;async function ie(){if(re||!_.value||!e.value||!o.value)return;let t=e.value.format??`png`,n=null;if(t in _N){if(t===`pdf`||D.value)return;n=t}else if(t in vN){if(O.value||!rM())return;n=`png`}else return;re=!0;try{console.log(`[RENDER]: Pre-caching local rendering assets`),await o.value.render({type:_N[n],resolution:1,quality:100,vectorExportOptions:{keepGroupTransforms:!0,mode:`optimized`,rasterizeAllMasks:!1,vectorizeAllTexts:!0},watermark:!1,resultType:`blob`,externalCanvas:null,svgLoadWaitDelay:0}),console.log(`[RENDER]: Pre-cache complete`)}catch(e){console.warn(`[RENDER]: Pre-cache local render failed (ignored)`,e),re=!1}}async function B(t,n=`image`){s.value&&e.value&&await M((0,bi.generateBillingKey)(s.value,i.value??`TEMPLATE_ID_UNDEFINED`,t,e.value,b.value),(0,bv.default)({templateId:i.value,data:t,serial:e.value,campaignId:s.value}),{usage:n===`video`?`batch-video`:`batch-image`,always:!0})()}return{triggerExport:ne,consumeOutputFor:B,preCacheLocalRender:ie,rendering:P,videoRenderingProgress:F}}async function Use(e,t,n,r,i,a,o=`campaign-conversion`,s=[]){console.log(`[CREDITS] Reporting export for billing`,{usage:o,assets:s});let c={campaignId:n,templateId:r,usage:o,assets:s,sessionState:i,balanceName:`EMBED`,billingKey:a};await fetch(`${e}/api/public/consume-credits?env=${encodeURIComponent(t)}`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify(c)})}function Wse(){return typeof navigator>`u`?!1:!!(/iPhone|iPad|iPod/i.test(navigator.userAgent)||navigator.maxTouchPoints>1&&/Macintosh/.test(navigator.userAgent))}function SN(e){if(!Wse()||typeof navigator.share!=`function`||typeof navigator.canShare!=`function`)return!1;try{return navigator.canShare({files:e})}catch{return!1}}function CN(e){return e.map(({blob:e,name:t})=>new File([e],t,{type:e.type}))}async function wN(e,t){return TN(nM([{canvas:{id:`default`,width:0,height:0},files:e}],t),t)}async function Gse(e,t){return TN(nM(e,t),t)}async function TN(e,t){let n=CN(e);if(SN(n))try{await navigator.share({files:n});return}catch(e){if(e instanceof Error&&e.name===`AbortError`)return;console.warn(`[download] iOS native share failed, falling back to download`,e)}if(e.length===1){let[{blob:t,name:n}]=e;(0,zj.default)(t,n,t.type)}else{let{downloadZip:n}=await Promise.resolve().then(()=>(gN(),eN)),r=await(await n(e.map(({blob:e,name:t})=>({input:e,name:t})))).blob();(0,zj.default)(r,`${t}.${Jj.getExtension(r.type)}`,r.type)}}async function EN(e,t){let n={templateId:t.templateId,campaignId:t.campaignId,data:t.data,assets:t.assets,caption:t.caption,...t.canvases?{canvases:t.canvases}:{}},r=await fetch(e,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify(n)});if(!r.ok)throw Error(`Failed to send webhook: ${r.statusText}`)}async function DN(e,t){let n=new URL(e);n.searchParams.set(`templateId`,t.templateId),n.searchParams.set(`campaignId`,t.campaignId.toString()),n.searchParams.set(`data`,JSON.stringify(t.data)),t.caption&&n.searchParams.set(`caption`,t.caption),t.assets.forEach((e,t)=>{n.searchParams.set(`asset_${t+1}`,e)}),window.location.href=n.toString()}var ON=1024;function kN(){return typeof crypto<`u`&&`randomUUID`in crypto?crypto.randomUUID().slice(0,8):Math.random().toString(36).slice(2,10)}function Kse(e){let n=(0,t.ref)([]),r=(0,t.ref)(``),i=(0,t.ref)(new Set);function a(){if(!e.storageKey.value)return null;try{let t=sessionStorage.getItem(e.storageKey.value);if(!t)return null;let n=JSON.parse(t);return n&&n.v===1&&Array.isArray(n.rows)?n:null}catch{return null}}function o(t){return{id:kN(),data:{...vS(e.seed()),...vS(t??{})}}}function s(){let t=e.initial?.length?{v:1,rows:e.initial}:a();t&&t.rows.length>0?(n.value=t.rows.slice(0,ON).map(t=>({id:t.id||kN(),data:{...vS(e.seed()),...t.data??{}}})),r.value=t.activeRowId&&n.value.some(e=>e.id===t.activeRowId)?t.activeRowId:n.value[0].id):(n.value=[o()],r.value=n.value[0].id)}s(),(0,t.watch)(e.storageKey,()=>s());let c;function l(){e.storageKey.value&&(clearTimeout(c),c=setTimeout(()=>{try{let t={v:1,rows:n.value,activeRowId:r.value};sessionStorage.setItem(e.storageKey.value,JSON.stringify(t))}catch{}},250))}(0,t.watch)([n,r],l,{deep:!0});let u=(0,t.computed)(()=>n.value.findIndex(e=>e.id===r.value)),d=(0,t.computed)(()=>n.value[u.value]??n.value[0]),f=(0,t.computed)(()=>n.value.filter(e=>i.value.has(e.id))),p=(0,t.computed)(()=>f.value.length>0?f.value:n.value),m=(0,t.computed)(()=>n.value.length>0&&f.value.length===n.value.length),h=(0,t.computed)(()=>n.value.length>=ON);function g(e){n.value.some(t=>t.id===e)&&(r.value=e)}function _(e){let t=Math.min(n.value.length-1,Math.max(0,u.value+e));r.value=n.value[t].id}function v(e=r.value){if(h.value)return;let t=n.value.findIndex(t=>t.id===e),i=o((n.value[t]??n.value[n.value.length-1])?.data);return n.value.splice((t>=0?t:n.value.length-1)+1,0,i),r.value=i.id,i}function y(e){let t=new Set(e);if(t.size===0)return;let a=n.value.filter(e=>!t.has(e.id));if(a.length===0){let e=o();n.value=[e],r.value=e.id}else{let e=u.value;n.value=a,a.some(e=>e.id===r.value)||(r.value=a[Math.min(e,a.length-1)].id)}let s=new Set(i.value);e.forEach(e=>s.delete(e)),i.value=s}function b(e,t){let r=n.value.findIndex(t=>t.id===e),i=r+t;if(r<0||i<0||i>=n.value.length)return;let a=n.value.slice();[a[r],a[i]]=[a[i],a[r]],n.value=a}function x(e,t){let n=new Set(i.value);t??!n.has(e)?n.add(e):n.delete(e),i.value=n}function S(e){i.value=e?new Set(n.value.map(e=>e.id)):new Set}function C(e,t){let r=Math.min(e+t,ON)-n.value.length;for(let e=0;e<r;e++)n.value.push(o(n.value[n.value.length-1]?.data));return n.value.slice(e,e+t)}function w(e,t){let a=e.map(e=>o(e)),s=t===`replace`?a:[...n.value,...a],c=s.slice(0,ON);return n.value=c.length>0?c:[o()],n.value.some(e=>e.id===r.value)||(r.value=n.value[0].id),t===`replace`&&(i.value=new Set),{imported:a.length,dropped:s.length-c.length}}function T(e){e.length!==0&&(n.value=e.slice(0,ON),n.value.some(e=>e.id===r.value)||(r.value=n.value[0].id))}return{rows:n,activeRowId:r,activeIndex:u,activeRow:d,selectedIds:i,selectedRows:f,targetRows:p,allSelected:m,atCapacity:h,setActive:g,activateOffset:_,addRow:v,removeRows:y,moveRow:b,toggleSelected:x,selectAll:S,ensureRowsFrom:C,importRows:w,replaceAll:T,makeRow:o}}var qse={class:`intro`},Jse={class:`field`},Yse=[`id`],Xse={key:0,class:`field`},Zse=[`id`],Qse={key:1,class:`field`},$se=[`id`],ece={key:2,class:`field checkbox-field`},tce={class:`summary`,"aria-live":`polite`},nce={class:`buttons`},rce={class:`intro`},ice={class:`progress-meta`},ace={key:0},oce={class:`buttons`},sce={class:`intro`},cce={class:`buttons`},lce=U((0,t.defineComponent)({__name:`BatchExportPopup`,props:{kind:{},rowCount:{},templateName:{},isVideoTemplate:{type:Boolean},videoBatchMaxSize:{},consumesCredits:{type:Boolean},namingBindings:{},run:{type:Function}},emits:[`cancel`,`done`],setup(e,{expose:n,emit:r}){let i=e,a=r,o={format:h(`bx-batch-format`),naming:h(`bx-batch-naming`),delimiter:h(`bx-batch-delimiter`)},s=ON,c=[{label:`PNG`,value:`png`},{label:`JPEG`,value:`jpeg`},{label:`WebP`,value:`webp`},{label:`PDF`,value:`pdf`}],l=[{label:`MP4`,value:`mp4`},{label:`MOV`,value:`mov`}],u=(0,t.computed)(()=>{let e=i.isVideoTemplate?l:c;return i.kind===`files`?e:[...e.map(e=>({...e,label:`${e.label} link`})),{label:`Template link (prefilled editor)`,value:`template-link`}]}),d=(0,t.ref)(i.isVideoTemplate?`mp4`:`png`),f=(0,t.computed)(()=>[{label:`Row number`,value:`__index`},...i.namingBindings.map(e=>({label:e.label,value:e.key}))]),p=(0,t.ref)(`__index`),m=[{label:`Comma (,)`,value:`,`},{label:`Semicolon (;)`,value:`;`}],g=(0,t.ref)(`,`),_=(0,t.ref)(!0),v=(0,t.computed)(()=>i.isVideoTemplate&&d.value!==`template-link`),y=(0,t.computed)(()=>!v.value||i.rowCount<=i.videoBatchMaxSize),b=(0,t.computed)(()=>y.value?``:i.videoBatchMaxSize<=1?`Video batch export is not part of your plan: videos export one row at a time. Select a single row, or use the template link format.`:`Your plan renders up to ${i.videoBatchMaxSize} videos per batch. Select at most ${i.videoBatchMaxSize} rows.`),x=(0,t.computed)(()=>i.rowCount>0&&i.rowCount<=s&&y.value);function S(e,t){let n=bi.BillingV3.BILLABLE_USAGE_UNIT_COST_CENTI[e]*t/bi.BillingV3.CENTICREDITS_PER_CREDIT;return n>=1?String(Math.round(n*100)/100):n.toFixed(2).replace(/0+$/,``).replace(/\.$/,``)}let C=(0,t.computed)(()=>{let e=i.rowCount,t=`${e} ${e===1?`row`:`rows`}`;return i.kind===`files`?i.consumesCredits?v.value?`${t} · ${S(`batch-video`,e)} credits will be consumed, one per video`:`${t} · ${S(`batch-image`,e)} credits will be consumed`:`${t} · watermarked, so no credits are consumed`:d.value===`template-link`?`${t} · links open the editor prefilled, nothing is rendered now`:_.value?v.value?`${t} · rendering the links now consumes ${S(`video-api`,e)} credits, one per video`:`${t} · rendering the links now consumes about ${S(`image-api`,e)} credits`:`${t} · each link renders (and is metered) when first opened`}),w=(0,t.ref)(`configure`),T=(0,t.ref)({done:0,total:0,failed:0,current:0}),E=(0,t.computed)(()=>T.value.total?Math.min(1,(T.value.done+T.value.failed+T.value.current)/T.value.total):0),D=(0,t.computed)(()=>i.kind===`files`?`Rendering ${v.value?`videos`:`images`}… ${T.value.done} of ${T.value.total}`:`Rendering the links… ${T.value.done} of ${T.value.total}`),O,k=(0,t.ref)(),A=(0,t.ref)(0),j=(0,t.ref)([]),M=(0,t.ref)([]),N=(0,t.computed)(()=>{let e=M.value.map(e=>e.index+1),t=e.slice(0,5),n=e.length-t.length;return e.length===1?`row ${t[0]}`:n>0?`rows ${t.join(`, `)} and ${n} more`:`rows ${t.slice(0,-1).join(`, `)} and ${t[t.length-1]}`}),P=(0,t.ref)(``),F=(0,t.ref)(``);async function I(){if(x.value){O=new AbortController,w.value=`running`,T.value={done:0,total:i.rowCount,failed:0,current:0};try{let e=await i.run({kind:i.kind,format:d.value,naming:p.value===`__index`?{kind:`index`}:{kind:`binding`,key:p.value},delimiter:g.value,prewarm:_.value&&d.value!==`template-link`,signal:O.signal,onProgress:e=>{T.value={done:e.done,total:e.total,failed:e.failed??0,current:e.current??0}}});k.value=e.output,A.value=e.fileCount??0,j.value=e.overBudget??[],M.value=e.failedRows??[],P.value=e.prewarmed?` · ${e.prewarmed.done-e.prewarmed.failed} of ${T.value.total} links rendered${e.prewarmed.failed?`, ${e.prewarmed.failed} failed`:``}`:``,e.cancelled&&(F.value=`Export cancelled.`),a(`done`,e)}catch(e){console.error(`[batch] export failed`,e),F.value=i.kind===`files`?`The export failed: no row rendered, so there is nothing to download. Nothing was charged. Please try again.`:`The export failed. Please try again.`}w.value=`done`}}function L(){O?.abort()}async function ee(){if(k.value){if(i.kind===`csv`){(0,zj.default)(k.value.blob,k.value.fileName,`text/csv`);return}await wN([k.value.blob],k.value.fileName.replace(/\.[a-z0-9]+$/i,``))}}return n({cancelRun:L}),(n,r)=>((0,t.openBlock)(),(0,t.createElementBlock)(`div`,{class:(0,t.normalizeClass)([`bx-batch-export-popup`,{[`phase-`+w.value]:!0}])},[w.value===`configure`?((0,t.openBlock)(),(0,t.createElementBlock)(t.Fragment,{key:0},[(0,t.createElementVNode)(`p`,qse,[e.kind===`files`?((0,t.openBlock)(),(0,t.createElementBlock)(t.Fragment,{key:0},[(0,t.createTextVNode)(` Renders `+(0,t.toDisplayString)(e.rowCount)+` `+(0,t.toDisplayString)(e.rowCount===1?`row`:`rows`)+` on the server and hands you `+(0,t.toDisplayString)(e.rowCount===1?`the file`:`a zip`)+`. `,1)],64)):((0,t.openBlock)(),(0,t.createElementBlock)(t.Fragment,{key:1},[(0,t.createTextVNode)(` Writes the `+(0,t.toDisplayString)(e.rowCount)+` `+(0,t.toDisplayString)(e.rowCount===1?`row`:`rows`)+` to a CSV — one column per field, plus a link to the result of every row. `,1)],64))]),(0,t.createElementVNode)(`div`,Jse,[(0,t.createElementVNode)(`span`,{class:`label`,id:o.format},`Format`,8,Yse),(0,t.createVNode)(bC,{modelValue:d.value,"onUpdate:modelValue":r[0]||=e=>d.value=e,options:u.value,bordered:``,"aria-labelledby":o.format},null,8,[`modelValue`,`options`,`aria-labelledby`])]),e.kind===`files`?((0,t.openBlock)(),(0,t.createElementBlock)(`div`,Xse,[(0,t.createElementVNode)(`span`,{class:`label`,id:o.naming},`Name files by`,8,Zse),(0,t.createVNode)(bC,{modelValue:p.value,"onUpdate:modelValue":r[1]||=e=>p.value=e,options:f.value,bordered:``,"aria-labelledby":o.naming},null,8,[`modelValue`,`options`,`aria-labelledby`])])):(0,t.createCommentVNode)(``,!0),e.kind===`csv`?((0,t.openBlock)(),(0,t.createElementBlock)(`div`,Qse,[(0,t.createElementVNode)(`span`,{class:`label`,id:o.delimiter},`Separator`,8,$se),(0,t.createVNode)(bC,{modelValue:g.value,"onUpdate:modelValue":r[2]||=e=>g.value=e,options:m,bordered:``,"aria-labelledby":o.delimiter},null,8,[`modelValue`,`aria-labelledby`])])):(0,t.createCommentVNode)(``,!0),e.kind===`csv`&&d.value!==`template-link`?((0,t.openBlock)(),(0,t.createElementBlock)(`div`,ece,[(0,t.createVNode)(rT,{modelValue:_.value,"onUpdate:modelValue":r[3]||=e=>_.value=e,size:`medium`,disabled:!y.value},null,8,[`modelValue`,`disabled`]),r[6]||=(0,t.createElementVNode)(`span`,{class:`label`},`Render the links now`,-1),r[7]||=(0,t.createElementVNode)(`span`,{class:`hint`},`Otherwise every link renders when it is first opened.`,-1)])):(0,t.createCommentVNode)(``,!0),b.value?((0,t.openBlock)(),(0,t.createBlock)(Bj,{key:3,type:`warning`,bordered:!0,"show-icon":!0},{default:(0,t.withCtx)(()=>[(0,t.createTextVNode)((0,t.toDisplayString)(b.value),1)]),_:1})):e.rowCount>(0,t.unref)(s)?((0,t.openBlock)(),(0,t.createBlock)(Bj,{key:4,type:`error`,bordered:!0,"show-icon":!0},{default:(0,t.withCtx)(()=>[(0,t.createTextVNode)(` A batch export is limited to `+(0,t.toDisplayString)((0,t.unref)(s))+` rows. Select the rows you want to export. `,1)]),_:1})):(0,t.createCommentVNode)(``,!0),(0,t.createElementVNode)(`div`,tce,(0,t.toDisplayString)(C.value),1),(0,t.createElementVNode)(`div`,nce,[(0,t.createVNode)(Xy,{secondary:``,onClick:r[4]||=e=>a(`cancel`)},{default:(0,t.withCtx)(()=>[...r[8]||=[(0,t.createTextVNode)(`Cancel`,-1)]]),_:1}),(0,t.createVNode)(Xy,{active:``,disabled:!x.value,onClick:I},{default:(0,t.withCtx)(()=>[(0,t.createTextVNode)((0,t.toDisplayString)(e.kind===`files`?`Export`:`Export CSV`),1)]),_:1},8,[`disabled`])])],64)):w.value===`running`?((0,t.openBlock)(),(0,t.createElementBlock)(t.Fragment,{key:1},[(0,t.createElementVNode)(`p`,rce,(0,t.toDisplayString)(D.value),1),(0,t.createVNode)(cS,{value:E.value},null,8,[`value`]),(0,t.createElementVNode)(`div`,ice,[(0,t.createElementVNode)(`span`,null,(0,t.toDisplayString)(T.value.done)+` / `+(0,t.toDisplayString)(T.value.total)+` `+(0,t.toDisplayString)((e.kind,`rendered`)),1),T.value.failed?((0,t.openBlock)(),(0,t.createElementBlock)(`span`,ace,(0,t.toDisplayString)(T.value.failed)+` failed`,1)):(0,t.createCommentVNode)(``,!0)]),(0,t.createElementVNode)(`div`,oce,[(0,t.createVNode)(Xy,{secondary:``,onClick:L},{default:(0,t.withCtx)(()=>[(0,t.createTextVNode)((0,t.toDisplayString)(e.kind===`files`?`Cancel`:`Stop rendering`),1)]),_:1})])],64)):((0,t.openBlock)(),(0,t.createElementBlock)(t.Fragment,{key:2},[(0,t.createElementVNode)(`p`,sce,[F.value?((0,t.openBlock)(),(0,t.createElementBlock)(t.Fragment,{key:0},[(0,t.createTextVNode)((0,t.toDisplayString)(F.value),1)],64)):e.kind===`files`?((0,t.openBlock)(),(0,t.createElementBlock)(t.Fragment,{key:1},[(0,t.createTextVNode)((0,t.toDisplayString)(A.value)+` `+(0,t.toDisplayString)(A.value===1?`file`:`files`)+` ready.`,1)],64)):((0,t.openBlock)(),(0,t.createElementBlock)(t.Fragment,{key:2},[(0,t.createTextVNode)(`CSV ready`+(0,t.toDisplayString)(P.value)+`.`,1)],64))]),M.value.length?((0,t.openBlock)(),(0,t.createBlock)(Bj,{key:0,type:`warning`,bordered:!0,"show-icon":!0},{default:(0,t.withCtx)(()=>[(0,t.createTextVNode)((0,t.toDisplayString)(M.value.length)+` of `+(0,t.toDisplayString)(T.value.total)+` `+(0,t.toDisplayString)(T.value.total===1?`row`:`rows`)+` failed and `+(0,t.toDisplayString)(M.value.length===1?`is`:`are`)+` not in the download (`+(0,t.toDisplayString)(N.value)+`). `,1),e.consumesCredits?((0,t.openBlock)(),(0,t.createElementBlock)(t.Fragment,{key:0},[(0,t.createTextVNode)(`Rows that rendered were charged; failed rows were not.`)],64)):((0,t.openBlock)(),(0,t.createElementBlock)(t.Fragment,{key:1},[(0,t.createTextVNode)(`Nothing was charged.`)],64))]),_:1})):(0,t.createCommentVNode)(``,!0),j.value.length?((0,t.openBlock)(),(0,t.createBlock)(Bj,{key:1,type:`warning`,bordered:!0,"show-icon":!0},{default:(0,t.withCtx)(()=>[(0,t.createTextVNode)((0,t.toDisplayString)(j.value.length)+` `+(0,t.toDisplayString)(j.value.length===1?`row exceeds`:`rows exceed`)+` the URL length the render API accepts (rows `+(0,t.toDisplayString)(j.value.join(`, `))+`). Those links may not render — shorten their texts or use the template link format. `,1)]),_:1})):(0,t.createCommentVNode)(``,!0),(0,t.createElementVNode)(`div`,cce,[(0,t.createVNode)(Xy,{secondary:``,onClick:r[5]||=e=>a(`cancel`)},{default:(0,t.withCtx)(()=>[...r[9]||=[(0,t.createTextVNode)(`Close`,-1)]]),_:1}),k.value?((0,t.openBlock)(),(0,t.createBlock)(Xy,{key:0,active:``,onClick:ee},{icon:(0,t.withCtx)(()=>[(0,t.createVNode)(Gb,null,{default:(0,t.withCtx)(()=>[(0,t.createVNode)((0,t.unref)(Rb))]),_:1})]),default:(0,t.withCtx)(()=>[(0,t.createTextVNode)(` Download `+(0,t.toDisplayString)(e.kind===`files`?A.value===1?`file`:`zip`:`CSV`),1)]),_:1})):(0,t.createCommentVNode)(``,!0)])],64))],2))}}),[[`__scopeId`,`data-v-5c0586a5`]]);function uce(e){let t=e.toLowerCase();return t===`true`||t===`wahr`||t===`ja`||t===`yes`||t===`1`?{type:`boolean`,value:!0}:t===`false`||t===`falsch`||t===`nein`||t===`no`||t===`0`?{type:`boolean`,value:!1}:null}function dce(e,t){let n=e.trim();return n===``||n.toLowerCase()===`null`||n.toLowerCase()===`n/a`?{type:`null`,value:null}:uce(n)||_ce(n)||gce(n)||fce(n,t)||mce(n)||hce(n)||{type:`string`,value:e}}function fce(e,t){let n=/^([€$£¥₹])\s*([\d\s.,]+)$/,r=/^([\d\s.,]+)\s*%$/,i=/^([\d\s.,]+)\s*([€$£¥₹])$/,a=e,o,s=!1,c=e.match(n);c&&(o=c[1],a=c[2],s=!0);let l=e.match(i);l&&(a=l[1],o=l[2],s=!0);let u=e.match(r);u&&(a=u[1],o=`%`,s=!0),a=a.replace(/\s/g,``);let d=t;if(t===`auto`&&!s&&(d=pce(a)),s){let e=a.lastIndexOf(`.`),t=a.lastIndexOf(`,`),n=Math.max(e,t);if(n>-1){let e=a.substring(n+1);a=e.length<=2&&e.length>0?a.substring(0,n).replace(/[.,]/g,``)+`.`+e:a.replace(/[.,]/g,``)}}else d===`de`?(/^\d{1,3}(\.\d{3})*(,\d+)?$/.test(a)||a.includes(`,`))&&(a=a.replace(/\./g,``).replace(`,`,`.`)):d===`en`&&(/^\d{1,3}(,\d{3})*(\.\d+)?$/.test(a)||a.includes(`,`)&&a.includes(`.`)||a.includes(`,`)&&!a.includes(`.`))&&(a=a.replace(/,/g,``));let f=parseFloat(a);return isNaN(f)?null:{type:`number`,value:f,unit:o}}function pce(e){let t=e.includes(`.`),n=e.includes(`,`);if(!t&&!n)return`en`;if(t&&!n){let t=e.split(`.`);return t.length===2&&t[1].length<=2?`en`:`de`}if(n&&!t){let t=e.split(`,`);return t.length===2&&t[1].length<=2?`de`:`en`}let r=e.lastIndexOf(`.`);return e.lastIndexOf(`,`)>r?`de`:`en`}function mce(e){for(let{pattern:t,format:n}of[{pattern:/^\d{4}-\d{2}-\d{2}(T\d{2}:\d{2}:\d{2})?/,format:`ISO`},{pattern:/^(\d{1,2})\.(\d{1,2})\.(\d{2,4})$/,format:`DD.MM.YYYY`},{pattern:/^(\d{1,2})\/(\d{1,2})\/(\d{2,4})$/,format:`MM/DD/YYYY`},{pattern:/^(\d{1,2})\.(\d{1,2})\.(\d{2,4})\s+(\d{1,2}):(\d{2})/,format:`DD.MM.YYYY HH:MM`}])if(t.test(e)){let t=new Date(e);if(n===`DD.MM.YYYY`){let t=e.match(/^(\d{1,2})\.(\d{1,2})\.(\d{2,4})$/);if(t){let[,e,r,i]=t,a=`${i.length===2?`20${i}`:i}-${r.padStart(2,`0`)}-${e.padStart(2,`0`)}`,o=new Date(a);if(!isNaN(o.getTime()))return{type:`date`,value:o,format:n}}}if(!isNaN(t.getTime()))return{type:`date`,value:t,format:n}}return null}function hce(e){try{return{type:`url`,value:e,protocol:new URL(e).protocol.replace(`:`,``)}}catch{return/^(www\.)?[\w-]+(\.[\w-]+)+/.test(e)?{type:`url`,value:e,protocol:`implicit`}:null}}function gce(e){try{let t=BS(e),n=`keyword`;n=e.startsWith(`#`)?`hex`:e.startsWith(`rgb(`)?`rgb`:e.startsWith(`rgba(`)?`rgba`:e.startsWith(`hsl(`)?`hsl`:e.startsWith(`hsla(`)?`hsla`:`name`;let r=t.rgb().object(),i=t.hsl().object();return{type:`color`,value:e,rgb:{r:r.r,g:r.g,b:r.b},hex:t.hex(),hsl:{h:i.h,s:i.s,l:i.l},alpha:t.alpha(),format:n}}catch{return null}}function _ce(e){if(e.startsWith(`{`)&&e.endsWith(`}`)||e.startsWith(`[`)&&e.endsWith(`]`))try{let t=JSON.parse(e);if(Array.isArray(t))return{type:`json-array`,value:t};if(typeof t==`object`&&t)return{type:`json-object`,value:t}}catch{}return null}function AN(e){return e.type===`string`?e.value:e.type===`number`?e.unit?`${e.value} ${e.unit}`:`${e.value}`:e.type===`boolean`?e.value?`true`:`false`:e.type===`date`?e.value.toISOString():e.type===`url`||e.type===`color`?e.value:e.type===`json-object`||e.type===`json-array`?JSON.stringify(e.value):e.type===`null`?`null`:``}function vce(e,t){return e.map(e=>e.map(e=>dce(e,t)))}function yce(e){let t=e.split(/\r?\n/).filter(e=>e.length>0).slice(0,20);if(t.length===0)return`,`;let n=(e,t)=>{let n=0,r=!1;for(let i=0;i<e.length;i++){let a=e[i];if(a===`"`){if(r&&e[i+1]===`"`){i++;continue}r=!r}else a===t&&!r&&n++}return n},r=t.map(e=>n(e,`,`)),i=t.map(e=>n(e,`;`)),a=r.reduce((e,t)=>e+t,0),o=i.reduce((e,t)=>e+t,0);if(a>0&&o===0)return`,`;if(o>0&&a===0)return`;`;if(a===0&&o===0)return`,`;let s=e=>{let t=e.reduce((e,t)=>e+t,0)/e.length;return e.reduce((e,n)=>e+(n-t)**2,0)/e.length},c=s(r),l=s(i);return c===l?a>=o?`,`:`;`:c<l?`,`:`;`}function bce(e,t=`,`){let n=[],r=[],i=``,a=!1,o=0,s=e.length;for(;o<s;){let s=e[o];if(a){if(s===`"`){if(e[o+1]===`"`){i+=`"`,o+=2;continue}a=!1,o++;continue}i+=s,o++;continue}if(s===`"`){a=!0,o++;continue}if(s===t){r.push(i),i=``,o++;continue}if(s===`\r`||s===`
234
234
  `){r.push(i),n.push(r),i=``,r=[],s===`\r`&&e[o+1]===`
235
235
  `?o+=2:o++;continue}i+=s,o++}return(i.length>0||r.length>0||a)&&(r.push(i),n.push(r)),n}function xce(e,t,n=`auto`){let r=bce(e,n===`auto`?yce(e):n),i=[];for(let e=0;e<Math.max(...r.map(e=>e.length));e++)r.every(t=>t[e]===void 0||t[e].trim()===``)&&i.push(e);return vce(r.map(e=>e.filter((e,t)=>!i.includes(t))),t)}var Sce=80;function jN(e){return String(e??``).normalize(`NFKD`).replace(/[̀-ͯ]/g,``).replace(/[^a-zA-Z0-9 _.-]+/g,` `).trim().replace(/\s+/g,`-`).replace(/^[.-]+|[.-]+$/g,``).slice(0,Sce)}function Cce(e,t,n){let r=String(e.length).length,i=new Map;return e.map((e,a)=>{let o=t.kind===`binding`?jN(wce(e.data[t.key])):``;o||=`${jN(n)||`file`}-${String(a+1).padStart(Math.max(r,2),`0`)}`;let s=i.get(o)??0;return i.set(o,s+1),s===0?o:`${o}_${s+1}`})}function wce(e){return e&&typeof e==`object`&&`src`in e?e.src:e}async function Tce(e){let{unzip:t}=await Promise.resolve().then(()=>($M(),aM)),n=await t(e),r=[];for(let[e,t]of Object.entries(n.entries))r.push(await t.blob(Jj.getType(e)||`image/png`));return r}async function Ece(e,t,n,r,i=()=>{}){let a=t in vN,o=Pi(a?1:4),s=Cce(e,n,r.name),c=Array(e.length),l=[],u=0,d=!1,f=(t,n)=>i({done:u,total:e.length,current:n,currentIndex:t,failed:l.length}),{serial:p}=r,m=p.frames?.x??1,h=p.frames?.y??1,g=r.remoteOptions;async function _(e,n){let i;if(a){let a=await bN(r.campaignId,r.templateId,e.data,t,g,e=>{let t=e;if(t.totalFrames){let e=((t.processedFrames??0)+(t.encodedFrames??0))/(2*t.totalFrames);f(n+1,Math.max(0,Math.min(.99,e)))}},r.canvasId);i=await Promise.all(a.files.map(e=>fetch(e).then(e=>e.blob())))}else{let n=await yN(r.campaignId,r.templateId,e.data,p.width,p.height,m,h,t,g,r.canvasId);i=n.type===`application/zip`?await Tce(n):[n]}if(d||r.signal?.aborted){d=!0;return}await r.consumeOutput(e.data,a?`video`:`image`),c[n]=i.map((e,r)=>({name:`${s[n]}${i.length>1?`-${r+1}`:``}.${Jj.getExtension(e.type)||t}`,blob:e})),u++,f(n+1,1)}await Promise.all(e.map((e,t)=>o(async()=>{if(d||r.signal?.aborted){d=!0;return}f(t+1,0);try{await _(e,t)}catch(e){console.error(`[batch] row ${t+1} failed`,e),l.push({index:t,message:Dce(e)}),f(t+1,1)}})));let v=c.filter(Boolean).flat();if(l.sort((e,t)=>e.index-t.index),v.length===0&&l.length>0)throw Error(`All ${l.length} batch rows failed to render (row ${l[0].index+1}: ${l[0].message})`);return{files:v,output:await Oce(v,jN(r.name)||`batch`),cancelled:d,failedRows:l}}function Dce(e){return e instanceof Error?e.message||e.name:typeof e==`string`?e:String(e)}async function Oce(e,t){if(e.length===1)return{blob:e[0].blob,fileName:e[0].name};let{downloadZip:n}=await Promise.resolve().then(()=>(gN(),eN));return{blob:await n(e.map(e=>({name:e.name,input:e.blob}))).blob(),fileName:`${t}.zip`}}var kce=`bluepic_result`;function MN(e,t){return/[",\r\n;]/.test(e)||e.includes(t)?`"${e.replace(/"/g,`""`)}"`:e}function Ace(e){return e==null?``:typeof e==`object`?`src`in e&&typeof e.src==`string`?e.src:JSON.stringify(e):String(e)}function jce(e){if(e!=null){if(typeof e==`string`)return e;if(typeof e==`number`||typeof e==`boolean`)return String(e);if(typeof e==`object`&&`src`in e){let t=e.src;return typeof t==`string`?t:void 0}return JSON.stringify(e)}}function Mce(e,t){let n=e.templateAlias?.trim();return`/${(n?n.includes(`/`)?n:e.orgSlug?`${e.orgSlug}/${n}`:null:null)??e.templateId}${e.canvasId?`/${encodeURIComponent(e.canvasId)}`:``}.${t}`}function Nce(e,t,n){if(n.format===`template-link`){let t=encodeURIComponent(JSON.stringify(e.data));return{url:`${n.templateLinkBaseUrl}?data=${t}`,overBudget:!1}}let r=new URLSearchParams,i=new Set;for(let e of t)for(let t of Rj(e.field))i.add(t);for(let t of i){let n=e.data[t],i=jce(n);i===void 0||bi.Studio.isReservedQueryKey(t)||r.set(bi.Studio.queryKeyForBinding(t,n),i)}let a=r.toString(),o=n.format===`jpeg`?`jpg`:n.format;return{url:`${n.urlRenderBaseUrl.replace(/\/+$/,``)}${Mce(n,o)}${a?`?${a}`:``}`,overBudget:bi.Studio.queryStringByteLength(a)>bi.Studio.MAX_QUERY_STRING_BYTES}}function Pce(e,t,n){let r=n.delimiter??`,`,i=[];for(let e of t)for(let t of Rj(e.field))i.includes(t)||i.push(t);let a=[...i,kce],o=[],s=[],c=[a.map(e=>MN(e,r)).join(r)];return e.forEach((e,a)=>{let l=Nce(e,t,n);o.push(l.url),l.overBudget&&s.push(a+1);let u=i.map(t=>MN(Ace(e.data[t]),r));u.push(MN(l.url,r)),c.push(u.join(r))}),{csv:``+c.join(`\r
236
236
  `)+`\r
package/dist/main.cjs CHANGED
@@ -216,7 +216,7 @@ Use Save As... to download, then click back to return to this page.`)&&(location
216
216
 
217
217
  `);for(;n!==-1;){let e=p.slice(0,n).trim();p=p.slice(n+2),n=p.indexOf(`
218
218
 
219
- `);let t=e.split(/\r?\n/),r=``;for(let e of t)e.startsWith(`data:`)&&(r+=e.slice(5).trim());c(r)}}}catch(e){throw f.cancel().catch(()=>{}),e}if(!s||s.length===0)throw Error(`No files found`);return{files:s,creditsConsumed:0}}async function az(e,t,n,r,i,a,o,s,c,l,u,d){let f=null,p=!1,m=!1;if((r===`png`||r===`jpeg`||r===`webp`)&&!s&&e){console.log(`[RENDER]: Local rendering started`),p=!0;try{let n=t.frames?.x??1,i=t.frames?.y??1,a=t.width/n,o=t.height/i,s=Array(n*i).fill(0).map((e,t)=>({x:t%n*a,y:o*Math.floor(t/n),width:a,height:o}));if(s.length>1){let t=await e.render({type:tz[r],resolution:1,quality:100,vectorExportOptions:{keepGroupTransforms:!0,mode:`optimized`,rasterizeAllMasks:!1,vectorizeAllTexts:!0},watermark:c,resultType:`canvas`,externalCanvas:null,svgLoadWaitDelay:d});f=[];for(let e of s){let n=await $L({imageSource:t,cropX:e.x,cropY:e.y,cropWidth:e.width,cropHeight:e.height,quality:100,type:tz[r]},`blob`);f.push(n)}}else f=[await e.render({type:tz[r],resolution:1,quality:100,vectorExportOptions:{keepGroupTransforms:!0,mode:`optimized`,rasterizeAllMasks:!1,vectorizeAllTexts:!0},watermark:c,resultType:`blob`,externalCanvas:null,svgLoadWaitDelay:d})]}catch(e){console.error(`[RENDER]: Local rendering error`,e),m=!0}}if(!f){console.log(`[RENDER]: Remote rendering started`);try{let e=await rz(i,a,n,t.width,t.height,t.frames?.x??1,t.frames?.y??1,r,o,u);if(e.type===`application/zip`){f=[];let{unzip:t}=await Promise.resolve().then(()=>require("./unzipit.module-DLgVBmhU.cjs")),n=await t(e);for(let[e,t]of Object.entries(n.entries)){let n=await t.blob(sR.getType(e)||`image/png`);f.push(n)}}else f=[e]}catch(e){throw console.error(`[RENDER]: Remote rendering error`,e),Error(`Failed to render serial remotely`)}}return{files:f,renderLocation:p&&!m?`client`:`server`,clientRenderFailed:m}}function oz(e,n,i,a,o,s,c,l,u,d,f,p,m,h,g,_,v,y=(0,t.ref)(void 0),b=(0,t.ref)(void 0),x=(0,t.ref)(void 0),S=(0,t.ref)(void 0),C=(0,t.ref)(void 0)){let{createPopup:w,createMessage:T}=yT(),E=(0,t.computed)(()=>(S.value?.length??0)>=2&&!!b.value),D=(0,t.computed)(()=>d.value||(e.value?.enforceServersideRendering??!1)),O=(0,t.computed)(()=>f.value||(e.value?.enforceServersideRendering??!1)),k=(0,t.computed)(()=>{try{return(0,Xv.default)({templateId:a.value,data:n.value,serial:e.value,campaignId:c.value})}catch(e){return console.error(`Error computing session state hash`,e),`SESSION_STATE_HASH_ERROR`}}),A=new Set;function j(t){let n=e.value?.format??`png`,r=t?.width??e.value?.width,i=t?.height??e.value?.height;return n in nz?{type:`video`,width:r,height:i,format:n,duration:e.value?.animation?.duration??0,vcodec:`libx264`}:{type:`image`,width:r,height:i,format:n}}function M(e,t,n={usage:`campaign-conversion`},r){return async()=>{if((n.always?!h.value:m.value)&&c.value&&e!==null&&!A.has(e)){A.add(e);try{await sz(l.apiBaseUrl,l.env,c.value,a.value??`TEMPLATE_ID_UNDEFINED`,t,e,n.usage,[j(r)])}catch(t){console.error(`[CREDITS] Failed to consume credits on output`,t),A.delete(e)}}}}let N=(0,t.ref)([]),P=(0,t.ref)(!1),F=(0,t.ref)();function I(e,t){return e.map(async e=>{let n=`${l.apiBaseUrl}/api/public/temp-image`,i=new FormData;i.append(`file`,e,`${r()}.${t}`);let a=await fetch(n,{method:`POST`,body:i});if(!a.ok)throw Error(`Failed to upload asset: ${a.statusText}`);return(await a.json()).url})}function L(){let t=S.value?.find(e=>e.id===b.value);return{id:b.value??`default`,width:t?.width??e.value?.width??0,height:t?.height??e.value?.height??0}}function ee(t,n,r){return!c.value||!e.value?async()=>{}:M((0,di.generateBillingKey)(c.value,a.value??`TEMPLATE_ID_UNDEFINED`,n,e.value,t.id),`${r}:${t.id}`,{usage:`campaign-conversion`},t)}async function te(r,s,u,d,f){let p=i.value.actionalConnections,m=i.value.socialConnections,_=Object.entries(m).filter(([e,t])=>t).map(([e])=>e),v=o.value??a.value??`TEMPLATE_ID_UNDEFINED`,b=L();d.setDelivered([{...b,fileCount:r.length}]),p.webhook||p.redirect||_.length>0?N.value=I(r,s):N.value=[];let T=()=>({assets:[],templateId:a.value??`TEMPLATE_ID_UNDEFINED`,campaignId:c.value??-1,data:n.value,caption:y.value??e.value?.caption});if(_.length===0){if(p.download&&!p.webhook&&!p.redirect){await dz(r,v),await f(),d.download({trigger:`auto`,withinSocialShare:!1});return}if(p.webhook&&!p.download&&!p.redirect){await mz(p.webhook,{...T(),assets:await Promise.all(N.value)}),await f(),d.webhook({trigger:`auto`,webhookHost:fR(p.webhook)});return}if(p.redirect&&!p.download&&!p.webhook)return d.redirect({trigger:`auto`,redirectHost:fR(p.redirect)}),await f(),await hz(p.redirect,{...T(),assets:await Promise.all(N.value)})}let O;if(E.value&&u===`image`&&S.value){let t=QT(n.value),i=k.value,o=e.value?.format??`png`,u=D.value,p=new Map;C.value?.activate(),O=QR({canvases:S.value,primaryCanvasId:b.id,primaryFiles:r,primaryRemote:N.value,prerender:o!==`pdf`&&!u,renderCanvas:async e=>{let n,r;try{if(!C.value)throw Error(`No sibling renderers`);({live:n,serial:r}=await C.value.renderer(e.id))}catch(t){console.warn(`[EXPORT] sibling ${e.id} has no local renderer, using the server`,t),n=void 0,r=await e.loadSerial()}let s=n=>az(n,r,t,o,c.value,a.value??`TEMPLATE_ID_UNDEFINED`,l,u,h.value,i,e.id,x.value),d=await s(n);return d.renderLocation===`client`&&d.files[0]&&await $R(d.files[0])&&(console.warn(`[EXPORT] local render of ${e.id} came out blank, using the server`),d=await s(void 0)),d.files},upload:e=>I(e,s),consume:e=>{if(e.id===b.id)return f();let n=p.get(e.id);return n||(n=ee(e,t,i),p.set(e.id,n)),n()},onSelectionChange:e=>d.setDelivered(e)})}w({draggable:!1,disableBackgroundEffect:window.innerWidth>700,transculent:!0,type:window.innerWidth<=700?`layer`:`frame`,content:()=>(0,t.h)(JR,{templateId:a.value??`TEMPLATE_ID_UNDEFINED`,campaignId:c.value??-1,data:n.value,exportOptions:i.value,caption:y.value??e.value?.caption,assets:r,assetsRemote:N.value,baseName:o.value,mediaType:u,bridge:g.value,analytics:d,consumeCredit:f,primaryCanvas:{...b,segments:e.value?.frames??{x:1,y:1}},multiCanvas:O,snapshots:C.value?.snapshots,snapshotFailed:C.value?.snapshotFailed,demandSnapshots:C.value?.demand}),customClasses:[`bx-template-editor-export-popup`,`flush-content-x`]})}function R(){let e=i.value.actionalConnections,t=i.value.socialConnections,n=[];e.download&&n.push(`download`),e.webhook&&n.push(`webhook`),e.redirect&&n.push(`redirect`);let r=Object.entries(t).filter(([,e])=>e).map(([e])=>e);return{enabledActions:n,enabledSocials:r,optionCount:n.length+r.length}}async function ne(){if(!c.value)return console.error(`No campaign ID available for export`);if(!e.value)return console.error(`No serial available for export`);if(!s.value)return console.error(`No live template component reference available for export`);let t=e.value?.format??`png`,r=t in nz?`video`:`image`,{enabledActions:i,enabledSocials:o,optionCount:u}=R(),d=new mR(v.value,{templateId:a.value??`TEMPLATE_ID_UNDEFINED`,campaignId:c.value,format:t,mediaType:r,watermark:h.value,enforceServerSideRendering:r===`video`?O.value:D.value,enabledActions:i,enabledSocials:o,optionCount:u,dataStateHash:k.value,tabSessionId:ez,canvasId:b.value,canvasWidth:e.value.width,canvasHeight:e.value.height,availableCanvasCount:Math.max(1,S.value?.length??1)});E.value&&r===`image`&&C.value?.activate();let f=performance.now(),m=()=>Math.round(performance.now()-f);if(d.attempt(),P.value=!0,F.value=void 0,t in tz){console.log(`[EXPORT] Starting image export`,t),console.log(`sessionState`,k.value);let r;try{r=await az(s.value,e.value,n.value,t,c.value,a.value??`TEMPLATE_ID_UNDEFINED`,l,D.value,h.value,k.value,b.value,x.value)}catch(e){throw P.value=!1,d.renderFailure({renderLocation:`unknown`,renderDurationMs:m(),error:e instanceof Error?e.message:String(e)}),e}P.value=!1,d.renderSuccess({renderLocation:r.renderLocation,renderDurationMs:m(),fileCount:r.files.length,clientRenderFailed:r.clientRenderFailed});let i=M((0,di.generateBillingKey)(c.value,a.value??`TEMPLATE_ID_UNDEFINED`,n.value,e.value,b.value),k.value);await te(r.files,t,`image`,d,i)}else if(t in nz){let r=null,i;F.value=0;let o=!XR()||O.value?`server`:`client`;if(o===`server`){let e=0,o=0,s=0;try{let[i]=(await iz(c.value,a.value??`TEMPLATE_ID_UNDEFINED`,n.value,t,l,t=>{t.type===`keyframe`?(e=t.frame,s=t.totalFrames):t.type===`encode_video`&&(o=t.frame,s=t.totalFrames),F.value=(e+o)/(s*2)},b.value)).files,u=await fetch(i);if(!u.ok)throw Error(`Failed to download the rendered video: ${u.status}`);r=await u.blob()}catch(e){console.error(`[VIDEO EXPORT] Server rendering failed`,e),i=e instanceof Error?e.message:String(e)}finally{P.value=!1,F.value=void 0}}else{let t=s.value,n=e.value.animation.fps,a=Math.ceil(e.value.animation.duration*n),o=document.createElement(`canvas`),c=async(e,n)=>(p.value=n,await t.render({type:tz.png,resolution:1,quality:100,vectorExportOptions:{keepGroupTransforms:!0,mode:`optimized`,rasterizeAllMasks:!1,vectorizeAllTexts:!0},resultType:`canvas`,watermark:h.value,externalCanvas:o,svgLoadWaitDelay:x.value}));try{r=await ZR({fps:n,totalFrames:a,renderFrame:c,onProgress:(e,t)=>{F.value=e/t}})}catch(e){console.error(`[VIDEO EXPORT] Local encoding failed`,e),i=e instanceof Error?e.message:String(e)}finally{P.value=!1,F.value=void 0}}if(r){d.renderSuccess({renderLocation:o,renderDurationMs:m(),fileCount:1,clientRenderFailed:!1});let i=o===`server`?async()=>{}:M((0,di.generateBillingKey)(c.value,a.value??`TEMPLATE_ID_UNDEFINED`,n.value,e.value,b.value),k.value);await te([r],t,`video`,d,i)}else d.renderFailure({renderLocation:o,renderDurationMs:m(),error:i??`Video rendering produced no file`}),T({type:`error`,message:`The video could not be exported. Please try again.`})}else P.value=!1,F.value=void 0,d.renderFailure({renderLocation:`unknown`,renderDurationMs:m(),error:`Unsupported export format: ${t}`}),T({type:`error`,message:`This format can't be exported in the design generator.`})}let re=!1;async function ie(){if(re||!_.value||!e.value||!s.value)return;let t=e.value.format??`png`,n=null;if(t in tz){if(t===`pdf`||D.value)return;n=t}else if(t in nz){if(O.value||!XR())return;n=`png`}else return;re=!0;try{console.log(`[RENDER]: Pre-caching local rendering assets`),await s.value.render({type:tz[n],resolution:1,quality:100,vectorExportOptions:{keepGroupTransforms:!0,mode:`optimized`,rasterizeAllMasks:!1,vectorizeAllTexts:!0},watermark:!1,resultType:`blob`,externalCanvas:null,svgLoadWaitDelay:0}),console.log(`[RENDER]: Pre-cache complete`)}catch(e){console.warn(`[RENDER]: Pre-cache local render failed (ignored)`,e),re=!1}}async function ae(t,n=`image`){c.value&&e.value&&await M((0,di.generateBillingKey)(c.value,a.value??`TEMPLATE_ID_UNDEFINED`,t,e.value,b.value),(0,Xv.default)({templateId:a.value,data:t,serial:e.value,campaignId:c.value}),{usage:n===`video`?`batch-video`:`batch-image`,always:!0})()}return{triggerExport:ne,consumeOutputFor:ae,preCacheLocalRender:ie,rendering:P,videoRenderingProgress:F}}async function sz(e,t,n,r,i,a,o=`campaign-conversion`,s=[]){console.log(`[CREDITS] Reporting export for billing`,{usage:o,assets:s});let c={campaignId:n,templateId:r,usage:o,assets:s,sessionState:i,balanceName:`EMBED`,billingKey:a};await fetch(`${e}/api/public/consume-credits?env=${encodeURIComponent(t)}`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify(c)})}function cz(){return typeof navigator>`u`?!1:!!(/iPhone|iPad|iPod/i.test(navigator.userAgent)||navigator.maxTouchPoints>1&&/Macintosh/.test(navigator.userAgent))}function lz(e){if(!cz()||typeof navigator.share!=`function`||typeof navigator.canShare!=`function`)return!1;try{return navigator.canShare({files:e})}catch{return!1}}function uz(e){return e.map(({blob:e,name:t})=>new File([e],t,{type:e.type}))}async function dz(e,t){return pz(vR([{canvas:{id:`default`,width:0,height:0},files:e}],t),t)}async function fz(e,t){return pz(vR(e,t),t)}async function pz(e,t){let n=uz(e);if(lz(n))try{await navigator.share({files:n});return}catch(e){if(e instanceof Error&&e.name===`AbortError`)return;console.warn(`[download] iOS native share failed, falling back to download`,e)}if(e.length===1){let[{blob:t,name:n}]=e;(0,qL.default)(t,n,t.type)}else{let{downloadZip:n}=await Promise.resolve().then(()=>require("./client-zip-Dl4jBUKQ.cjs")),r=await(await n(e.map(({blob:e,name:t})=>({input:e,name:t})))).blob();(0,qL.default)(r,`${t}.${sR.getExtension(r.type)}`,r.type)}}async function mz(e,t){let n={templateId:t.templateId,campaignId:t.campaignId,data:t.data,assets:t.assets,caption:t.caption,...t.canvases?{canvases:t.canvases}:{}},r=await fetch(e,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify(n)});if(!r.ok)throw Error(`Failed to send webhook: ${r.statusText}`)}async function hz(e,t){let n=new URL(e);n.searchParams.set(`templateId`,t.templateId),n.searchParams.set(`campaignId`,t.campaignId.toString()),n.searchParams.set(`data`,JSON.stringify(t.data)),t.caption&&n.searchParams.set(`caption`,t.caption),t.assets.forEach((e,t)=>{n.searchParams.set(`asset_${t+1}`,e)}),window.location.href=n.toString()}var gz=1024;function _z(){return typeof crypto<`u`&&`randomUUID`in crypto?crypto.randomUUID().slice(0,8):Math.random().toString(36).slice(2,10)}function vz(e){let n=(0,t.ref)([]),r=(0,t.ref)(``),i=(0,t.ref)(new Set);function a(){if(!e.storageKey.value)return null;try{let t=sessionStorage.getItem(e.storageKey.value);if(!t)return null;let n=JSON.parse(t);return n&&n.v===1&&Array.isArray(n.rows)?n:null}catch{return null}}function o(t){return{id:_z(),data:{...QT(e.seed()),...QT(t??{})}}}function s(){let t=e.initial?.length?{v:1,rows:e.initial}:a();t&&t.rows.length>0?(n.value=t.rows.slice(0,gz).map(t=>({id:t.id||_z(),data:{...QT(e.seed()),...t.data??{}}})),r.value=t.activeRowId&&n.value.some(e=>e.id===t.activeRowId)?t.activeRowId:n.value[0].id):(n.value=[o()],r.value=n.value[0].id)}s(),(0,t.watch)(e.storageKey,()=>s());let c;function l(){e.storageKey.value&&(clearTimeout(c),c=setTimeout(()=>{try{let t={v:1,rows:n.value,activeRowId:r.value};sessionStorage.setItem(e.storageKey.value,JSON.stringify(t))}catch{}},250))}(0,t.watch)([n,r],l,{deep:!0});let u=(0,t.computed)(()=>n.value.findIndex(e=>e.id===r.value)),d=(0,t.computed)(()=>n.value[u.value]??n.value[0]),f=(0,t.computed)(()=>n.value.filter(e=>i.value.has(e.id))),p=(0,t.computed)(()=>f.value.length>0?f.value:n.value),m=(0,t.computed)(()=>n.value.length>0&&f.value.length===n.value.length),h=(0,t.computed)(()=>n.value.length>=gz);function g(e){n.value.some(t=>t.id===e)&&(r.value=e)}function _(e){let t=Math.min(n.value.length-1,Math.max(0,u.value+e));r.value=n.value[t].id}function v(e=r.value){if(h.value)return;let t=n.value.findIndex(t=>t.id===e),i=o((n.value[t]??n.value[n.value.length-1])?.data);return n.value.splice((t>=0?t:n.value.length-1)+1,0,i),r.value=i.id,i}function y(e){let t=new Set(e);if(t.size===0)return;let a=n.value.filter(e=>!t.has(e.id));if(a.length===0){let e=o();n.value=[e],r.value=e.id}else{let e=u.value;n.value=a,a.some(e=>e.id===r.value)||(r.value=a[Math.min(e,a.length-1)].id)}let s=new Set(i.value);e.forEach(e=>s.delete(e)),i.value=s}function b(e,t){let r=n.value.findIndex(t=>t.id===e),i=r+t;if(r<0||i<0||i>=n.value.length)return;let a=n.value.slice();[a[r],a[i]]=[a[i],a[r]],n.value=a}function x(e,t){let n=new Set(i.value);t??!n.has(e)?n.add(e):n.delete(e),i.value=n}function S(e){i.value=e?new Set(n.value.map(e=>e.id)):new Set}function C(e,t){let r=Math.min(e+t,gz)-n.value.length;for(let e=0;e<r;e++)n.value.push(o(n.value[n.value.length-1]?.data));return n.value.slice(e,e+t)}function w(e,t){let a=e.map(e=>o(e)),s=t===`replace`?a:[...n.value,...a],c=s.slice(0,gz);return n.value=c.length>0?c:[o()],n.value.some(e=>e.id===r.value)||(r.value=n.value[0].id),t===`replace`&&(i.value=new Set),{imported:a.length,dropped:s.length-c.length}}function T(e){e.length!==0&&(n.value=e.slice(0,gz),n.value.some(e=>e.id===r.value)||(r.value=n.value[0].id))}return{rows:n,activeRowId:r,activeIndex:u,activeRow:d,selectedIds:i,selectedRows:f,targetRows:p,allSelected:m,atCapacity:h,setActive:g,activateOffset:_,addRow:v,removeRows:y,moveRow:b,toggleSelected:x,selectAll:S,ensureRowsFrom:C,importRows:w,replaceAll:T,makeRow:o}}var yz={class:`intro`},bz={class:`field`},xz=[`id`],Sz={key:0,class:`field`},Cz=[`id`],wz={key:1,class:`field`},Tz=[`id`],Ez={key:2,class:`field checkbox-field`},Dz={class:`summary`,"aria-live":`polite`},Oz={class:`buttons`},kz={class:`intro`},Az={class:`progress-meta`},jz={key:0},Mz={class:`buttons`},Nz={class:`intro`},Pz={class:`buttons`},Fz=V((0,t.defineComponent)({__name:`BatchExportPopup`,props:{kind:{},rowCount:{},templateName:{},isVideoTemplate:{type:Boolean},videoBatchMaxSize:{},consumesCredits:{type:Boolean},namingBindings:{},run:{type:Function}},emits:[`cancel`,`done`],setup(e,{expose:n,emit:r}){let a=e,o=r,s={format:i(`bx-batch-format`),naming:i(`bx-batch-naming`),delimiter:i(`bx-batch-delimiter`)},c=gz,l=[{label:`PNG`,value:`png`},{label:`JPEG`,value:`jpeg`},{label:`WebP`,value:`webp`},{label:`PDF`,value:`pdf`}],u=[{label:`MP4`,value:`mp4`},{label:`MOV`,value:`mov`}],d=(0,t.computed)(()=>{let e=a.isVideoTemplate?u:l;return a.kind===`files`?e:[...e.map(e=>({...e,label:`${e.label} link`})),{label:`Template link (prefilled editor)`,value:`template-link`}]}),f=(0,t.ref)(a.isVideoTemplate?`mp4`:`png`),p=(0,t.computed)(()=>[{label:`Row number`,value:`__index`},...a.namingBindings.map(e=>({label:e.label,value:e.key}))]),m=(0,t.ref)(`__index`),h=[{label:`Comma (,)`,value:`,`},{label:`Semicolon (;)`,value:`;`}],g=(0,t.ref)(`,`),_=(0,t.ref)(!0),v=(0,t.computed)(()=>a.isVideoTemplate&&f.value!==`template-link`),y=(0,t.computed)(()=>!v.value||a.rowCount<=a.videoBatchMaxSize),b=(0,t.computed)(()=>y.value?``:a.videoBatchMaxSize<=1?`Video batch export is not part of your plan: videos export one row at a time. Select a single row, or use the template link format.`:`Your plan renders up to ${a.videoBatchMaxSize} videos per batch. Select at most ${a.videoBatchMaxSize} rows.`),x=(0,t.computed)(()=>a.rowCount>0&&a.rowCount<=c&&y.value);function S(e,t){let n=di.BillingV3.BILLABLE_USAGE_UNIT_COST_CENTI[e]*t/di.BillingV3.CENTICREDITS_PER_CREDIT;return n>=1?String(Math.round(n*100)/100):n.toFixed(2).replace(/0+$/,``).replace(/\.$/,``)}let C=(0,t.computed)(()=>{let e=a.rowCount,t=`${e} ${e===1?`row`:`rows`}`;return a.kind===`files`?a.consumesCredits?v.value?`${t} · ${S(`batch-video`,e)} credits will be consumed, one per video`:`${t} · ${S(`batch-image`,e)} credits will be consumed`:`${t} · watermarked, so no credits are consumed`:f.value===`template-link`?`${t} · links open the editor prefilled, nothing is rendered now`:_.value?v.value?`${t} · rendering the links now consumes ${S(`video-api`,e)} credits, one per video`:`${t} · rendering the links now consumes about ${S(`image-api`,e)} credits`:`${t} · each link renders (and is metered) when first opened`}),w=(0,t.ref)(`configure`),T=(0,t.ref)({done:0,total:0,failed:0,current:0}),E=(0,t.computed)(()=>T.value.total?Math.min(1,(T.value.done+T.value.failed+T.value.current)/T.value.total):0),D=(0,t.computed)(()=>a.kind===`files`?`Rendering ${v.value?`videos`:`images`}… ${T.value.done} of ${T.value.total}`:`Rendering the links… ${T.value.done} of ${T.value.total}`),O,k=(0,t.ref)(),A=(0,t.ref)(0),j=(0,t.ref)([]),M=(0,t.ref)([]),N=(0,t.computed)(()=>{let e=M.value.map(e=>e.index+1),t=e.slice(0,5),n=e.length-t.length;return e.length===1?`row ${t[0]}`:n>0?`rows ${t.join(`, `)} and ${n} more`:`rows ${t.slice(0,-1).join(`, `)} and ${t[t.length-1]}`}),P=(0,t.ref)(``),F=(0,t.ref)(``);async function I(){if(x.value){O=new AbortController,w.value=`running`,T.value={done:0,total:a.rowCount,failed:0,current:0};try{let e=await a.run({kind:a.kind,format:f.value,naming:m.value===`__index`?{kind:`index`}:{kind:`binding`,key:m.value},delimiter:g.value,prewarm:_.value&&f.value!==`template-link`,signal:O.signal,onProgress:e=>{T.value={done:e.done,total:e.total,failed:e.failed??0,current:e.current??0}}});k.value=e.output,A.value=e.fileCount??0,j.value=e.overBudget??[],M.value=e.failedRows??[],P.value=e.prewarmed?` · ${e.prewarmed.done-e.prewarmed.failed} of ${T.value.total} links rendered${e.prewarmed.failed?`, ${e.prewarmed.failed} failed`:``}`:``,e.cancelled&&(F.value=`Export cancelled.`),o(`done`,e)}catch(e){console.error(`[batch] export failed`,e),F.value=a.kind===`files`?`The export failed: no row rendered, so there is nothing to download. Nothing was charged. Please try again.`:`The export failed. Please try again.`}w.value=`done`}}function L(){O?.abort()}async function ee(){if(k.value){if(a.kind===`csv`){(0,qL.default)(k.value.blob,k.value.fileName,`text/csv`);return}await dz([k.value.blob],k.value.fileName.replace(/\.[a-z0-9]+$/i,``))}}return n({cancelRun:L}),(n,r)=>((0,t.openBlock)(),(0,t.createElementBlock)(`div`,{class:(0,t.normalizeClass)([`bx-batch-export-popup`,{[`phase-`+w.value]:!0}])},[w.value===`configure`?((0,t.openBlock)(),(0,t.createElementBlock)(t.Fragment,{key:0},[(0,t.createElementVNode)(`p`,yz,[e.kind===`files`?((0,t.openBlock)(),(0,t.createElementBlock)(t.Fragment,{key:0},[(0,t.createTextVNode)(` Renders `+(0,t.toDisplayString)(e.rowCount)+` `+(0,t.toDisplayString)(e.rowCount===1?`row`:`rows`)+` on the server and hands you `+(0,t.toDisplayString)(e.rowCount===1?`the file`:`a zip`)+`. `,1)],64)):((0,t.openBlock)(),(0,t.createElementBlock)(t.Fragment,{key:1},[(0,t.createTextVNode)(` Writes the `+(0,t.toDisplayString)(e.rowCount)+` `+(0,t.toDisplayString)(e.rowCount===1?`row`:`rows`)+` to a CSV — one column per field, plus a link to the result of every row. `,1)],64))]),(0,t.createElementVNode)(`div`,bz,[(0,t.createElementVNode)(`span`,{class:`label`,id:s.format},`Format`,8,xz),(0,t.createVNode)(DD,{modelValue:f.value,"onUpdate:modelValue":r[0]||=e=>f.value=e,options:d.value,bordered:``,"aria-labelledby":s.format},null,8,[`modelValue`,`options`,`aria-labelledby`])]),e.kind===`files`?((0,t.openBlock)(),(0,t.createElementBlock)(`div`,Sz,[(0,t.createElementVNode)(`span`,{class:`label`,id:s.naming},`Name files by`,8,Cz),(0,t.createVNode)(DD,{modelValue:m.value,"onUpdate:modelValue":r[1]||=e=>m.value=e,options:p.value,bordered:``,"aria-labelledby":s.naming},null,8,[`modelValue`,`options`,`aria-labelledby`])])):(0,t.createCommentVNode)(``,!0),e.kind===`csv`?((0,t.openBlock)(),(0,t.createElementBlock)(`div`,wz,[(0,t.createElementVNode)(`span`,{class:`label`,id:s.delimiter},`Separator`,8,Tz),(0,t.createVNode)(DD,{modelValue:g.value,"onUpdate:modelValue":r[2]||=e=>g.value=e,options:h,bordered:``,"aria-labelledby":s.delimiter},null,8,[`modelValue`,`aria-labelledby`])])):(0,t.createCommentVNode)(``,!0),e.kind===`csv`&&f.value!==`template-link`?((0,t.openBlock)(),(0,t.createElementBlock)(`div`,Ez,[(0,t.createVNode)(AA,{modelValue:_.value,"onUpdate:modelValue":r[3]||=e=>_.value=e,size:`medium`,disabled:!y.value},null,8,[`modelValue`,`disabled`]),r[6]||=(0,t.createElementVNode)(`span`,{class:`label`},`Render the links now`,-1),r[7]||=(0,t.createElementVNode)(`span`,{class:`hint`},`Otherwise every link renders when it is first opened.`,-1)])):(0,t.createCommentVNode)(``,!0),b.value?((0,t.openBlock)(),(0,t.createBlock)(QL,{key:3,type:`warning`,bordered:!0,"show-icon":!0},{default:(0,t.withCtx)(()=>[(0,t.createTextVNode)((0,t.toDisplayString)(b.value),1)]),_:1})):e.rowCount>(0,t.unref)(c)?((0,t.openBlock)(),(0,t.createBlock)(QL,{key:4,type:`error`,bordered:!0,"show-icon":!0},{default:(0,t.withCtx)(()=>[(0,t.createTextVNode)(` A batch export is limited to `+(0,t.toDisplayString)((0,t.unref)(c))+` rows. Select the rows you want to export. `,1)]),_:1})):(0,t.createCommentVNode)(``,!0),(0,t.createElementVNode)(`div`,Dz,(0,t.toDisplayString)(C.value),1),(0,t.createElementVNode)(`div`,Oz,[(0,t.createVNode)(X,{secondary:``,onClick:r[4]||=e=>o(`cancel`)},{default:(0,t.withCtx)(()=>[...r[8]||=[(0,t.createTextVNode)(`Cancel`,-1)]]),_:1}),(0,t.createVNode)(X,{active:``,disabled:!x.value,onClick:I},{default:(0,t.withCtx)(()=>[(0,t.createTextVNode)((0,t.toDisplayString)(e.kind===`files`?`Export`:`Export CSV`),1)]),_:1},8,[`disabled`])])],64)):w.value===`running`?((0,t.openBlock)(),(0,t.createElementBlock)(t.Fragment,{key:1},[(0,t.createElementVNode)(`p`,kz,(0,t.toDisplayString)(D.value),1),(0,t.createVNode)(TT,{value:E.value},null,8,[`value`]),(0,t.createElementVNode)(`div`,Az,[(0,t.createElementVNode)(`span`,null,(0,t.toDisplayString)(T.value.done)+` / `+(0,t.toDisplayString)(T.value.total)+` `+(0,t.toDisplayString)((e.kind,`rendered`)),1),T.value.failed?((0,t.openBlock)(),(0,t.createElementBlock)(`span`,jz,(0,t.toDisplayString)(T.value.failed)+` failed`,1)):(0,t.createCommentVNode)(``,!0)]),(0,t.createElementVNode)(`div`,Mz,[(0,t.createVNode)(X,{secondary:``,onClick:L},{default:(0,t.withCtx)(()=>[(0,t.createTextVNode)((0,t.toDisplayString)(e.kind===`files`?`Cancel`:`Stop rendering`),1)]),_:1})])],64)):((0,t.openBlock)(),(0,t.createElementBlock)(t.Fragment,{key:2},[(0,t.createElementVNode)(`p`,Nz,[F.value?((0,t.openBlock)(),(0,t.createElementBlock)(t.Fragment,{key:0},[(0,t.createTextVNode)((0,t.toDisplayString)(F.value),1)],64)):e.kind===`files`?((0,t.openBlock)(),(0,t.createElementBlock)(t.Fragment,{key:1},[(0,t.createTextVNode)((0,t.toDisplayString)(A.value)+` `+(0,t.toDisplayString)(A.value===1?`file`:`files`)+` ready.`,1)],64)):((0,t.openBlock)(),(0,t.createElementBlock)(t.Fragment,{key:2},[(0,t.createTextVNode)(`CSV ready`+(0,t.toDisplayString)(P.value)+`.`,1)],64))]),M.value.length?((0,t.openBlock)(),(0,t.createBlock)(QL,{key:0,type:`warning`,bordered:!0,"show-icon":!0},{default:(0,t.withCtx)(()=>[(0,t.createTextVNode)((0,t.toDisplayString)(M.value.length)+` of `+(0,t.toDisplayString)(T.value.total)+` `+(0,t.toDisplayString)(T.value.total===1?`row`:`rows`)+` failed and `+(0,t.toDisplayString)(M.value.length===1?`is`:`are`)+` not in the download (`+(0,t.toDisplayString)(N.value)+`). `,1),e.consumesCredits?((0,t.openBlock)(),(0,t.createElementBlock)(t.Fragment,{key:0},[(0,t.createTextVNode)(`Rows that rendered were charged; failed rows were not.`)],64)):((0,t.openBlock)(),(0,t.createElementBlock)(t.Fragment,{key:1},[(0,t.createTextVNode)(`Nothing was charged.`)],64))]),_:1})):(0,t.createCommentVNode)(``,!0),j.value.length?((0,t.openBlock)(),(0,t.createBlock)(QL,{key:1,type:`warning`,bordered:!0,"show-icon":!0},{default:(0,t.withCtx)(()=>[(0,t.createTextVNode)((0,t.toDisplayString)(j.value.length)+` `+(0,t.toDisplayString)(j.value.length===1?`row exceeds`:`rows exceed`)+` the URL length the render API accepts (rows `+(0,t.toDisplayString)(j.value.join(`, `))+`). Those links may not render — shorten their texts or use the template link format. `,1)]),_:1})):(0,t.createCommentVNode)(``,!0),(0,t.createElementVNode)(`div`,Pz,[(0,t.createVNode)(X,{secondary:``,onClick:r[5]||=e=>o(`cancel`)},{default:(0,t.withCtx)(()=>[...r[9]||=[(0,t.createTextVNode)(`Close`,-1)]]),_:1}),k.value?((0,t.openBlock)(),(0,t.createBlock)(X,{key:0,active:``,onClick:ee},{icon:(0,t.withCtx)(()=>[(0,t.createVNode)(Z,null,{default:(0,t.withCtx)(()=>[(0,t.createVNode)((0,t.unref)(_x))]),_:1})]),default:(0,t.withCtx)(()=>[(0,t.createTextVNode)(` Download `+(0,t.toDisplayString)(e.kind===`files`?A.value===1?`file`:`zip`:`CSV`),1)]),_:1})):(0,t.createCommentVNode)(``,!0)])],64))],2))}}),[[`__scopeId`,`data-v-5c0586a5`]]);function Iz(e){let t=e.toLowerCase();return t===`true`||t===`wahr`||t===`ja`||t===`yes`||t===`1`?{type:`boolean`,value:!0}:t===`false`||t===`falsch`||t===`nein`||t===`no`||t===`0`?{type:`boolean`,value:!1}:null}function Lz(e,t){let n=e.trim();return n===``||n.toLowerCase()===`null`||n.toLowerCase()===`n/a`?{type:`null`,value:null}:Iz(n)||Uz(n)||Hz(n)||Rz(n,t)||Bz(n)||Vz(n)||{type:`string`,value:e}}function Rz(e,t){let n=/^([€$£¥₹])\s*([\d\s.,]+)$/,r=/^([\d\s.,]+)\s*%$/,i=/^([\d\s.,]+)\s*([€$£¥₹])$/,a=e,o,s=!1,c=e.match(n);c&&(o=c[1],a=c[2],s=!0);let l=e.match(i);l&&(a=l[1],o=l[2],s=!0);let u=e.match(r);u&&(a=u[1],o=`%`,s=!0),a=a.replace(/\s/g,``);let d=t;if(t===`auto`&&!s&&(d=zz(a)),s){let e=a.lastIndexOf(`.`),t=a.lastIndexOf(`,`),n=Math.max(e,t);if(n>-1){let e=a.substring(n+1);a=e.length<=2&&e.length>0?a.substring(0,n).replace(/[.,]/g,``)+`.`+e:a.replace(/[.,]/g,``)}}else d===`de`?(/^\d{1,3}(\.\d{3})*(,\d+)?$/.test(a)||a.includes(`,`))&&(a=a.replace(/\./g,``).replace(`,`,`.`)):d===`en`&&(/^\d{1,3}(,\d{3})*(\.\d+)?$/.test(a)||a.includes(`,`)&&a.includes(`.`)||a.includes(`,`)&&!a.includes(`.`))&&(a=a.replace(/,/g,``));let f=parseFloat(a);return isNaN(f)?null:{type:`number`,value:f,unit:o}}function zz(e){let t=e.includes(`.`),n=e.includes(`,`);if(!t&&!n)return`en`;if(t&&!n){let t=e.split(`.`);return t.length===2&&t[1].length<=2?`en`:`de`}if(n&&!t){let t=e.split(`,`);return t.length===2&&t[1].length<=2?`de`:`en`}let r=e.lastIndexOf(`.`);return e.lastIndexOf(`,`)>r?`de`:`en`}function Bz(e){for(let{pattern:t,format:n}of[{pattern:/^\d{4}-\d{2}-\d{2}(T\d{2}:\d{2}:\d{2})?/,format:`ISO`},{pattern:/^(\d{1,2})\.(\d{1,2})\.(\d{2,4})$/,format:`DD.MM.YYYY`},{pattern:/^(\d{1,2})\/(\d{1,2})\/(\d{2,4})$/,format:`MM/DD/YYYY`},{pattern:/^(\d{1,2})\.(\d{1,2})\.(\d{2,4})\s+(\d{1,2}):(\d{2})/,format:`DD.MM.YYYY HH:MM`}])if(t.test(e)){let t=new Date(e);if(n===`DD.MM.YYYY`){let t=e.match(/^(\d{1,2})\.(\d{1,2})\.(\d{2,4})$/);if(t){let[,e,r,i]=t,a=`${i.length===2?`20${i}`:i}-${r.padStart(2,`0`)}-${e.padStart(2,`0`)}`,o=new Date(a);if(!isNaN(o.getTime()))return{type:`date`,value:o,format:n}}}if(!isNaN(t.getTime()))return{type:`date`,value:t,format:n}}return null}function Vz(e){try{return{type:`url`,value:e,protocol:new URL(e).protocol.replace(`:`,``)}}catch{return/^(www\.)?[\w-]+(\.[\w-]+)+/.test(e)?{type:`url`,value:e,protocol:`implicit`}:null}}function Hz(e){try{let t=kE(e),n=`keyword`;n=e.startsWith(`#`)?`hex`:e.startsWith(`rgb(`)?`rgb`:e.startsWith(`rgba(`)?`rgba`:e.startsWith(`hsl(`)?`hsl`:e.startsWith(`hsla(`)?`hsla`:`name`;let r=t.rgb().object(),i=t.hsl().object();return{type:`color`,value:e,rgb:{r:r.r,g:r.g,b:r.b},hex:t.hex(),hsl:{h:i.h,s:i.s,l:i.l},alpha:t.alpha(),format:n}}catch{return null}}function Uz(e){if(e.startsWith(`{`)&&e.endsWith(`}`)||e.startsWith(`[`)&&e.endsWith(`]`))try{let t=JSON.parse(e);if(Array.isArray(t))return{type:`json-array`,value:t};if(typeof t==`object`&&t)return{type:`json-object`,value:t}}catch{}return null}function Wz(e){return e.type===`string`?e.value:e.type===`number`?e.unit?`${e.value} ${e.unit}`:`${e.value}`:e.type===`boolean`?e.value?`true`:`false`:e.type===`date`?e.value.toISOString():e.type===`url`||e.type===`color`?e.value:e.type===`json-object`||e.type===`json-array`?JSON.stringify(e.value):e.type===`null`?`null`:``}function Gz(e,t){return e.map(e=>e.map(e=>Lz(e,t)))}function Kz(e){let t=e.split(/\r?\n/).filter(e=>e.length>0).slice(0,20);if(t.length===0)return`,`;let n=(e,t)=>{let n=0,r=!1;for(let i=0;i<e.length;i++){let a=e[i];if(a===`"`){if(r&&e[i+1]===`"`){i++;continue}r=!r}else a===t&&!r&&n++}return n},r=t.map(e=>n(e,`,`)),i=t.map(e=>n(e,`;`)),a=r.reduce((e,t)=>e+t,0),o=i.reduce((e,t)=>e+t,0);if(a>0&&o===0)return`,`;if(o>0&&a===0)return`;`;if(a===0&&o===0)return`,`;let s=e=>{let t=e.reduce((e,t)=>e+t,0)/e.length;return e.reduce((e,n)=>e+(n-t)**2,0)/e.length},c=s(r),l=s(i);return c===l?a>=o?`,`:`;`:c<l?`,`:`;`}function qz(e,t=`,`){let n=[],r=[],i=``,a=!1,o=0,s=e.length;for(;o<s;){let s=e[o];if(a){if(s===`"`){if(e[o+1]===`"`){i+=`"`,o+=2;continue}a=!1,o++;continue}i+=s,o++;continue}if(s===`"`){a=!0,o++;continue}if(s===t){r.push(i),i=``,o++;continue}if(s===`\r`||s===`
219
+ `);let t=e.split(/\r?\n/),r=``;for(let e of t)e.startsWith(`data:`)&&(r+=e.slice(5).trim());c(r)}}}catch(e){throw f.cancel().catch(()=>{}),e}if(!s||s.length===0)throw Error(`No files found`);return{files:s,creditsConsumed:0}}async function az(e,t,n,r,i,a,o,s,c,l,u,d){let f=null,p=!1,m=!1;if((r===`png`||r===`jpeg`||r===`webp`)&&!s&&e){console.log(`[RENDER]: Local rendering started`),p=!0;try{let n=t.frames?.x??1,i=t.frames?.y??1,a=t.width/n,o=t.height/i,s=Array(n*i).fill(0).map((e,t)=>({x:t%n*a,y:o*Math.floor(t/n),width:a,height:o}));if(s.length>1){let t=await e.render({type:tz[r],resolution:1,quality:100,vectorExportOptions:{keepGroupTransforms:!0,mode:`optimized`,rasterizeAllMasks:!1,vectorizeAllTexts:!0},watermark:c,resultType:`canvas`,externalCanvas:null,svgLoadWaitDelay:d});f=[];for(let e of s){let n=await $L({imageSource:t,cropX:e.x,cropY:e.y,cropWidth:e.width,cropHeight:e.height,quality:100,type:tz[r]},`blob`);f.push(n)}}else f=[await e.render({type:tz[r],resolution:1,quality:100,vectorExportOptions:{keepGroupTransforms:!0,mode:`optimized`,rasterizeAllMasks:!1,vectorizeAllTexts:!0},watermark:c,resultType:`blob`,externalCanvas:null,svgLoadWaitDelay:d})]}catch(e){console.error(`[RENDER]: Local rendering error`,e),m=!0}}if(!f){console.log(`[RENDER]: Remote rendering started`);try{let e=await rz(i,a,n,t.width,t.height,t.frames?.x??1,t.frames?.y??1,r,o,u);if(e.type===`application/zip`){f=[];let{unzip:t}=await Promise.resolve().then(()=>require("./unzipit.module-DLgVBmhU.cjs")),n=await t(e);for(let[e,t]of Object.entries(n.entries)){let n=await t.blob(sR.getType(e)||`image/png`);f.push(n)}}else f=[e]}catch(e){throw console.error(`[RENDER]: Remote rendering error`,e),Error(`Failed to render serial remotely`)}}return{files:f,renderLocation:p&&!m?`client`:`server`,clientRenderFailed:m}}function oz(e,n,i,a,o,s,c,l,u,d,f,p,m,h,g,_,v,y=(0,t.ref)(void 0),b=(0,t.ref)(void 0),x=(0,t.ref)(void 0),S=(0,t.ref)(void 0),C=(0,t.ref)(void 0)){let{createPopup:w,createMessage:T}=yT(),E=(0,t.computed)(()=>(S.value?.length??0)>=2&&!!b.value),D=(0,t.computed)(()=>d.value||(e.value?.enforceServersideRendering??!1)),O=(0,t.computed)(()=>f.value||(e.value?.enforceServersideRendering??!1)),k=(0,t.computed)(()=>{try{return(0,Xv.default)({templateId:a.value,data:n.value,serial:e.value,campaignId:c.value})}catch(e){return console.error(`Error computing session state hash`,e),`SESSION_STATE_HASH_ERROR`}}),A=new Set;function j(t){let n=e.value?.format??`png`,r=t?.width??e.value?.width,i=t?.height??e.value?.height;return n in nz?{type:`video`,width:r,height:i,format:n,duration:e.value?.animation?.duration??0,vcodec:`libx264`}:{type:`image`,width:r,height:i,format:n}}function M(e,t,n={usage:`campaign-conversion`},r){return async()=>{if((n.always?!h.value:m.value)&&c.value&&e!==null&&!A.has(e)){A.add(e);try{await sz(l.apiBaseUrl,l.env,c.value,a.value??`TEMPLATE_ID_UNDEFINED`,t,e,n.usage,[j(r)])}catch(t){console.error(`[CREDITS] Failed to consume credits on output`,t),A.delete(e)}}}}let N=(0,t.ref)([]),P=(0,t.ref)(!1),F=(0,t.ref)();function I(e,t){return e.map(async e=>{let n=`${l.apiBaseUrl}/api/public/temp-image`,i=new FormData;i.append(`file`,e,`${r()}.${t}`);let a=await fetch(n,{method:`POST`,body:i});if(!a.ok)throw Error(`Failed to upload asset: ${a.statusText}`);return(await a.json()).url})}function L(){let t=S.value?.find(e=>e.id===b.value);return{id:b.value??`default`,width:t?.width??e.value?.width??0,height:t?.height??e.value?.height??0}}function ee(t,n,r){return!c.value||!e.value?async()=>{}:M((0,di.generateBillingKey)(c.value,a.value??`TEMPLATE_ID_UNDEFINED`,n,e.value,t.id),`${r}:${t.id}`,{usage:`campaign-conversion`},t)}async function te(r,s,u,d,f){let p=i.value.actionalConnections,m=i.value.socialConnections,_=Object.entries(m).filter(([e,t])=>t).map(([e])=>e),v=o.value??a.value??`TEMPLATE_ID_UNDEFINED`,b=L();d.setDelivered([{...b,fileCount:r.length}]),p.webhook||p.redirect||_.length>0?N.value=I(r,s):N.value=[];let T=()=>({assets:[],templateId:a.value??`TEMPLATE_ID_UNDEFINED`,campaignId:c.value??-1,data:n.value,caption:y.value??e.value?.caption}),O=E.value&&u===`image`&&!!S.value;if(_.length===0&&!O){if(p.download&&!p.webhook&&!p.redirect){await dz(r,v),await f(),d.download({trigger:`auto`,withinSocialShare:!1});return}if(p.webhook&&!p.download&&!p.redirect){await mz(p.webhook,{...T(),assets:await Promise.all(N.value)}),await f(),d.webhook({trigger:`auto`,webhookHost:fR(p.webhook)});return}if(p.redirect&&!p.download&&!p.webhook)return d.redirect({trigger:`auto`,redirectHost:fR(p.redirect)}),await f(),await hz(p.redirect,{...T(),assets:await Promise.all(N.value)})}let A;if(O&&S.value){let t=QT(n.value),i=k.value,o=e.value?.format??`png`,u=D.value,p=new Map;C.value?.activate(),A=QR({canvases:S.value,primaryCanvasId:b.id,primaryFiles:r,primaryRemote:N.value,prerender:o!==`pdf`&&!u,renderCanvas:async e=>{let n,r;try{if(!C.value)throw Error(`No sibling renderers`);({live:n,serial:r}=await C.value.renderer(e.id))}catch(t){console.warn(`[EXPORT] sibling ${e.id} has no local renderer, using the server`,t),n=void 0,r=await e.loadSerial()}let s=n=>az(n,r,t,o,c.value,a.value??`TEMPLATE_ID_UNDEFINED`,l,u,h.value,i,e.id,x.value),d=await s(n);return d.renderLocation===`client`&&d.files[0]&&await $R(d.files[0])&&(console.warn(`[EXPORT] local render of ${e.id} came out blank, using the server`),d=await s(void 0)),d.files},upload:e=>I(e,s),consume:e=>{if(e.id===b.id)return f();let n=p.get(e.id);return n||(n=ee(e,t,i),p.set(e.id,n)),n()},onSelectionChange:e=>d.setDelivered(e)})}w({draggable:!1,disableBackgroundEffect:window.innerWidth>700,transculent:!0,type:window.innerWidth<=700?`layer`:`frame`,content:()=>(0,t.h)(JR,{templateId:a.value??`TEMPLATE_ID_UNDEFINED`,campaignId:c.value??-1,data:n.value,exportOptions:i.value,caption:y.value??e.value?.caption,assets:r,assetsRemote:N.value,baseName:o.value,mediaType:u,bridge:g.value,analytics:d,consumeCredit:f,primaryCanvas:{...b,segments:e.value?.frames??{x:1,y:1}},multiCanvas:A,snapshots:C.value?.snapshots,snapshotFailed:C.value?.snapshotFailed,demandSnapshots:C.value?.demand}),customClasses:[`bx-template-editor-export-popup`,`flush-content-x`]})}function R(){let e=i.value.actionalConnections,t=i.value.socialConnections,n=[];e.download&&n.push(`download`),e.webhook&&n.push(`webhook`),e.redirect&&n.push(`redirect`);let r=Object.entries(t).filter(([,e])=>e).map(([e])=>e);return{enabledActions:n,enabledSocials:r,optionCount:n.length+r.length}}async function ne(){if(!c.value)return console.error(`No campaign ID available for export`);if(!e.value)return console.error(`No serial available for export`);if(!s.value)return console.error(`No live template component reference available for export`);let t=e.value?.format??`png`,r=t in nz?`video`:`image`,{enabledActions:i,enabledSocials:o,optionCount:u}=R(),d=new mR(v.value,{templateId:a.value??`TEMPLATE_ID_UNDEFINED`,campaignId:c.value,format:t,mediaType:r,watermark:h.value,enforceServerSideRendering:r===`video`?O.value:D.value,enabledActions:i,enabledSocials:o,optionCount:u,dataStateHash:k.value,tabSessionId:ez,canvasId:b.value,canvasWidth:e.value.width,canvasHeight:e.value.height,availableCanvasCount:Math.max(1,S.value?.length??1)});E.value&&r===`image`&&C.value?.activate();let f=performance.now(),m=()=>Math.round(performance.now()-f);if(d.attempt(),P.value=!0,F.value=void 0,t in tz){console.log(`[EXPORT] Starting image export`,t),console.log(`sessionState`,k.value);let r;try{r=await az(s.value,e.value,n.value,t,c.value,a.value??`TEMPLATE_ID_UNDEFINED`,l,D.value,h.value,k.value,b.value,x.value)}catch(e){throw P.value=!1,d.renderFailure({renderLocation:`unknown`,renderDurationMs:m(),error:e instanceof Error?e.message:String(e)}),e}P.value=!1,d.renderSuccess({renderLocation:r.renderLocation,renderDurationMs:m(),fileCount:r.files.length,clientRenderFailed:r.clientRenderFailed});let i=M((0,di.generateBillingKey)(c.value,a.value??`TEMPLATE_ID_UNDEFINED`,n.value,e.value,b.value),k.value);await te(r.files,t,`image`,d,i)}else if(t in nz){let r=null,i;F.value=0;let o=!XR()||O.value?`server`:`client`;if(o===`server`){let e=0,o=0,s=0;try{let[i]=(await iz(c.value,a.value??`TEMPLATE_ID_UNDEFINED`,n.value,t,l,t=>{t.type===`keyframe`?(e=t.frame,s=t.totalFrames):t.type===`encode_video`&&(o=t.frame,s=t.totalFrames),F.value=(e+o)/(s*2)},b.value)).files,u=await fetch(i);if(!u.ok)throw Error(`Failed to download the rendered video: ${u.status}`);r=await u.blob()}catch(e){console.error(`[VIDEO EXPORT] Server rendering failed`,e),i=e instanceof Error?e.message:String(e)}finally{P.value=!1,F.value=void 0}}else{let t=s.value,n=e.value.animation.fps,a=Math.ceil(e.value.animation.duration*n),o=document.createElement(`canvas`),c=async(e,n)=>(p.value=n,await t.render({type:tz.png,resolution:1,quality:100,vectorExportOptions:{keepGroupTransforms:!0,mode:`optimized`,rasterizeAllMasks:!1,vectorizeAllTexts:!0},resultType:`canvas`,watermark:h.value,externalCanvas:o,svgLoadWaitDelay:x.value}));try{r=await ZR({fps:n,totalFrames:a,renderFrame:c,onProgress:(e,t)=>{F.value=e/t}})}catch(e){console.error(`[VIDEO EXPORT] Local encoding failed`,e),i=e instanceof Error?e.message:String(e)}finally{P.value=!1,F.value=void 0}}if(r){d.renderSuccess({renderLocation:o,renderDurationMs:m(),fileCount:1,clientRenderFailed:!1});let i=o===`server`?async()=>{}:M((0,di.generateBillingKey)(c.value,a.value??`TEMPLATE_ID_UNDEFINED`,n.value,e.value,b.value),k.value);await te([r],t,`video`,d,i)}else d.renderFailure({renderLocation:o,renderDurationMs:m(),error:i??`Video rendering produced no file`}),T({type:`error`,message:`The video could not be exported. Please try again.`})}else P.value=!1,F.value=void 0,d.renderFailure({renderLocation:`unknown`,renderDurationMs:m(),error:`Unsupported export format: ${t}`}),T({type:`error`,message:`This format can't be exported in the design generator.`})}let re=!1;async function ie(){if(re||!_.value||!e.value||!s.value)return;let t=e.value.format??`png`,n=null;if(t in tz){if(t===`pdf`||D.value)return;n=t}else if(t in nz){if(O.value||!XR())return;n=`png`}else return;re=!0;try{console.log(`[RENDER]: Pre-caching local rendering assets`),await s.value.render({type:tz[n],resolution:1,quality:100,vectorExportOptions:{keepGroupTransforms:!0,mode:`optimized`,rasterizeAllMasks:!1,vectorizeAllTexts:!0},watermark:!1,resultType:`blob`,externalCanvas:null,svgLoadWaitDelay:0}),console.log(`[RENDER]: Pre-cache complete`)}catch(e){console.warn(`[RENDER]: Pre-cache local render failed (ignored)`,e),re=!1}}async function ae(t,n=`image`){c.value&&e.value&&await M((0,di.generateBillingKey)(c.value,a.value??`TEMPLATE_ID_UNDEFINED`,t,e.value,b.value),(0,Xv.default)({templateId:a.value,data:t,serial:e.value,campaignId:c.value}),{usage:n===`video`?`batch-video`:`batch-image`,always:!0})()}return{triggerExport:ne,consumeOutputFor:ae,preCacheLocalRender:ie,rendering:P,videoRenderingProgress:F}}async function sz(e,t,n,r,i,a,o=`campaign-conversion`,s=[]){console.log(`[CREDITS] Reporting export for billing`,{usage:o,assets:s});let c={campaignId:n,templateId:r,usage:o,assets:s,sessionState:i,balanceName:`EMBED`,billingKey:a};await fetch(`${e}/api/public/consume-credits?env=${encodeURIComponent(t)}`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify(c)})}function cz(){return typeof navigator>`u`?!1:!!(/iPhone|iPad|iPod/i.test(navigator.userAgent)||navigator.maxTouchPoints>1&&/Macintosh/.test(navigator.userAgent))}function lz(e){if(!cz()||typeof navigator.share!=`function`||typeof navigator.canShare!=`function`)return!1;try{return navigator.canShare({files:e})}catch{return!1}}function uz(e){return e.map(({blob:e,name:t})=>new File([e],t,{type:e.type}))}async function dz(e,t){return pz(vR([{canvas:{id:`default`,width:0,height:0},files:e}],t),t)}async function fz(e,t){return pz(vR(e,t),t)}async function pz(e,t){let n=uz(e);if(lz(n))try{await navigator.share({files:n});return}catch(e){if(e instanceof Error&&e.name===`AbortError`)return;console.warn(`[download] iOS native share failed, falling back to download`,e)}if(e.length===1){let[{blob:t,name:n}]=e;(0,qL.default)(t,n,t.type)}else{let{downloadZip:n}=await Promise.resolve().then(()=>require("./client-zip-Dl4jBUKQ.cjs")),r=await(await n(e.map(({blob:e,name:t})=>({input:e,name:t})))).blob();(0,qL.default)(r,`${t}.${sR.getExtension(r.type)}`,r.type)}}async function mz(e,t){let n={templateId:t.templateId,campaignId:t.campaignId,data:t.data,assets:t.assets,caption:t.caption,...t.canvases?{canvases:t.canvases}:{}},r=await fetch(e,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify(n)});if(!r.ok)throw Error(`Failed to send webhook: ${r.statusText}`)}async function hz(e,t){let n=new URL(e);n.searchParams.set(`templateId`,t.templateId),n.searchParams.set(`campaignId`,t.campaignId.toString()),n.searchParams.set(`data`,JSON.stringify(t.data)),t.caption&&n.searchParams.set(`caption`,t.caption),t.assets.forEach((e,t)=>{n.searchParams.set(`asset_${t+1}`,e)}),window.location.href=n.toString()}var gz=1024;function _z(){return typeof crypto<`u`&&`randomUUID`in crypto?crypto.randomUUID().slice(0,8):Math.random().toString(36).slice(2,10)}function vz(e){let n=(0,t.ref)([]),r=(0,t.ref)(``),i=(0,t.ref)(new Set);function a(){if(!e.storageKey.value)return null;try{let t=sessionStorage.getItem(e.storageKey.value);if(!t)return null;let n=JSON.parse(t);return n&&n.v===1&&Array.isArray(n.rows)?n:null}catch{return null}}function o(t){return{id:_z(),data:{...QT(e.seed()),...QT(t??{})}}}function s(){let t=e.initial?.length?{v:1,rows:e.initial}:a();t&&t.rows.length>0?(n.value=t.rows.slice(0,gz).map(t=>({id:t.id||_z(),data:{...QT(e.seed()),...t.data??{}}})),r.value=t.activeRowId&&n.value.some(e=>e.id===t.activeRowId)?t.activeRowId:n.value[0].id):(n.value=[o()],r.value=n.value[0].id)}s(),(0,t.watch)(e.storageKey,()=>s());let c;function l(){e.storageKey.value&&(clearTimeout(c),c=setTimeout(()=>{try{let t={v:1,rows:n.value,activeRowId:r.value};sessionStorage.setItem(e.storageKey.value,JSON.stringify(t))}catch{}},250))}(0,t.watch)([n,r],l,{deep:!0});let u=(0,t.computed)(()=>n.value.findIndex(e=>e.id===r.value)),d=(0,t.computed)(()=>n.value[u.value]??n.value[0]),f=(0,t.computed)(()=>n.value.filter(e=>i.value.has(e.id))),p=(0,t.computed)(()=>f.value.length>0?f.value:n.value),m=(0,t.computed)(()=>n.value.length>0&&f.value.length===n.value.length),h=(0,t.computed)(()=>n.value.length>=gz);function g(e){n.value.some(t=>t.id===e)&&(r.value=e)}function _(e){let t=Math.min(n.value.length-1,Math.max(0,u.value+e));r.value=n.value[t].id}function v(e=r.value){if(h.value)return;let t=n.value.findIndex(t=>t.id===e),i=o((n.value[t]??n.value[n.value.length-1])?.data);return n.value.splice((t>=0?t:n.value.length-1)+1,0,i),r.value=i.id,i}function y(e){let t=new Set(e);if(t.size===0)return;let a=n.value.filter(e=>!t.has(e.id));if(a.length===0){let e=o();n.value=[e],r.value=e.id}else{let e=u.value;n.value=a,a.some(e=>e.id===r.value)||(r.value=a[Math.min(e,a.length-1)].id)}let s=new Set(i.value);e.forEach(e=>s.delete(e)),i.value=s}function b(e,t){let r=n.value.findIndex(t=>t.id===e),i=r+t;if(r<0||i<0||i>=n.value.length)return;let a=n.value.slice();[a[r],a[i]]=[a[i],a[r]],n.value=a}function x(e,t){let n=new Set(i.value);t??!n.has(e)?n.add(e):n.delete(e),i.value=n}function S(e){i.value=e?new Set(n.value.map(e=>e.id)):new Set}function C(e,t){let r=Math.min(e+t,gz)-n.value.length;for(let e=0;e<r;e++)n.value.push(o(n.value[n.value.length-1]?.data));return n.value.slice(e,e+t)}function w(e,t){let a=e.map(e=>o(e)),s=t===`replace`?a:[...n.value,...a],c=s.slice(0,gz);return n.value=c.length>0?c:[o()],n.value.some(e=>e.id===r.value)||(r.value=n.value[0].id),t===`replace`&&(i.value=new Set),{imported:a.length,dropped:s.length-c.length}}function T(e){e.length!==0&&(n.value=e.slice(0,gz),n.value.some(e=>e.id===r.value)||(r.value=n.value[0].id))}return{rows:n,activeRowId:r,activeIndex:u,activeRow:d,selectedIds:i,selectedRows:f,targetRows:p,allSelected:m,atCapacity:h,setActive:g,activateOffset:_,addRow:v,removeRows:y,moveRow:b,toggleSelected:x,selectAll:S,ensureRowsFrom:C,importRows:w,replaceAll:T,makeRow:o}}var yz={class:`intro`},bz={class:`field`},xz=[`id`],Sz={key:0,class:`field`},Cz=[`id`],wz={key:1,class:`field`},Tz=[`id`],Ez={key:2,class:`field checkbox-field`},Dz={class:`summary`,"aria-live":`polite`},Oz={class:`buttons`},kz={class:`intro`},Az={class:`progress-meta`},jz={key:0},Mz={class:`buttons`},Nz={class:`intro`},Pz={class:`buttons`},Fz=V((0,t.defineComponent)({__name:`BatchExportPopup`,props:{kind:{},rowCount:{},templateName:{},isVideoTemplate:{type:Boolean},videoBatchMaxSize:{},consumesCredits:{type:Boolean},namingBindings:{},run:{type:Function}},emits:[`cancel`,`done`],setup(e,{expose:n,emit:r}){let a=e,o=r,s={format:i(`bx-batch-format`),naming:i(`bx-batch-naming`),delimiter:i(`bx-batch-delimiter`)},c=gz,l=[{label:`PNG`,value:`png`},{label:`JPEG`,value:`jpeg`},{label:`WebP`,value:`webp`},{label:`PDF`,value:`pdf`}],u=[{label:`MP4`,value:`mp4`},{label:`MOV`,value:`mov`}],d=(0,t.computed)(()=>{let e=a.isVideoTemplate?u:l;return a.kind===`files`?e:[...e.map(e=>({...e,label:`${e.label} link`})),{label:`Template link (prefilled editor)`,value:`template-link`}]}),f=(0,t.ref)(a.isVideoTemplate?`mp4`:`png`),p=(0,t.computed)(()=>[{label:`Row number`,value:`__index`},...a.namingBindings.map(e=>({label:e.label,value:e.key}))]),m=(0,t.ref)(`__index`),h=[{label:`Comma (,)`,value:`,`},{label:`Semicolon (;)`,value:`;`}],g=(0,t.ref)(`,`),_=(0,t.ref)(!0),v=(0,t.computed)(()=>a.isVideoTemplate&&f.value!==`template-link`),y=(0,t.computed)(()=>!v.value||a.rowCount<=a.videoBatchMaxSize),b=(0,t.computed)(()=>y.value?``:a.videoBatchMaxSize<=1?`Video batch export is not part of your plan: videos export one row at a time. Select a single row, or use the template link format.`:`Your plan renders up to ${a.videoBatchMaxSize} videos per batch. Select at most ${a.videoBatchMaxSize} rows.`),x=(0,t.computed)(()=>a.rowCount>0&&a.rowCount<=c&&y.value);function S(e,t){let n=di.BillingV3.BILLABLE_USAGE_UNIT_COST_CENTI[e]*t/di.BillingV3.CENTICREDITS_PER_CREDIT;return n>=1?String(Math.round(n*100)/100):n.toFixed(2).replace(/0+$/,``).replace(/\.$/,``)}let C=(0,t.computed)(()=>{let e=a.rowCount,t=`${e} ${e===1?`row`:`rows`}`;return a.kind===`files`?a.consumesCredits?v.value?`${t} · ${S(`batch-video`,e)} credits will be consumed, one per video`:`${t} · ${S(`batch-image`,e)} credits will be consumed`:`${t} · watermarked, so no credits are consumed`:f.value===`template-link`?`${t} · links open the editor prefilled, nothing is rendered now`:_.value?v.value?`${t} · rendering the links now consumes ${S(`video-api`,e)} credits, one per video`:`${t} · rendering the links now consumes about ${S(`image-api`,e)} credits`:`${t} · each link renders (and is metered) when first opened`}),w=(0,t.ref)(`configure`),T=(0,t.ref)({done:0,total:0,failed:0,current:0}),E=(0,t.computed)(()=>T.value.total?Math.min(1,(T.value.done+T.value.failed+T.value.current)/T.value.total):0),D=(0,t.computed)(()=>a.kind===`files`?`Rendering ${v.value?`videos`:`images`}… ${T.value.done} of ${T.value.total}`:`Rendering the links… ${T.value.done} of ${T.value.total}`),O,k=(0,t.ref)(),A=(0,t.ref)(0),j=(0,t.ref)([]),M=(0,t.ref)([]),N=(0,t.computed)(()=>{let e=M.value.map(e=>e.index+1),t=e.slice(0,5),n=e.length-t.length;return e.length===1?`row ${t[0]}`:n>0?`rows ${t.join(`, `)} and ${n} more`:`rows ${t.slice(0,-1).join(`, `)} and ${t[t.length-1]}`}),P=(0,t.ref)(``),F=(0,t.ref)(``);async function I(){if(x.value){O=new AbortController,w.value=`running`,T.value={done:0,total:a.rowCount,failed:0,current:0};try{let e=await a.run({kind:a.kind,format:f.value,naming:m.value===`__index`?{kind:`index`}:{kind:`binding`,key:m.value},delimiter:g.value,prewarm:_.value&&f.value!==`template-link`,signal:O.signal,onProgress:e=>{T.value={done:e.done,total:e.total,failed:e.failed??0,current:e.current??0}}});k.value=e.output,A.value=e.fileCount??0,j.value=e.overBudget??[],M.value=e.failedRows??[],P.value=e.prewarmed?` · ${e.prewarmed.done-e.prewarmed.failed} of ${T.value.total} links rendered${e.prewarmed.failed?`, ${e.prewarmed.failed} failed`:``}`:``,e.cancelled&&(F.value=`Export cancelled.`),o(`done`,e)}catch(e){console.error(`[batch] export failed`,e),F.value=a.kind===`files`?`The export failed: no row rendered, so there is nothing to download. Nothing was charged. Please try again.`:`The export failed. Please try again.`}w.value=`done`}}function L(){O?.abort()}async function ee(){if(k.value){if(a.kind===`csv`){(0,qL.default)(k.value.blob,k.value.fileName,`text/csv`);return}await dz([k.value.blob],k.value.fileName.replace(/\.[a-z0-9]+$/i,``))}}return n({cancelRun:L}),(n,r)=>((0,t.openBlock)(),(0,t.createElementBlock)(`div`,{class:(0,t.normalizeClass)([`bx-batch-export-popup`,{[`phase-`+w.value]:!0}])},[w.value===`configure`?((0,t.openBlock)(),(0,t.createElementBlock)(t.Fragment,{key:0},[(0,t.createElementVNode)(`p`,yz,[e.kind===`files`?((0,t.openBlock)(),(0,t.createElementBlock)(t.Fragment,{key:0},[(0,t.createTextVNode)(` Renders `+(0,t.toDisplayString)(e.rowCount)+` `+(0,t.toDisplayString)(e.rowCount===1?`row`:`rows`)+` on the server and hands you `+(0,t.toDisplayString)(e.rowCount===1?`the file`:`a zip`)+`. `,1)],64)):((0,t.openBlock)(),(0,t.createElementBlock)(t.Fragment,{key:1},[(0,t.createTextVNode)(` Writes the `+(0,t.toDisplayString)(e.rowCount)+` `+(0,t.toDisplayString)(e.rowCount===1?`row`:`rows`)+` to a CSV — one column per field, plus a link to the result of every row. `,1)],64))]),(0,t.createElementVNode)(`div`,bz,[(0,t.createElementVNode)(`span`,{class:`label`,id:s.format},`Format`,8,xz),(0,t.createVNode)(DD,{modelValue:f.value,"onUpdate:modelValue":r[0]||=e=>f.value=e,options:d.value,bordered:``,"aria-labelledby":s.format},null,8,[`modelValue`,`options`,`aria-labelledby`])]),e.kind===`files`?((0,t.openBlock)(),(0,t.createElementBlock)(`div`,Sz,[(0,t.createElementVNode)(`span`,{class:`label`,id:s.naming},`Name files by`,8,Cz),(0,t.createVNode)(DD,{modelValue:m.value,"onUpdate:modelValue":r[1]||=e=>m.value=e,options:p.value,bordered:``,"aria-labelledby":s.naming},null,8,[`modelValue`,`options`,`aria-labelledby`])])):(0,t.createCommentVNode)(``,!0),e.kind===`csv`?((0,t.openBlock)(),(0,t.createElementBlock)(`div`,wz,[(0,t.createElementVNode)(`span`,{class:`label`,id:s.delimiter},`Separator`,8,Tz),(0,t.createVNode)(DD,{modelValue:g.value,"onUpdate:modelValue":r[2]||=e=>g.value=e,options:h,bordered:``,"aria-labelledby":s.delimiter},null,8,[`modelValue`,`aria-labelledby`])])):(0,t.createCommentVNode)(``,!0),e.kind===`csv`&&f.value!==`template-link`?((0,t.openBlock)(),(0,t.createElementBlock)(`div`,Ez,[(0,t.createVNode)(AA,{modelValue:_.value,"onUpdate:modelValue":r[3]||=e=>_.value=e,size:`medium`,disabled:!y.value},null,8,[`modelValue`,`disabled`]),r[6]||=(0,t.createElementVNode)(`span`,{class:`label`},`Render the links now`,-1),r[7]||=(0,t.createElementVNode)(`span`,{class:`hint`},`Otherwise every link renders when it is first opened.`,-1)])):(0,t.createCommentVNode)(``,!0),b.value?((0,t.openBlock)(),(0,t.createBlock)(QL,{key:3,type:`warning`,bordered:!0,"show-icon":!0},{default:(0,t.withCtx)(()=>[(0,t.createTextVNode)((0,t.toDisplayString)(b.value),1)]),_:1})):e.rowCount>(0,t.unref)(c)?((0,t.openBlock)(),(0,t.createBlock)(QL,{key:4,type:`error`,bordered:!0,"show-icon":!0},{default:(0,t.withCtx)(()=>[(0,t.createTextVNode)(` A batch export is limited to `+(0,t.toDisplayString)((0,t.unref)(c))+` rows. Select the rows you want to export. `,1)]),_:1})):(0,t.createCommentVNode)(``,!0),(0,t.createElementVNode)(`div`,Dz,(0,t.toDisplayString)(C.value),1),(0,t.createElementVNode)(`div`,Oz,[(0,t.createVNode)(X,{secondary:``,onClick:r[4]||=e=>o(`cancel`)},{default:(0,t.withCtx)(()=>[...r[8]||=[(0,t.createTextVNode)(`Cancel`,-1)]]),_:1}),(0,t.createVNode)(X,{active:``,disabled:!x.value,onClick:I},{default:(0,t.withCtx)(()=>[(0,t.createTextVNode)((0,t.toDisplayString)(e.kind===`files`?`Export`:`Export CSV`),1)]),_:1},8,[`disabled`])])],64)):w.value===`running`?((0,t.openBlock)(),(0,t.createElementBlock)(t.Fragment,{key:1},[(0,t.createElementVNode)(`p`,kz,(0,t.toDisplayString)(D.value),1),(0,t.createVNode)(TT,{value:E.value},null,8,[`value`]),(0,t.createElementVNode)(`div`,Az,[(0,t.createElementVNode)(`span`,null,(0,t.toDisplayString)(T.value.done)+` / `+(0,t.toDisplayString)(T.value.total)+` `+(0,t.toDisplayString)((e.kind,`rendered`)),1),T.value.failed?((0,t.openBlock)(),(0,t.createElementBlock)(`span`,jz,(0,t.toDisplayString)(T.value.failed)+` failed`,1)):(0,t.createCommentVNode)(``,!0)]),(0,t.createElementVNode)(`div`,Mz,[(0,t.createVNode)(X,{secondary:``,onClick:L},{default:(0,t.withCtx)(()=>[(0,t.createTextVNode)((0,t.toDisplayString)(e.kind===`files`?`Cancel`:`Stop rendering`),1)]),_:1})])],64)):((0,t.openBlock)(),(0,t.createElementBlock)(t.Fragment,{key:2},[(0,t.createElementVNode)(`p`,Nz,[F.value?((0,t.openBlock)(),(0,t.createElementBlock)(t.Fragment,{key:0},[(0,t.createTextVNode)((0,t.toDisplayString)(F.value),1)],64)):e.kind===`files`?((0,t.openBlock)(),(0,t.createElementBlock)(t.Fragment,{key:1},[(0,t.createTextVNode)((0,t.toDisplayString)(A.value)+` `+(0,t.toDisplayString)(A.value===1?`file`:`files`)+` ready.`,1)],64)):((0,t.openBlock)(),(0,t.createElementBlock)(t.Fragment,{key:2},[(0,t.createTextVNode)(`CSV ready`+(0,t.toDisplayString)(P.value)+`.`,1)],64))]),M.value.length?((0,t.openBlock)(),(0,t.createBlock)(QL,{key:0,type:`warning`,bordered:!0,"show-icon":!0},{default:(0,t.withCtx)(()=>[(0,t.createTextVNode)((0,t.toDisplayString)(M.value.length)+` of `+(0,t.toDisplayString)(T.value.total)+` `+(0,t.toDisplayString)(T.value.total===1?`row`:`rows`)+` failed and `+(0,t.toDisplayString)(M.value.length===1?`is`:`are`)+` not in the download (`+(0,t.toDisplayString)(N.value)+`). `,1),e.consumesCredits?((0,t.openBlock)(),(0,t.createElementBlock)(t.Fragment,{key:0},[(0,t.createTextVNode)(`Rows that rendered were charged; failed rows were not.`)],64)):((0,t.openBlock)(),(0,t.createElementBlock)(t.Fragment,{key:1},[(0,t.createTextVNode)(`Nothing was charged.`)],64))]),_:1})):(0,t.createCommentVNode)(``,!0),j.value.length?((0,t.openBlock)(),(0,t.createBlock)(QL,{key:1,type:`warning`,bordered:!0,"show-icon":!0},{default:(0,t.withCtx)(()=>[(0,t.createTextVNode)((0,t.toDisplayString)(j.value.length)+` `+(0,t.toDisplayString)(j.value.length===1?`row exceeds`:`rows exceed`)+` the URL length the render API accepts (rows `+(0,t.toDisplayString)(j.value.join(`, `))+`). Those links may not render — shorten their texts or use the template link format. `,1)]),_:1})):(0,t.createCommentVNode)(``,!0),(0,t.createElementVNode)(`div`,Pz,[(0,t.createVNode)(X,{secondary:``,onClick:r[5]||=e=>o(`cancel`)},{default:(0,t.withCtx)(()=>[...r[9]||=[(0,t.createTextVNode)(`Close`,-1)]]),_:1}),k.value?((0,t.openBlock)(),(0,t.createBlock)(X,{key:0,active:``,onClick:ee},{icon:(0,t.withCtx)(()=>[(0,t.createVNode)(Z,null,{default:(0,t.withCtx)(()=>[(0,t.createVNode)((0,t.unref)(_x))]),_:1})]),default:(0,t.withCtx)(()=>[(0,t.createTextVNode)(` Download `+(0,t.toDisplayString)(e.kind===`files`?A.value===1?`file`:`zip`:`CSV`),1)]),_:1})):(0,t.createCommentVNode)(``,!0)])],64))],2))}}),[[`__scopeId`,`data-v-5c0586a5`]]);function Iz(e){let t=e.toLowerCase();return t===`true`||t===`wahr`||t===`ja`||t===`yes`||t===`1`?{type:`boolean`,value:!0}:t===`false`||t===`falsch`||t===`nein`||t===`no`||t===`0`?{type:`boolean`,value:!1}:null}function Lz(e,t){let n=e.trim();return n===``||n.toLowerCase()===`null`||n.toLowerCase()===`n/a`?{type:`null`,value:null}:Iz(n)||Uz(n)||Hz(n)||Rz(n,t)||Bz(n)||Vz(n)||{type:`string`,value:e}}function Rz(e,t){let n=/^([€$£¥₹])\s*([\d\s.,]+)$/,r=/^([\d\s.,]+)\s*%$/,i=/^([\d\s.,]+)\s*([€$£¥₹])$/,a=e,o,s=!1,c=e.match(n);c&&(o=c[1],a=c[2],s=!0);let l=e.match(i);l&&(a=l[1],o=l[2],s=!0);let u=e.match(r);u&&(a=u[1],o=`%`,s=!0),a=a.replace(/\s/g,``);let d=t;if(t===`auto`&&!s&&(d=zz(a)),s){let e=a.lastIndexOf(`.`),t=a.lastIndexOf(`,`),n=Math.max(e,t);if(n>-1){let e=a.substring(n+1);a=e.length<=2&&e.length>0?a.substring(0,n).replace(/[.,]/g,``)+`.`+e:a.replace(/[.,]/g,``)}}else d===`de`?(/^\d{1,3}(\.\d{3})*(,\d+)?$/.test(a)||a.includes(`,`))&&(a=a.replace(/\./g,``).replace(`,`,`.`)):d===`en`&&(/^\d{1,3}(,\d{3})*(\.\d+)?$/.test(a)||a.includes(`,`)&&a.includes(`.`)||a.includes(`,`)&&!a.includes(`.`))&&(a=a.replace(/,/g,``));let f=parseFloat(a);return isNaN(f)?null:{type:`number`,value:f,unit:o}}function zz(e){let t=e.includes(`.`),n=e.includes(`,`);if(!t&&!n)return`en`;if(t&&!n){let t=e.split(`.`);return t.length===2&&t[1].length<=2?`en`:`de`}if(n&&!t){let t=e.split(`,`);return t.length===2&&t[1].length<=2?`de`:`en`}let r=e.lastIndexOf(`.`);return e.lastIndexOf(`,`)>r?`de`:`en`}function Bz(e){for(let{pattern:t,format:n}of[{pattern:/^\d{4}-\d{2}-\d{2}(T\d{2}:\d{2}:\d{2})?/,format:`ISO`},{pattern:/^(\d{1,2})\.(\d{1,2})\.(\d{2,4})$/,format:`DD.MM.YYYY`},{pattern:/^(\d{1,2})\/(\d{1,2})\/(\d{2,4})$/,format:`MM/DD/YYYY`},{pattern:/^(\d{1,2})\.(\d{1,2})\.(\d{2,4})\s+(\d{1,2}):(\d{2})/,format:`DD.MM.YYYY HH:MM`}])if(t.test(e)){let t=new Date(e);if(n===`DD.MM.YYYY`){let t=e.match(/^(\d{1,2})\.(\d{1,2})\.(\d{2,4})$/);if(t){let[,e,r,i]=t,a=`${i.length===2?`20${i}`:i}-${r.padStart(2,`0`)}-${e.padStart(2,`0`)}`,o=new Date(a);if(!isNaN(o.getTime()))return{type:`date`,value:o,format:n}}}if(!isNaN(t.getTime()))return{type:`date`,value:t,format:n}}return null}function Vz(e){try{return{type:`url`,value:e,protocol:new URL(e).protocol.replace(`:`,``)}}catch{return/^(www\.)?[\w-]+(\.[\w-]+)+/.test(e)?{type:`url`,value:e,protocol:`implicit`}:null}}function Hz(e){try{let t=kE(e),n=`keyword`;n=e.startsWith(`#`)?`hex`:e.startsWith(`rgb(`)?`rgb`:e.startsWith(`rgba(`)?`rgba`:e.startsWith(`hsl(`)?`hsl`:e.startsWith(`hsla(`)?`hsla`:`name`;let r=t.rgb().object(),i=t.hsl().object();return{type:`color`,value:e,rgb:{r:r.r,g:r.g,b:r.b},hex:t.hex(),hsl:{h:i.h,s:i.s,l:i.l},alpha:t.alpha(),format:n}}catch{return null}}function Uz(e){if(e.startsWith(`{`)&&e.endsWith(`}`)||e.startsWith(`[`)&&e.endsWith(`]`))try{let t=JSON.parse(e);if(Array.isArray(t))return{type:`json-array`,value:t};if(typeof t==`object`&&t)return{type:`json-object`,value:t}}catch{}return null}function Wz(e){return e.type===`string`?e.value:e.type===`number`?e.unit?`${e.value} ${e.unit}`:`${e.value}`:e.type===`boolean`?e.value?`true`:`false`:e.type===`date`?e.value.toISOString():e.type===`url`||e.type===`color`?e.value:e.type===`json-object`||e.type===`json-array`?JSON.stringify(e.value):e.type===`null`?`null`:``}function Gz(e,t){return e.map(e=>e.map(e=>Lz(e,t)))}function Kz(e){let t=e.split(/\r?\n/).filter(e=>e.length>0).slice(0,20);if(t.length===0)return`,`;let n=(e,t)=>{let n=0,r=!1;for(let i=0;i<e.length;i++){let a=e[i];if(a===`"`){if(r&&e[i+1]===`"`){i++;continue}r=!r}else a===t&&!r&&n++}return n},r=t.map(e=>n(e,`,`)),i=t.map(e=>n(e,`;`)),a=r.reduce((e,t)=>e+t,0),o=i.reduce((e,t)=>e+t,0);if(a>0&&o===0)return`,`;if(o>0&&a===0)return`;`;if(a===0&&o===0)return`,`;let s=e=>{let t=e.reduce((e,t)=>e+t,0)/e.length;return e.reduce((e,n)=>e+(n-t)**2,0)/e.length},c=s(r),l=s(i);return c===l?a>=o?`,`:`;`:c<l?`,`:`;`}function qz(e,t=`,`){let n=[],r=[],i=``,a=!1,o=0,s=e.length;for(;o<s;){let s=e[o];if(a){if(s===`"`){if(e[o+1]===`"`){i+=`"`,o+=2;continue}a=!1,o++;continue}i+=s,o++;continue}if(s===`"`){a=!0,o++;continue}if(s===t){r.push(i),i=``,o++;continue}if(s===`\r`||s===`
220
220
  `){r.push(i),n.push(r),i=``,r=[],s===`\r`&&e[o+1]===`
221
221
  `?o+=2:o++;continue}i+=s,o++}return(i.length>0||r.length>0||a)&&(r.push(i),n.push(r)),n}function Jz(e,t,n=`auto`){let r=qz(e,n===`auto`?Kz(e):n),i=[];for(let e=0;e<Math.max(...r.map(e=>e.length));e++)r.every(t=>t[e]===void 0||t[e].trim()===``)&&i.push(e);return Gz(r.map(e=>e.filter((e,t)=>!i.includes(t))),t)}var Yz=80;function Xz(e){return String(e??``).normalize(`NFKD`).replace(/[̀-ͯ]/g,``).replace(/[^a-zA-Z0-9 _.-]+/g,` `).trim().replace(/\s+/g,`-`).replace(/^[.-]+|[.-]+$/g,``).slice(0,Yz)}function Zz(e,t,n){let r=String(e.length).length,i=new Map;return e.map((e,a)=>{let o=t.kind===`binding`?Xz(Qz(e.data[t.key])):``;o||=`${Xz(n)||`file`}-${String(a+1).padStart(Math.max(r,2),`0`)}`;let s=i.get(o)??0;return i.set(o,s+1),s===0?o:`${o}_${s+1}`})}function Qz(e){return e&&typeof e==`object`&&`src`in e?e.src:e}async function $z(e){let{unzip:t}=await Promise.resolve().then(()=>require("./unzipit.module-DLgVBmhU.cjs")),n=await t(e),r=[];for(let[e,t]of Object.entries(n.entries))r.push(await t.blob(sR.getType(e)||`image/png`));return r}async function eB(e,t,n,r,i=()=>{}){let a=t in nz,o=Ti(a?1:4),s=Zz(e,n,r.name),c=Array(e.length),l=[],u=0,d=!1,f=(t,n)=>i({done:u,total:e.length,current:n,currentIndex:t,failed:l.length}),{serial:p}=r,m=p.frames?.x??1,h=p.frames?.y??1,g=r.remoteOptions;async function _(e,n){let i;if(a){let a=await iz(r.campaignId,r.templateId,e.data,t,g,e=>{let t=e;if(t.totalFrames){let e=((t.processedFrames??0)+(t.encodedFrames??0))/(2*t.totalFrames);f(n+1,Math.max(0,Math.min(.99,e)))}},r.canvasId);i=await Promise.all(a.files.map(e=>fetch(e).then(e=>e.blob())))}else{let n=await rz(r.campaignId,r.templateId,e.data,p.width,p.height,m,h,t,g,r.canvasId);i=n.type===`application/zip`?await $z(n):[n]}if(d||r.signal?.aborted){d=!0;return}await r.consumeOutput(e.data,a?`video`:`image`),c[n]=i.map((e,r)=>({name:`${s[n]}${i.length>1?`-${r+1}`:``}.${sR.getExtension(e.type)||t}`,blob:e})),u++,f(n+1,1)}await Promise.all(e.map((e,t)=>o(async()=>{if(d||r.signal?.aborted){d=!0;return}f(t+1,0);try{await _(e,t)}catch(e){console.error(`[batch] row ${t+1} failed`,e),l.push({index:t,message:tB(e)}),f(t+1,1)}})));let v=c.filter(Boolean).flat();if(l.sort((e,t)=>e.index-t.index),v.length===0&&l.length>0)throw Error(`All ${l.length} batch rows failed to render (row ${l[0].index+1}: ${l[0].message})`);return{files:v,output:await nB(v,Xz(r.name)||`batch`),cancelled:d,failedRows:l}}function tB(e){return e instanceof Error?e.message||e.name:typeof e==`string`?e:String(e)}async function nB(e,t){if(e.length===1)return{blob:e[0].blob,fileName:e[0].name};let{downloadZip:n}=await Promise.resolve().then(()=>require("./client-zip-Dl4jBUKQ.cjs"));return{blob:await n(e.map(e=>({name:e.name,input:e.blob}))).blob(),fileName:`${t}.zip`}}var rB=`bluepic_result`;function iB(e,t){return/[",\r\n;]/.test(e)||e.includes(t)?`"${e.replace(/"/g,`""`)}"`:e}function aB(e){return e==null?``:typeof e==`object`?`src`in e&&typeof e.src==`string`?e.src:JSON.stringify(e):String(e)}function oB(e){if(e!=null){if(typeof e==`string`)return e;if(typeof e==`number`||typeof e==`boolean`)return String(e);if(typeof e==`object`&&`src`in e){let t=e.src;return typeof t==`string`?t:void 0}return JSON.stringify(e)}}function sB(e,t){let n=e.templateAlias?.trim();return`/${(n?n.includes(`/`)?n:e.orgSlug?`${e.orgSlug}/${n}`:null:null)??e.templateId}${e.canvasId?`/${encodeURIComponent(e.canvasId)}`:``}.${t}`}function cB(e,t,n){if(n.format===`template-link`){let t=encodeURIComponent(JSON.stringify(e.data));return{url:`${n.templateLinkBaseUrl}?data=${t}`,overBudget:!1}}let r=new URLSearchParams,i=new Set;for(let e of t)for(let t of AL(e.field))i.add(t);for(let t of i){let n=e.data[t],i=oB(n);i===void 0||di.Studio.isReservedQueryKey(t)||r.set(di.Studio.queryKeyForBinding(t,n),i)}let a=r.toString(),o=n.format===`jpeg`?`jpg`:n.format;return{url:`${n.urlRenderBaseUrl.replace(/\/+$/,``)}${sB(n,o)}${a?`?${a}`:``}`,overBudget:di.Studio.queryStringByteLength(a)>di.Studio.MAX_QUERY_STRING_BYTES}}function lB(e,t,n){let r=n.delimiter??`,`,i=[];for(let e of t)for(let t of AL(e.field))i.includes(t)||i.push(t);let a=[...i,rB],o=[],s=[],c=[a.map(e=>iB(e,r)).join(r)];return e.forEach((e,a)=>{let l=cB(e,t,n);o.push(l.url),l.overBudget&&s.push(a+1);let u=i.map(t=>iB(aB(e.data[t]),r));u.push(iB(l.url,r)),c.push(u.join(r))}),{csv:``+c.join(`\r
222
222
  `)+`\r
package/dist/main.mjs CHANGED
@@ -64454,8 +64454,8 @@ function uB(e, t, n, r, i, a, o, s, c, u, d, f, p, m, h, g, _, v = R(void 0), y
64454
64454
  campaignId: o.value ?? -1,
64455
64455
  data: t.value,
64456
64456
  caption: v.value ?? e.value?.caption
64457
- });
64458
- if (g.length === 0) {
64457
+ }), O = E.value && l === "image" && !!x.value;
64458
+ if (g.length === 0 && !O) {
64459
64459
  if (f.download && !f.webhook && !f.redirect) {
64460
64460
  await hB(a, _), await d(), u.download({
64461
64461
  trigger: "auto",
@@ -64481,10 +64481,10 @@ function uB(e, t, n, r, i, a, o, s, c, u, d, f, p, m, h, g, _, v = R(void 0), y
64481
64481
  assets: await Promise.all(N.value)
64482
64482
  });
64483
64483
  }
64484
- let O;
64485
- if (E.value && l === "image" && x.value) {
64484
+ let A;
64485
+ if (O && x.value) {
64486
64486
  let n = nD(t.value), i = k.value, l = e.value?.format ?? "png", f = D.value, p = /* @__PURE__ */ new Map();
64487
- S.value?.activate(), O = nB({
64487
+ S.value?.activate(), A = nB({
64488
64488
  canvases: x.value,
64489
64489
  primaryCanvasId: y.id,
64490
64490
  primaryFiles: a,
@@ -64535,7 +64535,7 @@ function uB(e, t, n, r, i, a, o, s, c, u, d, f, p, m, h, g, _, v = R(void 0), y
64535
64535
  y: 1
64536
64536
  }
64537
64537
  },
64538
- multiCanvas: O,
64538
+ multiCanvas: A,
64539
64539
  snapshots: S.value?.snapshots,
64540
64540
  snapshotFailed: S.value?.snapshotFailed,
64541
64541
  demandSnapshots: S.value?.demand
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@bluepic/embed",
3
- "version": "0.6.17",
3
+ "version": "0.6.18",
4
4
  "description": "Bluepic embed sdk",
5
5
  "type": "module",
6
6
  "sideEffects": false,