videobook 0.3.0 → 0.3.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (61) hide show
  1. package/CHANGELOG.md +135 -0
  2. package/dist/asset-media-projection.js +161 -0
  3. package/dist/command-reference.js +3 -1
  4. package/dist/diagnostics.js +10 -4
  5. package/dist/generation-reference-mentions.js +19 -0
  6. package/dist/goal-plan-v3.js +21 -6
  7. package/dist/goal-plan.js +1 -1
  8. package/dist/goal-store.js +2 -2
  9. package/dist/har-capture.js +36 -3
  10. package/dist/jobs/_image-edit-adapter.js +2 -0
  11. package/dist/jobs/_kie-upload.js +3 -1
  12. package/dist/jobs/assess-media-probes.js +94 -0
  13. package/dist/jobs/complete-provider-task.js +2 -5
  14. package/dist/jobs/generate-media.js +22 -12
  15. package/dist/jobs/image-subjects.js +2 -0
  16. package/dist/jobs/kie-paygate.js +3 -3
  17. package/dist/jobs/register-all.js +2 -0
  18. package/dist/jobs/run-notebook.js +16 -1
  19. package/dist/library-asset-projection.js +141 -0
  20. package/dist/lightning-defaults.js +4 -4
  21. package/dist/media/catalog.js +12 -6
  22. package/dist/media/descriptor.js +16 -7
  23. package/dist/media/frontier-gaps.js +0 -1
  24. package/dist/media/har-endpoint.js +25 -0
  25. package/dist/media/json-schema.js +3 -0
  26. package/dist/media/listing.js +26 -4
  27. package/dist/media/preferred-defaults.js +161 -0
  28. package/dist/media/prompt-dialects.js +9 -1
  29. package/dist/media-library.js +158 -153
  30. package/dist/notebook-sticky-settings.js +60 -0
  31. package/dist/provider-usage.js +24 -9
  32. package/dist/tools/estimate-cost.js +9 -4
  33. package/dist/tools/reconcile-project-work.js +37 -184
  34. package/dist/tools/videobook-domain.js +16 -1
  35. package/dist/usage-providers.js +3 -3
  36. package/package.json +15 -15
  37. package/ui/assets/{alive-captions-Cj8C1tCN.js → alive-captions-BWk_4aX0.js} +1 -1
  38. package/ui/assets/confirm-bodies-CNW9vLsi.js +1 -0
  39. package/ui/assets/{fullscreen-DyEncSdm.js → fullscreen-ND_H86Ih.js} +1 -1
  40. package/ui/assets/{goal-ui-BdFeoSWh.js → goal-ui-CCTD4lxi.js} +1 -1
  41. package/ui/assets/index-CTPstLYq.css +1 -0
  42. package/ui/assets/index-D0ftggO4.js +37 -0
  43. package/ui/assets/inspector-BZnbKsEZ.js +1 -0
  44. package/ui/assets/{jobs-ui-BudI4w0r.js → jobs-ui-BNK0IPSl.js} +1 -1
  45. package/ui/assets/{music-video-CT4C55ok.js → music-video-CoOI0cgW.js} +1 -1
  46. package/ui/assets/{ui-mq0uIS5P.css → ui-BBM3YCY6.css} +1 -1
  47. package/ui/assets/ui-koLWlu0t.js +2 -0
  48. package/ui/assets/vendor-Ca2-b3hB.js +19 -0
  49. package/ui/assets/{vendor-flow-nqTFQmTh.js → vendor-flow-C2NYBYCL.js} +1 -1
  50. package/ui/assets/vendor-icons-D3KrGMJY.js +1 -0
  51. package/ui/assets/{vendor-mcp-D_C3EZPv.js → vendor-mcp-9gUvOX4H.js} +2 -2
  52. package/ui/assets/videobook-B8dYNQrG.js +21 -0
  53. package/ui/index.html +14 -14
  54. package/ui/assets/confirm-bodies-BxWXwDf0.js +0 -1
  55. package/ui/assets/index-DWfR79lA.css +0 -1
  56. package/ui/assets/index-QZ8lbemN.js +0 -37
  57. package/ui/assets/inspector-BC6xWkJU.js +0 -1
  58. package/ui/assets/ui-z5r-p0K9.js +0 -2
  59. package/ui/assets/vendor-D8XcMav4.js +0 -19
  60. package/ui/assets/vendor-icons-CGqhCIXV.js +0 -1
  61. package/ui/assets/videobook-CsW453sb.js +0 -21
@@ -1,21 +0,0 @@
1
- import{c as ne,a as _,j as Ke}from"./vendor-react-Dj7D1fD4.js";import{n as St,a as Ks,t as Ut,T as Qo,b as ue,N as de,d as X,e as sn,f as ke,S as zs,i as ei,g as Xs,s as ar,h as Ys,j as Xe,k as Dn,l as Js,m as Ee,o as Zs,p as Lr,q as Vn,r as Qs,u as ti,M as ea,v as ni,w as Fe,x as ri,y as Bt,z as ta,A as na,B as oi,C as zt,D as ra}from"./vendor-D8XcMav4.js";import{o as te,n as V,a as ae,s as j,_ as Ze,l as ii,b as Te,C as oa,S as ia}from"./vendor-mcp-D_C3EZPv.js";import{l as sa,u as aa,a as ca}from"./vendor-remotion-CH1HXrlc.js";const ey=["x","instagram","tiktok","youtube","other"],ty=["views","impressions","likes","replies","reposts","quotes","bookmarks","shares","clicks"];function la(e){return e.toLowerCase().replace(/[^a-z0-9]+/gu,"-").replace(/^-+|-+$/gu,"")||"book"}function si(e,t,n){return`${la(e)}/post-${t.replace(/^@/u,"")}-${n.slice(-6)}`}function ua(e){const t=e.trim().replace(/\/+$/u,"");return t?t.startsWith("/")||t.startsWith("~")?"Use a folder inside iCloud Drive › Videobook, like my-book/post-a1.":[...t].some(n=>n.charCodeAt(0)<32||n.charCodeAt(0)===127)?"Use an iCloud folder without control characters.":t.split("/").some(n=>n===".."||n==="."||n==="")?"Use an iCloud folder without empty, . or .. segments.":null:"Choose an iCloud folder."}const da="16:9",fa="2K",ma="jpg",ny=25,pa="16:9",ga="1080p",ha=13,ba="mp4",ya=!0,ry=60,_a={resolution:ga,aspect_ratio:pa,duration:ha,output_format:ba,generate_audio:ya},va={aspect_ratio:da,resolution:fa,output_format:ma},ka=3,wa=2.3,Sa=.3,Ia="th",xa=["fyp","bkk"],Aa={profileUrl:"https://www.tiktok.com/@jtbkk",includePlatformIcon:!0,includeHandleBorder:!0,handlePaddingX:15,handlePaddingY:12,handleRounding:56,handlePlacement:"center",handleVerticalPercent:10,handleStartSeconds:0,handleEndSeconds:ka,handleOpacity:.28,qrLeadSeconds:wa,qrOpacity:.37,fadeSeconds:Sa};function Ea(e,t){const n=Number.isFinite(t)?Math.max(0,t):0,r=Math.min(n,Math.max(0,e.handleStartSeconds)),o=Math.min(n,Math.max(r,e.handleEndSeconds)),i=n,s=e.qrLeadSeconds,a=Math.max(0,n-Math.min(n,Math.max(0,s)));return{handleStartSeconds:r,handleEndSeconds:o,qrStartSeconds:a,qrEndSeconds:i}}const oy=["en","th"],Ca={en:"English",th:"Thai"},Ma={x:280,instagram:2200,tiktok:2200,youtube:5e3,other:2200},ai={x:2,instagram:10,tiktok:5,youtube:15,other:8},cr={x:"X",instagram:"Instagram",tiktok:"TikTok",youtube:"YouTube Shorts",other:"Other"},Ta=/^#[\p{L}\p{M}\p{N}_]+$/u;function Ra(e){return e.trim().replace(/^#+/u,"").replace(/[^\p{L}\p{M}\p{N}_]/gu,"")}function an(e,t=Number.POSITIVE_INFINITY){const n=new Set,r=[];for(const o of e){const i=Ra(o),s=i.toLocaleLowerCase();if(!(!i||n.has(s))&&(n.add(s),r.push(i),r.length>=t))break}return r}function $a(e){const t=e.trim().split(/\s+/u);return t.length>0&&t.every(n=>Ta.test(n))}function Na(e){const n=e.trimEnd().split(`
2
- `),r=n[n.length-1]??"";return!r.trim()||!$a(r)?{body:e,tags:[]}:{body:n.slice(0,-1).join(`
3
- `).trimEnd(),tags:an(r.trim().split(/\s+/u))}}function Pa(e,t){const n=an(t).map(o=>`#${o}`).join(" "),r=e.trimEnd();return n?r?`${r}
4
-
5
- ${n}`:n:r}const iy=[{id:"x",label:"X"},{id:"tiktok",label:"TikTok"},{id:"instagram",label:"Instagram"},{id:"youtube",label:"YT Shorts"},{id:"other",label:"Other"}],sy=["Longer caption","Punchier","More emoji","Fewer tags","Add a call to action"],Oa=/[฀-๿]/u;function La(e){return Oa.test(e)?"th":"en"}function ay(e){const t=e.definition.caption,n=e.definition.platform==="tiktok"&&!t.trim(),r=n?Ia:La(t),o=Na(t),i=t.trim()?{[r]:{versions:[{body:o.body,tags:o.tags,origin:"saved",instruction:null}],index:0}}:n?{th:{versions:[{body:"",tags:[...xa],origin:"auto",instruction:null}],index:0}}:{};return{language:r,platform:e.definition.platform,tracks:i,prompt:"",drafting:null,error:null}}function tt(e){const t=e.tracks[e.language];return t?.versions[t.index]??null}function Xt(e){const t=tt(e);return t?Pa(t.body,t.tags):""}function Fa(e,t){const n=e.tracks[e.language],r=n?{...n,versions:n.versions.map((o,i)=>i===n.index?t:o)}:{versions:[t],index:0};return{...e,tracks:{...e.tracks,[e.language]:r}}}function ci(e,t){const n=tt(e)??{body:"",tags:[],origin:"edited",instruction:null};return Fa(e,{...n,...t,origin:"edited"})}function cy(e,t){const n=tt(e)?.tags??[],r=an([...n,...t.split(/[\s,]+/u)]);return r.length===n.length?e:ci(e,{tags:r})}function ly(e,t){const n=tt(e)?.tags??[];return ci(e,{tags:n.filter(r=>r!==t)})}function uy(e,t,n,r){const o=e.tracks[t]??{versions:[]},i={body:n.caption,tags:n.tags,origin:r?"astra":"auto",instruction:r},s=[...o.versions,i];return{...e,language:t,tracks:{...e.tracks,[t]:{versions:s,index:s.length-1}},drafting:null,error:null}}function dy(e,t){const n=e.tracks[e.language];if(!n)return e;const r=Math.min(n.versions.length-1,Math.max(0,n.index+t));return{...e,tracks:{...e.tracks,[e.language]:{...n,index:r}}}}function fy(e,t,n){const r=e.tracks[t],o=r?.versions[r.index]?.body.trim()??"";return!n&&!e.drafting&&o.length===0}function my(e,t,n,r,o){const i=n.tracks[r],s=i?.versions[i.index];return{book_id:e,post_cell_id:t,language:r,platform:n.platform,...o?{instruction:o}:{},...o&&s?{caption:s.body,tags:s.tags}:{}}}function py(e){const t=e&&typeof e=="object"&&!Array.isArray(e)?e:{},n=typeof t.caption=="string"?t.caption.trim():"";if(!n)throw new Error("Astra returned an empty caption.");const r=Array.isArray(t.tags)?t.tags.filter(o=>typeof o=="string"):[];return{caption:n,tags:an(r)}}function gy(e){const t=tt(e),n=Ca[e.language];return t?t.origin==="saved"?"Saved caption":t.origin==="edited"?"Edited by you · Regen keeps this version in history":t.origin==="astra"?`Rewritten by Astra · “${t.instruction??""}”`:t.body.trim()?`Drafted by Astra from the video analysis · ${n}`:`No ${n} caption yet`:`No ${n} caption yet`}function Da(e){const t=Xt(e).length,n=Ma[e.platform],r=tt(e)?.tags.length??0;return{length:t,limit:n,over:t>n,tooManyTags:r>ai[e.platform]}}function Va(e){const t=Da(e),n=cr[e.platform];return t.over?`Over ${n}'s ${t.limit.toLocaleString()}-character limit. Shorten it or regen with Astra.`:t.tooManyTags?`${n} works best with ${ai[e.platform]} tags or fewer.`:null}const ja=new Set(["posting","needs_reconciliation","scheduled"]),Fr=25e3,Ga="iCloud Drive isn't available on this Mac.";function qa(e,t,n){const r=n.replace(/^@/u,"").toLowerCase();return e.id.toLowerCase()===r||e.address.replace(/^@/u,"").toLowerCase()===r?!0:[t.find(s=>s.id===e.id)?.outputArtifactId,e.definition.source?.snapshotArtifactId,e.runtime.outbound?.artifactId].some(s=>s?.toLowerCase()===r)}function hy(e,t,n,r){const o=n?.trim();return o?e.find(i=>qa(i,t,o))??null:e.find(i=>i.id===r)??null}const Ua=new Set(["image","video","generate_image","generate_video","concat","splice","split_video"]);function by(e,t){const n=t.trim().replace(/^@/u,"").toLowerCase();return e.find(r=>r.type!=="post"&&!!r.outputArtifactId&&Ua.has(r.type)&&[r.id,r.outputArtifactId,St(r.slot)].some(o=>o?.toLowerCase()===n))??null}function yy(e,t){return e.filter(n=>n.definition.source?.cellId===t).reduce((n,r)=>!n||r.definition.createdAt>n.definition.createdAt?r:n,null)}function _y(e,t){return e.runtime.icloud?.folder??si(t,e.address,e.id)}function vy(e,t){return e.runtime.dropbox?.folder?e.runtime.dropbox.folder:`/Videobook/${si(t,e.address,e.id)}`}function Ba(e,t){return e==="dropbox"||t&&!t.available?"dropbox":"icloud"}function ky(e,t){return{...e,icloud:t,destination:e.pinnedDestination?e.destination:Ba(e.entry,t)}}function cn(e){return!!e.runtime.outbound}function Ha(e){const t=e.trim();return t?t.startsWith("/")?t.split("/").includes("..")||[...t].some(n=>n.charCodeAt(0)<32)?"Use a Dropbox folder without .. segments or control characters.":null:"Start the Dropbox folder with /, like /Videobook/clips.":"Choose a Dropbox folder."}function Wa(e,t){return t?"Finish connecting Dropbox in the other tab.":e?e.connected?null:e.hasCredentials?"Connect Dropbox to upload.":"Dropbox delivery is not configured. Set DROPBOX_CLIENT_ID on the server.":"Checking the Dropbox connection…"}function Ka(e,t){return e?e.definition.source?.snapshotArtifactId?ja.has(e.runtime.status)?`Resolve or cancel ${e.address}'s current publication first.`:t.length>Fr?`Shorten the caption to ${Fr.toLocaleString()} characters.`:null:`${e.address} has no saved source clip. Choose one in the Post panel.`:"This Post is no longer on the canvas."}function wy(e){return e?.available?e.shared===!0?"Shared with your iPhones":e.shared===!1?"Share iCloud Drive › Videobook with your phones first":null:null}function za(e,t){return!e||cn(e)?null:t.copy.drafting?"Astra is writing the caption…":null}function Dr(e,t){return e&&!cn(e)?Va(t.copy):null}function Sy(e,t){const n=Ka(e,Xt(t.copy))??za(e,t);if(t.destination==="dropbox"){const i=n??Ha(t.dropboxFolder)??Wa(t.connection,t.connecting),s=e?.runtime.dropbox&&!e.runtime.dropbox.completedAt&&e.runtime.dropbox.folder===t.dropboxFolder.trim()?"A previous upload to this folder stopped early. Uploading resumes where it left off.":Dr(e,t);return{blocking:i,notice:i?null:s}}const r=t.icloud?t.icloud.available?null:t.icloud.reason??Ga:"Checking iCloud Drive…",o=n??r??ua(t.icloudFolder);return{blocking:o,notice:o?null:Dr(e,t)}}function Iy(e,t){const n=(t.destination==="icloud"?t.icloudFolder:t.dropboxFolder).trim().replace(/\/+$/u,"");return{book_id:t.bookId,post_cell_id:e.id,folder:n,...!cn(e)&&Xt(t.copy)!==e.definition.caption?{caption:Xt(t.copy)}:{}}}function xy(e,t){return cn(e)||t.copy.platform===e.definition.platform?null:{book_id:t.bookId,post_cell_id:e.id,platform:t.copy.platform}}function Ay(e){return e==="icloud"?"save_post_to_icloud":"upload_post_to_dropbox"}function Xa(e){const t=[];return e.runtime.icloud?.completedAt&&t.push("iPhone"),e.runtime.dropbox?.completedAt&&t.push("Dropbox"),t}function li(e){return!e.runtime.url&&Xa(e).length>0}function Ey(e){const t=e.definition.platform;return t==="other"?"Posted it? Paste the link":`Posted on ${cr[t]}? Paste the link`}function Ya(e){return cr[e.definition.platform]}function Cy(e){return li(e)?"needs_link":e.runtime.status}function My(e){return e.runtime.postedAt||e.runtime.url?null:li(e)?e.definition.platform==="other"?"Paste the published link":`Paste ${Ya(e)} link`:"Save to iPhone next"}function Ty(e){return e.runtime.postedAt?new Date(e.runtime.postedAt).toLocaleDateString(void 0,{month:"short",day:"numeric"}):null}function Ry(e){const t=e.runtime.metrics.at(-1)?.values;return t?[t.views!=null?"views":"impressions","likes"].filter(r=>t[r]!=null).map(r=>({label:r,value:Ja(t[r])})):[]}function Ja(e){return new Intl.NumberFormat(void 0,{notation:"compact",maximumFractionDigits:1}).format(e)}function $y(e){return`On iPhone · iCloud Drive › Videobook › ${e}`}function Ny(e,t){if(t==="icloud"){const r=e.runtime.icloud?.folder;return r?`Saved ${e.address} to iCloud · Videobook/${r}`:`Saved ${e.address} to iCloud`}const n=e.runtime.dropbox?.folder;return n?`Uploaded ${e.address} to Dropbox · ${n}`:`Uploaded ${e.address} to Dropbox`}function Py(e,t){return e==="uploading"?"Uploading to iCloud…":e==="uploaded"?"On iCloud":e==="error"?t?.trim()||"iCloud upload failed":null}function Za(e){return e===null||e==="uploading"}function Qa(e){const t=e&&typeof e=="object"&&!Array.isArray(e)?e:{},n=t.phase;return{phase:n==="uploaded"||n==="uploading"||n==="error"||n==="not-icloud"?n:"not-icloud",error:typeof t.error=="string"&&t.error?t.error:null}}function lr(e){return e&&typeof e=="object"&&!Array.isArray(e)?e:{}}async function Vr(e){const t=lr(await e("service_status",{service:"dropbox"}));return{connected:t.connected===!0,pending:t.pending===!0,hasCredentials:t.has_credentials!==!1,error:typeof t.error=="string"&&t.error?t.error:null}}async function Oy(e){const t=lr(await e("service_status",{service:"icloud"})),n=t.role==="owner"||t.role==="participant"?t.role:null;return{available:t.available===!0,root:typeof t.root=="string"?t.root:"",shared:typeof t.shared=="boolean"?t.shared:null,role:n,reason:typeof t.reason=="string"&&t.reason?t.reason:null}}async function Ly(e){const t=lr(await e("connect_service",{service:"dropbox"}));if(typeof t.authorize_url!="string")throw new Error("Dropbox did not return an authorization link.");return t.authorize_url}async function Fy(e,t,n){let r=await Vr(e);for(let o=0;o<90&&r.pending&&!r.connected&&n();o+=1)await t(2e3),r=await Vr(e);return r}const ec=3e3,tc=12e4;function Dy(e,t,n,r,o){const i=ne.c(9),s=_.useRef(o);let a,c;i[0]!==o?(a=()=>{s.current=o},c=[o],i[0]=o,i[1]=a,i[2]=c):(a=i[1],c=i[2]),_.useEffect(a,c);let l,u;i[3]!==n||i[4]!==t||i[5]!==e||i[6]!==r?(l=()=>{if(!e||!t||!n||!r)return;let m=!1;const f=Date.now()+tc,d=async()=>{if(!(m||Date.now()>f))try{const g=Qa(await t("post_icloud_sync_status",{book_id:n,post_cell_id:r},{background:!0}));if(m)return;s.current(g),Za(g.phase)||(m=!0)}catch(g){const y=g;if(m)return;m=!0,s.current({phase:"error",error:y instanceof Error?y.message:"iCloud upload failed"})}};d();const p=window.setInterval(()=>{if(m||Date.now()>f){window.clearInterval(p);return}d()},ec);return()=>{m=!0,window.clearInterval(p)}},u=[e,t,n,r],i[3]=n,i[4]=t,i[5]=e,i[6]=r,i[7]=l,i[8]=u):(l=i[7],u=i[8]),_.useEffect(l,u)}function Vy(e,t,n){const[r,o]=_.useState(!1),[i,s]=_.useState(null);return{busy:r,error:i,run:async(c,l={})=>{if(!e||r)return!1;o(!0),s(null);try{return await e(c,{book_id:t,...l}),await n(),!0}catch(u){return s(u instanceof Error?u.message:String(u)),!1}finally{o(!1)}}}}const It=280,jr=25,jn=4,nc=5e3,rc=3600*1e3,Gr=300*1e3;function oc(e){return Array.isArray(e)?e.flatMap(t=>{if(!t||typeof t!="object"||Array.isArray(t))return[];const n=t,r=n.image_asset_ids,o=Array.isArray(r),i=o?r.filter(c=>typeof c=="string"):[],s=typeof n.text=="string",a=s?n.text:"";return s||o?[{text:a,imageAssetIds:i}]:[]}):[]}function jy(e){const t=Object.hasOwn(e,"scheduled_for")?typeof e.scheduled_for=="string"?e.scheduled_for:"":null,n=e.orientation==="portrait"||e.orientation==="landscape"?e.orientation:null;return{postText:typeof e.text=="string"?e.text:"",scheduledFor:t,orientation:n,followups:oc(e.followups)}}function Gy(e,t){const n={...e};return t.postText!==void 0&&(t.postText?n.text=t.postText:delete n.text),t.scheduledFor!==void 0&&(t.scheduledFor===null?delete n.scheduled_for:n.scheduled_for=t.scheduledFor),t.orientation!==void 0&&(t.orientation===null?delete n.orientation:n.orientation=t.orientation),n}function qy(e,t){const n={...e};return t.length===0?(delete n.followups,n):(n.followups=t.map(r=>({text:r.text,...r.imageAssetIds.length>0?{image_asset_ids:r.imageAssetIds}:{}})),n)}const ic="Add a title for the post.";function sc(e,t=Date.now(),n=It){if(e.postText.trim()==="")return ic;if(e.postText.length>n){const o=e.postText.length-n;return`Title is ${o} character${o===1?"":"s"} too long.`}if(e.followups.length>jr)return`Thread has ${e.followups.length} replies; X posts support at most ${jr} here.`;for(const[o,i]of e.followups.entries()){if(!i.text&&i.imageAssetIds.length===0)return`Follow-up ${o+1} needs text or an image.`;if(i.text.length>n){const s=i.text.length-n;return`Follow-up ${o+1} is ${s} character${s===1?"":"s"} too long.`}if(i.imageAssetIds.length>jn)return`Follow-up ${o+1} has more than ${jn} images.`}if(e.scheduledFor===null)return null;const r=Date.parse(e.scheduledFor);return!e.scheduledFor||Number.isNaN(r)?"Choose a valid date and time.":r-t<=nc?"Scheduled time must be in the future.":null}function Uy(e){const t=new Date(e);if(Number.isNaN(t.getTime()))return"";const n=r=>r.toString().padStart(2,"0");return`${t.getFullYear()}-${n(t.getMonth()+1)}-${n(t.getDate())}T${n(t.getHours())}:${n(t.getMinutes())}`}function By(e){if(!e)return"";const t=new Date(e);return Number.isNaN(t.getTime())?"":t.toISOString()}function Hy(e=Date.now()){const t=e+rc,n=Math.ceil(t/Gr)*Gr;return new Date(n).toISOString()}function ac(e){return e==="fal:minimax/h3-max/insert-video"||e==="minimax/h3-max/insert-video"}function cc(e,t){const n=typeof e.start_time=="string"&&e.start_time.trim()?Number(e.start_time):e.start_time,r=typeof e.resume_time=="string"&&e.resume_time.trim()?Number(e.resume_time):e.resume_time;if(typeof n!="number"||typeof r!="number"||!Number.isFinite(n)||!Number.isFinite(r))return null;if(t!=null&&t>0){const o=Number(t.toFixed(3));if(n>=t)return`Replace from must be before the source video ends at ${o}s (currently ${n}s).`;if(r>t)return`Resume original must be within the ${o}s source video (currently ${r}s).`}return r<=n?"Resume original must be after Replace from. Both times refer to the original video.":null}function lc(e){return e.find(t=>t.targetInput==="video")??e.find(t=>t.type==="video"||t.type==="final")}function Wy(e,t,n){if(!ac(e))return null;const r=lc(n);if(!r)return"Connect the original video to choose the section to replace.";const o=r.asset?.duration;return!o||!Number.isFinite(o)?"The original video duration is unavailable. Wait for the source to finish processing.":cc(t,o)}const uc=["x","tiktok"],Ky={x:"X",tiktok:"TikTok"},zy={x:"M18.901 1.153h3.68l-8.04 9.19L24 22.846h-7.406l-5.8-7.584-6.638 7.584H.474l8.6-9.83L0 1.154h7.594l5.243 6.932ZM17.61 20.644h2.039L6.486 3.24H4.298Z",tiktok:"M12.525.02c1.31-.02 2.61-.01 3.91-.02.08 1.53.63 3.09 1.75 4.17 1.12 1.11 2.7 1.62 4.24 1.79v4.03c-1.44-.05-2.89-.35-4.2-.97-.57-.26-1.1-.59-1.62-.93-.01 2.92.01 5.84-.02 8.75-.08 1.4-.54 2.79-1.35 3.94-1.31 1.92-3.58 3.17-5.91 3.21-1.43.08-2.86-.31-4.08-1.03-2.02-1.19-3.44-3.37-3.65-5.71-.02-.5-.03-1-.01-1.49.18-1.9 1.12-3.72 2.58-4.96 1.66-1.44 3.98-2.13 6.15-1.72.02 1.48-.04 2.96-.04 4.44-.99-.32-2.15-.23-3.02.37-.63.41-1.11 1.04-1.36 1.75-.21.51-.15 1.07-.14 1.61.24 1.64 1.82 3.02 3.5 2.87 1.12-.01 2.19-.66 2.77-1.61.19-.33.4-.67.41-1.06.1-1.79.06-3.57.07-5.36.01-4.03-.01-8.05.02-12.07z"};function Xy(e,t="x"){return t==="tiktok"?`https://www.tiktok.com/@${e}`:`https://x.com/${e}`}function dc(e){return e==="x"||e==="tiktok"}function ui(e,t,n){return![e,t,n].every(Number.isFinite)||n<.5?"Choose a playable video at least 0.5 seconds long.":e<0||t>n||t-e<.5-1e-6?"Choose a highlight at least 0.5 seconds long within the video.":null}const fc=new Set(["generate_audio","generate_image","generate_video"]),di=["audio","image","video"],mc=new Set([...di,"character"]),pc=new Set(di),gc={analysis:"data",analyze:"data",audio:"audio",character:"data",concat:"video",extract_audio:"audio",generate_audio:"gen",generate_image:"gen",generate_video:"gen",goal:"goal",image:"image",post:"data",prompt:"gen",splice:"video",timeline:"data",split_video:"video",video:"video"};function fi(e){return gc[e]}function xt(e){return fc.has(e)}function ur(e){return mc.has(e)}function hc(e){return pc.has(e)}function h(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)?e:null}function x(e){return typeof e=="string"&&e.trim().length>0?e:null}function W(e){return typeof e=="string"&&e.length>0?e:null}function b(e){return typeof e=="string"?e:null}function F(e){return typeof e=="number"&&Number.isFinite(e)?e:null}const bc=[["3:1",3],["21:9",21/9],["2:1",2],["16:9",16/9],["3:2",3/2],["4:3",4/3],["5:4",5/4],["1:1",1],["4:5",4/5],["3:4",3/4],["2:3",2/3],["9:16",9/16],["1:2",1/2],["9:21",9/21],["1:3",1/3]],yc=new Set(["analyzing","archiving","awaiting-output","changing-speed","completing","cropping","deleting","downloading","generating","isolating","loading","processing","queued","render-queued","render-queued-landscape","render-queued-portrait","render-queued-square","rendering","rendering-landscape","rendering-portrait","rendering-square","replacing-audio","reversing","running","splicing","transcribing","trimming","uploading"]),_c={analyze:"Analyze",concat:"Concatenate",extract_audio:"Extract",generate_audio:"Generate",generate_image:"Generate",generate_video:"Generate",prompt:"Rewrite",splice:"Splice",split_video:"Split"};function dt(e){return typeof e=="number"&&Number.isFinite(e)?e:null}function _n(e,t){return Object.prototype.hasOwnProperty.call(e,t)}function vc(e){return e.type!=="analysis"&&!ur(e.type)&&!!(e.operation??e.tool??e.model)}function ln(e){return yc.has(e)}function kc(e,t){return e==="analyzing"?"ANALYZING":e==="archiving"?"ARCHIVING":e==="changing-speed"?"CHANGING SPEED":e==="queued"?"QUEUED":e==="completing"?"FINISHING":e==="cropping"?"CROPPING":e==="deleting"?"DELETING":e==="downloading"?"DOWNLOADING":e==="generating"?"GENERATING":e==="isolating"?"ISOLATING VOCALS":e==="loading"?"LOADING":e==="processing"?"PROCESSING":e.startsWith("render-queued")?"QUEUED TO RENDER":e.startsWith("rendering")?"RENDERING":e==="replacing-audio"?"REPLACING AUDIO":e==="reversing"?"REVERSING":e==="splicing"?"SPLICING":e==="transcribing"?"TRANSCRIBING":e==="trimming"?"TRIMMING":e==="uploading"?"UPLOADING":e==="awaiting-output"||t.startsWith("generate_")?"GENERATING":t==="analyze"?"ANALYZING":t.startsWith("extract_")?"EXTRACTING":t==="split_video"?"SPLITTING":t==="splice"?"SPLICING":t==="concat"?"CONCATENATING":t==="prompt"?"REWRITING":"RUNNING"}const Yy=3,wc={1:"QUEUED",2:"PROVIDER GENERATING",3:"DOWNLOAD & COMMIT"};function Sc(e){return e==="queued"?1:e==="running"||e==="generating"||e==="awaiting-output"?2:e==="downloading"||e==="completing"?3:null}function Jy(e){const t=Sc(e);return t===null?null:{step:t,label:wc[t]}}function Ic(e){if(typeof e=="number"&&Number.isFinite(e))return e;if(typeof e!="string"||e.length===0)return null;const t=Date.parse(e);return Number.isFinite(t)?t:null}function Zy(e,t,n){return t==="error"?{overlay:"failed",label:null,startedAt:null,error:n?.error??(ur(e)?"Media processing failed":"Generation failed"),tone:"error"}:ln(t)?{overlay:"clock",label:kc(t,e),startedAt:Ic(n?.startedAt),error:null,tone:t==="queued"?"queued":"active"}:{overlay:null,label:null,startedAt:null,error:null,tone:null}}function Qy(e,t){const n=h(e.execution),r=n&&h(n[t]);return{error:W(r?.error),status:W(r?.status)}}function xc(e,t,n){const r=h(e.execution),o=r&&h(r[t]);if(!o||W(o.runId)!==n)return{error:null,state:"pending",status:null};const i=W(o.status),s=W(o.error);return s||i==="error"?{error:s,state:"error",status:i}:i==="completed"?{error:null,state:"completed",status:i}:{error:null,state:i&&ln(i)?"active":"pending",status:i}}function e_(e,t){if(!vc(e))return null;const n=ln(t);return xt(e.type)?{disabled:n,label:"Gen"}:{disabled:n,label:e.outputArtifactId||t==="completed"||t==="error"?"Re-run":"Run"}}function t_(e,t){const n=_c[e];return n?t==="Re-run"?`${n} again`:n:t}function n_(e,t){return ur(e)?null:t}function me(e){const t=Math.round(Math.max(0,e)*100),n=Math.floor(t/6e3),r=t-n*6e3,o=Math.floor(r/100),i=r%100,s=String(o).padStart(2,"0");return i===0?`${n}:${s}`:`${n}:${s}.${String(i).padStart(2,"0")}`}function Ac(e,t){let n=Math.abs(Math.round(e)),r=Math.abs(Math.round(t));for(;r>0;){const o=n%r;n=r,r=o}return n}function un(e,t){if(e===null||t===null||!Number.isFinite(e)||!Number.isFinite(t)||e<=0||t<=0)return null;const n=e/t,r=bc.reduce((a,c)=>Math.abs(c[1]-n)<Math.abs(a[1]-n)?c:a);if(Math.abs(r[1]-n)/n<=.03)return r[0];const o=Math.round(e),i=Math.round(t);if(o<1||i<1)return null;const s=Ac(o,i);return`${o/s}:${i/s}`}function dr(e){const t=dt(e.inputs?.startSeconds),n=dt(e.inputs?.endSeconds),r=dt(e.inputs?.durationSeconds),o=e.audioInfo?.durationSeconds??e.durationSeconds??r??(t!==null&&n!==null&&n>t?n-t:null),i=e.inputs?.audioRole==="continuous-source"?"Continuous source":e.inputs?.audioRole==="scene"?"Scene audio":e.hasOutput?"Audio output":"Select audio media",s=o!==null&&o>0?o:null;return{role:i,duration:s===null?null:me(s),durationSeconds:s,details:[e.audioInfo?.codec.toUpperCase()??null,e.audioInfo?`${e.audioInfo.sampleRateHz/1e3} kHz`:null,e.audioInfo?.channelLayout??null].filter(a=>!!a)}}function mi(e){const t=e.inputs?.mediaRole;return e.type==="image"&&t==="generate-image-output"||e.type==="video"&&t==="generate-video-output"}function r_(e,t){const n=Array.isArray(e?.outputVersionArtifactIds)?e.outputVersionArtifactIds.filter(r=>typeof r=="string"&&r.length>0):[];return[...new Set([...n,...t?[t]:[]])]}function Ec(e){const t=h(e),n=t&&h(t.text),r=n&&h(n.format),o=W(r?.type);return o?{name:W(r?.name),strict:r?.strict===!0,type:o}:null}function o_(e){const t=h(e);if(!t)return[];const r=(Array.isArray(t.llmExchanges)?t.llmExchanges:[]).flatMap((i,s)=>{const a=h(i);if(!a||!_n(a,"input")||!_n(a,"response"))return[];const c=h(a.input);return[{complete:!0,input:a.input,model:W(a.model)??W(c?.model)??"Unknown",provider:W(a.provider)??"Unknown",response:a.response,responseFormat:Ec(a.input),stage:W(a.stage)??`call_${s+1}`}]});if(r.length>0)return r;const o=h(t.request);return!o||!_n(t,"raw")?[]:[{complete:!1,input:o,model:W(o.model)??"Unknown",provider:W(o.provider)??"Unknown",response:t.raw,responseFormat:null,stage:"legacy_analysis"}]}function Cc(e){return{first:W(e?.firstFrameArtifactId),last:W(e?.lastFrameArtifactId)}}function i_(e){const t=dt(e?.startSeconds),n=dt(e?.endSeconds);return t!==null&&n!==null&&n>t?{startSeconds:t,endSeconds:n}:null}function s_(e){return e.replace(/^generate_/,"gen_").replaceAll("_"," ").toUpperCase()}function Ye(e){if(!e||typeof e!="object"||Array.isArray(e))throw new Error("Invalid cold-open response");return e}function Mc(e){const t=Ye(e);if(typeof t.sourceArtifactId!="string"||typeof t.sourceObjectHash!="string"||typeof t.durationSeconds!="number"||typeof t.fps!="number"||typeof t.startSeconds!="number"||typeof t.endSeconds!="number"||typeof t.reason!="string"||typeof t.model!="string"||ui(t.startSeconds,t.endSeconds,t.durationSeconds))throw new Error("The server returned an invalid cold-open selection");return t}async function pi(e,t,n,r){if(typeof n!="number")throw new Error("The server did not return a cold-open job ID");for(let o=0;o<1200;o+=1){if(!r())throw new Error("Workspace changed. Reopen the cold-open review.");const i=await e("list_jobs",{book_id:t,job_ids:[n]},{background:!0});if(!Array.isArray(i)||!i.length)throw new Error("The cold-open job could not be found");const s=Ye(i[0]);if(s.state==="done")return Ye(s.result);if(s.state==="failed"||s.state==="aborted")throw new Error(String(Ye(s.error??{}).message??"Cold-open job cancelled"));await new Promise(a=>setTimeout(a,500))}throw new Error("The cold open is still processing. Check Jobs, then retry to reconnect.")}async function a_(e,t,n){const r=Ye(await e("prepare_cold_open",{book_id:t.bookId,notebook_id:t.notebookId,asset_id:t.assetId})),o=r.status==="ready"?r:await pi(e,t.bookId,r.job_id,n),i=Mc(o.suggestion);if(!n()||i.sourceArtifactId!==t.assetId)throw new Error("Workspace changed. Reopen the cold-open review.");return{...t,suggestion:i}}async function c_(e,t,n){const r=t.suggestion;if(!r)throw new Error("Find a highlight first");const o=ui(r.startSeconds,r.endSeconds,r.durationSeconds);if(o)throw new Error(o);const i=Ye(await e("edit_cold_open",{book_id:t.bookId,notebook_id:t.notebookId,asset_id:t.assetId,source_object_hash:r.sourceObjectHash,start_time:r.startSeconds,end_time:r.endSeconds,request_id:t.requestId})),s=await pi(e,t.bookId,i.job_id,n);if(!n())throw new Error("Workspace changed. The copy is available in its original notebook.");if(typeof s.cell_id!="string"||typeof s.address!="string")throw new Error("The cold-open copy has no notebook cell");return{cellId:s.cell_id,address:s.address}}const gi="nano-banana-2-1";function l_(e){if(!e)return!1;const t=e.toLowerCase().replaceAll(/[_-]+/g," ");return/\b(?:out of|insufficient|not enough|no(?: remaining| more| available)?) credits?\b/.test(t)||/\bcredits? (?:balance )?(?:is |are )?(?:insufficient|exhausted|depleted|too low)\b/.test(t)||/\b(?:insufficient|not enough|low|exhausted) (?:account |credit )?balance\b/.test(t)||/\b(?:account |credit )?balance (?:is )?(?:insufficient|too low|exhausted)\b/.test(t)||/\binsufficient quota\b/.test(t)||/\b(?:exceeds? (?:your|the) (?:remaining |available )?credits?|credits? (?:left|remaining).{0,100}(?:required|requested|needed))\b/.test(t)}function u_(e,t){const n=e.cells.find(o=>o.id===t);if(!n||!["image","video","audio"].includes(n.type))return null;const r=e.edges.find(o=>o.target===n.id&&o.targetInput==="media");return e.cells.find(o=>o.id===r?.source&&o.type===`generate_${n.type}`)??null}function d_(e,t){(!e||e.isCurrent())&&t()}function f_(e,t,n){e&&!e.isCurrent()||(e?.review(t),n())}function pt(e){return["sending","working","queued","review"].includes(e.status)}function m_(e,t=!0){if(!t&&pt(e)&&e.status!=="review")return"Reconnecting…";const n={sending:"Sending",working:"Working",queued:"Queued",review:"Awaiting review",completed:"Completed",failed:"Failed",cancelled:"Cancelled"},r=e.work.filter(o=>o.state==="completed").length;return e.work.length>1&&pt(e)&&e.status!=="review"?`${n[e.status]} · ${r} of ${e.work.length} complete`:n[e.status]}function Gn(e){return e&&typeof e=="object"&&!Array.isArray(e)?e:null}function Ue(e){return typeof e=="string"&&e?e:void 0}function ft(e){return e==="failed"||e==="error"?"failed":e==="aborted"||e==="cancelled"?"cancelled":e==="done"||e==="completed"||e==="ready"?"completed":e==="running"||e==="completing"||e==="processing"?"working":"queued"}function Tc(e,t,n){const r=Gn(n);if(!r)return[];const o=r.job_id??r.jobId??r.retry_job_id,i=Ue(o)??Ue(r.operation_id??r.operationId),s=Ue(r.run_id??r.runId),a=Array.isArray(r.cell_ids)?r.cell_ids:Array.isArray(t.cell_ids)?t.cell_ids:[],c=Ue((e==="run_notebook_cell"?r.output_cell_id:void 0)??r.cell_id??r.cellId??t.cell_id??(a.length===1?a[0]:void 0)),l=Ue(r.output_artifact_id??r.outputArtifactId??r.artifact_id??r.artifactId??r.asset_id??r.assetId),u=e.replaceAll("_"," ").replace(/^./u,f=>f.toUpperCase()),m=[];if((typeof o=="number"||i)&&m.push({key:s?`run:${s}`:`job:${o??i}`,label:u,...typeof o=="number"?{jobId:o}:{},operationId:i,runId:s,cellId:c,artifactId:l,state:s?"queued":ft(r.status)}),Array.isArray(r.steps))for(const f of r.steps){const d=Gn(f);if(!(!d||!Array.isArray(d.child_job_ids)))for(const p of d.child_job_ids)typeof p=="number"&&m.push({key:`job:${p}`,jobId:p,label:Ue(d.tool)?.replaceAll("_"," ")??u,state:ft(d.status)})}return m}function Rc(e,t){const n=new Map(e.map(r=>[r.key,r]));for(const r of t){const o=n.get(r.key);n.set(r.key,o&&["completed","failed","cancelled"].includes(o.state)?o:{...o,...r})}return[...n.values()]}function qn(e){if(e.status==="sending"||e.status==="review"||e.status==="failed"||e.status==="cancelled"||!e.work.length)return e;const t=e.work.find(o=>o.state==="failed");if(t)return{...e,status:"failed",reply:t.detail??e.reply};const n=e.work.filter(o=>o.state==="queued"||o.state==="working");if(n.length)return{...e,status:n.some(o=>o.state==="working")?"working":"queued"};if(e.executing)return{...e,status:"working"};const r=e.work.some(o=>o.state==="cancelled")?"cancelled":"completed";return{...e,status:r,reply:e.status==="queued"||e.status==="working"?r==="completed"?"Work completed.":"Work cancelled.":e.reply}}function $c(e,t,n,r=[]){const o=e.work.map(i=>{if(["completed","failed","cancelled"].includes(i.state))return i;const s=t.filter(m=>m.id===i.jobId||m.operationId===i.operationId||i.runId&&m.payload?.runId===i.runId),a=s.find(m=>m.state==="failed"||m.state==="aborted");if(a)return{...i,state:ft(a.state),detail:a.error?.message};if(i.runId&&n?.id===e.notebookId){const f=(i.cellId?[i.cellId]:Object.entries(n.execution??{}).filter(([,p])=>Gn(p)?.runId===i.runId).map(([p])=>p)).map(p=>xc(n,p,i.runId));if(f.length&&f.every(p=>p.state==="completed"))return{...i,state:"completed"};const d=f.find(p=>p.state==="error");return d?{...i,state:"failed",detail:d.error??void 0}:{...i,state:s.some(p=>p.state!=="queued")?"working":i.state}}const c=s.find(m=>["queued","running","completing"].includes(m.state));if(c)return{...i,state:ft(c.state)};if(!s.length)return i;if(i.runId)return{...i,state:"working"};const l=i.artifactId??s.find(m=>m.artifactId)?.artifactId,u=r.find(m=>m.artifactId===l);return u&&u.status!=="ready"?{...i,state:ft(u.status)}:l&&!u?{...i,artifactId:l,state:"working"}:{...i,state:"completed"}});return qn({...e,work:o})}const p_=2400;function g_(e,t){const n=t.filter(r=>!e.has(r));return n.length===0?e:new Set([...e,...n])}function h_(e,t){const n=[...e].filter(r=>!t.includes(r));return n.length===e.size?e:new Set(n)}const Nc=new Set(["queued","running","completing"]);function hi(e,t,n){const r=n.find(i=>i.target===e.id&&i.targetInput==="media");if(!r)return null;const o=t.find(i=>i.id===r.source);return o&&(o.type==="generate_image"||o.type==="generate_video")?o:null}function Pc(e,t,n){return mi(e)?hi(e,t,n):null}function Oc(e,t,n){const r=(n??[]).filter(o=>{if(o.type!=="await_notebook_output"||!Nc.has(o.state))return!1;const i=o.payload,s=typeof i?.outputCellId=="string"&&i.outputCellId?i.outputCellId:null;if(s)return s===e;const a=typeof i?.cellId=="string"&&i.cellId?i.cellId:null;return t!==null&&a===t});return r.length===0?null:r.reduce((o,i)=>(i.operationId??"")>(o.operationId??"")?i:o)}function qr(e,t){const n=e?.payload?.[t];return typeof n=="string"&&n?n:null}function Ur(e,t,n,r){return{...{startedAt:typeof n?.startedAt=="number"?new Date(n.startedAt).toISOString():null,provider:t?.provider??null,model:t?.model??null,prompt:t?.prompt??e.prompt??null,producerCellId:t?.id??null,jobId:n?.operationId??null,providerArtifactId:qr(n,"providerArtifactId"),runId:qr(n,"runId")},kind:r||n===null||n.state==="queued"?"queued":"generating"}}function b_(e){if(!mi(e.cell))return{kind:"ready"};const t=hi(e.cell,e.cells,e.edges),n=t?.id??null,r=e.runErrors?.[e.cell.id]??e.error;if(r)return{kind:"failed",message:r,producerCellId:n};const o=Oc(e.cell.id,n,e.jobs);return o?Ur(e.cell,t,o,e.queuedCellIds?.has(e.cell.id)??!1):e.queuedCellIds?.has(e.cell.id)?Ur(e.cell,t,null,!0):{kind:"ready"}}function y_(e){return e==="video"||e==="generate_video"?"video":e==="image"||e==="generate_image"?"image":e==="audio"||e==="generate_audio"?"audio":"generation"}function Lc(e,t){const n=[e,t].filter(r=>typeof r=="string"&&r.length>0);return n.length===0?null:n.join(" · ")}function __(e){const t=e.error.trim()||"the provider rejected the request",n=Lc(e.provider,e.model),r=e.producerAddress?`the ${e.mediaLabel} generated by ${e.producerAddress}`:`the ${e.mediaLabel}`,o=e.producerAddress?` and the settings on ${e.producerAddress}`:" and this cell's settings",i=e.producerAddress?`re-run ${e.producerAddress} into ${e.address}`:`re-run ${e.address}`;return[`Repair ${e.address}: ${r} failed with "${t}".`,n?`Generator: ${n}.`:null,`Inspect the recorded provider request${o}, fix what the provider rejected, and ${i} as a preview.`].filter(s=>s!==null).join(" ")}function v_(e,t){return e==="kie"?"https://kie.ai/logs":e!=="fal"||!t||!/^[a-z0-9_-]+(?:\/[a-z0-9_.-]+)+$/iu.test(t)||t.split("/").some(n=>n==="."||n==="..")?null:`https://fal.ai/models/${t.split("/").map(encodeURIComponent).join("/")}/requests`}function bi(e){if(!e||typeof e!="object"||Array.isArray(e))return null;const t=e;return t.provider!=="kie"&&t.provider!=="fal"&&t.provider!=="machgen"?null:{provider:t.provider,model:typeof t.model=="string"?t.model:null,taskId:typeof t.taskId=="string"?t.taskId:null}}function De(e){return e&&typeof e=="object"&&!Array.isArray(e)?e:null}function Ne(e){return typeof e=="string"&&e?e:null}function Fc(e){const t=De(e),n=Ne(t?.taskId),r=Ne(t?.submittedAt);return!t||!n||!r?null:{taskId:n,submittedAt:r,completing:t.completing===!0}}function Dc(e){return e==="off"||e==="failures"||e==="all"?e:null}function Vc(e){const t=De(e),n=Dc(t?.mode);return!t||!n?null:{mode:n,hasCapture:t.hasCapture===!0,captures:typeof t.captures=="number"?t.captures:0,path:Ne(t.path),outcome:Ne(t.outcome)}}function k_(e){const t=De(e)??{},n=bi(t.providerTask),r=Vc(t.har);return{payload:t.payload??null,taskType:Ne(t.taskType),task:Fc(t.task),errorMessage:Ne(De(t.error)?.message),...n?{providerTask:n}:{},...r?{har:r}:{}}}function yi(e){const t=De(e);return t?De(t.input)??t:null}function w_(e){return Ne(yi(e)?.prompt)??Ne(De(e)?.prompt)}const jc=new Set(["prompt","model","callBackUrl"]);function Gc(e){return typeof e=="number"||typeof e=="boolean"?String(e):typeof e!="string"||!e||/^https?:\/\//i.test(e)?null:e}function S_(e){const t=yi(e);return t?Object.entries(t).flatMap(([n,r])=>{if(jc.has(n))return[];const o=Gc(r);return o===null?[]:[{key:n,value:o}]}):[]}function qc(e){return e.runKind==="queued"?["active","pending","pending","pending"]:e.task?e.task.completing?["done","done","done","active"]:["done","done","active","pending"]:["done","active","pending","pending"]}function I_(e){const t=qc(e),n=e.runKind==="failed"?t.findIndex(o=>o==="active"):-1;return[{id:"started",label:"Run started",at:e.startedAt},{id:"submitted",label:"Submitted",at:e.task?.submittedAt??null},{id:"generating",label:"Provider generating",at:e.task?.submittedAt??null},{id:"landing",label:"Download & commit",at:null}].map((o,i)=>({...o,status:i===n?"failed":t[i]??"pending"}))}async function x_(e,t,n){const r=h(await e("get_generation_har",{book_id:t,generation_id:n},{background:!0})),o=h(r?.har);if(!o)throw new Error("No HAR capture for this attempt");return{filename:b(r?.filename)||`videobook-generation-${n}.har`,text:`${JSON.stringify(o,null,2)}
6
- `}}function A_(e){const t=URL.createObjectURL(new Blob([e.text],{type:"application/json"})),n=document.createElement("a");n.href=t,n.download=e.filename,n.hidden=!0,document.body.append(n),n.click(),n.remove(),window.setTimeout(()=>URL.revokeObjectURL(t),1e4)}let Br=0;function Yt(){return Br+=1,Br}function E_(e,t){const n=ne.c(23);let r;n[0]===Symbol.for("react.memo_cache_sentinel")?(r=[],n[0]=r):r=n[0];const[o,i]=_.useState(r),s=_.useRef(o);let a;n[1]!==e||n[2]!==t?(a={bookId:e,notebookId:t},n[1]=e,n[2]=t,n[3]=a):a=n[3];const c=_.useRef(a),l=_.useRef(0);let u;n[4]===Symbol.for("react.memo_cache_sentinel")?(u=new Map,n[4]=u):u=n[4];const m=_.useRef(u),f=_.useRef(null),d=_.useRef(null);let p,g;n[5]!==e||n[6]!==t?(p=()=>{c.current={bookId:e,notebookId:t},l.current=l.current+1,f.current=s.current.filter(M=>M.bookId===e&&M.notebookId===t).at(-1)?.id??null,d.current=null},g=[e,t],n[5]=e,n[6]=t,n[7]=p,n[8]=g):(p=n[7],g=n[8]),_.useLayoutEffect(p,g);let y;n[9]===Symbol.for("react.memo_cache_sentinel")?(y=M=>{const R=M(s.current);JSON.stringify(R)!==JSON.stringify(s.current)&&(s.current=R,i(R))},n[9]=y):y=n[9];const v=y;let S;n[10]===Symbol.for("react.memo_cache_sentinel")?(S=M=>{const R=d.current===null?void 0:m.current.get(d.current);if(/^\/(?:apply|cancel)(?:\s|$)/iu.test(M)&&R?.isInScope())return v(K=>K.map(H=>H.id===R.id?{...H,status:"working",executing:!0}:H)),R;const D={...c.current},z=l.current,q=Yt();f.current=q,d.current=null,v(K=>[...K.map(H=>H.bookId===D.bookId&&H.notebookId===D.notebookId&&H.status==="review"?{...H,status:"cancelled"}:H),{id:q,...D,text:M,status:"sending",reply:"",work:[],executing:!0}].filter(Wc));const J=K=>v(H=>H.map(U=>U.id===q?K(U):U)),pe=()=>l.current===z&&c.current.bookId===D.bookId&&c.current.notebookId===D.notebookId,ge={id:q,isInScope:pe,isCurrent:()=>pe()&&f.current===q&&s.current.find(K=>K.id===q)?.status!=="cancelled",working:()=>J(Hc),review:K=>{K&&ge.isCurrent()?d.current=q:d.current===q&&(d.current=null),J(H=>({...H,status:K?"review":"working"}))},accept:(K,H,U)=>{const we=Tc(K,H,U);we.length&&J(Q=>qn({...Q,work:Rc(Q.work,we)}))},finish:K=>J(H=>H.status==="cancelled"?H:qn({...H,reply:K.message,executing:!1,status:K.status??(d.current===q?"review":K.ok?"completed":"failed")}))};m.current.set(q,ge);for(const K of m.current.keys())s.current.some(H=>H.id===K)||m.current.delete(K);return ge},n[10]=S):S=n[10];const w=S;let k;n[11]===Symbol.for("react.memo_cache_sentinel")?(k=()=>{const M=Yt(),R=l.current;f.current=M;let D=!1;for(const[q,J]of m.current)J.visible===!1&&q!==d.current&&m.current.delete(q);const z={id:M,visible:!1,isInScope:()=>l.current===R,isCurrent:()=>!D&&l.current===R&&f.current===M,working:Bc,accept:Uc,finish:q=>{q.status==="cancelled"&&(D=!0)},review:q=>{q&&z.isCurrent()?d.current=M:d.current===M&&(d.current=null)}};return m.current.set(M,z),z},n[11]=k):k=n[11];const I=k;let E;n[12]===Symbol.for("react.memo_cache_sentinel")?(E=(M,R,D,z)=>{v(q=>q.map(J=>J.bookId===M&&(!D||J.notebookId===D.id)&&pt(J)?$c(J,R,D,z):J))},n[12]=E):E=n[12];const C=E;let A;n[13]===Symbol.for("react.memo_cache_sentinel")?(A=()=>{const M=d.current;d.current=null,M!==null&&m.current.get(M)?.finish({ok:!0,status:"cancelled",message:"Pending action cancelled."}),M!==null&&v(R=>R.map(D=>D.id===M?{...D,status:"cancelled"}:D))},n[13]=A):A=n[13];const $=A;let T;if(n[14]!==e||n[15]!==t||n[16]!==o){let M;n[18]!==e||n[19]!==t?(M=R=>R.bookId===e&&R.notebookId===t,n[18]=e,n[19]=t,n[20]=M):M=n[20],T=o.filter(M),n[14]=e,n[15]=t,n[16]=o,n[17]=T}else T=n[17];let N;return n[21]!==T?(N={turns:T,begin:w,observe:C,cancelReview:$,claimVoice:I},n[21]=T,n[22]=N):N=n[22],N}function Uc(){}function Bc(){}function Hc(e){return{...e,status:"working"}}function Wc(e,t,n){return t>=n.length-256||pt(e)}const _i="data:text/javascript;base64,Y2xhc3MgVm9pY2VDYXB0dXJlIGV4dGVuZHMgQXVkaW9Xb3JrbGV0UHJvY2Vzc29yIHsKICBjb25zdHJ1Y3RvcigpIHsKICAgIHN1cGVyKCkKICAgIHRoaXMuZnJhbWVTaXplID0gTWF0aC5yb3VuZChzYW1wbGVSYXRlIC8gNTApCiAgICB0aGlzLmZyYW1lID0gbmV3IEFycmF5QnVmZmVyKHRoaXMuZnJhbWVTaXplICogMikKICAgIHRoaXMudmlldyA9IG5ldyBEYXRhVmlldyh0aGlzLmZyYW1lKQogICAgdGhpcy5vZmZzZXQgPSAwCiAgfQoKICBwcm9jZXNzKGlucHV0cykgewogICAgY29uc3Qgc2FtcGxlcyA9IGlucHV0c1swXT8uWzBdCiAgICBpZiAoIXNhbXBsZXMpIHJldHVybiB0cnVlCiAgICBmb3IgKGNvbnN0IHNhbXBsZSBvZiBzYW1wbGVzKSB7CiAgICAgIGNvbnN0IGNsYW1wZWQgPSBNYXRoLm1heCgtMSwgTWF0aC5taW4oMSwgc2FtcGxlKSkKICAgICAgdGhpcy52aWV3LnNldEludDE2KHRoaXMub2Zmc2V0ICogMiwgY2xhbXBlZCAqIChjbGFtcGVkIDwgMCA/IDMyNzY4IDogMzI3NjcpLCB0cnVlKQogICAgICB0aGlzLm9mZnNldCArPSAxCiAgICAgIGlmICh0aGlzLm9mZnNldCA9PT0gdGhpcy5mcmFtZVNpemUpIHsKICAgICAgICB0aGlzLnBvcnQucG9zdE1lc3NhZ2UodGhpcy5mcmFtZSwgW3RoaXMuZnJhbWVdKQogICAgICAgIHRoaXMuZnJhbWUgPSBuZXcgQXJyYXlCdWZmZXIodGhpcy5mcmFtZVNpemUgKiAyKQogICAgICAgIHRoaXMudmlldyA9IG5ldyBEYXRhVmlldyh0aGlzLmZyYW1lKQogICAgICAgIHRoaXMub2Zmc2V0ID0gMAogICAgICB9CiAgICB9CiAgICByZXR1cm4gdHJ1ZQogIH0KfQoKcmVnaXN0ZXJQcm9jZXNzb3IoJ3ZpZGVvYm9vay12b2ljZS1jYXB0dXJlJywgVm9pY2VDYXB0dXJlKQo=";class Kc{socket=null;capture=null;input=null;mute=null;stopped=!1;nextAt=0;sources=new Set;timers=new Set;items=[];completed=new Set;interrupted=new Set;rejectStart=null;options;constructor(t){this.options=t}async start(t,n){if(n.aborted)throw new Error("Voice start cancelled.");const r=new URL(`/api/voice/${t.id}/audio`,window.location.href);r.protocol=r.protocol==="https:"?"wss:":"ws:";const o=new WebSocket(r);this.socket=o;const i=()=>this.stop();n.addEventListener("abort",i,{once:!0});try{if(await new Promise((c,l)=>{this.rejectStart=l,o.addEventListener("open",()=>{this.stopped||o.send(JSON.stringify({type:"authenticate",token:t.token}))}),o.addEventListener("message",u=>{try{if(JSON.parse(String(u.data)).type!=="ready")throw new Error("Unexpected audio response");this.rejectStart=null,c()}catch{this.fail("Voice audio could not authenticate. Start voice again.")}}),o.addEventListener("error",()=>this.fail("Voice audio connection failed. Start voice again.")),o.addEventListener("close",()=>{this.stopped||this.fail("Voice audio connection ended. Start voice to reconnect.")})}),this.stopped)return;const{context:s,microphone:a}=this.options;if(await s.audioWorklet.addModule(_i),this.stopped)return;this.capture=new AudioWorkletNode(s,"videobook-voice-capture"),this.capture.port.onmessage=c=>{if(!(this.stopped||o.readyState!==WebSocket.OPEN)){if(o.bufferedAmount>s.sampleRate*4){this.fail("Voice audio connection is too slow. Start voice to reconnect.");return}o.send(c.data)}},this.input=s.createMediaStreamSource(a),this.mute=s.createGain(),this.mute.gain.value=0,this.input.connect(this.capture),this.capture.connect(this.mute),this.mute.connect(s.destination)}finally{n.removeEventListener("abort",i)}}enqueue(t,n,r){if(this.stopped||this.interrupted.has(n))return;const{context:o,output:i,sampleRate:s}=this.options;if(t.length>256e3||this.nextAt-o.currentTime>30)throw new Error("Voice audio exceeded its buffer limit.");const a=Uint8Array.from(atob(t),p=>p.charCodeAt(0));if(a.length===0||a.length%2!==0)throw new Error("Voice sent an invalid audio frame.");const c=new DataView(a.buffer),l=o.createBuffer(1,a.length/2,s),u=l.getChannelData(0);for(let p=0;p<u.length;p+=1)u[p]=c.getInt16(p*2,!0)/32768;const m=Math.max(o.currentTime+.015,this.nextAt);this.nextAt=m+l.duration;let f=this.items.find(p=>p.itemId===r);if(!f){f={responseId:n,itemId:r,startAt:m,duration:0},this.items.push(f);const p=window.setTimeout(()=>{this.timers.delete(p),this.stopped||this.options.onStarted(n)},Math.max(0,(m-o.currentTime)*1e3));this.timers.add(p)}f.duration+=l.duration;const d=o.createBufferSource();d.buffer=l,d.connect(i),this.sources.add(d),d.onended=()=>{d.disconnect(),this.sources.delete(d),!this.stopped&&this.sources.size===0&&this.completed.has(n)&&(this.options.onFinished(n),this.items=[],this.completed.clear())},d.start(m)}finish(t){this.stopped||this.interrupted.has(t)||(this.completed.add(t),this.sources.size===0&&(this.options.onFinished(t),this.items=[],this.completed.clear()))}interrupt(){const t=this.options.context.currentTime,n=this.items.find(o=>o.startAt+o.duration>t)??this.items.at(-1),r=n?{responseId:n.responseId,itemId:n.itemId,audioEndMs:Math.floor(Math.max(0,Math.min(n.duration,t-n.startAt))*1e3)}:void 0;for(const o of this.items)this.interrupted.add(o.responseId);return this.clear(),r}clear(){for(const t of this.timers)window.clearTimeout(t);this.timers.clear();for(const t of this.sources)t.onended=null,t.stop(),t.disconnect();this.sources.clear(),this.items=[],this.completed.clear(),this.nextAt=this.options.context.currentTime}fail(t){this.stopped||(this.rejectStart?.(new Error(t)),this.rejectStart=null,this.options.onError(t),this.stop())}stop(){this.stopped||(this.stopped=!0,this.rejectStart?.(new Error("Voice start cancelled.")),this.rejectStart=null,this.socket?.close(),this.capture?.port.close(),this.capture?.disconnect(),this.input?.disconnect(),this.mute?.disconnect(),this.clear())}}const zc="videobook-voice";class Xc{connectAt=0;permissionStartAt=0;permissionEndAt=0;utteranceEndAt=0;turnAt=0;extra={};setSession(t){this.extra={...this.extra,...t}}mark(t,n){performance.mark(zc,{detail:{stage:t,...this.extra,...n}})}connectStart(){this.connectAt=performance.now(),this.mark("connect-start")}permissionWaitStart(){this.permissionStartAt=performance.now(),this.mark("permission-wait-start")}permissionWaitEnd(){this.permissionEndAt=performance.now(),this.mark("permission-wait-end",{durationMs:this.permissionEndAt-this.permissionStartAt})}sessionRequest(){this.mark("session-request")}providerReady(t){this.setSession({model:t.model,provider:t.provider,transport:t.transport}),this.mark("provider-ready",t),t.fallbackReason&&this.mark("fallback",{reason:t.fallbackReason})}mediaReady(){const t=performance.now();this.mark("media-ready"),this.mark("connection-setup",{durationMs:t-this.connectAt,permissionWaitMs:Math.max(0,this.permissionEndAt-this.permissionStartAt)})}turnDetection(t){this.turnAt=performance.now(),this.utteranceEndAt=t&&t>0?t:this.turnAt,this.mark("turn-detection",{microphoneSignalEndedAt:t})}firstDecodedAudio(t){if(this.turnAt===0){this.mark("activation-audio");return}this.utteranceEndAt===0&&t&&t>0&&(this.utteranceEndAt=t);const n=performance.now();this.mark("first-audio"),this.utteranceEndAt>0&&this.mark("utterance-end-to-decoded-audio",{durationMs:n-this.utteranceEndAt,turnDetectionMs:this.turnAt>0?this.turnAt-this.utteranceEndAt:void 0,generationMs:this.turnAt>0?n-this.turnAt:void 0,microphoneSignalEndedAt:this.utteranceEndAt})}acknowledgement(t){this.mark("acknowledgement",t?{status:t}:void 0)}}function vi(e){return e!=="xai"}function Yc(e){const t={bookId:e.bookId,mode:e.mode,sampleRate:e.sampleRate};return e.notebookId&&(t.notebookId=e.notebookId),vi(e.mode)&&e.sdp&&(t.sdp=e.sdp),{url:"/api/voice",body:t}}function vn(e){if(e instanceof DOMException){if(e.name==="NotAllowedError"||e.name==="SecurityError")return"Microphone access is blocked. Allow it in your browser, then start voice again.";if(e.name==="NotFoundError")return"No microphone found. Connect one, then start voice again.";if(e.name==="NotReadableError")return"The microphone is busy or unavailable. Check your audio device, then try again."}return e instanceof Error?e.message:"Voice could not connect. Try again."}class Jc{abort=new AbortController;peer=null;pcm=null;microphone=null;channel=null;context=null;remoteAudio=null;output=null;inputMeter=null;outputMeter=null;descriptor=null;stopped=!1;frame=0;deadline=0;playing=!1;awaitingAudio=!1;awaitingSilence=!1;lastMicrophoneSignalAt=0;outputResponseId=null;review=null;actions=new Set;captionStarts=new Set;outcomes=Promise.resolve();phase="connecting";cleanupListeners=[];timeline=new Xc;options;constructor(t){this.options=t}updatePhase(t,n){this.phase=t,this.options.onPhase(t,n)}mark(t,n){this.timeline.mark(t,{model:this.descriptor?.model,...n})}listen(t,n,r,o=!1){t.addEventListener(n,r,o),this.cleanupListeners.push(()=>t.removeEventListener(n,r,o))}async start(){let t;try{if(this.stopped)return;if(!window.isSecureContext||!navigator.mediaDevices?.getUserMedia||!window.RTCPeerConnection||!window.AudioContext)throw new Error("Voice needs a browser with microphone support on HTTPS or localhost.");this.updatePhase("connecting","Connecting voice"),this.timeline.connectStart(),this.deadline=window.setTimeout(()=>this.stop("Voice connection timed out. Start voice to retry.",!0),this.options.mode==="auto"?8e4:3e4),this.timeline.permissionWaitStart(),this.updatePhase("connecting","Allow microphone access");const n=navigator.mediaDevices.getUserMedia({audio:{echoCancellation:!0,noiseSuppression:!0,autoGainControl:!0},video:!1}).finally(()=>{this.timeline.permissionWaitEnd()});t=()=>{n.then(s=>{this.microphone!==s&&s.getTracks().forEach(a=>a.stop())}).catch(()=>{})},this.context=new AudioContext({latencyHint:"interactive",sampleRate:48e3}),this.context.resume().then(()=>{this.stopped||this.mark("audio-context-running")}).catch(()=>{this.stopped||this.options.onPlaybackBlocked(!0)}),this.output=this.context.createGain(),this.outputMeter=this.context.createAnalyser(),this.outputMeter.fftSize=256,this.output.connect(this.outputMeter),this.outputMeter.connect(this.context.destination);for(const s of document.querySelectorAll("audio, video"))s.pause();this.installAmbientListeners(),this.context.audioWorklet.addModule(_i).catch(()=>{});const r=!vi(this.options.mode);r&&this.timeline.sessionRequest();const o=r?this.requestSession():null,i=await n;if(this.stopped){i.getTracks().forEach(s=>s.stop()),this.mark("microphone-released",{ended:i.getTracks().every(s=>s.readyState==="ended")});return}if(this.microphone=i,this.updatePhase("connecting","Connecting voice"),this.bindMicrophone(i),this.measure(),r){const s=await o;if(!s)return;if(s.transport!=="pcm")throw new Error("Voice returned a WebRTC session for an xAI request.");await this.acceptPcm(s,i);return}await this.startWebRtc(i)}catch(n){t?.(),this.stopped||this.stop(vn(n),!0)}}installAmbientListeners(){this.listen(document,"play",()=>this.stop("Comms paused for media playback. Start voice to resume."),!0),this.listen(document,"visibilitychange",()=>{document.hidden&&this.stop("Comms off while the page is hidden.")}),this.listen(window,"pagehide",()=>this.stop()),this.listen(window,"offline",()=>this.stop("You are offline. Start voice after reconnecting.",!0))}bindMicrophone(t){for(const n of t.getAudioTracks())this.listen(n,"ended",()=>this.stop("Microphone disconnected. Check the device and start voice again.",!0));this.inputMeter=this.context.createAnalyser(),this.inputMeter.fftSize=256,this.context.createMediaStreamSource(t).connect(this.inputMeter)}async requestSession(t){const{url:n,body:r}=Yc({bookId:this.options.bookId,notebookId:this.options.notebookId,mode:this.options.mode,sampleRate:this.context.sampleRate,sdp:t}),o=await fetch(n,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(r),signal:this.abort.signal}),i=await o.json();if(!o.ok)throw new Error(i.error??"Voice could not connect. Try again.");return this.descriptor=i,this.timeline.providerReady({provider:i.provider,transport:i.transport,model:i.model,fallbackReason:i.fallbackReason}),this.stopped?(this.releaseSession(),null):(this.options.onProvider(i.provider,i.fallbackReason),i)}async acceptPcm(t,n){this.pcm=new Kc({context:this.context,microphone:n,output:this.output,sampleRate:t.sampleRate,onStarted:r=>this.mediaEvent({type:"output_audio_buffer.started",response_id:r}),onFinished:r=>this.mediaEvent({type:"output_audio_buffer.stopped",response_id:r}),onError:r=>this.stop(r,!0)}),this.readEvents(t),await this.pcm.start(t,this.abort.signal),this.stopped||this.connected()}connected(){window.clearTimeout(this.deadline),this.mark("connected"),this.timeline.mediaReady(),this.updatePhase("listening"),this.post("ready",{})}async startWebRtc(t){const n=new RTCPeerConnection;this.peer=n;for(const o of t.getAudioTracks())n.addTrack(o,t);if(this.listen(n,"track",o=>{if(this.stopped)return;const i=o.track;this.mark("media-track");const s=new MediaStream([i]);this.remoteAudio=new Audio,this.remoteAudio.muted=!0,this.remoteAudio.srcObject=s,this.remoteAudio.play().catch(()=>{this.stopped||this.options.onPlaybackBlocked(!0)}),this.context.createMediaStreamSource(s).connect(this.output),this.options.onPlaybackBlocked(this.context?.state!=="running")}),this.listen(n,"connectionstatechange",()=>{this.stopped||(n.connectionState==="failed"||n.connectionState==="disconnected"||n.connectionState==="closed")&&this.stop("Voice connection lost. Start voice to reconnect.",!0)}),this.channel=n.createDataChannel("oai-events"),this.listen(this.channel,"message",o=>{if(!this.stopped)try{this.mediaEvent(JSON.parse(String(o.data)))}catch{this.stop("Voice sent an unreadable event. Start voice again.",!0)}}),this.listen(this.channel,"open",()=>{this.stopped||this.connected()}),this.listen(this.channel,"close",()=>{this.stopped||this.stop("Voice channel closed. Start voice again.",!0)}),await n.setLocalDescription(await n.createOffer()),this.stopped)return;this.timeline.sessionRequest();const r=await this.requestSession(n.localDescription?.sdp);if(r){if(r.transport==="pcm"){this.cleanupListeners.splice(0).forEach(o=>o()),this.channel?.close(),this.peer?.close(),this.channel=null,this.peer=null,this.installAmbientListeners(),this.bindMicrophone(t),await this.acceptPcm(r,t);return}this.readEvents(r),await n.setRemoteDescription({type:"answer",sdp:r.sdp})}}mediaEvent(t){if(typeof t.type=="string"&&/audio_buffer\.(started|stopped|cleared)|speech_(started|stopped)/u.test(t.type)&&this.mark(t.type),t.type==="input_audio_buffer.speech_started"){const n=this.pcm?.interrupt();n&&this.post("interrupt",n),this.playing&&(this.mark("barge-in"),this.awaitingSilence=!0,this.outputResponseId&&!n&&this.post("interrupt",{responseId:this.outputResponseId})),this.playing=!1,this.awaitingAudio=!1,this.output&&(this.output.gain.value=0),this.options.onRetrying?.(!1),this.updatePhase(this.review?"review":"listening")}else if(t.type==="input_audio_buffer.speech_stopped")this.mark("speech-stop",{microphoneSignalEndedAt:this.lastMicrophoneSignalAt}),this.timeline.turnDetection(this.lastMicrophoneSignalAt),this.updatePhase(this.review?"review":"thinking");else if(t.type==="output_audio_buffer.started")this.outputResponseId=typeof t.response_id=="string"?t.response_id:null,this.playing=!0,this.awaitingAudio=!0,this.output&&(this.output.gain.value=1),this.updatePhase(this.review?"review":"speaking");else if(t.type==="output_audio_buffer.stopped"||t.type==="output_audio_buffer.cleared"){if(t.response_id&&t.response_id!==this.outputResponseId)return;this.playing=!1,this.output&&(this.output.gain.value=0),this.updatePhase(this.review?"review":"listening")}}measure(){const t=new Float32Array(256),n=new Float32Array(256),r=i=>Math.sqrt(i.reduce((s,a)=>s+a*a,0)/i.length),o=()=>{if(this.stopped)return;this.inputMeter?.getFloatTimeDomainData(t),this.outputMeter?.getFloatTimeDomainData(n),r(t)>.008&&(this.lastMicrophoneSignalAt=performance.now());const i=Math.min(1,Math.max(r(t),this.playing?r(n):0)*5);this.awaitingAudio&&r(n)>.002&&this.context?.state==="running"&&(this.timeline.firstDecodedAudio(this.lastMicrophoneSignalAt),this.awaitingAudio=!1),this.awaitingSilence&&r(n)<.002&&(this.mark("local-silence"),this.awaitingSilence=!1),this.options.onLevel(i),this.frame=requestAnimationFrame(o)};this.frame=requestAnimationFrame(o)}async readEvents(t){try{const n=await fetch(`/api/voice/${t.id}/events`,{headers:{Authorization:`Bearer ${t.token}`},signal:this.abort.signal});if(!n.ok||!n.body)throw new Error("Voice event connection failed. Start voice again.");const r=n.body.getReader(),o=new TextDecoder;let i="";for(;!this.stopped;){const s=await r.read();if(s.done)break;if(i+=o.decode(s.value,{stream:!0}),i.length>512e3)throw new Error("Voice event exceeded its size limit.");const a=i.split(`
7
- `);i=a.pop()??"";for(const c of a)c&&!this.stopped&&this.receive(JSON.parse(c))}this.stopped||this.stop("Voice connection ended. Start voice to reconnect.",!0)}catch(n){this.stopped||this.stop(vn(n),!0)}}receive(t){t.type==="caption"?(this.captionStarts.has(t.caption.id)||(this.captionStarts.add(t.caption.id),this.mark("caption-first",{role:t.caption.role})),t.caption.final&&!t.caption.interrupted&&this.mark("caption-final",{role:t.caption.role}),t.caption.interrupted&&this.mark("caption-interrupted"),this.options.onCaption(t.caption)):t.type==="error"?this.stop(t.message,!0):t.type==="closed"?this.stop(t.reason):t.type==="audio"?this.pcm?.enqueue(t.audio,t.responseId,t.itemId):t.type==="audio-done"?this.pcm?.finish(t.responseId):t.type==="activity"?(t.interrupt?this.mediaEvent({type:"input_audio_buffer.speech_started"}):this.pcm&&t.phase==="thinking"&&this.mediaEvent({type:"input_audio_buffer.speech_stopped"}),this.options.onRetrying?.(!!t.retry),this.playing||this.updatePhase(this.review?"review":t.phase)):t.type==="action"&&!this.actions.has(t.callId)?(this.actions.add(t.callId),this.action(t)):t.type==="review"&&!this.actions.has(t.callId)&&(this.actions.add(t.callId),this.reviewCommand(t))}async reviewCommand(t){let n;try{n=await this.options.onReviewCommand(t.command)}catch(r){n={status:"failed",message:r instanceof Error?r.message:"The review command failed."}}this.stopped||(n.status!=="review"&&(this.review=null),this.updatePhase(this.review?"review":this.playing?"speaking":"listening"),await this.acknowledge(t.callId,n))}async action(t){let n;try{n=await this.options.onAction(t)}catch(r){n={status:"failed",message:r instanceof Error?r.message:"The action failed."}}this.stopped||(n.status==="review"&&(this.mark("action-review"),this.review=t.callId,this.updatePhase("review")),await this.acknowledge(t.callId,n))}async post(t,n){const r=this.descriptor;if(!(this.stopped||!r))try{if(!(await fetch(`/api/voice/${r.id}/${t}`,{method:"POST",headers:{Authorization:`Bearer ${r.token}`,"Content-Type":"application/json"},body:JSON.stringify(n),signal:this.abort.signal})).ok)throw new Error("Voice could not receive the action outcome. Check the command UI.")}catch(o){this.stopped||this.stop(vn(o),!0)}}reportOutcome(t){if(!this.review)return;const n=this.review;t.status!=="review"&&(this.review=null),this.acknowledge(n,t),this.updatePhase(this.review?"review":this.playing?"speaking":"listening")}acknowledge(t,n){return this.timeline.acknowledgement(n.status),this.outcomes=this.outcomes.then(()=>this.post("outcome",{callId:t,outcome:n})),this.outcomes}shareTypedTurn(t,n){this.post("context",{userText:t.slice(0,8e3),assistantText:n.slice(0,4e3)})}async resumePlayback(){if(!(this.stopped||!this.context))try{await this.context.resume(),await this.remoteAudio?.play(),this.stopped||this.options.onPlaybackBlocked(this.context.state!=="running")}catch{this.stopped||this.options.onPlaybackBlocked(!0)}}releaseSession(){const t=this.descriptor;this.descriptor=null,t&&fetch(`/api/voice/${t.id}`,{method:"DELETE",headers:{Authorization:`Bearer ${t.token}`,"Content-Type":"application/json"},body:JSON.stringify({interruptedResponseId:this.playing?this.outputResponseId:null}),keepalive:!0}).catch(()=>{})}stop(t="Comms off.",n=!1){this.stopped||(this.stopped=!0,this.output?.disconnect(),this.remoteAudio?.pause(),this.remoteAudio&&(this.remoteAudio.srcObject=null),this.microphone?.getTracks().forEach(r=>r.stop()),this.mark("microphone-released",{ended:this.microphone?.getTracks().every(r=>r.readyState==="ended")??!0}),this.microphone=null,this.mark("stopped"),cancelAnimationFrame(this.frame),window.clearTimeout(this.deadline),this.cleanupListeners.splice(0).forEach(r=>r()),this.abort.abort(),this.channel?.close(),this.pcm?.stop(),this.peer?.getReceivers().forEach(r=>r.track.stop()),this.peer?.close(),this.context?.close().catch(()=>{}),this.options.onLevel(0),this.options.onPlaybackBlocked(!1),this.releaseSession(),this.updatePhase(n?"error":"off",t))}get active(){return!this.stopped&&this.phase!=="off"&&this.phase!=="error"}}const Zc=6e4;function Qc(e){return e.text.trim().length>0||!!e.interrupted}function C_(e,t,n=[],r=[]){const o=e.filter(Qc).map(u=>({kind:"caption",sequence:u.sequence??0,caption:u})),i=n.map(u=>({kind:"caption",sequence:u.id,turn:u,caption:{id:`typed:${u.id}`,sequence:u.id,role:"user",text:u.text,final:!0},calls:t.calls.filter(m=>m.turnId===u.id)})),s=t.calls.filter(u=>u.turnId===void 0).map(u=>({kind:"call",sequence:u.id,call:u})),a=[...o,...i,...s,...r].sort((u,m)=>u.sequence!==m.sequence?u.sequence-m.sequence:u.kind===m.kind?0:u.kind==="caption"?-1:1),l=a.flatMap((u,m)=>u.kind==="caption"&&u.caption.role==="user"?[m]:[]).at(-2);return l===void 0?a:a.filter((u,m)=>m>=l||u.kind==="caption"&&u.turn&&pt(u.turn))}function M_(e){return e.at(-1)?.sequence??0}function T_(e){return e.map(t=>t.kind==="status"?`${t.sequence}:${t.text}`:t.kind==="call"?`${t.sequence}:${t.call.phase}`:t.turn?`${t.sequence}:${t.turn.status}:${t.turn.reply}:${t.turn.work.map(n=>n.state).join(":")}`:String(t.sequence)).join(",")}function R_(e){if(e.runningCalls>0)return!0;switch(e.voicePhase){case"connecting":case"thinking":case"speaking":case"review":return!0;default:return!1}}function $_(e){if(!e.open||e.held)return()=>{};const t=e.setTimeoutFn??setTimeout,n=e.clearTimeoutFn??clearTimeout,r=t(e.onClose,e.delayMs??Zc);return()=>{n(r)}}function N_(e,t,n){return t>0?!1:n?e==="off"||e===void 0:!0}const ki="videobook.voice-provider";function el(){try{const e=localStorage.getItem(ki);return e==="openai"||e==="xai"?e:"auto"}catch{return"auto"}}function P_(e){const t=ne.c(31),[n,r]=_.useState("off"),[o,i]=_.useState("Voice input + spoken replies");let s;t[0]===Symbol.for("react.memo_cache_sentinel")?(s=[],t[0]=s):s=t[0];const[a,c]=_.useState(s),[l,u]=_.useState(!1),[m,f]=_.useState(!1),[d,p]=_.useState(!1),[g,y]=_.useState(el),[v,S]=_.useState(null),[w,k]=_.useState(),I=_.useRef(null),E=_.useRef(null),C=_.useRef(e);let A;t[1]!==e?(A=()=>{C.current=e},t[1]=e,t[2]=A):A=t[2],_.useLayoutEffect(A);let $;t[3]===Symbol.for("react.memo_cache_sentinel")?($=()=>()=>{const U=E.current;E.current=null,U?.stop("Workspace changed. Start voice to resume."),c([]),S(null),k(void 0),f(!1),p(!1)},t[3]=$):$=t[3];let T;t[4]!==e.available||t[5]!==e.bookId||t[6]!==e.notebookId||t[7]!==e.scope?(T=[e.bookId,e.notebookId,e.scope,e.available],t[4]=e.available,t[5]=e.bookId,t[6]=e.notebookId,t[7]=e.scope,t[8]=T):T=t[8],_.useLayoutEffect($,T);let N;t[9]===Symbol.for("react.memo_cache_sentinel")?(N=()=>{f(!1),p(!1),E.current?.stop(),r("off"),i("Comms off."),u(!1),S(null),k(void 0)},t[9]=N):N=t[9];const M=N;let R;t[10]!==g?(R=()=>{if(E.current?.active){M();return}const U=C.current;if(!U.available||U.disabled)return;S(null),k(void 0),p(!1),r("connecting"),i("Connecting voice");const we=new Set,Q=new Jc({bookId:U.bookId,notebookId:U.notebookId,mode:g,onProvider:(B,P)=>{E.current===Q&&(S(B),k(P))},onPhase:(B,P)=>{E.current!==Q&&B!=="off"||(r(B),(B==="off"||B==="error")&&f(!1),B!=="thinking"&&p(!1),P&&i(P))},onRetrying:B=>{E.current===Q&&p(B)},onCaption:B=>{E.current===Q&&(B.role==="user"&&B.final&&B.text.trim()&&!we.has(B.id)&&(we.add(B.id),C.current.onUserTurn?.()),c(P=>{const Y=P.findIndex(Se=>Se.id===B.id);if(Y<0)return[...P,{...B,sequence:B.sequence??Yt()}].slice(-256);const Me=P[Y]?.sequence??B.sequence;return P.map(Se=>Se.id===B.id?{...B,sequence:Me}:Se)}))},onAction:async B=>{if(E.current!==Q||C.current.scope!==U.scope||C.current.bookId!==U.bookId||C.current.notebookId!==U.notebookId||!C.current.available)return{status:"cancelled",message:"Workspace changed. Repeat the command in the current workspace."};f(!0);const P=()=>E.current===Q&&Q.active&&C.current.bookId===U.bookId&&C.current.notebookId===U.notebookId&&C.current.scope===U.scope&&C.current.available,Y=await C.current.onAction(B,P).catch(nl);return E.current===Q&&f(Y.status==="review"),Y},onReviewCommand:async B=>{if(E.current!==Q)return{status:"cancelled",message:"Workspace changed. The review is no longer on screen."};const P=await C.current.onReviewCommand(B).catch(tl);return E.current===Q&&f(P.status==="review"),P},onLevel:B=>I.current?.style.setProperty("--voice-level",String(B)),onPlaybackBlocked:u});E.current=Q,Q.start()},t[10]=g,t[11]=R):R=t[11];const D=R;let z;t[12]!==g?(z=U=>{if(U!==g){f(!1),p(!1),E.current?.stop("Voice provider changed. Start voice to connect."),y(U),S(null),k(void 0);try{localStorage.setItem(ki,U)}catch{return}}},t[12]=g,t[13]=z):z=t[13];const q=e.disabled||!e.available,J=n!=="off"&&n!=="error";let pe,ge,K;t[14]===Symbol.for("react.memo_cache_sentinel")?(K=()=>{E.current?.resumePlayback()},pe=U=>{U.status!=="review"&&f(!1),E.current?.reportOutcome(U)},ge=(U,we)=>E.current?.shareTypedTurn(U,we),t[14]=pe,t[15]=ge,t[16]=K):(pe=t[14],ge=t[15],K=t[16]);let H;return t[17]!==a||t[18]!==w||t[19]!==o||t[20]!==g||t[21]!==m||t[22]!==n||t[23]!==l||t[24]!==v||t[25]!==d||t[26]!==z||t[27]!==q||t[28]!==J||t[29]!==D?(H={phase:n,message:o,captions:a,playbackBlocked:l,pendingReview:m,retrying:d,meterRef:I,toggle:D,stop:M,mode:g,provider:v,fallbackReason:w,selectMode:z,disabled:q,active:J,resumePlayback:K,reportOutcome:pe,shareTypedTurn:ge},t[17]=a,t[18]=w,t[19]=o,t[20]=g,t[21]=m,t[22]=n,t[23]=l,t[24]=v,t[25]=d,t[26]=z,t[27]=q,t[28]=J,t[29]=D,t[30]=H):H=t[30],H}function tl(e){return{status:"failed",message:e instanceof Error?e.message:"The review command failed."}}function nl(e){return{status:"failed",message:e instanceof Error?e.message:"Voice action failed."}}async function rl(e){const{revision:t,...n}=e,r=await crypto.subtle.digest("SHA-256",new TextEncoder().encode(JSON.stringify(n)));return[...new Uint8Array(r)].map(o=>o.toString(16).padStart(2,"0")).join("")}const ol=1;function wi(e){if(e.planVersion!==ol)throw new Error(`Unsupported CommandPlan version: ${e.planVersion}`);if(e.stages.length===0)throw new Error("A CommandPlan requires a stage");for(const t of e.stages){if(t.kind==="edit"){if(t.intent.sourceSurface!==e.sourceSurface)throw new Error("Edit stage source surface must match its CommandPlan");if(t.intent.actor!==e.actor)throw new Error("Edit stage actor must match its CommandPlan")}if(t.kind==="queued"&&t.insertsOutput&&!t.continuation)throw new Error("Queued insert stages require a revision-pinned continuation");if(t.kind==="queued"&&t.jobType==="generation"&&(!t.provider||!t.model))throw new Error("Generation stages require provider and model disclosure");if(t.kind==="queued"&&t.jobType==="generation"&&t.estimatedCostUsd===void 0&&t.estimateUnavailable!==!0)throw new Error("Generation stages require a cost estimate or unavailable warning")}}function O_(e){const{bookId:t,call:n,sequence:r}=e,o=_.useMemo(()=>({bookId:t}),[t]),i=_.useRef({key:o,active:!0,pending:!1}),[s,a]=_.useState({scope:o,busy:!1,error:""}),c=r?.sequenceId,[l,u]=_.useState({sequenceId:c,frame:0,selectedClipId:null}),m=_.useCallback(w=>{u(k=>({sequenceId:c,frame:w,selectedClipId:k.sequenceId===c?k.selectedClipId:null}))},[c]),[f,d]=_.useState(null),p=_.useRef(0);_.useEffect(()=>{const w={key:o,active:!0,pending:!1};return i.current=w,()=>{w.active=!1}},[o]);async function g(w){const k=i.current;if(!e.ready||k.key!==o||!k.active||k.pending)return;const I=()=>k.active&&i.current===k;k.pending=!0,a({scope:o,busy:!0,error:""});try{await w(I),I()&&a({scope:o,busy:!1,error:""})}catch(E){I()&&a({scope:o,busy:!1,error:E instanceof Error?E.message:String(E)})}finally{k.pending=!1}}async function y(w,k,I){const E=++p.current;await g(async C=>{const A=r?.tracks.find(R=>R.trackId===w);if(!A)throw new Error("The track is no longer available");const $=await n("list_assets",{book_id:t,browse_status:"ready",sort:"newest",offset:k,limit:100},{background:!0});if(!C()||E!==p.current)return;const T=e.parseAssets($);e.onAssets(T);const N=T.filter(R=>R.mediaUrl&&R.status==="ready"&&(A.kind==="audio"?R.type==="audio":R.type==="video"||R.type==="final")),M=h(h($)?.page);d(R=>({scope:o,trackId:w,items:I&&R?.scope===o&&R.trackId===w?[...R.items,...N]:N,offset:M?.hasMore===!0?k+100:null}))})}async function v(w){await g(async k=>{if(!r)throw new Error("The timeline is not ready");const I=await n("plan_sequence_edit",{book_id:t,source_surface:"ui",actor:"videobook-user",expected_revision:await rl(r),edits:[w]});if(wi(I),!k())return;const E=I.stages.find(T=>T.kind==="edit");if(!E||E.kind!=="edit")throw new Error("The timeline plan has no edit");const C=await n("preview_edit_intent",{book_id:t,intent:E.intent});if(!C.valid)throw new Error(C.conflicts.map(T=>T.message).join(" · ")||"The timeline changed. Try again.");if(!k())return;const A=h(await n("commit_edit_intent",{book_id:t,intent:E.intent,preview_hash:C.previewHash})),$=e.parseSequence(A?.sequence);if(!$)throw new Error("The server returned an invalid timeline");k()&&(e.onSequence($),d(null))})}async function S(w,k){await g(async I=>{const E=e.parseSequence(await n(w,{book_id:t,...k}));if(!E)throw new Error("The server returned an invalid timeline");I()&&e.onSequence(E)})}return{frame:l.sequenceId===c?l.frame:0,selectedClipId:l.sequenceId===c?l.selectedClipId:null,seek:m,selectClip:w=>u(k=>({sequenceId:c,frame:k.sequenceId===c?k.frame:0,selectedClipId:w})),busy:s.scope===o&&s.busy,error:s.scope===o?s.error:"",picker:f?.scope===o?f:null,openPicker:w=>y(w,0,!1),loadMore:()=>f?.offset!==null&&f?y(f.trackId,f.offset,!0):Promise.resolve(),closePicker:()=>{p.current+=1,d(null)},append:(w,k)=>v({kind:"append",track_id:w,artifact_id:k}),removeClip:w=>v({kind:"remove_clip",clip_id:w,ripple:!0}),addTrack:()=>S("add_sequence_track",{kind:"audio"}),removeTrack:w=>S("remove_sequence_track",{track_id:w})}}const Hr=te({timeSeconds:V().finite().nonnegative(),confidence:V().min(0).max(1).nullable()}),il=te({algorithmId:j().min(1),algorithmVersion:j().min(1),hopSeconds:V().finite().positive(),values:ae(V().finite().min(0).max(1)).max(2e4)}),sl=te({id:j().min(1).max(100),timeSeconds:V().finite().nonnegative().max(3600),quality:V().min(0).max(1)}),al=te({algorithmId:j().min(1),algorithmVersion:j().min(1),candidates:ae(sl).max(200)}),cl=te({analysisId:j(),artifactId:j().uuid(),objectHash:j(),streamId:j().uuid(),durationSeconds:V().finite().positive().max(3600),analyzerVersion:j(),beats:ae(Hr).max(24e3),bpm:V().finite().positive().nullable(),confidence:V().min(0).max(1).nullable(),bars:ae(Hr).max(24e3).nullable(),beatsPerBar:V().int().min(1).max(16).nullable(),barSource:Ze(["detected","estimated"]).nullable().default(null),waveform:ae(V().finite().min(0).max(1)).max(65536),lowConfidence:Te(),energy:il.nullable().default(null),sections:al.nullable().default(null)}),ll=["intro","verse","chorus","drop","break","bridge","outro"];te({schemaVersion:ii(1),analysisId:j(),artifactId:j().uuid(),objectHash:j(),streamId:j().uuid(),labeler:te({id:j(),version:j(),model:j()}),boundaries:te({algorithmId:j(),algorithmVersion:j()}),status:Ze(["ready","unavailable"]),reason:j().nullable().default(null),createdAt:V().finite().positive(),labels:ae(te({candidateId:j().min(1).max(100),label:Ze(ll),confidence:V().min(0).max(1),rationale:j().max(500)})).max(200).default([])});const ul=te({id:j().min(1).max(100),timeSeconds:V().finite().nonnegative().max(3600),bar:Te(),manual:Te()}),dl=te({masterClipId:j().uuid().nullable(),correction:te({objectHash:j(),analysisId:j().nullable(),markers:ae(ul).max(24e3),bpm:V().finite().min(20).max(400).nullable(),beatsPerBar:V().int().min(1).max(16).nullable()}).nullable()});function kn(e,t){const n=new Set(e.tracks.filter(o=>o.kind==="audio").map(o=>o.trackId)),r=e.clips.filter(o=>n.has(o.trackId)&&o.source.kind==="timed");return(t.masterClipId?r.find(o=>o.clipId===t.masterClipId):r.length===1?r[0]:null)??null}function fl(e,t,n){if(!e)return[];if(t.correction)return t.correction.objectHash===e.source.range.objectHash?t.correction.markers:[];if(!n||n.objectHash!==e.source.range.objectHash||n.streamId!==e.source.range.streamId)return[];const r=new Set(n.bars?.map(o=>Math.round(o.timeSeconds*1e6)));return n.beats.map((o,i)=>({id:`${n.analysisId.slice(0,12)}-${i}`,timeSeconds:o.timeSeconds,bar:r.has(Math.round(o.timeSeconds*1e6)),manual:!1}))}function ml(e,t){if(!e.length)return[];const n=t!==null&&Number.isFinite(t)&&t>0?60/t:null,r=[0];for(let o=1;o<e.length;o+=1){const i=e[o].timeSeconds-e[o-1].timeSeconds;r.push(r[o-1]+(n===null?1:Math.max(1,Math.round(i/n))))}return r}function L_(e,t,n,r){const o=[...e].sort((a,c)=>a.timeSeconds-c.timeSeconds),i=o.findIndex(a=>a.id===t);if(i<0||!Number.isInteger(n)||n<1||n>16)throw new Error("Choose a first bar beat and 1–16 beats per bar");const s=ml(o,r);return o.map((a,c)=>({...a,bar:(s[c]-s[i])%n===0,manual:!0}))}function Wr(e,t,n){const r=e.source.range,o=r.timeBase.numerator/r.timeBase.denominator,i=(t-e.timelineStartFrame)/n*e.speed.numerator/e.speed.denominator;return e.reverse?(r.startTick+r.durationTicks)*o-i:r.startTick*o+i}function pl(e,t,n){const r=e.source.range,o=r.timeBase.numerator/r.timeBase.denominator,i=e.reverse?(r.startTick+r.durationTicks)*o-t:t-r.startTick*o;return Math.round(e.timelineStartFrame+i*n*e.speed.denominator/e.speed.numerator)}function gl(e,t,n){if(!e||!e.enabled)return[];const r=n.frameRate.numerator/n.frameRate.denominator,o=e.source.range,i=o.timeBase.numerator/o.timeBase.denominator,s=o.startTick*i,a=(o.startTick+o.durationTicks)*i,c=new Set;return t.filter(l=>l.timeSeconds>=s&&l.timeSeconds<a).map(l=>({...l,frame:pl(e,l.timeSeconds,r)})).filter(l=>l.frame>=e.timelineStartFrame&&l.frame<e.timelineStartFrame+e.durationFrames).sort((l,u)=>l.frame-u.frame||Number(u.bar)-Number(l.bar)).filter(l=>c.has(l.frame)?!1:(c.add(l.frame),!0))}function F_(e,t,n,r=1/0){if(n==="off")return Math.round(e);let o=Math.round(e),i=r;for(const s of t){if(n==="bars"&&!s.bar)continue;const a=Math.abs(s.frame-e);(a<i||a===i&&s.frame<o)&&(o=s.frame,i=a)}return o}function D_(e,t,n,r,o=256){if(e.source.kind!=="timed"||!n||!t.length)return[];const i=e;return Array.from({length:o},(s,a)=>{const c=Wr(i,e.timelineStartFrame+a/o*e.durationFrames,r),l=Wr(i,e.timelineStartFrame+(a+1)/o*e.durationFrames,r),u=Math.max(0,Math.floor(Math.min(c,l)/n*t.length)),m=Math.min(t.length,Math.max(u+1,Math.ceil(Math.max(c,l)/n*t.length)));let f=0;for(let d=u;d<m;d++)f=Math.max(f,t[d]??0);return f})}const Kr={revision:"none",settings:{masterClipId:null,correction:null},canUndo:!1,canRedo:!1};function zr(e){const t=h(e);if(!t||typeof t.revision!="string")throw new Error("Invalid beat map response");return{revision:t.revision,settings:dl.parse(t.settings),canUndo:t.canUndo===!0,canRedo:t.canRedo===!0}}function Xr(e){const t=h(e);if(!t||typeof t.status!="string"||!["missing","queued","analyzing","ready","no-beats","cancelled","failed"].includes(t.status))throw new Error("Invalid music analysis response");return{status:t.status,analysisId:String(t.analysisId),jobId:typeof t.jobId=="number"?t.jobId:null,error:typeof t.error=="string"?t.error:null,analysis:t.analysis?cl.parse(t.analysis):null}}function V_({bookId:e,ready:t,sequence:n,call:r,onSequence:o}){const i=`${e}:${n?.sequenceId??""}`,s=_.useRef(0),[a,c]=_.useState({scope:i,rhythm:Kr,analysis:null}),[l,u]=_.useState({scope:i,busy:!1,error:""});_.useEffect(()=>()=>{s.current+=1},[i]);const m=a.scope===i?a.rhythm:Kr,f=n?kn(n,m.settings):null,d=a.scope===i&&a.analysis?.analysis?.artifactId===f?.source.artifactId?a.analysis?.analysis??null:null,p=_.useMemo(()=>fl(f,m.settings,d),[f,m.settings,d]),g=_.useMemo(()=>n?gl(f,p,n):[],[f,p,n]),y=a.scope===i?a.analysis?.status??"missing":"missing";async function v(A,$=n){if(!$)return null;const T=kn($,A);return T?Xr(await r("get_music_analysis",{book_id:e,asset_id:T.source.artifactId,stream_id:T.source.range.streamId},{background:!0})):null}function S(A,$){const T=kn($,A.settings)?.source;c(N=>{const M=N.scope===i?N.analysis:null,R=M?.analysis&&T&&M.analysis.artifactId===T.artifactId&&M.analysis.objectHash===T.range.objectHash&&M.analysis.streamId===T.range.streamId;return{scope:i,rhythm:A,analysis:R?M:null}})}async function w(A,$,T){for(;A===s.current;){if(c({scope:i,rhythm:$,analysis:T}),u({scope:i,busy:!1,error:""}),T?.status!=="queued"&&T?.status!=="analyzing"||(await new Promise(N=>setTimeout(N,1e3)),A!==s.current))return;T=await v($.settings)}}async function k(){if(!t||!n)return;const A=++s.current;u({scope:i,busy:!0,error:""});try{const $=zr(await r("get_sequence_rhythm",{book_id:e,sequence_id:n.sequenceId},{background:!0}));if(A!==s.current)return;S($,n);const T=await v($.settings);await w(A,$,T)}catch($){A===s.current&&u({scope:i,busy:!1,error:$ instanceof Error?$.message:String($)});return}A===s.current&&u({scope:i,busy:!1,error:""})}async function I(A,$=n){if(!t||!$)return;const T=++s.current;u({scope:i,busy:!0,error:""});try{const N=h(await r("update_sequence_rhythm",{book_id:e,sequence_id:$.sequenceId,expected_revision:m.revision,operation:typeof A=="string"?A:"set",...typeof A=="string"?{}:{settings:A}},{background:!0}));if(T!==s.current)return;const M=zr(N?.state);S(M,$),o(N?.sequence);const R=await v(M.settings,$);await w(T,M,R)}catch(N){T===s.current&&u({scope:i,busy:!1,error:N instanceof Error?N.message:String(N)});return}T===s.current&&u({scope:i,busy:!1,error:""})}async function E(A=!1){if(!t||!f)return;const $=++s.current;u({scope:i,busy:!0,error:""});const T={book_id:e,asset_id:f.source.artifactId,stream_id:f.source.range.streamId};try{const N=Xr(await r("analyze_music",{...T,force:A},{background:!0}));await w($,m,N)}catch(N){$===s.current&&u({scope:i,busy:!1,error:N instanceof Error?N.message:String(N)})}}async function C(){if(!(!t||a.scope!==i||!a.analysis?.jobId)){s.current+=1;try{await r("cancel_job",{book_id:e,job_id:a.analysis.jobId},{background:!0}),await k()}catch(A){u({scope:i,busy:!1,error:A instanceof Error?A.message:String(A)})}}}return{rhythm:m,master:f,analysis:d,markers:p,mapped:g,status:y,load:k,save:I,analyze:E,cancel:C,stop:()=>{s.current+=1},busy:!t||l.scope===i&&l.busy,error:l.scope===i&&(l.error||a.analysis?.error)||""}}const Un=[{kind:"cell.outputArtifact",one:"notebook cell",many:"notebook cells"},{kind:"cell.reference",one:"cell reference",many:"cell references"},{kind:"sequenceClip",one:"sequence clip",many:"sequence clips"},{kind:"pinnedSearchResult",one:"pinned result",many:"pinned results"},{kind:"stream",one:"media stream",many:"media streams"},{kind:"transcript",one:"transcript",many:"transcripts"},{kind:"captionCue",one:"caption cue",many:"caption cues"}];function hl(e,t){const n=Un.find(r=>r.kind===e);return n?`${t} ${t===1?n.one:n.many}`:`${t} ${e}`}function bl(e){return e.length<=1?e[0]??"":`${e.slice(0,-1).join(", ")} and ${e[e.length-1]}`}function yl(e){const t=new Map;for(const o of e)t.set(o.kind,(t.get(o.kind)??0)+1);const r=[...Un.filter(o=>t.has(o.kind)).map(o=>o.kind),...[...t.keys()].filter(o=>!Un.some(i=>i.kind===o))].map(o=>hl(o,t.get(o)??0));return r.length>0?bl(r):"something else in this book"}function _l(e){if(!Number.isFinite(e)||e<=0)return"0 B";const t=["B","KB","MB","GB","TB"],n=Math.min(t.length-1,Math.floor(Math.log(e)/Math.log(1024))),r=e/1024**n;return`${n===0||r>=100?Math.round(r):Math.round(r*10)/10} ${t[n]}`}function j_(e,t){const n=[t.reclaimedBytes>0?`${_l(t.reclaimedBytes)} reclaimed`:"",t.sharedObjects>0?`${t.sharedObjects} file${t.sharedObjects===1?"":"s"} kept for another asset`:"",t.clearedCells>0?`cleared ${t.clearedCells} cell${t.clearedCells===1?"":"s"}`:""].filter(r=>r!=="");return n.length>0?`Forgot ${e} · ${n.join(" · ")}`:`Forgot ${e}`}function G_(e){return`Forget ${e}?
8
-
9
- This deletes the asset and destroys its stored content. Files shared with another asset are kept. This cannot be undone.`}function q_(e,t){return`${e} is still used by ${yl(t)}.
10
-
11
- Clear those references and forget it anyway?`}const vl=[{label:"no people",aliases:["empty","unpopulated","nobody","no one"]},{label:"solo subject",aliases:["one person","single person","solo","individual"]},{label:"two people",aliases:["pair","couple","duo","two subjects"]},{label:"small group",aliases:["group","three people","few people","small gathering"]},{label:"crowd",aliases:["crowded","many people","audience","large group"]},{label:"interviewer",aliases:["questioner"]},{label:"interviewee",aliases:["subject being interviewed","respondent"]},{label:"presenter",aliases:["host"]}],kl=[{label:"interior",aliases:["indoors","inside","indoor"]},{label:"exterior",aliases:["outdoors","outside","outdoor"]},{label:"day",aliases:["daytime","daylight","morning","afternoon"]},{label:"night",aliases:["nighttime","after dark","evening"]},{label:"kitchen",aliases:["galley"]},{label:"street",aliases:["sidewalk","roadside","city street"]},{label:"studio",aliases:["soundstage"]},{label:"office",aliases:["workplace"]},{label:"bedroom",aliases:[]},{label:"living room",aliases:["lounge"]},{label:"restaurant",aliases:["cafe","diner","bar"]},{label:"store",aliases:["shop","market","supermarket"]},{label:"car",aliases:["vehicle interior"]},{label:"beach",aliases:["shore","seaside"]},{label:"park",aliases:["garden"]},{label:"forest",aliases:["woods","woodland"]},{label:"stage",aliases:["venue","concert stage"]},{label:"gym",aliases:["fitness studio"]},{label:"rooftop",aliases:["roof"]}],wl=[{label:"wide shot",aliases:["wide","long shot","full shot","establishing wide"]},{label:"medium shot",aliases:["medium","mid shot","waist up"]},{label:"close-up",aliases:["close up","closeup","tight shot","cu"]},{label:"extreme close-up",aliases:["extreme close up","extreme closeup","macro shot"]},{label:"establishing shot",aliases:["establishing","scene setter"]},{label:"insert",aliases:["insert shot","cutaway","detail shot"]},{label:"product shot",aliases:["product","packshot"]},{label:"static",aliases:["locked off","tripod","still camera","fixed camera"]},{label:"pan",aliases:["panning","whip pan"]},{label:"tilt",aliases:["tilting"]},{label:"handheld",aliases:["hand held","shaky","run and gun"]},{label:"tracking",aliases:["dolly","steadicam","follow shot","tracking shot"]},{label:"interview",aliases:["sit down interview"]},{label:"talking head",aliases:[]},{label:"dialogue",aliases:["conversation","speech","talking"]},{label:"ambience",aliases:["ambient","room tone","atmosphere","background sound"]},{label:"music",aliases:["musical","score","soundtrack"]},{label:"voiceover",aliases:["voice over","narration","narrator"]}],Sl={people:vl,places:kl,editing:wl,custom:[]},Yr=new Set(["beautiful","stunning","amazing","gorgeous","great","good","nice","cool","epic","dramatic","moody","vibe","vibes","aesthetic","mood","cinematic","masterpiece","high quality","professional","hd","4k","video","footage","clip","content","scene","shot","media","image","photo","picture","frame","camera","misc","other","general","interesting","modern","classic","colorful","bright","dark","atmospheric","emotional","energetic","calm","peaceful","happy","sad"]);function Si(e){return e.normalize("NFKC").toLowerCase().replace(/[_/]+/gu," ").replace(/[^\p{L}\p{N}\s-]+/gu,"").replace(/\s+/gu," ").trim()}const Il=new Map(Object.entries(Sl).flatMap(([e,t])=>t.flatMap(n=>[n.label,...n.aliases].map(r=>[`${e}:${Si(r)}`,{facet:e,label:n.label}]))));function Ii(e,t=[]){const n=Ks(e.label),r=Ut(n),o=e.facet?[e.facet]:["people","places","editing"];for(const s of o){const a=Al(s,n);if(a)return{...a,label:Ut(a.label)===r?n:a.label}}const i=!e.facet&&t.find(s=>Ut(s.label)===r);return{facet:e.facet??(i?i.facet:"custom"),label:n}}function xl(e){if(Yr.has(e))return!1;const t=e.split(" ");return t.length===0||t.length>2?!1:t.every(n=>n.length>=3&&n.length<=20&&/^[\p{L}-]+$/u.test(n)&&!Yr.has(n)&&!["not","without","never","maybe","possibly"].includes(n))}function Al(e,t,n={}){const r=Si(t);if(!r||r.length>40)return null;const o=Il.get(`${e}:${r}`);return o||(n.allowUnlisted&&e==="places"&&xl(r)?{facet:e,label:r}:null)}const El={effective:[],manual:[],automatic:[],dismissed:[],analysis:null,fingerprint:""};function fr(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)?e:null}function Re(e){return typeof e=="string"&&e.trim()?e:null}function Cl(e){return typeof e=="string"&&Qo.includes(e)?e:null}function Ht(e){const t=fr(e),n=Cl(t?.facet),r=Re(t?.key),o=Re(t?.label);return!t||!n||!r||!o?null:{facet:n,key:r,label:o,origin:t.origin==="automatic"?"automatic":"manual",entityId:Re(t.entity_id??t.entityId)}}function Ml(e){const t=Ht(e);return t?{facet:t.facet,key:t.key,label:t.label}:null}function Rt(e,t){return Array.isArray(e)?e.flatMap(n=>{const r=t(n);return r?[r]:[]}):[]}function Tl(e){const t=fr(e),n=Re(t?.source_hash??t?.sourceHash),r=Re(t?.generator),o=Re(t?.extractor_version??t?.extractorVersion);if(!t||!n||!r||!o)return null;const i=Number(t.tag_count??t.tagCount),s=Number(t.analyzed_at??t.analyzedAt);return{sourceHash:n,generator:r,model:Re(t.model),extractorVersion:o,tagCount:Number.isFinite(i)?i:0,analyzedAt:Number.isFinite(s)?s:0,stale:t.stale===!0}}function xi(e){const t=fr(e);return t?{effective:Rt(t.effective,Ht),manual:Rt(t.manual,Ht),automatic:Rt(t.automatic,Ht),dismissed:Rt(t.dismissed,Ml),analysis:Tl(t.analysis),fingerprint:Re(t.fingerprint)??""}:null}function wn(e){const t=new Map(Qo.map((n,r)=>[n,r]));return[...e].sort((n,r)=>(t.get(n.facet)??0)-(t.get(r.facet)??0)||n.label.localeCompare(r.label))}function Ai(e,t){return`${e}/${t}`}function Rl(e){return e.trim()?Ut(e):""}function le(e){return Ai(e.facet,e.key)}function U_(e){return e.origin==="manual"?"Added by you":"From analysis"}function Be(e,t){return e.filter(n=>le(n)!==t)}function Jr(e,t,n){const r=e??El;if(!t.label.trim())return r;t=Ii(t,[...r.effective,...r.dismissed]);const o=Rl(t.label);if(!o)return r;const i=t.facet??"custom",s=Ai(i,o);if(n==="add"){if(r.manual.some(u=>le(u)===s))return r;const l={facet:i,key:o,label:t.label.trim(),origin:"manual",entityId:null};return{...r,dismissed:Be(r.dismissed,s),manual:wn([...r.manual,l]),effective:wn([...Be(r.effective,s),l])}}if(n==="remove"){const l=r.effective.find(m=>le(m)===s);if(!l)return r;const u=[{facet:l.facet,key:l.key,label:l.label}];return{...r,effective:Be(r.effective,s),manual:Be(r.manual,s),dismissed:[...Be(r.dismissed,s),...u]}}if(!r.dismissed.find(l=>le(l)===s))return r;const c=r.automatic.find(l=>le(l)===s);return{...r,dismissed:Be(r.dismissed,s),effective:c?wn([...r.effective,c]):r.effective}}function B_(e,t){const n=le(t);return e.some(o=>le(o)===n)?e.filter(o=>le(o)!==n):[...e,t]}function H_(e){return{facet:e.facet,key:e.key,label:e.label}}function W_(e){return e.length===0?{}:{tags_all:e.map(t=>({facet:t.facet,label:t.label}))}}function K_(e,t){if(e.length!==t.length)return!1;const n=new Set(e.map(le));return t.every(r=>n.has(le(r)))}function $l(e,t,n=8){const r=new Set(t.map(le));return e.filter(o=>!r.has(le(o))).slice(0,n)}const z_={calls:[]},X_=420,Zr=140,Qr=400,Nl={chat:"Routing chat",chain:"Running chained actions",list_chat_models:"Loading chat models",list_prompt_history:"Loading prompt history",plan_chat_command:"Planning chat command",record_prompt:"Saving prompt",slash_commands:"Loading commands"},Pl=new Set(["get_notebook","list_chat_models","list_jobs","list_prompt_history","list_workspace_actions","slash_commands"]);function Y_(e){return!Pl.has(e)}function J_(e){const t=Nl[e];return t||e.split("_").filter(Boolean).map(n=>n[0]?.toUpperCase()+n.slice(1)).join(" ")}function Jt(e,t){const n=e.replace(/\s+/g," ").trim();return n.length<=t?n:`${n.slice(0,t)}… (${n.length} chars)`}function Ol(e){if(typeof e=="string")return Jt(e,Zr);if(typeof e=="number"||typeof e=="boolean")return String(e);try{return Jt(JSON.stringify(e)??String(e),Zr)}catch{return String(e)}}function Z_(e){return Object.entries(e).filter(([,t])=>t!=null&&t!=="").map(([t,n])=>({name:t,value:Ol(n)}))}function Q_(e){if(typeof e=="string")return Jt(e,Qr);if(Array.isArray(e))return e.length===1?"1 item":`${e.length} items`;if(!e||typeof e!="object")return"";const t=e;for(const n of["message","error","status"])if(typeof t[n]=="string"&&t[n])return Jt(t[n],Qr);return""}function Ll(e){const t=Math.max(0,e);return t<1e3?`${Math.round(t)}ms`:t<6e4?`${(t/1e3).toFixed(1)}s`:`${Math.floor(t/6e4)}m ${Math.round(t%6e4/1e3)}s`}function ev(e){return e.phase==="running"?"working":e.phase==="failed"?"failed":Ll(e.elapsedMs)}function tv(e,t){const n={id:t.id,...t.turnId===void 0?{}:{turnId:t.turnId},tool:t.tool,args:t.args,phase:"running",elapsedMs:0,detail:"",expanded:!1};return{calls:[...e.calls,n].slice(-256)}}function nv(e,t,n){return e.calls.some(r=>r.id===t)?{calls:e.calls.map(r=>r.id===t?{...r,phase:n.phase,elapsedMs:n.elapsedMs,detail:n.detail}:r)}:e}function rv(e,t){return e.calls.some(n=>n.id===t)?{calls:e.calls.map(n=>n.id===t?{...n,expanded:!n.expanded}:n)}:e}function ov(e){return e.calls.filter(t=>t.phase==="running").length}function iv(e){switch(e){case"connecting":return"Opening your voice channel…";case"listening":return"Listening… speak anytime.";case"thinking":return"Transcribing…";case"speaking":return"Waiting for captions…";case"review":return"Review is on screen.";case"error":return"No captions. Voice could not connect.";case"off":return"No captions this session."}}function sv(e,t){const n=new Map(e.map(i=>[ue(i.slot),i])),r=new Map(t.map(i=>[i.artifactId,i])),o=new Map;for(let i=0;i<de;i+=1)for(let s=0;s<X;s+=1){const a=ue({row:i,column:s}),c=n.get(a),l=c?.outputArtifactId?r.get(c.outputArtifactId)??null:null,u=c?.label?.trim()||l?.label?.trim()||null;o.set(a,{token:a,cellId:c?.id??null,label:u===l?.artifactId?null:u,type:l?.type??c?.type??"empty",status:l?.status??(c?.outputArtifactId?"missing":c?.status??(c?"":"empty")),asset:l})}return o}function av(e){if(e.type==="empty")return"Empty grid square";const t=[e.type.replaceAll("_"," ").toUpperCase()],n=e.asset?.duration;return n&&Number.isFinite(n)&&n>0&&t.push(me(n)),e.status&&e.status!=="ready"&&t.push(e.status.replaceAll("_"," ")),t.join(" · ")}function Ei(e,t=e.length,n=t){if(t!==n)return null;const r=sn(e.slice(0,t));if(r===void 0)return null;let o=t;for(;o<e.length&&/[a-z0-9]/iu.test(e[o]);)o+=1;return{start:t-r.length-1,end:o,prefix:r}}function cv(e,t,n=t.length,r=n,o){const i=Ei(t,n,r);return i?[...e.values()].filter(s=>s.token.slice(1).includes(i.prefix)&&(!o||!!(s.asset&&o.has(s.asset.artifactId)))).slice(0,12):[]}function lv(e,t,n=e.length,r=n){const o=Ei(e,n,r);if(!o)return null;const i=`@${ke(t)}`,s=e.slice(o.end),a=!s||/^[\p{L}\p{N}@]/u.test(s)?" ":"";return{value:`${e.slice(0,o.start)}${i}${a}${s}`,caret:o.start+i.length+(a||s.startsWith(" ")?1:0)}}function uv(e,t,n){const r=t&&n?t/n:1.7777777777777777,[o=1,i=1]=e.split(":").map(Number),s=o/i,a=Math.min(1,s/r),c=Math.min(1,r/s);return{ratio:e,x:(1-a)/2,y:(1-c)/2,w:a,h:c}}function dv(e){return e.handler.kind==="tool"&&["list_entities","list_notebooks","asset_history","list_book_actions","search_archive"].includes(e.handler.tool)}function mr(e){return e!==null&&typeof e=="object"&&!Array.isArray(e)?e:null}function fv(e){const t=mr(e);if(!Array.isArray(t?.actions)||!Array.isArray(t.tools))throw new Error("The action catalog could not be loaded. Reconnect and try again.");return e}function mv(e,t){const n=new Set(e.flatMap(i=>[i.command,...i.aliases]).map(i=>i.toLowerCase())),r=t.filter(i=>i.category!=="project"||!n.has(i.command.toLowerCase())),o=new Set(r.flatMap(i=>[i.command,...i.aliases??[]]).map(i=>i.toLowerCase()));return[...r,...e.filter(i=>!o.has(i.command.toLowerCase())).map(i=>({command:i.command,description:i.description,aliases:i.aliases,workspaceActionId:i.id,category:"action",icon:"Play",size:"default",variant:"default",chevron:"right",params:Object.entries(i.inputSchema.properties??{}).filter(([s])=>s!=="book_id").map(([s,a])=>({name:s,description:a.description??Fl(s),required:i.inputSchema.required?.includes(s)??!1,type:a.type==="number"||a.type==="integer"?"number":a.type==="boolean"?"boolean":"string"}))}))]}function pv(e,t){return t?[...e,...["apply","cancel"].map(n=>({command:`/${n}`,description:n==="apply"?"Apply the reviewed action":"Cancel the pending action",category:"action",icon:n==="apply"?"Check":"X",size:"default",variant:"default",chevron:"right",params:[]}))]:[...e]}function Fl(e){const t=e.replace(/([a-z])([A-Z])/gu,"$1 $2").replaceAll(/[_-]/gu," ").replace(/\b(?:artifact|asset) (?:id|ref)\b/gu,"media").replace(/\bbook id\b/gu,"project").replace(/\b(notebook|cell|clip|track|entity) id\b/gu,"$1").replace(/\brefs\b/gu,"references").replace(/\bdb\b/gu,"dB");return t.charAt(0).toUpperCase()+t.slice(1)}function Ci(e){const t=e.oneOf??e.anyOf;return t?t.flatMap(n=>{const r=Ci(n);return r.length?r:[n]}):[]}function Dl(e,t){if("const"in e)return e.const===t;if(e.enum)return e.enum.includes(t);if(e.type==="null")return t===null;if(e.type==="array")return Array.isArray(t);if(e.type==="object"){const n=mr(t);return n?Object.entries(e.properties??{}).every(([r,o])=>!("const"in o)||o.const===n[r]):!1}return e.type==="integer"?Number.isInteger(t):!e.type||typeof t===e.type}function Vl(e,t){const n=Ci(e);if(!n.length)return e;const r=n.find(a=>Dl(a,t))??n.find(a=>a.type!=="null")??n[0],{anyOf:o,oneOf:i,...s}=e;return{...s,...r}}function Bn(e,t=!1){if("const"in e)return e.const;if(e.default!==void 0)return structuredClone(e.default);if(!t)return;const n=Vl(e,void 0);if("const"in n)return n.const;if(n.type==="object"){const r=new Set(n.required??[]);return Object.fromEntries(Object.entries(n.properties??{}).map(([o,i])=>[o,Bn(i,r.has(o))]).filter(([,o])=>o!==void 0))}if(n.type==="array")return Array.from({length:n.minItems??0},()=>Bn(n.items??{},!0));if(n.enum?.length===1)return n.enum[0];if(n.type==="boolean")return!1;if(n.type==="null")return null}function gv(e,t){const n=mr(Bn(e.inputSchema,!0))??{},r=e.inputSchema.properties??{},o={...n,...e.initialArgs};r._provider&&e.generation&&(o._provider=e.generation.provider);for(const[i,s]of[["book_id",t.bookId],["notebook_id",t.notebookId],["sequence_id",t.sequenceId],["cell_id",t.cellId],["base_revision",t.sequenceRevision],["sequence_revision",t.sequenceRevision],["source_surface","ui"],["actor","videobook-user"]])s&&r[i]&&(o[i]=s);if(e.target.kind==="asset"&&e.target.argument&&t.assetId){const i=t.choices.asset_id?.find(s=>s.value===t.assetId)?.detail;(!e.target.mediaKinds||e.target.mediaKinds.some(s=>s===i))&&(o[e.target.argument]=e.target.multiple?t.assetIds??[t.assetId]:t.assetId)}return e.target.kind==="cell"&&e.target.multiple&&e.target.argument&&t.cellIds?.length&&(o[e.target.argument]=t.cellIds),e.target.kind==="cell"&&!e.target.multiple&&e.target.argument&&t.cellId&&(o[e.target.argument]=t.cellId),r.object_hash&&t.assetId&&t.media?.[t.assetId]?.objectHash&&(o.object_hash=t.media[t.assetId].objectHash),o}function hv(e,t){return e.scope!=="global"&&!t.bookId?"Open or create a project first.":e.scope==="notebook"&&!t.notebookId?"Open a notebook first.":e.scope==="sequence"&&!t.sequenceId?"Open a project with a sequence first.":null}function bv(e,t){const n=t.trim().toLowerCase().replace(/^\//u,"").split(/\s+/u).filter(Boolean);return e.filter(r=>{const o=[r.title,r.command,r.description,r.group,...r.aliases,...r.keywords].join(" ").toLowerCase();return n.every(i=>o.includes(i))}).sort((r,o)=>{const i=s=>[s.command,...s.aliases].some(a=>a.replace(/^\//u,"").toLowerCase()===n.join(" "));return Number(i(o))-Number(i(r))||r.group.localeCompare(o.group)||r.title.localeCompare(o.title)})}const $t=new zs({nodes:{doc:{content:"inline*"},text:{group:"inline"},reference:{inline:!0,group:"inline",atom:!0,selectable:!0,attrs:{token:{}},leafText:e=>String(e.attrs.token),toDOM:e=>["span",{"data-reference":String(e.attrs.token),contenteditable:"false"},String(e.attrs.token)],parseDOM:[{tag:"span[data-reference]",getAttrs:e=>{const t=e.getAttribute("data-reference")??"";return ei(t)?{token:t}:!1}}]}}});function jl(e,t=!0){const n=[];let r=0;if(t)for(const o of ar(e))o.index>r&&n.push($t.text(e.slice(r,o.index))),n.push($t.nodes.reference.create({token:o.raw})),r=o.end;return r<e.length&&n.push($t.text(e.slice(r))),$t.nodes.doc.create(null,n)}function eo(e,t=0,n=e.content.size){return e.textBetween(t,n,"",r=>String(r.attrs.token??""))}function yv(e,t,n){return{start:eo(e,0,Math.min(t,n)).length,end:eo(e,0,Math.max(t,n)).length,backward:t>n}}function to(e,t,n=1){let r=0,o=e.content.size;return e.forEach((i,s)=>{const a=i.isText?i.text.length:String(i.attrs.token??"").length;t>=r&&t<=r+a&&(o=i.isText?s+t-r:t===r||t<r+a&&n<0?s:s+i.nodeSize),r+=a}),Math.max(0,Math.min(e.content.size,o))}function Gl(e,t,n=1){const r=to(e.doc,t.start,t.start===t.end?n:-1),o=to(e.doc,t.end,n);return e.setSelection(Xs.create(e.doc,t.backward?o:r,t.backward?r:o))}function _v(e,t,n,r=!0){const o=jl(t,r),i=e.doc.content.findDiffStart(o.content);if(i!==null){const s=e.doc.content.findDiffEnd(o.content),a=Math.max(0,i-Math.min(s.a,s.b));e.replaceWith(i,s.a+a,o.content.cut(i,s.b+a))}return Gl(e,n)}function Nt(e,t,n,r){const o=e.slice(0,t)+r+e.slice(n),i=t+r.length;return{value:o,selectionStart:i,selectionEnd:i}}function no(e,t){return e.lastIndexOf(`
12
- `,Math.max(0,t-1))+1}function ro(e,t){const n=e.indexOf(`
13
- `,t);return n===-1?e.length:n}function oo(e,t){let n=t;for(;n>0&&/\s/.test(e[n-1]);)n-=1;for(;n>0&&!/\s/.test(e[n-1]);)n-=1;return n}function ql(e,t){let n=t;for(;n<e.length&&/\s/.test(e[n]);)n+=1;for(;n<e.length&&!/\s/.test(e[n]);)n+=1;return n}function vv(e){const{value:t,selectionStart:n,selectionEnd:r,key:o,ctrlKey:i,altKey:s,yankText:a}=e,c=o.toLowerCase();if(s&&c==="b"){const l=oo(t,n);return{value:t,selectionStart:l,selectionEnd:l}}if(s&&c==="f"){const l=ql(t,r);return{value:t,selectionStart:l,selectionEnd:l}}if(!i)return null;if(c==="a"){const l=no(t,n);return{value:t,selectionStart:l,selectionEnd:l}}if(c==="e"){const l=ro(t,r);return{value:t,selectionStart:l,selectionEnd:l}}if(c==="b"){const l=Math.max(0,n-1);return{value:t,selectionStart:l,selectionEnd:l}}if(c==="f"){const l=Math.min(t.length,r+1);return{value:t,selectionStart:l,selectionEnd:l}}if(c==="y")return Nt(t,n,r,a);if(c==="k"){const l=n===r?Math.min(t.length,ro(t,r)+1):r;return{...Nt(t,n,l,""),killedText:t.slice(n,l)}}if(c==="u"){const l=n===r?no(t,n):n;return{...Nt(t,l,r,""),killedText:t.slice(l,r)}}if(c==="w"){const l=n===r?oo(t,n):n;return{...Nt(t,l,r,""),killedText:t.slice(l,r)}}return null}const Mi="videobook.elevenlabs-voice",Ul="/speak ";function Bl(e){return/^\/speak(\s|$)/.test(e)}function kv(e,t){return t&&e.some(n=>n.voiceId===t)?t:e[0]?.voiceId??""}function io(e,t,n){if(e.length===0)return t;const r=e.findIndex(s=>s.voiceId===t),i=((r<0?0:r)+n+e.length)%e.length;return e[i].voiceId}function wv(){return typeof window>"u"?null:window.localStorage.getItem(Mi)}function Sv(e){typeof window>"u"||!e||window.localStorage.setItem(Mi,e)}function Iv(e,t,n){return e.key==="ArrowDown"?{type:"select",voiceId:io(t,n,1)}:e.key==="ArrowUp"?{type:"select",voiceId:io(t,n,-1)}:e.key==="Tab"?n?{type:"select",voiceId:n}:{type:"ignore"}:e.ctrlKey&&e.code==="Space"?{type:"toggle"}:e.key==="Escape"?{type:"dismiss"}:{type:"ignore"}}function xv(e,t){if(!(!Bl(e)||!t))return{speakVoiceId:t}}function Av(e){if(e.command==="/voices")return{kind:"prefill",nextInput:Ul,message:"Choose a voice, then type the speech text."};if(!e.hasNotebook)return{kind:"error",message:"Open a notebook before speaking."};const t=e.text.trim(),n=e.voiceId?.trim()??"";return t?n?{kind:"generate",text:t,voiceId:n}:{kind:"error",message:"Select a voice before speaking."}:{kind:"error",message:"Type the text to speak after /speak."}}function Ev(e,t){const n=e.trim().toLowerCase();return t.some(r=>[r.label,...r.aliases??[]].some(o=>o.toLowerCase()===n))}function Cv(e,t,n=Number.POSITIVE_INFINITY){const r=t.toLowerCase(),o=e.filter(s=>[s.command,...s.aliases??[],s.description??""].join(" ").toLowerCase().includes(r)).sort((s,a)=>{const c=l=>[l.command,...l.aliases??[]].some(u=>u.slice(1).toLowerCase()===r);return Number(c(a))-Number(c(s))});if(r)return o.slice(0,n);const i=o.find(s=>s.command==="/download");return i?[i,...o.filter(s=>s!==i)].slice(0,n):o.slice(0,n)}function Mv(e){const t=e.match(/^\s*\/apply(?:\s+([\s\S]*?))?\s*$/iu);return t?{promptOverride:(t[1]?.trim()??"")||null}:null}function Tv(e,t){const n=e.nextInput??(e.ok?void 0:t);return n===void 0?null:{value:n,select:e.selectInput??!e.ok}}function Rv(e,t){return t.ok?e.trim().toLowerCase()==="/cancel"?{status:"cancelled",message:t.message}:t.nextInput?.startsWith("/apply")?{status:"review",message:t.message}:{status:/queued|started|running|processing/i.test(t.message)?"queued":"completed",message:t.message}:{status:"review",message:t.message}}const Wt="videobook.composer-drafts.v1",Hl=50,Ti=1e6;function Ri(e){const t=[],n=new Set;let r=0;for(const o of[...e].reverse()){if(!Array.isArray(o)||o.length!==2)continue;const[i,s]=o;if(!(typeof i!="string"||!i.startsWith("chat:")||i.length<=5||i.length>128||n.has(i))&&(n.add(i),!(typeof s!="string"||!s||r+s.length>Ti)&&(t.push([i,s]),r+=s.length,t.length===Hl)))break}return t.reverse()}function $v(){if(typeof window>"u")return new Map;try{const e=window.sessionStorage.getItem(Wt);if(!e||e.length>Ti*6+1e4)return new Map;const t=JSON.parse(e);return new Map(Array.isArray(t)?Ri(t):[])}catch{return new Map}}function Nv(e,t,n){if(typeof window>"u")return;const r=new Map(e);r.delete(t),r.set(t,n);const o=Ri([...r]);try{o.length===0?window.sessionStorage.removeItem(Wt):window.sessionStorage.setItem(Wt,JSON.stringify(o))}catch{try{window.sessionStorage.removeItem(Wt)}catch{return}}}const so=new WeakMap,dn='.command-composer [aria-label="Videobook command input"]',$i='input:not([type="file"]), textarea, select, [contenteditable="true"], video[controls], audio[controls]',Wl='dialog[open], :popover-open, [aria-modal="true"], [role="menu"], details.canvas-add-menu[open]';function nt(e){const t=so.get(e);if(t)return t;const n={epoch:0,scope:"",enabled:!1,composerOwnedFocus:!1,modality:"initial",pending:null,frame:null};return so.set(e,n),n}function Kl(e,t){const n=t.pending;if(!n)return;const r=n.resolve();if(!(!t.enabled&&(!(r instanceof HTMLElement)||r.closest(".command-composer")))&&(t.pending=null,!(n.epoch!==t.epoch||n.scope!==t.scope)&&!(!r||e.visibilityState==="hidden"))){if(r instanceof HTMLElement){if(!r.isConnected||r.matches(':disabled, [aria-disabled="true"]')||r.closest("[inert], [hidden]"))return;const o=[...e.querySelectorAll(Wl)].at(-1);if(o&&!o.contains(r))return;const i=e.activeElement;if(i&&i!==r&&i.matches($i)&&!i.closest("[hidden], [inert]")||o&&i instanceof Element&&o.contains(i)&&!i.closest(".command-composer")&&i!==r)return}r.focus({preventScroll:!0}),n.afterFocus?.()}}function pr(e,t){t.frame!==null&&e.defaultView?.cancelAnimationFrame(t.frame),t.frame=e.defaultView?.requestAnimationFrame(()=>{t.frame=null,Kl(e,t)})??null}function Hn(e,t){t.pending={epoch:t.epoch,scope:t.scope,resolve:()=>e.querySelector(dn)},pr(e,t)}function fn(e=()=>document.querySelector(dn),t){const n=document,r=nt(n),o={epoch:r.epoch,scope:r.scope,resolve:e,afterFocus:t};return()=>{r.epoch!==o.epoch||r.scope!==o.scope||(r.pending=o,pr(n,r))}}function Pv(){return nt(document).modality==="pointer"?fn():()=>{}}function Ov(e){const t=nt(document).modality==="pointer",n=!!e?.closest(".command-composer");return fn(()=>{const r=document.querySelector(dn);return!(t||n||e===document.body||!e?.isConnected)||!r||r.closest("[hidden]")?e:r.matches('[aria-disabled="true"]')?r.closest(".command-composer")?.querySelector('button[aria-label="Open actions"]:not(:disabled)')??null:r})}function Lv(e,t){const n=ne.c(5);let r;n[0]===Symbol.for("react.memo_cache_sentinel")?(r=[],n[0]=r):r=n[0],_.useLayoutEffect(zl,r);let o,i;n[1]!==t||n[2]!==e?(o=()=>{const s=nt(document),a=s.scope!==e,c=!s.enabled&&t;if(s.scope=e,s.enabled=t,a&&(s.pending=null),!!t){if(s.pending){pr(document,s);return}if(a||c){if(c&&s.composerOwnedFocus&&s.modality!=="touch"&&document.activeElement===document.body){Hn(document,s);return}s.modality==="initial"&&document.activeElement!==document.body||s.modality!=="initial"&&!(a&&s.modality==="pointer")||window.matchMedia("(pointer: fine)").matches&&Hn(document,s)}}},i=[t,e],n[1]=t,n[2]=e,n[3]=o,n[4]=i):(o=n[3],i=n[4]),_.useLayoutEffect(o,i)}function zl(){const e=nt(document),t=()=>{e.epoch=e.epoch+1,e.pending=null},n=s=>{t(),e.modality=s.pointerType==="touch"?"touch":"pointer"},r=()=>{t(),e.modality="keyboard"},o=s=>{const a=s.target;e.composerOwnedFocus=a instanceof Element&&a.matches(dn)},i=s=>{if(s.detail===0||e.modality!=="pointer")return;const a=s.target;!(a instanceof Element)||a.closest($i)||a.closest("[data-composer-focus]")?.getAttribute("data-composer-focus")==="return"&&Hn(document,e)};return document.addEventListener("pointerdown",n,!0),document.addEventListener("keydown",r,!0),document.addEventListener("focusin",o,!0),document.addEventListener("click",i,!0),document.defaultView?.addEventListener("blur",t),()=>{t(),document.removeEventListener("pointerdown",n,!0),document.removeEventListener("keydown",r,!0),document.removeEventListener("focusin",o,!0),document.removeEventListener("click",i,!0),document.defaultView?.removeEventListener("blur",t),e.frame!==null&&document.defaultView?.cancelAnimationFrame(e.frame),e.frame=null}}function Xl(){const e=nt(document);e.epoch+=1,e.pending=null}function Fv(e){Xl();const t=e?.getAttribute("aria-label");if(!!t?.includes("fullscreen")){if(e?.isConnected){e.focus();return}t&&document.querySelector(`[aria-label="${CSS.escape(t)}"]`)?.focus();return}if(e?.isConnected){e.focus();return}document.querySelector('[aria-label="Videobook command input"]')?.focus()}function Dv(e,t=n=>window.requestAnimationFrame(n)){if(typeof document>"u"){t(()=>e()?.focus({preventScroll:!0}));return}fn(e)()}function Yl(e){const t=h(e),r=(Array.isArray(t?.content)?t.content:[]).map(h).find(o=>o?.type==="text");return typeof r?.text=="string"?r.text:null}function Vv(e){const t=Yl(e);let n=e;if(t)try{n=JSON.parse(t)}catch{return{values:[],offset:0,hasMore:!1}}const r=h(n),o=Array.isArray(r?.entries)?r.entries:[],i=h(r?.page);return{values:o.flatMap(s=>{const a=h(s);return typeof a?.prompt=="string"?[a.prompt]:[]}),offset:typeof i?.offset=="number"?i.offset:0,hasMore:i?.has_more===!0}}function jv(e){if(e.values.length===0)return null;let t=e.cursor,n=e.draft;if(t===-1){if(e.direction===1)return null;n=e.current,t=e.values.length-1}else if(t+=e.direction,t<0&&(t=0),t>=e.values.length)return{cursor:-1,draft:n,value:n};return{cursor:t,draft:n,value:e.values[t]??e.current}}const Jl=/page is hidden|paused for media playback|You are offline/i;function Zl(e,t){return t?e==="connecting"||e==="thinking"||e==="listening"||e==="speaking":!1}function Ql(e){const t=e.voicePhase;return e.sending?{kind:"sending",label:"Sending",busy:!0}:t==="error"?{kind:"error",label:"Connection error",busy:!1}:t==="review"?{kind:"review",label:"Review on screen",busy:!1}:e.retrying?{kind:"retrying",label:"Retrying reply",busy:!0}:e.mcpRunning>0||Zl(t,e.pendingReview)?{kind:"preparing",label:"Preparing an action",busy:!0}:t==="connecting"?/allow microphone/i.test(e.voiceMessage??"")?{kind:"permission",label:"Allow microphone access",busy:!0}:{kind:"connecting",label:"Connecting voice",busy:!0}:t==="thinking"?{kind:"waiting",label:"Waiting for reply",busy:!0}:t==="speaking"?{kind:"speaking",label:"Speaking",busy:!1}:t==="listening"?{kind:"listening",label:"Listening",busy:!1}:t==="off"&&Jl.test(e.voiceMessage??"")?{kind:"paused",label:"Voice paused. Start voice to resume.",busy:!1}:{kind:"idle",label:t==="off"?"Offline":"",busy:!1}}const eu=new Set(["idle","listening","review"]);function tu(e){return!eu.has(e.kind)&&e.label!==""}function Gv(e){if(!e)return null;const t=Ql({sending:!1,mcpRunning:0,voicePhase:e.phase,voiceMessage:e.message,retrying:e.phase!=="off"&&e.retrying,pendingReview:e.pendingReview}),n=tu(t)&&t.kind!=="connecting"&&t.kind!=="permission",r=n?t.kind==="error"&&e.message||t.label:null,o=e.phase==="off"||e.phase==="error"?null:e.fallbackReason??null;return!r&&!o&&!e.playbackBlocked?null:{message:r,busy:n&&t.busy,error:t.kind==="error",fallbackReason:o,playbackBlocked:e.playbackBlocked}}const Ni=e=>new Audio(e);function nu(e=Ni){let t=null,n=null;const r=new Set,o=()=>{for(const a of r)a(n)},i=()=>{t?.pause(),t=null,n=null,o()};return{get playingVoiceId(){return n},toggle:(a,c)=>{if(!c)return;if(n===a){i();return}t?.pause();const l=e(c);t=l,n=a,o(),l.play().catch(()=>{t===l&&i()}),l.onended=()=>{t===l&&i()}},stop:i,subscribe(a){return r.add(a),()=>{r.delete(a)}},dispose(){t?.pause(),t=null,n=null,r.clear()}}}function qv(e){const t=ne.c(13),n=Ni;let r;t[0]!==n?(r=()=>nu(n),t[0]=n,t[1]=r):r=t[1];const[o]=_.useState(r),[i,s]=_.useState(null);let a,c;t[2]!==o?(a=()=>{const p=o.subscribe(s);return()=>{p(),o.dispose()}},c=[o],t[2]=o,t[3]=a,t[4]=c):(a=t[3],c=t[4]),_.useEffect(a,c);let l;t[5]!==o?(l=(p,g)=>{o.toggle(p,g)},t[5]=o,t[6]=l):l=t[6];const u=l;let m;t[7]!==o?(m=()=>{o.stop()},t[7]=o,t[8]=m):m=t[8];const f=m;let d;return t[9]!==i||t[10]!==f||t[11]!==u?(d={playingVoiceId:i,toggle:u,stop:f},t[9]=i,t[10]=f,t[11]=u,t[12]=d):d=t[12],d}const ru=["auto","openai","xai"],Pi={auto:"Auto",openai:"OpenAI",xai:"xAI"},ou={auto:"Tries OpenAI, then xAI if it cannot connect",openai:null,xai:null};function Uv(e){return Pi[e]}function iu(e){return e.modelSelectable?e.chatModels.map((t,n)=>({id:`model:${t.id}`,position:n,label:t.label,detail:t.id,note:t.description,checked:t.id===e.selectedModel,choice:{kind:"model",model:t.id}})):[]}function su(e,t){const n=e.voiceMode;return n?ru.map((r,o)=>({id:`speech:${r}`,position:t+o,label:Pi[r],detail:null,note:ou[r],checked:r===n,choice:{kind:"speech",mode:r}})):[]}function Bv(e){const t=[],n=iu(e);n.length>0&&t.push({id:"model",label:"Chat model",items:n});const r=su(e,n.length);return r.length>0&&t.push({id:"speech",label:"Speech",items:r}),t}function Hv(e){return e.flatMap(t=>t.items)}function Wv(e){const t=e.findIndex(n=>n.checked);return t===-1?0:t}function Kv(e,t,n){return e.length===0?null:n==="ArrowDown"?(t+1)%e.length:n==="ArrowUp"?(t-1+e.length)%e.length:n==="Home"?0:n==="End"?e.length-1:null}const zv="Collapse chat";function Xv(e){return e==="selection"||e==="action"||e==="expand"||e==="reopen"}function Yv(e,t){if(!e||!t||e.id!==t.id)return!1;const n=new Set(e.cells.map(r=>r.id));return t.cells.some(r=>!n.has(r.id))}function Jv(e){return e}function Zv(e){e.stopVoice?.(),e.pauseMedia?.(),e.setOpen(!1)}function Qv(e){if(e)for(const t of e.querySelectorAll("video, audio"))t instanceof HTMLMediaElement&&t.pause()}function ek(e){return e==="applied"||e==="timeline"?"media":"music"}function tk(e){return e.dockOpen&&e.panelHasHeader&&!e.reviewPriority}function nk(e){return e.musicSession?!1:e.cellInspector}const O={originX:0,originY:0,squareSize:240,gap:24,columnPitch:264,rowPitch:264,columnCount:X,maximumRowCount:de,minimumRowCount:3,trailingRowCount:1,detailZoomFloor:.5};function Oi(e){return{row:Math.round(e.row),column:Math.round(e.column)}}function Ve(e){const t=Oi(e);return{row:Math.min(de-1,Math.max(0,t.row)),column:Math.min(X-1,Math.max(0,t.column))}}function ve(e){return`${e.row}:${e.column}`}function au(e){return Ve({row:Math.round((e.y-O.originY)/O.rowPitch),column:Math.round((e.x-O.originX)/O.columnPitch)})}function Qe(e){const t=Ve(e);return{x:O.originX+t.column*O.columnPitch,y:O.originY+t.row*O.rowPitch}}function rk(e,t,n){const r=e.find(i=>i.id===t),o=Ve(r?.data.kind==="timeline"?{...n,column:0}:n);return e.map(i=>i.id===t?{...i,position:Qe(o)}:i)}function cu(e,t,n){const r=e.find(c=>c.id===t);if(!r)return[...e];const o=Ve(r.data.kind==="timeline"?{...n,column:0}:n),i=r.data.slot,s=new Set(Ee({type:String(r.data.kind),slot:o}).map(ve)),a=e.find(c=>c.id!==t&&Ee({type:String(c.data.kind),slot:c.data.slot}).some(l=>s.has(ve(l))));return a&&(r.data.kind==="timeline"||a.data.kind==="timeline")?e.map(c=>c.id===t?{...c,position:Qe(i)}:c):e.map(c=>{const l=c.id===t?o:c.id===a?.id?i:null;return l?{...c,position:Qe(l),data:{...c.data,slot:l}}:c})}function ok(e,t,n,r){const o=new Set(n);o.add(t);const i=e.filter(d=>o.has(d.id));if(i.length<=1)return cu(e,t,r);const s=i.find(d=>d.id===t);if(!s)return[...e];const a=Oi(r),c=a.row-s.data.slot.row,l=a.column-s.data.slot.column,u=new Map(i.map(d=>{const p={row:d.data.slot.row+c,column:d.data.slot.column+l};return[d.id,p]})),m=new Set(i.flatMap(d=>Ee({type:String(d.data.kind),slot:u.get(d.id)})).map(ve));return[...u.values()].some(d=>!Zs(d))||i.some(d=>d.data.kind==="timeline"&&l!==0)||e.some(d=>!o.has(d.id)&&Ee({type:String(d.data.kind),slot:d.data.slot}).some(p=>m.has(ve(p))))?e.map(d=>o.has(d.id)?{...d,position:Qe(d.data.slot)}:d):e.map(d=>{const p=u.get(d.id);return p?{...d,position:Qe(p),data:{...d.data,slot:p}}:d})}function ik(e,t){const n=new Map(e.map(r=>[r.id,ve(r.data.slot)]));return t.filter(r=>n.get(r.id)!==ve(r.data.slot))}const lu=new Set(["image","generate_image","character"]);function uu(e){return lu.has(e)}function gr(e){return e?Ve(e):null}const du=new Set(["generate_image","generate_audio","extract_audio"]);function hr(e,t=[],n=null){const r=Xe(e);if(t.length>0){const s=Math.max(...t.map(l=>l.row))+1,c=t.every(l=>l.row===0)?0:t[0].column;return Lr(s,c,r)}const o=gr(n);if(o)return Vn(o,r);let i=-1;for(const s of e)uu(s.type)&&s.slot.row>i&&(i=s.slot.row);return Lr(i+1,0,r)}function mn(e,t=[],n=null){const r=Xe(e);if(t.length===0){const a=gr(n);return Dn(a??{row:0,column:0},r)}const o=Math.max(...t.map(a=>a.column)),s={row:Math.min(...t.map(a=>a.row)),column:Math.min(o+1,X-1)};return Dn(s,r)}function sk(e,t,n=null){if(e==="timeline")return Ys(Xe(t));if(e==="generate_video")return hr(t,[],n);if(du.has(e))return mn(t,[],n);const r=gr(n);return r?Dn(r,Xe(t)):Js(Xe(t))}function pn(e){return Number.isFinite(e)&&e>0?e:1}function ak(e){return 1/Math.max(pn(e),O.detailZoomFloor)}function fu(e,t=0){return!Number.isFinite(e)||e<=0?1:Math.max(Number.isFinite(t)?t:0,e/Li())}function Li(){return O.originX*2+X*O.squareSize+(X-1)*O.gap}function mu(e,t){if(!Number.isFinite(e)||e<=0)return O.minimumRowCount;const n=e/pn(t);return Math.max(O.minimumRowCount,Math.ceil((n-O.originY*2+O.gap)/O.rowPitch))}function ck(e,t){const n=pn(t);return{width:e.width*n,height:e.height*n}}function lk(e,t,n=0){return{x:0,y:Number.isFinite(n)?n:0,zoom:pn(t)}}function uk(e,t){return au(e)}function dk(e,t){const n=e.x-O.originX,r=e.y-O.originY;if(n<0||r<0)return null;const o=Math.floor(n/O.columnPitch),i=Math.floor(r/O.rowPitch);if(o<0||o>=t.columnCount||i<0||i>=t.rowCount)return null;const s=t.minColumn+o;return s>t.maxColumn||n-o*O.columnPitch>=O.squareSize||r-i*O.rowPitch>=O.squareSize?null:{row:i,column:s}}function fk(e,t={}){const n=t.preview?[...e,Ve(t.preview)]:e,r=Math.max(-1,...n.map(a=>Ve(a).row)),o=Math.min(de,Math.max(O.minimumRowCount,mu(t.viewportHeight??0,t.zoom??1),r+2)),i=Li(),s=O.originY*2+o*O.squareSize+Math.max(0,o-1)*O.gap;return{rowCount:o,columnCount:X,minColumn:0,maxColumn:X-1,centerX:i/2,width:i,height:s}}const Fi="post_to_x";function Ge(e){return e?.inputs?.sourceOperation===Fi}function pu(){return"X · POSTED"}function gu(e){const t=Date.parse(e);return Number.isFinite(t)?new Date(t).toISOString().replace("T"," ").replace(/\.\d{3}Z$/," UTC"):e}function hu(e){const t=h(e);if(!t)return null;const n=W(t.tweetId??t.tweet_id),r=W(t.tweetUrl??t.tweet_url);return!n||!r?null:{tweetId:n,tweetUrl:r}}function bu(e){const t=h(e);if(!t)return null;const n=typeof t.replyNumber=="number"?t.replyNumber:typeof t.reply_number=="number"?t.reply_number:null,r=W(t.message);return n===null||!r?null:{replyNumber:n,message:r}}function mk(e){if(e?.sourceOperation!==Fi)return null;const t=W(e.tweetId??e.tweet_id),n=W(e.tweetUrl??e.tweet_url),r=W(e.postedAt??e.posted_at);if(!t||!n||!r)return null;const o=Array.isArray(e.replies)?e.replies.flatMap(s=>{const a=hu(s);return a?[a]:[]}):[],i=e.status==="partially_posted"?"partially_posted":"posted";return{badge:"Posted to X",tweetId:t,tweetUrl:n,postedAt:r,postedAtLabel:gu(r),replyCount:o.length,replyLabel:o.length===1?"1 reply":`${o.length} replies`,replies:o,status:i,followupError:bu(e.followupError??e.followup_error)}}const yu={run_notebook:"Run notebook",semantic_index:"Semantic index",extract_waveform:"Extract waveform",extract_video_poster:"Create video poster",extract_audio:"Extract audio",transcribe:"Transcribe"},_u={attention:"Needs attention",running:"Running",queued:"Queued",finished:"Finished"},vu=["attention","running","queued","finished"];function br(e){const t=yu[e];if(t)return t;const n=e.replace(/[_-]+/g," ").trim();return n.length===0?e:n.charAt(0).toUpperCase()+n.slice(1)}function ao(e){const t=Math.max(0,e);if(t<1e4)return`${(t/1e3).toFixed(1)}s`;const n=Math.round(t/1e3);if(n<60)return`${n}s`;const r=Math.floor(n/60),o=n%60;return r<60?`${r}m ${String(o).padStart(2,"0")}s`:`${Math.floor(r/60)}h ${String(r%60).padStart(2,"0")}m`}function yr(e){return e.slice(0,8)}function ku(e){switch(e){case"queued":return"queued";case"running":case"completing":return"running";case"failed":return"failed";case"aborted":return"cancelled";default:return"done"}}function wu(e,t){switch(e){case"awaiting-output":return t?"review":"running";case"failed":return"failed";case"queued":return"queued";case"omitted":return"omitted";default:return"done"}}function Di(e){switch(e){case"review":case"failed":return"attention";case"running":return"running";case"queued":return"queued";default:return"finished"}}function Vi(e){return e.toUpperCase()}function ji(e){return e?{tag:ue(e.slot),label:e.label??e.prompt??null}:{tag:null,label:null}}function Su(e,t){if(!e.artifactId)return{tag:null,label:null};const n=t.find(r=>!Ge(r)&&r.outputArtifactId===e.artifactId);return n?ji(n):{tag:null,label:`artifact ${yr(e.artifactId)}`}}function co(e,t){const n=e?.[t];return typeof n=="string"&&n.trim().length>0?n:null}function Iu(e){const t=[co(e.payload,"provider"),co(e.payload,"model")].filter(n=>n!==null);return t.length>0?t.join(" · "):null}function xu(e){return e==="queued"||e==="running"||e==="completing"?["cancel"]:e==="failed"||e==="aborted"?["retry"]:[]}function Au(e,t){const n=e.startedAt===null?null:ao((e.finishedAt??t)-e.startedAt);switch(e.state){case"queued":return{summary:"Waiting for a worker",note:`waiting ${ao(t-e.enqueuedAt)}`,duration:null,live:!1};case"running":return{summary:`${br(e.type)} in progress`,note:n?`${n} elapsed`:null,duration:null,live:!0};case"completing":return{summary:"Finishing up",note:n?`${n} elapsed`:null,duration:null,live:!0};case"failed":return{summary:e.error?.message??"Failed without an error message",note:null,duration:n,live:!1};case"aborted":return{summary:e.error?.message??"Cancelled",note:"nothing was written",duration:n,live:!1};default:return{summary:"Completed",note:null,duration:n,live:!1}}}function Eu(e){const t=e.error?.code??null;return t&&t!=="Error"?t:null}function Cu(e,t,n){const r=ku(e.state),o=r==="done"&&e.state!=="done"?e.state.toUpperCase():Vi(r),i=e.error?[`${e.error.code?`${e.error.code} · `:""}${e.error.message}`,`operation ${e.operationId} · enqueued ${new Date(e.enqueuedAt).toLocaleString()}`].join(`
14
- `):null;return{key:`job:${e.id}`,providerTask:e.providerTask,source:{kind:"job",jobId:e.id},tone:r,band:Di(r),statusLabel:o,title:br(e.type),detail:Iu(e),target:Su(e,t),...Au(e,n),errorCode:Eu(e),errorDetail:i,attempt:`${e.attempts}/${e.maxAttempts}`,timestamp:e.enqueuedAt,sortAt:e.finishedAt??e.startedAt??e.enqueuedAt,actions:xu(e.state)}}function Gi(e){const t=e.plan.stages.find(n=>n.kind==="queued"&&n.jobType==="generation");return t?.kind==="queued"?t:null}function Mu(e,t){const n=[];return t&&e.status!=="continued"&&e.status!=="omitted"&&n.push("continue"),(e.status==="failed"||e.status==="awaiting-output"&&t)&&n.push("retry","switch","omit"),n}function Tu(e){const t=Gi(e),n=[];return t?.estimatedCostUsd!==void 0&&n.push(`est. $${t.estimatedCostUsd.toFixed(2)}`),e.outputArtifactId&&n.push(`output ${yr(e.outputArtifactId)}`),n.length>0?n.join(" · "):null}function Ru(e,t){const n=Tu(e);switch(e.status){case"awaiting-output":return{summary:t?"Output ready — review before inserting":"Waiting for generated media",note:n};case"failed":return{summary:e.error??"Generation failed",note:n};case"queued":return{summary:"Generation queued",note:n};case"continued":return{summary:"Generation complete",note:n};case"omitted":return{summary:"Left out of the sequence",note:e.outputArtifactId?`output kept as ${yr(e.outputArtifactId)}`:null};default:return{summary:"Generation finished",note:n}}}function Sn(e){const t=Date.parse(e);return Number.isFinite(t)?t:0}function $u(e,t,n){return t?.type.startsWith("generate_")?br(t.type):n?"Generate":e.plan.summary}function Nu(e,t,n){const r=n.some(c=>c.artifactId===e.outputArtifactId&&c.status==="ready"&&!!c.mediaUrl),o=wu(e.status,r),i=Gi(e),s=t.find(c=>c.id===e.cellId),a=i?[i.provider,i.model??i.tool].filter(c=>!!c).join(" · "):null;return{key:`plan:${e.planId}`,source:{kind:"plan",planId:e.planId},tone:o,band:Di(o),statusLabel:Vi(o),title:$u(e,s,i),detail:a&&a.length>0?a:null,target:ji(s),...Ru(e,r),errorCode:null,errorDetail:e.error,attempt:"1/1",timestamp:Sn(e.createdAt),sortAt:Sn(e.updatedAt)||Sn(e.createdAt),duration:null,live:o==="running",actions:Mu(e,r)}}function pk({jobs:e,plans:t,cells:n,assets:r=[],now:o}){return[...t.map(i=>Nu(i,n,r)),...e.map(i=>Cu(i,n,o))]}function Pu(e){return e.map((t,n)=>({...t,summary:n===0?"Next up":`${n} ahead in queue`}))}function Ou(e,t){switch(e){case"running":return[...t].sort((n,r)=>n.sortAt-r.sortAt);case"queued":return Pu([...t].sort((n,r)=>n.timestamp-r.timestamp));default:return[...t].sort((n,r)=>r.sortAt-n.sortAt)}}function gk(e){return vu.map(t=>({id:t,label:_u[t],rows:Ou(t,e.filter(n=>n.band===t))}))}function hk(e){const t=i=>e.find(s=>s.id===i)?.rows.length??0,n=t("attention"),r=t("running")+t("queued"),o=t("finished");return{total:n+r+o,attention:n,active:r,finished:o}}function bk(e,t){if(t==="all")return e.filter(r=>r.rows.length>0);const n=t==="attention"?["attention"]:t==="active"?["running","queued"]:["finished"];return e.filter(r=>n.includes(r.id)&&r.rows.length>0)}const Ae=[O.gap*.25,O.gap*.5,O.gap*.75],Lu=[.25,.5,.75],qi={sourceSide:"bottom",sourcePortIndex:1,targetSide:"top",targetPortIndex:1,sourceBusOffset:Ae[1],targetBusOffset:Ae[1],riverOffset:Ae[1],riverSide:"right",directRowGutter:!1,targetPrimary:!0};function At(e,t){return e.sourceRow-t.sourceRow||e.sourceColumn-t.sourceColumn||e.targetRow-t.targetRow||e.targetColumn-t.targetColumn||e.targetInput.localeCompare(t.targetInput)||e.id.localeCompare(t.id)}function _r(e,t){return t===1?1:t===2?e%2===0?0:2:e%Ae.length}function Ui(e,t){return Ae[_r(e,t)]}function Fu(e,t){const n=new Map;for(const o of e)for(const i of t(o)){const s=n.get(i)??new Map;s.set(o.id,o),n.set(i,s)}const r=new Map;for(const[o,i]of n){const s=[...i.values()].sort(At);r.set(o,new Map(s.map((a,c)=>[a.id,Ui(c,s.length)])))}return r}function Et(e){return e.targetColumn<e.sourceColumn?"left":e.targetColumn>e.sourceColumn?"right":"bottom"}function Du(e){const t=new Map;for(const r of e){const o=`${r.sourceId}:${Et(r)}`,i=t.get(o)??[];i.push(r),t.set(o,i)}const n=new Map;for(const r of t.values())r.sort(At),r.forEach((o,i)=>{n.set(o.id,_r(i,r.length))});return n}function Zt(e){return e.sourceColumn<e.targetColumn?"left":"top"}function Vu(e){const t=new Map;for(const r of e){const o=`${r.targetId}:${Zt(r)}`,i=t.get(o)??[];i.push(r),t.set(o,i)}const n=new Map;for(const r of t.values())r.sort(At),r.forEach((o,i)=>{n.set(o.id,_r(i,r.length))});return n}function ju(e){const t=new Map;for(const r of e){const o=t.get(r.targetId)??[];o.push(r),t.set(r.targetId,o)}const n=new Set;for(const r of t.values()){r.sort(At);const o=r[0];o&&n.add(o.id)}return n}function Gu(e){const t=new Map;for(const r of e){if(Et(r)!=="bottom")continue;const o=t.get(r.sourceId)??[];o.push(r),t.set(r.sourceId,o)}const n=new Map;for(const r of t.values())r.sort(At),r.forEach((o,i)=>{n.set(o.id,r.length===1||i%2===1?"right":"left")});return n}function Bi(e,t){const n=Et(e);return n==="bottom"?t.get(e.id)??"right":n}function lo(e,t){return Bi(e,t)==="right"?e.sourceColumn:e.sourceColumn-1}function Qt(e){return e.targetRow===e.sourceRow+1&&e.targetColumn===e.sourceColumn}function qu(e){const t=new Map,n=(i,s,a,c,l)=>{const u=t.get(i)??new Map,m=u.get(s)??{id:s,column:a,kind:c,candidates:[]};m.candidates.push(l),u.set(s,m),t.set(i,u)};for(const i of e)Et(i)==="bottom"&&!Qt(i)&&n(i.sourceRow,`source:${i.id}`,i.sourceColumn,"source",i),Zt(i)==="top"&&n(i.targetRow-1,`target:${i.targetId}`,i.targetColumn,"target",i);const r=new Map,o=new Map;for(const i of t.values()){const s=[...i.values()].sort((a,c)=>a.column-c.column||a.kind.localeCompare(c.kind)||a.id.localeCompare(c.id));s.forEach((a,c)=>{const l=Ui(c,s.length);for(const u of a.candidates)a.kind==="source"?r.set(u.id,l):o.set(u.id,l)})}for(const i of e)Qt(i)&&r.set(i.id,o.get(i.id)??Ae[1]);return{source:r,target:o}}function Uu(e,t,n){return e.get(String(t))?.get(n)??Ae[1]}function Hi(e){const t=new Map(e.cells.map(u=>[u.id,u])),n=e.edges.flatMap(u=>{const m=t.get(u.source),f=t.get(u.target);return!m||!f?[]:[{id:u.id,sourceId:m.id,targetId:f.id,sourceRow:m.slot.row,sourceColumn:m.slot.column,targetRow:f.slot.row,targetColumn:f.slot.column,targetInput:u.targetInput}]}),r=Du(n),o=Vu(n),i=ju(n),s=Gu(n),a=qu(n),c=Fu(n.filter(u=>!Qt(u)),u=>[String(Zt(u)==="left"?u.targetColumn-1:lo(u,s))]),l=new Map;for(const u of n){const m=Bi(u,s),f=Zt(u),d=f==="left"?u.targetColumn-1:lo(u,s);l.set(u.id,{sourceSide:Et(u),sourcePortIndex:r.get(u.id)??1,targetSide:f,targetPortIndex:o.get(u.id)??1,sourceBusOffset:a.source.get(u.id)??Ae[1],targetBusOffset:a.target.get(u.id)??Ae[1],riverOffset:Uu(c,d,u.id),riverSide:m,directRowGutter:Qt(u),targetPrimary:i.has(u.id)})}return l}function Bu(e,t){const n=e.sourceBottomY+t.sourceBusOffset,r=e.targetTopY-O.gap+t.targetBusOffset,o=t.riverSide==="right"?e.sourceRightX+t.riverOffset:e.sourceLeftX-O.gap+t.riverOffset;if(t.targetSide==="left"){if(e.sourceY===e.targetY)return[{x:e.sourceX,y:e.sourceY},{x:e.targetX,y:e.targetY}];const i=e.targetLeftX-O.gap+t.riverOffset;return[{x:e.sourceX,y:e.sourceY},{x:i,y:e.sourceY},{x:i,y:e.targetY},{x:e.targetX,y:e.targetY}]}if(t.directRowGutter&&e.targetTopY>e.sourceBottomY){const i=e.targetTopY-e.sourceBottomY,s=e.sourceBottomY+i*(t.targetBusOffset/O.gap);return[{x:e.sourceX,y:e.sourceY},{x:e.sourceX,y:s},{x:e.targetX,y:s},{x:e.targetX,y:e.targetY}]}return t.sourceSide!=="bottom"?[{x:e.sourceX,y:e.sourceY},{x:o,y:e.sourceY},{x:o,y:r},{x:e.targetX,y:r},{x:e.targetX,y:e.targetY}]:[{x:e.sourceX,y:e.sourceY},{x:e.sourceX,y:n},{x:o,y:n},{x:o,y:r},{x:e.targetX,y:r},{x:e.targetX,y:e.targetY}]}const Hu=8;function In(e,t){return t.x===e.x?`V ${t.y}`:t.y===e.y?`H ${t.x}`:`L ${t.x} ${t.y}`}function yk(e,t){const n=Bu(e,t),r=[`M ${n[0].x} ${n[0].y}`];let o=n[0];for(let i=1;i<n.length-1;i+=1){const s=n[i],a=n[i+1],c=Math.hypot(s.x-o.x,s.y-o.y),l=Math.hypot(a.x-s.x,a.y-s.y),u=Math.min(Hu,c/2,l/2);if(u<1){r.push(In(o,s)),o=s;continue}const m={x:s.x-(s.x-o.x)/c*u,y:s.y-(s.y-o.y)/c*u},f={x:s.x+(a.x-s.x)/l*u,y:s.y+(a.y-s.y)/l*u};r.push(In(o,m),`Q ${s.x} ${s.y} ${f.x} ${f.y}`),o=f}return r.push(In(o,n[n.length-1])),r.join(" ")}function Wi(e,t){return`route-${e}-${t%Lu.length}`}function _k(e){const t=ne.c(8),{bookId:n,notebook:r,ready:o,call:i}=e,[s,a]=_.useState(null),c=_.useRef(null),l=`${n}:${r?.id}`;let u;t[0]!==n||t[1]!==i||t[2]!==r||t[3]!==o?(u=(p,g,y)=>{const v=y===void 0?r:y,S=v?.cells.find(C=>C.id===p);if(!n||!v||!p||g===void 0&&(!S||!xt(S.type))){c.current=null,a(null);return}const w=`${n}:${v.id}`,k={scope:w,cellId:p};if(g!==void 0){c.current=null,a({...k,value:g,loading:!1,error:null});return}if(!S||!o)return;const I=JSON.stringify([w,S,v.edges.filter(C=>C.target===p)]);if(c.current?.key===I)return;const E={key:I};c.current=E,a({...k,value:null,loading:!0,error:null}),i("preview_notebook_generation",{book_id:n,notebook_id:v.id,cell_id:S.id},{background:!0}).then(C=>{c.current===E&&a({...k,value:C,loading:!1,error:null})}).catch(C=>{c.current===E&&(c.current=null,a({...k,value:null,loading:!1,error:C instanceof Error?C.message:String(C)}))})},t[0]=n,t[1]=i,t[2]=r,t[3]=o,t[4]=u):u=t[4];const m=u,f=s?.scope===l?s:null;let d;return t[5]!==m||t[6]!==f?(d={preview:f,select:m},t[5]=m,t[6]=f,t[7]=d):d=t[7],d}function vk(e,t){const n=ne.c(11),r=_.useRef(null);let o;n[0]===Symbol.for("react.memo_cache_sentinel")?(o=()=>{r.current!==null&&clearTimeout(r.current),r.current=null},n[0]=o):o=n[0];const i=o;let s;n[1]===Symbol.for("react.memo_cache_sentinel")?(s=()=>i,n[1]=s):s=n[1];let a;n[2]!==t?(a=[i,t],n[2]=t,n[3]=a):a=n[3],_.useEffect(s,a);let c;n[4]!==e?(c=(...d)=>{const p=d;i(),r.current=setTimeout(()=>{r.current=null,e(...p)},350)},n[4]=e,n[5]=c):c=n[5];const l=c;let u;n[6]!==e?(u=(...d)=>{const p=d;i(),e(...p)},n[6]=e,n[7]=u):u=n[7];const m=u;let f;return n[8]!==m||n[9]!==l?(f={schedule:l,cancel:i,run:m},n[8]=m,n[9]=l,n[10]=f):f=n[10],f}const Wu=720;function Ki(e){return Math.abs(e)}function Ku(e,t){const n=[];for(let r=0;r<e.length;r+=t)n.push(Math.max(...e.slice(r,r+t).map(Ki)));return n}function zu(e,t){const n=[];for(let r=0;r<t;r+=1){const o=Math.floor(r*e.length/t),i=Math.max(o+1,Math.floor((r+1)*e.length/t));n.push(Math.max(...e.slice(o,i).map(Ki)))}return n}function kk(e){if(e.length===0)return"";const t=Math.max(1,Math.ceil(e.length/Wu)),n=Ku(e,t);return n.map((r,o)=>{const i=n.length===1?50:o/(n.length-1)*100,s=Math.max(2,Math.min(46,r*46));return`M${i.toFixed(3)} ${50-s}V${50+s}`}).join("")}function wk(e,t){const{width:n,height:r,pitch:o,minimumBarHeight:i}=t,s=Math.floor(n/o);if(e.length===0||s<1)return"";const a=zu(e,s),c=Math.max(...a),l=r/2,u=r-i;return a.map((m,f)=>{const d=o*f+o/2,p=c>0?m/c:0,g=Math.max(i,p*u),y=l-g/2,v=l+g/2;return`M${d.toFixed(2)} ${y.toFixed(2)}V${v.toFixed(2)}`}).join("")}function Sk(e){const{width:t,height:n,pitch:r,minimumBarHeight:o}=e,i=Math.floor(t/r);if(i<1)return"";const s=n/2,a=(s-o/2).toFixed(2),c=(s+o/2).toFixed(2);return Array.from({length:i},(l,u)=>`M${(r*u+r/2).toFixed(2)} ${a}V${c}`).join("")}function Ik(e,t){return Qs(e,t)}function xk(e){if(e.value===null)return{kind:"null"};if(!e.column.endsWith("_json")||typeof e.value!="string")return{kind:"raw",value:e.value};try{return{kind:"json",value:JSON.parse(e.value)}}catch{return{kind:"raw",value:e.value}}}function Ak(e){const t=ne.c(3),[n,r]=_.useState(null);let o,i;return t[0]!==e?(o=()=>{if(!e)return;const s=Date.parse(e);if(!Number.isFinite(s))return;const a=()=>r(Math.max(0,Math.round((Date.now()-s)/1e3))),c=window.setTimeout(a,0),l=window.setInterval(a,1e3);return()=>{window.clearTimeout(c),window.clearInterval(l)}},i=[e],t[0]=e,t[1]=o,t[2]=i):(o=t[1],i=t[2]),_.useEffect(o,i),e?n:null}const Xu={image:9/16,video:16/9,audio:16/9},Yu={image:"Image",video:"Video",audio:"Audio"};function gt(e){return e!=null&&Number.isFinite(e)&&e>0}function Ek(e){return e==="image"||e==="video"||e==="audio"?e:null}function Ck(e){return Yu[e]}function Mk(e,t){return e!=="audio"&&t&&gt(t.width)&&gt(t.height)?t.width/t.height:Xu[e]}function Oe(e,t,n,r="plain"){return n===null?null:{key:e,term:t,value:n,emphasis:r}}function Ju(e){return gt(e.width)&&gt(e.height)?`${e.width} × ${e.height}`:null}function Zu(e){return gt(e)?me(e):null}function Tk(e,t,n,r){const o=Oe("address","Address",`@${t}`,"address");if(e==="audio"){const i=dr({audioInfo:n.audioInfo,durationSeconds:n.duration,hasOutput:!0,inputs:r});return[o,Oe("role","Role",i.role),Oe("duration","Duration",i.duration),Oe("format","Format",i.details.length>0?i.details.join(" · "):null)].filter(s=>s!==null)}return[o,Oe("dimensions","Dimensions",Ju(n)),Oe("aspect","Aspect",un(n.width,n.height)),e==="video"?Oe("duration","Duration",Zu(n.duration)):null].filter(i=>i!==null)}async function Rk(e){e.onStarting?.();try{const t=await e.start();return e.onAccepted?.(),t}catch(t){throw e.onRejected?.(),t}}async function $k(e){return!e.valid||e.dirty&&await e.onUpdate(e.patch)===!1?!1:(await e.onRun(e.cellId),!0)}function xn(e){return e!==null&&Number.isFinite(e)&&e>0}function Nk(e,t){const n=new Map(t.map(o=>[o.artifactId,o])),r=new Map;for(const o of e){const i=o.outputArtifactId;if(!i)continue;const s=n.get(i);if(!s)continue;const a=r.get(i);(!a||a.type!==s.type&&o.type===s.type)&&r.set(i,o)}return[...r.entries()].map(([o,i])=>{const s=n.get(o),{id:a,...c}=s;return{...c,cellAddress:St(i.slot)}})}function Pk(e,t){return ti(e,t.map(n=>({reference:n.cellAddress,replacement:`@${n.artifactId}`})))}function Qu(e){return e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function zi(e,t){let n=e;for(const{token:r,replacement:o}of t){const i=ke(r);i&&(n=n.replace(new RegExp(`(?<![\\w./-])@?${Qu(i)}(?![\\w-])`,"giu"),o))}return n}function Ok(e,t){return zi(e,t.map(n=>({token:n.artifactId,replacement:`@${n.cellAddress}`})))}function Lk(e,t,n){const r=new Map(n.flatMap(o=>o.outputArtifactId?[[o.outputArtifactId,o]]:[]));return zi(e,t.flatMap(o=>{const i=r.get(o.artifactId);return i?[{token:o.artifactId,replacement:`@${St(i.slot)}`}]:[]}))}function Xi(e){const t=[e.type.toUpperCase()];xn(e.width)&&xn(e.height)&&t.push(`${e.width}×${e.height}`),xn(e.duration)&&t.push(me(e.duration));const n=e.status.trim().toLowerCase();return n&&n!=="ready"&&t.push(n.replaceAll("_"," ").toUpperCase()),t}function Yi(e){return e.thumbnailUrl??(e.type==="image"?e.mediaUrl:null)}function Wn(e){const t=e.toLowerCase();return t.includes("audio")?"audio":t.includes("image")?"image":t.includes("video")||t==="final"||t==="concat"||t==="splice"?"video":"other"}function ed(e,t,n=new Set){const r=sn(t);if(r===void 0)return[];const o=t.slice(0,t.lastIndexOf("@")).trim(),i=/\b(?:generate|create|make)\s+(?:an?\s+)?(?:image|photo|picture)s?(?:\s+(?:of|from|using|with))?$/iu.test(o)?"image":null;return e.filter(s=>(!i||s.type.toLowerCase()===i)&&s.cellAddress.toLowerCase().includes(r)&&!n.has(`@${s.cellAddress}`)).sort((s,a)=>/^\s*\/goal\b/u.test(t)?+(a.type==="image")-+(s.type==="image"):0).slice(0,12).map(s=>({value:`@${s.cellAddress}`,label:`@${s.cellAddress}`,asset:s,type:"asset"}))}function td(e,t,n=new Set){const r=sn(t);if(r===void 0)return[];const o=new Map(e.flatMap(s=>Ee(s).map(a=>[`${a.row}:${a.column}`,s]))),i=[];for(let s=0;s<de;s+=1)for(let a=0;a<X;a+=1){const c=ue({row:s,column:a});if(!c.slice(1).includes(r)||n.has(c))continue;const l=o.get(`${s}:${a}`);if(!(l?.type==="timeline"&&a!==l.slot.column)&&(i.push({value:c,label:c,description:l?`${l.type.replaceAll("_"," ").toUpperCase()} cell`:"Empty grid square",cellType:l?.type??null,empty:!l,type:"cell"}),i.length===12))return i}return i}const nd=8,rd=16;function Fk(e,t,n,r=new Set,o={}){const i=new Map(t.map(c=>[ue(c.slot),c.label?.trim()||null])),s=new Set,a=[];for(const c of ed(e,n,r))s.has(c.value)||(s.add(c.value),a.push({value:c.value,label:c.label,description:Xi(c.asset).join(" · "),caption:i.get(c.value)??null,thumbnailUrl:Yi(c.asset),mediaKind:Wn(c.asset.type),empty:!1}));for(const c of td(t,n,r))s.has(c.value)||(s.add(c.value),a.push({value:c.value,label:c.label,description:c.description,caption:i.get(c.value)??null,thumbnailUrl:null,mediaKind:c.cellType?Wn(c.cellType):null,empty:c.empty}));return[...a.filter(c=>!c.empty).sort((c,l)=>/^\s*\/goal\b/u.test(n)?+(l.mediaKind==="image")-+(c.mediaKind==="image"):0).slice(0,o.rows??nd),...a.filter(c=>c.empty).slice(0,o.empties??rd)]}function Dk(e,t,n){const r=sn(n);if(r===void 0)return[];const o=new Map(t.map(i=>[i.cellAddress,i]));return e.filter(({token:i})=>i.includes(r)).map(({token:i,cell:s})=>{const a=St(s.slot),c=o.get(a);return{value:`@${i}`,label:`@${i}`,description:[`@${a}`,...c?Xi(c):[s.type.replaceAll("_"," ").toUpperCase()]].join(" · "),caption:s.label?.trim()||null,thumbnailUrl:c?Yi(c):null,mediaKind:Wn(c?.type??s.type),empty:!1}})}const Ji={first_frame:"firstframe",last_frame:"lastframe"},od=new Set(["replace_audio"]),id=["image","video","audio"];function sd(e){return e==="image"||e==="generate_image"?"image":e==="audio"||e==="extract_audio"||e==="generate_audio"?"audio":e==="video"||e==="split_video"||e==="generate_video"||e==="concat"||e==="splice"?"video":null}function uo(e,t){if(e===t)return 1;const n=`${t}_`;if(!e.startsWith(n))return null;const r=e.slice(n.length);return/^\d+$/.test(r)?Number(r):null}function ad(e,t){return[...e].sort((n,r)=>{const o=uo(n.targetInput,t)??Number.MAX_SAFE_INTEGER,i=uo(r.targetInput,t)??Number.MAX_SAFE_INTEGER;return o-i})}function cd(e,t,n){const r=new Map(t.map(o=>[o.id,o]));return n.flatMap(o=>{if(o.target!==e)return[];const i=r.get(o.source),s=i?sd(i.type):null;return s?[{kind:s,sourceCellId:o.source,targetInput:o.targetInput}]:[]})}function ld(e){return Object.entries(Ji).flatMap(([t,n])=>{const r=e.find(o=>o.kind==="image"&&o.targetInput===t);return r?[{...r,token:n}]:[]})}function ud(e,t,n){const r=e.filter(o=>o.kind===t&&!(n!=="r2v"&&t==="image"&&o.targetInput in Ji)&&!od.has(o.targetInput));return ad(r,t).map((o,i)=>({...o,token:`${t}${i+1}`}))}function dd(e,t,n,r){const o=t.find(a=>a.id===e)?.inputs?.generationMode,i=r??o,s=cd(e,t,n);return[...i==="r2v"?[]:ld(s),...id.flatMap(a=>ud(s,a,typeof i=="string"?i:void 0))]}function Vk(e,t,n){const r=new Set([...t,...n].map(i=>i.token)),o=new Map(t.map(i=>{const s=n.find(l=>l.sourceCellId===i.sourceCellId&&l.targetInput===i.targetInput)??n.find(l=>l.targetInput===i.targetInput);if(s)return[i.token,s.token];if(!n.some(l=>l.token===i.token))return[i.token,i.token];let a=1;for(;r.has(`${i.kind}${a}`);)a+=1;const c=`${i.kind}${a}`;return r.add(c),[i.token,c]}));return e.replace(/@((?:image|video|audio)\d+|firstframe|lastframe)(?![\w-])/giu,(i,s)=>{const a=o.get(s.toLowerCase());return a&&a!==s.toLowerCase()?`@${a}`:i})}function Zi(e,t,n){return e==="r2v"&&t==="image"&&(n==="first_frame"||n==="last_frame")?"image":n}function fd(e,t){const n=t.map(i=>({...i,target:Zi(e.id,i.kind,i.target)}));if(e.id!=="i2v"||e.slots.some(i=>i.targets.includes("image")))return n;const r=e.slots.flatMap(i=>i.targets).filter(i=>i==="first_frame"||i==="last_frame").filter(i=>!t.some(s=>s.target===i));let o=0;return n.map(i=>{if(i.kind!=="image"||i.target!=="image")return i;const s=r[o++];return s?{...i,target:s}:i})}function Pt(e){return e==="replace_audio"?"replacement audio":e==="first_frame"?"first frame":e==="last_frame"?"last frame":`${e} reference`}function vr(e,t){const n=e.id==="default"||e.id==="text"?"this model":e.id.toUpperCase(),r=n==="this model"?"This model":n,o=new Map(e.slots.map(l=>[l.field,0])),i=fd(e,t).sort((l,u)=>+(u.target!==u.kind)-+(l.target!==l.kind));for(const l of i){const u=e.slots.filter(d=>d.kind===l.kind&&d.targets.includes(l.target));if(u.length===0)return`${r} does not accept ${Pt(l.target)} inputs. Change the type or remove that input.`;const f=u.filter(d=>d.max===null||(o.get(d.field)??0)<d.max).sort((d,p)=>{const g=+((o.get(d.field)??0)<d.min);return+((o.get(p.field)??0)<p.min)-g||d.targets.length-p.targets.length})[0];if(!f){const d=u.reduce((p,g)=>p+(g.max??0),0);return`${r} accepts at most ${d} ${Pt(l.target)} input${d===1?"":"s"}. Remove an input or change the model.`}o.set(f.field,(o.get(f.field)??0)+1)}const s=e.slots.find(l=>(o.get(l.field)??0)<l.min);if(s)return`Add at least ${s.min} ${Pt(s.targets[0]??s.kind)} input${s.min===1?"":"s"} for ${n}.`;const a=e.requiredGroups.find(l=>!l.some(u=>(o.get(u)??0)>0));return a?`Add at least one ${[...new Set(e.slots.filter(l=>a.includes(l.field)).flatMap(l=>l.targets).map(Pt))].join(" or ")} input for ${n}.`:null}function md(e){const t=h(e),n=h(t?.mentions),r=Array.isArray(n?.prompt_leaks)?n.prompt_leaks.flatMap(i=>{const s=h(i),a=x(s?.token),c=x(s?.code),l=x(s?.message);return a&&c&&l?[{token:a,code:c,message:l}]:[]}):[],o=Array.isArray(n?.url_placeholders)?n.url_placeholders.flatMap(i=>{const s=h(i),a=x(s?.path),c=x(s?.reference),l=x(s?.url);return a&&c&&l?[{path:a,reference:c,url:l}]:[]}):[];return{promptLeaks:r,urlPlaceholders:o}}function jk(e){const t=md(e).promptLeaks;return t.length===0?null:`Fix prompt references before generating: ${t.map(r=>r.message).join("; ")}`}function pd(e){return e.length>0&&e.every(t=>t.includes("historical average per call"))}function Gk(e){const t=h(h(e)?.estimate),n=Array.isArray(t?.warnings)?t.warnings.filter(o=>typeof o=="string"):[],r=pd(n);return{usd:typeof t?.usd=="number"?t.usd:null,currency:typeof t?.currency=="string"?t.currency:"USD",warnings:n,unknown:!r&&n.some(o=>/not found|unavailable|no cost adapter|unknown/iu.test(o))}}const Qi=["t2i","i2i","t2v","i2v","r2v","v2v"];function es(e){return Array.isArray(e)?e.filter(t=>{if(!t||typeof t!="object")return!1;const n=t;return Qi.some(r=>r===n.type)&&typeof n.rank=="number"&&Number.isFinite(n.rank)&&n.rank>0&&typeof n.elo=="number"&&Number.isFinite(n.elo)&&typeof n.priceLabel=="string"&&typeof n.sourceUrl=="string"&&typeof n.capturedOn=="string"}):[]}function gd(e,t,n,r){const o=Qi.find(s=>s===t);if(o)return o;if(t==="v2v_refs")return"v2v";if(e==="generate_image")return n==="layer_image"?null:r.some(a=>a.type==="image"||a.type==="generate_image")||n==="edit_image"||n==="image_to_image"?"i2i":"t2i";if(e!=="generate_video")return null;const i={text_to_video:"t2v",image_to_video:"i2v",reference_to_video:"r2v",edit_video:"v2v"};return i[n]?n!=="text_to_video"?i[n]:r.some(s=>s.targetInput==="first_frame"||s.targetInput==="last_frame")?"i2v":r.some(s=>s.type==="video"||s.type==="generate_video")?"v2v":r.some(s=>s.type==="image"||s.type==="generate_image")?"r2v":i[n]:null}function hd(e,t){const n=e.map(s=>({action:s,ranking:t?s.frontier?.find(a=>a.type===t):void 0})),r=n.filter(s=>s.ranking&&s.action.available!==!1).sort((s,a)=>s.ranking.rank-a.ranking.rank),o=n.filter(s=>!s.ranking&&s.action.available!==!1),i=n.filter(s=>s.action.available===!1);return[{label:"Frontier models",rows:r},{label:r.length?"Other models":"Models",rows:o},{label:"Unavailable · provider not configured",rows:i}].filter(s=>s.rows.length>0)}function qk(e,t,n){const r=n.refs&&typeof n.refs=="object"?n.refs:{},o=Object.entries(r).filter(([,a])=>!!a&&(!Array.isArray(a)||a.length>0)).map(([a])=>({type:a==="first_frame"||a==="last_frame"?"image":a,targetInput:a})),i=typeof n.operation=="string"?n.operation:t==="image"?"text_to_image":"text_to_video",s=gd(`generate_${t}`,typeof n.mode=="string"?n.mode:"",i,o);return hd(e,s).flatMap(a=>a.rows.map(({action:c,ranking:l})=>({...c,group:a.label,label:`${l?`#${l.rank} · `:""}${c.label}`,detail:[c.detail,l?`Elo ${l.elo} · ${l.priceLabel}`:"",c.available===!1?"unavailable":""].filter(Boolean).join(" · ")})))}function An(e,t,n){if(t===n)return!0;const r=new Map;for(const s of e){const a=r.get(s.source)??[];a.push(s.target),r.set(s.source,a)}const o=new Set,i=[n];for(;i.length>0;){const s=i.pop();if(!(!s||o.has(s))){if(s===t)return!0;o.add(s),i.push(...r.get(s)??[])}}return!1}function rt(e,t,n,r){if(!An(t,n,r))return t;const o=e.find(s=>s.id===n);if(n===r||o?.type!=="image"||!o.outputArtifactId)return null;const i=t.filter(s=>s.target!==n||!An(t,s.source,r));return An(i,n,r)?null:i}function Uk(e,t,n=[]){const r=t.source,o=t.target;return!r||!o?!1:rt(n,e,r,o)!==null}function Bk(e,t,n){return new Set(e.filter(r=>rt(e,t,r.id,n)===null).map(r=>ue(r.slot)))}function ts(e,t){return t[e.name]??e.defaultValue}function Hk(e,t){return Object.fromEntries(e.flatMap(n=>{const r=ts(n,t);return r===void 0?[]:[[n.name,r]]}))}function bd(e,t){return e.minimum===void 0?!1:e.exclusiveMinimum?t<=e.minimum:t<e.minimum}function yd(e,t){return e.maximum===void 0?!1:e.exclusiveMaximum?t>=e.maximum:t>e.maximum}function _d(e,t){const n=ts(e,t);return n===void 0||n===""?e.required?`${e.label}: Required`:null:e.options.length>0&&!e.options.some(r=>r===n)?`${e.label}: Choose one of the listed values`:e.valueType==="number"?typeof n!="number"||!Number.isFinite(n)?`${e.label}: Enter a number`:bd(e,n)?e.exclusiveMinimum?`${e.label}: Must be greater than ${e.minimum}`:`${e.label}: Must be at least ${e.minimum}`:yd(e,n)?e.exclusiveMaximum?`${e.label}: Must be less than ${e.maximum}`:`${e.label}: Must be at most ${e.maximum}`:null:typeof n===e.valueType?null:`${e.label}: Required`}function Wk(e,t){const n=e.flatMap(r=>{const o=_d(r,t);return o?[o]:[]});return n.length>0?n.join("; "):null}function ht(e){return typeof e=="number"&&Number.isFinite(e)?e:null}function vd(e){return e==="image"||e==="video"||e==="audio"?e:null}function ns(e){return Array.isArray(e)?e.filter(t=>typeof t=="string"):[]}function fo(e){return typeof e=="string"||typeof e=="number"||typeof e=="boolean"?e:void 0}function kd(e){const t=h(e),n=x(t?.name),r=x(t?.label),o=x(t?.description),i=t?.kind,s=t?.valueType;if(!n||!r||!o||i!=="select"&&i!=="boolean"&&i!=="number"&&i!=="text"||s!=="string"&&s!=="number"&&s!=="boolean")return null;const a=fo(t?.defaultValue),c=Array.isArray(t?.options)?t.options.flatMap(m=>{const f=fo(m);return f===void 0?[]:[f]}):[],l=ht(t?.minimum),u=ht(t?.maximum);return{name:n,label:r,kind:i,valueType:s,required:t?.required===!0,...a===void 0?{}:{defaultValue:a},options:c,...l===null?{}:{minimum:l},...u===null?{}:{maximum:u},...t?.exclusiveMinimum===!0?{exclusiveMinimum:!0}:{},...t?.exclusiveMaximum===!0?{exclusiveMaximum:!0}:{},description:o}}function wd(e){const t=h(e),n=x(t?.field),r=vd(t?.kind),o=ns(t?.targets),i=ht(t?.min),s=t?.max,a=s===null?null:ht(s);return!n||!r||o.length===0||i===null||s!==null&&a===null?null:{field:n,kind:r,targets:o,min:i,max:a}}function Sd(e){const t=h(e),n=x(t?.id);if(!n||!Array.isArray(t?.slots))return null;const r=t.slots.map(wd).filter(i=>i!==null),o=Array.isArray(t.requiredGroups)?t.requiredGroups.map(ns).filter(i=>i.length>0):[];return{id:n,slots:r,requiredGroups:o}}function Id(e){const t=h(e);if(!Array.isArray(t?.modes))return null;const n=t.modes.map(Sd).filter(r=>r!==null);return n.length>0?{modes:n}:null}function xd(e){const n=h(e)?.actions;return Array.isArray(n)?n.flatMap(r=>{const o=h(r);if(!o||o.kind!=="generation")return[];const i=x(o.provider),s=x(o.model),a=x(o.operation),c=x(o.tool),l=x(o.title),u=Id(o.inputContract),m=Array.isArray(o.controls)?o.controls.map(kd).filter(p=>p!==null):[],f=Array.isArray(o.cellTypes)?o.cellTypes.filter(p=>typeof p=="string"&&xt(p)):[];if(!i||!s||!a||!c||!u||f.length===0)return[];const d=ht(o.defaultPriority);return[{id:x(o.id)??`generation.${c}`,cellTypes:f,provider:i,providerLabel:x(o.providerLabel)??i,model:s,operation:a,tool:c,title:l??c,isDefault:o.isDefault===!0,defaultPriority:d,inputContract:u,controls:m,...typeof o.available=="boolean"?{available:o.available}:{},...Array.isArray(o.frontier)?{frontier:es(o.frontier)}:{},...o.existingCellOnly===!0?{existingCellOnly:!0}:{}}]}):[]}function kr(e,t,n=!1){return e.filter(r=>r.cellTypes.includes(t)&&(n||!r.existingCellOnly))}function Kn(e){return{provider:e.provider,model:e.model,operation:e.operation,tool:e.tool}}function Ad(e){return{provider:e.provider?.trim()??"",model:e.model?.trim()??"",operation:e.operation?.trim()??"",tool:e.tool?.trim()??""}}function Ot(e,t){return["provider","model","operation","tool"].reduce((n,r)=>t[r]&&e[r]===t[r]?n+1:n,0)}function rs(e,t,n){const r=kr(e,t,!0).filter(c=>!c.existingCellOnly||c.tool===n.tool&&c.model===n.model),o=n.model?r.find(c=>c.model===n.model&&(!n.tool||c.tool===n.tool)):void 0;if(o)return o;const i=n.tool?r.filter(c=>c.tool===n.tool).sort((c,l)=>Ot(l,n)-Ot(c,n))[0]:void 0;if(i)return i;const s=n.model?r.find(c=>c.tool===n.model):void 0;return s||(n.model?r.filter(c=>c.model===n.model):n.operation?r.filter(c=>c.operation===n.operation):n.provider?r.filter(c=>c.provider===n.provider):[]).reduce((c,l)=>!c||Ot(l,n)>Ot(c,n)?l:c,null)}function zn(e){return e.type==="image"||e.type==="generate_image"?"image":e.type==="video"||e.type==="split_video"||e.type==="generate_video"||e.type==="concat"||e.type==="splice"?"video":e.type==="audio"||e.type==="extract_audio"||e.type==="generate_audio"?"audio":null}function os(e,t){return t==="first_frame"||t==="last_frame"||e==="audio"&&t==="replace_audio"?t:e}function Kk(e,t,n){const r=new Map(t.map(o=>[o.id,o]));return n.flatMap(o=>{if(o.target!==e)return[];const i=r.get(o.source),s=i?zn(i):null;return s?[{kind:s,target:os(s,o.targetInput)}]:[]})}function Ed(e,t){if(!t.has(e))return e;let n=2;for(;t.has(`${e}_${n}`);)n+=1;return`${e}_${n}`}function zk(e,t,n,r,o){const i=e.inputContract.modes.find(d=>d.id===t);if(!i)return[];const s=new Map(r.map(d=>[d.id,d])),a=o.filter(d=>d.target===n),c=a.flatMap(d=>{const p=s.get(d.source),g=p?zn(p):null;return g?[{sourceCellId:d.source,targetInput:d.targetInput,target:Zi(t,g,os(g,d.targetInput)),kind:g}]:[]}),l=new Set(a.map(d=>d.source)),u=new Set(a.map(d=>d.targetInput)),m=[],f=new Set;for(const d of r.filter(p=>p.id!==n).sort((p,g)=>p.slot.row-g.slot.row||p.slot.column-g.slot.column)){if(l.has(d.id)||rt(r,o,d.id,n)===null)continue;const p=zn(d);if(p)for(const g of i.slots){if(g.kind!==p)continue;const y=c.filter(v=>v.kind===g.kind&&g.targets.includes(v.target)).length;if(!(g.max!==null&&y>=g.max))for(const v of g.targets){const S=`${d.id}:${v}`;f.has(S)||(f.add(S),m.push({sourceCellId:d.id,targetInput:Ed(v,u),target:v,kind:p}))}}}return m}function Ct(e,t){return e.inputContract.modes.filter(n=>vr(n,t)===null)}function Xk(e,t,n){const r=e.inputContract.modes.find(o=>o.id===t);return!!(r&&vr(r,n)===null)}function Yk(e,t,n=""){return n&&e.inputContract.modes.some(r=>r.id===n)?n:Ct(e,t)[0]?.id??e.inputContract.modes[0]?.id??""}function Jk(e){return{t2v:"T2V · Text to video",i2v:"I2V · Image to video",r2v:"R2V · Reference to video",v2v:"V2V · Video to video",t2i:"T2I · Text to image",i2i:"I2I · Image to image",t2a:"T2A · Text to audio"}[e]??e.replaceAll("-"," ").replace(/^./,n=>n.toUpperCase())}function gn(e,t){return e.inputContract.modes.some(n=>vr(n,t)===null)}function Cd(e,t){const n=e.defaultPriority??Number.POSITIVE_INFINITY,r=t.defaultPriority??Number.POSITIVE_INFINITY;if(n!==r)return n-r;const o=e.title.localeCompare(t.title);if(o!==0)return o;const i=e.providerLabel.localeCompare(t.providerLabel);return i!==0?i:e.model.localeCompare(t.model)}function Md(e,t,n,r=!1){return kr(e,t,r).filter(o=>gn(o,n)).sort(Cd)}function Td(e,t,n=[]){if(!xt(e.type))return null;const r=Ad(e),o=rs(t,e.type,r);if(o)return Kn(o);if(Object.values(r).every(Boolean))return r;const i=Md(t,e.type,n)[0];return i?Kn(i):null}function wr(e){return Kn(e)}function Rd(e){return e.replace(/\b(image|text|reference|video|audio|frame)[\s-]+to[\s-]+(video|image|audio|text)\b/gi,(t,n,r)=>`${n[0]}2${r[0]}`.toUpperCase())}const Zk="Edit video follows the source aspect ratio and duration. Connect one 4–30 second video plus optional image or audio references.";function is(e,t){return e==="kie:bytedance/seedance-2-5"&&t==="v2v"}const En=[{id:"t2v",label:"Text to video",roles:[]},{id:"i2v",label:"Frames",roles:["first_frame","last_frame"],requireAny:["first_frame","last_frame"]},{id:"r2v",label:"References",roles:["image","video","audio"],requireAny:["image","video","audio"]}],ot=[{id:"i2v",label:"Frames",roles:["first_frame","last_frame"]}],Cn={aspect_ratio:"auto",duration:5,generate_audio:!0,resolution:"720p",reasoning_level:"high"},$d=[{id:"r2v",label:"References",roles:["image","video","audio"],requireAny:["image","video","audio"]},{id:"v2v",label:"Edit video",roles:["video","image","audio"],requireAny:["video"],defaults:{task:"editing"}},{id:"extend",label:"Extend video",roles:["video","image","audio"],requireAny:["video"],defaults:{task:"extension"}}],Nd=[{id:"i2v",label:"Image to video",roles:["first_frame"]},{id:"r2v",label:"References",roles:["image"]},{id:"v2v",label:"Edit video",roles:["video"],requireAny:["video"]}],it={id:"i2v",label:"Frames",roles:["first_frame","last_frame"],requireAny:["first_frame"]},Lt=["image","video","audio"];function st(e,t,n=t){return[{id:"t2v",label:"Text to video",roles:[]},e,{id:"r2v",label:"References",roles:t,requireAny:n}]}function Ft(e){const t={minimum:2e3,maximum:e*1e3,maximumTotal:e*1e3};return{refDurationMs:{video:t,audio:t}}}const at=["text_to_video","image_to_video","reference_to_video"],en="Speaker 1";function mo(e,t){return{id:e,media:"audio",operations:["speech"],title:t,prompt:"dialogue_turns.0.text",aliases:{voice:"speakers.0.voice_name",accent:"speakers.0.accent",style:"speakers.0.style",pace:"speakers.0.pace"},defaults:{speakers:[{speaker_id:en,voice_name:"Kore",accent:"Neutral"}],dialogue_turns:[{speaker_id:en}]}}}function po(e,t){return{id:e,media:"audio",operations:["speech"],title:t,prompt:"dialogue_turns.0.text",aliases:{voice:"speakers.0.voice_name",style:"dialogue_turns.0.style"},defaults:{speakers:[{speaker_id:en,voice_name:"Fola"}],dialogue_turns:[{speaker_id:en}]}}}function go(e,t){return{id:e,media:"audio",operations:["speech"],title:t,defaults:{voice:"Rachel"}}}function ct(e){return{id:`fal:minimax/h3-max/styles/${e}`,media:"video",operations:["text_to_video","image_to_video"],dialect:"strip_frames"}}const Pd=[{id:"kie:nano-banana-2-1",media:"image",operations:["text_to_image","edit_image"],dialect:"natural_numbered",defaults:{...va}},{id:"kie:flux-3/klein-text-to-image",media:"image",operations:["text_to_image"],dialect:"natural",defaults:{resolution:"1K"}},{id:"kie:flux-3/klein-edit-image",media:"image",operations:["edit_image"],dialect:"natural",defaults:{resolution:"1K"}},{id:"kie:nano-banana-pro",media:"image",operations:["text_to_image","edit_image"],guide:"nano_banana",dialect:"natural"},{id:"kie:gpt-image-2-5-flare-text-to-image",media:"image",operations:["text_to_image"],guide:"gpt_image",dialect:"natural",defaults:{resolution:"2K"}},{id:"kie:gpt-image-2-5-flare-image-to-image",media:"image",operations:["edit_image"],guide:"gpt_image",dialect:"natural",defaults:{resolution:"2K"}},{id:"kie:gpt-image-2-5-sunburst-text-to-image",media:"image",operations:["text_to_image"],guide:"gpt_image",dialect:"natural",defaults:{resolution:"2K"}},{id:"kie:gpt-image-2-5-sunburst-image-to-image",media:"image",operations:["edit_image"],guide:"gpt_image",dialect:"natural",defaults:{resolution:"2K"}},{id:"kie:gpt-image-2-image-to-image",media:"image",operations:["edit_image"],title:"GPT Image 2 Edit",dialect:"natural",hidden:!0},{id:"kie:seedream/5-pro-image-to-image",media:"image",operations:["edit_image"],dialect:"natural",hidden:!0},{id:"kie:grok-imagine/text-to-image",media:"image",operations:["text_to_image"],guide:"grok_image"},{id:"kie:grok-imagine/image-to-image",media:"image",operations:["edit_image"],guide:"grok_image",dialect:"natural"},{id:"kie:qwen2/image-edit",media:"image",operations:["edit_image"],dialect:"natural"},{id:"kie:qwen3/image-to-image",media:"image",operations:["edit_image"],dialect:"natural"},{id:"kie:qwen2-1/text-to-image",media:"image",operations:["text_to_image"],dialect:"natural"},{id:"kie:qwen2-1/image-to-image",media:"image",operations:["edit_image"],dialect:"natural"},{id:"kie:seedream/5-lite-text-to-image",media:"image",operations:["text_to_image"]},{id:"kie:seedream/5-lite-image-to-image",media:"image",operations:["edit_image"],dialect:"natural"},{id:"kie:seedream/5-flash-text-to-image",media:"image",operations:["text_to_image"]},{id:"kie:seedream/5-flash-image-to-image",media:"image",operations:["edit_image"]},{id:"kie:seedream/5-flash-layer-decomposition",media:"image",operations:["layer_image"]},{id:"alibaba:qwen-image-2.0-pro",media:"image",operations:["text_to_image"],title:"Qwen Image 2.0 Pro (Alibaba)"},{id:"alibaba:qwen-image-edit-plus",media:"image",operations:["edit_image"],title:"Qwen Image Edit Plus (Alibaba)"},{id:"fal:fal-ai/nano-banana",media:"image",operations:["text_to_image"],guide:"nano_banana",hidden:!0},{id:"fal:fal-ai/nano-banana/edit",media:"image",operations:["edit_image"],guide:"nano_banana",hidden:!0},{id:"fal:fal-ai/nano-banana-2",media:"image",operations:["text_to_image"],guide:"nano_banana",hidden:!0},{id:"fal:fal-ai/nano-banana-2/edit",media:"image",operations:["edit_image"],guide:"nano_banana",hidden:!0},{id:"fal:google/nano-banana-2-lite",media:"image",operations:["text_to_image"],guide:"nano_banana",hidden:!0},{id:"fal:google/nano-banana-lite/edit",media:"image",operations:["edit_image"],guide:"nano_banana",hidden:!0},{id:"fal:fal-ai/nano-banana-pro",media:"image",operations:["text_to_image"],guide:"nano_banana",hidden:!0},{id:"fal:fal-ai/nano-banana-pro/edit",media:"image",operations:["edit_image"],guide:"nano_banana",hidden:!0},{id:"fal:google/nano-banana-2.1",media:"image",operations:["text_to_image"],guide:"nano_banana",hidden:!0},{id:"fal:google/nano-banana-2.1/edit",media:"image",operations:["edit_image"],guide:"nano_banana",hidden:!0},{id:"fal:fal-ai/bytedance/seedream/v5/lite/text-to-image",media:"image",operations:["text_to_image"],hidden:!0},{id:"fal:fal-ai/bytedance/seedream/v5/lite/edit",media:"image",operations:["edit_image"],hidden:!0},{id:"fal:xai/grok-imagine-image",media:"image",operations:["text_to_image"],guide:"grok_image",hidden:!0},{id:"fal:xai/grok-imagine-image/edit",media:"image",operations:["edit_image"],guide:"grok_image",hidden:!0},{id:"fal:fal-ai/qwen-image",media:"image",operations:["text_to_image"],hidden:!0},{id:"fal:fal-ai/qwen-image-edit",media:"image",operations:["edit_image"],hidden:!0},{id:"fal:alibaba/qwen-image-3/edit",media:"image",operations:["edit_image"]},{id:"fal:fal-ai/wan/v2.7/edit",media:"image",operations:["edit_image"],rules:{maxPromptChars:500},hidden:!0},{id:"fal:bria/fibo-edit-1.5/product-holding",media:"image",operations:["edit_image"],prompt:"instruction",refs:{image:["person_image_url","product_image_urls"]}},{id:"fal:bria/fibo-edit-1.5/virtual-try-on",media:"image",operations:["edit_image"],prompt:"instruction",refs:{image:["person_image_url","garment_image_urls"]}},{id:"fal:recraft/v4.1/flash/text-to-image",media:"image",operations:["text_to_image"]},{id:"fal:bytedance/seedream/v5/flash/text-to-image",media:"image",operations:["text_to_image"]},{id:"fal:bytedance/seedream/v5/flash/edit",media:"image",operations:["edit_image"]},{id:"fal:bytedance/seedream/v5/flash/layerize",media:"image",operations:["layer_image"]},{id:"fal:ideogram/v4.5",media:"image",operations:["text_to_image"]},{id:"fal:ideogram/v4.5/edit",media:"image",operations:["edit_image"],refs:{image:["image_url","reference_image_urls"]}},{id:"fal:blackforestlabs/flux-3/text-to-image",media:"image",operations:["text_to_image"]},{id:"fal:blackforestlabs/flux-3/edit-image",media:"image",operations:["edit_image"]},{id:"fal:bria/fibo-2/generate",media:"image",operations:["text_to_image"]},{id:"fal:bria/fibo-2/edit",media:"image",operations:["edit_image"],prompt:"instruction"},{id:"fal:fal-ai/flux-2-flex",media:"image",operations:["text_to_image"]},{id:"fal:bria/guided-remove-background",media:"image",operations:["edit_image"]},{id:"fal:bria/fibo-edit-1.5/expand",media:"image",operations:["edit_image"]},{id:"fal:fal-ai/marigold-v2",media:"image",operations:["edit_image"]},{id:"kie:bytedance/seedance-2-5",media:"video",operations:["text_to_video","image_to_video","reference_to_video","edit_video"],guide:"seedance25",dialect:"seedance",modes:[...En,{id:"v2v",label:"Edit video",roles:["video","image","audio"],requireAny:["video"]}],defaults:{..._a},frameOptions:{aspect_ratio:"adaptive"}},{id:"kie:bytedance/seedance-2-5-draft",media:"video",operations:["upscale_video"],title:"Seedance 2.5 Draft Complete",description:"Render the 1080p final of a Seedance 2.5 draft: a 480p kie:bytedance/seedance-2-5 run with draft on. Pass that run's Kie task id as draft_task_id.",defaults:{resolution:"1080p"}},{id:"kie:grok-imagine/image-to-video",media:"video",operations:["image_to_video"],guide:"grok_imagine"},{id:"kie:grok-imagine/text-to-video",media:"video",operations:["text_to_video"],guide:"grok_imagine",defaults:{duration:6,resolution:"480p"}},{id:"kie:grok-imagine/extend",media:"video",operations:["extend_video"],hidden:!0},{id:"kie:grok-imagine/upscale",media:"video",operations:["upscale_video"],hidden:!0},{id:"kie:kling-3.0-omni/text-to-video",media:"video",operations:["text_to_video"],guide:"kling30",dialect:"natural",defaults:{customize_multi_shots:!1}},{id:"kie:kling-3.0-omni/image-to-video",media:"video",operations:["image_to_video"],guide:"kling30",dialect:"natural"},{id:"kie:kling-3.0-omni/reference-to-video",media:"video",operations:["reference_to_video"],guide:"kling30",dialect:"natural",defaults:{audio:!1}},{id:"kie:kling-3.0-omni/transformation",media:"video",operations:["edit_video"],guide:"kling30",dialect:"natural",modes:[{id:"v2v",label:"Edit video",roles:["video"],requireAny:["video"],defaults:{aspect_ratio:"auto"}},{id:"v2v_refs",label:"Edit with references",roles:["video","image"],requireAny:["video"]}]},{id:"kie:kling-3.0/motion-control",media:"video",operations:["motion_control"],guide:"kling30",dialect:"natural",defaults:{mode:"720p"}},{id:"kie:gemini-omni-video",media:"video",operations:["image_to_video","edit_video"],dialect:"natural_source_video",defaults:{duration:"8"},modes:[{id:"i2v",label:"Image to video",roles:["image"]},{id:"v2v",label:"Edit video",roles:["video","image"],requireAny:["video"]}],refItem:{video:{start:0,ends:8}},aliases:{clip_start:"video_list.0.start",clip_end:"video_list.0.ends"}},{id:"kie:wan/3-0-video",media:"video",operations:["text_to_video","image_to_video","reference_to_video"],dialect:"seedance",modes:En},{id:"kie:wan/3-0-video-prime",media:"video",operations:["text_to_video","image_to_video","reference_to_video"],dialect:"seedance",modes:En},{id:"kie:happyhorse-1-1/text-to-video",media:"video",operations:["text_to_video"]},{id:"kie:happyhorse-1-1/image-to-video",media:"video",operations:["image_to_video"],dialect:"strip_frames"},{id:"kie:happyhorse-1-1/reference-to-video",media:"video",operations:["reference_to_video"],dialect:"brackets"},{id:"kie:happyhorse/video-edit",media:"video",operations:["edit_video"],dialect:"happyhorse_edit"},{id:"kie:minimax-h3/text-to-video",media:"video",operations:["text_to_video"]},{id:"kie:minimax-h3/image-to-video",media:"video",operations:["image_to_video"],dialect:"strip_frames"},{id:"kie:minimax-h3/reference-to-video",media:"video",operations:["reference_to_video"],dialect:"natural",rules:{refDurationMs:ea}},{id:"kie:volcengine/video-to-video-lip-sync",media:"video",operations:["lip_sync"]},{id:"kie:omnihuman-1-5",media:"video",operations:["image_to_video","lip_sync"],dialect:"natural"},{id:"kie:vidu-q4/image-to-video",media:"video",operations:["image_to_video"],dialect:"natural_kinds"},{id:"kie:vidu-q4/reference-to-video",media:"video",operations:["reference_to_video"],dialect:"natural_kinds"},{id:"kie:veo3",media:"video",operations:["text_to_video","image_to_video"],title:"Veo 3 (Kie)"},{id:"kie:veo3_fast",media:"video",operations:["text_to_video","image_to_video"],title:"Veo 3 Fast (Kie)"},{id:"xai:grok-imagine-video",media:"video",operations:["text_to_video","image_to_video","reference_to_video","edit_video"],guide:"grok_imagine",title:"Grok Imagine Video (xAI)",dialect:"natural",refs:{first_frame:"image",audio:null},modes:Nd},{id:"fal:xai/grok-imagine-video/image-to-video",media:"video",operations:["image_to_video"],guide:"grok_imagine",hidden:!0},{id:"fal:xai/grok-imagine-video/reference-to-video",media:"video",operations:["reference_to_video"],guide:"grok_imagine",hidden:!0},{id:"fal:xai/grok-imagine-video/extend-video",media:"video",operations:["extend_video"],hidden:!0},{id:"fal:xai/grok-imagine-video/edit-video",media:"video",operations:["edit_video"],guide:"grok_imagine",hidden:!0},{id:"fal:xai/grok-imagine-video/v1.5/lite/image-to-video",media:"video",operations:["image_to_video"]},{id:"fal:xai/grok-imagine-video/v1.5/lite/text-to-video",media:"video",operations:["text_to_video"]},{id:"fal:alibaba/wan-3.0/text-to-video",media:"video",operations:["text_to_video"],hidden:!0},{id:"fal:alibaba/wan-3.0/image-to-video",media:"video",operations:["image_to_video"],hidden:!0},{id:"fal:alibaba/wan-3.0/reference-to-video",media:"video",operations:["reference_to_video"],hidden:!0},{id:"fal:alibaba/wan-3.0-prime/text-to-video",media:"video",operations:["text_to_video"],hidden:!0},{id:"fal:alibaba/wan-3.0-prime/image-to-video",media:"video",operations:["image_to_video"],hidden:!0},{id:"fal:alibaba/wan-3.0-prime/reference-to-video",media:"video",operations:["reference_to_video"],hidden:!0},{id:"fal:kling/v4/text-to-video",media:"video",operations:["text_to_video"],dialect:"seedance"},{id:"fal:kling/v4/image-to-video",media:"video",operations:["image_to_video"],dialect:"seedance",modes:ot},{id:"fal:kling/v4/reference-to-video",media:"video",operations:["reference_to_video"],dialect:"seedance"},{id:"fal:kling/v4/video-to-video/edit",media:"video",operations:["edit_video"],dialect:"seedance"},{id:"fal:heygen/heygen-video/text-to-video",media:"video",operations:["text_to_video"],dialect:"natural"},{id:"fal:heygen/heygen-video/image-to-video",media:"video",operations:["image_to_video"],dialect:"strip_frames",refs:{first_frame:"image_url"}},{id:"fal:heygen/heygen-video/reference-to-video",media:"video",operations:["reference_to_video"],dialect:"natural",modes:[{id:"r2v",label:"References",roles:["image","video","audio"],requireAny:["image","video"]}]},...[3,4].map(e=>({id:`fal:fal-ai/heygen/avatar${e}/digital-twin`,media:"video",operations:["text_to_video"],dialect:"plain",prompt:"voice.prompt",defaults:{character:{avatar:"Abigail Office Front"},voice:{voice:"Ivy"}},aliases:{avatar:"character.avatar",avatar_style:"character.avatar_style",voice:"voice.voice",voice_id:"voice.voice_id",speed:"voice.speed"}})),{id:"fal:fal-ai/heygen/avatar5/digital-twin",media:"video",operations:["text_to_video"],dialect:"plain"},{id:"fal:fal-ai/heygen/avatar4/image-to-video",media:"video",operations:["image_to_video"],dialect:"plain",defaults:{voice:"Ivy"}},{id:"fal:fal-ai/heygen/v2/video-agent",media:"video",operations:["text_to_video"],dialect:"plain"},{id:"fal:fal-ai/heygen/v3/video-agent",media:"video",operations:["text_to_video"],dialect:"plain"},{id:"fal:blackforestlabs/flux-3-max/text-to-video",media:"video",operations:["text_to_video"],title:"FLUX 3 Max",defaults:Cn},{id:"fal:blackforestlabs/flux-3-max/image-to-video",media:"video",operations:["image_to_video"],title:"FLUX 3 Max Image",refs:{first_frame:"image_url"},modes:ot,defaults:Cn},{id:"fal:blackforestlabs/flux-3-max/keyframes-to-video",media:"video",operations:["image_to_video"],title:"FLUX 3 Max Keyframes",refs:{image:"keyframes"},keyframeFps:24,defaults:Cn},{id:"fal:minimax/h3-max/reframe-video",media:"video",operations:["edit_video"]},{id:"fal:minimax/h3-max/insert-video",media:"video",operations:["edit_video"],refs:{video:["video_url","reference_video_urls"]}},{id:"fal:minimax/h3-max/recast",media:"video",operations:["edit_video"]},{id:"fal:minimax/h3-max-turbo/extend-video",media:"video",operations:["extend_video"]},{id:"fal:minimax/h3-max/relight",media:"video",operations:["edit_video"]},ct("16bit-pixel"),ct("hand-drawn"),ct("low-poly"),ct("retro-toon-70s"),ct("vhs"),{id:"fal:bytedance/seedance-2.5/us/text-to-video",media:"video",operations:["text_to_video"],guide:"seedance25",dialect:"seedance",hidden:!0},{id:"fal:bytedance/seedance-2.5/us/image-to-video",media:"video",operations:["image_to_video"],guide:"seedance25",dialect:"seedance",refs:{first_frame:"image_url"},modes:ot,hidden:!0},{id:"fal:bytedance/seedance-2.5/us/reference-to-video",media:"video",operations:["reference_to_video","edit_video","extend_video"],guide:"seedance25",dialect:"seedance",modes:$d,hidden:!0},{id:"fal:bytedance/seedance-2.5/draft/complete",media:"video",operations:["upscale_video"],title:"Seedance 2.5 Draft Complete",hidden:!0},{id:"fal:bytedance/seedance-2.0/us/text-to-video",media:"video",operations:["text_to_video"],guide:"seedance2",dialect:"seedance"},{id:"fal:bytedance/seedance-2.0/us/image-to-video",media:"video",operations:["image_to_video"],guide:"seedance2",dialect:"seedance",refs:{first_frame:"image_url"},modes:ot},{id:"fal:bytedance/seedance-2.0/us/reference-to-video",media:"video",operations:["reference_to_video"],guide:"seedance2",dialect:"seedance",modes:[{id:"r2v",label:"References",roles:["image","video","audio"],requireAny:["image","video"]}]},{id:"fal:fal-ai/kling-video/o3/standard/image-to-video",media:"video",operations:["image_to_video"],guide:"kling30",dialect:"strip_frames",refs:{first_frame:"image_url"},modes:ot},{id:"fal:fal-ai/kandinsky6-pro/text-to-video",media:"video",operations:["text_to_video"]},{id:"fal:fal-ai/kandinsky6-pro/image-to-video",media:"video",operations:["image_to_video"],dialect:"strip_frames"},{id:"fal:fal-ai/kandinsky6-lite/text-to-video",media:"video",operations:["text_to_video"]},{id:"fal:fal-ai/kandinsky6-lite/image-to-video",media:"video",operations:["image_to_video"],dialect:"strip_frames"},{id:"fal:fal-ai/kandinsky6-vsr",media:"video",operations:["upscale_video"]},{id:"fal:fal-ai/kandinsky6-vsr/lite",media:"video",operations:["upscale_video"]},{id:"fal:fal-ai/vidu/q4/image-to-video",media:"video",operations:["image_to_video"],dialect:"natural_kinds",hidden:!0},{id:"fal:fal-ai/vidu/q4/reference-to-video",media:"video",operations:["reference_to_video"],dialect:"vidu",hidden:!0},{id:"fal:pixverse/music-video/vibemv",media:"video",operations:["reference_to_video"],refs:{image:["image_url","style_image_url"]}},{id:"fal:pixelcut/looping-video",media:"video",operations:["image_to_video"],dialect:"strip_frames"},{id:"fal:creatify/boreal",media:"video",operations:["text_to_video","image_to_video","lip_sync"]},{id:"fal:mirelo-ai/sfx2.0/video-to-video",media:"video",operations:["edit_video"],prompt:"text_prompt",defaults:{num_samples:1}},{id:"machgen:MiniMax-H3",media:"video",operations:at,title:"MiniMax H3 (MachGen)",dialect:"natural_strip_frames",modes:st({...it,requireAny:["first_frame","last_frame"]},Lt),rules:Ft(15)},{id:"machgen:Seedance-2.5",media:"video",operations:at,title:"Seedance 2.5 (MachGen)",guide:"seedance25",dialect:"natural_strip_frames",modes:st(it,Lt),frameOptions:{aspect_ratio:"adaptive"},rules:Ft(30)},{id:"machgen:Seedance-2.0",media:"video",operations:at,title:"Seedance 2.0 (MachGen)",guide:"seedance2",dialect:"natural_strip_frames",modes:st(it,Lt,["image","video"]),rules:Ft(15)},{id:"machgen:Alibaba-Wan-3.0",media:"video",operations:at,title:"Wan 3.0 (MachGen)",dialect:"natural_strip_frames",modes:st(it,Lt),rules:Ft(15)},{id:"machgen:HappyHorse-1.1",media:"video",operations:at,title:"HappyHorse 1.1 (MachGen)",dialect:"natural_strip_frames",modes:st({...it,roles:["first_frame"]},["image"])},{id:"machgen:Grok-Imagine-Video-1.5",media:"video",operations:["image_to_video"],title:"Grok Imagine Video 1.5 (MachGen)",guide:"grok_imagine",dialect:"natural_strip_frames"},{id:"elevenlabs:text-to-speech",media:"audio",operations:["speech"],title:"ElevenLabs Text to Speech",defaults:{model_id:"eleven_multilingual_v2"}},{id:"elevenlabs:sound-generation",media:"audio",operations:["sfx"],title:"ElevenLabs Sound Effects"},{id:"elevenlabs:music",media:"audio",operations:["music"],title:"ElevenLabs Music",defaults:{force_instrumental:!0}},{id:"elevenlabs:video-to-music",media:"audio",operations:["video_to_music"],title:"ElevenLabs Video to Music"},{id:"kie:elevenlabs/sound-effect-v2",media:"audio",operations:["sfx"]},go("kie:elevenlabs/text-to-speech-multilingual-v2","ElevenLabs Multilingual v2 (Kie)"),go("kie:elevenlabs/text-to-speech-turbo-2-5","ElevenLabs Turbo 2.5 (Kie)"),{id:"kie:elevenlabs/text-to-dialogue-v3",media:"audio",operations:["dialogue"],title:"ElevenLabs v3 Dialogue (Kie)",prompt:"dialogue.0.text",aliases:{voice:"dialogue.0.voice"},defaults:{dialogue:[{voice:"Rachel"}]}},mo("kie:google/gemini-2-5-pro-tts","Gemini 2.5 Pro TTS (Kie)"),mo("kie:google/gemini-3-1-flash-tts","Gemini 3.1 Flash TTS (Kie)"),po("kie:google/gemini-3-8-flash-tts","Gemini 3.8 Flash TTS (Kie)"),po("kie:google/gemini-3-8-flash-lite-tts","Gemini 3.8 Flash Lite TTS (Kie)"),{id:"kie:suno/generate",media:"audio",operations:["music"],title:"Suno (Kie)",defaults:{model:"V5_5",instrumental:!0,customMode:!1}},{id:"kie:suno/sounds-generate",media:"audio",operations:["sfx"],title:"Suno Sounds (Kie)",defaults:{model:"V5_5"}},{id:"fal:elevenlabs/music/v2.5",media:"audio",operations:["music"],defaults:{force_instrumental:!0,output_format:"mp3_48000_192"}},{id:"fal:minimax/music-3",media:"audio",operations:["music"],defaults:{lyrics:"[Instrumental]"}},{id:"fal:elevenlabs/tts/eleven-v4",media:"audio",operations:["speech"],defaults:{voice:"Rachel",output_format:"mp3_44100_128"}},{id:"fal:elevenlabs/tts/eleven-v4-turbo",media:"audio",operations:["speech"],defaults:{voice:"Rachel",output_format:"mp3_44100_128"}},{id:"fal:google/gemini-3.8-flash-tts",media:"audio",operations:["speech"],defaults:{voice:"Kore"}},{id:"fal:google/gemini-3.8-flash-lite-tts",media:"audio",operations:["speech"],defaults:{voice:"Kore"}},{id:"fal:alibaba/qwen-audio-3-tts",media:"audio",operations:["speech"],defaults:{voice:"Cherry",language:"Auto"}},{id:"fal:fal-ai/bytedance/seed-speech/tts/v2",media:"audio",operations:["speech"],defaults:{output_format:"mp3"}}],Od=new Map(Pd.map(e=>[e.id,e]));function Ld(e){return Od.get(e)}const Qk="Frame mode follows the first image’s aspect ratio (adaptive).";function Fd(e){if(e===null||typeof e!="object"||Array.isArray(e))return!1;const t=e;return[t.first_frame,t.last_frame].some(n=>typeof n=="string"&&n.trim()!==""||Array.isArray(n)&&n.some(r=>typeof r=="string"&&r.trim()!==""))}function ss(e,t){const n=Ld(e)?.frameOptions?.aspect_ratio;if(typeof n!="string")return;const r=t.generationMode??t.mode;if(r!=="r2v")return r==="i2v"||Fd(t.refs)?n:void 0}const Dd=200,Vd={chat:"chat",image_rewrite:"image rewrite",video_rewrite:"video rewrite",script_rewrite:"script rewrite",post:"post",image_generate:"image",video_generate:"video",audio_generate:"audio"};function jd(e){const t=h(e),r=(Array.isArray(t?.content)?t.content:[]).map(h).find(o=>o?.type==="text");return typeof r?.text=="string"?r.text:null}function Gd(e){const t=jd(e);if(!t)return e;try{return JSON.parse(t)}catch{return null}}function qd(e){const t=h(e);return typeof t?.model=="string"&&t.model?t.model:typeof t?.tool=="string"&&t.tool?t.tool:""}function Ud(e){const t=h(e);return!t||typeof t.prompt!="string"||!t.prompt.trim()?[]:[{id:String(t.id??""),surface:typeof t.surface=="string"?t.surface:"",prompt:t.prompt,book:typeof t.book=="string"?t.book:"",model:qd(t.params),createdAt:typeof t.created_at=="number"?t.created_at:0}]}function Bd(e){const t=h(Gd(e));return(Array.isArray(t?.entries)?t.entries:[]).flatMap(Ud)}function Hd(e){const t=new Set;return e.filter(n=>{const r=n.prompt.trim();return t.has(r)?!1:(t.add(r),!0)})}function ew(e,t){const n=t.trim().toLowerCase();return n?e.filter(r=>r.prompt.toLowerCase().includes(n)):[...e]}function tw(e,t){const n=e.filter(o=>t.has(o.prompt)),r=e.filter(o=>!t.has(o.prompt));return[...n,...r]}function Wd(e){return{book_id:e.bookId,scope:e.scope,limit:Dd,...e.surfaceFilter==="surface"?{surface:e.surface}:{}}}function nw(e){return Vd[e]??e.replaceAll("_"," ")}function Kd(e){return e<1e12?e*1e3:e}function rw(e,t){if(!e)return"";const n=Math.max(0,Math.floor((t-Kd(e))/6e4));if(n<1)return"just now";if(n<60)return`${n}m ago`;const r=Math.floor(n/60);if(r<24)return`${r}h ago`;const o=Math.floor(r/24);return o===1?"yesterday":`${o}d ago`}function as(e,t){return e.cells.find(n=>n.slot.row===t.row&&n.slot.column===t.column)}function Z(e){return ue(e.slot)}function cs(e){const t=ar(e).map(n=>n.reference);return[...new Set(t)]}function Sr(e,t){const n=ke(t),r=ni(n);if(r){const a=as(e,r);if(!a)throw new Error(`Notebook cell ${ue(r)} is empty`);return a}const o=e.cells.find(a=>a.id.toLowerCase()===n),i=o?[]:e.cells.filter(a=>a.id.toLowerCase().startsWith(n));if(i.length>1)throw new Error(`Cell reference @${n} is ambiguous`);const s=o??i[0];if(!s)throw new Error(`Notebook cell @${n} was not found`);return s}function ls(e){return cs(e)}function Ir(e){return e.type==="image"||e.type==="generate_image"?"image":e.type==="video"||e.type==="split_video"||e.type==="generate_video"||e.type==="concat"||e.type==="splice"?"video":e.type==="audio"||e.type==="extract_audio"||e.type==="generate_audio"?"audio":null}function zd(e,t){return t==="first_frame"||t==="last_frame"||e==="audio"&&t==="replace_audio"?t:e}function us(e){const t=new Map;return e.map(n=>{const r=(t.get(n.target)??0)+1;return t.set(n.target,r),r===1?n.target:`${n.target}_${r}`})}function ds(e){const t=e.map(s=>({kind:s.kind,target:s.kind})),n=["first_frame","last_frame"],r=e.map((s,a)=>({kind:s.kind,target:s.kind==="image"?n[a]??"image":s.kind})),o=e.map(s=>({kind:s.kind,target:s.kind==="audio"?"replace_audio":s.kind})),i=[t,r,o];return i.filter((s,a)=>i.findIndex(c=>JSON.stringify(c)===JSON.stringify(s))===a)}function fs(e){const t=e.preferredModel?kr(e.actions,e.cellType).find(r=>r.model===e.preferredModel):void 0;if(t&&gn(t,e.connectedInputs))return t;const n=Td({type:e.cellType},e.actions,e.connectedInputs);return n?rs(e.actions,e.cellType,n):null}function Xd(e,t){if(!t)return{};const n=t.options&&typeof t.options=="object"&&!Array.isArray(t.options)?t.options:{};return Object.fromEntries(e.controls.flatMap(r=>{const o=n[r.name]??t[r.name];return typeof o=="string"||typeof o=="number"||typeof o=="boolean"?[[r.name,o]]:[]}))}function ow(e){return ls(e)}function ho(e){return typeof e=="string"?[e]:Array.isArray(e)?e.filter(t=>typeof t=="string"):[]}function iw(e){const n=[...e.refs&&typeof e.refs=="object"&&!Array.isArray(e.refs)?Object.values(e.refs).flatMap(ho):[],...Object.entries(e).flatMap(([r,o])=>/(?:^|_)(?:ref|refs)$/u.test(r)?ho(o):[])];return ls(n.map(r=>r.startsWith("@")?r:`@${r}`).join(" "))}function sw(e,t,n){const r=n.find(i=>i.tool===e);if(r?.cellTypes[0])return r.cellTypes[0];const o=`${t} ${e}`.toLowerCase();return/audio|music|speech|t2a|voice/iu.test(o)?"generate_audio":/image|photo|picture|qart|qr/iu.test(o)?"generate_image":"generate_video"}function ms(e,t){const n=Ir(t);if(!n)throw new Error(`${Z(t)} is not a media-producing cell`);if(!Fe(e,t))throw new Error(`${Z(t)} does not have media output yet`);return{cell:t,kind:n}}function Yd(e,t){return t.map(n=>ms(e,Sr(e,n)))}function aw(e,t=[],n){const r=new Set(t);return e.cells.flatMap(o=>{if(r.has(o.id))return[];if(n&&rt(e.cells,e.edges,o.id,n)===null)return[];const i=Ir(o);return!i||!Fe(e,o)?[]:[{cell:o,kind:i}]})}function cw(e){const t=Yd(e.document,e.command.sourceReferences),n=t.find(p=>rt(e.document.cells,e.document.edges,p.cell.id,e.cellId)===null);if(n)throw new Error(`Connecting ${Z(n.cell)} would create a cycle`);let r=null,o=[];for(const p of ds(t)){const g=fs({actions:e.actions,cellType:e.command.cellType,connectedInputs:p,...e.preferredModel?{preferredModel:e.preferredModel}:{}});if(g){r=g,o=p;break}}if(!r)throw new Error(`No available ${e.command.mediaKind} generation action accepts these references`);const i=wr(r),s=Ct(r,o)[0],a=Xd(r,e.routedParams),c={...s?{generationMode:s.id}:{},...Object.keys(a).length>0?{generationSettings:a}:{}},l=t.map(p=>p.cell.slot),u=e.lastWorkSlot??null,m=e.command.cellType==="generate_video"?hr(e.document.cells,l,u):e.command.cellType==="generate_image"||e.command.cellType==="generate_audio"?mn(e.document.cells,l,u):e.fallbackSlot,f={id:e.cellId,type:e.command.cellType,slot:m,prompt:e.command.prompt,...i,...Object.keys(c).length>0?{inputs:c}:{}},d=us(o);return{action:r,cell:f,connections:t.map((p,g)=>({sourceCellId:p.cell.id,targetInput:d[g]??p.kind})),sourceCellIds:t.map(p=>p.cell.id),sourceAddresses:t.map(p=>Z(p.cell))}}function lw(e,t){const n=new Set(e.sourceCellIds);for(const r of cs(e.cell.prompt??"")){const o=Sr(t,r);if(!n.has(o.id))throw new Error(`@${r} is referenced but not connected`)}}function Jd(e,t){const n=e.connections.map(o=>({source:o.sourceCellId,target:e.cell.id,targetInput:o.targetInput})),r=new Map(dd(e.cell.id,t.cells,n,x(e.cell.inputs?.generationMode)??void 0).map(o=>[o.sourceCellId,o.token]));return ti(e.cell.prompt??"",t.cells.flatMap(o=>{const i=r.get(o.id);return i?[{reference:St(o.slot),replacement:`@${i}`}]:[]}))}function uw(e,t){return e.connections.flatMap(n=>{const r=t.cells.find(i=>i.id===n.sourceCellId),o=r?Ir(r):null;return o?[{kind:o,target:zd(o,n.targetInput)}]:[]})}function xr(e){const t=h(e.cell.inputs),n=h(t?.generationSettings),r=Object.fromEntries(Object.entries(n??{}).flatMap(([i,s])=>typeof s=="string"||typeof s=="number"||typeof s=="boolean"?[[i,s]]:[]));if(is(e.action.model,t?.generationMode))return{...r,aspect_ratio:"adaptive",duration:-1};const o=ss(e.action.model,t??{});return o?{...r,aspect_ratio:o}:r}function dw(e,t){return{...e,cell:{...e.cell,prompt:t}}}function fw(e,t,n){if(!t.cellTypes.includes(e.cell.type)||!gn(t,n))throw new Error("The selected generation model does not accept these inputs");const r=Ct(t,n),o=h(e.cell.inputs)??{},i=x(o.generationMode),s=r.find(l=>l.id===i)??r[0];if(!s)throw new Error("The selected generation model does not have a compatible mode");const a=xr(e),c=Object.fromEntries(t.controls.flatMap(l=>{const u=a[l.name];return u===void 0?[]:[[l.name,u]]}));return{...e,action:t,cell:{...e.cell,...wr(t),inputs:{...o,generationMode:s.id,generationSettings:c}}}}function mw(e,t,n){const r=Ct(e.action,n).find(o=>o.id===t);if(!r)throw new Error("The selected generation type does not accept these inputs");return{...e,cell:{...e.cell,inputs:{...h(e.cell.inputs)??{},generationMode:r.id}}}}function pw(e,t,n){if(!e.action.controls.some(o=>o.name===t))throw new Error(`The selected generation model does not support ${t}`);const r=xr(e);return n===void 0?delete r[t]:r[t]=n,{...e,cell:{...e.cell,inputs:{...h(e.cell.inputs)??{},generationSettings:r}}}}function gw(e){const t=e.draft.cell.type,n=[...new Set(e.sourceCellIds)].map(d=>{const p=e.document.cells.find(g=>g.id===d);if(!p)throw new Error("The selected source cell is no longer available");if(rt(e.document.cells,e.document.edges,p.id,e.draft.cell.id)===null)throw new Error(`Connecting ${Z(p)} to ${Z(e.draft.cell)} would create a cycle`);return ms(e.document,p)}),r=ds(n);let o=null,i=[];for(const d of r)if(gn(e.draft.action,d)){o=e.draft.action,i=d;break}if(!o)for(const d of r){const p=fs({actions:e.actions,cellType:t,connectedInputs:d});if(p){o=p,i=d;break}}if(!o){const d=t==="generate_audio"?"audio":t==="generate_image"?"image":"video";throw new Error(`No available ${d} generation action accepts these references`)}const s=Ct(o,i),a=h(e.draft.cell.inputs)??{},c=x(a.generationMode),l=s.find(d=>d.id===c)??s[0];if(!l)throw new Error("The selected generation model does not have a compatible mode");const u=xr(e.draft),m=Object.fromEntries(o.controls.flatMap(d=>{const p=u[d.name];return p===void 0?[]:[[d.name,p]]})),f=us(i);return{action:o,cell:{...e.draft.cell,...wr(o),inputs:{...a,generationMode:l.id,generationSettings:m}},connections:n.map((d,p)=>({sourceCellId:d.cell.id,targetInput:f[p]??d.kind})),sourceCellIds:n.map(d=>d.cell.id),sourceAddresses:n.map(d=>Z(d.cell))}}async function hw(e){let t=!1;try{const n=h(await e.callTool("create_notebook_cell",{book_id:e.bookId,notebook_id:e.document.id,...e.expectedRevision?{expected_revision:e.expectedRevision}:{},cell:{id:e.draft.cell.id,type:e.draft.cell.type,slot:e.draft.cell.slot,prompt:Jd(e.draft,e.document),provider:e.draft.cell.provider,model:e.draft.cell.model,operation:e.draft.cell.operation,tool:e.draft.cell.tool,inputs:e.draft.cell.inputs}})),r=x(n?.id);if(!r||r!==e.draft.cell.id)throw new Error("The server did not preserve the planned generation cell");t=!0;for(const o of e.draft.connections)await e.callTool("connect_notebook_cells",{book_id:e.bookId,notebook_id:e.document.id,source_cell_id:o.sourceCellId,target_cell_id:r,target_input:o.targetInput});return{cellId:r,cellAddress:x(n?.address)??Z(e.draft.cell),sourceCellIds:e.draft.sourceCellIds,sourceAddresses:e.draft.sourceAddresses}}catch(n){throw t&&await e.callTool("delete_notebook_cell",{book_id:e.bookId,notebook_id:e.document.id,cell_id:e.draft.cell.id}).catch(()=>{}),n}}const Zd=new Set(["","text","number","url","search","email","tel","date","time","datetime-local","password"]);function Qd(e){return!e||e.tagName.toLowerCase()!=="input"?!1:Zd.has((e.type??"").toLowerCase())}function bw(e,t){return e.defaultPrevented?"none":e.key==="Escape"?t.busy?"none":"cancel":e.key!=="Enter"||e.altKey||t.busy?"none":e.metaKey||e.ctrlKey||Qd(e.target)?"apply":"none"}const yw={transcribing:!1,analyzing:!1,error:null};function _w(e,t){return e.transcribing}function vw(e,t){return e==="transcript"?{transcribing:t}:{analyzing:t}}const kw="GPT-4o Translation",ww="ElevenLabs Transcript";function ef(e){return e==="timed"||e==="plain"||e==="silence"?e:null}function bo(e){return Array.isArray(e)?e.flatMap(t=>{const n=x(t);return n?[n]:[]}):[]}function ps(e){return typeof e=="number"&&Number.isFinite(e)&&e>0?Math.trunc(e):0}function tf(e){return Array.isArray(e)?e.flatMap(t=>{const n=h(t);return!n||typeof n.text!="string"?[]:typeof n.start!="number"||!Number.isFinite(n.start)?[]:typeof n.end!="number"||!Number.isFinite(n.end)?[]:[{text:n.text,start:n.start,end:n.end}]}):[]}function Mn(e){const t=h(e),n=t&&ef(t.kind);return!t||!n?null:{kind:n,languageCode:x(t.language_code??t.languageCode),text:typeof t.text=="string"?t.text:"",wordCount:ps(t.word_count??t.wordCount),words:tf(t.words)}}function nf(e){const t=h(e);if(!t)return null;if("elevenlabs"in t||"plain"in t){const r=Mn(t.elevenlabs),o=Mn(t.plain);return!r&&!o?null:{elevenlabs:r,plain:o}}const n=Mn(t);return n?n.kind==="plain"?{elevenlabs:null,plain:n}:{elevenlabs:n,plain:null}:null}function rf(e){const t=h(e);return t?{summary:typeof t.summary=="string"?t.summary:"",mood:x(t.mood),setting:x(t.setting),tags:bo(t.tags),subjects:bo(t.subjects),sceneCount:ps(t.scene_count??t.sceneCount)}:null}function We(e){return e==="video"||e==="audio"||e==="final"}function Sw(e){return!!(e&&e.kind!=="silence"&&e.text.trim())}function of(e){if(e.kind==="silence")return"No dialog detected";const t=[e.kind==="timed"?"Word-timed":"Plain text",`${e.wordCount} ${e.wordCount===1?"word":"words"}`];return e.languageCode&&t.push(e.languageCode),t.join(" · ")}const sf=.4,af=12;function cf(e){const t=[];let n=[];for(const r of e){const o=n.at(-1),i=o?r.start-o.end:0,s=o?/[.!?]$/.test(o.text.trim()):!1;if(n.length>0&&(i>sf||s||n.length>=af)){const a=n.map(c=>c.text).join(" ").replace(/\s+/g," ").trim();a&&t.push({start:n[0].start,text:a}),n=[]}n.push(r)}if(n.length>0){const r=n.map(o=>o.text).join(" ").replace(/\s+/g," ").trim();r&&t.push({start:n[0].start,text:r})}return t}function lf(e){const t=Math.max(0,Math.floor(e)),n=Math.floor(t/60),r=t%60;return`${n}:${String(r).padStart(2,"0")}`}function uf(e){return cf(e).map(t=>`${lf(t.start)} ${t.text}`).join(`
15
- `)}function Iw(e,t){return t==="json"&&e?"json":"text"}function df(e){const t=e.transcript;return!t||t.kind==="silence"?"":e.source==="elevenlabs"&&t.kind==="timed"&&t.words.length>0?uf(t.words):t.text}function ff(e){return e.view==="json"?e.jsonText??"":df(e)}function xw(e){return ff(e)}function Aw(e){return e.view==="json"?e.jsonFile?`Raw sidecar · ${e.jsonFile}`:"Raw sidecar":e.transcript?of(e.transcript):null}function Ew(e){return e.view==="json"&&e.jsonLoading?"Loading sidecar…":e.view==="json"&&e.jsonError?e.jsonError:e.transcript?.kind==="silence"?"This clip has a transcript but no spoken dialog.":e.body?null:e.source==="plain"?"No GPT-4o translation yet.":"No transcript yet."}function Cw(e){return e?.kind==="timed"}async function mf(e,t,n,r){const o=h(await e("export_asset_file",{book_id:n,asset_id:r,to:t==="copy"?"clipboard":"downloads"},{background:!0})),i=t==="copy"?"copied":"exported";if(o?.status!==i||typeof o.path!="string")throw new Error("The server did not confirm the file action. Try again.");return t==="copy"?"File copied to clipboard":`Saved ${o.path}`}function Mw({call:e,bookId:t,artifactId:n}){const[r,o]=_.useState({phase:"idle"}),i=_.useRef(!1),s=!!(e&&t&&n);async function a(c){if(!(!e||!t||!n||i.current)){i.current=!0,o({phase:"running",action:c});try{const l=await mf(e,c,t,n);o({phase:"done",message:l})}catch(l){o({phase:"failed",message:l instanceof Error?l.message:String(l)})}finally{i.current=!1}}}return{state:r,available:s,run:a}}function pf(e){const t=e;return t?xi(t.tags):null}function gf(e){const t=e;return!t||!Array.isArray(t.suggestions)?[]:t.suggestions.flatMap(n=>{const r=n,o=typeof r.facet=="string"?r.facet:null,i=typeof r.key=="string"?r.key:null,s=typeof r.label=="string"?r.label:null;if(!o||!i||!s)return[];const a=Number(r.assets);return[{facet:o,key:i,label:s,assets:Number.isFinite(a)?a:0}]})}function Tw({call:e,target:t,tags:n}){const r=t?`${t.bookId}/${t.assetId}`:"",o=JSON.stringify(n),[i,s]=_.useState({targetKey:r,source:o,canonical:n,pending:[],error:null}),[a,c]=_.useState({targetKey:r,tags:[]}),l=_.useRef(Promise.resolve()),u=_.useRef(0),m=_.useRef(0);let f=i;(i.targetKey!==r||i.source!==o)&&(f={targetKey:r,source:o,canonical:n,pending:i.targetKey===r?i.pending:[],error:i.targetKey===r?i.error:null},s(f));const d=f.pending.reduce((I,E)=>Jr(I,E.edit,E.action),f.canonical),p=_.useCallback((I,E)=>{if(!e||!t)return Promise.resolve();let C;try{C=Ii(I,[...d?.effective??[],...d?.dismissed??[],...a.targetKey===r?a.tags:[]])}catch(T){return s(N=>({...N,error:T instanceof Error?T.message:String(T)})),Promise.resolve()}const A=++u.current;s(T=>({...T,pending:[...T.pending,{id:A,edit:C,action:E}],error:null}));const $=l.current.then(async()=>{try{const T=await e("edit_asset_tag",{op:E,book_id:t.bookId,asset_id:t.assetId,facet:C.facet,label:C.label}),N=pf(T);if(!N)throw new Error("The server returned no tag state");s(M=>M.targetKey!==r||!M.pending.some(R=>R.id===A)?M:{...M,canonical:M.source===o?N:Jr(M.canonical,C,E),pending:M.pending.filter(R=>R.id!==A)})}catch(T){s(N=>N.targetKey!==r||!N.pending.some(M=>M.id===A)?N:{...N,pending:N.pending.filter(M=>M.id!==A),error:T instanceof Error?T.message:String(T)})}});return l.current=$,$},[e,d,a,o,t,r]),g=_.useCallback(I=>p(I,"add"),[p]),y=_.useCallback(I=>p(I,"remove"),[p]),v=_.useCallback(I=>p(I,"restore"),[p]),S=_.useCallback(async(I,E)=>{if(!e||!t)return;const C=++m.current;try{const A=await e("suggest_asset_tags",{book_id:t.bookId,...I.trim()?{prefix:I.trim()}:{},...E?{facet:E}:{},limit:20},{background:!0});m.current===C&&c({targetKey:r,tags:gf(A)})}catch{m.current===C&&c({targetKey:r,tags:[]})}},[e,t,r]),w=_.useMemo(()=>$l(a.targetKey===r?a.tags:[],d?.effective??[]),[d,a,r]),k=_.useCallback(()=>s(I=>({...I,error:null})),[]);return{tags:d,busy:f.pending.length>0,error:f.error,canEdit:!!(e&&t),suggestions:w,addTag:g,removeTag:y,restoreTag:v,loadSuggestions:S,clearError:k}}const gs="videobook.prompt-history.pins";function hf(){try{const e=window.localStorage.getItem(gs),t=e?JSON.parse(e):[];return new Set(Array.isArray(t)?t.filter(n=>typeof n=="string"):[])}catch{return new Set}}function bf(e){try{window.localStorage.setItem(gs,JSON.stringify([...e]))}catch{return}}function yf(e){return e instanceof Error?e.message:String(e)}function Rw({call:e,bookId:t,surface:n,prompt:r,onApply:o}){const[i,s]=_.useState(!1),[a,c]=_.useState(!1),[l,u]=_.useState(null),[m,f]=_.useState(null),[d,p]=_.useState(0),[g,y]=_.useState("book"),[v,S]=_.useState("surface"),[w,k]=_.useState(""),[I,E]=_.useState(hf),[C,A]=_.useState(-1),[$,T]=_.useState(""),N=_.useRef(0),M=!!(e&&t&&n),R=C>=0&&m?.[C]?.prompt===r,D=R?C:-1,z=async(P,Y)=>{if(!e||!t||!n)return null;const Me=N.current+1;N.current=Me;const Se={bookId:t,surface:n,scope:P,surfaceFilter:Y};c(!0),u(null);try{const Tt=Hd(Bd(await e("list_prompt_history",Wd(Se))));return N.current!==Me?null:(f(Tt),p(Date.now()),Tt)}catch(Tt){return N.current===Me&&u(yf(Tt)),null}finally{N.current===Me&&c(!1)}},q=(P,Y,Me)=>{if(Y<0){A(-1),o(Me);return}const Se=P[Y];Se&&(A(Y),o(Se.prompt))},J=()=>{if(!M)return;if(D>=0&&m){q(m,D+1,$);return}const P=r;T(P),z(g,v).then(Y=>{Y&&q(Y,0,P)})},pe=()=>{!R||!m||q(m,D-1,$)},ge=()=>{A(-1),o($)},K=()=>{if(i){s(!1);return}s(!0),k(""),z(g,v)},H=P=>{y(P),A(-1),z(P,v)},U=P=>{S(P),A(-1),z(g,P)},we=P=>{const Y=new Set(I);Y.has(P)?Y.delete(P):Y.add(P),E(Y),bf(Y)},Q=P=>{A(-1),s(!1),o(P)},B=P=>P.altKey&&P.key==="ArrowUp"?(P.preventDefault(),J(),!0):P.altKey&&P.key==="ArrowDown"?(P.preventDefault(),pe(),!0):P.key==="Escape"&&R?(P.preventDefault(),P.stopPropagation(),ge(),!0):!1;return{available:M,open:i,loading:a,error:l,entries:m,loadedAt:d,scope:g,surfaceFilter:v,surface:n??"",query:w,pins:I,stepping:R,position:D+1,canOlder:M&&(m===null||!R||D<m.length-1),canNewer:R,toggleOpen:K,close:()=>s(!1),setQuery:k,setScope:H,setSurfaceFilter:U,togglePin:we,use:Q,older:J,newer:pe,handlePromptKeyDown:B}}const _f={generate_image:"image_generate",generate_video:"video_generate",generate_audio:"audio_generate"};function $w(e){return _f[e]??null}function vf(e){return e==="image-reverse"?"image":"video"}async function Nw(e,{sourceBookId:t,sourceArtifactId:n,mode:r,previewUrl:o,sourceRange:i}){const s=await e("prepare_search_reference",{source_book_id:t,source_artifact_id:n,kind:vf(r),...i?{source_start_seconds:i.startSeconds,source_duration_seconds:i.durationSeconds}:{}});return hs(s,o)}function kf(e,t){if(e.type.startsWith(`${t}/`))return!0;const n=e.name.split(".").at(-1)?.toLowerCase()??"";return t==="image"?["jpg","jpeg","png","webp","heic","heif"].includes(n):["mp4","mov","webm","mkv","avi"].includes(n)}function Pw(e,t,n){const r=Number(e||"0");if(!Number.isFinite(r)||r<0)throw new Error("Reference start must be a non-negative number");const o=t.trim()?Number(t):void 0;if(o!==void 0&&(!Number.isFinite(o)||o<=0))throw new Error("Reference duration must be a positive number");const i=n.durationMs===void 0?void 0:n.durationMs/1e3;if(i!==void 0&&r>=i)throw new Error("Reference start must fall within the video");if(i!==void 0&&o!==void 0&&r+o>i)throw new Error("Reference range extends past the end of the video");if(!(r===0&&o===void 0))return{start_seconds:r,...o===void 0?{}:{duration_seconds:o}}}async function Ow(e,t,n){if(!kf(e,n))throw new Error(`Choose a compatible ${n} file`);const r=e.name.trim()||`${n}-reference.${n==="image"?"png":"mp4"}`,o=new URLSearchParams({filename:r,bookId:t,kind:n}),i=await fetch(`/api/search-references?${o}`,{method:"POST",headers:e.type?{"Content-Type":e.type}:{},body:e}),s=await i.json();if(!i.ok)throw new Error(lt(s,"error")??"Could not prepare search reference");const a=hs(s);return a.previewUrl?a:{...a,previewUrl:URL.createObjectURL(e),localPreview:!0}}async function wf(e){e&&(e.localPreview&&e.previewUrl&&URL.revokeObjectURL(e.previewUrl),await fetch(`/api/search-references/${encodeURIComponent(e.referenceId)}`,{method:"DELETE"}).catch(()=>{}))}function hs(e,t){const n=lt(e,"reference_id"),r=lt(e,"kind"),o=lt(e,"name"),i=yo(e,"expires_at");if(!n||r!=="image"&&r!=="video"||!o||i===null)throw new Error("The server returned an invalid search reference");const s=yo(e,"duration_ms"),a=lt(e,"preview_url")??t;return{referenceId:n,kind:r,name:o,expiresAt:i,...s===null?{}:{durationMs:s},...a?{previewUrl:a}:{}}}function lt(e,t){if(typeof e!="object"||e===null)return null;const n=e[t];return typeof n=="string"?n:null}function yo(e,t){if(typeof e!="object"||e===null)return null;const n=e[t];return typeof n=="number"&&Number.isFinite(n)?n:null}const bs=.25,_o=.01;function Xn(e){return Math.min(1,Math.max(0,e))}function Dt(e){return Math.round(Xn(e)*1e6)/1e6}function Sf(e,t){const n=Math.max(e.x,t.x),r=Math.max(e.y,t.y),o=Math.min(e.x+e.width,t.x+t.width),i=Math.min(e.y+e.height,t.y+t.height),s=Math.max(0,o-n)*Math.max(0,i-r),a=e.width*e.height+t.width*t.height-s;return a>0?s/a:0}function Lw(e,t){const n=Dt(Math.min(e.x,t.x)),r=Dt(Math.min(e.y,t.y)),o=Dt(Math.min(1-n,Math.abs(t.x-e.x))),i=Dt(Math.min(1-r,Math.abs(t.y-e.y)));return o<_o||i<_o?null:{x:n,y:r,width:o,height:i}}function Fw(e,t,n){return n.width<=0||n.height<=0?{x:0,y:0}:{x:Xn((e-n.left)/n.width),y:Xn((t-n.top)/n.height)}}function If(e,t,n=bs){return t.flatMap(o=>{if(!o.box)return[];const i=Sf(e,o.box);return i>=n?[{subjectId:o.id,iou:i,box:o.box}]:[]}).sort((o,i)=>i.iou-o.iou)[0]??null}function Dw(e,t,n=bs){const r=If(e.box,t,n);return r?{...e,box:r.box,matchedSubjectId:r.subjectId}:e}function Vw(e,t,n={}){return{subjectIds:[...e],regions:t.map(r=>({id:r.id,box:r.box,...r.matchedSubjectId?{matchedSubjectId:r.matchedSubjectId}:{}})),replacements:{...n}}}const xf="Mention a replacement image (for example @g7) or assign one in the panel.",Af="Mention one image for every region, or one image to use for all of them.",Ef="Draw a region or select a person or object to replace.";function ys(e){const t=new Set,n=[];for(const r of e){const o=r.trim();if(!o)continue;const i=o.toLowerCase();t.has(i)||(t.add(i),n.push(o))}return n}function jw(e,t,n=e){const r=new Set(e.flatMap(s=>s.matchedSubjectId?[s.matchedSubjectId]:[])),o=e.map(s=>({key:s.id,box:s.box,...s.matchedSubjectId?{subjectId:s.matchedSubjectId}:{},label:s.matchedSubjectId?t.find(a=>a.id===s.matchedSubjectId)?.label??`Region ${n.findIndex(a=>a.id===s.id)+1}`:`Region ${n.findIndex(a=>a.id===s.id)+1}`})),i=t.flatMap(s=>r.has(s.id)?[]:[{key:s.id,...s.box?{box:s.box}:{},subjectId:s.id,label:s.label}]);return[...o,...i]}function Gw(e,t){return e.length>0&&e.every(n=>!!t[n.key]?.trim())}function qw(e,t){return e.flatMap(n=>{const r=t[n.key]?.trim();return r?[{replacementArtifactId:r,...n.box?{box:n.box}:{},...n.subjectId?{subjectId:n.subjectId}:{}}]:[]})}function Uw(e,t,n){if(e.length===0)return{ok:!1,error:Ef};const r={};for(const s of e){const a=t[s.key]?.trim();a&&(r[s.key]=a)}const o=ys(n),i=e.filter(s=>!r[s.key]);if(o.length===1){const s=o[0];for(const a of i)r[a.key]=s}else if(o.length>1){if(o.length!==i.length)return{ok:!1,error:Af};i.forEach((s,a)=>{r[s.key]=o[a]})}return e.every(s=>!!r[s.key])?{ok:!0,replacements:r}:{ok:!1,error:xf}}function Bw(e,t){const n=new Map(t.map(i=>[i.cellAddress.toLowerCase(),i])),r=[],o=new Set;for(const i of ys(e)){const s=n.get(i.toLowerCase());if(!s)return{ok:!1,error:`@${i.toLowerCase()} is not an image on this notebook.`};if(s.type.toLowerCase()!=="image")return{ok:!1,error:`@${s.cellAddress} is a ${s.type}, not an image.`};o.has(s.artifactId)||(o.add(s.artifactId),r.push(s.artifactId))}return{ok:!0,artifactIds:r}}function Hw(e){return`region-${e.length+1}-${Math.random().toString(36).slice(2,8)}`}function Ww(e,t,n=!1){if(t.length>0)return`${t.map(o=>o.label).join(", ")}${n?" · replaced with another image":""}`;if(e.length===0)return null;const r=e.slice(0,3).map(o=>o.label).join(", ");return e.length>3?`${r} +${e.length-3}`:r}function Kw(e,t,n=!1){return n?"Optional notes for the replacement. Pick an image below, or mention one like @g7.":t.length>0?`Describe how to change ${t.map(r=>r.label).join(" and ")}, e.g. "remove the glass door". To replace with an image, pick one below or mention @g7.`:e.length===0?'Describe a whole-image edit, e.g. "make it look like a snowy night", or select a subject to scope the change.':`Describe how to change ${e.slice(0,2).map(r=>r.label).join(" and ")}, e.g. "make it smooth porcelain".`}function Cf(e){if(e<60)return`${e.toFixed(1)}s`;const t=Math.floor(e/60),n=Math.round(e%60);return`${t}:${String(n).padStart(2,"0")}`}function zw(e){const t=[];return e.width&&e.height&&t.push(`${e.width} × ${e.height}`),e.duration&&e.type!=="image"&&t.push(Cf(e.duration)),t.push(e.type==="final"?"VIDEO":e.type.toUpperCase()),t}const Mf=["button","input","select","textarea","[href]",'[contenteditable="true"]',"[tabindex]"].join(", ");function Tf(e){const t=e.getAttribute("tabindex");return!e.hidden&&!e.matches(':disabled, [type="hidden"]')&&(t===null||!Number.isFinite(Number(t))||Number(t)>=0)&&e.closest('[hidden], [aria-hidden="true"], [inert]')===null}function Rf(e){return[...e.querySelectorAll(Mf)].filter(Tf)}function $f(e,t,n){const r=e[0],o=e.at(-1);return!r||!o?null:e.includes(t)?n&&t===r?o:!n&&t===o?r:null:n?o:r}function Xw(e,t){if(e.key==="Escape"){t.busy||(e.preventDefault(),t.onClose());return}if(e.key!=="Tab"||!t.container)return;const n=Rf(t.container),r=t.activeElement===void 0?document.activeElement:t.activeElement,o=$f(n,r,e.shiftKey);o&&(e.preventDefault(),o.focus())}async function vo(e,t,n,r){await e("delete_notebook_cell",{book_id:t,notebook_id:n,cell_id:r}).catch(()=>{})}function Nf(e){const t=h(e);return x(t?.id)}async function Pf(e,t,n,r){const o=h(await e("get_notebook",{book_id:t,notebook_id:n}).catch(()=>null));if(!o)return null;const i=Array.isArray(o.cells)?o.cells:[],s=Array.isArray(o.edges)?o.edges:[];for(const a of s){const c=h(a),l=x(c?.source),u=x(c?.target),m=x(c?.targetInput??c?.target_input);if(l===r&&m==="media"&&u)return u}for(const a of i){const c=h(a);if(x(c?.type)!=="audio")continue;const l=h(c?.inputs);if(x(l?.producerCellId)===r)return Nf(c)}return null}async function Yw(e){const t=e.text.trim(),n=e.voiceId.trim();if(!t)throw new Error("Speak text is required");if(!n)throw new Error("Speak voice is required");const r=mn(e.document.cells,[],e.lastWorkSlot??null);let o=null,i=null;try{const s=h(await e.callTool("create_notebook_cell",{book_id:e.bookId,notebook_id:e.document.id,...e.expectedRevision?{expected_revision:e.expectedRevision}:{},cell:{type:"generate_audio",label:"Speak",slot:r,prompt:t,inputs:{generationSettings:{voice_id:n}}}}));o=x(s?.id),i=x(h(s?.output_cell)?.id);const a=x(s?.address)??ue(r);if(!o)throw new Error("The server did not return the Speak cell");if(!i)throw new Error("The server did not return the Speak output cell");return{cellId:o,cellAddress:a,outputCellId:i}}catch(s){let a=i;throw o&&!a&&(a=await Pf(e.callTool,e.bookId,e.document.id,o)),a&&await vo(e.callTool,e.bookId,e.document.id,a),o&&await vo(e.callTool,e.bookId,e.document.id,o),s}}function Of(e){const t=h(e);return{voices:Array.isArray(t?.voices)?t.voices.flatMap(r=>{const o=h(r),i=x(o?.voice_id)??x(o?.voiceId),s=x(o?.name),a=x(o?.source);if(!i||!s||a!=="custom"&&a!=="generic")return[];const c=x(o?.category),l=x(o?.preview_url)??x(o?.previewUrl);return[{voiceId:i,name:s,source:a,...c?{category:c}:{},...l?{previewUrl:l}:{}}]}):[],status:t?.status==="live"?"live":"fallback",warning:W(t?.warning)}}async function Lf(e){return Of(await e("list_elevenlabs_voices",{},{background:!0}))}function ko(){return{voices:[],status:"fallback",warning:null,loading:!1,error:null}}function Ff(e){let t=e.ready,n=e.load,r=0,o=!1,i=ko(),s=null;const a=new Set,c=m=>{i=m;for(const f of a)f()},l=()=>{r+=1,o=!1,s=null,c(ko())},u=()=>{if(!t)return Promise.resolve(null);if(s)return s;const m=r,f=Promise.resolve().then(()=>n()).then(d=>r!==m||s!==f?null:(o=!0,s=null,c({...d,loading:!1,error:null}),d),d=>(r!==m||s!==f||(o=!1,s=null,c({...i,loading:!1,error:d instanceof Error?d.message:String(d)})),null));return s=f,c({...i,loading:!0,error:null}),f};return{configure(m){t===m.ready&&n===m.load||(t=m.ready,n=m.load,l())},ensureLoaded(){return t?s||(o?Promise.resolve({voices:i.voices,status:i.status,warning:i.warning}):u()):Promise.resolve(null)},getSnapshot(){return i},refresh:u,reset:l,subscribe(m){return a.add(m),()=>a.delete(m)}}}function Jw(e){const t=ne.c(25),{callTool:n,ready:r}=e;let o;t[0]!==n?(o=()=>Lf(n),t[0]=n,t[1]=o):o=t[1];const i=o;let s;t[2]!==i||t[3]!==r?(s=()=>Ff({ready:r,load:i}),t[2]=i,t[3]=r,t[4]=s):s=t[4];const[a]=_.useState(s);let c,l;t[5]!==a||t[6]!==i||t[7]!==r?(c=()=>{a.configure({ready:r,load:i})},l=[a,i,r],t[5]=a,t[6]=i,t[7]=r,t[8]=c,t[9]=l):(c=t[8],l=t[9]),_.useEffect(c,l);let u,m;t[10]!==a?(u=()=>()=>a.reset(),m=[a],t[10]=a,t[11]=u,t[12]=m):(u=t[11],m=t[12]),_.useEffect(u,m);const f=_.useSyncExternalStore(a.subscribe,a.getSnapshot,a.getSnapshot);let d;t[13]!==a?(d=()=>a.ensureLoaded(),t[13]=a,t[14]=d):d=t[14];const p=d;let g;t[15]!==a?(g=()=>a.refresh(),t[15]=a,t[16]=g):g=t[16];const y=g;let v;return t[17]!==p||t[18]!==y||t[19]!==f.error||t[20]!==f.loading||t[21]!==f.status||t[22]!==f.voices||t[23]!==f.warning?(v={voices:f.voices,status:f.status,warning:f.warning,loading:f.loading,error:f.error,ensureLoaded:p,refresh:y},t[17]=p,t[18]=y,t[19]=f.error,t[20]=f.loading,t[21]=f.status,t[22]=f.voices,t[23]=f.warning,t[24]=v):v=t[24],v}function Df(e){const t=h(e);if(!t)return null;const n=r=>t[r]===!0;return{semantic:n("semantic"),regionReplace:n("regionReplace"),wholeImage:n("wholeImage"),exactMask:n("exactMask")}}function Vf(e){const t=h(e),n=Array.isArray(t?.models)?t.models:[],r=[];for(const o of n){const i=h(o),s=x(i?.id),a=x(i?.label),c=x(i?.provider),l=Df(i?.capabilities);if(!s||!a||c!=="kie"&&c!=="fal"||!l)continue;const u=typeof i?.max_input_images=="number"&&Number.isFinite(i.max_input_images)?i.max_input_images:null;r.push({id:s,label:a,provider:c,capabilities:l,maxInputImages:u,available:i?.available===!0})}return{models:r,defaultModelId:x(t?.default_model)??r[0]?.id??gi,lastUsedModelId:x(t?.last_used_model)}}function Zw(e){const t=ne.c(13),{callTool:n,ready:r}=e,[o,i]=_.useState(null),[s,a]=_.useState(!1),[c,l]=_.useState(null),u=_.useRef(null),m=_.useRef(null);let f;t[0]!==n||t[1]!==o||t[2]!==r?(f=S=>{if(!r||u.current||m.current===S&&o)return;a(!0),l(null);const w=n("list_image_edit_models",{book_id:S},{background:!0}).then(k=>{u.current===w&&(u.current=null,m.current=S,i(Vf(k)),a(!1))}).catch(k=>{u.current===w&&(u.current=null,l(k instanceof Error?k.message:String(k)),a(!1))});u.current=w},t[0]=n,t[1]=o,t[2]=r,t[3]=f):f=t[3];const d=f;let p;t[4]!==o?.models?(p=o?.models??[],t[4]=o?.models,t[5]=p):p=t[5];const g=o?.defaultModelId??gi,y=o?.lastUsedModelId??null;let v;return t[6]!==d||t[7]!==c||t[8]!==s||t[9]!==p||t[10]!==g||t[11]!==y?(v={models:p,defaultModelId:g,lastUsedModelId:y,loading:s,error:c,ensureLoaded:d},t[6]=d,t[7]=c,t[8]=s,t[9]=p,t[10]=g,t[11]=y,t[12]=v):v=t[12],v}function Qw(e,t,n){const r=t.find(s=>s.id===e.cell_id)??t.find(s=>s.outputArtifactId!==void 0&&s.outputArtifactId===e.asset_id);if(!r)return{ok:!1,message:"That cell is no longer in this notebook."};const o=ue(r.slot),i=n.find(s=>s.artifactId===r.outputArtifactId);return i?i.type==="audio"?{ok:!1,message:`${o} holds audio; fullscreen shows images and video.`}:!i.mediaUrl&&!i.thumbnailUrl?{ok:!1,message:`${o} is still processing. Try again when it is ready.`}:{ok:!0,cell:r,asset:i,address:o}:{ok:!1,message:`${o} has no media yet.`}}function eS(e,t,n,r){const o=e?.trim()||t?.outputArtifactId;if(!o)return{ok:!1,message:"Select a video cell or pass a target: /watermark @a1"};const i=n.find(a=>a.artifactId===o);if(!i)return{ok:!1,message:`No asset found for ${o}`};if(i.type!=="video")return{ok:!1,message:`Watermark applies to video assets; ${r.get(o)??o} is ${i.type}`};const s=r.get(o);return{ok:!0,artifactId:o,label:s?`@${s}`:o}}const jf=["top-left","top-center","top-right","middle-left","middle-center","middle-right","bottom-left","bottom-center","bottom-right"],Gf=33,qf=10,Uf=90,Bf=.5,Hf=.05,Wf=1,_s=32,Kf=0,zf=96,Xf=88,Yf=26,tS=480,Jf=100,Zf=0,Qf=100,em=["center","above-qr","on-qr","below-qr"];function nS(e){return Number.isFinite(e)?Math.min(Uf,Math.max(qf,e)):Gf}function rS(e){return Number.isFinite(e)?Math.min(Wf,Math.max(Hf,e)):Bf}function tm(e){return Number.isFinite(e)?Math.round(Math.min(zf,Math.max(Kf,e))):_s}function oS(e){const t=tm(e);return Math.max(Yf+4,Xf+2*(t-_s))}function nm(e){return typeof e=="string"&&em.includes(e)}function iS(e){return Number.isFinite(e)?Math.round(Math.min(Qf,Math.max(Zf,e))):Jf}function rm(e){return e==="auto"||jf.includes(e)}const om=.5,im=0,sm=2,am=.001;function sS(e){if(!Number.isFinite(e))return om;const t=Math.min(sm,Math.max(im,e));return Math.round(t*10)/10}function cm(e,t,n,r){const o=Math.max(0,e),s=(t===null?n:Math.min(t,n))-o;if(!(r>0)||!(s>0))return{fadeIn:0,fadeOut:0};const a=Math.min(r,s/2),c=t!==null&&t<n-am;return{fadeIn:o>0?a:0,fadeOut:c?a:0}}function aS(e,t,n,r,o,i){if(e<t||n!==null&&e>n)return 0;const s=cm(t,n,r,i);let a=1;return s.fadeIn>0&&(a=Math.min(a,(e-t)/s.fadeIn)),s.fadeOut>0&&n!==null&&(a=Math.min(a,(n-e)/s.fadeOut)),o*Math.min(1,Math.max(0,a))}const vs="videobook.watermark-review.v1:",mt=new Map;function wo(e){return e!==null&&typeof e=="object"&&!Array.isArray(e)?e:null}function Ar(e){const t=wo(e);if(!t)return{};const n={};dc(t.platform)&&(n.platform=t.platform),rm(t.position)&&(n.position=t.position),nm(t.handlePlacement)&&(n.handlePlacement=t.handlePlacement),typeof t.url=="string"&&(n.url=t.url);for(const o of["includeQr","includeHandle","includePlatformIcon","includeHandleBorder","saveDefault"])typeof t[o]=="boolean"&&(n[o]=t[o]);for(const o of["handleVerticalPercent","handlePadding","handlePaddingY","handleRounding","qrOpacity","handleOpacity","fadeSeconds","qrStartSeconds","handleStartSeconds"]){const i=t[o];typeof i=="number"&&Number.isFinite(i)&&(n[o]=i)}for(const o of["qrEndSeconds","handleEndSeconds"]){const i=t[o];(i===null||typeof i=="number"&&Number.isFinite(i))&&(n[o]=i)}const r=wo(t.handles);if(r){n.handles={};for(const o of uc)typeof r[o]=="string"&&(n.handles[o]=r[o])}return n}function lm(e){if(!e)return{};const t=mt.get(e);if(t)return t;try{const n=window.localStorage.getItem(`${vs}${e}`);if(n!==null)return Ar(JSON.parse(n))}catch{return mt.get(e)??{}}return mt.get(e)??{}}function cS(e,t,{handle:n,...r}){if(!e)return;const o=lm(e),i={...o,...Ar(r),platform:r.platform??t,handles:n===void 0?o.handles:{...o.handles,[t]:n}};try{window.localStorage.setItem(`${vs}${e}`,JSON.stringify(i)),mt.delete(e)}catch{mt.set(e,i)}}function um(e,t){if(!t||!Number.isFinite(t)||t<=0)return e;const n={...e};for(const[r,o]of[["qrStartSeconds","qrEndSeconds"],["handleStartSeconds","handleEndSeconds"]]){const i=Math.max(0,e[r]??0),s=Math.min(t,e[o]??t);n[r]=i<s?i:0,n[o]=i<s&&e[o]!=null?s:null}return n}function dm(e,t,n){const r=Aa,o=n&&n>0?Ea(r,n):null,i={...e},s=a=>e[a]===void 0&&t[a]===void 0;return s("position")&&(i.position="bottom-right"),s("handleVerticalPercent")&&(i.handleVerticalPercent=r.handleVerticalPercent),s("handlePadding")&&(i.handlePadding=r.handlePaddingX),s("handlePaddingY")&&(i.handlePaddingY=r.handlePaddingY),s("handleRounding")&&(i.handleRounding=r.handleRounding),s("qrOpacity")&&(i.qrOpacity=r.qrOpacity),s("handleOpacity")&&(i.handleOpacity=r.handleOpacity),s("fadeSeconds")&&(i.fadeSeconds=r.fadeSeconds),s("includePlatformIcon")&&(i.includePlatformIcon=r.includePlatformIcon),s("includeHandleBorder")&&(i.includeHandleBorder=r.includeHandleBorder),s("handlePlacement")&&(i.handlePlacement=r.handlePlacement),s("url")&&(i.url=r.profileUrl),o&&s("qrStartSeconds")&&s("qrEndSeconds")&&(i.qrStartSeconds=o.qrStartSeconds,i.qrEndSeconds=o.qrEndSeconds),o&&s("handleStartSeconds")&&s("handleEndSeconds")&&(i.handleStartSeconds=o.handleStartSeconds,i.handleEndSeconds=o.handleEndSeconds),i}function lS(e,t,n){const r=t.platform??e.platform??"tiktok",o=r==="tiktok"?dm(e,t,n):e;return{...um(o,n),...Ar(t),platform:r,handles:t.handle===void 0?e.handles:{...e.handles,[r]:t.handle}}}const fm=new Set(["queued","running","completing"]);function So(e){return e.state==="failed"||e.state==="aborted"}function uS(e,t,n,r){const o=r.find(a=>a.id===t);if(!o)return{kind:"missing"};if(So(o))return{kind:"failed",message:o.error?.message??"Watermark burn failed"};if(o.state!=="done")return{kind:"continue"};const i=r.filter(a=>a.artifactId===e&&a.id>t),s=i.find(So);return s||n?.status==="error"?{kind:"failed",message:s?.error?.message??"Post-watermark processing failed"}:i.some(a=>fm.has(a.state))?{kind:"continue"}:n&&n.status!=="ready"?{kind:"continue"}:{kind:"completed",result:o.result}}function dS(e){const t=e.placementSource==="vision"||e.placementSource==="cached"?" (frame-aware)":"",n=Math.round(e.handleOpacity*100),r=e.includeHandle?e.handlePlacement==="center"?` · handle ${e.handleVerticalPercent}% from top at ${n}%`:` · handle ${e.handlePlacement.replace("-"," ")} at ${n}%`:"",o=e.includeQr?` · QR ${Math.round(e.qrOpacity*100)}%`:"",i=e.corner??e.requestedPosition;return e.includeQr?e.includeHandle?`QR + @${e.handle} watermarks burned in — QR ${i}${t}${o}${r}.`:`QR watermark burned in — ${i}${t}${o}.`:`@${e.handle} watermark burned in${r}.`}function fS(e,t,n,r){return`Burning ${e?t?`QR + @${n} watermarks`:"QR watermark":`@${n} watermark`} into ${r}…`}function mS(e){return e===1?"1 artifact":`${e} artifacts`}function pS(e){return e===1?"1 notebook":`${e} notebooks`}function gS(e,t,n){return n?{mode:e,closeMenu:!1}:t.kind==="close"?{mode:{kind:"idle"},closeMenu:!0}:t.kind==="escape"?e.kind==="idle"?{mode:e,closeMenu:!0}:{mode:{kind:"idle"},closeMenu:!1}:t.kind==="cancel"?e.kind==="idle"?{mode:e,closeMenu:!1}:{mode:{kind:"idle"},closeMenu:!1}:t.kind==="begin-create"?{mode:{kind:"create"},closeMenu:!1}:t.kind==="begin-rename"?{mode:{kind:"rename",bookId:t.bookId},closeMenu:!1}:{mode:{kind:"delete",bookId:t.bookId},closeMenu:!1}}function tn(e){return e!==null&&typeof e=="object"&&!Array.isArray(e)?e:null}function fe(e,t){const n=Array.isArray(e)?e:tn(e)?.[t];return Array.isArray(n)?n.flatMap(r=>{const o=tn(r);return o?[o]:[]}):[]}function ie(e,t,n){return e.flatMap(r=>{const o=t.map(a=>r[a]).find(a=>typeof a=="string"&&!!a);if(!o)return[];const i=n.map(a=>r[a]).find(a=>typeof a=="string"&&!!a)??o,s=[r.type,r.status,r.createdAt??r.date].filter(a=>typeof a=="string").join(" · ");return[{value:o,label:i,...s?{detail:s}:{}}]})}async function hS(e,t,n){const r=e.inputSchema.properties??{},o=e.handler.kind==="tool"?e.handler.tool:"",i={choices:{},entities:{},values:{}};let s=[];const a=[];r.notebook_id&&a.push((async()=>{i.choices.notebook_id=ie(fe(await n("list_notebooks",{}),"notebooks"),["id"],["name"])})()),/^(?:get|update|delete)_entity$/u.test(o)&&a.push((async()=>{const f=fe(await n("list_entities",{}),"entities");i.choices.entity_id=ie(f,["id"],["name"]),i.entities=Object.fromEntries(f.filter(d=>typeof d.id=="string").map(d=>[String(d.id),d])),o.startsWith("update_")&&typeof t.entity_id=="string"&&i.entities[t.entity_id]&&(i.values.entity=i.entities[t.entity_id])})()),r.job_id&&a.push((async()=>{i.choices.job_id=ie(fe(await n("list_jobs",{limit:200}),"jobs"),["id","jobId"],["name","type","tool"])})()),r.archive_ids&&a.push((async()=>{i.choices.archive_ids=ie(fe(await n("search_archive",{limit:100,presign_media:!1}),"results"),["archive_id"],["title","filename"])})());const c=t.asset_id??t.artifact_id,l=typeof c=="string"?c:void 0;(r.commit_hash||r.target_revision||r.action_id||r.target_action_id)&&a.push((async()=>{const f=l&&r.commit_hash?fe(await n("asset_history",{asset_id:l,limit:200}),"commits"):fe(await n("list_book_actions",{limit:200}),"actions"),d=ie(f,["hash","revision"],["message","operation"]);i.choices.commit_hash=d,i.choices.target_revision=d;const p=f.flatMap(y=>{const v=tn(y.details)?.actionId;return typeof v=="string"?[{...y,actionId:v}]:[]}),g=ie(p,["actionId"],["operation","message"]);i.choices.action_id=o==="get_history_action"?ie(f,["hash","revision"],["operation","message"]):g,i.choices.target_action_id=g,o==="read_file_at_commit"&&(s=ie(f.flatMap(y=>{const v=tn(y.details)?.path;return typeof v=="string"?[{name:v}]:[]}),["name"],["name"]))})()),r.filename&&l&&["read_file_at_commit","export_asset_file"].includes(o)&&a.push((async()=>{i.choices.filename=ie(fe(await n("asset_manifest",{asset_id:l}),"files"),["name"],["name"])})()),r.plan_id&&typeof t.notebook_id=="string"&&a.push((async()=>{const f=fe(await n(o.includes("generation")||o==="continue_notebook_generation"?"list_notebook_generation_plans":"list_notebook_run_plans",{notebook_id:t.notebook_id}),"plans");i.choices.plan_id=ie(f,["planId","plan_id"],["prompt","status"])})()),r.model&&e.generation&&a.push((async()=>{const f=fe(await n("list_generation_models",{media:e.generation?.mediaType}),"models");i.choices.model=f.flatMap(d=>ie([d],["id"],["title"]).map(p=>({...p,...typeof d.available=="boolean"?{available:d.available}:{},frontier:es(d.frontier)})))})()),r.voice_id&&a.push((async()=>{i.choices.voice_id=ie(fe(await n("list_elevenlabs_voices",{}),"voices"),["voice_id","id"],["name"])})()),(r.subject_ids||r.subject_id)&&l&&typeof t.object_hash=="string"&&a.push((async()=>{const f=fe(await n("get_image_subject_map",{artifact_id:l,object_hash:t.object_hash}),"subjects");i.choices.subject_id=ie(f,["id","subjectId"],["label","name"]),i.choices.subject_ids=i.choices.subject_id})());const m=(await Promise.allSettled(a)).flatMap(f=>f.status==="rejected"?[f.reason instanceof Error?f.reason.message:String(f.reason)]:[]);if(m.length)throw new Error(`Could not load action choices: ${m.join(" · ")}`);if(s.length){const f=new Map((i.choices.filename??[]).map(d=>[d.value,d]));for(const d of s)f.has(d.value)||f.set(d.value,{...d,detail:"Historical file"});i.choices.filename=[...f.values()]}return i}const bS={open_actions:{kind:"existing"},switch_book:{kind:"existing"},open_projects:{kind:"existing"},open_music_video:{kind:"existing"},start_goal:{kind:"existing"},open_alive_captions:{kind:"existing"},open_cold_open:{kind:"existing"},open_post_dropbox:{kind:"existing"},open_post_icloud:{kind:"existing"},open_watermark:{kind:"existing"},speak_preview:{kind:"existing"},x_connect:{kind:"existing"},open_provider_keys:{kind:"screen",screen:"settings"},open_inbox:{kind:"library"},open_jobs:{kind:"screen",screen:"jobs"},open_status:{kind:"form",tool:"list_book_actions"},open_revisions:{kind:"form",tool:"list_book_actions"},open_diagnostics:{kind:"form",tool:"doctor"},open_entities:{kind:"search",query:"Entities"},open_archive:{kind:"form",tool:"search_archive"},open_rename_all:{kind:"form",tool:"rename_all"},open_crop:{kind:"form",tool:"crop_asset"},open_osg:{kind:"form",tool:"set_video_overlay"},settings_osg:{kind:"form",tool:"set_video_overlay"},settings_audio:{kind:"form",tool:"render_video"},settings_subs:{kind:"form",tool:"render_video"},settings_bg:{kind:"form",tool:"render_video"},viewer_show_settings:{kind:"form",tool:"render_video"},settings_landscape:{kind:"form",tool:"render_video"},settings_portrait:{kind:"form",tool:"render_video"},settings_square:{kind:"form",tool:"render_video"},viewer_focus_file:{kind:"form",tool:"asset_manifest"},open_post_composer:{kind:"form",tool:"post"},timeline_audio_add:{kind:"form",tool:"add_timeline_audio"},timeline_audio_move:{kind:"form",tool:"move_timeline_audio"},timeline_audio_remove:{kind:"form",tool:"remove_timeline_audio"},timeline_audio_update:{kind:"form",tool:"update_timeline_audio"},rewind_activity:{kind:"form",tool:"restore_edit_action"},sidebar_sort:{kind:"form",tool:"list_assets"},run_notebook:{kind:"form",tool:"plan_notebook_run"},open_upload:{kind:"special",action:"upload"},copy_clipboard:{kind:"special",action:"copy"},show_history:{kind:"special",action:"history"},open_asset:{kind:"special",action:"open"},viewer_set_original:{kind:"special",action:"original"},viewer_set_landscape:{kind:"special",action:"landscape"},viewer_set_portrait:{kind:"special",action:"portrait"},viewer_toggle_info:{kind:"form",tool:"read_asset_metadata"},close_viewer:{kind:"special",action:"close"},sidebar_collapse:{kind:"special",action:"collapse"},sidebar_expand:{kind:"special",action:"expand"},save_notebook:{kind:"special",action:"save"},open_notebook:{kind:"special",action:"notebook"},open_slot_player:{kind:"special",action:"play"},extract_skeleton:{kind:"special",action:"skeleton"}};function yS(e,t,n){const r={...t};if(e==="open_osg"&&t.image&&(r.osg_asset_id=t.image),e==="open_post_composer"&&t.asset_ref&&(r.asset_id=t.asset_ref),e==="open_crop"&&t.ratio!==void 0&&t.ratio!==null&&String(t.ratio).trim()!==""&&(r.ratio=_m(t.ratio)),e==="sidebar_sort"&&(r.sort=bm(t.order)),e==="viewer_toggle_info"&&(r.name="original"),e==="settings_bg"){const i=ym(t.mode);i&&(r.background_mode=i)}["settings_landscape","settings_portrait","settings_square"].includes(e)&&(r.orientation=e.slice(9)),e.startsWith("timeline_audio_")&&((e==="timeline_audio_add"||t.start!==void 0)&&(r.start_frame=Math.round(Number(t.start??0)*n)),t.duration!==void 0&&(r.duration_frames=Math.round(Number(t.duration)*n))),e==="rewind_activity"&&t.commit_hash&&(r.target_revision=t.commit_hash);const o=String(t.field??"").trim().toLowerCase();if(e==="settings_subs"&&["on","off"].includes(o)&&(r.subtitles_enabled=o==="on"),["settings_audio","settings_subs","timeline_audio_update"].includes(e)&&o&&t.value!==void 0){const i=e==="timeline_audio_update"?vm(o):e==="settings_audio"?km(o):ks[o]??o,s=String(t.value),a=Number(s);if(e==="timeline_audio_update"&&!Number.isFinite(a))throw new Error("Usage: /audio-set @clip volume|fade-in|fade-out <value>");r[i]=["on","off","true","false"].includes(s.toLowerCase())?["on","true"].includes(s.toLowerCase()):s.trim()&&Number.isFinite(a)?a:wm(o,i,s)}return r}const mm=["newest","oldest"],pm=["blur","black"],ks={"fade-in":"audio_fade_in","fade-out":"audio_fade_out",volume:"audio_volume",enabled:"subtitles_enabled",style:"highlight_style",size:"font_size",fontsize:"font_size",color:"text_color",textcolor:"text_color",highlight:"highlight_color",highlightcolor:"highlight_color",stroke:"stroke_width",strokewidth:"stroke_width",strokecolor:"stroke_color",shadow:"shadow_blur",shadowblur:"shadow_blur",shadowopacity:"shadow_opacity",language:"subtitle_language"},gm={position:["top","middle","bottom"],highlight_style:["impact","highlight","alive"],font_size:["small","medium","large"]},hm={position:{mid:"middle"},font_size:{s:"small",m:"medium",l:"large"}};function _S(e){if(e==null||e==="")return 1;const t=typeof e=="number"?e:Number(String(e).trim());if(!Number.isInteger(t)||t<1)throw new Error("Usage: /files <position>");return t}function vS(e){const t=(e??"both").trim().toLowerCase();if(t==="left"||t==="right"||t==="both")return t;throw new Error("Choose left, right or both.")}function bm(e){const t=String(e??"newest").trim().toLowerCase();if(t==="newest"||t==="oldest")return t;throw new Error(`Usage: /sort ${mm.join("|")}`)}function ym(e){if(e==null||String(e).trim()==="")return null;const t=String(e).trim().toLowerCase();if(t==="blur"||t==="black")return t;throw new Error(`Usage: /bg ${pm.join("|")}`)}function _m(e){const t=String(e).trim().toLowerCase();if(t==="16:9"||t==="landscape")return"16:9";if(t==="9:16"||t==="portrait")return"9:16";if(t==="1:1"||t==="square")return"1:1";throw new Error("Usage: /crop @asset [16:9|9:16|1:1]")}function vm(e){const t=e.replaceAll("-","_");if(t==="volume"||t==="fade_in"||t==="fade_out")return t;throw new Error("Usage: /audio-set @clip volume|fade-in|fade-out <value>")}function km(e){const t=ks[e];if(t==="audio_volume"||t==="audio_fade_in"||t==="audio_fade_out")return t;throw new Error("Usage: /audio volume|fade-in|fade-out <value>")}function wm(e,t,n){if(t==="subtitle_language"){const s=n.trim().toLowerCase();if(/^(original|[a-z]{2})$/u.test(s))return s;throw new Error("Usage: /subs language original|en")}const r=gm[t];if(!r)return n;const o=n.trim().toLowerCase(),i=hm[t]?.[o]??o;if(r.includes(i))return i;throw new Error(`Usage: /subs ${e} ${r.join("|")}`)}const Sm={audio:new Set(["aac","flac","m4a","mp3","ogg","wav","weba"]),image:new Set(["gif","heic","heif","jpeg","jpg","png","svg","webp"]),video:new Set(["avi","mkv","mov","mp4","webm"])},kS={audio:"audio/*,.aac,.flac,.m4a,.mp3,.ogg,.wav,.weba",image:"image/*,.gif,.heic,.heif,.jpeg,.jpg,.png,.svg,.webp",video:"video/*,.avi,.mkv,.mov,.mp4,.webm"};function wS(e){const t=e.type.split("/",1)[0];if(t==="audio"||t==="image"||t==="video")return t;const n=e.name.toLowerCase().split(".").pop()??"";for(const r of["audio","image","video"])if(Sm[r].has(n))return r;return null}function Im(e){return e==="audio"||e==="image"||e==="video"?e:null}function SS(e,t,n){return Im(e)!==null&&t===void 0&&n===0}function IS(e){return e.types.includes("Files")}const xS=["Media","Text & analysis","Generation","Edit"],Yn=[{type:"audio",label:"Audio",group:"Media"},{type:"image",label:"Image",group:"Media"},{type:"video",label:"Video",group:"Media"},{type:"post",label:"Post",group:"Media"},{type:"character",label:"Character",group:"Media"},{type:"prompt",label:"Prompt",group:"Text & analysis"},{type:"analyze",label:"Analyze",group:"Text & analysis"},{type:"generate_video",label:"Generate video",group:"Generation"},{type:"generate_image",label:"Generate image",group:"Generation"},{type:"generate_audio",label:"Generate audio",group:"Generation"},{type:"extract_audio",label:"Extract audio",group:"Edit"},{type:"split_video",label:"Split video",group:"Edit"},{type:"concat",label:"Concat",group:"Edit"},{type:"splice",label:"Splice",group:"Edit"},{type:"timeline",label:"Timeline",group:"Edit"}],xm=new Set(Yn.map(e=>e.type));function Io(e){return e.trim().toLocaleLowerCase().replaceAll("_"," ")}function AS(e){const t=Io(e);return t?Yn.filter(n=>Io(`${n.label} ${n.type} ${n.group}`).includes(t)):Yn}function ES(e){return xm.has(e)}const Am=new Intl.NumberFormat("en-US",{notation:"compact",maximumFractionDigits:1}),Em=new Intl.NumberFormat("en-US"),CS={images:"Images",video:"Video",audio:"Audio",chat:"Chat",voice:"Voice",analysis:"Analysis & transcription"};function MS(e,t=!1){return(t?Em:Am).format(e)}function Cm(e){return e>0&&e<.01?"<$0.01":`$${e.toLocaleString("en-US",{minimumFractionDigits:2,maximumFractionDigits:2})}`}function TS(e){const t=e.reportedUsd+e.estimatedUsd;return t===0&&e.unpriced>0?"— cost":`${e.estimatedUsd>0?"~":""}${Cm(t)}`}function Mm(e){if(!e||typeof e!="object")throw new Error("Usage is unavailable");const t=e;if(typeof t.trackedSince!="number"||!t.totals||!Array.isArray(t.groups)||!Array.isArray(t.recent))throw new Error("Usage is unavailable");return t}function RS({bookId:e,ready:t,call:n}){const[r,o]=_.useState(null),[i,s]=_.useState(null),[a,c]=_.useState(0),l=_.useEffectEvent(async u=>{try{const m=Mm(await n("get_book_usage",{book_id:e},{background:!0}));if(!u())return;o(f=>f?.bookId===e&&JSON.stringify(f.data)===JSON.stringify(m)?f:{bookId:e,data:m}),s(null)}catch{u()&&s(e)}});return _.useEffect(()=>{if(!t||!e)return;let u=!0,m=!1,f=0;const d=async()=>{if(window.clearTimeout(f),!(!u||m||document.visibilityState==="hidden")){m=!0;try{await l(()=>u)}finally{m=!1,u&&(f=window.setTimeout(d,2e3))}}},p=()=>{d()};return f=window.setTimeout(p,0),window.addEventListener("focus",p),document.addEventListener("visibilitychange",p),()=>{u=!1,window.clearTimeout(f),window.removeEventListener("focus",p),document.removeEventListener("visibilitychange",p)}},[e,t,a]),{snapshot:r?.bookId===e?r.data:null,stale:!t||i===e,retry:()=>c(u=>u+1)}}const ws=new Set(["video","generate_video","concat","splice"]);function Tm(e,t){const n=ke(t),r=e.cells.find(o=>o.outputArtifactId?.toLowerCase()===n);return r||(e.cells.find(o=>ws.has(o.type)&&ri(e,o)?.toLowerCase()===n)??null)}function Er(e,t){let n;try{n=Sr(e,t)}catch(r){const o=Tm(e,t);if(!o)throw r;n=o}if(!ws.has(n.type))throw new Error(`${Z(n)} is not a video-producing cell`);if(!ri(e,n))throw new Error(`${Z(n)} does not have a video output yet`);return n}const Rm="[a-z0-9][a-z0-9-]*",$m=new RegExp(`^(?:please\\s+)?(?:/split|split)\\s+@(${Rm})(?:\\s+([\\s\\S]+?))?(?:\\s+please)?[.!]?$`,"iu"),re=.02;function G(e){return Math.round(e*1e3)/1e3}function _e(e){const t=Math.max(0,Math.round(e*1e3)),n=Math.floor(t/6e4),r=(t-n*6e4)/1e3;return`${n}:${r.toFixed(3).padStart(6,"0")}`}function $S(e){const t=e.pieces[e.selectedIndex]??e.pieces[0];return t?`Cutting ${_e(t.startSeconds)}–${_e(t.endSeconds)} (${t.durationSeconds.toFixed(3)}s)`:"Split video"}function NS(e){return typeof e!="number"||!Number.isFinite(e)||!(e>0)?null:1/e}function Nm(e,t){return(e==="all"?Math.max(1,t):1)+1}function Jn(e){const t=e.trim().toLowerCase(),n=t.match(/^(\d+(?:\.\d+)?)\s*(?:s|secs?|seconds?)?$/u);if(n)return Number(n[1]);const r=t.match(/^(\d+)\s*(?:m|mins?|minutes?)\s*(?:(\d+(?:\.\d+)?)\s*(?:s|secs?|seconds?)?)?$/u);if(r)return Number(r[1])*60+Number(r[2]??0);const o=t.match(/^(?:(\d+):)?(\d+):([0-5]?\d(?:\.\d+)?)$/u);return o?Number(o[1]??0)*3600+Number(o[2])*60+Number(o[3]):null}function Pm(e){return e.trim().replace(/^(?:into|at)\s+/iu,"").replace(/\s+(?:and|plus)\s+(?:(?:keep|use)\s+)?(?:the\s+)?(?:remaining|remainder|rest)(?:\s+(?:clip|part|video))?$/iu,"").trim()}function Om(e){const t=Pm(e);return t?t.split(/\s*(?:,|;|\band\b|\bthen\b)\s*/iu).map(n=>n.trim()).filter(Boolean):[]}function Lm(e,t,n){const r=Xe(e),o=Vn(n,r),i=[];let s=o;for(let a=0;a<t;a+=1){const c=Vn(s,[...r,o,...i]);i.push(c),s=c}return{action:o,outputs:i}}function Fm(e){const t={id:Bt(),type:"video",label:`Chunk ${String(e.chunkIndex+1).padStart(2,"0")}`,slot:e.slot,inputs:{chunkCount:e.chunkCount,chunkIndex:e.chunkIndex,endSeconds:e.endSeconds,mediaRole:"split-video-output",producerCellId:e.actionCell.id,sourceCellId:e.source.id,startSeconds:e.startSeconds,state:"pending"}};return{chunkIndex:e.chunkIndex,endSeconds:e.endSeconds,outputCell:t,startSeconds:e.startSeconds}}function Dm(e){return{id:e.id,type:e.type,...e.label===void 0?{}:{label:e.label},slot:e.slot,...e.provider===void 0?{}:{provider:e.provider},...e.operation===void 0?{}:{operation:e.operation},...e.tool===void 0?{}:{tool:e.tool},...e.inputs===void 0?{}:{inputs:e.inputs}}}function Vm(e){const t=e.trim().match(/^(keep|remove)\s+([\s\S]+)$/iu);if(!t)return null;const n=t[2].trim().match(/^(.+?)\s*[-–]\s*(.+)$/u);if(!n)throw new Error("Use a keep/remove range, for example: /split @a1 keep 0.03-0.11");const r=Jn(n[1]),o=Jn(n[2]);if(r===null||o===null||!Number.isFinite(r)||!Number.isFinite(o)||!(o>r)||r<0)throw new Error("Use positive split times, for example: /split @a1 keep 0.03-0.11");return{endSeconds:G(o),mode:t[1].toLowerCase()==="remove"?"remove":"keep",startSeconds:G(r)}}function PS(e){const t=e.trim().match($m);if(!t)return null;const n=t[2]?.trim()??"";if(n&&/^(keep|remove)\b/iu.test(n)){const i=Vm(n);if(!i)return null;const s=[i.startSeconds,i.endSeconds].filter(a=>a>0).sort((a,c)=>a-c);return{sourceReference:t[1].toLowerCase(),cutPointsSeconds:s,outputMode:i.mode,selectedChunkIndexes:[i.startSeconds>0?1:0]}}const o=(n?Om(n):[]).map(Jn);if(o.some(i=>!Number.isFinite(i)||!(i>0)))throw new Error("Use positive split times, for example: /split @a3 at 15s, 28.5s");return{sourceReference:t[1].toLowerCase(),cutPointsSeconds:o.map(i=>G(i)).sort((i,s)=>i-s)}}function Kt(e){for(const t of e)if(!(G(t.endSeconds-t.startSeconds)>=re))throw new Error(`Keep at least ${re}s in every output range`)}function hn(e){const t=G(e.sourceDurationSeconds);if(!Number.isFinite(t)||t<re)throw new Error(`Video must be at least ${re}s long to split`);const r=(e.cutPointsSeconds.length>0?e.cutPointsSeconds:[t/2]).map(s=>G(s)).sort((s,a)=>s-a);if(r.some(s=>!Number.isFinite(s)))throw new Error("Split times must be finite numbers");const o=[0,...r,t],i=o.slice(0,-1).map((s,a)=>({endSeconds:o[a+1],startSeconds:s}));for(const s of i)if(!(s.endSeconds>s.startSeconds))throw new Error(`Keep at least ${re}s in every output range`);return i}function OS(e){const t=hn(e);return Kt(t),t.slice(0,-1).map(n=>n.endSeconds)}function jm(e){const t=hn({cutPointsSeconds:e.cutPointsSeconds,sourceDurationSeconds:e.sourceDurationSeconds}),n=e.outputMode??"all";if(n==="all")return Kt(t),t.map(s=>[s]);const r=new Set((e.selectedChunkIndexes??[0]).filter(s=>Number.isSafeInteger(s)&&s>=0&&s<t.length));if(r.size===0&&r.add(0),n==="keep"){const s=t.filter((a,c)=>r.has(c));if(s.length===0)throw new Error("Keep at least one split piece");return Kt(s),s.map(a=>[a])}const o=t.filter((s,a)=>!r.has(a));if(o.length===0)throw new Error("Remove leaves nothing to keep");const i=o.reduce((s,a)=>s+(a.endSeconds-a.startSeconds),0);return Kt([{startSeconds:o[0].startSeconds,endSeconds:o[0].startSeconds+i}]),[o]}function Gm(e){const t=e.outputMode??"all",n=hn({cutPointsSeconds:e.cutPointsSeconds,sourceDurationSeconds:e.sourceDurationSeconds});if(t==="all")return`Split ${e.sourceAddress} into ${n.length} chunks`;const r=e.selectedChunkIndexes?.[0]??0,o=n[r]??n[0],i=`${_e(o.startSeconds)}-${_e(o.endSeconds)}`;return t==="keep"?`Cut ${i} out of ${e.sourceAddress}`:`Remove ${i} from ${e.sourceAddress}`}function qm(e,t,n){if(e==="all")return`Chunk ${String(n+1).padStart(2,"0")}`;if(e==="keep"){const a=t[0];return`Cut ${_e(a.startSeconds)}-${_e(a.endSeconds)}`}const r=t[0],o=t[t.length-1],i=r.endSeconds,s=o.startSeconds;return t.length>=2&&s>i?`Without ${_e(i)}-${_e(s)}`:`Without ${_e(r.startSeconds)}-${_e(o.endSeconds)}`}function LS(e){const t=Er(e.document,e.command.sourceReference);if(!Number.isFinite(e.sourceDurationSeconds)||e.sourceDurationSeconds<=0)throw new Error(`${Z(t)} does not have a usable duration yet; wait for video processing to finish`);const n=e.command.outputMode??"all",r=e.command.selectedChunkIndexes??[],o=jm({cutPointsSeconds:e.command.cutPointsSeconds,outputMode:n,selectedChunkIndexes:r,sourceDurationSeconds:e.sourceDurationSeconds}),i=hn({cutPointsSeconds:e.command.cutPointsSeconds,sourceDurationSeconds:e.sourceDurationSeconds}).slice(0,-1).map(f=>f.endSeconds),s=Lm(e.document.cells,o.length,t.slot),a=o.map(f=>f.map(d=>({endSeconds:d.endSeconds,startSeconds:d.startSeconds}))),c={id:Bt(),type:"split_video",label:n==="all"?`Split into ${o.length} chunks`:Gm({cutPointsSeconds:i,outputMode:n,selectedChunkIndexes:r.length>0?r:[0],sourceAddress:Z(t),sourceDurationSeconds:e.sourceDurationSeconds}),slot:s.action,provider:"local",operation:n==="all"?"split_at_points":"split_ranges",tool:"ffmpeg",inputs:{cutPointsSeconds:i,endSeconds:e.sourceDurationSeconds,sourceCellId:t.id,sourceDurationSeconds:e.sourceDurationSeconds,startSeconds:0,state:"ready",...n==="all"?{}:{outputsSeconds:a,selectedChunkIndexes:r}}},l=o.map((f,d)=>{const p=f[0].startSeconds,g=f.reduce((v,S)=>v+(S.endSeconds-S.startSeconds),p),y=Fm({actionCell:c,chunkCount:o.length,chunkIndex:d,endSeconds:f.length===1?f[0].endSeconds:g,slot:s.outputs[d],source:t,startSeconds:p});return y.outputCell={...y.outputCell,label:qm(n,f,d)},y}),u=[c,...l.map(f=>f.outputCell)],m=[{id:Bt(),source:t.id,target:c.id,targetInput:"video"},...l.map(f=>({id:Bt(),source:c.id,target:f.outputCell.id,targetInput:"media"}))];return{actionCell:c,createdCellIds:u.map(f=>f.id),cutPointsSeconds:i,document:{...e.document,cells:[...e.document.cells,...u],edges:[...e.document.edges,...m]},outputs:l,sourceCellId:t.id,sourceAddress:Z(t)}}async function FS(e){const t=[];let n=!1;try{const r=[e.draft.actionCell,...e.draft.outputs.map(c=>c.outputCell)];for(const[c,l]of r.entries()){t.push(l.id);const u=await e.callTool("create_notebook_cell",{book_id:e.bookId,notebook_id:e.draft.document.id,...c===0&&e.expectedRevision?{expected_revision:e.expectedRevision}:{},cell:Dm(l)}),m=h(u);if(x(m?.id)!==l.id)throw new Error("The server did not preserve the planned split cell")}await e.callTool("connect_notebook_cells",{book_id:e.bookId,notebook_id:e.draft.document.id,source_cell_id:e.draft.sourceCellId,target_cell_id:e.draft.actionCell.id,target_input:"video"});for(const c of e.draft.outputs)await e.callTool("connect_notebook_cells",{book_id:e.bookId,notebook_id:e.draft.document.id,source_cell_id:e.draft.actionCell.id,target_cell_id:c.outputCell.id,target_input:"media"});n=!0;const o=await e.callTool("run_notebook",{actor:e.actor,book_id:e.bookId,notebook_id:e.draft.document.id,cell_ids:[e.draft.actionCell.id]}),i=h(o),s=x(i?.job_id),a=x(i?.run_id);if(!s||!a)throw new Error("The server did not return a notebook split run");return{actionCellId:e.draft.actionCell.id,actionAddress:Z(e.draft.actionCell),outputs:e.draft.outputs.map(c=>({chunkIndex:c.chunkIndex,outputCellId:c.outputCell.id,outputAddress:Z(c.outputCell)})),cutPointsSeconds:e.draft.cutPointsSeconds,jobId:s,runId:a,sourceCellId:e.draft.sourceCellId,sourceAddress:e.draft.sourceAddress}}catch(r){if(!n)for(const o of t.reverse())await e.callTool("delete_notebook_cell",{book_id:e.bookId,notebook_id:e.draft.document.id,cell_id:o}).catch(()=>{});throw r}}const Um=1/60;function Bm(e,t){return e[t]}function DS(e){const t=e.windows.filter(a=>Number.isFinite(a.startSeconds)&&Number.isFinite(a.endSeconds)&&a.endSeconds>a.startSeconds);if(t.length===0)return{type:"continue"};const n=e.frameDurationSeconds??Um,r=e.pendingSeekSeconds;if(typeof r=="number"&&Number.isFinite(r)&&Math.abs(e.currentTimeSeconds-r)>n)return{type:"continue"};const o=Math.min(t.length-1,Math.max(0,e.activeWindowIndex)),i=Bm(t,o),s=e.currentTimeSeconds;if(s>=i.startSeconds&&s<i.endSeconds)return{type:"continue"};if(s>=i.endSeconds){const a=(o+1)%t.length;return{type:"seek",timeSeconds:t[a].startSeconds,windowIndex:a}}return{type:"seek",timeSeconds:i.startSeconds,windowIndex:o}}function VS(e){return e>0&&e<.25}function Je(e){return[...new Set(e.map(G))].filter(t=>Number.isFinite(t)).sort((t,n)=>t-n)}function Hm(e){return Je(e.slice(1,-1))}function Wm(e,t){return e.length===t.length&&e.every((n,r)=>n===t[r])}function Ce(e){const t=G(e.sourceDurationSeconds),r=[0,...Je(e.cutPointsSeconds).filter(o=>o>0&&o<t),t];return r.slice(0,-1).map((o,i)=>{const s=r[i+1];return{durationSeconds:G(s-o),endSeconds:s,index:i,startSeconds:o}})}function jS(e){let t=0;return e.map(n=>(t=G(t+n),t))}function GS(e){const t=e.leadSeconds??1.5,n=G(e.sourceDurationSeconds),r=G(e.segment.startSeconds),o=G(e.segment.endSeconds),i=[],s=Math.max(0,G(r-t));r>s&&i.push({startSeconds:s,endSeconds:r});const a=Math.min(n,G(o+t));return a>o&&i.push({startSeconds:o,endSeconds:a}),{segment:{startSeconds:r,endSeconds:o},surroundings:i}}function Ss(e){const t=G(e.sourceDurationSeconds),n=Ce(e),r=n[e.index];if(!r)return{maxEnd:t,maxStart:0,minEnd:re,minStart:0};const o=n[e.index-1]?.startSeconds??0,i=n[e.index+1]?.endSeconds??t,s=e.index===0?0:G(o+re);return{maxEnd:e.index===n.length-1?t:G(i-re),maxStart:G(r.endSeconds-re),minEnd:G(r.startSeconds+re),minStart:s}}function Cr(e){const t=G(e.sourceDurationSeconds),n=Ce(e),r=n[e.index];if(!r)return{cutPointsSeconds:[...e.cutPointsSeconds],selectedIndex:e.index};const o=Ss(e);let i=G(Math.min(o.maxStart,Math.max(o.minStart,e.startSeconds)));i>0&&i<re&&(i=re);let s=G(Math.min(o.maxEnd,Math.max(Math.max(o.minEnd,i+re),e.endSeconds)));if(s<t&&t-s<re&&(s=G(t-re)),i===r.startSeconds&&s===r.endSeconds)return{cutPointsSeconds:[...e.cutPointsSeconds],selectedIndex:e.index};const a=n[e.index-1],c=n[e.index+1],l=a?Je(e.cutPointsSeconds.filter(g=>g<=a.startSeconds)):[],u=c?Je(e.cutPointsSeconds.filter(g=>g>=c.endSeconds)):[],m=[];i>0&&m.push(i),s<t&&m.push(s);const f=Je([...l,...m,...u]).filter(g=>g>0&&g<t),p=Ce({cutPointsSeconds:f,sourceDurationSeconds:t}).findIndex(g=>g.startSeconds===i&&g.endSeconds===s);return{cutPointsSeconds:f,selectedIndex:p>=0?p:e.index}}function qS(e){const n=Ce(e)[e.index];return n?Cr({...e,endSeconds:n.endSeconds,startSeconds:G(n.startSeconds+e.deltaSeconds)}):{cutPointsSeconds:[...e.cutPointsSeconds],selectedIndex:e.index}}function US(e){const n=Ce(e)[e.index];return n?Cr({...e,endSeconds:G(n.endSeconds+e.deltaSeconds),startSeconds:n.startSeconds}):{cutPointsSeconds:[...e.cutPointsSeconds],selectedIndex:e.index}}function BS(e){const n=Ce(e)[e.index];if(!n)return{cutPointsSeconds:[...e.cutPointsSeconds],selectedIndex:e.index};const r=n.durationSeconds,o=Ss(e),i=G(Math.min(o.maxEnd-r,Math.max(o.minStart,n.startSeconds+e.deltaSeconds))),s=G(i+r);return i===n.startSeconds&&s===n.endSeconds?{cutPointsSeconds:[...e.cutPointsSeconds],selectedIndex:e.index}:Cr({...e,endSeconds:s,startSeconds:i})}function HS(e){const n=Ce(e)[e.index];if(!n||n.durationSeconds<re*2)return{cutPointsSeconds:[...e.cutPointsSeconds],selectedIndex:e.index};const r=G(n.startSeconds+n.durationSeconds/2),o=Je([...e.cutPointsSeconds,r]).filter(i=>i>0&&i<G(e.sourceDurationSeconds));return Wm(o,e.cutPointsSeconds)?{cutPointsSeconds:[...e.cutPointsSeconds],selectedIndex:e.index}:{cutPointsSeconds:o,selectedIndex:e.index}}function WS(e){const t=Ce(e),n=t[e.index],r=t[e.index+1];return!n||!r?{cutPointsSeconds:[...e.cutPointsSeconds],selectedIndex:e.index}:{cutPointsSeconds:Hm([0,...e.cutPointsSeconds.filter(i=>i!==n.endSeconds),G(e.sourceDurationSeconds)]),selectedIndex:e.index}}const Km={steps:[],credits:[]};function KS(e=Km,t=It){return{loading:!1,error:null,context:e,options:{enabled:fp(e)},promptOverrides:{},creditsOverride:null,maxCharacters:t}}function zS(e,t){return e.maxCharacters===t?e:{...e,maxCharacters:t}}function bt(e,t){return e.slot.row-t.slot.row||e.slot.column-t.slot.column||e.id.localeCompare(t.id)}function zm(e,t){const n=e.cells.filter(r=>!Ge(r)&&(r.outputArtifactId===t||r.outputEntityId===t));if(n.length>0){const r=n.filter(o=>o.type!=="generate_video");return(r.length>0?r:n).sort(bt)}return e.cells.filter(r=>Fe(e,r)===t).sort(bt)}const xo=new Set(["generate_audio","generate_image","generate_video"]),Xm=["sourceArtifactId","source_asset_id","first_asset_id","second_asset_id","additional_asset_ids"];function Tn(e,t){const n=e.inputs?.[t];return typeof n=="string"&&n.trim()?n:null}function Vt(e){return e?.trim()?e:null}function Is(e,t){const n=e.inputs?.[t];return(Array.isArray(n)?n:[n]).filter(o=>typeof o=="string"&&o.trim()!=="")}function Ym(e){return Xm.flatMap(t=>Is(e,t))}function Jm(e){const t=new Map(e.cells.map(r=>[r.id,r])),n=new Map;for(const r of[...e.cells].sort(bt)){if(Ge(r))continue;const o=Fe(e,r);if(!o)continue;const i=n.get(o);(!i||xo.has(i.type)&&!xo.has(r.type))&&n.set(o,r)}return{cellsById:t,cellsByArtifactId:n}}function xs(e,t,n){const r=e.edges.filter(s=>s.target===n.id).map(s=>s.source),o=Is(n,"sourceCellId"),i=Ym(n).flatMap(s=>{const a=t.cellsByArtifactId.get(s);return a?[a.id]:[]});return[...new Set([...r,...o,...i])].filter(s=>s!==n.id)}function Ao(e,t,n,r){const o=new Set,i=[],s=[],a=n.map(c=>c.id);for(let c=0;c<a.length;c+=1){const l=a[c];if(!l||o.has(l))continue;o.add(l);const u=t.cellsById.get(l);if(u){if(i.push(u),r(u)){s.push(u);continue}for(const m of xs(e,t,u))o.has(m)||a.push(m)}}return{visited:i,stopped:s}}function Zm(e){return e.type==="generate_video"}function As(e,t){const n=t.flatMap(r=>{const o=Fe(e,r);return o?[o]:[]});return[...new Set(n)]}function Qm(e,t,n){const r=ta(e,n.id)?.outputCell??null,o=xs(e,t,n).map(i=>t.cellsById.get(i)).filter(i=>i!==void 0).sort(bt);return{id:n.id,producerCellId:n.id,outputCellId:r?.id??null,outputArtifactId:r?Fe(e,r)??null:Fe(e,n)??null,producerPrompt:Vt(n.prompt)??Tn(n,"prompt"),producerResolvedPrompt:Tn(n,"resolvedPrompt")??Tn(n,"resolved_prompt"),producerTool:Vt(n.tool),producerModel:Vt(n.model),producerProvider:Vt(n.provider),sourceArtifactIds:As(e,o)}}function XS(e,t){const n=Jm(e),r=zm(e,t),o=Ao(e,n,r,Zm).stopped.sort(bt),i=Ao(e,n,r,()=>!1).visited;return{steps:o.map(s=>Qm(e,n,s)),upstreamArtifactIds:As(e,i)}}function YS(e){const t=e.attempts.find(n=>n.status==="completed"&&n.artifactId===e.outputArtifactId&&n.resolvedPrompt?.trim());return t?.resolvedPrompt?.trim()?t.resolvedPrompt:e.outputAssetPrompt?.trim()?e.outputAssetPrompt:e.producerResolvedPrompt?.trim()?e.producerResolvedPrompt:e.producerPrompt?.trim()?e.producerPrompt:""}function JS(e){const t=e.outputArtifactId?e.attempts.find(s=>s.status==="completed"&&s.artifactId===e.outputArtifactId)??null:null,n=t?.tool?.trim()||e.producerTool,r=n?e.actions.find(s=>s.tool===n):void 0,o=r?.title.trim()||t?.model?.trim()||e.producerModel?.trim()||n?.trim()||"";if(!o)return null;const i=r?.providerLabel.trim()||t?.provider?.trim()||e.producerProvider?.trim()||null;return{label:o,provider:i}}const Es="[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}",ep=new RegExp(`^${Es}$`,"iu"),tp=new RegExp(`@(${Es}|${na})(?![\\w-])`,"giu");function np(e){return e==="video"||e==="final"?"video":e==="image"||e==="audio"?e:"source"}function ZS(e,t){const n=new Map(t.map(i=>[ke(i.reference),i.type])),r=new Map,o=new Map;return e.replace(tp,(i,s)=>{const a=ke(s),c=r.get(a);if(c)return c;const l=n.get(a);if(!l&&!ep.test(a))return i;const u=np(l),m=(o.get(u)??0)+1;o.set(u,m);const f=`[${u} ${m}]`;return r.set(a,f),f})}const rp=new Set(["youtube.com","m.youtube.com","music.youtube.com","youtu.be"]),op=new Set(["x.com","mobile.x.com","twitter.com","mobile.twitter.com"]),ip=new Set(["explore","home","i","intent","messages","notifications","search","settings","share"]);function sp(e,t){if(t==="youtu.be")return e.pathname.split("/")[1]||null;const n=e.searchParams.get("v");return n||(e.pathname.match(/^\/(?:shorts|embed|live|v)\/([A-Za-z0-9_-]+)/)?.[1]??null)}function ap(e,t){const n=sp(e,t);return n&&e.pathname.startsWith("/shorts/")?{kind:"youtube",url:`https://www.youtube.com/shorts/${n}`,videoId:n}:n?{kind:"youtube",url:`https://youtu.be/${n}`,videoId:n}:(e.hash="",{kind:"youtube",url:e.toString(),videoId:null})}function cp(e){const t=e.pathname.match(/^\/([A-Za-z0-9_]{1,15})\/status\/(\d+)/);if(!t)return e.hash="",{kind:"x",url:e.toString(),handle:null,status:!1};const n=t[1],r=ip.has(n.toLowerCase())?null:n;return{kind:"x",url:`https://x.com/${n}/status/${t[2]}`,handle:r,status:!0}}function lp(e){if(typeof e!="string")return null;try{const t=new URL(e);if(t.protocol!=="https:"&&t.protocol!=="http:")return null;const n=t.hostname.toLowerCase().replace(/^www\./,"");return rp.has(n)?ap(t,n):op.has(n)?cp(t):null}catch{return null}}function up(e){return e.kind==="youtube"?e.videoId!==null:e.status}function dp(e,t){return typeof e.uploader!="string"?t:e.uploader.replaceAll("@","").replace(/\s+/g," ").trim()||t}function QS(e,t){const n=[t.webpage_url,t.webpageUrl,t.source_url,t.sourceUrl].map(lp).filter(o=>o!==null),r=n.find(up)??n[0];return r?{id:`${e}:${r.url}`,label:dp(t,r.kind==="x"?"X":"YouTube"),url:r.url,xHandle:r.kind==="x"?r.handle:null}:null}function e0(e){const t=new Set;return e.filter(n=>t.has(n.url)?!1:(t.add(n.url),!0))}const t0="The thread has nothing to post. Add a prompt, or turn the thread off.";function fp(e){return e.credits.length>0||e.steps.some(t=>t.prompt.trim()!==""||t.images.length>0)}function mp(e){return e.slice(0,jn)}function Cs(e,t){return t>1?` (${e+1}/${t})`:""}function Ms(e,t,n){const r=Cs(t,n);if(!e.model)return`Prompt${r}:
16
- `;const o=e.model.provider?` via ${e.model.provider}`:"";return`Made with ${e.model.label}${o}${r}. Prompt:
17
- `}const pp="…",gp=2;function hp(e,t){for(let n=Math.min(t,e.length-1);n>=0;n-=1)if(/\s/u.test(e.charAt(n)))return n;return-1}function bp(e,t){if(e.length<=t)return e;const n=Math.max(0,t-gp),r=hp(e,n),o=r>Math.floor(n/2)?r:n;return`${e.slice(0,o).trimEnd()}${pp}`}function yp(e,t,n,r){const o=Ms(e,t,n);return bp(e.prompt.trim(),r-o.length)}function _p(e,t){const n=e.context.steps.findIndex(r=>r.id===t.id);return n===-1?0:n}function vp(e,t){return e.promptOverrides[t.id]??yp(t,_p(e,t),e.context.steps.length,e.maxCharacters)}function kp(e){return e.xHandle?`@${e.xHandle}`:e.label}function Eo(e){return`${kp(e)}: ${e.url}`}function wp(e,t=It){const n=[...e].sort((i,s)=>+(i.xHandle===null)-+(s.xHandle===null)),r=n[0];if(!r)return"";if(n.length===1)return`Special thanks to ${Eo(r)}`;const o=`Special thanks to:
18
- ${n.map(Eo).join(`
19
- `)}`;return o.length<=t?o:`Special thanks to:
20
- ${n.map(i=>i.url).join(`
21
- `)}`}function Sp(e){return e.creditsOverride??wp(e.context.credits,e.maxCharacters)}function Ts(e,t,n,r){return{id:e,stepId:t,text:n,imageAssetIds:r.map(o=>o.assetId),images:[...r]}}function Ip(e,t,n,r){const o=vp(e,t).trim(),i=mp(t.images);if(!o&&i.length===0)return null;const s=o?`${Ms(t,n,r)}${o}`:`Input images for this video${Cs(n,r)}:`;return Ts(`step:${t.id}`,t.id,s,i)}function xp(e){if(!e.options.enabled)return[];const t=e.context.steps.length,n=e.context.steps.flatMap((o,i)=>{const s=Ip(e,o,i,t);return s?[s]:[]}),r=e.context.credits.length>0?Sp(e).trim():"";return r&&n.push(Ts("credits",null,r,[])),n}function n0(e){return xp(e).map(t=>({text:t.text,imageAssetIds:t.imageAssetIds}))}const Ap=2e3,Ep=6*6e4,r0={status:null,connecting:!1,authorizeUrl:null,error:null};function Cp(e){const t=h(e),n=W(t?.username),r=W(t?.subscription_type);return n&&r?{username:n,subscriptionType:r}:null}function Mp(e){return typeof e=="number"&&Number.isInteger(e)&&e>0?e:It}function Tp(e){const t=h(e);return{connected:t?.connected===!0,pending:t?.pending===!0,hasCredentials:t?.has_credentials===!0,error:W(t?.error),expiresAt:W(t?.expires_at),account:Cp(t?.account),postMaxCharacters:Mp(t?.post_max_characters)}}function Rp(e){return e?.postMaxCharacters??It}function $p(e){switch(e){case"Basic":return"X Premium Basic";case"Premium":return"X Premium";case"PremiumPlus":return"X Premium+";case"None":return"No X Premium";default:return e}}function Np(e){if(!e.account)return null;const t=Rp(e).toLocaleString("en-US");return`${$p(e.account.subscriptionType)}: posts up to ${t} characters.`}async function Co(e,t={}){return Tp(await e("service_status",{service:"x",...t.refreshAccount?{refresh_account:!0}:{}},{background:!0}))}async function o0(e){const t=h(await e("connect_service",{service:"x"})),n=W(t?.authorize_url);if(!n)throw new Error("X did not return an authorization URL.");return n}async function i0(e,t){const n=t.now??Date.now,r=t.pollMs??Ap,o=t.timeoutMs??Ep,i=n();let s=await Co(e);for(;s.pending;){if(n()-i>=o)return{...s,pending:!1,error:"Timed out waiting for X authorization."};await t.sleep(r),s=await Co(e)}return s}function s0(e){return e.error?{ok:!1,message:e.error}:e.connected?{ok:!0,message:"X account connected"}:{ok:!1,message:"X authorization did not complete."}}function Pp(e){return new Date(e).toLocaleString([],{hour:"2-digit",minute:"2-digit",month:"short",day:"numeric"})}function Op(e,t){const n=e?Date.parse(e):Number.NaN;return Number.isFinite(n)?n<=t?"Access token expired; it renews automatically on next use.":`Access token renews automatically; the current one expires ${Pp(n)}.`:"Tokens renew automatically."}function a0(e,t={}){if(t.connecting)return{tone:"pending",label:"Waiting for X authorization",detail:"Approve the request in the browser tab that opened.",actionLabel:null};if(!e)return{tone:"unknown",label:"Not checked",detail:"Refresh to check the X connection.",actionLabel:"Connect X"};if(!e.hasCredentials)return{tone:"missing-credentials",label:"App credentials missing",detail:"Save X_CLIENT_ID and X_CLIENT_SECRET as provider keys first. They come from console.x.com → your app → OAuth 2.0.",actionLabel:null};if(e.pending)return{tone:"pending",label:"Waiting for X authorization",detail:"An authorization started elsewhere is still open in a browser tab.",actionLabel:null};if(e.error)return{tone:"error",label:"Connection failed",detail:e.error,actionLabel:e.connected?"Reconnect X":"Connect X"};if(e.connected){const n=Np(e);return{tone:"connected",label:e.account?`Connected as @${e.account.username}`:"Connected",detail:[n,Op(e.expiresAt,t.now??Date.now())].filter(r=>r!==null).join(" "),actionLabel:"Reconnect X"}}return{tone:"disconnected",label:"Not connected",detail:"Posting needs a one-time browser authorization; tokens renew on their own afterwards.",actionLabel:"Connect X"}}function c0(e){const[t,n]=_.useState(null),[r,o]=_.useState(!1),[i,s]=_.useState(null);async function a(c){if(e){o(!0),s(null);try{n(await e("set_har_capture",c?{mode:c}:{}))}catch(l){s(l instanceof Error?l.message:String(l))}finally{o(!1)}}}return{settings:t,busy:r,error:i,update:a}}const Lp={DROPBOX_CLIENT_ID:"Dropbox app key",DROPBOX_CLIENT_SECRET:"Dropbox app secret (optional)",X_CLIENT_ID:"X client ID",X_CLIENT_SECRET:"X client secret",B2_ACCESS_KEY_ID:"Access key ID",B2_SECRET_ACCESS_KEY:"Secret access key",B2_REGION:"Region",B2_BUCKET:"Bucket",B2_ENDPOINT:"Endpoint",B2_ARCHIVE_PREFIX:"Archive prefix"};function Fp(e){return Lp[e.envKey]??e.label}function Zn(e){return e&&typeof e=="object"&&!Array.isArray(e)?e:null}function l0(e){const t=Zn(e);if(!Array.isArray(t?.providers))throw new Error("Could not read provider settings");return t.providers.flatMap(n=>{const r=Zn(n);return!r||typeof r.envKey!="string"||typeof r.label!="string"||typeof r.provider!="string"?[]:[{envKey:r.envKey,provider:r.provider,label:r.label,keyStatus:typeof r.keyStatus=="string"?r.keyStatus:"missing",maskedKey:typeof r.maskedKey=="string"?r.maskedKey:null,editable:r.editable===!0&&r.source!=="1password",secret:r.secret!==!1,source:typeof r.source=="string"?r.source:"missing"}]})}function u0(e){const t=Zn(e);if(!t||typeof t.state!="string"||typeof t.head!="string"||typeof t.pendingObjects!="number"||!Number.isSafeInteger(t.pendingObjects)||t.pendingObjects<0)throw new Error("Could not read project storage status");return{...t,state:t.state,head:t.head,pendingObjects:t.pendingObjects,...typeof t.lastError=="string"?{lastError:t.lastError}:{}}}function d0(e){const[t,n]=_.useState(null),[r,o]=_.useState(!1),[i,s]=_.useState(null),a=_.useRef(null),c=_.useRef(0),l=()=>{c.current+=1,n(null);const f=a.current;fn(()=>f)()};return{draft:t,saving:r,message:i,edit:(f,d)=>{!f.editable||r||(c.current+=1,a.current=d,s(null),n({key:f.envKey,value:f.secret?"":f.maskedKey??""}))},close:l,save:async f=>{if(!t||t.key!==f.envKey||!t.value.trim()||r||!f.editable)return;const d=c.current;o(!0),s(null);try{if(await e(t.key,t.value),d!==c.current)return;s({key:t.key,text:`${Fp(f)} saved`,error:!1}),l()}catch(p){d===c.current&&s({key:t.key,text:p instanceof Error?p.message:String(p),error:!0})}finally{o(!1)}},change:f=>n(d=>d?{...d,value:f}:null)}}const Mr={label:"In place · previous version kept",tone:"warning"};function ze(e,t){return Object.prototype.hasOwnProperty.call(e,t)&&e[t]!==void 0&&e[t]!==null}function $e(e){return typeof e=="number"&&Number.isFinite(e)?e:null}function xe(e){return typeof e=="string"&&e.trim()?e.trim():null}function je(e){const t=$e(e);return t!==null?me(t):xe(e)}function qe(e,t){const n=ar(e).map(o=>o.raw),r=xe(t.asset_id);return r?.startsWith("@")?r:n.length===1?n[0]:r?`@${r}`:"Not provided"}function L(e,t,n="default",r=!1){return{label:e,value:t,tone:n,wide:r}}function Dp(e,t){const n=$e(e),r=$e(t);return n===null||r===null||r<n?null:me(r-n)}function Vp(e){const t=ze(e.params,"start_time")?je(e.params.start_time)??"Not provided":"0:00 (default)",n=je(e.params.end_time)??"Not provided",r=Dp(e.params.start_time??0,e.params.end_time)??"Calculated on apply";return{title:"Extract new video clip",settings:[L("Source",qe(e.input,e.params)),L("Start",t),L("End",n),L("Duration",r),L("Output","New clip · source preserved"),L("Name",xe(e.params.name)??"Automatic")],effect:{label:"New clip · source preserved",tone:"default"}}}function jp(e){const t=je(e.params.chunk_a_end)??"Not provided",n=ze(e.params,"chunk_b_start")?e.params.chunk_b_start:e.params.chunk_a_end,r=je(n)??"Not provided",o=$e(e.params.chunk_a_end),i=$e(n),s=o!==null&&i!==null&&i<o?me(o-i):"None";return{title:"Split video into two clips",settings:[L("Source",qe(e.input,e.params)),L("First clip",`0:00 → ${t}`),L("Remaining clip",`${r} → end`),L("Overlap",s),L("Output","Two new clips · source preserved")],effect:{label:"Two new clips · source preserved",tone:"default"}}}function Gp(e){const t=ze(e.params,"cut_start")||ze(e.params,"cut_end"),n=t?"cut_start":"trim_start",r=t?"cut_end":"trim_end",o=ze(e.params,n)?je(e.params[n])??"Not provided":t?"Not provided":"0:00 (default)",i=ze(e.params,r)?je(e.params[r])??"Not provided":t?"Not provided":"End of video";return{title:t?"Remove section from video":"Trim video in place",settings:[L("Source",qe(e.input,e.params)),L("Operation",t?"Remove range":"Keep range"),L("Start",o),L("End",i),L("Output","Existing source updated in place","warning"),L("Recovery","Previous version retained")],effect:Mr}}function yt(e){const t=e.replaceAll("_"," ").replaceAll("-"," ");return t.charAt(0).toUpperCase()+t.slice(1)}function qp(e){return String(Number(e.toFixed(2)))}function Up(e){const t=$e(e.sourceDurationSeconds),n=$e(e.params.speed),r=$e(e.params.target_duration_seconds),o=n??(t!==null&&r!==null&&r>0?t/r:null),i=r??(t!==null&&o!==null&&o>0?t/o:null),s=[L("Source",qe(e.input,e.params))];return t!==null&&t>0&&s.push(L("Source duration",me(t))),s.push(L("Speed",o!==null?`${qp(o)}×${n===null?" (from target duration)":""}`:"Calculated on apply")),r!==null&&s.push(L("Target duration",me(r))),i!==null&&i>0&&r===null&&s.push(L("Expected duration",me(i))),s.push(L("Output","Existing source updated in place","warning"),L("Recovery","Previous version retained")),{title:"Change video speed",settings:s,effect:Mr}}function Bp(e){const t=xe(e.params.scheduled_for),n=xe(e.params.orientation);return{title:"Post to X",settings:[L("Destination","X"),L("Source",qe(e.input,e.params)),L("Publish",t?`Scheduled · ${t}`:"Now","default",t!==null),L("Orientation",n?yt(n):"Keep source")],effect:{label:t?"Publishes to X · scheduled":"Publishes to X · now",tone:"default"},postText:typeof e.params.text=="string"?e.params.text:""}}const Tr=/api.?key|secret|(?:^|[_-])token(?:$|[_-])|password|credential|authorization/iu;function Hp(e,t){return e!=="value"?!1:Object.entries(t).some(([n,r])=>/^(?:env_?)?key$|^(?:variable_?)?name$/iu.test(n)&&typeof r=="string"&&Tr.test(r))}function Qn(e){return Array.isArray(e)?e.map(Qn):typeof e!="object"||e===null?e:Object.fromEntries(Object.entries(e).map(([t,n])=>[t,Tr.test(t)?"Hidden":Qn(n)]))}function Rs(e,t,n){if(Tr.test(e)||Hp(e,n))return"Hidden";if(/time|seconds|duration/iu.test(e)){const o=je(t);if(o)return o}if(typeof t=="boolean")return t?"Yes":"No";if(typeof t=="number")return String(t);if(typeof t=="string"&&(/url/iu.test(e)||/^https?:\/\//iu.test(t)))return t;if(typeof t=="string")return t.length>96?`${t.slice(0,93)}…`:t;const r=JSON.stringify(Qn(t));return r?r.length>96?`${r.slice(0,93)}…`:r:"None"}function Wp(e){const t=Array.isArray(e.params.steps)?e.params.steps:[],n=t.flatMap((o,i)=>{const s=Rn(o),a=xe(s?.tool)??`step ${i+1}`,c=Rn(s?.params)??{},l=xe(c.asset_id)??xe(c.audio_asset_id)??qe(e.input,c);return[L(`Step ${i+1}`,`${yt(a)} · ${l}`)]}),r=t.some(o=>{const i=xe(Rn(o)?.tool);return i==="replace_video_audio"||i==="trim_video"});return{title:"Chained actions",settings:n.length>0?n:[L("Tool","chain")],effect:r?Mr:null}}function Mo(e){return e===null?"Unknown":e<.01?`${Math.round(e*100)}¢`:`$${e.toFixed(2)}`}function f0(e,t){const n=[L("Step",`${e.index+1} of ${e.total}`),...e.address?[L("Source",e.address)]:[],...Object.entries(e.params).filter(([r])=>r!=="prompt"&&r!=="_provider").slice(0,5).map(([r,o])=>L(yt(r),Rs(r,o,e.params))),L("Estimated cost",Mo(e.estimateUsd),e.estimateUnavailable?"warning":"default"),L("Remaining steps",t>0?String(t):"None")];return{title:`Step ${e.index+1} of ${e.total} · ${e.title}`,settings:n,effect:{label:e.estimateUnavailable?"Cost unknown for this model":`Spends about ${Mo(e.estimateUsd)}`,tone:"warning"},postText:typeof e.params.prompt=="string"?e.params.prompt:void 0}}function Rn(e){return e&&typeof e=="object"&&!Array.isArray(e)?e:null}function Kp(e){const t=Object.entries(e.params).filter(([n])=>n!=="book_id").slice(0,8).map(([n,r])=>L(yt(n),n==="asset_id"?qe(e.input,e.params):Rs(n,r,e.params),"default",/url/iu.test(n)&&typeof r=="string"));return{title:yt(e.tool),settings:t.length>0?t:[L("Tool",e.tool)],effect:null}}function m0(e){return e.tool==="extract_video_clip"?Vp(e):e.tool==="split_video"?jp(e):e.tool==="trim_video"?Gp(e):e.tool==="change_video_speed"?Up(e):e.tool==="post"?Bp(e):e.tool==="chain"?Wp(e):Kp(e)}const Mt={blocking:null,notice:null};function ee(e){return{blocking:e,notice:null}}function $s(e){return{blocking:null,notice:e}}function To(e,t,n){return t!==null?t>e:n<=0||e<n}function zp(e){return e.trim().replace(/^@/,"").trim()}function p0(e){const t=zp(e.handle),n=e.url.trim(),r=e.durationSeconds??0;return!e.includeHandle&&!e.includeQr?ee("Include a handle, a QR code, or both."):e.includeHandle&&!t?ee("Include handle is on but no handle is set. Type a handle, or turn Include handle off."):e.includeQr&&!n&&!t?ee("Include QR code is on but there is nothing to link. Enter a QR link, or a handle it can point to."):e.includeQr&&!To(e.qrStartSeconds,e.qrEndSeconds,r)?ee("QR end time must be after its start time."):e.includeHandle&&!To(e.handleStartSeconds,e.handleEndSeconds,r)?ee("Handle end time must be after its start time."):Mt}function g0(e){if(!e.prompt?.trim())return ee("Write a prompt before applying.");if(e.settingsError)return ee(e.settingsError);if(e.previewStale)return Mt;if(e.previewLoading)return ee("Waiting for the server preview.");if(e.previewError!==null)return ee(`Preview failed — ${e.previewError}`);const[t,...n]=e.promptLeaks;if(t){const r=n.length>0?` (+${n.length} more)`:"";return ee(`${t.message}${r}. Add it with Add input, or remove the mention.`)}return $s(e.estimateUnknown?"No cost estimate is available for this model.":null)}function h0(e){const t=Ce({cutPointsSeconds:e.cutPointsSeconds,sourceDurationSeconds:e.sourceDurationSeconds});if(t.length===0)return ee("Nothing to split yet — add a cut point.");if(e.outputMode==="remove"&&t.length<2)return ee("Removing a piece needs at least two pieces. Add a cut first.");const n=Nm(e.outputMode,t.length);return e.availableEmptyCells<n?ee(`This split needs ${n} empty notebook cells; ${e.availableEmptyCells} available.`):Mt}function b0(e){if(e.suggestions&&e.suggestions.every(s=>!s.included))return ee("Include at least one suggestion, or cancel.");const t=e.previews.flatMap(s=>s.conflicts)[0];if(t)return ee(t.message);if(e.previews.some(s=>!s.valid))return ee("A planned edit no longer fits the current sequence. Prepare it again.");const n=e.previews.flatMap(s=>s.warnings),[r,...o]=n;if(!r)return Mt;const i=o.length>0?` (+${o.length} more)`:"";return $s(`${r.message}${i}`)}function y0(e,t,n){const r=sc(e,t,n);return r?ee(r):Mt}function _0(e){return e.busy?{state:"busy",message:e.busyLabel,dismissible:!1}:e.validation.blocking!==null?{state:"blocking",message:e.validation.blocking,dismissible:!1}:e.outcome&&!e.outcome.ok?{state:"failed",message:e.outcome.message,dismissible:!0}:e.notice?.tone==="error"?{state:"failed",message:e.notice.message,dismissible:!0}:e.validation.notice!==null?{state:"notice",message:e.validation.notice,dismissible:!1}:e.outcome?.ok?{state:"info",message:e.outcome.message,dismissible:!0}:e.notice?{state:"info",message:e.notice.message,dismissible:!0}:{state:"ready",message:null,dismissible:!1}}const Xp=1024,v0=`(min-width: ${Xp}px)`;function k0(e){return e.state==="ready"&&!e.hasSecondaryActions&&e.wideEnough}function Yp(e){return e==="image"||e==="generate_image"?"image":e==="video"||e==="split_video"||e==="generate_video"||e==="concat"||e==="splice"?"video":e==="audio"||e==="extract_audio"||e==="generate_audio"?"audio":null}function Jp(e,t,n){const r=new Set(e.edges.filter(o=>o.target===t).map(o=>o.targetInput));if(!r.has(n))return n;for(let o=2;;o+=1){const i=`${n}_${o}`;if(!r.has(i))return i}}function Zp(e){return e==="generate_image"||e==="generate_video"||e==="generate_audio"}function w0(e,t){const n=t.targetHandle??"input",r=e.cells.find(s=>s.id===t.source),o=e.cells.find(s=>s.id===t.target);if(!r||!o||!Zp(o.type))return n;const i=Yp(r.type);return!i||i==="image"&&(n==="first_frame"||n==="last_frame")||i==="audio"&&(n==="replace_audio"||n==="scene_audio")?n:Jp(e,o.id,i)}function Qp(e){return e==="extract_audio"?["video"]:e==="split_video"?["video","analysis"]:e==="analysis"?["result"]:e==="image"?["media","segment"]:e==="audio"||e==="video"?["media"]:["input"]}function eg(e,t){if(t.inputs?.mediaRole!=="extract-frame-output")return null;const n=typeof t.inputs.sourceCellId=="string"?t.inputs.sourceCellId:null,r=n?e.get(n):void 0,o=Number(t.inputs.atSeconds??t.inputs.timestampSeconds);return{sourceAddress:r?ue(r.slot):null,atSeconds:Number.isFinite(o)?o:null}}function tg(e){const t=new Map(e.cells.map(a=>[a.id,a])),n=Hi(e),r=new Map,o=new Map,i=new Map,s=new Map;for(const a of e.edges){const c=r.get(a.target)??[];c.includes(a.targetInput)||c.push(a.targetInput),r.set(a.target,c),o.set(a.target,(o.get(a.target)??0)+1);const l=i.get(a.target)??{};l[a.targetInput]=(l[a.targetInput]??0)+1,i.set(a.target,l);const u=n.get(a.id)??qi,m=Wi(u.sourceSide,u.sourcePortIndex),f=s.get(a.source)??[];f.includes(m)||f.push(m),s.set(a.source,f)}return e.cells.map(a=>{const c=eg(t,a),l=Pc(a,e.cells,e.edges);return{id:a.id,type:a.type==="timeline"||a.type==="goal"?a.type:"cell",...a.type==="timeline"?{dragHandle:".notebook-timeline-header",connectable:!1}:{},...["goal","post"].includes(a.type)?{connectable:!1}:{},position:Qe(a.slot),data:{kind:a.type,...a.label===void 0?{}:{label:a.label},subtitle:Ge(a)?pu():`${a.type.toUpperCase()} · CELL`,slot:a.slot,status:"ready",targetInputs:r.get(a.id)??Qp(a.type),targetConnectionCount:o.get(a.id)??0,targetInputConnectionCounts:i.get(a.id)??{},sourcePorts:s.get(a.id)??[],...a.prompt===void 0?{}:{prompt:a.prompt},...a.provider===void 0?{}:{provider:a.provider},...a.model===void 0?{}:{model:a.model},...a.operation===void 0?{}:{operation:a.operation},...a.tool===void 0?{}:{tool:a.tool},...a.outputEntityId===void 0?{}:{outputEntityId:a.outputEntityId},...a.outputArtifactId===void 0?{}:{outputArtifactId:a.outputArtifactId},...a.inputs===void 0?{}:{inputs:a.inputs},...c===null?{}:{frameProvenance:c},...l?.provider===void 0?{}:{producerProvider:l.provider},...l?.model===void 0?{}:{producerModel:l.model}}}})}function S0(e,t,n){let r=!1;const o=e.map(i=>i.id!==t||i.data.status===n?i:(r=!0,{...i,data:{...i.data,status:n}}));return r?o:e}function I0(e){const t=Hi(e),n=new Map(e.cells.map(r=>[r.id,fi(r.type)]));return e.edges.map(r=>{const o=t.get(r.id)??qi,i=n.get(r.source)??"data";return{id:r.id,source:r.source,sourceHandle:Wi(o.sourceSide,o.sourcePortIndex),target:r.target,targetHandle:r.targetInput,type:"busRiver",className:`workflow-edge edge-family-${i}`,data:o}})}function x0(e,t){return t?e.map(n=>{const r=new Set((n.className??"").split(/\s+/).filter(Boolean));return r.add(n.source===t||n.target===t?"workflow-edge-cell-focus":"workflow-edge-cell-dim"),{...n,className:[...r].join(" ")}}):e}function ng(e){return e.operation!=="rewrite_prompt"&&xt(e.type)}function A0(e){return e.tool==="edit_image_subjects"&&e.provider==="local"?!1:e.operation==="rewrite_prompt"||ng(e)}function ut(e="text"){return{mode:e,reference:null,startSeconds:"0",durationSeconds:"",preparing:!1,error:null}}function Ro(e){return e instanceof Error?e.message:String(e)}function rg({initialMode:e="text",onStateChange:t,release:n}){let r=!0,o=0,i=ut(e);const s=g=>{i=g,r&&t(g)},a=g=>{g&&Promise.resolve(n(g)).catch(()=>{})},c=g=>{o+=1;const y=i.reference;s(ut(g)),a(y)};return{changeMode:g=>{r&&c(g)},clearError:()=>{r&&i.error&&s({...i,error:null})},clearReference:()=>{if(!r)return;o+=1;const g=i.reference;s({...i,reference:null,startSeconds:"0",durationSeconds:"",preparing:!1,error:null}),a(g)},close:()=>{r&&c("text")},getState:()=>i,prepare:async(g,y)=>{if(!r)return{status:"stale"};const v=o+1;if(o=v,i.mode===g)s({...i,preparing:!0,error:null});else{const S=i.reference;s({...ut(g),preparing:!0}),a(S)}try{const S=await y();if(!r||v!==o)return a(S),{status:"stale"};const w=i.reference;return s({mode:g,reference:S,startSeconds:"0",durationSeconds:"",preparing:!1,error:null}),w!==S&&a(w),{status:"ready",mode:g,reference:S}}catch(S){if(!r||v!==o)return{status:"stale"};const w=Ro(S);return s({...i,preparing:!1,error:w}),{status:"error",error:w}}},resetInvalidRange:g=>{const y=Ro(g);return r&&s({...i,startSeconds:"0",durationSeconds:"",error:y}),y},setDurationSeconds:g=>{r&&s({...i,durationSeconds:g,error:null})},setStartSeconds:g=>{r&&s({...i,startSeconds:g,error:null})},stop:()=>{if(!r)return;r=!1,o+=1;const g=i.reference;i=ut(),a(g)}}}function og(e){if(typeof e!="object"||e===null)return[];const t=e.preparationJobs;return Array.isArray(t)?t.flatMap(n=>{if(typeof n!="object"||n===null)return[];const r=n;return typeof r.bookId=="string"&&typeof r.jobId=="number"&&Number.isSafeInteger(r.jobId)&&r.jobId>0?[{bookId:r.bookId,jobId:r.jobId}]:[]}):[]}async function E0(e){const t=Date.now()+(e.timeoutMs??6e5);try{for(;!e.isCancelled();){const n=await e.search();let r=og(n);if(e.isCancelled())return;if(r.length===0)return n;for(e.onPreparing(!0);r.length>0;){if(Date.now()>=t)throw new Error("Search preparation is still running. Try searching again shortly.");if(e.isCancelled())return;const o=[];for(const i of new Set(r.map(s=>s.bookId))){const s=r.filter(c=>c.bookId===i),a=await e.listJobs(i,s.map(c=>c.jobId));if(!Array.isArray(a))throw new Error("The server returned an invalid search preparation status");for(const c of s){const l=a.find(u=>typeof u=="object"&&u!==null&&u.id===c.jobId);if(!l)throw new Error("Search preparation could not be found. Try searching again.");if(l.state==="failed"||l.state==="aborted"){const u=l.error;throw new Error(u?.message??"Search preparation failed. Try searching again.")}l.state!=="done"&&o.push(c)}}r=o,r.length>0&&await new Promise(i=>setTimeout(i,e.intervalMs??1e3))}}return}finally{e.onPreparing(!1)}}function He(e){if(typeof e!="object"||e===null)throw new Error("Invalid search indexing response");return e}async function C0(e){const t=He(await e.start());if(!Array.isArray(t.jobs))throw new Error("Invalid search indexing jobs");let n=t.jobs.map(i=>{const s=He(i);if(typeof s.bookId!="string"||typeof s.jobId!="number"||!Number.isSafeInteger(s.jobId)||s.jobId<=0)throw new Error("Invalid search indexing job");return{bookId:s.bookId,jobId:s.jobId}});const r={indexed:0,failed:0,failures:[]},o=Date.now()+(e.timeoutMs??20*6e4);for(;n.length>0;){if(e.isCancelled())return;if(Date.now()>=o)throw new Error("Indexing is still running. Reopen the Library to check coverage.");const i=[];for(const s of new Set(n.map(a=>a.bookId))){if(e.isCancelled())return;const a=n.filter(l=>l.bookId===s),c=await e.listJobs(s,a.map(l=>l.jobId));if(!Array.isArray(c))throw new Error("Invalid search indexing status");for(const l of a){const u=c.map(He).find(m=>m.id===l.jobId);if(!u)throw new Error("Indexing job could not be found. Reopen the Library to retry.");if(u.state==="done"){const m=He(u.result);if(typeof m.indexed!="number"||typeof m.failed!="number"||!Array.isArray(m.failures))throw new Error("Invalid search indexing result");r.indexed+=m.indexed,r.failed+=m.failed;for(const f of m.failures){const d=He(f).message;typeof d=="string"&&r.failures.length<20&&r.failures.push({message:d})}}else if(u.state==="failed"||u.state==="aborted"){r.failed+=1;const m=u.error?He(u.error).message:void 0;r.failures.length<20&&r.failures.push({message:typeof m=="string"?m:"Search indexing failed"})}else i.push(l)}}n=i,n.length>0&&await new Promise(s=>setTimeout(s,e.intervalMs??1e3))}return e.isCancelled()?void 0:r}function M0(e){const t=ne.c(10),n="text";let r;t[0]!==n?(r=()=>ut(n),t[0]=n,t[1]=r):r=t[1];const[o,i]=_.useState(r);let s;t[2]!==n?(s=()=>rg({initialMode:n,onStateChange:i,release:wf}),t[2]=n,t[3]=s):s=t[3];const[a]=_.useState(s);let c,l;t[4]!==a?(c=()=>()=>{a.stop()},l=[a],t[4]=a,t[5]=c,t[6]=l):(c=t[5],l=t[6]),_.useEffect(c,l);let u;return t[7]!==a||t[8]!==o?(u={state:o,lifecycle:a},t[7]=a,t[8]=o,t[9]=u):u=t[9],u}const Rr={jobs:{path:"/jobs",name:"Jobs"},settings:{path:"/settings",name:"Settings"}},ig=Object.entries(Rr);function T0(e){const t=e.replace(/\/+$/,"")||"/";return ig.find(([,r])=>r.path===t)?.[0]??"notebook"}function R0(e){return e==="notebook"?"/":Rr[e].path}function $0(e){return e==="notebook"?"VIDEOBOOK":`${Rr[e].name} · VIDEOBOOK`}function sg(e,t){return!e||!t?null:`${e}:${t}`}function ag(e,t){return t?e[t]??null:null}function cg(e,t,n){if(!t)return{...e};const r=e[t];return r&&r.row===n.row&&r.column===n.column?e:{...e,[t]:n}}function N0(e,t){const n=ne.c(11);let r;n[0]===Symbol.for("react.memo_cache_sentinel")?(r={},n[0]=r):r=n[0];const[o,i]=_.useState(r);let s,a;n[1]!==e||n[2]!==t||n[3]!==o?(s=sg(e,t),a=ag(o,s),n[1]=e,n[2]=t,n[3]=o,n[4]=s,n[5]=a):(s=n[4],a=n[5]);const c=a;let l;n[6]!==s?(l=f=>{i(d=>cg(d,s,f))},n[6]=s,n[7]=l):l=n[7];const u=l;let m;return n[8]!==c||n[9]!==u?(m={lastWorkSlot:c,rememberLastWorkSlot:u},n[8]=c,n[9]=u,n[10]=m):m=n[10],m}function P0(e,t=n=>window.requestAnimationFrame(n)){t(()=>{t(()=>{const n=e();n&&n.scrollTo({top:n.scrollHeight,behavior:"smooth"})})})}function lg(e,t){const n=e();if(!n)return()=>{};const r=n.closest(".app-shell")?.querySelector(".command-composer:not([hidden])");let o=0,i=!1;const s=()=>{i=!0,window.cancelAnimationFrame(o),l.disconnect(),n.scrollTo({top:n.scrollTop,behavior:"instant"}),window.removeEventListener("pointerdown",s,!0),window.removeEventListener("wheel",s,!0),window.removeEventListener("keydown",s,!0),window.removeEventListener("resize",s)},a=()=>{if(i)return;const u=e();if(!u)return s();const m=u.querySelectorAll(".react-flow__node.selected"),f=m.length===1?m[0]:null;if(!f||f.getAttribute("data-id")!==t)return s();const d=u.getBoundingClientRect(),g=Math.min(d.top+u.clientHeight,r?.getBoundingClientRect().top??d.bottom)-d.top;if(g<=0)return;const y=f.getBoundingClientRect(),v=Math.max(16,(g-y.height)/2),S=Math.max(0,Math.min(u.scrollHeight-u.clientHeight,u.scrollTop+y.top-d.top-v));Math.abs(S-u.scrollTop)<=2||u.scrollTo({top:S,behavior:window.matchMedia("(prefers-reduced-motion: reduce)").matches?"auto":"smooth"})},c=()=>{i||(window.cancelAnimationFrame(o),o=window.requestAnimationFrame(()=>{o=window.requestAnimationFrame(a)}))},l=new ResizeObserver(c);return l.observe(n),r&&l.observe(r),window.addEventListener("pointerdown",s,!0),window.addEventListener("wheel",s,{capture:!0,passive:!0}),window.addEventListener("keydown",s,!0),window.addEventListener("resize",s),c(),s}function O0(e,t,n){const r=ne.c(16),o=_.useRef(null);let i;r[0]===Symbol.for("react.memo_cache_sentinel")?(i={width:0,height:0,minimumZoom:0},r[0]=i):i=r[0];const[s,a]=_.useState(i),c=_.useRef(1),l=_.useRef(0),u=_.useRef(null),m=fu(s.width,s.minimumZoom);let f;r[1]===Symbol.for("react.memo_cache_sentinel")?(f=()=>{const I=o.current;I&&(l.current=I.scrollTop/c.current)},r[1]=f):f=r[1];const d=f;let p;r[2]!==n?(p=()=>{const I=o.current;if(!n||!I)return;I.scrollLeft=0,I.scrollTop=0,l.current=0;const E=()=>{d();const A=getComputedStyle(I),$=Math.max(0,I.clientWidth-parseFloat(A.paddingLeft)-parseFloat(A.paddingRight)),T=I.clientHeight,N=parseFloat(A.getPropertyValue("--notebook-minimum-zoom"))||0;a(M=>M.width===$&&M.height===T&&M.minimumZoom===N?M:{width:$,height:T,minimumZoom:N})};E(),I.addEventListener("scroll",d,{passive:!0});const C=new ResizeObserver(E);return C.observe(I),()=>{u.current?.(),I.removeEventListener("scroll",d),C.disconnect()}},r[2]=n,r[3]=p):p=r[3];let g;r[4]!==n||r[5]!==e||r[6]!==t?(g=[n,e,t,d],r[4]=n,r[5]=e,r[6]=t,r[7]=g):g=r[7],_.useLayoutEffect(p,g);let y,v;r[8]!==n||r[9]!==m?(y=()=>{const I=o.current;!n||!I||(I.scrollTop=l.current*m,c.current=m,d())},v=[n,d,m],r[8]=n,r[9]=m,r[10]=y,r[11]=v):(y=r[10],v=r[11]),_.useLayoutEffect(y,v);let S;r[12]===Symbol.for("react.memo_cache_sentinel")?(S=I=>{u.current?.(),u.current=lg(()=>o.current,I)},r[12]=S):S=r[12];const w=S;let k;return r[13]!==s||r[14]!==m?(k={scrollRef:o,surface:s,zoom:m,revealCell:w},r[13]=s,r[14]=m,r[15]=k):k=r[15],k}function L0(e,t){const n=e?t.find(r=>r.artifactId===e||r.id===e):void 0;return!e||!n?{ok:!1,message:"Usage: /music-video @audio"}:n.type!=="audio"?{ok:!1,message:"/music-video requires an audio asset"}:n.status!=="ready"||!n.mediaUrl||!n.audioInfo?{ok:!1,message:"Process the audio asset before opening the music-video editor"}:{ok:!0,asset:n}}const F0=["source","cinematic","ig-influencer"],ug={source:{id:"source",label:"Match source",summary:"Keep the look, camera and lighting of the source screenshot.",briefKeywords:[],defaults:{imageModel:"nano-banana-2-1",imageResolution:"2K",videoResolution:"720p"},planner:"Infer the visual style, framing, lighting and camera from the scene reference. Preserve that look. Identify the scene screenshot, character references and prop references from the actual images and brief. Reference images are not necessarily people. Remove social-media interface overlays from generated pictures.",fragments:{frame:"Match the source scene's framing, lighting and visual style; remove interface overlays",storyboard:"Keep the approved scene's visual style, people and props",ending:"Keep the approved scene's visual style",video:"Match the approved scene's camera and lighting; natural ambient sound",revise:"Preserve the selected image's visual style"},banned:[],options:[]},cinematic:{id:"cinematic",label:"Cinematic",summary:"Photographic live-action with natural proportions, textures and motion.",briefKeywords:["cinematic"],defaults:{},planner:"Photographic live-action. Natural proportions, real skin and material textures, practical light. Restrained expressions and plausible motion. Comedy comes from situations and timing; avoid cartoon rendering, caricature, rubbery movement and exaggerated features.",fragments:{frame:"Photographic live-action, natural proportions, real textures",storyboard:"Photographic live-action, natural proportions, real textures",ending:"Photographic live-action, natural proportions, real textures",video:"Live-action, natural motion, restrained expressions",revise:"Photographic live-action, natural proportions, real textures"},banned:[],options:[]},"ig-influencer":{id:"ig-influencer",label:"IG Influencer",summary:"Hyper-realistic, candid iPhone footage with natural skin and light.",briefKeywords:["ig influencer","instagram influencer","influencer","insta reel","instagram reel"],defaults:{aspectRatio:"9:16",imageModel:"sunburst",imageResolution:"2K",videoResolution:"720p"},planner:"Use a hyper-realistic Instagram phone-camera register: real-world activity in present tense, one location per shot, candid framing with slight imperfection, light grain, unretouched skin with visible pores and texture. Use the selected iPhone camera and lighting; natural daylight or soft indoor light by default. No HDR crunch or beautify. No captions or on-screen text inside pictures or video; storyboard notes go below pictures. Avoid cinematic, masterpiece, editorial, Portra, Cinestill and all film-stock vocabulary. Match the delivery: address the camera for selfies, be caught mid-action when filmed by a friend, hold framing steady on a tripod, or show the reflection for a mirror shot. Make the selected content format explicit in the four beats. Sound is ambient room or street sound with an optional short spoken line.",fragments:{frame:"hyper-realistic, skin pores, light grain",storyboard:"hyper-realistic, skin pores, light grain",ending:"hyper-realistic, skin pores",video:"hyper-realistic skin pores, natural motion, handheld micro-shake, ambient sound",revise:"hyper-realistic, skin pores"},banned:["cinematic","masterpiece","editorial","Portra","Cinestill"],options:[{key:"format",label:"Content format",default:"day-in-the-life",choices:[{value:"grwm",label:"GRWM",prompt:"GRWM",briefKeywords:["grwm","get ready with me"],beats:"skincare, outfit, final look, mirror check"},{value:"ootd",label:"OOTD",prompt:"OOTD",briefKeywords:["ootd","outfit of the day"],beats:"reveal, details, walk, turn"},{value:"day-in-the-life",label:"Day in the life",prompt:"day-in-the-life",briefKeywords:["day in the life","vlog"],beats:"arrive, begin activity, react, finish"},{value:"travel-reel",label:"Travel reel",prompt:"travel",briefKeywords:["travel reel"],beats:"arrive, explore, discover, farewell"},{value:"cafe",label:"Café",prompt:"café",briefKeywords:["brunch","cafe","café"],beats:"order, receive drink, taste, smile"},{value:"gym",label:"Gym",prompt:"gym",briefKeywords:["gym"],beats:"warm up, exercise, effort, recover"},{value:"skincare",label:"Skincare",prompt:"skincare",briefKeywords:["skincare"],beats:"cleanse, apply, massage, reveal"},{value:"haul",label:"Haul",prompt:"haul",briefKeywords:["haul"],beats:"unpack, show item, try on, react"},{value:"storytime",label:"Storytime",prompt:"storytime",briefKeywords:["storytime"],beats:"hook, explain, react, conclude"}]},{key:"delivery",label:"Delivery",default:"selfie-to-camera",choices:[{value:"selfie-to-camera",label:"Selfie to camera",prompt:"selfie",briefKeywords:["selfie","front camera"]},{value:"filmed-by-friend",label:"Filmed by a friend",prompt:"friend-filmed",briefKeywords:["filmed by"]},{value:"tripod",label:"Tripod",prompt:"tripod",briefKeywords:["tripod"]},{value:"mirror",label:"Mirror",prompt:"mirror",briefKeywords:["mirror"]}]},{key:"camera",label:"Camera",default:"iphone-front",choices:[{value:"iphone-front",label:"iPhone front camera",prompt:"iPhone front",briefKeywords:["front camera","iphone front"]},{value:"iphone-main",label:"iPhone main camera",prompt:"iPhone main",briefKeywords:["main camera","iphone main"]}]},{key:"light",label:"Light",default:"soft-daylight",choices:[{value:"soft-daylight",label:"Soft daylight",prompt:"soft daylight",briefKeywords:["soft daylight","natural daylight"]},{value:"golden-hour",label:"Golden hour",prompt:"golden hour",briefKeywords:["golden hour"]},{value:"indoor-warm",label:"Warm indoor light",prompt:"warm indoor",briefKeywords:["warm indoor","indoor warm"]},{value:"night-flash",label:"Night flash",prompt:"night flash",briefKeywords:["night out","flash"]}]}]}};function nn(e){return ug[e]}function er(e,t={}){const n=nn(e);for(const o of Object.keys(t))if(!n.options.some(i=>i.key===o))throw new Error(`Unknown ${n.label} option: ${o}`);const r={};for(const o of n.options){const i=o.key==="camera"&&r.delivery!=="selfie-to-camera"?"iphone-main":o.default,s=t[o.key]??i;if(!o.choices.some(a=>a.value===s))throw new Error(`Invalid ${n.label} ${o.label}: ${s}. Choose ${o.choices.map(a=>a.value).join(", ")}.`);r[o.key]=s}return r}function D0(e,t){const n=nn(e.id),r=er(e.id,e.options);let o=n.fragments[t];if(!o)return"";const i=n.options.map(s=>s.choices.find(a=>a.value===r[s.key]).prompt);return`${i.length?`${i.join(", ")}: `:""}${o}.`}function dg(e,t){if(e.id!==t.id)return!1;const n=er(e.id,e.options),r=er(t.id,t.options);return Object.keys(n).every(o=>n[o]===r[o])}function _t(e){return!!(e&&"version"in e&&e.version===2)}function Pe(e){return!e||!("shots"in e)?[]:e.shots}function V0(e,t){return e.title===t.title&&e.continuity===t.continuity&&e.aspectRatio===t.aspectRatio&&e.imageModel===t.imageModel&&e.imageResolution===t.imageResolution&&e.videoResolution===t.videoResolution&&e.storyboardLayout===t.storyboardLayout&&JSON.stringify(e.referenceRoles??[])===JSON.stringify(t.referenceRoles??[])&&!!e.frameContinuity==!!t.frameContinuity&&dg(e.style??{id:"cinematic",options:{}},t.style??{id:"cinematic",options:{}})&&e.frame.prompt===t.frame.prompt&&e.shots.length===t.shots.length&&e.shots.every((n,r)=>n.title===t.shots[r]?.title&&n.storyboardPrompt===t.shots[r]?.storyboardPrompt&&(n.endingPrompt??null)===(t.shots[r]?.endingPrompt??null)&&n.videoPrompt===t.shots[r]?.videoPrompt&&n.durationSeconds===t.shots[r]?.durationSeconds)}function j0(e,t,n){return e.stages[t]?.outputs.find(r=>r.index===n)?.versions??[]}function G0(e,t,n){return e.stages[t]?.outputs.find(r=>r.index===n)?.stale??null}function q0(e,t,n){const r=e.estimate[t].usd;if(r===null||t==="frame")return r;const o=Pe(e.plan),i=Math.max(1,o.length);if(t==="videos"&&o.length>0){const s=o.reduce((a,c)=>a+c.durationSeconds,0);return r*(o[n]?.durationSeconds??0)/s}return r/(i*(e.plan&&"frameContinuity"in e.plan&&e.plan.frameContinuity?2:1))}function Ns(e){return Object.values(e.stages).flatMap(t=>t.attempts??[]).find(t=>t.chainId===e.chainId&&t.feedback)}function bn(e){const t=Ns(e);if(!t)return null;if(e.planVersion===3){if(t.stage==="frame")return"scene";if(t.stage==="videos")return"video"}if(t.stage==="frame")return"frame";if(t.stage==="videos")return`video ${t.index+1}`;const n=Math.max(1,Pe(e.plan).length);return`${t.index>=n?"ending frame":"storyboard"} ${t.index%n+1}`}function U0(e){return(e.planVersion===2||e.planVersion===3)&&(e.status==="failed"||e.status==="interrupted")}function B0(e){return e.status!=="running"||!e.resumeStage?"Stop goal":Ns(e)?"Stop revision":"Stop regeneration"}function fg(e,t,n,r){if(n.phase!=="review"||!["frame","storyboards"].includes(t.phase)||!e.chainId||!r.stages[t.stage]?.previousChainIds.includes(e.chainId))return null;const o=bn(e);return`${o?`${o[0].toUpperCase()}${o.slice(1)} revision`:t.stage==="frame"?"Frame generation":"Storyboard generation"} stopped`}function Ps(e){if(!e||typeof e!="object"||!("kind"in e)||e.kind!=="video-goal")throw new Error("The server returned an invalid video goal");return e}function mg(e){if(!e||typeof e!="object"||!("goals"in e)||!Array.isArray(e.goals))throw new Error("The server returned an invalid goal list");return e.goals.map(Ps)}function pg(e){return{planned:"Planned",waiting:"Waiting",submitting:"Submitting",generating:"Generating",done:"Ready",failed:"Failed",skipped:"Not started",stopped:"Stopped"}[e]}function vt(e){const t=Math.max(0,Math.floor(e));return`${Math.floor(t/60)}:${String(t%60).padStart(2,"0")}`}function Os(e){return e&&"version"in e&&e.version===3?e.video.durationSeconds:Pe(e).reduce((t,n)=>t+n.durationSeconds,0)}function gg(e,t,n){return t?t.status==="completed"?"done":t.status==="running"?t.address?"generating":"submitting":t.status==="failed"||t.status==="interrupted"?"failed":t.status==="cancelled"||t.status==="rejected"?"stopped":t.status==="skipped"?e.status==="cancelled"?"stopped":"skipped":"waiting":n?"done":e.status==="planning"||e.status==="review"?"planned":"waiting"}function hg(e){return Pe(e).map((t,n)=>({index:n,number:String(n+1).padStart(2,"0"),title:t.title,prompt:"videoPrompt"in t?t.videoPrompt:t.prompt,seconds:t.durationSeconds,state:"planned",startedAt:null,cellId:null,address:null,artifactId:null,error:null}))}function bg(e,t){const n=e.plan,r=n&&"version"in n&&n.version===3?n:null,o=r?[{index:0,number:"01",title:t==="videos"?"Video":"Scene",prompt:t==="videos"?r.video.prompt:r.scene.prompt,seconds:t==="videos"?r.video.durationSeconds:0}]:t==="frame"&&_t(n)?[{index:0,number:"01",title:"Full frame",prompt:n.frame.prompt,seconds:0}]:Pe(n).map((c,l)=>({index:l,number:String(l+1).padStart(2,"0"),title:c.title,prompt:"videoPrompt"in c?t==="storyboards"?c.storyboardPrompt:c.videoPrompt:c.prompt,seconds:t==="videos"?c.durationSeconds:0})),i=!r&&t==="storyboards"&&_t(n)&&n.frameContinuity?[...o,...n.shots.map((c,l)=>({index:l+n.shots.length,number:`${String(l+1).padStart(2,"0")} end`,title:`${c.title} · Ending`,prompt:c.endingPrompt??c.videoPrompt,seconds:0}))]:o,s=e.stages[t],a=new Map((s?.steps??(e.planVersion===1?e.steps:[])).map(c=>[c.id,c]));return i.map(c=>{const l=r?t==="videos"?"video":"scene":t==="frame"?"frame":`${t==="storyboards"?"storyboard":"shot"}${c.index+1}`,u=a.get(l),m=s?.outputs.find(f=>f.index===c.index);return{...c,state:gg(e,u,!!m),startedAt:u?.startedAt??null,cellId:u?.cellId??m?.cellId??null,address:u?.address??m?.address??null,artifactId:u?.status==="completed"?u.artifactId:m?.artifactId??null,error:u?.error??null}})}function yg(e,t){return e.status==="cancelled"?"stopped":e.status==="completed"?"complete":e.status!=="running"?e.status:e.stage==="assembly"||e.steps.some(n=>n.id==="assemble"&&n.status==="running")?"assembling":t}function et(e){const t=e.stage==="assembly"?"videos":e.stage,n=bg(e,t),r=yg(e,t),o=n.find(i=>i.state==="failed")??n.find(i=>i.state==="submitting"||i.state==="generating")??(["frame","storyboards","videos"].includes(r)?n.find(i=>i.state!=="done")??null:null);return{phase:r,stage:t,reviewStage:r==="review"?t:null,shots:n,done:n.filter(i=>i.state==="done").length,total:n.length,active:o,failedStep:e.steps.find(i=>i.status==="failed"||i.status==="interrupted")?.id??null}}function _g(e){return{frame:"Full frame",storyboards:"Storyboards",videos:"Videos"}[e]}function rn(e,t){const n=e.estimate[t];return n.usd===null?"":` · est. $${n.usd.toFixed(2)}`}function vg(e,t){return e.failedStep===null?`Planning ${t}`:e.failedStep==="assemble"?`Assembly ${t}`:e.stage==="frame"?`Full frame ${t}`:`${e.stage==="storyboards"?"Storyboard":"Shot"} ${(e.active?.index??0)+1} ${t}`}function Le(e,t,n,r,o){return{text:e,short:t,announce:`Goal: ${e}`,action:n,tone:r,busy:o}}function kg(e,t){if(e.planVersion!==3)return null;const n=et(e),r=e.finish;if(r?.status==="running")return Le("Finishing the cold open and watermark","Finishing",null,"live",!0);if(r?.status==="failed")return Le("Finishing failed","Finishing failed","Finish","attention",!1);if(n.phase==="review"){if(r){const o=e.coldOpen?` · analysis $${e.coldOpen.analysisUsd.toFixed(2)}`:"";return Le(`Review finish${o}`,"Review","Review","review",!1)}return e.stage==="videos"?Le(`Review video${rn(e,"videos")}`,"Review","Review","review",!1):Le(`Review scene${rn(e,"frame")}`,"Review","Review","review",!1)}if(n.phase==="frame"||n.phase==="videos"){const o=n.active?.state==="generating"?`Generating${t===null?"":` ${vt(t)}`}`:"Submitting",i=bn(e),s=n.phase==="frame"?"Scene":"Video";return Le(`${i?`Revising ${i}`:s} · ${o}`,s,null,"live",!0)}if(n.phase==="failed"||n.phase==="interrupted"){const o=n.phase==="failed"?"failed":"interrupted",i=e.chainId?`${n.stage==="videos"?"Video":"Scene"} ${o}`:`Planning ${o}`;return Le(i,n.phase==="failed"?"Failed":"Interrupted","Retry","attention",!1)}return null}function kt(e,t=null){const n=kg(e,t);if(n)return n;const r=et(e),o=_t(e.plan)&&e.plan.storyboardLayout==="six-panel";let i="Stopped",s="Stopped",a=null,c="quiet",l=!1;if(r.phase==="planning")i=s="Planning",c="live",l=!0;else if(r.phase==="review")i=r.stage==="frame"?`Review ${o?"scene":"plan"}${rn(e,"frame")}`:r.stage==="storyboards"?o?"Review scene":"Review full frame":o?"Review storyboard":"Review storyboards",s=a="Review",c="review";else if(["frame","storyboards","videos"].includes(r.phase)){const u=r.active?r.active.index+1:r.done+1,m=r.active?.state==="generating"?`Generating${t===null?"":` ${vt(t)}`}`:"Submitting",f=bn(e);i=`${f?`Revising ${f}`:r.stage==="frame"?o?"Scene":"Full frame":`${r.stage==="storyboards"?"Storyboard":"Shot"} ${u} of ${r.total}`} · ${m}`,s=r.stage==="frame"?"Frame":`${r.stage==="storyboards"?"SB ":""}${u}/${r.total}`,c="live"}else r.phase==="assembling"?(i=`Assembling ${r.total} clips`,s="Combining",c="live",l=!0):r.phase==="complete"?(i=`Complete · ${vt(Os(e.plan))}`,s="Done",a="Preview",c="done"):(r.phase==="failed"||r.phase==="interrupted")&&(i=vg(r,r.phase==="failed"?"failed":"interrupted"),s=r.phase==="failed"?"Failed":"Interrupted",a=e.planVersion===1?null:"Retry",c="attention");return{text:i,short:s,announce:`Goal: ${i}`,action:a,tone:c,busy:l}}function $o(e){const t=et(e);return`${e.goalId}:${e.chainId??""}:${t.phase}:${t.stage}:${t.done}:${t.active?.index??-1}`}function wg(e,t){const n=$o(t);if(e.goalId!==t.goalId||$o(e)===n||t.status==="cancelled")return null;const r=et(e),o=et(t);let i=kt(e).text;const s=bn(t),a=fg(e,r,o,t);return o.phase==="failed"||o.phase==="interrupted"?i=kt(t).text:o.phase==="complete"?i=t.assembly?"Sequence assembled":"Clip ready":r.phase==="planning"&&o.phase==="review"?i="Plan ready":a?i=a:o.phase==="review"&&s?i=`${s[0].toUpperCase()}${s.slice(1)} revised`:o.phase==="review"&&t.planVersion===3&&t.finish?i="Video ready":o.phase==="review"&&t.planVersion===3&&o.stage==="videos"?i="Scene ready":o.phase==="review"&&o.stage==="storyboards"?i="Full frame ready":o.phase==="review"&&o.stage==="videos"?i="Storyboards ready":r.phase==="review"?i=s?`Revising ${s}`:r.stage!=="frame"&&o.stage==="frame"?"Frame regeneration started":r.stage==="videos"&&o.stage==="storyboards"?"Storyboard regeneration started":o.stage==="frame"?"Plan approved":o.stage==="storyboards"?"Frame approved":"Storyboards approved":r.phase==="failed"||r.phase==="interrupted"?i=`Retrying ${_g(o.stage).toLowerCase()}`:o.done>r.done&&(i=`${o.stage==="storyboards"?"Storyboard":"Shot"} ${o.done} ready`),{id:n,from:i,tone:o.phase==="failed"||o.phase==="interrupted"?"attention":"live"}}function H0(e){return e.find(t=>t.status!=="cancelled"&&!t.dismissedAt&&t.cellId)??null}function W0(e){const t=new Map;for(const n of e){n.combined&&t.set(n.combined.cellId,`Combined${n.address?` · ${n.address}`:""}`);const r=Pe(n.plan).length,o=n.planVersion===1?n.steps:Object.values(n.stages).flatMap(i=>i.allSteps);for(const i of o){const s=/^(frame|storyboard|shot)(\d+)?$/.exec(i.id);if(!s)continue;const a=Number(s[2]);let c=s[1]==="frame"?"Frame":s[1]==="storyboard"&&a>r?`End ${a-r}/${r}`:`${s[1]==="storyboard"?"SB ":""}${s[2]}/${r}`;const l=s[1]==="frame"?"frame":s[1]==="storyboard"?"storyboards":"videos",u=n.stages[l]?.attempts?.filter(f=>f.index===(l==="frame"?0:a-1))??[],m=u.findIndex(f=>f.chainId===i.chainId&&f.stepId===i.id);u.length>1&&m>=0&&(c=`${l==="frame"?"Frame":l==="videos"?`Video ${a}`:a>r?`End ${a-r}`:`SB ${a}`} v${m+1}`);for(const f of[i.cellId,i.outputCellId])f&&t.set(f,`${c}${n.address?` · ${n.address}`:""}`)}}return t}const No=5,Po={planning:{label:"Planning",tone:"live"},review:{label:"Review",tone:"review"},frame:{label:"Frame",tone:"live"},storyboards:{label:"Storyboards",tone:"live"},videos:{label:"Videos",tone:"live"},assembling:{label:"Combining",tone:"live"},complete:{label:"Complete",tone:"done"},failed:{label:"Failed",tone:"attention"},interrupted:{label:"Interrupted",tone:"attention"},stopped:{label:"Stopped",tone:"quiet"}};function K0(e){const t=e?.plan;if(!t||typeof t!="object")return null;const n=t;return typeof n.title=="string"&&Array.isArray(n.shots)&&n.shots.every(r=>r&&typeof r=="object"&&typeof r.title=="string"&&typeof r.durationSeconds=="number")?t:null}function Sg(e,t){return!e||!t?null:t.phase==="failed"||t.phase==="interrupted"?`${kt(e).text}${e.planVersion===1?" · start a new goal":" · open to retry"}`:t.phase==="planning"?e.brief||null:t.phase==="review"?`${kt(e).text}${t.stage==="frame"?"":rn(e,t.stage)}`:t.phase==="complete"?`${e.assembly?"Added to the timeline":"Clip ready"} · ${vt(Os(e.plan))}`:null}function Ig(e,t){if(e.status==="completed")return 100;if(e.planVersion===3){const o=(e.stages.frame?.outputs.length?1:0)+(e.stages.videos?.outputs.length?1:0);return Math.round(o/2*100)}if(e.planVersion===1)return t.total>0?Math.round(t.done/t.total*100):0;const n=1+(_t(e.plan)&&e.plan.frameContinuity?3:2)*Pe(e.plan).length,r=Object.values(e.stages).reduce((o,i)=>o+i.outputs.length,0);return Math.round(r/n*100)}function z0(e,t,n){const r=e?.plan??t,o=e?et(e):null,i=o?.phase??null,s=o&&o.shots.length>0?o.shots:hg(r),a=s.length>No?s.slice(0,No-1):s,c=Pe(r),l=r&&"version"in r&&r.version===3?r:null,u=l?l.video.durationSeconds:c[0]?.durationSeconds??null,m=l||c.length>0&&c.every(d=>d.durationSeconds===u)?u:null,f=e?[...(e.stages.frame?.outputs??[]).map(d=>({...d,label:l?"Scene":"Full frame"})),...(e.stages.storyboards?.outputs??[]).map(d=>({...d,label:d.index>=c.length?`Ending ${d.index+1-c.length}`:`Storyboard ${d.index+1}`}))]:[];return{title:r?.title??(i==="planning"?"Building your shot plan":n??"Video goal"),planning:i==="planning",rows:a.map(d=>({key:`${d.index}`,number:d.number,title:d.title,state:d.state,detail:d.state==="generating"?"":d.state==="submitting"?"Queued":d.seconds>0&&(d.state==="done"||d.state==="planned")?d.state==="done"?vt(d.seconds):`${d.seconds}s`:pg(d.state),startedAt:d.state==="generating"?d.startedAt:null})),hiddenRows:s.length-a.length,note:Sg(e,o),noteTone:i?Po[i].tone:"quiet",chip:e?.finish?.status==="running"?{label:"Finishing",tone:"live"}:i?Po[i]:{label:"Goal",tone:"quiet"},progressPercent:e&&o?Ig(e,o):0,shotsLabel:r?m===null?`${c.length} clips`:l?`1 × ${m}s`:`${c.length} × ${m}s`:null,aspectRatio:r?.aspectRatio??null,thumbnails:f,styleLabel:_t(r)?nn(r.style?.id??"cinematic").label:e?.requestedStyle?nn(e.requestedStyle.id).label:null}}function Oo(e){const t=e?.startedAt??e?.enqueuedAt;return typeof t=="number"&&Number.isFinite(t)&&t>0?new Date(t).toISOString():void 0}function xg(e,t,n,r){if(!hc(e)||!t)return r;if(t.status==="ready")return{status:"completed"};const o=n.filter(a=>a.artifactId===t.artifactId),i=o.find(a=>a.state==="queued"||a.state==="running"||a.state==="completing"),s=o.find(a=>a.state==="failed"||a.state==="aborted");return t.status==="error"||!i&&s?{status:"error",error:s?.error?.message??r.error??"Media processing failed"}:{status:t.status,startedAt:Oo(i)??Oo(o[0])??t.createdAt}}function Ag(e,t,n){const r=e.definition.source;if(!r)return null;const o=t.find(s=>s.id===r.cellId),i=n.get(r.snapshotArtifactId??"")??n.get(r.artifactId);return{address:o?ue(o.slot):null,...i?{asset:i}:{}}}function Eg(e,t){return t?e.get(t):void 0}function Cg(e,t){const n=h(e.execution),r=n&&h(n[t]),o=e.cells.find(i=>i.id===t);return r?b(r.error)?"error":b(r.status)??b(o?.inputs?.state)??"ready":b(o?.inputs?.state)??(o?.outputArtifactId?"completed":"ready")}function Mg(e,t){const n=h(e.execution),r=n&&h(n[t]);return b(r?.startedAt)??b(r?.updatedAt)??void 0}function Tg(e,t){const n=h(e.execution),r=n&&h(n[t]);return b(r?.error)??void 0}function Lo(e){const t=typeof e=="number"?e:typeof e=="string"&&e.trim()?Number(e):Number.NaN;return Number.isFinite(t)&&t>0?t:null}function Rg(e,t,n){const r=e.cells.find(f=>f.id===t),o=b(r?.inputs?.producerCellId)??e.edges.find(f=>f.target===t&&f.targetInput==="media")?.source??null,i=o?e.cells.find(f=>f.id===o):void 0,s=i?.type==="generate_video"?h(i.inputs?.generationSettings):null,a=is(i?.model??"",i?.inputs?.generationMode),c=a?"adaptive":ss(i?.model??"",i?.inputs??{})??b(r?.inputs?.aspectRatio??r?.inputs?.aspect_ratio)??b(s?.aspect_ratio),l=c&&c!=="adaptive"&&c!=="auto"?c:un(n?.width??null,n?.height??null),u=Lo(n?.duration),m=Lo(r?.inputs?.durationSeconds??r?.inputs?.duration_seconds??s?.duration??s?.duration_seconds);return{aspectRatio:l,durationSeconds:u??(a?null:m)}}function X0(e,t,n){const r=new Map(t.map(o=>[o.artifactId,o]));return tg(e).map(o=>{const i=e.posts?.find(d=>d.id===o.id),s=i?Ag(i,e.cells,r):null,a=Cc(o.data.inputs),c=Eg(r,o.data.outputArtifactId),l=o.data.kind==="video"?Rg(e,o.id,c):null,u=Mg(e,o.id),m=Tg(e,o.id),f=xg(o.data.kind,c,n,{status:Cg(e,o.id),...u?{startedAt:u}:{},...m?{error:m}:{}});return{...o,data:{...o.data,status:i?.runtime.status??f.status,...i?{post:i}:{},...s?{postSource:s}:{},...f.startedAt?{statusStartedAt:f.startedAt}:{},...f.error?{statusError:f.error}:{},asset:c,...l?.aspectRatio?{videoAspectRatio:l.aspectRatio}:{},...l?.durationSeconds?{videoDurationSeconds:l.durationSeconds}:{},...o.data.kind==="split_video"?{splitFrames:{first:{artifactId:a.first,...a.first&&r.has(a.first)?{asset:r.get(a.first)}:{}},last:{artifactId:a.last,...a.last&&r.has(a.last)?{asset:r.get(a.last)}:{}}}}:{}}}})}function $r(e,t){return Object.is(e,t)?!0:JSON.stringify(e)===JSON.stringify(t)}function Y0(e,t){const n=new Map(e.map(i=>[i.id,i])),r=t.map(i=>{const s=n.get(i.id);if(!s)return i;const a={...i,...s.selected!==void 0?{selected:s.selected}:{},...s.measured!==void 0?{measured:s.measured}:{},...s.dragging!==void 0?{dragging:s.dragging}:{},...s.dragging?{position:s.position}:{}};return $r(a,s)?s:a});return r.length===e.length&&r.every((i,s)=>i===e[s])?e:r}function J0(e,t){const n=new Map(e.map(i=>[i.id,i])),r=t.map(i=>{const s=n.get(i.id);if(!s)return i;const a={...i,...s.selected!==void 0?{selected:s.selected}:{}};return $r(a,s)?s:a});return r.length===e.length&&r.every((i,s)=>i===e[s])?e:r}const jt=[],$n=[];function Nn(e){return e?`${e.bookId}:${e.notebookId}`:""}function $g(e,t){return e.some(n=>n.goalId===t.goalId)?e.map(n=>n.goalId===t.goalId?t:n):[t,...e]}function Z0(e,t){const n=ne.c(12);let r;n[0]===Symbol.for("react.memo_cache_sentinel")?(r={key:"",goals:jt,events:$n},n[0]=r):r=n[0];const[o,i]=_.useState(r),s=_.useRef(o),a=Nn(t),c=o.key===a?o.goals:jt,l=o.key===a?o.events:$n;let u;n[1]===Symbol.for("react.memo_cache_sentinel")?(u=(w,k,I)=>{const E=I===void 0?!1:I,C=s.current,A=C.key===w?C.goals:jt,$=k.map(R=>{const D=A.find(z=>z.goalId===R.goalId);return D&&D.updatedAt>R.updatedAt?D:R});if(C.key===w&&$r(C.goals,$))return;const T=$.flatMap(R=>{const D=A.find(q=>q.goalId===R.goalId),z=D?wg(D,R):E&&R.status==="review"?{from:"Plan ready"}:null;return z?[{kind:"status",sequence:Yt(),goalId:R.goalId,text:`Goal woke up · ${z.from} · ${kt(R).text}${R.address?` · ${R.address}`:""}`}]:[]}),N=[...C.key===w?C.events:$n,...T].slice(-256),M={key:w,goals:$,events:N};s.current=M,i(M)},n[1]=u):u=n[1];const m=u;let f;n[2]===Symbol.for("react.memo_cache_sentinel")?(f=(w,k)=>{const I=mg(k),E=Nn(w);m(E,I)},n[2]=f):f=n[2];const d=f;let p;n[3]!==e?(p=async w=>{d(w,await e("video_goal",{book_id:w.bookId,notebook_id:w.notebookId,action:"list"},{background:!0}))},n[3]=e,n[4]=p):p=n[4];const g=p;let y;n[5]!==e?(y=async(w,k,I)=>{const E=Ps(await e("video_goal",{...k,book_id:w.bookId,notebook_id:w.notebookId},I?{chat:I}:{background:!0})),C=Nn(w),A=s.current;return(A.key===C||A.key==="")&&m(C,$g(A.key===C?A.goals:jt,E),k.action==="create"),E},n[5]=e,n[6]=y):y=n[6];const v=y;let S;return n[7]!==v||n[8]!==l||n[9]!==c||n[10]!==g?(S={goals:c,events:l,accept:d,refresh:g,act:v},n[7]=v,n[8]=l,n[9]=c,n[10]=g,n[11]=S):S=n[11],S}const Ng="Usage: /clip-audio @clip-id gain|mute|fade-in|fade-out <value>",Pg=["gain","mute","fade-in","fade-out"];function Og(e){const[t,n,r,o]=e,i=n?.toLowerCase();if(!t||!i||r===void 0||o!==void 0||!Dg(i))return{ok:!1,message:Ng};const s=r.trim();if(i==="gain"){const c=Number(s);return!Number.isFinite(c)||c<-96||c>24?{ok:!1,message:"Gain must be from -96 to 24 dB"}:{ok:!0,clipRef:t,edit:{field:i,gainDb:c}}}if(i==="mute"){const c=Vg(s);return c===null?{ok:!1,message:"Mute must be on or off"}:{ok:!0,clipRef:t,edit:{field:i,muted:c}}}const a=Number(s);return!Number.isSafeInteger(a)||a<0?{ok:!1,message:"Fade length must be a whole number of frames"}:{ok:!0,clipRef:t,edit:{field:i,frames:a}}}function Lg(e,t){if(!e)return{ok:!1,message:"Load the primary sequence first."};const n=ke(t),r=e.clips.filter(s=>s.clipId.toLowerCase().startsWith(n)),o=r.length===1?r[0]:void 0;return o?e.tracks.find(s=>s.trackId===o.trackId)?.kind!=="audio"?{ok:!1,message:"/clip-audio requires a clip on an audio track"}:{ok:!0,clipId:o.clipId,audio:{gainDb:o.audio?.gainDb??0,muted:o.audio?.muted??!1,fadeInFrames:o.audio?.fadeInFrames??0,fadeOutFrames:o.audio?.fadeOutFrames??0}}:{ok:!1,message:"Choose one audio clip from the current sequence"}}function Fg(e,t,n){return{kind:"volume",clip_id:e,gain_db:n.field==="gain"?n.gainDb:t.gainDb,...n.field==="mute"?{muted:n.muted}:{},...n.field==="fade-in"?{fade_in_frames:n.frames}:{},...n.field==="fade-out"?{fade_out_frames:n.frames}:{}}}function Dg(e){return Pg.includes(e)}function Vg(e){const t=e.toLowerCase();return t==="on"||t==="true"||t==="yes"?!0:t==="off"||t==="false"||t==="no"?!1:null}const jg=new Set(["/caption","/move","/split-clip","/clip-delete","/gap","/fit","/reframe","/clip-reverse","/clip-audio","/duck","/insert","/overwrite","/clip-trim","/volume"]);function Q0(e,t,n){if(e==="/delete"||e==="/trim"||e==="/reverse"){if(!he(n.sequence,t[0]))return{handled:!1}}else if(!jg.has(e))return{handled:!1};const r=s=>({handled:!0,ok:!1,message:s}),o=s=>({handled:!0,ok:!0,request:s}),i=n.sequence;if(e==="/caption"){const[s,a,c,...l]=t,u=Number(s),m=Number(a),f=c?.toLowerCase(),d=f==="clean"||f==="bold"||f==="high-contrast"?f:null,p=l.join(" ").trim();return!Number.isSafeInteger(u)||u<0||!Number.isSafeInteger(m)||m<1||!d||!p?r("Usage: /caption <start-frame> <duration-frames> clean|bold|high-contrast <text>"):o({kind:"caption",timeline_start_frame:u,duration_frames:m,text:p,style_id:d})}if(e==="/move"){const[s,a,c]=t,l=he(i,s),u=Fo(i,a),m=Number(c);return!l||!u||!Number.isSafeInteger(m)||m<0?r("Usage: /move @clip-id @track-id <start-frame>"):o({kind:"move",clip_id:l.clipId,track_id:u.trackId,timeline_start_frame:m})}if(e==="/split-clip"){const[s,a]=t,c=he(i,s),l=Number(a);return!c||!Number.isSafeInteger(l)||l<0?r("Usage: /split-clip @clip-id <sequence-frame>"):o({kind:"split",clip_id:c.clipId,split_frame:l})}if(e==="/clip-delete"||e==="/delete"){const s=he(i,t[0]),a=t.slice(1).filter(c=>c!=="--ripple");return!s||a.length>0?r("Usage: /clip-delete @clip-id [--ripple]"):o({kind:"delete",clip_id:s.clipId,ripple:t.includes("--ripple")})}if(e==="/gap"){const s=Number(t[0]),a=Number(t[1]),c=Fo(i,t[2]);return!Number.isSafeInteger(s)||s<0||!Number.isSafeInteger(a)||a<1||t[2]!==void 0&&!c?r("Usage: /gap <start-frame> <duration-frames> [@track-id]"):o({kind:"gap",timeline_start_frame:s,duration_frames:a,...c?{track_ids:[c.trackId]}:{}})}if(e==="/fit"){const s=he(i,t[0]),a=t[1]?.toLowerCase();return!s||a!=="fit"&&a!=="fill"&&a!=="crop"?r("Usage: /fit @clip-id fit|fill|crop"):Gt(i,s)?.kind!=="video"?r("/fit requires a visual clip"):o({kind:"transform",clip_id:s.clipId,fit:a})}if(e==="/reframe"){const s=he(i,t[0]);return s?Gt(i,s)?.kind!=="video"?r("Automatic reframe requires a visual clip"):o({kind:"reframe",clip_id:s.clipId}):r("Usage: /reframe @visual-clip-id")}if(e==="/clip-reverse"||e==="/reverse"){const s=he(i,t[0]);return s?s.source.kind!=="timed"||!s.speed||s.reverse===void 0||!s.audioPolicy?r("/clip-reverse requires a timed clip"):o({kind:"speed",clip_id:s.clipId,numerator:s.speed.numerator,denominator:s.speed.denominator,reverse:!s.reverse,audio_policy:s.audioPolicy}):r("Usage: /clip-reverse @timed-clip-id")}if(e==="/clip-audio"){const s=Og(t);if(!s.ok)return r(s.message);const a=Lg(i,s.clipRef);return a.ok?o(Fg(a.clipId,a.audio,s.edit)):r(a.message)}if(e==="/duck"){const s=he(i,t[0]),a=t[1]===void 0?-12:Number(t[1]);return!s||!Number.isFinite(a)||a<-36||a>-1?r("Usage: /duck @narration-clip-id [reduction-db from -36 to -1]"):Gt(i,s)?.kind!=="audio"?r("Ducking requires a narration clip on an audio track"):o({kind:"duck",narration_clip_id:s.clipId,reduction_db:a})}if(e==="/insert"||e==="/overwrite"||e==="/clip-trim"||e==="/trim"||e==="/volume"){const s=t.map(m=>m.startsWith("@")?m.slice(1):m);if(e==="/insert"||e==="/overwrite"){const[m,f,d]=s,g=n.mentionAssets.find(S=>S.cellAddress.toLowerCase()===m?.toLowerCase())??n.assets.find(S=>S.id===m||S.artifactId===m),y=Number(f),v=d===void 0?void 0:Number(d);return!g||!Number.isSafeInteger(y)||y<0||v!==void 0&&(!Number.isSafeInteger(v)||v<1)?r(`Usage: ${e} @asset <start-frame> [duration-frames]`):o({kind:"insert",mode:e==="/overwrite"?"overwrite":"insert",artifact_id:g.artifactId,timeline_start_frame:y,...v===void 0?{}:{duration_frames:v}})}if(e==="/clip-trim"||e==="/trim"){const[m,f,d]=s,p=he(i,m),g=Number(f),y=Number(d);return!p||!Number.isSafeInteger(g)||g<0||!Number.isSafeInteger(y)||y<1?r("Usage: /clip-trim @clip-id <start-frame> <duration-frames>"):o({kind:"trim",clip_id:p.clipId,timeline_start_frame:g,duration_frames:y})}const[a,c]=s,l=he(i,a),u=Number(c);return!l||!Number.isFinite(u)||u<-96||u>24?r("Usage: /volume @clip-id <gain-db from -96 to 24>"):Gt(i,l)?.kind!=="audio"?r("Volume changes require a clip on an audio track"):o({kind:"volume",clip_id:l.clipId,gain_db:u})}return{handled:!1}}function he(e,t){if(!e||!t)return;const n=ke(t),r=e.clips.filter(o=>o.clipId.toLowerCase().startsWith(n));return r.length===1?r[0]:void 0}function Fo(e,t){if(!e||!t)return;const n=ke(t),r=e.tracks.filter(o=>o.trackId.toLowerCase().startsWith(n)||o.name.toLowerCase()===n);return r.length===1?r[0]:void 0}function Gt(e,t){return e?.tracks.find(n=>n.trackId===t.trackId)}const Gg="Usage: /export-sequence --aspect 16:9|9:16|1:1 --captions burned|sidecar|omit";function eI(e,t){const n=e.findIndex(u=>u.toLowerCase()==="--aspect"),r=e.findIndex(u=>u.toLowerCase()==="--captions"),o=(n>=0?e[n+1]:"16:9")?.trim().toLowerCase(),i=(r>=0?e[r+1]:"burned")?.trim().toLowerCase(),s=o==="9:16"?"portrait":o==="1:1"?"square":o==="16:9"?"landscape":null,a=i==="burned"||i==="burn-in"?"burn-in":i==="sidecar"||i==="omit"?i:null,c=new Set;n>=0&&(c.add(n),c.add(n+1)),r>=0&&(c.add(r),c.add(r+1));const l=e.filter((u,m)=>!c.has(m));return!s||!a||l.some(u=>u!=="@sequence-main"&&u!==`@${t}`)?{ok:!1,message:Gg}:{ok:!0,orientation:s,captions:a}}const qg="Usage: /track-add video|audio|caption [name]";function tI(e){const[t,...n]=e,r=t?.toLowerCase();return r!=="video"&&r!=="audio"&&r!=="caption"?{ok:!1,message:qg}:{ok:!0,kind:r,name:n.join(" ")}}function nI(e,t){if(!t)return{ok:!1,message:"Open a project with a sequence first."};const n=Ug(t),r=e?.trim()??"";if(!r)return{ok:!0,initialFrame:n[0]?.timelineStartFrame??0};const o=Bg(r);if(o===null)return{ok:!1,message:"Usage: /play [@s01]"};const i=n[o];return i?{ok:!0,initialFrame:i.timelineStartFrame}:{ok:!1,message:"Choose an existing sequence slot."}}function Ug(e){const t=e.tracks.filter(n=>n.kind==="video").sort((n,r)=>n.ordinal-r.ordinal)[0];return t?e.clips.filter(n=>n.trackId===t.trackId).sort((n,r)=>n.timelineStartFrame-r.timelineStartFrame||n.clipId.localeCompare(r.clipId)):[]}function Bg(e){const t=/^@?(?:s)?(\d+)$/iu.exec(e.trim());if(!t)return null;const n=Number.parseInt(t[1]??"",10)-1;return n>=0?n:null}const Do="Choose a timeline audio clip or the audio asset on the timeline";function rI(e,t,n,r){if(!t)return{ok:!1,message:"Load the primary sequence first."};const o=ke(e);if(!o)return{ok:!1,message:Do};const i=new Set(t.tracks.filter(m=>m.kind==="audio").map(m=>m.trackId)),s=t.clips.filter(m=>i.has(m.trackId));if(!ei(o)){const m=s.filter(f=>f.clipId.toLowerCase().startsWith(o));if(m.length===1)return{ok:!0,clipId:m[0].clipId};if(m.length>1)return{ok:!1,message:"Choose one timeline audio clip"}}const a=r.find(m=>m.cellAddress.toLowerCase()===o),c=n.find(m=>m.id.toLowerCase()===o||m.artifactId.toLowerCase()===o),l=a?.artifactId??c?.artifactId;if(!l)return{ok:!1,message:Do};const u=s.filter(m=>m.source.artifactId===l);return u.length===1?{ok:!0,clipId:u[0].clipId}:u.length===0?{ok:!1,message:"That audio asset is not on the timeline"}:{ok:!1,message:"Choose one timeline audio clip"}}const Hg=["stack","punch","karaoke"],Wg=["pop","slam","rise"],Kg=1,Vo=j().regex(/^#[0-9a-fA-F]{6}$/),zg=te({style:Ze(Hg),motion:Ze(Wg),energySizing:Te(),snapToOnsets:Te(),avoidFaces:Te(),avoidText:Te(),textColor:Vo,hitColor:Vo}).strict(),Xg=te({kind:Ze(["face","text","graphic"]),confidence:V().min(0).max(1),x:V().min(0).max(1),y:V().min(0).max(1),width:V().positive().max(1),height:V().positive().max(1)}).strict(),Yg=te({text:j().min(1),transcriptStart:V().nonnegative(),transcriptEnd:V().nonnegative(),onsetStart:V().nonnegative(),energy:V().min(0).max(1)}).strict(),Jg=te({id:j().min(1),frameTime:V().nonnegative(),regions:ae(Xg),lines:ae(ae(Yg).min(1)).min(1)}).strict(),Zg=te({version:ii(Kg),fingerprint:j().min(1),analyzedAt:j().min(1),durationSeconds:V().nonnegative(),sourceWidth:V().positive(),sourceHeight:V().positive(),envelopeHz:V().positive(),envelope:ae(V().min(0).max(1)),onsets:ae(V().nonnegative()),regionsAnalyzed:Te(),phrases:ae(Jg)}).strict(),Qg=.8,eh=.5,on=.92,tr=.06,jo=.06,th=.5,nh=.18,rh=.05,qt=.02,oh=.3;function Nr(e,t){const n=t?e.onsetStart-e.transcriptStart:0,r=e.transcriptStart+n,o=Math.max(r+rh,e.transcriptEnd+n);return{text:e.text,start:r,end:o,energy:e.energy}}function ih(e){const{sourceWidth:t,sourceHeight:n,targetWidth:r,targetHeight:o}=e,i=Math.min(r/t,o/n),s=t*i,a=n*i;return{x:(r-s)/2,y:(o-a)/2,width:s,height:a}}function sh(e,t){const n=ih(t);return{x:(n.x+e.x*n.width)/t.targetWidth,y:(n.y+e.y*n.height)/t.targetHeight,width:e.width*n.width/t.targetWidth,height:e.height*n.height/t.targetHeight}}function ah(e){return e.targetHeight>e.targetWidth?[{side:"center",x0:.07,x1:.93}]:[{side:"left",x0:.06,x1:.47},{side:"right",x0:.53,x1:.94}]}function ch(e){return{y0:.08,y1:e.targetHeight>e.targetWidth?.86:.92}}function lh(e,t){return t.filter(n=>n.x-qt<e.x1&&n.x+n.width+qt>e.x0).map(n=>({y0:n.y-qt,y1:n.y+n.height+qt})).sort((n,r)=>n.y0-r.y0)}function uh(e,t){const n=[];let r=e.y0;for(const o of t)if(o.y0>r&&n.push({y0:r,y1:Math.min(o.y0,e.y1)}),r=Math.max(r,o.y1),r>=e.y1)break;return r<e.y1&&n.push({y0:r,y1:e.y1}),n.filter(o=>o.y1-o.y0>0)}function dh(e){return e.reduce((t,n)=>t===null||n.y1-n.y0>t.y1-t.y0?n:t,null)}function fh(e){return e.reduce((t,n)=>t+(n.y1-n.y0),0)}function mh(e,t,n){const r=lh(e,n);return{candidate:e,span:dh(uh(t,r)),blocked:fh(r)}}function Pn(e){return e.span?e.span.y1-e.span.y0:0}function Go(e,t,n){return{side:e.side,x:e.x0*n.targetWidth,y:t.y0*n.targetHeight,width:(e.x1-e.x0)*n.targetWidth,height:(t.y1-t.y0)*n.targetHeight}}function ph(e,t){const n=ch(t),r=ah(t).map(s=>mh(s,n,e)),o=r.reduce((s,a)=>Pn(a)>Pn(s)+.02?a:s);if(o.span&&Pn(o)>=oh)return Go(o.candidate,o.span,t);const i=r.reduce((s,a)=>a.blocked<s.blocked?a:s);return Go(i.candidate,n,t)}function gh(e,t){return e.filter(n=>n.kind==="face"?t.avoidFaces:t.avoidText)}function hh(e){return e.map(t=>t.text).join(" ")}function bh(e){return Math.max(...e.map(t=>t.energy))}function Ls(e,t,n){return Math.min(n,t/(Math.max(e.length,2)*eh))}function Fs(e){return e.reduce((n,r)=>n+r*(on+tr),0)-(e.length>0?e[e.length-1]*tr:0)}function yh(e){return e*tr}function _h(e,t,n){const r=t.height*.36,o=e.map(a=>Ls(hh(a),t.width,r)),i=n?o.map((a,c)=>a*(.7+.3*bh(e[c]))):o.map(()=>Math.min(...o)),s=Math.min(1,t.height/Fs(i));return e.map((a,c)=>({words:a,fontSize:Math.round(i[c]*s*10)/10}))}function vh(e,t,n){const r=n?.7+.3*e.energy:.85;return Math.min(Ls(e.text,t.width,t.height*.6),t.height*.6)*r}function kh(e,t){const n=e.flat(),r=n[0].start-jo,o=n[n.length-1].end+th,i=t===null?o:Math.min(o,t-jo);return{start:r,end:Math.max(i,r+.1)}}function wh(e,t){return Nr(e.lines[0][0],t).start}function oI(e,t,n){return e.map((r,o)=>{const i=r.lines.map(f=>f.map(d=>Nr(d,t.snapToOnsets))),s=e[o+1],a=kh(i,s?wh(s,t.snapToOnsets):null),c=gh(r.regions,t).map(f=>sh(f,n)),l=ph(c,n),u=_h(i,l,t.energySizing),m=Fs(u.map(f=>f.fontSize));return{id:r.id,start:a.start,end:a.end,column:l,lines:u,blockTop:l.y+(l.height-m)/2}})}function Sh(e,t){return e.find(n=>t>=n.start&&t<n.end)??null}function Ih(e,t){return Pr((e.end-t)/nh)}function xh(e,t){return e.lines.flatMap(n=>n.words).filter(n=>n.start<=t).pop()??null}const Ah={pop:{seconds:.14,apply:(e,t,n,r)=>({opacity:e,scale:1+(1-e)*.3*(.6+n),translateY:(1-e)*r*.12})},slam:{seconds:.09,apply:(e,t)=>({opacity:Pr(t*3),scale:1+(1-e)*.9,translateY:0})},rise:{seconds:.22,apply:(e,t,n,r)=>({opacity:e,scale:1,translateY:(1-e)*r*.35})}};function Pr(e){return e<0?0:e>1?1:e}function Eh(e,t,n){const r=t>=e.start;return r&&t<e.end||r&&e.energy>=Qg?n.hitColor:n.textColor}function Ch(e,t,n,r,o){const i=t-e.start,s=Eh(e,t,n);if(n.style==="karaoke")return{opacity:(i<0?.3:1)*o,scale:1,translateY:0,color:s};if(i<0)return{opacity:0,scale:1,translateY:0,color:s};const a=Ah[n.motion],c=Pr(i/a.seconds),l=1-Math.pow(1-c,3),u=n.energySizing?e.energy:.5,m=a.apply(l,c,u,r);return{...m,opacity:m.opacity*o,color:s}}const qo=[{id:"landscape",label:"16:9",width:1920,height:1080},{id:"portrait",label:"9:16",width:1080,height:1920},{id:"square",label:"1:1",width:1080,height:1080}],Mh=.03;function iI(e){const t=e&&typeof e=="object"?e:{};return{analysis:Zg.parse(t.analysis),settings:zg.parse(t.settings),cached:t.cached===!0}}function sI(e,t){return!e||!t?"landscape":t>e?"portrait":e===t?"square":"landscape"}function aI(e,t){const n=qo.find(r=>r.id===t)??qo[0];return{sourceWidth:e.sourceWidth,sourceHeight:e.sourceHeight,targetWidth:n.width,targetHeight:n.height}}function cI(e,t){return e.phrases.flatMap((n,r)=>n.lines.flat().map((o,i)=>{const s=Nr(o,t.snapToOnsets),a=o.transcriptStart-o.onsetStart;return{key:`${n.id}-${i}`,phraseIndex:r,text:o.text,start:s.start,end:s.end,onset:o.onsetStart,driftMs:Math.round(a*1e3),drifted:Math.abs(a)>=Mh}}))}function lI(e){const t=e.filter(n=>n.drifted).map(n=>Math.abs(n.driftMs));return{count:t.length,minMs:t.length>0?Math.min(...t):0,maxMs:t.length>0?Math.max(...t):0}}function uI(e,t){return e.findIndex(n=>t>=n.start&&t<n.end)}function dI(e){return e.column.side==="center"?"stack centered":`stack ${e.column.side}`}function fI(e){const t=Math.max(0,e),n=Math.floor(t/60),r=t-n*60,o=Math.floor(r),i=Math.floor((r-o)*100);return`${String(n).padStart(2,"0")}:${String(o).padStart(2,"0")}.${String(i).padStart(2,"0")}`}function mI(e){if(e.length===0)return"";const t=1e3/e.length;return`M0,100 L${e.map((r,o)=>`${(o*t).toFixed(1)},${(100-r*100).toFixed(1)}`).join(" L")} L1000,100 Z`}function pI(e){const t=e instanceof Error?e.message:String(e);try{const n=JSON.parse(t);return typeof n.message=="string"?n.message:t}catch{return t}}function gI(e){return{style:e.style,motion:e.motion,energy_sizing:e.energySizing,snap_to_onsets:e.snapToOnsets,avoid_faces:e.avoidFaces,avoid_text:e.avoidText,text_color:e.textColor,hit_color:e.hitColor}}function hI(e,t){const n=e?t.find(r=>r.artifactId===e||r.id===e):void 0;return!e||!n?{ok:!1,message:"Usage: /alive @video"}:n.type!=="video"?{ok:!1,message:"/alive requires a video asset"}:n.status!=="ready"||!n.mediaUrl?{ok:!1,message:"Process the video before opening alive captions"}:{ok:!0,asset:n}}const nr=["image","gen","video","audio","work"],Th={audio:"Audio",gen:"Gen",image:"Images",video:"Videos",work:"Work"},Rh=["image","gen","video"];function Ds(e){const t=fi(e);return t==="data"||t==="goal"?"work":t}function rr(e){return Th[e]}function $h(e){return e.map(rr).join(" · ")}function Nh(e,t){const n=new Set;for(const r of e)r.slot.row===t&&n.add(Ds(r.type));return nr.filter(r=>n.has(r))}function Ph(e,t,n,r){if(t.length===0){const o=r?Rh[e]:void 0;return o?{caption:rr(o),continuation:!1,families:[o],family:o,kind:"starter",row:e}:{caption:"",continuation:!1,families:[],family:null,kind:"empty",row:e}}if(t.length===1){const o=t[0],i=n.length===1&&n[0]===o;return{caption:rr(o),continuation:i,families:t,family:o,kind:"homogeneous",row:e}}return{caption:$h(t),continuation:!1,families:t,family:null,kind:"mixed",row:e}}function bI(e,t){const n=e.length===0,r=[];let o=[];for(let i=0;i<t;i+=1){const s=Nh(e,i),a=Ph(i,s,o,n);r.push(a),o=s}return r}function yI(e){const t=[];for(const n of e){if(n.kind==="empty")continue;const r=t.at(-1);if(r&&n.kind==="homogeneous"&&r.kind==="homogeneous"&&r.family===n.family&&r.startRow+r.rowCount===n.row){t[t.length-1]={...r,rowCount:r.rowCount+1};continue}t.push({caption:n.caption,families:n.families,family:n.family,kind:n.kind,rowCount:1,startRow:n.row})}return t}function On(e,t){return e.slot.row-t.slot.row||e.slot.column-t.slot.column||e.id.localeCompare(t.id)}function Oh(e,t={}){const n=e.cells.filter(g=>g.type==="goal").sort(On);if(n.length===0)return e;const r=new Set(n.flatMap(g=>Array.isArray(g.inputs?.characters)?g.inputs.characters.flatMap(y=>y&&typeof y=="object"&&"cellId"in y&&typeof y.cellId=="string"?[y.cellId]:[]):[])),o=new Set(e.edges.filter(g=>e.cells.some(y=>y.id===g.source&&y.type==="generate_image")).map(g=>g.target)),i=[...e.cells].sort((g,y)=>g.id.localeCompare(y.id)),s=e.cells.filter(g=>g.type==="image"&&(r.has(g.id)||!o.has(g.id)&&!g.inputs?.producerCellId&&!g.inputs?.mediaRole)).sort(On),a=new Set(s.map(g=>g.id)),c=i.filter(g=>g.type.startsWith("generate_")||g.type==="prompt"),l=i.filter(g=>g.type==="image"&&!a.has(g.id)),u=i.filter(g=>g.type==="video"),m=e.cells.filter(g=>g.type==="timeline").sort(On),f=new Map;let d=0;const p=(g,y=0,v=1)=>{g.forEach((S,w)=>f.set(S.id,{row:d+Math.floor(w/X),column:w%X})),d+=Math.max(v,Math.ceil((g.length+y)/X))};p(s,0,0),p([...n,...c],t.generators),p(l,t.images),p(u,t.videos);for(const g of m)f.set(g.id,{row:d,column:0}),d+=1;if(d+=t.timelines??0,p(i.filter(g=>!f.has(g.id)),0,0),d>de)throw new Error(`The goal layout needs ${d} rows, but the grid supports ${de}. Remove unused cells before continuing.`);return{...e,cells:e.cells.map(g=>({...g,slot:f.get(g.id)}))}}function Ln(e,t){return{ok:!1,code:e,message:t}}function Lh(e){return[...e].sort((t,n)=>t.slot.row-n.slot.row||t.slot.column-n.slot.column||t.id.localeCompare(n.id))}function Fh(e){return e<=0?0:Math.ceil(e/X)}function _I(e){if(new Map(e.cells.map(c=>[c.id,c])).size!==e.cells.length)return Ln("invalid-edge","Cannot auto-arrange a notebook with duplicate cell IDs.");if(e.cells.some(c=>c.type==="goal"))try{const c=Oh(e);return{ok:!0,rowCount:Math.max(...c.cells.map(l=>l.slot.row+1)),slots:c.cells.map(l=>({id:l.id,...l.slot}))}}catch(c){return Ln("capacity",c instanceof Error?c.message:String(c))}const n={audio:[],gen:[],image:[],video:[],work:[]},r=e.cells.filter(c=>c.type==="timeline"),o=new Set(r.map(c=>c.slot.row));for(const c of Lh(e.cells))c.type!=="timeline"&&n[Ds(c.type)].push(c.id);const i=nr.reduce((c,l)=>c+Fh(n[l].length),0);if(i+o.size>de)return Ln("capacity",`Cannot auto-arrange because the layout needs ${i} rows, but the grid supports ${de}.`);const s=r.map(c=>({id:c.id,...c.slot}));let a=0;for(const c of nr){const l=n[c];if(l.length!==0)for(let u=0;u<l.length;u+=X){for(;o.has(a);)a+=1;for(const[m,f]of l.slice(u,u+X).entries())s.push({id:f,row:a,column:m});a+=1}}return{ok:!0,rowCount:Math.max(a,...r.map(c=>c.slot.row+1)),slots:s}}function vI(e,t=n=>window.requestAnimationFrame(n)){t(()=>{t(()=>{e()?.scrollTo({left:0,top:0,behavior:"smooth"})})})}function Fn(e){return`${e.row}:${e.column}`}function Uo(e){return[...e].sort((t,n)=>t.slot.row-n.slot.row||t.slot.column-n.slot.column)}function Dh(e,t,n){return t==="column"?{row:(e.row+n)%de,column:e.column}:{row:e.row,column:(e.column+n)%X}}function kI(e,t,n,r){const o=Uo(e.cells.filter(g=>t.has(g.id)));if(o.length===0)return{ok:!1,code:"no-videos",message:"No video cells in this notebook to arrange."};const i=r==="column"?de:X;if(o.length>i)return{ok:!1,code:"capacity",message:`Cannot arrange ${o.length} videos in one ${r}: the grid fits ${i}.`};const s=o.map((g,y)=>Dh(n,r,y)),a=new Set(s.map(Fn));if(e.cells.some(g=>g.type==="timeline"&&Ee(g).some(y=>a.has(Fn(y)))))return{ok:!1,code:"capacity",message:"Choose an arrangement that leaves the timeline row free."};const c=Uo(e.cells.filter(g=>!t.has(g.id)&&a.has(Fn(g.slot)))),l=new Set([...o.map(g=>g.id),...c.map(g=>g.id)]),u=[...e.cells.filter(g=>!l.has(g.id)).flatMap(Ee),...s],m=oi(u,c.length),f=[...o.map((g,y)=>({id:g.id,...s[y]})),...c.map((g,y)=>({id:g.id,...m[y]}))],d=new Map(e.cells.map(g=>[g.id,g.slot])),p=f.filter(g=>{const y=d.get(g.id);return y?.row!==g.row||y?.column!==g.column}).length;return{ok:!0,slots:f,movedCount:p,displacedCount:c.length}}function Bo(e){return[...e].sort((t,n)=>t.slot.row-n.slot.row||t.slot.column-n.slot.column)}function Vh(e,t){const n=(e.row*X+e.column+t)%zt;return{row:Math.floor(n/X),column:n%X}}function jh(e){return zt-new Set(e.map(ve)).size}function wI(e,t,n){const r=Bo(e.cells.filter(d=>t.has(d.id)));if(r.length===0)return{ok:!1,code:"no-images",message:"No image cells in this notebook to group."};if(r.length>zt)return{ok:!1,code:"capacity",message:`Cannot group ${r.length} images: the grid fits ${zt}.`};const o=r.map((d,p)=>Vh(n,p)),i=new Set(o.map(ve));if(e.cells.some(d=>d.type==="timeline"&&Ee(d).some(p=>i.has(ve(p)))))return{ok:!1,code:"capacity",message:"Choose an arrangement that leaves the timeline row free."};const s=Bo(e.cells.filter(d=>!t.has(d.id)&&i.has(ve(d.slot)))),a=new Set([...r.map(d=>d.id),...s.map(d=>d.id)]),c=[...e.cells.filter(d=>!a.has(d.id)).flatMap(Ee),...o];if(s.length>jh(c))return{ok:!1,code:"grid-full",message:ra};const l=oi(c,s.length),u=[...r.map((d,p)=>({id:d.id,...o[p]})),...s.map((d,p)=>({id:d.id,...l[p]}))],m=new Map(e.cells.map(d=>[d.id,d.slot])),f=u.filter(d=>{const p=m.get(d.id);return p?.row!==d.row||p?.column!==d.column}).length;return{ok:!0,slots:u,movedCount:f,displacedCount:s.length}}function Gh(e,t){return`Generation was interrupted (${e?.trim()||`Notebook run ${t}`}). Clear the slot to reset the cell, then generate again.`}function SI(e){const t=e.jobs.filter(n=>{if(n.type!=="await_notebook_output")return!1;const r=n.payload;return r?r.cellId===e.cellId&&r.runId===e.runId:!1});return t.length>0?t.reduce((r,o)=>{const i=r.operationId??"";return(o.operationId??"")>i?o:r}):e.jobs.find(n=>n.operationId===e.jobOperationId)??null}function II(e){return e.observation.state==="error"?{kind:"failed",message:e.observation.error??`@${e.address} failed`}:e.observation.state==="completed"?{kind:"completed"}:e.observation.state==="pending"&&e.sawRun?{kind:"superseded"}:e.job?.state==="failed"||e.job?.state==="aborted"?{kind:"failed",message:Gh(e.job.errorMessage,e.job.state)}:{kind:"continue",sawRun:e.sawRun||e.observation.state==="active"}}function xI(e){return{state:e.state,errorMessage:e.error?.message??null,operationId:e.operationId,type:e.type,startedAt:e.startedAt??null,payload:e.payload??null,...typeof e.id=="number"?{id:e.id}:{}}}function AI(e,t,n){const r=h(e),o=x(r?.artifact_id);if(!o)throw new Error("The download did not return an artifact for the board");const i=x(r?.job_id);return{type:"video",slot:n,inputs:{sourceOperation:"download_video",sourceUrl:t,...i?{jobId:i}:{}},output_artifact_id:o}}const qh=new Set(["download_video","process_image","process_video","process_audio","process_upload","complete_kie_task","generate_media"]);function EI(e,t,n,r){const o=n.find(c=>c.artifactId===e&&c.type==="download_video"&&c.state==="done"),i=h(o?.result),s=i?.retyped===!0?x(i.assetId??i.artifact_id):null;if(s&&s!==e)return{kind:"redirected",artifactId:s};if(t?.status==="ready")return{kind:"completed"};const a=n.find(c=>c.artifactId===e&&(c.state==="failed"||c.state==="aborted")&&qh.has(c.type));if(t?.status==="error"||a){const c=t?.status==="error"?n.find(l=>l.artifactId===e&&l.type==="render_project"&&(l.state==="failed"||l.state==="aborted")):void 0;return{kind:"failed",message:a?.error?.message??c?.error?.message??x(r)??"Media processing failed"}}return{kind:"continue"}}function yn(e,t){return Object.fromEntries(t.flatMap(n=>e[n]===void 0?[]:[[n,e[n]]]))}function wt(e,t,n){const r=x(e[t]);if(!r)throw new Error(n);return r}function Uh(e){return{type:"video",artifactId:wt(e,"output_artifact_id","The extracted clip did not return an artifact for the notebook"),inputs:{sourceOperation:"extract_video_clip",...yn(e,["source_asset_id","start_time","end_time","duration","job_id"])}}}function Bh(e){const t=yn(e,["source_asset_id","chunk_a_end","chunk_b_start","overlap_sec","job_id"]);return[{type:"video",artifactId:wt(e,"chunk_a_artifact_id","The first split clip did not return an artifact for the notebook"),inputs:{sourceOperation:"split_video",splitOutput:"first",...t}},{type:"video",artifactId:wt(e,"chunk_b_artifact_id","The remaining split clip did not return an artifact for the notebook"),inputs:{sourceOperation:"split_video",splitOutput:"remaining",...t}}]}function Hh(e){return{type:"audio",artifactId:wt(e,"audio_asset_id","The cover song did not return an audio artifact for the notebook"),inputs:{sourceOperation:"make_cover_song",...yn(e,["source_asset_id","source_kind","duration_seconds","job_id"])}}}function Vs(e){const t=e.additional_asset_ids??e.additional;return Array.isArray(t)?t.flatMap(n=>{const r=x(n);return r?[r]:[]}):[]}function Wh(e,t){const n=x(t.first_asset_id)??x(t.first),r=x(t.second_asset_id)??x(t.second);if(!n||!r)throw new Error(`${e} did not return both source artifacts for the notebook`);const o=Vs(t);return{type:"video",artifactId:wt(t,"asset_id",`${e} did not return an artifact for the notebook`),inputs:{sourceOperation:e,first_asset_id:n,second_asset_id:r,...o.length>0?{additional_asset_ids:o}:{},...yn(t,["overlap","transition_seconds","alignment_mode","job_id"])}}}function Kh(e,t,n){const r=x(e.source_asset_id),o=r?t.find(i=>!Ge(i)&&i.outputArtifactId===r):void 0;return mn(t,o?[o.slot]:[],n)}function zh(e,t,n,r){const o=new Set([x(e.source_asset_id),x(e.first_asset_id)??x(e.first),x(e.second_asset_id)??x(e.second),...Vs(e)].filter(c=>c!==null)),i=t.filter(c=>c.outputArtifactId&&o.has(c.outputArtifactId)&&!Ge(c)).map(c=>c.slot),s=[...t],a=[];for(let c=0;c<n;c+=1){const l=hr(s,i,r);a.push(l),s.push({type:"video",slot:l})}return a}function CI(e,t,n,r=null){if(e!=="extract_video_clip"&&e!=="split_video"&&e!=="make_cover_song"&&e!=="splice_video"&&e!=="smooth_scene_concat")return[];const o=h(t);if(!o)throw new Error(`${e} returned an invalid result`);const s=(e==="extract_video_clip"?[Uh(o)]:e==="split_video"?Bh(o):e==="make_cover_song"?[Hh(o)]:[Wh(e,o)]).filter(c=>!n.some(l=>!Ge(l)&&l.outputArtifactId===c.artifactId));if(s.length===0)return[];const a=e==="make_cover_song"?[Kh(o,n,r)]:zh(o,n,s.length,r);return s.map((c,l)=>({type:c.type,slot:a[l],inputs:c.inputs,output_artifact_id:c.artifactId}))}function Xh(e,t){const n=new Set(e.edges.filter(r=>r.source===t&&(r.targetInput==="video"||r.targetInput==="segment")).map(r=>r.target));return e.cells.find(r=>n.has(r.id)&&(r.type==="extract_audio"||r.inputs?.mediaRole==="extract-audio-output"))??null}function Yh(e,t){const n=h(e.execution),r=n?h(n[t]):null,o=x(r?.status),i=x(r?.runId);return o&&i&&ln(o)?i:null}function Ho(e){const t=h(e),n=x(t?.job_id),r=x(t?.run_id);if(!n||!r)throw new Error("The server did not return an Extract Audio run");return{jobId:n,runId:r}}async function MI(e){const t=Er(e.document,e.command.sourceReference),n=t.id,r=Z(t),o=e.expectedRevision?{expected_revision:e.expectedRevision}:{},i=Xh(e.document,t.id);if(i){const l={actionCellId:i.id,actionAddress:Z(i),outputCellId:i.id,reusedAction:!0,sourceCellId:n,sourceAddress:r},u=Yh(e.document,i.id);if(u)return{...l,jobId:"",runId:u};const m=Ho(await e.callTool("run_notebook_cell",{book_id:e.bookId,notebook_id:e.document.id,cell_id:i.id,actor:e.actor,...o}));return{...l,...m}}const s=h(await e.callTool("extract_notebook_audio",{book_id:e.bookId,notebook_id:e.document.id,source_cell_id:t.id,label:"Extract audio",...o})),a=x(s?.cell_id),c=x(s?.address);if(!a||!c)throw new Error("The server did not return an Extract Audio run");return{actionCellId:a,actionAddress:c,outputCellId:a,...Ho(s),reusedAction:!1,sourceCellId:n,sourceAddress:r}}function Jh(e){const t=Number(e);return Number.isFinite(t)&&t>=0?Math.round(t*1e3)/1e3:null}async function TI(e){const t=e.command.frameMode==="time"?Jh(e.command.timestampSeconds):null;if(e.command.frameMode==="time"&&t===null)throw new Error("A valid timestamp is required for time-mode frame extraction");const n=Er(e.document,e.command.sourceReference),r=h(await e.callTool("extract_notebook_frame",{book_id:e.bookId,notebook_id:e.document.id,source_cell_id:n.id,frame_mode:e.command.frameMode,...t===null?{}:{timestamp_seconds:t},...e.expectedRevision?{expected_revision:e.expectedRevision}:{}})),o=x(r?.cell_id),i=x(r?.address),s=x(r?.job_id),a=x(r?.run_id);if(!o||!i||!s||!a)throw new Error("The server did not return the frame extraction cell");return{actionCellId:o,actionAddress:i,outputCellId:o,jobId:s,runId:a,reusedAction:!1,sourceCellId:n.id,sourceAddress:Z(n)}}const Wo="2026-07-28",Zh=21*6e4;function Qh(e){return e==="apply_watermark"?Zh:void 0}async function js(e,t){const n=new oa({name:t,version:"0.1.0"},{capabilities:{},supportedProtocolVersions:[Wo],versionNegotiation:{mode:{pin:Wo}}});try{return await n.connect(new ia(new URL(e))),n}catch(r){throw await n.close(),r}}function eb(e,t,n){const r=Qh(t);return e.callTool({name:t,arguments:n},r===void 0?void 0:{timeout:r})}function tb(e,t){if(t){const n=e.find(r=>r.bookId===t);if(n)return n}return e.find(n=>typeof n.bookId=="string"&&n.bookId.length>0)??null}function nb(e){const t=h(e);if(!t||t.isError)throw new Error("Bootstrap tool failed");const n=t.content?.find(r=>r.type==="text")?.text;if(!n)return null;try{return JSON.parse(n)}catch{return n}}async function Ie(e,t,n){return nb(await e.callTool({name:t,arguments:n}))}function Ko(e){try{return window.localStorage.getItem(e)??""}catch{return""}}async function rb(e){const[t,n,r]=await Promise.all([Ie(e,"list_books",{sort:"newest"}),Ie(e,"slash_commands",{detail:"full"}),Ie(e,"list_chat_models",{})]),o=Array.isArray(t)?t:[],i=tb(o.map(h).filter(v=>v!==null),Ko("videobook.active-book")),s=typeof i?.bookId=="string"?i.bookId:"";if(!s)return{bookValue:t,commandValue:n,chatModelValue:r,bookId:"",notebookId:"",notebookValue:[],assetValue:[],sequenceValue:null,jobValue:[],ingestStatusValue:[],actionValue:[]};const[a,c,l,u,m,f]=await Promise.all([Ie(e,"list_notebooks",{book_id:s}),Ie(e,"list_assets",{book_id:s,sort:"newest",limit:200,include_referenced:!0}),Ie(e,"get_primary_sequence",{book_id:s}),Ie(e,"list_jobs",{book_id:s,limit:200}),Ie(e,"list_ingest_status",{book_id:s,limit:200}),Ie(e,"list_notebook_actions",{book_id:s})]),d=Array.isArray(a)?a.map(h).filter(v=>v!==null):[],p=Ko(`videobook.active-notebook:${s}`),g=d.find(v=>v.id===p)??d[0],y=typeof g?.id=="string"?g.id:"";return{bookValue:t,commandValue:n,chatModelValue:r,bookId:s,notebookValue:a,notebookId:y,assetValue:c,sequenceValue:l,jobValue:u,ingestStatusValue:m,actionValue:f}}async function RI(){const e=new URL("/mcp",window.location.origin).toString(),t=await js(e,"videobook-bootstrap");try{return await rb(t)}finally{await t.close()}}const or="gpt-6-astra",ob={defaultModel:"gpt-6-astra",models:[{id:or,label:"Astra",description:"Routes every composer request and configures its tools"}]};function ib(e){const t=h(e),n=Array.isArray(t?.models)?t.models.flatMap(i=>{const s=h(i);return typeof s?.id=="string"&&typeof s.label=="string"&&typeof s.description=="string"&&s.id===or?[{id:s.id,label:s.label,description:s.description}]:[]}):[],r=or,o=n.some(i=>i.id===r)?r:n[0]?.id;return o?{defaultModel:o,models:n}:ob}function $I(e,t){return e.models.some(n=>n.id===t)?t:e.defaultModel}function zo(e){return e instanceof Error?e:new Error(String(e))}function sb({callTool:e,cancelTimer:t,connect:n,onStateChange:r,reconnectDelayMs:o,scheduleTimer:i}){let s=!1,a=null,c=0,l=null;const u=v=>{v.onclose=void 0,v.close().catch(()=>{})},m=()=>{l!==null&&(t(l),l=null)},f=async()=>{if(!s)return;const v=++c;r({state:"connecting",error:null});try{const S=await n();if(!s||v!==c){S!==a&&u(S);return}a=S,S.onclose=()=>{!s||a!==S||(S.onclose=void 0,a=null,r({state:"failed",error:new Error("MCP connection closed")}),d())},r({state:"ready",error:null})}catch(S){if(!s||v!==c)return;r({state:"failed",error:zo(S)}),d()}},d=()=>{!s||l!==null||(l=i(()=>{l=null,f()},o))};return{callTool:async(v,S)=>{const w=a;if(!s||!w)throw new Error("MCP server is not ready");try{return await e(w,v,S)}catch(k){const I=zo(k);throw s&&a===w&&(a=null,u(w),r({state:"failed",error:I}),d()),I}},start:()=>{s||(s=!0,f())},stop:()=>{if(!s)return;s=!1,c+=1,m();const v=a;a=null,v&&u(v)}}}function NI(e){const t=ne.c(9),{url:n,clientName:r,reconnectDelayMs:o}=e,i=_.useRef(null),[s,a]=_.useState("connecting"),[c,l]=_.useState(null);let u,m;t[0]!==r||t[1]!==o||t[2]!==n?(u=()=>{const g=sb({connect:()=>js(n,r),callTool:eb,reconnectDelayMs:o,scheduleTimer:cb,cancelTimer:ab,onStateChange:y=>{a(y.state),l(y.error)}});return i.current=g,g.start(),()=>{i.current===g&&(i.current=null),g.stop()}},m=[r,o,n],t[0]=r,t[1]=o,t[2]=n,t[3]=u,t[4]=m):(u=t[3],m=t[4]),_.useEffect(u,m);let f;t[5]===Symbol.for("react.memo_cache_sentinel")?(f=async(g,y)=>{const v=i.current;if(!v)throw new Error("MCP server is not ready");return v.callTool(g,y)},t[5]=f):f=t[5];const d=f;let p;return t[6]!==c||t[7]!==s?(p={state:s,error:c,callTool:d},t[6]=c,t[7]=s,t[8]=p):p=t[8],p}function ab(e){return window.clearTimeout(e)}function cb(e,t){return window.setTimeout(e,t)}function PI({bookId:e,notebookId:t,enabled:n,refresh:r}){const o=_.useEffectEvent(r);_.useEffect(()=>{if(!n||!e||!t)return;let i=!0,s=!1,a=!1,c=0;const l=async()=>{if(window.clearTimeout(c),!(!i||document.visibilityState==="hidden")){if(s){a=!0;return}s=!0;try{await o(()=>i)}catch{a=!1}finally{s=!1,i&&(c=window.setTimeout(l,a?0:2e3)),a=!1}}},u=()=>{l()};return c=window.setTimeout(l,0),window.addEventListener("focus",u),document.addEventListener("visibilitychange",u),()=>{i=!1,window.clearTimeout(c),window.removeEventListener("focus",u),document.removeEventListener("visibilitychange",u)}},[e,n,t])}const lb=/^[a-z]{2,3}(?:-[a-z0-9]{2,8})*$/iu;function Or(e){return lb.test(e.trim())}function OI(e){const t=e.trim();return Or(t)?{ok:!0,languageCode:t}:{ok:!1,message:"A quick prompt can only set a language code on a pending transcription, for example /apply en."}}function LI(e){return e.assetId?e.languageCode.trim()&&!Or(e.languageCode)?{blocking:"Language must be a code such as en or pt-br, or left blank to auto-detect.",notice:null}:{blocking:null,notice:null}:{blocking:"Choose a video or audio clip.",notice:null}}function FI(e){const t=e.languageCode.trim();return{book_id:e.bookId,asset_id:e.assetId,diarize:e.diarize,tag_audio_events:e.tagAudioEvents,wait:!1,...t?{language_code:t}:{}}}function DI(e){const t=Array.isArray(e?.warnings)?e.warnings.filter(i=>typeof i=="string"):[],n=typeof e?.usd=="number"?e.usd:null,r=t.length>0&&t.every(i=>i.includes("historical average per call")),o=n===null||t.length>0&&!r;return{usd:o?null:n,unavailable:o}}function Gs(e,t){const n=t.get(e.artifactId);return n?`@${n}`:e.label||e.artifactId}function ub(e,t,n){const r=t.find(i=>i.artifactId===e);if(r)return r;const o=e.toLowerCase();for(const[i,s]of n)if(s.toLowerCase()===o)return t.find(a=>a.artifactId===i);return t.find(i=>i.label.toLowerCase()===o)}function VI(e){const t=e.assetRef?.trim()??"",n=t.replace(/^@/,"");if(n){const o=ub(n,e.assets,e.addressByArtifactId);return o?We(o.type)?{ok:!0,assetId:o.artifactId}:{ok:!1,message:`Transcribe applies to video or audio; ${Gs(o,e.addressByArtifactId)} is ${o.type}`}:{ok:!1,message:`No asset found for ${t}`}}const r=e.selectedCell?.outputArtifactId??null;if(r&&We(e.selectedCell?.type??"")){const o=e.assets.find(i=>i.artifactId===r);if(o&&We(o.type))return{ok:!0,assetId:o.artifactId}}if(e.preview&&We(e.preview.type)){const o=e.assets.find(i=>i.artifactId===e.preview?.assetId);if(o&&We(o.type))return{ok:!0,assetId:o.artifactId}}return{ok:!0,assetId:null}}function jI(e,t){return e.filter(n=>We(n.type)).map(n=>({artifactId:n.artifactId,label:Gs(n,t),type:n.type,mediaUrl:n.mediaUrl,thumbnailUrl:n.thumbnailUrl,duration:n.duration})).sort((n,r)=>n.label.localeCompare(r.label))}function be(e,t){return{kind:"refused",outcome:{status:e,message:t}}}function se(e){return e.toLowerCase().replace(/[^a-z0-9]+/gu," ").trim()}function db(e){return e.map(t=>t.title).join(", ")}function qs(e){return e.length>0?e.map(t=>t.label).join(", "):"no settings"}function ir(e){return e.options.map(String).join(", ")}function fb(e,t){const n=se(e);if(!n)return null;const r=t.find(i=>se(i.name)===n||se(i.label)===n);if(r)return r;const o=t.filter(i=>se(i.label).includes(n)||se(i.name).includes(n));return o.length===1?o[0]:null}function mb(e){if(typeof e=="boolean")return e;const t=se(String(e));return["true","on","yes","enable","enabled"].includes(t)?!0:["false","off","no","disable","disabled"].includes(t)?!1:null}function pb(e){return typeof e=="string"&&["default","auto","automatic"].includes(se(e))}function gb(e,t){const n=typeof t=="number"?t:Number(String(t).trim());return typeof t=="boolean"||!Number.isFinite(n)?{error:`${e.label} takes a number, not "${String(t)}".`}:e.minimum!==void 0&&(e.exclusiveMinimum?n<=e.minimum:n<e.minimum)?{error:e.exclusiveMinimum?`${e.label} must be greater than ${e.minimum}.`:`${e.label} does not go below ${e.minimum}.`}:e.maximum!==void 0&&(e.exclusiveMaximum?n>=e.maximum:n>e.maximum)?{error:e.exclusiveMaximum?`${e.label} must be less than ${e.maximum}.`:`${e.label} does not go above ${e.maximum}.`}:e.options.length>0&&!e.options.includes(n)?{error:`${e.label} does not take ${n}. It takes ${ir(e)}.`}:{kind:"setting",name:e.name,value:n}}function hb(e,t,n){const r=fb(e,n);if(!r)return{error:`This review has no "${e}" setting. It has ${qs(n)}.`};if(pb(t))return r.required?{error:`${r.label} has no default. It takes ${ir(r)}.`}:{kind:"setting",name:r.name,value:void 0};if(r.valueType==="boolean"){const s=mb(t);return s===null?{error:`${r.label} is on or off, not "${String(t)}".`}:{kind:"setting",name:r.name,value:s}}if(r.valueType==="number")return gb(r,t);const o=String(t).trim(),i=r.options.find(s=>se(String(s))===se(o));return r.options.length>0&&i===void 0?{error:`${r.label} does not take "${o}". It takes ${ir(r)}.`}:{kind:"setting",name:r.name,value:i??o}}function bb(e,t){const n=se(e),r=t.find(o=>se(o.id)===n)??t.find(o=>se(o.title)===n)??t.find(o=>se(o.title).includes(n));return r?{kind:"model",actionId:r.id}:{error:`This review has no "${e}" model. It offers ${db(t)}.`}}function GI(e,t){if(t.kind==="none")return be("failed","There is no review on screen to act on.");if(e.decision==="cancel")return{kind:"command",input:"/cancel"};const n=e.prompt?.trim(),r=Object.entries(e.settings??{}),o=e.model?.trim();if(e.decision==="apply")return o||r.length>0?be("review","Revise the model and settings first, then apply. Apply only takes a new prompt."):n&&t.kind==="chain-step"?be("review","A chain step can't be rewritten. Apply it as it stands, or cancel the chain."):n&&t.kind==="transcribe"?Or(n)?{kind:"command",input:`/apply ${n.trim()}`}:be("review","A transcription review only takes a language code, for example en. Apply it as it stands, or cancel it."):n&&t.kind!=="generation"?be("review","Only a generation review takes a new prompt. Apply this one as it stands, or cancel it."):{kind:"command",input:n?`/apply ${n}`:"/apply"};if(t.kind==="chain-step")return be("review","A chain step can't be revised. Apply it, or cancel to stop the whole chain.");if(t.kind!=="generation")return be("review","Only a generation review has a prompt, a model and settings to revise.");if(!n&&!o&&r.length===0)return be("review",`Say what to change: the prompt, the model, or one of ${qs(t.action.controls)}.`);const i=[];if(o){const c=bb(o,t.models);if("error"in c)return be("review",c.error);i.push(c)}n&&i.push({kind:"prompt",prompt:n});const s=i.find(c=>c.kind==="model"),a=s?t.models.find(c=>c.id===s.actionId)?.controls??[]:t.action.controls;for(const[c,l]of r){const u=hb(c,l,a);if("error"in u)return be("review",u.error);i.push(u)}return{kind:"revise",edits:i}}const qI={target:null,sources:[]};function UI(e){const t=new Map;for(const n of e.sources)n&&t.set(n,"source");return e.target&&t.set(e.target,"target"),t}function yb(e){if(!Number.isFinite(e.row)||e.row<0)return 0;const t=Number.isFinite(e.zoom)&&e.zoom>0?e.zoom:1,n=O.originY+e.row*O.rowPitch+O.squareSize/2,r=Math.max(0,e.scrollHeight-e.clientHeight),o=n*t-e.clientHeight/2;return Math.min(r,Math.max(0,Math.round(o)))}const _b=2;function BI(e,t,n={}){(n.scheduleFrame??(o=>window.requestAnimationFrame(o)))(()=>{const o=e();if(!o)return;const i=yb({...t,clientHeight:o.clientHeight,scrollHeight:o.scrollHeight});Math.abs(i-o.scrollTop)<=_b||o.scrollTo({top:i,behavior:n.reducedMotion?"auto":"smooth"})})}function HI(e,t){return t.some(n=>{const r=ni(n.address);return r?(as(e,r)?.id??null)!==n.cellId:!0})}const Xo=["#65e6a5","#ffbd5c","#69b7ff","#ff7f9c","#c58cff","#50d7dc","#f38d58","#d2e466"];function ce(e){return typeof e=="string"&&e.length>0?e:null}function oe(e){return typeof e=="number"&&Number.isFinite(e)?e:null}function Yo(e,t){return typeof e=="boolean"?e:t}function ye(e){const t=e>1?e/1e3:e;return Math.min(1,Math.max(0,t))}function vb(e){if(Array.isArray(e)&&e.length>=4){const f=oe(e[0]),d=oe(e[1]),p=oe(e[2]),g=oe(e[3]);if(f===null||d===null||p===null||g===null)return null;const y=ye(f),v=ye(d);return{x:y,y:v,width:Math.max(0,ye(p)-y),height:Math.max(0,ye(g)-v)}}const t=h(e);if(!t)return null;const n=oe(t.x??t.left??t.x1),r=oe(t.y??t.top??t.y1),o=oe(t.width),i=oe(t.height),s=oe(t.right??t.x2),a=oe(t.bottom??t.y2);if(n===null||r===null)return null;const c=ye(n),l=ye(r),u=o===null?s===null?null:ye(s)-c:ye(o),m=i===null?a===null?null:ye(a)-l:ye(i);return u===null||m===null?null:{x:c,y:l,width:Math.max(0,Math.min(1-c,u)),height:Math.max(0,Math.min(1-l,m))}}function kb(e,t){let n=t;for(const r of e)n=(n<<5)-n+r.charCodeAt(0)|0;return Xo[Math.abs(n)%Xo.length]}function wb(e,t){const n=h(e);if(!n)return null;const r=ce(n.id??n.subject_id??n.region_id)??(oe(n.index)===null?null:`subject-${oe(n.index)}`);if(!r)return null;const o=h(n.capabilities),i=h(n.bounding_box??n.boundingBox);return{id:r,label:ce(n.label??n.name)??`Subject ${t+1}`,description:ce(n.description),color:ce(n.color)??kb(r,t),box:vb(n.normalized_box??n.normalizedBox??i?.normalized??n.box),layerUrl:ce(n.layer_url??n.layerUrl??n.mask_url??n.maskUrl??n.url),thumbnailUrl:ce(n.thumbnail_url??n.thumbnailUrl),zIndex:oe(n.z_index??n.zIndex)??t+1,removable:Yo(o?.remove??n.removable,!0),exactEdit:Yo(o?.exact_edit??o?.exactEdit??n.exact_edit,!1)}}function Sb(e,t){return e==="idle"||e==="analyzing"||e==="ready"||e==="failed"?e:t}function WI(e){const t=h(e),r=h(t?.subject_map??t?.subjectMap??t?.map)??t,i=(Array.isArray(r?.subjects)?r.subjects:Array.isArray(r?.regions)?r.regions:Array.isArray(r?.layers)?r.layers:[]).flatMap((c,l)=>{const u=wb(c,l);return u?[u]:[]}).sort((c,l)=>c.zIndex-l.zIndex),s=ce(r?.error??t?.error),a=s?"failed":i.length>0?"ready":"idle";return{status:Sb(r?.status??t?.status,a),artifactId:ce(r?.artifact_id??r?.artifactId??t?.artifact_id??t?.artifactId),objectHash:ce(r?.object_hash??r?.objectHash??t?.object_hash??t?.objectHash),width:oe(r?.width??t?.width),height:oe(r?.height??t?.height),baseUrl:ce(r?.base_url??r?.baseUrl??t?.base_url??t?.baseUrl),jobId:ce(r?.job_id??r?.jobId??t?.job_id??t?.jobId),startedAt:ce(r?.started_at??r?.startedAt??t?.started_at??t?.startedAt),error:s,subjects:i}}async function Ib(e,t){if(!t())return{kind:"stale"};try{const n=await e();return t()?{kind:"current",value:n}:{kind:"stale"}}catch(n){return t()?{kind:"error",error:n}:{kind:"stale"}}}const xb=3e3,Ab=27*6e4;function Eb(e){return new Promise(t=>window.setTimeout(t,e))}function Cb(e,t){if(!e)return t;const n=Date.parse(e);return Number.isFinite(n)?n:t}async function KI({initialMap:e,read:t,publish:n,isCurrent:r,now:o=Date.now,wait:i=Eb,intervalMs:s=xb,timeoutMs:a=Ab}){if(!r())return{kind:"stale"};if(e.status!=="analyzing")return{kind:"terminal",map:e};let c=e;const l=Cb(e.startedAt,o())+a;for(;r();){const u=l-o();if(u<=0)return{kind:"timeout",map:c};if(await i(Math.min(s,u)),!r())return{kind:"stale"};if(o()>=l)return{kind:"timeout",map:c};const m=await Ib(t,r);if(m.kind==="stale")return m;if(m.kind==="error")return{kind:"error",map:c,error:m.error};if(c=m.value,n(c),c.status!=="analyzing")return{kind:"terminal",map:c}}return{kind:"stale"}}const Mb={transcript:["transcribe","transcribe_video_audio"],analysis:["analyze_video"]};function Tb(e){return e==="transcript"?"Transcription failed":"Video analysis failed"}function zI(e){const t=e.jobs.filter(r=>r.artifactId===e.artifactId&&Mb[e.insight].includes(r.type)&&r.enqueuedAt>=e.since),n=t.find(r=>r.state==="failed"||r.state==="aborted");return n?{kind:"failed",message:n.error?.message??Tb(e.insight)}:t.some(r=>r.state==="done")?{kind:"ready"}:e.hasInsight&&!e.hadInsight?{kind:"ready"}:{kind:"continue"}}const Rb=new Set(["audio","image","video","extract_audio","split_video","prompt","character","analyze","analysis","generate_video","generate_image","generate_audio","concat","splice","timeline","goal","post"]);function XI(e){if(!Array.isArray(e))throw new Error("The server returned invalid asset history");return e.map(t=>{const n=h(t),r=n&&b(n.hash),o=n&&b(n.message),i=n&&b(n.date);if(!n||!r||o===null||!i)throw new Error("The server returned an invalid asset revision");return{hash:r,message:o,date:i,...b(n.author)?{author:b(n.author)}:{},...b(n.operation)?{operation:b(n.operation)}:{}}})}function $b(e){return e.content?.find(n=>n.type==="text")?.text??null}function YI(e){const t=e,n=$b(e);if(t.isError)throw new Error(n??"MCP tool failed");if(!n)return null;try{return JSON.parse(n)}catch{return n}}function JI(e,t){if(typeof e=="string")return e;const n=h(e);if(!n)return t;for(const r of["message","job_id","notebook_id","address","bookId"]){const o=b(n[r]);if(o)return`${t}: ${o}`}return t}function Nb(e){const t=h(e),n=b(t?.stepId),r=b(t?.tool),o=b(t?.title),i=b(t?.reason);return!n||!r||!o||!i?null:{stepId:n,index:typeof t?.index=="number"?t.index:0,total:typeof t?.total=="number"?t.total:1,tool:r,title:o,address:b(t?.address),params:h(t?.params)??{},estimateUsd:typeof t?.estimateUsd=="number"?t.estimateUsd:null,estimateUnavailable:t?.estimateUnavailable!==!1,reason:i}}function ZI(e){const t=h(e),n=b(t?.chain_id),r=b(t?.status);if(b(t?.kind)!=="chain-run"||!n||!r)return null;const o=Array.isArray(t?.steps)?t.steps.flatMap(i=>{const s=h(i),a=b(s?.id),c=b(s?.tool),l=b(s?.status);return!a||!c||!l?[]:[{id:a,tool:c,status:l,error:b(s?.error),requiresApproval:s?.requires_approval===!0,review:Nb(s?.review)}]}):[];return{chainId:n,status:r,error:b(t?.error),awaitingStepId:b(t?.awaiting_step_id),steps:o}}function QI(e){const t=h(e);return b(t?.artifact_id)!==null&&b(t?.assetId)!==null&&b(t?.job_id)?.startsWith("download-")===!0}function ex(e){const t=h(e),n=h(t?.params),r=h(t?.confirmation),o=b(t?.kind),i=b(t?.planId),s=b(t?.bookId),a=b(t?.prompt),c=b(t?.routedTool),l=b(t?.tool),u=b(t?.message)??"",m=b(t?.summary),f=b(t?.effect),d=b(r?.reason),p=r?.required;if(o!=="chat-action-plan"||!i||!s||!a||!c||!l||!n||!m||f!=="mutation"&&f!=="generation"&&f!=="view"||typeof p!="boolean"||!d)throw new Error("The server returned an invalid chat action plan");return{kind:o,planId:i,bookId:s,prompt:a,routedTool:c,tool:l,params:n,message:u,summary:m,effect:f,confirmation:{required:p,reason:d}}}function Us(e){return Array.isArray(e)?e.flatMap(t=>{const n=h(t),r=n&&b(n.bookId),o=n&&b(n.name),i=n&&F(n.createdAt);return!n||!r||!o||i===null?[]:[{bookId:r,name:o,createdAt:i,artifactCount:F(n.artifactCount)??0,notebookCount:F(n.notebookCount)??0}]}):[]}function tx(e){return Us([e])[0]??null}function Pb(e){const t=h(e),n=t&&b(t.id),r=t&&b(t.type),o=t&&b(t.label),i=t&&h(t.slot),s=i&&F(i.row),a=i&&F(i.column);if(!t||!n||s===null||a===null||!Number.isInteger(s)||!Number.isInteger(a)||s<0||s>=de||a<0||a>=X||!Rb.has(r??""))return null;const c=h(t.inputs),l=Array.isArray(t.references)?t.references:void 0,u=Array.isArray(t.pinned_results??t.pinnedResults)?t.pinned_results??t.pinnedResults:void 0;return{id:n,type:r,...o?{label:o}:{},slot:{row:s,column:a},...b(t.output_entity_id)?{outputEntityId:b(t.output_entity_id)}:{},...b(t.prompt)!==null?{prompt:b(t.prompt)}:{},...b(t.provider)!==null?{provider:b(t.provider)}:{},...b(t.model)!==null?{model:b(t.model)}:{},...b(t.operation)!==null?{operation:b(t.operation)}:{},...b(t.tool)!==null?{tool:b(t.tool)}:{},...c?{inputs:c}:{},...l?{references:l}:{},...u?{pinnedResults:u}:{},...b(t.output_artifact_id??t.outputArtifactId)?{outputArtifactId:b(t.output_artifact_id??t.outputArtifactId)}:{}}}function Ob(e){const t=h(e),n=t&&b(t.id),r=t&&b(t.name),o=t&&b(t.created_at??t.createdAt);if(!t||!n||!r||!o)return null;const i=Array.isArray(t.cells)?t.cells.flatMap(a=>{const c=Pb(a);return c?[c]:[]}):[],s=Array.isArray(t.edges)?t.edges.flatMap(a=>{const c=h(a),l=c&&b(c.id),u=c&&b(c.source),m=c&&b(c.target),f=c&&b(c.targetInput??c.target_input);return l&&u&&m&&f?[{id:l,source:u,target:m,targetInput:f}]:[]}):[];return{id:n,name:r,createdAt:o,...b(t.revision)?{revision:b(t.revision)}:{},...b(t.description)?{description:b(t.description)}:{},...b(t.lifecycleState??t.lifecycle_state)?{lifecycleState:b(t.lifecycleState??t.lifecycle_state)}:{},...F(t.workflowVersion??t.workflow_version)!==null?{workflowVersion:F(t.workflowVersion??t.workflow_version)}:{},...b(t.analysisRevision??t.analysis_revision)?{analysisRevision:b(t.analysisRevision??t.analysis_revision)}:{},...h(t.fixture)?{fixture:h(t.fixture)}:{},...h(t.execution)?{execution:h(t.execution)}:{},...Array.isArray(t.generationPlans??t.generation_plans)?{generationPlans:t.generationPlans??t.generation_plans}:{},...Array.isArray(t.notebookRunPlans??t.notebook_run_plans)?{notebookRunPlans:t.notebookRunPlans??t.notebook_run_plans}:{},...Array.isArray(t.posts)?{posts:t.posts}:{},cells:i,edges:s}}function Lb(e){return Array.isArray(e)?e.flatMap(t=>{const n=Ob(t);return n?[n]:[]}):[]}function Bs(e){const t=h(e),n=t&&b(t.id),r=t&&b(t.artifact_id??t.artifactId),o=t&&b(t.type);if(!t||!n||!r||!o)return null;const i=h(t.audio_info),s=i&&b(i.codec),a=i&&F(i.sample_rate_hz),c=i&&F(i.channels),l=i&&b(i.channel_layout),u=i&&F(i.duration_seconds),m=s&&a!==null&&c!==null&&l&&u!==null?{codec:s,sampleRateHz:a,channels:c,channelLayout:l,durationSeconds:u}:null,f=h(t.analysis_info??t.analysisInfo),d=f&&F(f.source_duration_seconds??f.sourceDurationSeconds),p=Array.isArray(f?.shots)?f.shots.flatMap(w=>{const k=h(w),I=k&&F(k.ordinal),E=k&&b(k.label),C=k&&F(k.start_seconds??k.startSeconds),A=k&&F(k.end_seconds??k.endSeconds),$=k&&F(k.duration_seconds??k.durationSeconds);return I!==null&&E!==null&&C!==null&&A!==null&&$!==null?[{ordinal:I,label:E,startSeconds:C,endSeconds:A,durationSeconds:$}]:[]}):[],g=f?.llm_exchanges??f?.llmExchanges,y=Array.isArray(g)?g.flatMap(w=>{const k=h(w),I=k&&b(k.provider),E=k&&b(k.model),C=k&&b(k.stage),A=k&&h(k.response_format??k.responseFormat),$=A&&b(A.type);return I&&E&&C?[{provider:I,model:E,responseFormat:$?{name:b(A?.name),strict:A?.strict===!0,type:$}:null,stage:C}]:[]}):[],v=d!==null?{sourceDurationSeconds:d,llmExchanges:y,outputJson:f?.output_json??f?.outputJson??null,outputUrl:b(f?.output_url??f?.outputUrl),shots:p}:null,S=Array.isArray(t.waveform)?t.waveform.flatMap(w=>typeof w=="number"&&Number.isFinite(w)?[Math.max(-1,Math.min(1,w))]:[]):null;return{id:n,artifactId:r,label:b(t.label)??n,objectHash:b(t.object_hash??t.objectHash),type:o,createdAt:b(t.created_at??t.createdAt)??"",mediaUrl:b(t.media_url??t.mediaUrl),thumbnailUrl:b(t.thumbnail_url??t.thumbnailUrl),status:b(t.status)??"ready",origin:b(t.origin),prompt:b(t.prompt),width:F(t.width),height:F(t.height),duration:F(t.duration),fps:F(t.fps),waveform:S,audioInfo:m,analysisInfo:v,transcript:nf(t.transcript),visionAnalysis:rf(t.vision_analysis??t.visionAnalysis),tags:xi(t.tags)}}function Fb(e){const t=h(e);return(Array.isArray(e)?e:Array.isArray(t?.assets)?t.assets:[]).flatMap(r=>{const o=Bs(r);return o?[o]:[]})}function Db(e){const t=h(e);return{ready:Math.max(0,F(t?.ready)??0),processing:Math.max(0,F(t?.processing)??0),error:Math.max(0,F(t?.error)??0)}}function nx(e,t){const n=h(e),r=Array.isArray(n?.assets)?n.assets:[],o=h(n?.page),i=F(o?.offset)??0,s=F(o?.limit)??24,a=F(o?.total)??0,c=Array.isArray(n?.books_with_errors)?n.books_with_errors:[];return{unindexedVisualAssets:Math.max(0,F(n?.unindexed_visual_assets)??0),receivedCount:r.length,assets:r.flatMap(l=>{const u=h(l),m=Bs(u);if(!m)return[];const f=(u&&b(u.owning_book_id))??t?.owningBookId,d=(u&&b(u.owning_book_name))??t?.owningBookName,p=h(u?.assetWork),g=h(p?.meta),y=b(h(g?.error)?.message),v=(u&&b(u.last_used_at))??null;return f&&d?[{...m,owningBookId:f,owningBookName:d,errorMessage:y,lastUsedAt:v}]:[]}),page:{offset:i,limit:s,total:a,hasMore:o?.hasMore===!0},statusCounts:Db(n?.status_counts??n?.statusCounts),booksWithErrors:c.flatMap(l=>{const u=h(l),m=u&&b(u.book_id),f=u&&b(u.message);return m&&f?[{bookId:m,message:f}]:[]})}}function rx(e){const t=h(e),n=b(t?.status)==="in_use"?"in_use":"forgotten",r=Array.isArray(t?.references)?t.references:[];return{status:n,artifactId:b(t?.artifact_id)??"",label:b(t?.label),references:r.flatMap(o=>{const i=h(o),s=i&&b(i.kind),a=i&&b(i.id);return s&&a?[{kind:s,id:a}]:[]}),clearedCells:F(t?.cleared_cells)??0,forgottenObjects:F(t?.forgotten_objects)??0,sharedObjects:F(t?.shared_objects)??0,reclaimedBytes:F(t?.reclaimed_bytes)??0}}function Vb(e){return Array.isArray(e)?e.flatMap(t=>{const n=h(t),r=n&&b(n.artifactId),o=n&&b(n.state),i=n&&h(n.phases);return!r||!o||!i?[]:[{artifactId:r,state:o,missingOutputs:Array.isArray(n.missingOutputs)?n.missingOutputs.flatMap(s=>typeof s=="string"?[s]:[]):[],phases:Object.fromEntries(Object.entries(i).flatMap(([s,a])=>typeof a=="string"?[[s,a]]:[]))}]}):[]}function jb(e){const t=h(e);return t&&b(t.sequenceId)&&b(t.revision)&&Array.isArray(t.tracks)&&Array.isArray(t.clips)&&Array.isArray(t.captions)?e:null}function Gb(e){const t=h(e);if(!t||t.planVersion!==1||!b(t.planId)||!Array.isArray(t.stages))throw new Error("The server returned an invalid CommandPlan");const n=e;return wi(n),n}function qb(e){return Array.isArray(e)?e.flatMap(t=>{const n=h(t),r=n&&F(n.id),o=n&&b(n.type),i=n&&b(n.state),s=n&&b(n.operationId??n.operation_id);if(!n||r===null||!o||!i||!s)return[];const a=h(n.error),c=n.payload,l=c&&typeof c=="object"&&!Array.isArray(c)?c:null,u=h(n.result);return[{id:r,operationId:s,type:o,state:i,artifactId:b(n.artifactId??n.artifact_id),attempts:F(n.attempts)??0,maxAttempts:F(n.maxAttempts??n.max_attempts)??1,error:a&&b(a.message)?{message:b(a.message),code:b(a.code)}:null,payload:l,result:u,providerTask:bi(n.providerTask),enqueuedAt:F(n.enqueuedAt??n.enqueued_at)??0,startedAt:F(n.startedAt??n.started_at),finishedAt:F(n.finishedAt??n.finished_at)}]}):[]}function ox(e){return Array.isArray(e)?e.flatMap(t=>{const n=h(t),r=b(n?.planId),o=b(n?.cellId),i=b(n?.status),s=b(n?.createdAt),a=b(n?.updatedAt);if(!n||!r||!o||!i||!s||!a)return[];try{return[{planId:r,cellId:o,status:i,plan:Gb(n.plan),outputArtifactId:b(n.outputArtifactId),error:b(n.error),createdAt:s,updatedAt:a}]}catch{return[]}}):[]}function Ub(e){return Array.isArray(e)?e.filter(t=>{const n=h(t);return n!==null&&typeof n.command=="string"&&typeof n.description=="string"}):[]}function ix(e){if(!e)return null;const t=Us(e.bookValue),n=Lb(e.notebookValue);return{books:t,bookId:e.bookId,notebook:n.find(r=>r.id===e.notebookId)??null,assets:Fb(e.assetValue),ingestStatuses:Vb(e.ingestStatusValue),sequence:jb(e.sequenceValue),jobs:qb(e.jobValue),commands:Ub(e.commandValue),chatModelCatalog:ib(e.chatModelValue),generationActions:xd(e.actionValue)}}function sr(e){return e!==null&&Number.isFinite(e)&&e>0}function Bb(e,t){return sr(e)&&sr(t)?`${e}×${t}`:null}function Hs(e,t){const n=e??t;if(!n)return null;const r=Rd(n);return{key:"generator",label:r,title:r,announce:`Generator ${r}`,emphasis:"generator"}}function Ws(e){return e?{key:"provenance",label:e,title:`Extracted from ${e}`,announce:`Extracted from ${e}`,emphasis:"generator"}:null}function sx(e){const t=Bb(e.width,e.height),n=un(e.width,e.height);return[t?{key:"dimensions",label:t,title:"Dimensions",announce:`Dimensions ${t}`,emphasis:"plain"}:null,n?{key:"aspect",label:n,title:"Aspect ratio",announce:`Aspect ratio ${n}`,emphasis:"plain"}:null,Hs(e.tool,e.model),Ws(e.provenance)].filter(r=>r!==null)}function ax(e){const t=e.aspectRatio??un(e.width,e.height);return[t?{key:"aspect",label:t,title:"Aspect ratio",announce:`Aspect ratio ${t}`,emphasis:"plain"}:null,Hs(e.tool,e.model),Ws(e.provenance)].filter(n=>n!==null)}function cx(e){const t=dr(e);return[{key:"role",label:t.role,title:"Audio role",announce:`Audio role ${t.role}`,emphasis:"generator"},...t.details.map((r,o)=>({key:`detail-${o}`,label:r,title:r,announce:r,emphasis:"plain"}))]}function Hb(e){return sr(e)?{label:me(Math.floor(e)),seconds:e}:null}function lx(e){return Hb(dr(e).durationSeconds)}function ux(e,t,n,r){return[`${e} metadata`,...t.map(o=>o.announce),n?`Duration ${n.label}`:null,r?`Prompt: ${r}`:null].filter(o=>!!o).join(". ")}const dx={title:6,continuity:30,frame:20,storyboard:32,ending:12,video:12};function fx(e){return e.trim().split(/\s+/u).filter(Boolean).length}function mx(e,t){const n=Math.max(0,e/t),r=Math.floor(n/60),o=n-r*60;return`${r}:${o.toFixed(2).padStart(5,"0")}`}function px(e,t){const n=e.trim(),r=/^f(\d+)$/i.exec(n);if(r)return Number(r[1]);const o=/^(?:(\d+):)?(\d+(?:\.\d+)?)$/.exec(n);if(!o)return null;const i=o[1]?Number(o[1]):0,s=Number(o[2]);return o[1]&&s>=60?null:Math.round((i*60+s)*t)}const{fontFamily:Wb}=sa();function Kb(e){return e==="left"?"flex-start":e==="right"?"flex-end":"center"}function zb(e){return e==="left"?"left bottom":e==="right"?"right bottom":"center bottom"}function Xb(e,t){const n=`0 ${Math.round(t*.04)}px ${Math.round(t*.3)}px rgba(0,0,0,0.5)`;if(e.shadowBlur<=0)return n;const r=Math.round(e.shadowBlur/2);return`${r}px ${r}px ${e.shadowBlur}px rgba(0,0,0,${e.shadowOpacity/100}), ${n}`}const Jo=e=>{const t=ne.c(33),{words:n,fontSize:r,time:o,fade:i,settings:s,side:a,finish:c,last:l}=e,u=Math.min(c.strokeWidth,r*.035);let m;t[0]!==a?(m=Kb(a),t[0]=a,t[1]=m):m=t[1];let f;t[2]!==r?(f=Math.round(r*.2),t[2]=r,t[3]=f):f=t[3];const d=r*on;let p;t[4]!==r||t[5]!==l?(p=l?0:yh(r),t[4]=r,t[5]=l,t[6]=p):p=t[6];let g;t[7]!==r||t[8]!==m||t[9]!==f||t[10]!==d||t[11]!==p?(g={display:"flex",justifyContent:m,gap:f,fontSize:r,lineHeight:on,height:d,marginBottom:p,whiteSpace:"nowrap"},t[7]=r,t[8]=m,t[9]=f,t[10]=d,t[11]=p,t[12]=g):g=t[12];let y;if(t[13]!==i||t[14]!==c||t[15]!==r||t[16]!==s||t[17]!==a||t[18]!==u||t[19]!==o||t[20]!==n){let S;t[22]!==i||t[23]!==c||t[24]!==r||t[25]!==s||t[26]!==a||t[27]!==u||t[28]!==o?(S=(w,k)=>{const I=Ch(w,o,s,r,i);return Ke.jsx("span",{style:{display:"inline-block",opacity:I.opacity,color:I.color,transform:`translateY(${I.translateY}px) scale(${I.scale})`,transformOrigin:zb(a),WebkitTextStroke:u>0?`${u}px ${c.strokeColor}`:void 0,paintOrder:u>0?"stroke fill":void 0,textShadow:Xb(c,r)},children:w.text.toUpperCase()},`${w.start}-${k}`)},t[22]=i,t[23]=c,t[24]=r,t[25]=s,t[26]=a,t[27]=u,t[28]=o,t[29]=S):S=t[29],y=n.map(S),t[13]=i,t[14]=c,t[15]=r,t[16]=s,t[17]=a,t[18]=u,t[19]=o,t[20]=n,t[21]=y}else y=t[21];let v;return t[30]!==g||t[31]!==y?(v=Ke.jsx("div",{style:g,children:y}),t[30]=g,t[31]=y,t[32]=v):v=t[32],v};function Zo(e,t){return{position:"absolute",left:e.x,top:t,width:e.width,display:"flex",flexDirection:"column",fontFamily:Wb,fontWeight:400,userSelect:"none",pointerEvents:"none"}}const gx=e=>{const t=ne.c(14);let n,r,o;t[0]!==e?({cues:n,settings:o,...r}=e,t[0]=e,t[1]=n,t[2]=r,t[3]=o):(n=t[1],r=t[2],o=t[3]);const i=aa(),{fps:s}=ca(),a=i/s;let c,l,u;if(t[4]!==n||t[5]!==r||t[6]!==o||t[7]!==a){u=Symbol.for("react.early_return_sentinel");e:{const f=Sh(n,a);if(!f){u=null;break e}const d=Ih(f,a);if(o.style==="punch"){const p=xh(f,a);if(!p){u=null;break e}const g=vh(p,f.column,o.energySizing),y=f.column.y+(f.column.height-g*on)/2;u=Ke.jsx("div",{style:Zo(f.column,y),children:Ke.jsx(Jo,{words:[p],fontSize:g,time:a,fade:d,settings:o,side:f.column.side,finish:r,last:!0})});break e}c=Zo(f.column,f.blockTop),l=f.lines.map((p,g)=>Ke.jsx(Jo,{words:p.words,fontSize:p.fontSize,time:a,fade:d,settings:o,side:f.column.side,finish:r,last:g===f.lines.length-1},`${f.id}-${g}`))}t[4]=n,t[5]=r,t[6]=o,t[7]=a,t[8]=c,t[9]=l,t[10]=u}else c=t[8],l=t[9],u=t[10];if(u!==Symbol.for("react.early_return_sentinel"))return u;let m;return t[11]!==c||t[12]!==l?(m=Ke.jsx("div",{style:c,children:l}),t[11]=c,t[12]=l,t[13]=m):m=t[13],m};export{Ev as $,Uv as A,$v as B,Bl as C,wv as D,qv as E,C_ as F,M_ as G,T_ as H,Gv as I,ov as J,R_ as K,Nv as L,$_ as M,kv as N,Qv as O,ty as P,Cv as Q,cv as R,bv as S,fn as T,zv as U,Jv as V,Zv as W,tk as X,Sv as Y,lv as Z,Iv as _,Dy as a,uv as a$,xv as a0,Tv as a1,vv as a2,jv as a3,Vv as a4,v_ as a5,Lu as a6,yk as a7,O as a8,Qe as a9,ff as aA,Ew as aB,Iw as aC,Mw as aD,wn as aE,U_ as aF,H_ as aG,vf as aH,kf as aI,jw as aJ,Gw as aK,cs as aL,If as aM,Ww as aN,Kw as aO,Lw as aP,Hw as aQ,Dw as aR,Vw as aS,Fw as aT,mS as aU,pS as aV,gS as aW,Ci as aX,Vl as aY,Fl as aZ,Bn as a_,ve as aa,wk as ab,Sk as ac,me as ad,Ik as ae,xk as af,w_ as ag,I_ as ah,S_ as ai,Ak as aj,ts as ak,lc as al,Wy as am,Wk as an,tw as ao,ew as ap,nw as aq,rw as ar,bw as as,mk as at,kw as au,ww as av,Sw as aw,Cw as ax,xw as ay,Aw as az,$y as b,L_ as b$,Ov as b0,gv as b1,ss as b2,is as b3,qk as b4,Zk as b5,Qk as b6,dv as b7,kS as b8,AS as b9,Wi as bA,Im as bB,SS as bC,e_ as bD,Cy as bE,n_ as bF,xt as bG,mi as bH,b as bI,Rd as bJ,h as bK,s_ as bL,cx as bM,lx as bN,sx as bO,ax as bP,Hb as bQ,ln as bR,r_ as bS,Ya as bT,F as bU,ux as bV,Ds as bW,fi as bX,i_ as bY,IS as bZ,Wr as b_,xS as ba,MS as bb,TS as bc,Cm as bd,CS as be,c0 as bf,a0 as bg,d0 as bh,Fp as bi,v0 as bj,_0 as bk,k0 as bl,Xa as bm,My as bn,Ry as bo,Ty as bp,Yy as bq,Zy as br,Jy as bs,l_ as bt,ur as bu,D_ as bv,kk as bw,F_ as bx,Fv as by,Xw as bz,ey as c,em as c$,mx as c0,px as c1,ui as c2,ua as c3,Ha as c4,wy as c5,li as c6,cn as c7,Da as c8,tt as c9,NS as cA,Cr as cB,HS as cC,WS as cD,DS as cE,Rp as cF,Np as cG,xp as cH,fp as cI,By as cJ,vp as cK,Sp as cL,t0 as cM,mp as cN,Hy as cO,qp as cP,zp as cQ,Ky as cR,Xy as cS,aS as cT,zf as cU,Kf as cV,Qf as cW,Zf as cX,Wf as cY,Hf as cZ,jf as c_,Ca as ca,cr as cb,ci as cc,gy as cd,sy as ce,Fr as cf,iy as cg,oy as ch,dy as ci,cy as cj,ly as ck,gd as cl,hd as cm,xr as cn,ac as co,Gk as cp,md as cq,Jk as cr,pd as cs,Ce as ct,GS as cu,VS as cv,_e as cw,qS as cx,US as cy,BS as cz,ev as d,j0 as d$,Uf as d0,qf as d1,zy as d2,tS as d3,Xf as d4,oS as d5,To as d6,dc as d7,uc as d8,sm as d9,Fk as dA,t_ as dB,vk as dC,Rw as dD,$w as dE,Zi as dF,o_ as dG,Tk as dH,Td as dI,Hk as dJ,$k as dK,wr as dL,rt as dM,Tw as dN,zw as dO,Pv as dP,Rf as dQ,z0 as dR,K0 as dS,vt as dT,et as dU,kt as dV,$o as dW,wg as dX,fx as dY,dx as dZ,Pe as d_,im as da,gk as db,pk as dc,hk as dd,bk as de,b_ as df,Ek as dg,Pc as dh,yw as di,Ck as dj,We as dk,Mk as dl,Kk as dm,Vk as dn,dd as dp,Md as dq,rs as dr,gn as ds,Ct as dt,Yk as du,Xk as dv,vr as dw,zk as dx,Bk as dy,Dk as dz,iv as e,Zw as e$,G0 as e0,q0 as e1,V0 as e2,nn as e3,D0 as e4,F0 as e5,er as e6,Os as e7,ny as e8,ry as e9,$I as eA,r0 as eB,N0 as eC,M0 as eD,O0 as eE,E_ as eF,z_ as eG,Nk as eH,sv as eI,m0 as eJ,jy as eK,n0 as eL,y0 as eM,sc as eN,uw as eO,qI as eP,UI as eQ,aw as eR,ox as eS,Y_ as eT,YI as eU,tv as eV,Z_ as eW,Q_ as eX,Z0 as eY,W0 as eZ,H0 as e_,U0 as ea,dg as eb,_t as ec,B0 as ed,_g as ee,pg as ef,ek as eg,Sh as eh,ih as ei,gx as ej,gh as ek,sh as el,fI as em,mI as en,dI as eo,sI as ep,aI as eq,oI as er,cI as es,lI as et,uI as eu,qo as ev,ix as ew,NI as ex,T0 as ey,ob as ez,pt as f,Us as f$,RS as f0,O_ as f1,V_ as f2,_k as f3,rv as f4,$r as f5,g_ as f6,h_ as f7,p_ as f8,Dv as f9,ak as fA,lk as fB,P0 as fC,Gy as fD,qy as fE,zS as fF,Gm as fG,Jd as fH,dw as fI,fw as fJ,mw as fK,pw as fL,gw as fM,BI as fN,Eg as fO,Qy as fP,Er as fQ,k_ as fR,A_ as fS,x_ as fT,zI as fU,Ib as fV,Lb as fW,jb as fX,xd as fY,KI as fZ,gi as f_,Gb as fa,f_ as fb,d_ as fc,X0 as fd,I0 as fe,Y0 as ff,J0 as fg,PI as fh,Ob as fi,qb as fj,xI as fk,SI as fl,xc as fm,II as fn,Fb as fo,EI as fp,Tg as fq,A0 as fr,ng as fs,Rk as ft,S0 as fu,x0 as fv,fk as fw,ck as fx,yI as fy,bI as fz,m_ as g,u_ as g$,G_ as g0,rx as g1,q_ as g2,j_ as g3,fv as g4,mv as g5,Ub as g6,ib as g7,tb as g8,R0 as g9,rk as gA,Yt as gB,X_ as gC,nv as gD,vc as gE,WI as gF,cw as gG,ex as gH,FI as gI,DI as gJ,Vr as gK,Ly as gL,Fy as gM,fy as gN,o0 as gO,i0 as gP,s0 as gQ,B_ as gR,K_ as gS,C0 as gT,Nw as gU,Ow as gV,hy as gW,_I as gX,vI as gY,uk as gZ,hS as g_,$0 as ga,tx as gb,Jw as gc,uS as gd,P_ as ge,Lv as gf,um as gg,cS as gh,p0 as gi,b0 as gj,jI as gk,LI as gl,g0 as gm,Sy as gn,h0 as go,$S as gp,Mt as gq,f0 as gr,pv as gs,wS as gt,sk as gu,Uk as gv,ok as gw,au as gx,ik as gy,Xv as gz,N_ as h,by as h$,__ as h0,y_ as h1,ES as h2,w0 as h3,dk as h4,l0 as h5,u0 as h6,rl as h7,iI as h8,pI as h9,VI as hA,QI as hB,JI as hC,Pk as hD,PS as hE,tI as hF,eI as hG,Q0 as hH,L0 as hI,hI as hJ,Av as hK,AI as hL,Co as hM,mf as hN,hw as hO,OS as hP,hn as hQ,Nm as hR,wI as hS,Yv as hT,bS as hU,yS as hV,rI as hW,_S as hX,vS as hY,nI as hZ,CI as h_,gI as ha,Bw as hb,Uw as hc,qw as hd,Mv as he,nk as hf,GI as hg,Rv as hh,Qw as hi,eS as hj,jS as hk,sw as hl,Ok as hm,iw as hn,ow as ho,py as hp,my as hq,uy as hr,Pw as hs,E0 as ht,W_ as hu,nx as hv,XI as hw,ay as hx,vy as hy,_y as hz,Py as i,yy as i0,lS as i1,lm as i2,om as i3,Bf as i4,Jf as i5,_s as i6,Gf as i7,sS as i8,rS as i9,HI as iA,as as iB,kI as iC,Yw as iD,MI as iE,TI as iF,_w as iG,vw as iH,jk as iI,LS as iJ,FS as iK,nm as iL,rm as iM,RI as iN,iS as ia,tm as ib,nS as ic,Lk as id,lw as ie,ZI as ig,XS as ih,ZS as ii,YS as ij,JS as ik,QS as il,e0 as im,KS as io,Oy as ip,ky as iq,fS as ir,dS as is,a_ as it,c_ as iu,xy as iv,Ay as iw,Iy as ix,Ny as iy,OI as iz,eo as j,$t as k,jl as l,J_ as m,yv as n,av as o,Ey as p,hv as q,_v as r,Gl as s,Ql as t,Vy as u,Bv as v,Hv as w,Uy as x,Wv as y,Kv as z};