!function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{};e.SENTRY_RELEASE={id:"substack@538433c"};var t=(new e.Error).stack;t&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[t]="9accdd74-c68a-43fd-8511-a4664642c67d",e._sentryDebugIdIdentifier="sentry-dbid-9accdd74-c68a-43fd-8511-a4664642c67d")}catch(e){}}();"use strict";(self.webpackChunksubstack=self.webpackChunksubstack||[]).push([["74785"],{95064:function(e,t,n){n.d(t,{HS:()=>j,IS:()=>N,Of:()=>x,Qj:()=>K,bH:()=>F,lk:()=>L});var r=n(4006),i=n(38221),a=n.n(i),l=n(69843),s=n.n(l);if(90887==n.j)var d=n(69308);if(48981!=n.j)var o=n(48697);if(48981!=n.j)var c=n(98445);if(90887==n.j)var u=n(8414);if(90887==n.j)var p=n(54718);if(90887==n.j)var h=n(65892);if(90887==n.j)var g=n(32708);if(48981!=n.j)var f=n(72102);if(48981!=n.j)var _=n(75107);var m=n(17402),I=n(44518),v=n(84605),Y=n(77441),C=n(86500),y=n(68410),D=n(35369),E=n(76977),b=n(45859),S=n(63136),T=n(17836),w=n(16291),A=n(50874),R=n(82776),k=n(38610);let O=(0,m.createContext)({isSearching:!1,items:[],setIsSearching:()=>void 0,setItems:()=>void 0,focusedItemStart:null,setFocusedItemStart:()=>void 0,filteredItems:[],searchTerm:null,setSearchTerm:()=>void 0,hasFiltered:!1}),x=e=>{let{children:t}=e,[n,i]=(0,m.useState)(!1),[a,l]=(0,m.useState)([]),[s,d]=(0,m.useState)(null),[o,c]=(0,m.useState)(null),{filteredItems:u,setQuery:p,hasFiltered:h}=(0,I.S)({items:a,getKeys:e=>[e.text],sortFunc:(e,t)=>e.start-t.start});return(0,m.useEffect)(()=>{var e,t;d(null!=(t=null==(e=u[0])?void 0:e.start)?t:null)},[u]),(0,r.Y)(O.Provider,{value:{isSearching:n,setIsSearching:i,items:a,setItems:l,focusedItemStart:s,setFocusedItemStart:d,filteredItems:u,hasFiltered:h,searchTerm:o,setSearchTerm:e=>{c(e),p(e)}},children:t})},N=()=>(0,m.useContext)(O);async function F(e){if(e.cdn_unaligned_url&&e.cdn_url)try{var t,n,r,i;let a=await fetch(e.cdn_unaligned_url,{headers:{Accept:"text/plain"}}),l=await a.text(),s=JSON.parse(l),d=null!=(n=s.segments)?n:[];Object.keys(null!=(r=s.speaker_map)?r:{}).length>0&&(null==d||null==(t=d[0])?void 0:t.speaker)||(a=await fetch(e.cdn_url,{headers:{Accept:"text/plain"}}),l=await a.text(),d=JSON.parse(l));let o=(0,A.$r)(d,null!=(i=e.speaker_map)?i:{}),c=new Blob([o],{type:"text/plain"}),u=URL.createObjectURL(c),p=document.createElement("a");p.href=u,p.download="transcript_".concat(new Date().toISOString(),".txt"),document.body.appendChild(p),p.click(),document.body.removeChild(p),URL.revokeObjectURL(u)}catch(e){console.error("Failed to fetch and download transcript:",e)}}async function L(e){if(e.cdn_url)try{let t=await fetch(e.cdn_url,{headers:{Accept:"application/json"}}),n=await t.text(),r=new Blob([n],{type:"application/json"}),i=URL.createObjectURL(r),a=document.createElement("a");a.href=i,a.download="transcript_".concat(new Date().toISOString(),".json"),document.body.appendChild(a),a.click(),document.body.removeChild(a),URL.revokeObjectURL(i)}catch(e){console.error("Failed to fetch and download transcript JSON:",e)}}let j=e=>{let{isEditing:t,setIsEditing:n,setEdits:i,hasEdits:a,handleSubmitEdits:l,handleRegenerateTranscription:s,handleCancelTranscription:c,isTranscribing:u,transcription:p,postId:h,audioUpload:g,onTranscriptionUploadCancelled:f,onTranscriptionUploadError:_,onTranscriptionUploadStarted:m,onTranscriptionUploaded:I,uploadedFile:v,setUploadedFile:Y,isEditingSpeakers:y}=e,{isSearching:b}=N();return(0,r.FD)(E.I1,{gap:16,children:[v&&(0,r.FD)(E.Ye,{alignItems:"center",justifyContent:"space-between",padding:16,radius:"sm",border:"detail",gap:16,children:[(0,r.FD)(E.Ye,{gap:16,alignItems:"center",children:[(0,r.Y)(E.pT,{alignItems:"center",padding:8,radius:"sm",color:"primary",bg:"secondary",children:(0,r.Y)(d.A,{})}),(0,r.FD)(E.I1,{children:[(0,r.Y)(S.EY.B3,{weight:"semibold",color:"primary",children:v.name}),(0,r.Y)(S.EY.B4,{children:(0,R.numberToHumanFileSize)(v.size)})]})]}),(0,r.Y)(D.K0,{onClick:()=>{(0,C.u4)(C.qY.TRANSCRIPTION_EDIT_CANCELLED_CLICKED,{post_id:h}),Y(null),c()},children:(0,r.Y)(o.A,{})})]}),t&&(0,r.Y)(P,{hasEdits:a,setIsEditing:n,setEdits:i,handleSubmitEdits:l}),!t&&!b&&(0,r.Y)(U,{isEditingSpeakers:y,setIsEditing:n,transcription:p,isTranscribing:u,handleCancelTranscription:c,handleRegenerateTranscription:s,setUploadedFile:Y,postId:h,audioUpload:g,onTranscriptionUploadCancelled:f,onTranscriptionUploadError:_,onTranscriptionUploadStarted:m,onTranscriptionUploaded:I}),b&&(0,r.Y)(K,{postId:h})]})},U=e=>{var t,n;let{transcription:i,isTranscribing:a,handleCancelTranscription:l,handleRegenerateTranscription:s,setUploadedFile:d,postId:o,audioUpload:f,onTranscriptionUploadStarted:_,onTranscriptionUploadCancelled:m,onTranscriptionUploadError:I,onTranscriptionUploaded:y,setIsEditing:S,isEditingSpeakers:T}=e,{iString:A}=(0,v.GO)(),R=(null==i?void 0:i.created_at)&&new Date(i.created_at)<(0,w.A)().subtract(5,"minutes").toDate(),O=(null==i?void 0:i.status)==="failed",x=(null==i?void 0:i.status)==="transcribed",{setIsSearching:j}=N(),U=null==(t=(null!=(n=null==i?void 0:i.signed_captions)?n:[]).find(e=>"True"===e.original))?void 0:t.url;return(0,r.FD)(E.Ye,{justifyContent:"space-between",gap:8,children:[(0,r.Y)(D.K0,{onClick:()=>{(0,C.u4)(C.qY.TRANSCRIPTION_SEARCH_CLICKED,{post_id:o}),j(!0)},disabled:T,children:(0,r.Y)(c.A,{})}),(0,r.FD)(E.Ye,{gap:8,children:[(0,r.Y)(D.$n,{onClick:s,disabled:!(x&&!R||!a||O)||T,leading:(0,r.Y)(u.A,{size:20}),priority:"secondary",children:A("Regenerate")}),(0,r.Y)(Y.f,{setUploadedFile:d,postId:o,mediaUpload:f,transcription:null!=i?i:null,onTranscriptionUploadStarted:_,onTranscriptionUploadCancelled:m,onTranscriptionUploadError:I,onTranscriptionUploaded:y,disabled:!o||!f||(null==f?void 0:f.state)!=="transcoded"||T}),(0,r.FD)(b.W1,{trigger:(0,r.Y)(D.K0,{priority:"secondary",rounded:!1,children:(0,r.Y)(p.A,{className:k.A.icon})}),children:[(null==i?void 0:i.status)==="transcribed"&&(0,r.FD)(r.FK,{children:[(0,r.Y)(b.H9,{isFirst:!0,children:(0,r.Y)(b.Dr,{disabled:T,onClick:()=>{(0,C.u4)(C.qY.TRANSCRIPTION_EDIT_CLICKED,{post_id:o}),S(!0)},leading:(0,r.Y)(h.A,{}),children:A("Correct transcript")})}),(0,r.FD)(b.H9,{children:[(0,r.Y)(b.Dr,{disabled:T,onClick:()=>{(0,C.u4)(C.qY.TRANSCRIPTION_DOWNLOAD_CLICKED,{post_id:o,type:"txt"}),F(i)},children:A("Download .txt")}),(0,r.Y)(b.Dr,{disabled:T,onClick:()=>{(0,C.u4)(C.qY.TRANSCRIPTION_DOWNLOAD_CLICKED,{post_id:o,type:"json"}),L(i)},children:A("Download .json")}),U&&(0,r.Y)(b.Dr,{disabled:T,href:U,onClick:()=>{(0,C.u4)(C.qY.TRANSCRIPTION_DOWNLOAD_CLICKED,{post_id:o,type:"vtt"})},children:A("Download .vtt")})]})]}),(0,r.Y)(b.H9,{isFirst:(null==i?void 0:i.status)!=="transcribed",children:(0,r.Y)(b.Dr,{disabled:!i||T,priority:"destructive",leading:(0,r.Y)(g.A,{}),onClick:l,children:A("Remove")})})]})]})]})},P=e=>{let{setIsEditing:t,setEdits:n,hasEdits:i,handleSubmitEdits:a}=e,{iString:l}=(0,v.GO)();return(0,r.FD)(E.Ye,{justifyContent:"end",gap:8,children:[(0,r.Y)(D.$n,{onClick:()=>{t(!1),n({})},priority:"secondary",children:l("Cancel")}),(0,r.Y)(D.$n,{priority:"primary",disabled:!i,onClick:a,children:l("Save")})]})},K=e=>{let{postId:t,closeAlwaysVisible:n=!0}=e,{iString:i}=(0,v.GO)(),{isMobile:l}=(0,y.sM)(),d=(0,m.useRef)(null),{setSearchTerm:u,setIsSearching:p,hasFiltered:h,filteredItems:g,setFocusedItemStart:I,focusedItemStart:Y,searchTerm:b}=N();(0,m.useEffect)(()=>{!b&&d.current&&(d.current.value="")},[b]);let w=g.findIndex(e=>e.start===Y),A=()=>{let e=w+1>=g.length?0:w+1,t=g[e];s()(t)?console.warn("nextItem not found at index ".concat(e)):I(t.start)},R=()=>{u(""),p(!1),(0,C.u4)(C.qY.TRANSCRIPTION_SEARCH_CANCELLED,{post_id:t})};return(0,r.FD)(E.Ye,{gap:8,justifyContent:"space-between",alignItems:"center",className:k.A.searchForm,children:[(0,r.Y)(T.c,{ref:d,leftIcon:(0,r.Y)(E.Ye,{children:(0,r.Y)(c.A,{size:16})}),rightIcon:(0,r.Y)(E.Ye,{cursor:"pointer",onClick:R,children:b||n?(0,r.Y)(o.A,{size:16}):null}),placeholder:i("Search"),onChange:a()(e=>{u(e.target.value),(0,C.u4)(C.qY.TRANSCRIPTION_SEARCHED,{post_id:t})},100),onKeyDown:e=>{"Enter"===e.key&&A(),"Escape"===e.key&&R()}}),h&&(0,r.Y)(E.Ye,{gap:8,paddingRight:8*!!l,children:(0,r.FD)(E.Ye,{alignItems:"center",gap:8,children:[(0,r.Y)(S.EY.B4,{paddingLeft:l?4:16,className:k.A.resultsValue,color:"primary",weight:"semibold",children:"".concat(w+1," / ").concat(g.length)}),(0,r.FD)(E.Ye,{children:[(0,r.Y)(D.K0,{priority:"tertiary",size:"sm",onClick:()=>{let e=w-1<0?g.length-1:w-1,t=g[e];s()(t)?console.warn("lastItem not found at index ".concat(e)):I(t.start)},children:(0,r.Y)(f.A,{size:20})}),(0,r.Y)(D.K0,{priority:"tertiary",size:"sm",onClick:A,children:(0,r.Y)(_.A,{size:20})})]})]})})]})}},77441:function(e,t,n){n.d(t,{f:()=>f});var r=n(4006),i=n(17402),a=n(15734),l=n.n(a),s=n(82519),d=n(84605),o=n(86500),c=n(35369),u=n(76977),p=n(45859),h=n(50874);let g=90887==n.j?[".txt",".srt",".vtt"]:null,f=e=>{let{postId:t,mediaUpload:n,transcription:a,onTranscriptionUploadStarted:f,onTranscriptionUploadCancelled:_,onTranscriptionUploadError:m,onTranscriptionUploaded:I,disabled:v,setUploadedFile:Y}=e,{iString:C}=(0,d.GO)(),[y,D]=(0,i.useState)(!1),[E,b]=(0,i.useState)(""),S=a&&"in_progress"===a.status,[T,w]=(0,i.useState)(null),A=async e=>{if(w(e),null==f||f(),e.length>0&&e[0]){var r,i,a;let l;Y&&Y(e[0]);let s=null!=(r=e[0].name.split(".").pop())?r:"";(0,o.u4)(o.qY.TRANSCRIPTION_UPLOAD_FILE_STARTED,{post_id:t,audio_upload_id:null==n?void 0:n.id,type:s}),i=e[0],a=async t=>{b(t);let r=null,i={};try{if("txt"===s){var a;[r,i]=(0,h.b5)(t,null!=(a=null==n?void 0:n.duration)?a:0)}else"vtt"===s?[r,i]=(0,h._b)(t):"srt"===s&&([r,i]=(0,h._b)(t));let l=(0,h.gD)(r);if(r&&!l)await R(e[0],s,r,i);else{let e=C("Error validating transcription file"),t="".concat(e,": ").concat(l);console.error(t),null==m||m(t)}}catch(t){let e=C("Error parsing transcription file");console.error(e,t),null==m||m(e),Y&&Y(null)}finally{x()}},(l=new FileReader).onload=e=>{var t;a(null==(t=e.target)?void 0:t.result)},l.readAsText(i)}},R=async(e,r,i,a)=>{let{body:s}=await l().post("/api/v1/drafts/".concat(t,"/upload_transcription/start")).send({speaker_map:a}),{originalTranscriptionFileKey:d,unalignedTranscriptionFileKey:c,alignedTranscriptionFileKey:u}=s;D(!0);try{var p;await l().put(d).send(e).set("Content-Type",e.type),await l().put(c).send(JSON.stringify(i)).set("Content-Type","application/json"),await l().put(u).send(JSON.stringify(null!=(p=null==i?void 0:i.segments)?p:[])).set("Content-Type","application/json"),await l().post("/api/v1/drafts/".concat(t,"/upload_transcription/complete")).send(),await l().post("/api/v1/drafts/".concat(t,"/realign_transcription")).send({edits:{}}).then(e=>{var i;(null==(i=e.body)?void 0:i.data)&&((0,o.u4)(o.qY.TRANSCRIPTION_UPLOAD_FILE_COMPLETED,{post_id:t,audio_upload_id:null==n?void 0:n.id,type:r}),D(!1),I(e.body.data),x())})}catch(e){(0,o.u4)(o.qY.TRANSCRIPTION_UPLOAD_FILE_FAILED,{post_id:t,audio_upload_id:null==n?void 0:n.id,type:r}),console.error("File upload failed:",e),null==m||m(C("Error uploading transcription file"))}};(0,i.useEffect)(()=>{},[E]);let{openFileDialog:k,fileInputRef:O}=function(e){let{onFilesSelected:t}=e,n=(0,i.createRef)(),r=e=>{let n=e.target;n.files&&n.files.length>0&&t(n.files)};return(0,i.useEffect)(()=>{let e=n.current;if(e)return e.addEventListener("change",r),()=>{e.removeEventListener("change",r)}},[n]),{openFileDialog:()=>{var e;null==(e=n.current)||e.click()},fileInputRef:n}}({onFilesSelected:A}),x=()=>{w(null),O.current&&(O.current.value=""),null==_||_()},N=null==T?void 0:T[0],F=e=>{(0,o.u4)(o.qY.TRANSCRIPTION_UPLOAD_FILE_TYPE_CLICKED,{post_id:t,audio_upload_id:null==n?void 0:n.id,type:e}),O.current&&(O.current.accept=e,setTimeout(()=>k(),50))};return S?null:(0,r.FD)(u.I1,{gap:8,children:[!y&&(0,r.FD)(p.W1,{onOpen:()=>{(0,o.u4)(o.qY.TRANSCRIPTION_UPLOAD_FILE_CLICKED,{post_id:t,audio_upload_id:null==n?void 0:n.id})},trigger:(0,r.Y)(c.$n,{disabled:v,priority:"secondary",trailing:(0,r.Y)(s.A,{}),children:C("Upload transcript")}),children:[(0,r.Y)(p.Dr,{onClick:()=>F(".txt"),children:C("Upload .txt file")}),(0,r.Y)(p.Dr,{onClick:()=>F(".vtt"),children:C("Upload .vtt file")}),(0,r.Y)(p.Dr,{onClick:()=>F(".srt"),children:C("Upload .srt file")})]}),N&&(0,r.Y)(u.I1,{gap:8}),(0,r.Y)("input",{type:"file",ref:O,style:{display:"none"},accept:g.join(",")})]})}},50874:function(e,t,n){n.d(t,{$r:()=>f,_b:()=>h,b5:()=>u,gD:()=>g,qD:()=>c});var r=n(69277),i=n(70408);n(39944);var a=n(69843),l=n.n(a),s=n(82776);let d=90887==n.j?[{regex:/\((\d{2}):(\d{2}):(\d{2})\):/,parse:e=>3600*parseInt(e[1])+60*parseInt(e[2])+parseInt(e[3])},{regex:/\((\d{2}):(\d{2})\):/,parse:e=>60*parseInt(e[1])+parseInt(e[2])},{regex:/\((\d{2}:\d{2}\.\d{1,3})\)/,parse:e=>{let[t,n]=e[1]?e[1].split(":").map(parseFloat):[0,0];return 60*t+n}}]:null,o=90887==n.j?[{regex:/^(.*?[\w\s’‘,.'-]*)\s\(\d{2}:\d{2}:\d{2}\):/,parse:e=>e[1]},{regex:/^(.*?[\w\s’‘,.'-]*)\s\(\d{2}:\d{2}\):/,parse:e=>e[1]},{regex:/^(.*?[\w\s’‘,.'-]*)\s*\(\d{2}:\d{2}\.\d{1,3}\)$/,parse:e=>e[1]}]:null,c=e=>{let{rows:t,maxWordsPerRow:n=60}=e;if(l()(t[0]))return[];let a=[],s=(0,i._)((0,r._)({},t[0]),{words:t[0].words.map(e=>(0,i._)((0,r._)({},e),{originalIndex:0}))});for(let e=1;e(0,i._)((0,r._)({},t),{originalIndex:e}))});s.speaker===d.speaker&&s.words.length+d.words.length<=n?s={start:s.start,end:d.end,text:"".concat(s.text," ").concat(d.text),words:s.words.concat(...d.words),speaker:s.speaker}:(a.push(s),s=d)}return a.push(s),a},u=(e,t)=>{let n=e.split("\n"),a=[],l="",s="",c=0,u=0,p=new Set,h={},g=0;return n.forEach((e,r)=>{var i,f;let _=null!=(i=d.find(t=>!!e.match(t.regex)))?i:null,m=null!=(f=o.find(t=>!!e.match(t.regex)))?f:null,I=e.trim();if(_){let t=e.match(_.regex);t&&(u=_.parse(t),s&&(a.push({speaker:h[l],start:c,end:u,text:s.trim(),words:[]}),s=""),c=u,I=I.replace(_.regex,""))}if(m){let t=e.match(m.regex);t&&(l=m.parse(t),p.has(l)||(p.add(l),h[l]="SPEAKER_".concat(g++)),s+="".concat(I.substring(l.length)," "))}else""!==I.trim()&&(s+="".concat(I," "));r===n.length-1&&s&&a.push({speaker:h[l],start:c,end:t,text:s.trim(),words:[]})}),[{segments:a},Object.entries(h).reduce((e,t)=>(0,i._)((0,r._)({},e),{[t[1]]:t[0]}),{})]};function p(e){let[t,n,r]=e.split(":").map(parseFloat);return 3600*t+60*n+r}let h=e=>{let t=e.split("\n").map(e=>e.trim()),n=[],a=new Set,s={},d=0;for(let e=0;ee.trim()),o=p(r[0]),c=p(r[1]);e++;let u=[],h="";for(;e]+)>/);if(e&&e[1]){h=e[1].trim(),a.has(h)||(a.add(h),s[h]="SPEAKER_".concat(d++));let t=n.indexOf(">")+1;t(0,i._)((0,r._)({},e),{[t[1]]:t[0]}),{})]},g=e=>e?e.segments.some(e=>!e.text)?"Segment text is missing":e.segments.some(e=>l()(e.end)||l()(e.start))?"Segment start or end time is missing":null:"Transcription is missing",f=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=[];return e.forEach(e=>{let r="(".concat((0,s.secondsToHHMMSS)(e.start,{strict:!0}),"):\n").concat(e.text.trim(),"\n");if(Object.keys(t).length>0){var i;let a=t[null!=(i=e.speaker)?i:""];a?n.push("".concat(a," ").concat(r)):n.push(r)}else e.user_id?n.push("user_".concat(e.user_id," ").concat(r)):n.push(r)}),n.join("\n")}}}]);