dictawhisper 0.0.13 → 0.0.14

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 (60) hide show
  1. package/README.md +10 -2
  2. package/bin/dictawhisper.mjs +14 -0
  3. package/config.example.json +41 -0
  4. package/dist/ui/_app/immutable/assets/0.C6M3gHo0.css +1 -0
  5. package/dist/ui/_app/immutable/assets/2.C96vgj_4.css +1 -0
  6. package/dist/ui/_app/immutable/chunks/BSs9MmST.js +3 -0
  7. package/dist/ui/_app/immutable/chunks/Bjy-W4x2.js +81 -0
  8. package/dist/ui/_app/immutable/chunks/BslYtab-.js +1 -0
  9. package/dist/ui/_app/immutable/chunks/xihTtKlq.js +1 -0
  10. package/dist/ui/_app/immutable/entry/app.BJlRju4c.js +2 -0
  11. package/dist/ui/_app/immutable/entry/start.C5XBbXTT.js +1 -0
  12. package/dist/ui/_app/immutable/nodes/0.D23pkrHr.js +1 -0
  13. package/dist/ui/_app/immutable/nodes/1.C5T-U4uV.js +1 -0
  14. package/dist/ui/_app/immutable/nodes/2.59uAq_ko.js +5 -0
  15. package/dist/ui/_app/version.json +1 -0
  16. package/dist/ui/favicon.png +0 -0
  17. package/dist/ui/favicon.svg +3 -0
  18. package/dist/ui/index.html +38 -0
  19. package/dist/ui/logo.png +0 -0
  20. package/package.json +12 -3
  21. package/scripts/transcribe_faster_whisper.py +428 -0
  22. package/src/apiRoutes.ts +464 -0
  23. package/src/classes/Queue.ts +77 -0
  24. package/src/classes/Watcher.ts +117 -0
  25. package/src/cli.ts +132 -0
  26. package/src/config.ts +238 -0
  27. package/src/dev.ts +63 -0
  28. package/src/doctor.ts +12 -0
  29. package/src/lib/alignLib.ts +154 -0
  30. package/src/lib/audioLib.ts +202 -0
  31. package/src/lib/audioProbeLib.ts +112 -0
  32. package/src/lib/cleanupProvenanceLib.ts +80 -0
  33. package/src/lib/downloadLib.ts +8 -0
  34. package/src/lib/fileSettleLib.ts +213 -0
  35. package/src/lib/fsLib.ts +37 -0
  36. package/src/lib/healthLib.ts +377 -0
  37. package/src/lib/inboxUrl.ts +123 -0
  38. package/src/lib/journalEmbedLib.ts +127 -0
  39. package/src/lib/journalIndexLib.ts +923 -0
  40. package/src/lib/journalQueryLib.ts +269 -0
  41. package/src/lib/journalService.ts +287 -0
  42. package/src/lib/jsonLib.ts +71 -0
  43. package/src/lib/localberthGet.ts +14 -0
  44. package/src/lib/ollanetLib.ts +117 -0
  45. package/src/lib/ollanetReadyLib.ts +7 -0
  46. package/src/lib/organizationLib.ts +182 -0
  47. package/src/lib/pathAllowLib.ts +60 -0
  48. package/src/lib/queueLib.ts +30 -0
  49. package/src/lib/speechCleanupLib.ts +14 -0
  50. package/src/lib/tagConsolidateLib.ts +431 -0
  51. package/src/lib/tailscaleLib.ts +78 -0
  52. package/src/lib/transcriptionLib.ts +484 -0
  53. package/src/lib/whisperLib.ts +409 -0
  54. package/src/mcp.ts +151 -0
  55. package/src/prompts/cleanTranscription.ts +62 -0
  56. package/src/prompts/consolidateTags.ts +38 -0
  57. package/src/prompts/whisperInitial.ts +11 -0
  58. package/src/server.ts +220 -0
  59. package/src/socketEvents.ts +72 -0
  60. package/src/types/transcription.ts +56 -0
@@ -0,0 +1,5 @@
1
+ import{$ as e,A as t,B as n,D as r,E as i,F as a,G as o,H as s,I as c,J as l,K as u,M as d,N as f,O as p,P as m,T as h,V as g,X as _,Y as v,Z as y,_ as b,a as ee,b as x,c as S,ct as C,d as w,et as T,f as te,g as E,h as D,i as O,it as ne,j as k,k as A,l as re,lt as j,m as ie,n as ae,ot as oe,p as se,q as M,rt as ce,s as N,st as le,t as ue,u as de,ut as P,v as fe,w as F,x as pe,y as I,z as L}from"../chunks/BSs9MmST.js";import"../chunks/xihTtKlq.js";oe();var R=Object.create(null);R.open=`0`,R.close=`1`,R.ping=`2`,R.pong=`3`,R.message=`4`,R.upgrade=`5`,R.noop=`6`;var z=Object.create(null);Object.keys(R).forEach(e=>{z[R[e]]=e});var me={type:`error`,data:`parser error`},he=typeof Blob==`function`||typeof Blob<`u`&&Object.prototype.toString.call(Blob)===`[object BlobConstructor]`,B=typeof ArrayBuffer==`function`,ge=e=>typeof ArrayBuffer.isView==`function`?ArrayBuffer.isView(e):e&&e.buffer instanceof ArrayBuffer,V=({type:e,data:t},n,r)=>he&&t instanceof Blob?n?r(t):_e(t,r):B&&(t instanceof ArrayBuffer||ge(t))?n?r(t):_e(new Blob([t]),r):r(R[e]+(t||``)),_e=(e,t)=>{let n=new FileReader;return n.onload=function(){let e=n.result.split(`,`)[1];t(`b`+(e||``))},n.readAsDataURL(e)};function H(e){return e instanceof Uint8Array?e:e instanceof ArrayBuffer?new Uint8Array(e):new Uint8Array(e.buffer,e.byteOffset,e.byteLength)}var ve;function ye(e,t){if(he&&e.data instanceof Blob)return e.data.arrayBuffer().then(H).then(t);if(B&&(e.data instanceof ArrayBuffer||ge(e.data)))return t(H(e.data));V(e,!1,e=>{ve||=new TextEncoder,t(ve.encode(e))})}var U=`ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/`,W=typeof Uint8Array>`u`?[]:new Uint8Array(256);for(let e=0;e<64;e++)W[U.charCodeAt(e)]=e;var be=e=>{let t=e.length*.75,n=e.length,r,i=0,a,o,s,c;e[e.length-1]===`=`&&(t--,e[e.length-2]===`=`&&t--);let l=new ArrayBuffer(t),u=new Uint8Array(l);for(r=0;r<n;r+=4)a=W[e.charCodeAt(r)],o=W[e.charCodeAt(r+1)],s=W[e.charCodeAt(r+2)],c=W[e.charCodeAt(r+3)],u[i++]=a<<2|o>>4,u[i++]=(o&15)<<4|s>>2,u[i++]=(s&3)<<6|c&63;return l},xe=typeof ArrayBuffer==`function`,Se=(e,t)=>{if(typeof e!=`string`)return{type:`message`,data:we(e,t)};let n=e.charAt(0);return n===`b`?{type:`message`,data:Ce(e.substring(1),t)}:z[n]?e.length>1?{type:z[n],data:e.substring(1)}:{type:z[n]}:me},Ce=(e,t)=>xe?we(be(e),t):{base64:!0,data:e},we=(e,t)=>{switch(t){case`blob`:return e instanceof Blob?e:new Blob([e]);default:return e instanceof ArrayBuffer?e:e.buffer}},G=``,Te=(e,t)=>{let n=e.length,r=Array(n),i=0;e.forEach((e,a)=>{V(e,!1,e=>{r[a]=e,++i===n&&t(r.join(G))})})},Ee=(e,t)=>{let n=e.split(G),r=[];for(let e=0;e<n.length;e++){let i=Se(n[e],t);if(r.push(i),i.type===`error`)break}return r};function De(){return new TransformStream({transform(e,t){ye(e,n=>{let r=n.length,i;if(r<126)i=new Uint8Array(1),new DataView(i.buffer).setUint8(0,r);else if(r<65536){i=new Uint8Array(3);let e=new DataView(i.buffer);e.setUint8(0,126),e.setUint16(1,r)}else{i=new Uint8Array(9);let e=new DataView(i.buffer);e.setUint8(0,127),e.setBigUint64(1,BigInt(r))}e.data&&typeof e.data!=`string`&&(i[0]|=128),t.enqueue(i),t.enqueue(n)})}})}var K;function q(e){return e.reduce((e,t)=>e+t.length,0)}function J(e,t){if(e[0].length===t)return e.shift();let n=new Uint8Array(t),r=0;for(let i=0;i<t;i++)n[i]=e[0][r++],r===e[0].length&&(e.shift(),r=0);return e.length&&r<e[0].length&&(e[0]=e[0].slice(r)),n}function Y(e,t){K||=new TextDecoder;let n=[],r=0,i=-1,a=!1;return new TransformStream({transform(o,s){for(n.push(o);;){if(r===0){if(q(n)<1)break;let e=J(n,1);a=(e[0]&128)==128,i=e[0]&127,r=i<126?3:i===126?1:2}else if(r===1){if(q(n)<2)break;let e=J(n,2);i=new DataView(e.buffer,e.byteOffset,e.length).getUint16(0),r=3}else if(r===2){if(q(n)<8)break;let e=J(n,8),t=new DataView(e.buffer,e.byteOffset,e.length),a=t.getUint32(0);if(a>2**21-1){s.enqueue(me);break}i=a*2**32+t.getUint32(4),r=3}else{if(q(n)<i)break;let e=J(n,i);s.enqueue(Se(a?e:K.decode(e),t)),r=0}if(i===0||i>e){s.enqueue(me);break}}}})}function X(e){if(e)return Oe(e)}function Oe(e){for(var t in X.prototype)e[t]=X.prototype[t];return e}X.prototype.on=X.prototype.addEventListener=function(e,t){return this._callbacks=this._callbacks||{},(this._callbacks[`$`+e]=this._callbacks[`$`+e]||[]).push(t),this},X.prototype.once=function(e,t){function n(){this.off(e,n),t.apply(this,arguments)}return n.fn=t,this.on(e,n),this},X.prototype.off=X.prototype.removeListener=X.prototype.removeAllListeners=X.prototype.removeEventListener=function(e,t){if(this._callbacks=this._callbacks||{},arguments.length==0)return this._callbacks={},this;var n=this._callbacks[`$`+e];if(!n)return this;if(arguments.length==1)return delete this._callbacks[`$`+e],this;for(var r,i=0;i<n.length;i++)if(r=n[i],r===t||r.fn===t){n.splice(i,1);break}return n.length===0&&delete this._callbacks[`$`+e],this},X.prototype.emit=function(e){this._callbacks=this._callbacks||{};for(var t=Array(arguments.length-1),n=this._callbacks[`$`+e],r=1;r<arguments.length;r++)t[r-1]=arguments[r];if(n){n=n.slice(0);for(var r=0,i=n.length;r<i;++r)n[r].apply(this,t)}return this},X.prototype.emitReserved=X.prototype.emit,X.prototype.listeners=function(e){return this._callbacks=this._callbacks||{},this._callbacks[`$`+e]||[]},X.prototype.hasListeners=function(e){return!!this.listeners(e).length};var ke=typeof Promise==`function`&&typeof Promise.resolve==`function`?e=>Promise.resolve().then(e):(e,t)=>t(e,0),Z=typeof self<`u`?self:typeof window<`u`?window:Function(`return this`)(),Ae=`arraybuffer`;function je(e,...t){return t.reduce((t,n)=>(e.hasOwnProperty(n)&&(t[n]=e[n]),t),{})}var Me=Z.setTimeout,Ne=Z.clearTimeout;function Q(e,t){t.useNativeTimers?(e.setTimeoutFn=Me.bind(Z),e.clearTimeoutFn=Ne.bind(Z)):(e.setTimeoutFn=Z.setTimeout.bind(Z),e.clearTimeoutFn=Z.clearTimeout.bind(Z))}var Pe=1.33;function Fe(e){return typeof e==`string`?Ie(e):Math.ceil((e.byteLength||e.size)*Pe)}function Ie(e){let t=0,n=0;for(let r=0,i=e.length;r<i;r++)t=e.charCodeAt(r),t<128?n+=1:t<2048?n+=2:t<55296||t>=57344?n+=3:(r++,n+=4);return n}function Le(){return Date.now().toString(36).substring(3)+Math.random().toString(36).substring(2,5)}function Re(e){let t=``;for(let n in e)e.hasOwnProperty(n)&&(t.length&&(t+=`&`),t+=encodeURIComponent(n)+`=`+encodeURIComponent(e[n]));return t}function ze(e){let t={},n=e.split(`&`);for(let e=0,r=n.length;e<r;e++){let r=n[e].split(`=`);t[decodeURIComponent(r[0])]=decodeURIComponent(r[1])}return t}var Be=class extends Error{constructor(e,t,n){super(e),this.description=t,this.context=n,this.type=`TransportError`}},Ve=class extends X{constructor(e){super(),this.writable=!1,Q(this,e),this.opts=e,this.query=e.query,this.socket=e.socket,this.supportsBinary=!e.forceBase64}onError(e,t,n){return super.emitReserved(`error`,new Be(e,t,n)),this}open(){return this.readyState=`opening`,this.doOpen(),this}close(){return(this.readyState===`opening`||this.readyState===`open`)&&(this.doClose(),this.onClose()),this}send(e){this.readyState===`open`&&this.write(e)}onOpen(){this.readyState=`open`,this.writable=!0,super.emitReserved(`open`)}onData(e){let t=Se(e,this.socket.binaryType);this.onPacket(t)}onPacket(e){super.emitReserved(`packet`,e)}onClose(e){this.readyState=`closed`,super.emitReserved(`close`,e)}pause(e){}createUri(e,t={}){return e+`://`+this._hostname()+this._port()+this.opts.path+this._query(t)}_hostname(){let e=this.opts.hostname;return e.indexOf(`:`)===-1?e:`[`+e+`]`}_port(){return this.opts.port&&(this.opts.secure&&Number(this.opts.port)!==443||!this.opts.secure&&Number(this.opts.port)!==80)?`:`+this.opts.port:``}_query(e){let t=Re(e);return t.length?`?`+t:``}},He=class extends Ve{constructor(){super(...arguments),this._polling=!1}get name(){return`polling`}doOpen(){this._poll()}pause(e){this.readyState=`pausing`;let t=()=>{this.readyState=`paused`,e()};if(this._polling||!this.writable){let e=0;this._polling&&(e++,this.once(`pollComplete`,function(){--e||t()})),this.writable||(e++,this.once(`drain`,function(){--e||t()}))}else t()}_poll(){this._polling=!0,this.doPoll(),this.emitReserved(`poll`)}onData(e){Ee(e,this.socket.binaryType).forEach(e=>{if(this.readyState===`opening`&&e.type===`open`&&this.onOpen(),e.type===`close`)return this.onClose({description:`transport closed by the server`}),!1;this.onPacket(e)}),this.readyState!==`closed`&&(this._polling=!1,this.emitReserved(`pollComplete`),this.readyState===`open`&&this._poll())}doClose(){let e=()=>{this.write([{type:`close`}])};this.readyState===`open`?e():this.once(`open`,e)}write(e){this.writable=!1,Te(e,e=>{this.doWrite(e,()=>{this.writable=!0,this.emitReserved(`drain`)})})}uri(){let e=this.opts.secure?`https`:`http`,t=this.query||{};return!1!==this.opts.timestampRequests&&(t[this.opts.timestampParam]=Le()),!this.supportsBinary&&!t.sid&&(t.b64=1),this.createUri(e,t)}},Ue=!1;try{Ue=typeof XMLHttpRequest<`u`&&`withCredentials`in new XMLHttpRequest}catch{}var We=Ue;function Ge(){}var Ke=class extends He{constructor(e){if(super(e),typeof location<`u`){let t=location.protocol===`https:`,n=location.port;n||=t?`443`:`80`,this.xd=typeof location<`u`&&e.hostname!==location.hostname||n!==e.port}}doWrite(e,t){let n=this.request({method:`POST`,data:e});n.on(`success`,t),n.on(`error`,(e,t)=>{this.onError(`xhr post error`,e,t)})}doPoll(){let e=this.request();e.on(`data`,this.onData.bind(this)),e.on(`error`,(e,t)=>{this.onError(`xhr poll error`,e,t)}),this.pollXhr=e}},qe=class e extends X{constructor(e,t,n){super(),this.createRequest=e,Q(this,n),this._opts=n,this._method=n.method||`GET`,this._uri=t,this._data=n.data===void 0?null:n.data,this._create()}_create(){var t;let n=je(this._opts,`agent`,`pfx`,`key`,`passphrase`,`cert`,`ca`,`ciphers`,`rejectUnauthorized`,`autoUnref`);n.xdomain=!!this._opts.xd;let r=this._xhr=this.createRequest(n);try{r.open(this._method,this._uri,!0);try{if(this._opts.extraHeaders){r.setDisableHeaderCheck&&r.setDisableHeaderCheck(!0);for(let e in this._opts.extraHeaders)this._opts.extraHeaders.hasOwnProperty(e)&&r.setRequestHeader(e,this._opts.extraHeaders[e])}}catch{}if(this._method===`POST`)try{r.setRequestHeader(`Content-type`,`text/plain;charset=UTF-8`)}catch{}try{r.setRequestHeader(`Accept`,`*/*`)}catch{}(t=this._opts.cookieJar)==null||t.addCookies(r),`withCredentials`in r&&(r.withCredentials=this._opts.withCredentials),this._opts.requestTimeout&&(r.timeout=this._opts.requestTimeout),r.onreadystatechange=()=>{var e;r.readyState===3&&((e=this._opts.cookieJar)==null||e.parseCookies(r.getResponseHeader(`set-cookie`))),r.readyState===4&&(r.status===200||r.status===1223?this._onLoad():this.setTimeoutFn(()=>{this._onError(typeof r.status==`number`?r.status:0)},0))},r.send(this._data)}catch(e){this.setTimeoutFn(()=>{this._onError(e)},0);return}typeof document<`u`&&(this._index=e.requestsCount++,e.requests[this._index]=this)}_onError(e){this.emitReserved(`error`,e,this._xhr),this._cleanup(!0)}_cleanup(t){if(this._xhr!==void 0&&this._xhr!==null){if(this._xhr.onreadystatechange=Ge,t)try{this._xhr.abort()}catch{}typeof document<`u`&&delete e.requests[this._index],this._xhr=null}}_onLoad(){let e=this._xhr.responseText;e!==null&&(this.emitReserved(`data`,e),this.emitReserved(`success`),this._cleanup())}abort(){this._cleanup()}};if(qe.requestsCount=0,qe.requests={},typeof document<`u`){if(typeof attachEvent==`function`)attachEvent(`onunload`,Je);else if(typeof addEventListener==`function`){let e=`onpagehide`in Z?`pagehide`:`unload`;addEventListener(e,Je,!1)}}function Je(){for(let e in qe.requests)qe.requests.hasOwnProperty(e)&&qe.requests[e].abort()}var Ye=(function(){let e=Ze({xdomain:!1});return e&&e.responseType!==null})(),Xe=class extends Ke{constructor(e){super(e);let t=e&&e.forceBase64;this.supportsBinary=Ye&&!t}request(e={}){return Object.assign(e,{xd:this.xd},this.opts),new qe(Ze,this.uri(),e)}};function Ze(e){let t=e.xdomain;try{if(typeof XMLHttpRequest<`u`&&(!t||We))return new XMLHttpRequest}catch{}if(!t)try{return new Z[[`Active`,`Object`].join(`X`)](`Microsoft.XMLHTTP`)}catch{}}var Qe=typeof navigator<`u`&&typeof navigator.product==`string`&&navigator.product.toLowerCase()===`reactnative`,$e=class extends Ve{get name(){return`websocket`}doOpen(){let e=this.uri(),t=this.opts.protocols,n=Qe?{}:je(this.opts,`agent`,`perMessageDeflate`,`pfx`,`key`,`passphrase`,`cert`,`ca`,`ciphers`,`rejectUnauthorized`,`localAddress`,`protocolVersion`,`origin`,`maxPayload`,`family`,`checkServerIdentity`);this.opts.extraHeaders&&(n.headers=this.opts.extraHeaders);try{this.ws=this.createSocket(e,t,n)}catch(e){return this.emitReserved(`error`,e)}this.ws.binaryType=this.socket.binaryType,this.addEventListeners()}addEventListeners(){this.ws.onopen=()=>{this.opts.autoUnref&&this.ws._socket.unref(),this.onOpen()},this.ws.onclose=e=>this.onClose({description:`websocket connection closed`,context:e}),this.ws.onmessage=e=>this.onData(e.data),this.ws.onerror=e=>this.onError(`websocket error`,e)}write(e){this.writable=!1;for(let t=0;t<e.length;t++){let n=e[t],r=t===e.length-1;V(n,this.supportsBinary,e=>{try{this.doWrite(n,e)}catch{}r&&ke(()=>{this.writable=!0,this.emitReserved(`drain`)},this.setTimeoutFn)})}}doClose(){this.ws!==void 0&&(this.ws.onerror=()=>{},this.ws.close(),this.ws=null)}uri(){let e=this.opts.secure?`wss`:`ws`,t=this.query||{};return this.opts.timestampRequests&&(t[this.opts.timestampParam]=Le()),this.supportsBinary||(t.b64=1),this.createUri(e,t)}},et=Z.WebSocket||Z.MozWebSocket,tt={websocket:class extends $e{createSocket(e,t,n){return Qe?new et(e,t,n):t?new et(e,t):new et(e)}doWrite(e,t){this.ws.send(t)}},webtransport:class extends Ve{get name(){return`webtransport`}doOpen(){try{this._transport=new WebTransport(this.createUri(`https`),this.opts.transportOptions[this.name])}catch(e){return this.emitReserved(`error`,e)}this._transport.closed.then(()=>{this.onClose()}).catch(e=>{this.onError(`webtransport error`,e)}),this._transport.ready.then(()=>{this._transport.createBidirectionalStream().then(e=>{let t=Y(2**53-1,this.socket.binaryType),n=e.readable.pipeThrough(t).getReader(),r=De();r.readable.pipeTo(e.writable),this._writer=r.writable.getWriter();let i=()=>{n.read().then(({done:e,value:t})=>{e||(this.onPacket(t),i())}).catch(e=>{})};i();let a={type:`open`};this.query.sid&&(a.data=`{"sid":"${this.query.sid}"}`),this._writer.write(a).then(()=>this.onOpen())})})}write(e){this.writable=!1;for(let t=0;t<e.length;t++){let n=e[t],r=t===e.length-1;this._writer.write(n).then(()=>{r&&ke(()=>{this.writable=!0,this.emitReserved(`drain`)},this.setTimeoutFn)})}}doClose(){var e;(e=this._transport)==null||e.close()}},polling:Xe},nt=/^(?:(?![^:@\/?#]+:[^:@\/]*@)(http|https|ws|wss):\/\/)?((?:(([^:@\/?#]*)(?::([^:@\/?#]*))?)?@)?((?:[a-f0-9]{0,4}:){2,7}[a-f0-9]{0,4}|[^:\/?#]*)(?::(\d*))?)(((\/(?:[^?#](?![^?#\/]*\.[^?#\/.]+(?:[?#]|$)))*\/?)?([^?#\/]*))(?:\?([^#]*))?(?:#(.*))?)/,rt=[`source`,`protocol`,`authority`,`userInfo`,`user`,`password`,`host`,`port`,`relative`,`path`,`directory`,`file`,`query`,`anchor`];function it(e){if(e.length>8e3)throw`URI too long`;let t=e,n=e.indexOf(`[`),r=e.indexOf(`]`);n!=-1&&r!=-1&&(e=e.substring(0,n)+e.substring(n,r).replace(/:/g,`;`)+e.substring(r,e.length));let i=nt.exec(e||``),a={},o=14;for(;o--;)a[rt[o]]=i[o]||``;return n!=-1&&r!=-1&&(a.source=t,a.host=a.host.substring(1,a.host.length-1).replace(/;/g,`:`),a.authority=a.authority.replace(`[`,``).replace(`]`,``).replace(/;/g,`:`),a.ipv6uri=!0),a.pathNames=at(a,a.path),a.queryKey=ot(a,a.query),a}function at(e,t){let n=t.replace(/\/{2,9}/g,`/`).split(`/`);return(t.slice(0,1)==`/`||t.length===0)&&n.splice(0,1),t.slice(-1)==`/`&&n.splice(n.length-1,1),n}function ot(e,t){let n={};return t.replace(/(?:^|&)([^&=]*)=?([^&]*)/g,function(e,t,r){t&&(n[t]=r)}),n}var st=typeof addEventListener==`function`&&typeof removeEventListener==`function`,ct=[];st&&addEventListener(`offline`,()=>{ct.forEach(e=>e())},!1);var lt=class e extends X{constructor(e,t){if(super(),this.binaryType=Ae,this.writeBuffer=[],this._prevBufferLen=0,this._pingInterval=-1,this._pingTimeout=-1,this._maxPayload=-1,this._pingTimeoutTime=1/0,e&&typeof e==`object`&&(t=e,e=null),e){let n=it(e);t.hostname=n.host,t.secure=n.protocol===`https`||n.protocol===`wss`,t.port=n.port,n.query&&(t.query=n.query)}else t.host&&(t.hostname=it(t.host).host);Q(this,t),this.secure=t.secure==null?typeof location<`u`&&location.protocol===`https:`:t.secure,t.hostname&&!t.port&&(t.port=this.secure?`443`:`80`),this.hostname=t.hostname||(typeof location<`u`?location.hostname:`localhost`),this.port=t.port||(typeof location<`u`&&location.port?location.port:this.secure?`443`:`80`),this.transports=[],this._transportsByName={},t.transports.forEach(e=>{let t=e.prototype.name;this.transports.push(t),this._transportsByName[t]=e}),this.opts=Object.assign({path:`/engine.io`,agent:!1,withCredentials:!1,upgrade:!0,timestampParam:`t`,rememberUpgrade:!1,addTrailingSlash:!0,rejectUnauthorized:!0,perMessageDeflate:{threshold:1024},transportOptions:{},closeOnBeforeunload:!1},t),this.opts.path=this.opts.path.replace(/\/$/,``)+(this.opts.addTrailingSlash?`/`:``),typeof this.opts.query==`string`&&(this.opts.query=ze(this.opts.query)),st&&(this.opts.closeOnBeforeunload&&(this._beforeunloadEventListener=()=>{this.transport&&(this.transport.removeAllListeners(),this.transport.close())},addEventListener(`beforeunload`,this._beforeunloadEventListener,!1)),this.hostname!==`localhost`&&(this._offlineEventListener=()=>{this._onClose(`transport close`,{description:`network connection lost`})},ct.push(this._offlineEventListener))),this.opts.withCredentials&&(this._cookieJar=void 0),this._open()}createTransport(e){let t=Object.assign({},this.opts.query);t.EIO=4,t.transport=e,this.id&&(t.sid=this.id);let n=Object.assign({},this.opts,{query:t,socket:this,hostname:this.hostname,secure:this.secure,port:this.port},this.opts.transportOptions[e]);return new this._transportsByName[e](n)}_open(){if(this.transports.length===0){this.setTimeoutFn(()=>{this.emitReserved(`error`,`No transports available`)},0);return}let t=this.opts.rememberUpgrade&&e.priorWebsocketSuccess&&this.transports.indexOf(`websocket`)!==-1?`websocket`:this.transports[0];this.readyState=`opening`;let n=this.createTransport(t);n.open(),this.setTransport(n)}setTransport(e){this.transport&&this.transport.removeAllListeners(),this.transport=e,e.on(`drain`,this._onDrain.bind(this)).on(`packet`,this._onPacket.bind(this)).on(`error`,this._onError.bind(this)).on(`close`,e=>this._onClose(`transport close`,e))}onOpen(){this.readyState=`open`,e.priorWebsocketSuccess=this.transport.name===`websocket`,this.emitReserved(`open`),this.flush()}_onPacket(e){if(this.readyState===`opening`||this.readyState===`open`||this.readyState===`closing`)switch(this.emitReserved(`packet`,e),this.emitReserved(`heartbeat`),e.type){case`open`:this.onHandshake(JSON.parse(e.data));break;case`ping`:this._sendPacket(`pong`),this.emitReserved(`ping`),this.emitReserved(`pong`),this._resetPingTimeout();break;case`error`:let t=Error(`server error`);t.code=e.data,this._onError(t);break;case`message`:this.emitReserved(`data`,e.data),this.emitReserved(`message`,e.data)}}onHandshake(e){this.emitReserved(`handshake`,e),this.id=e.sid,this.transport.query.sid=e.sid,this._pingInterval=e.pingInterval,this._pingTimeout=e.pingTimeout,this._maxPayload=e.maxPayload,this.onOpen(),this.readyState!==`closed`&&this._resetPingTimeout()}_resetPingTimeout(){this.clearTimeoutFn(this._pingTimeoutTimer);let e=this._pingInterval+this._pingTimeout;this._pingTimeoutTime=Date.now()+e,this._pingTimeoutTimer=this.setTimeoutFn(()=>{this._onClose(`ping timeout`)},e),this.opts.autoUnref&&this._pingTimeoutTimer.unref()}_onDrain(){this.writeBuffer.splice(0,this._prevBufferLen),this._prevBufferLen=0,this.writeBuffer.length===0?this.emitReserved(`drain`):this.flush()}flush(){if(this.readyState!==`closed`&&this.transport.writable&&!this.upgrading&&this.writeBuffer.length){let e=this._getWritablePackets();this.transport.send(e),this._prevBufferLen=e.length,this.emitReserved(`flush`)}}_getWritablePackets(){if(!(this._maxPayload&&this.transport.name===`polling`&&this.writeBuffer.length>1))return this.writeBuffer;let e=1;for(let t=0;t<this.writeBuffer.length;t++){let n=this.writeBuffer[t].data;if(n&&(e+=Fe(n)),t>0&&e>this._maxPayload)return this.writeBuffer.slice(0,t);e+=2}return this.writeBuffer}_hasPingExpired(){if(!this._pingTimeoutTime)return!0;let e=Date.now()>this._pingTimeoutTime;return e&&(this._pingTimeoutTime=0,ke(()=>{this._onClose(`ping timeout`)},this.setTimeoutFn)),e}write(e,t,n){return this._sendPacket(`message`,e,t,n),this}send(e,t,n){return this._sendPacket(`message`,e,t,n),this}_sendPacket(e,t,n,r){if(typeof t==`function`&&(r=t,t=void 0),typeof n==`function`&&(r=n,n=null),this.readyState===`closing`||this.readyState===`closed`)return;n||={},n.compress=!1!==n.compress;let i={type:e,data:t,options:n};this.emitReserved(`packetCreate`,i),this.writeBuffer.push(i),r&&this.once(`flush`,r),this.flush()}close(){let e=()=>{this._onClose(`forced close`),this.transport.close()},t=()=>{this.off(`upgrade`,t),this.off(`upgradeError`,t),e()},n=()=>{this.once(`upgrade`,t),this.once(`upgradeError`,t)};return(this.readyState===`opening`||this.readyState===`open`)&&(this.readyState=`closing`,this.writeBuffer.length?this.once(`drain`,()=>{this.upgrading?n():e()}):this.upgrading?n():e()),this}_onError(t){if(e.priorWebsocketSuccess=!1,this.opts.tryAllTransports&&this.transports.length>1&&this.readyState===`opening`)return this.transports.shift(),this._open();this.emitReserved(`error`,t),this._onClose(`transport error`,t)}_onClose(e,t){if(this.readyState===`opening`||this.readyState===`open`||this.readyState===`closing`){if(this.clearTimeoutFn(this._pingTimeoutTimer),this.transport.removeAllListeners(`close`),this.transport.close(),this.transport.removeAllListeners(),st&&(this._beforeunloadEventListener&&removeEventListener(`beforeunload`,this._beforeunloadEventListener,!1),this._offlineEventListener)){let e=ct.indexOf(this._offlineEventListener);e!==-1&&ct.splice(e,1)}this.readyState=`closed`,this.id=null,this.emitReserved(`close`,e,t),this.writeBuffer=[],this._prevBufferLen=0}}};lt.protocol=4;var ut=class extends lt{constructor(){super(...arguments),this._upgrades=[]}onOpen(){if(super.onOpen(),this.readyState===`open`&&this.opts.upgrade)for(let e=0;e<this._upgrades.length;e++)this._probe(this._upgrades[e])}_probe(e){let t=this.createTransport(e),n=!1;lt.priorWebsocketSuccess=!1;let r=()=>{n||(t.send([{type:`ping`,data:`probe`}]),t.once(`packet`,e=>{if(!n){if(e.type===`pong`&&e.data===`probe`){if(this.upgrading=!0,this.emitReserved(`upgrading`,t),!t)return;lt.priorWebsocketSuccess=t.name===`websocket`,this.transport.pause(()=>{n||this.readyState!==`closed`&&(l(),this.setTransport(t),t.send([{type:`upgrade`}]),this.emitReserved(`upgrade`,t),t=null,this.upgrading=!1,this.flush())})}else{let e=Error(`probe error`);e.transport=t.name,this.emitReserved(`upgradeError`,e)}}}))};function i(){n||(n=!0,l(),t.close(),t=null)}let a=e=>{let n=Error(`probe error: `+e);n.transport=t.name,i(),this.emitReserved(`upgradeError`,n)};function o(){a(`transport closed`)}function s(){a(`socket closed`)}function c(e){t&&e.name!==t.name&&i()}let l=()=>{t.removeListener(`open`,r),t.removeListener(`error`,a),t.removeListener(`close`,o),this.off(`close`,s),this.off(`upgrading`,c)};t.once(`open`,r),t.once(`error`,a),t.once(`close`,o),this.once(`close`,s),this.once(`upgrading`,c),this._upgrades.indexOf(`webtransport`)!==-1&&e!==`webtransport`?this.setTimeoutFn(()=>{n||t.open()},200):t.open()}onHandshake(e){this._upgrades=this._filterUpgrades(e.upgrades),super.onHandshake(e)}_filterUpgrades(e){let t=[];for(let n=0;n<e.length;n++)~this.transports.indexOf(e[n])&&t.push(e[n]);return t}},dt=class extends ut{constructor(e,t={}){let n=typeof e==`object`,r=n?{...e}:{...t};(!r.transports||r.transports&&typeof r.transports[0]==`string`)&&(r.transports=(r.transports||[`polling`,`websocket`,`webtransport`]).map(e=>tt[e]).filter(e=>!!e)),super(n?r:e,r)}};dt.protocol;function ft(e,t=``,n){let r=e;n||=typeof location<`u`&&location,e??=n.protocol+`//`+n.host,typeof e==`string`&&(e.charAt(0)===`/`&&(e=e.charAt(1)===`/`?n.protocol+e:n.host+e),/^(https?|wss?):\/\//.test(e)||(e=n===void 0?`https://`+e:n.protocol+`//`+e),r=it(e)),r.port||(/^(http|ws)$/.test(r.protocol)?r.port=`80`:/^(http|ws)s$/.test(r.protocol)&&(r.port=`443`)),r.path=r.path||`/`;let i=r.host.indexOf(`:`)===-1?r.host:`[`+r.host+`]`;return r.id=r.protocol+`://`+i+`:`+r.port+t,r.href=r.protocol+`://`+i+(n&&n.port===r.port?``:`:`+r.port),r}var pt=typeof ArrayBuffer==`function`,mt=e=>typeof ArrayBuffer.isView==`function`?ArrayBuffer.isView(e):e.buffer instanceof ArrayBuffer,ht=Object.prototype.toString,gt=typeof Blob==`function`||typeof Blob<`u`&&ht.call(Blob)===`[object BlobConstructor]`,_t=typeof File==`function`||typeof File<`u`&&ht.call(File)===`[object FileConstructor]`;function vt(e){return pt&&(e instanceof ArrayBuffer||mt(e))||gt&&e instanceof Blob||_t&&e instanceof File}function yt(e,t){if(!e||typeof e!=`object`)return!1;if(Array.isArray(e)){for(let t=0,n=e.length;t<n;t++)if(yt(e[t]))return!0;return!1}if(vt(e))return!0;if(e.toJSON&&typeof e.toJSON==`function`&&arguments.length===1)return yt(e.toJSON(),!0);for(let t in e)if(Object.prototype.hasOwnProperty.call(e,t)&&yt(e[t]))return!0;return!1}function bt(e){let t=[],n=e.data,r=e;return r.data=xt(n,t),r.attachments=t.length,{packet:r,buffers:t}}function xt(e,t,n){if(!e)return e;if(vt(e)){let n={_placeholder:!0,num:t.length};return t.push(e),n}if(Array.isArray(e)){let n=Array(e.length);for(let r=0;r<e.length;r++)n[r]=xt(e[r],t);return n}if(typeof e==`object`&&!(e instanceof Date)){if(e.toJSON&&typeof e.toJSON==`function`&&!n)return xt(e.toJSON(),t,!0);let r={};for(let n in e)Object.prototype.hasOwnProperty.call(e,n)&&(r[n]=xt(e[n],t));return r}return e}function St(e,t){return e.data=Ct(e.data,t),delete e.attachments,e}function Ct(e,t){if(!e)return e;if(e&&e._placeholder===!0){if(typeof e.num==`number`&&e.num>=0&&e.num<t.length)return t[e.num];throw Error(`illegal attachments`)}if(Array.isArray(e))for(let n=0;n<e.length;n++)e[n]=Ct(e[n],t);else if(typeof e==`object`)for(let n in e)Object.prototype.hasOwnProperty.call(e,n)&&(e[n]=Ct(e[n],t));return e}var wt=P({Decoder:()=>Dt,Encoder:()=>Et,PacketType:()=>$,isPacketValid:()=>Pt,protocol:()=>5}),Tt=[`connect`,`connect_error`,`disconnect`,`disconnecting`,`newListener`,`removeListener`],$;(function(e){e[e.CONNECT=0]=`CONNECT`,e[e.DISCONNECT=1]=`DISCONNECT`,e[e.EVENT=2]=`EVENT`,e[e.ACK=3]=`ACK`,e[e.CONNECT_ERROR=4]=`CONNECT_ERROR`,e[e.BINARY_EVENT=5]=`BINARY_EVENT`,e[e.BINARY_ACK=6]=`BINARY_ACK`})($||={});var Et=class{constructor(e){this.replacer=e}encode(e){return(e.type===$.EVENT||e.type===$.ACK)&&yt(e)?this.encodeAsBinary({type:e.type===$.EVENT?$.BINARY_EVENT:$.BINARY_ACK,nsp:e.nsp,data:e.data,id:e.id}):[this.encodeAsString(e)]}encodeAsString(e){let t=``+e.type;return(e.type===$.BINARY_EVENT||e.type===$.BINARY_ACK)&&(t+=e.attachments+`-`),e.nsp&&e.nsp!==`/`&&(t+=e.nsp+`,`),e.id!=null&&(t+=e.id),e.data!=null&&(t+=JSON.stringify(e.data,this.replacer)),t}encodeAsBinary(e){let t=bt(e),n=this.encodeAsString(t.packet),r=t.buffers;return r.unshift(n),r}},Dt=class e extends X{constructor(e){super(),this.opts=Object.assign({reviver:void 0,maxAttachments:10},typeof e==`function`?{reviver:e}:e)}add(e){let t;if(typeof e==`string`){if(this.reconstructor)throw Error(`got plaintext data when reconstructing a packet`);t=this.decodeString(e);let n=t.type===$.BINARY_EVENT;n||t.type===$.BINARY_ACK?(t.type=n?$.EVENT:$.ACK,this.reconstructor=new Ot(t)):super.emitReserved(`decoded`,t)}else if(vt(e)||e.base64){if(this.reconstructor)t=this.reconstructor.takeBinaryData(e),t&&(this.reconstructor=null,super.emitReserved(`decoded`,t));else throw Error(`got binary data when not reconstructing a packet`)}else throw Error(`Unknown type: `+e)}decodeString(t){let n=0,r={type:Number(t.charAt(0))};if($[r.type]===void 0)throw Error(`unknown packet type `+r.type);if(r.type===$.BINARY_EVENT||r.type===$.BINARY_ACK){let e=n+1;for(;t.charAt(++n)!==`-`&&n!=t.length;);let i=t.substring(e,n);if(i!=Number(i)||t.charAt(n)!==`-`)throw Error(`Illegal attachments`);let a=Number(i);if(!At(a)||a<1)throw Error(`Illegal attachments`);if(a>this.opts.maxAttachments)throw Error(`too many attachments`);r.attachments=a}if(t.charAt(n+1)===`/`){let e=n+1;for(;++n&&t.charAt(n)!==`,`&&n!==t.length;);r.nsp=t.substring(e,n)}else r.nsp=`/`;let i=t.charAt(n+1);if(i!==``&&Number(i)==i){let e=n+1;for(;++n;){let e=t.charAt(n);if(e==null||Number(e)!=e){--n;break}if(n===t.length)break}r.id=Number(t.substring(e,n+1))}if(t.charAt(++n)){let i=this.tryParse(t.substr(n));if(e.isPayloadValid(r.type,i))r.data=i;else throw Error(`invalid payload`)}return r}tryParse(e){try{return JSON.parse(e,this.opts.reviver)}catch{return!1}}static isPayloadValid(e,t){switch(e){case $.CONNECT:return Mt(t);case $.DISCONNECT:return t===void 0;case $.CONNECT_ERROR:return typeof t==`string`||Mt(t);case $.EVENT:case $.BINARY_EVENT:return Array.isArray(t)&&(typeof t[0]==`number`||typeof t[0]==`string`&&Tt.indexOf(t[0])===-1);case $.ACK:case $.BINARY_ACK:return Array.isArray(t)}}destroy(){this.reconstructor&&=(this.reconstructor.finishedReconstruction(),null)}},Ot=class{constructor(e){this.packet=e,this.buffers=[],this.reconPack=e}takeBinaryData(e){if(this.buffers.push(e),this.buffers.length===this.reconPack.attachments){let e=St(this.reconPack,this.buffers);return this.finishedReconstruction(),e}return null}finishedReconstruction(){this.reconPack=null,this.buffers=[]}};function kt(e){return typeof e==`string`}var At=Number.isInteger||function(e){return typeof e==`number`&&isFinite(e)&&Math.floor(e)===e};function jt(e){return e===void 0||At(e)}function Mt(e){return Object.prototype.toString.call(e)===`[object Object]`}function Nt(e,t){switch(e){case $.CONNECT:return t===void 0||Mt(t);case $.DISCONNECT:return t===void 0;case $.EVENT:return Array.isArray(t)&&(typeof t[0]==`number`||typeof t[0]==`string`&&Tt.indexOf(t[0])===-1);case $.ACK:return Array.isArray(t);case $.CONNECT_ERROR:return typeof t==`string`||Mt(t);default:return!1}}function Pt(e){return kt(e.nsp)&&jt(e.id)&&Nt(e.type,e.data)}function Ft(e,t,n){return e.on(t,n),function(){e.off(t,n)}}var It=Object.freeze({connect:1,connect_error:1,disconnect:1,disconnecting:1,newListener:1,removeListener:1}),Lt=class extends X{constructor(e,t,n){super(),this.connected=!1,this.recovered=!1,this.receiveBuffer=[],this.sendBuffer=[],this._queue=[],this._queueSeq=0,this.ids=0,this.acks={},this.flags={},this.io=e,this.nsp=t,n&&n.auth&&(this.auth=n.auth),this._opts=Object.assign({},n),this.io._autoConnect&&this.open()}get disconnected(){return!this.connected}subEvents(){if(this.subs)return;let e=this.io;this.subs=[Ft(e,`open`,this.onopen.bind(this)),Ft(e,`packet`,this.onpacket.bind(this)),Ft(e,`error`,this.onerror.bind(this)),Ft(e,`close`,this.onclose.bind(this))]}get active(){return!!this.subs}connect(){return this.connected?this:(this.subEvents(),this.io._reconnecting||this.io.open(),this.io._readyState===`open`&&this.onopen(),this)}open(){return this.connect()}send(...e){return e.unshift(`message`),this.emit.apply(this,e),this}emit(e,...t){if(It.hasOwnProperty(e))throw Error(`"`+e.toString()+`" is a reserved event name`);if(t.unshift(e),this._opts.retries&&!this.flags.fromQueue&&!this.flags.volatile)return this._addToQueue(t),this;let n={type:$.EVENT,data:t};if(n.options={},n.options.compress=this.flags.compress!==!1,typeof t[t.length-1]==`function`){let e=this.ids++,r=t.pop();this._registerAckCallback(e,r),n.id=e}let r=this.io.engine?.transport?.writable,i=this.connected&&!this.io.engine?._hasPingExpired();return this.flags.volatile&&!r||(i?(this.notifyOutgoingListeners(n),this.packet(n)):this.sendBuffer.push(n)),this.flags={},this}_registerAckCallback(e,t){let n=this.flags.timeout??this._opts.ackTimeout;if(n===void 0){this.acks[e]=t;return}let r=this.io.setTimeoutFn(()=>{delete this.acks[e];for(let t=0;t<this.sendBuffer.length;t++)this.sendBuffer[t].id===e&&this.sendBuffer.splice(t,1);t.call(this,Error(`operation has timed out`))},n),i=(...e)=>{this.io.clearTimeoutFn(r),t.apply(this,e)};i.withError=!0,this.acks[e]=i}emitWithAck(e,...t){return new Promise((n,r)=>{let i=(e,t)=>e?r(e):n(t);i.withError=!0,t.push(i),this.emit(e,...t)})}_addToQueue(e){let t;typeof e[e.length-1]==`function`&&(t=e.pop());let n={id:this._queueSeq++,tryCount:0,pending:!1,args:e,flags:Object.assign({fromQueue:!0},this.flags)};e.push((e,...r)=>(this._queue[0],e===null?(this._queue.shift(),t&&t(null,...r)):n.tryCount>this._opts.retries&&(this._queue.shift(),t&&t(e)),n.pending=!1,this._drainQueue())),this._queue.push(n),this._drainQueue()}_drainQueue(e=!1){if(!this.connected||this._queue.length===0)return;let t=this._queue[0];(!t.pending||e)&&(t.pending=!0,t.tryCount++,this.flags=t.flags,this.emit.apply(this,t.args))}packet(e){e.nsp=this.nsp,this.io._packet(e)}onopen(){typeof this.auth==`function`?this.auth(e=>{this._sendConnectPacket(e)}):this._sendConnectPacket(this.auth)}_sendConnectPacket(e){this.packet({type:$.CONNECT,data:this._pid?Object.assign({pid:this._pid,offset:this._lastOffset},e):e})}onerror(e){this.connected||this.emitReserved(`connect_error`,e)}onclose(e,t){this.connected=!1,delete this.id,this.emitReserved(`disconnect`,e,t),this._clearAcks()}_clearAcks(){Object.keys(this.acks).forEach(e=>{if(!this.sendBuffer.some(t=>String(t.id)===e)){let t=this.acks[e];delete this.acks[e],t.withError&&t.call(this,Error(`socket has been disconnected`))}})}onpacket(e){if(e.nsp===this.nsp)switch(e.type){case $.CONNECT:e.data&&e.data.sid?this.onconnect(e.data.sid,e.data.pid):this.emitReserved(`connect_error`,Error(`It seems you are trying to reach a Socket.IO server in v2.x with a v3.x client, but they are not compatible (more information here: https://socket.io/docs/v3/migrating-from-2-x-to-3-0/)`));break;case $.EVENT:case $.BINARY_EVENT:this.onevent(e);break;case $.ACK:case $.BINARY_ACK:this.onack(e);break;case $.DISCONNECT:this.ondisconnect();break;case $.CONNECT_ERROR:this.destroy();let t=Error(e.data.message);t.data=e.data.data,this.emitReserved(`connect_error`,t)}}onevent(e){let t=e.data||[];e.id!=null&&t.push(this.ack(e.id)),this.connected?this.emitEvent(t):this.receiveBuffer.push(Object.freeze(t))}emitEvent(e){if(this._anyListeners&&this._anyListeners.length){let t=this._anyListeners.slice();for(let n of t)n.apply(this,e)}super.emit.apply(this,e),this._pid&&e.length&&typeof e[e.length-1]==`string`&&(this._lastOffset=e[e.length-1])}ack(e){let t=this,n=!1;return function(...r){n||(n=!0,t.packet({type:$.ACK,id:e,data:r}))}}onack(e){let t=this.acks[e.id];typeof t==`function`&&(delete this.acks[e.id],t.withError&&e.data.unshift(null),t.apply(this,e.data))}onconnect(e,t){this.id=e,this.recovered=t&&this._pid===t,this._pid=t,this.connected=!0,this.emitBuffered(),this._drainQueue(!0),this.emitReserved(`connect`)}emitBuffered(){this.receiveBuffer.forEach(e=>this.emitEvent(e)),this.receiveBuffer=[],this.sendBuffer.forEach(e=>{this.notifyOutgoingListeners(e),this.packet(e)}),this.sendBuffer=[]}ondisconnect(){this.destroy(),this.onclose(`io server disconnect`)}destroy(){this.subs&&=(this.subs.forEach(e=>e()),void 0),this.io._destroy(this)}disconnect(){return this.connected&&this.packet({type:$.DISCONNECT}),this.destroy(),this.connected&&this.onclose(`io client disconnect`),this}close(){return this.disconnect()}compress(e){return this.flags.compress=e,this}get volatile(){return this.flags.volatile=!0,this}timeout(e){return this.flags.timeout=e,this}onAny(e){return this._anyListeners=this._anyListeners||[],this._anyListeners.push(e),this}prependAny(e){return this._anyListeners=this._anyListeners||[],this._anyListeners.unshift(e),this}offAny(e){if(!this._anyListeners)return this;if(e){let t=this._anyListeners;for(let n=0;n<t.length;n++)if(e===t[n])return t.splice(n,1),this}else this._anyListeners=[];return this}listenersAny(){return this._anyListeners||[]}onAnyOutgoing(e){return this._anyOutgoingListeners=this._anyOutgoingListeners||[],this._anyOutgoingListeners.push(e),this}prependAnyOutgoing(e){return this._anyOutgoingListeners=this._anyOutgoingListeners||[],this._anyOutgoingListeners.unshift(e),this}offAnyOutgoing(e){if(!this._anyOutgoingListeners)return this;if(e){let t=this._anyOutgoingListeners;for(let n=0;n<t.length;n++)if(e===t[n])return t.splice(n,1),this}else this._anyOutgoingListeners=[];return this}listenersAnyOutgoing(){return this._anyOutgoingListeners||[]}notifyOutgoingListeners(e){if(this._anyOutgoingListeners&&this._anyOutgoingListeners.length){let t=this._anyOutgoingListeners.slice();for(let n of t)n.apply(this,e.data)}}};function Rt(e){e||={},this.ms=e.min||100,this.max=e.max||1e4,this.factor=e.factor||2,this.jitter=e.jitter>0&&e.jitter<=1?e.jitter:0,this.attempts=0}Rt.prototype.duration=function(){var e=this.ms*this.factor**+this.attempts++;if(this.jitter){var t=Math.random(),n=Math.floor(t*this.jitter*e);e=Math.floor(t*10)&1?e+n:e-n}return Math.min(e,this.max)|0},Rt.prototype.reset=function(){this.attempts=0},Rt.prototype.setMin=function(e){this.ms=e},Rt.prototype.setMax=function(e){this.max=e},Rt.prototype.setJitter=function(e){this.jitter=e};var zt=class extends X{constructor(e,t){super(),this.nsps={},this.subs=[],e&&typeof e==`object`&&(t=e,e=void 0),t||={},t.path=t.path||`/socket.io`,this.opts=t,Q(this,t),this.reconnection(t.reconnection!==!1),this.reconnectionAttempts(t.reconnectionAttempts||1/0),this.reconnectionDelay(t.reconnectionDelay||1e3),this.reconnectionDelayMax(t.reconnectionDelayMax||5e3),this.randomizationFactor(t.randomizationFactor??.5),this.backoff=new Rt({min:this.reconnectionDelay(),max:this.reconnectionDelayMax(),jitter:this.randomizationFactor()}),this.timeout(t.timeout==null?2e4:t.timeout),this._readyState=`closed`,this.uri=e;let n=t.parser||wt;this.encoder=new n.Encoder,this.decoder=new n.Decoder,this._autoConnect=t.autoConnect!==!1,this._autoConnect&&this.open()}reconnection(e){return arguments.length?(this._reconnection=!!e,e||(this.skipReconnect=!0),this):this._reconnection}reconnectionAttempts(e){return e===void 0?this._reconnectionAttempts:(this._reconnectionAttempts=e,this)}reconnectionDelay(e){var t;return e===void 0?this._reconnectionDelay:(this._reconnectionDelay=e,(t=this.backoff)==null||t.setMin(e),this)}randomizationFactor(e){var t;return e===void 0?this._randomizationFactor:(this._randomizationFactor=e,(t=this.backoff)==null||t.setJitter(e),this)}reconnectionDelayMax(e){var t;return e===void 0?this._reconnectionDelayMax:(this._reconnectionDelayMax=e,(t=this.backoff)==null||t.setMax(e),this)}timeout(e){return arguments.length?(this._timeout=e,this):this._timeout}maybeReconnectOnOpen(){!this._reconnecting&&this._reconnection&&this.backoff.attempts===0&&this.reconnect()}open(e){if(~this._readyState.indexOf(`open`))return this;this.engine=new dt(this.uri,this.opts);let t=this.engine,n=this;this._readyState=`opening`,this.skipReconnect=!1;let r=Ft(t,`open`,function(){n.onopen(),e&&e()}),i=t=>{this.cleanup(),this._readyState=`closed`,this.emitReserved(`error`,t),e?e(t):this.maybeReconnectOnOpen()},a=Ft(t,`error`,i);if(!1!==this._timeout){let e=this._timeout,n=this.setTimeoutFn(()=>{r(),i(Error(`timeout`)),t.close()},e);this.opts.autoUnref&&n.unref(),this.subs.push(()=>{this.clearTimeoutFn(n)})}return this.subs.push(r),this.subs.push(a),this}connect(e){return this.open(e)}onopen(){this.cleanup(),this._readyState=`open`,this.emitReserved(`open`);let e=this.engine;this.subs.push(Ft(e,`ping`,this.onping.bind(this)),Ft(e,`data`,this.ondata.bind(this)),Ft(e,`error`,this.onerror.bind(this)),Ft(e,`close`,this.onclose.bind(this)),Ft(this.decoder,`decoded`,this.ondecoded.bind(this)))}onping(){this.emitReserved(`ping`)}ondata(e){try{this.decoder.add(e)}catch(e){this.onclose(`parse error`,e)}}ondecoded(e){ke(()=>{this.emitReserved(`packet`,e)},this.setTimeoutFn)}onerror(e){this.emitReserved(`error`,e)}socket(e,t){let n=this.nsps[e];return n?this._autoConnect&&!n.active&&n.connect():(n=new Lt(this,e,t),this.nsps[e]=n),n}_destroy(e){let t=Object.keys(this.nsps);for(let e of t)if(this.nsps[e].active)return;this._close()}_packet(e){let t=this.encoder.encode(e);for(let n=0;n<t.length;n++)this.engine.write(t[n],e.options)}cleanup(){this.subs.forEach(e=>e()),this.subs.length=0,this.decoder.destroy()}_close(){this.skipReconnect=!0,this._reconnecting=!1,this.onclose(`forced close`)}disconnect(){return this._close()}onclose(e,t){var n;this.cleanup(),(n=this.engine)==null||n.close(),this.backoff.reset(),this._readyState=`closed`,this.emitReserved(`close`,e,t),this._reconnection&&!this.skipReconnect&&this.reconnect()}reconnect(){if(this._reconnecting||this.skipReconnect)return this;let e=this;if(this.backoff.attempts>=this._reconnectionAttempts)this.backoff.reset(),this.emitReserved(`reconnect_failed`),this._reconnecting=!1;else{let t=this.backoff.duration();this._reconnecting=!0;let n=this.setTimeoutFn(()=>{e.skipReconnect||(this.emitReserved(`reconnect_attempt`,e.backoff.attempts),!e.skipReconnect&&e.open(t=>{t?(e._reconnecting=!1,e.reconnect(),this.emitReserved(`reconnect_error`,t)):e.onreconnect()}))},t);this.opts.autoUnref&&n.unref(),this.subs.push(()=>{this.clearTimeoutFn(n)})}}onreconnect(){let e=this.backoff.attempts;this._reconnecting=!1,this.backoff.reset(),this.emitReserved(`reconnect`,e)}},Bt={};function Vt(e,t){typeof e==`object`&&(t=e,e=void 0),t||={};let n=ft(e,t.path||`/socket.io`),r=n.source,i=n.id,a=n.path,o=Bt[i]&&a in Bt[i].nsps,s=t.forceNew||t[`force new connection`]||!1===t.multiplex||o,c;return s?c=new zt(r,t):(Bt[i]||(Bt[i]=new zt(r,t)),c=Bt[i]),n.query&&!t.query&&(t.query=n.queryKey),c.socket(n.path,t)}Object.assign(Vt,{Manager:zt,Socket:Lt,io:Vt,connect:Vt});var Ht=d(`<header class="dw-header svelte-isll26"><div class="dw-header-inner svelte-isll26"><div class="brand svelte-isll26"><span class="logo-wrap svelte-isll26"><span class="logo-glow svelte-isll26" aria-hidden="true"></span> <img src="/logo.png" alt="" width="36" height="36" class="svelte-isll26"/></span> <span class="wordmark svelte-isll26"><span class="name svelte-isll26">DictaWhisper</span> <span class="kicker svelte-isll26">Local voice journal</span></span></div> <div class="tools svelte-isll26"><div class="pills svelte-isll26" aria-label="Health"><span> </span> <span> </span> <span> </span></div> <button type="button" class="dw-btn-secondary dw-btn-compact">Tools</button> <button type="button" class="dw-btn-secondary dw-btn-compact">Help</button></div></div></header>`);function Ut(e,n){ne(n,!1);let r=ae(),i=v({label:`Whisper`,state:`unknown`,title:``}),a=v({label:`ollanet`,state:`unknown`,title:``}),u=v({label:`…`,state:`unknown`,title:``}),d;function f(e){return e===`fail`?`dw-pill is-fail`:e===`warn`?`dw-pill is-warn`:`dw-pill`}async function p(){try{let e=await(await fetch(`/health`)).json().catch(()=>null);if(!e)return;let t=e.whisperWorker||`off`;t===`ready`?y(i,{label:`Whisper`,state:`ok`,title:`ready · ${e.whisper||``}`}):t===`starting`?y(i,{label:`Starting`,state:`warn`,title:`Whisper worker is starting`}):y(i,{label:`Whisper`,state:`fail`,title:`worker ${t}`}),e.ollanet?.reachable?y(a,{label:`ollanet`,state:`ok`,title:e.ollanet.cleanModel||e.ollanet.machine||`reachable`}):e.ollanet?.machine||e.ollanet?.cleanModel?y(a,{label:`ollanet`,state:`fail`,title:`unreachable`}):y(a,{label:`ollanet`,state:`warn`,title:`not configured`});let n=String(e.device||``).toLowerCase();y(u,{label:n===`cpu`?`CPU`:`GPU`,state:n===`cpu`?`warn`:`ok`,title:e.device||``})}catch{y(i,{label:`Whisper`,state:`fail`,title:`health unreachable`}),y(a,{label:`ollanet`,state:`fail`,title:`health unreachable`}),y(u,{label:`…`,state:`unknown`,title:``})}}ee(()=>{p(),d=setInterval(()=>void p(),15e3)}),O(()=>{d&&clearInterval(d)}),re();var h=Ht(),g=o(h),_=l(o(g),2),b=o(_),S=o(b),C=M(S,!0),w=l(S,2),T=M(w,!0),te=l(w,2),E=M(te,!0);j(b);var k=l(b,2),ie=l(k,2);j(_),j(g),j(h),s((e,t,n)=>{I(S,1,e,`svelte-isll26`),D(S,`title`,c(i).title),A(C,c(i).label),I(w,1,t,`svelte-isll26`),D(w,`title`,c(a).title),A(T,c(a).label),I(te,1,n,`svelte-isll26`),D(te,`title`,c(u).title),A(E,c(u).label)},[()=>x(f(c(i).state)),()=>x(f(c(a).state)),()=>x(f(c(u).state))]),m(`click`,k,()=>r(`tools`)),m(`click`,ie,()=>r(`help`)),t(e,h),ce()}var Wt=d(`<p class="dw-muted svelte-1v6qg5g"> </p>`),Gt=d(`<p class="dw-error svelte-1v6qg5g"> </p>`),Kt=d(`<section aria-label="Record or drop audio"><div class="well svelte-1v6qg5g"><canvas class="visualizer svelte-1v6qg5g" height="60"></canvas></div> <div class="row svelte-1v6qg5g"><button type="button"> </button> <button type="button" class="dw-btn-secondary">Stop</button> <button type="button" class="dw-btn-secondary">Drop a file</button> <input class="file svelte-1v6qg5g" type="file" accept="audio/*" multiple=""/></div> <p class="hint svelte-1v6qg5g">Drag and drop audio here.</p> <!> <!></section>`);function qt(e,n){ne(n,!1);let r=v(),i=v(),a=v(),u,d,f=null,h=[],g=v(!1),b=v(!1),x=v(``),S=v(``),C=0;function T(e){return String(e).padStart(2,`0`)}function te(){let e=new Date;return`${e.getFullYear()}-${T(e.getMonth()+1)}-${T(e.getDate())}_${T(e.getHours())}-${T(e.getMinutes())}-${T(e.getSeconds())}`}function E(){c(r)&&c(i)&&(_(r,c(r).width=c(i).clientWidth),_(r,c(r).height=60),D())}function D(){u&&c(r)&&(u.fillStyle=`rgb(0 0 0 / 0.35)`,u.fillRect(0,0,c(r).width,c(r).height))}ee(()=>{u=c(r).getContext(`2d`),E();let e=new ResizeObserver(()=>E());return c(i)&&e.observe(c(i)),()=>e.disconnect()}),O(()=>{C&&cancelAnimationFrame(C),f?.state===`recording`&&f.stop()});async function k(){if(!navigator.mediaDevices?.getUserMedia)throw Error(`getUserMedia not supported`);let e=await navigator.mediaDevices.getUserMedia({audio:!0});f=new MediaRecorder(e),f.onstop=function(){let e=`voice-recording_${te()}`;de(new Blob(h,{type:`audio/webm; codecs=opus`}),e),h=[]},f.ondataavailable=function(e){h.push(e.data)},fe(e)}async function ie(){y(x,``);try{f||await k(),h=[],f.start(),y(g,!0)}catch(e){y(x,`Microphone access is required to record.`),console.log(`The following error occured: `+e)}}function ae(){f&&f.state!==`inactive`&&(f.stop(),y(g,!1),D())}async function oe(e,t){let n=new FormData,r=e.name||`${t}.webm`;n.append(`file`,e,r),n.append(`clipName`,t);let i=await fetch(`/audio`,{method:`POST`,body:n}),a=await i.json().catch(()=>({}));if(!i.ok)throw Error(a.error||`upload failed (${i.status})`);return a}function se(e){e.preventDefault(),y(b,!0)}function N(){y(b,!1)}function le(e){e.preventDefault(),y(b,!1),P(e.dataTransfer.files)}function ue(e){P(e.target.files),e.target.value=``}async function de(e,t=null){t===null&&(t=`${e.name.split(`.`).slice(0,-1).join(`.`)}_${te()}`),y(S,`Sending ${t}…`);try{await oe(e,t),y(S,``)}catch(e){y(x,e.message||String(e)),y(S,``)}}function P(e){e?.length&&(y(x,``),Array.from(e).forEach(e=>{e.type.startsWith(`audio/`)?de(e):y(x,`Unsupported file type. Please upload an audio file.`)}))}function fe(e){d||=new AudioContext;let t=d.createMediaStreamSource(e),n=d.createAnalyser();n.fftSize=2048;let i=n.frequencyBinCount,a=new Uint8Array(i);t.connect(n);function o(){if(C=requestAnimationFrame(o),!u||!c(r))return;let e=c(r).width,t=c(r).height;if(u.fillStyle=`rgb(0 0 0 / 0.35)`,u.fillRect(0,0,e,t),!c(g)){u.strokeStyle=`rgb(251 191 36 / 0.25)`,u.beginPath(),u.moveTo(0,t/2),u.lineTo(e,t/2),u.stroke();return}n.getByteTimeDomainData(a),u.lineWidth=2,u.strokeStyle=`#fcd34d`,u.beginPath();let s=e/i,l=0;for(let e=0;e<i;e++){let n=a[e]/128*t/2;e===0?u.moveTo(l,n):u.lineTo(l,n),l+=s}u.lineTo(c(r).width,c(r).height/2),u.stroke()}o()}re();var F=Kt();let pe;var L=o(F),R=o(L);w(R,e=>y(r,e),()=>c(r)),j(L),w(L,e=>y(i,e),()=>c(i));var z=l(L,2),me=o(z);let he;var B=M(me,!0),ge=l(me,2),V=l(ge,2),_e=l(V,2);w(_e,e=>y(a,e),()=>c(a)),j(z);var H=l(z,4),ve=e=>{var n=Wt(),r=M(n,!0);s(()=>A(r,c(S))),t(e,n)};p(H,e=>{c(S)&&e(ve)});var ye=l(H,2),U=e=>{var n=Gt(),r=M(n,!0);s(()=>A(r,c(x))),t(e,n)};p(ye,e=>{c(x)&&e(U)}),j(F),s(()=>{pe=I(F,1,`dw-card-elevated capture svelte-1v6qg5g`,null,pe,{"is-drop":c(b)}),he=I(me,1,`dw-btn-primary`,null,he,{"is-recording":c(g)}),me.disabled=c(g),A(B,c(g)?`Recording…`:`Record`),ge.disabled=!c(g)}),m(`click`,me,ie),m(`click`,ge,ae),m(`click`,V,()=>c(a)?.click()),m(`change`,_e,ue),m(`dragover`,F,se),m(`dragleave`,F,N),m(`drop`,F,le),t(e,F),ce()}var Jt=d(`<div class="dimmer svelte-11gx8d0" role="presentation"></div> <div class="dw-card-elevated drawer svelte-11gx8d0" role="dialog" aria-labelledby="help-title"><div class="drawer-head svelte-11gx8d0"><h2 id="help-title" class="svelte-11gx8d0">DictaWhisper</h2> <button type="button" class="dw-btn-secondary dw-btn-compact">Close</button></div> <p class="svelte-11gx8d0">Record or drop an audio file. Browser clips start immediately. Phone-folder watches wait until the file has settled, then file into <code class="svelte-11gx8d0">YYYY/MM/</code>.</p> <p class="svelte-11gx8d0">Cleaned text and tags are the default view. Retry cleanup if ollanet was unreachable; Skip leaves the raw transcript. Holding notes can File, File as copy, or Unfile.</p> <p class="svelte-11gx8d0">Search the inbox by words, tags, or filename. Tools shows queues, health checks, and a probe for broken audio. First-run problems: <code class="svelte-11gx8d0">pnpm run doctor</code>.</p></div>`,1);function Yt(e,n){ne(n,!1);let r=N(n,`open`,12,!1),i=ae();function a(){r(!1),i(`close`)}function s(e){e.key===`Escape`&&r()&&a()}ee(()=>(window.addEventListener(`keydown`,s),()=>window.removeEventListener(`keydown`,s))),re();var c=k(),d=u(c),f=e=>{var n=Jt(),r=u(n),i=l(r,2),s=o(i),c=l(o(s),2);j(s),C(6),j(i),m(`click`,r,a),m(`keydown`,r,e=>e.key===`Enter`&&a()),m(`click`,c,a),t(e,n)};p(d,e=>{r()&&e(f)}),t(e,c),ce()}var Xt=d(`<p class="dw-error"> </p>`),Zt=d(` <!> <!> <!> <!>`,1),Qt=d(`<li class="svelte-4llc2b"><span class="reason svelte-4llc2b"> </span> </li>`),$t=d(`<li class="svelte-4llc2b"> </li>`),en=d(`<ul class="hits svelte-4llc2b"><!> <!></ul>`),tn=d(`<li class="svelte-4llc2b"><span> </span> <span class="check-msg svelte-4llc2b"> </span></li>`),nn=d(`<ul class="checks svelte-4llc2b"></ul>`),rn=d(`<p class="line svelte-4llc2b">Health unavailable.</p>`),an=d(`<div class="dimmer svelte-4llc2b" role="presentation"></div> <div class="dw-card-elevated drawer svelte-4llc2b" role="dialog" aria-labelledby="tools-title"><div class="drawer-head svelte-4llc2b"><h2 id="tools-title" class="svelte-4llc2b">Tools</h2> <button type="button" class="dw-btn-secondary dw-btn-compact">Close</button></div> <!> <p class="dw-eyebrow svelte-4llc2b">Queues</p> <p class="line svelte-4llc2b"> </p> <p class="line svelte-4llc2b"> </p> <p class="dw-eyebrow svelte-4llc2b">Notes</p> <p class="line svelte-4llc2b"> </p> <p class="dw-eyebrow svelte-4llc2b">Index</p> <p class="line svelte-4llc2b"><!></p> <div class="row svelte-4llc2b"><button type="button">Unreadable</button></div> <p class="dw-eyebrow svelte-4llc2b">Probe audio</p> <p class="line svelte-4llc2b"><!></p> <div class="row svelte-4llc2b"><button type="button" class="dw-btn-secondary dw-btn-compact">Scan</button> <button type="button" class="dw-btn-secondary dw-btn-compact">Mark bad</button></div> <!> <p class="dw-eyebrow svelte-4llc2b">Checks</p> <!></div>`,1);function on(e,d){ne(d,!1);let h=N(d,`open`,12,!1),_=N(d,`noteFilter`,12,`all`),b=v(null),S=v(null),C=v(null),w=v(null),T=v(``),te;function E(){h(!1)}function D(e){e.key===`Escape`&&h()&&E()}function ie(e){return e===`fail`?`dw-pill is-fail`:e===`warn`?`dw-pill is-warn`:`dw-pill`}function ae(e,t){if(!t)return`${e}: off`;let n=Number(t.length)||0,r=Number(t.running)||0;return!n&&!r?`${e}: idle`:`${e}: ${r} running · ${n} waiting`}async function oe(){y(T,``);try{let[e,t,n,r]=await Promise.all([fetch(`/health`),fetch(`/status`),fetch(`/tools/probe`),fetch(`/notes/stats`)]);y(b,await e.json().catch(()=>null)),y(S,t.ok?await t.json():null),y(C,n.ok||n.status===409?await n.json():null),y(w,r.ok?await r.json():null)}catch(e){y(T,e.message||String(e))}}async function se(e){y(T,``);try{let t=await fetch(`/tools/probe`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({apply:e})});y(C,await t.json().catch(()=>null)),!t.ok&&t.status!==409&&y(T,c(C)?.error||`probe ${t.status}`),await oe()}catch(e){y(T,e.message||String(e))}}function le(){_(_()===`unreadable`?`all`:`unreadable`)}ee(()=>(window.addEventListener(`keydown`,D),te=setInterval(()=>{h()&&oe()},4e3),()=>window.removeEventListener(`keydown`,D))),O(()=>{te&&clearInterval(te)}),n(()=>a(h()),()=>{h()&&oe()}),g(),re();var ue=k(),de=u(ue),P=e=>{var n=an(),a=u(n),d=l(a,2),h=o(d),g=l(o(h),2);j(h);var v=l(h,2),y=e=>{var n=Xt(),r=M(n,!0);s(()=>A(r,c(T))),t(e,n)};p(v,e=>{c(T)&&e(y)});var ee=l(v,4),te=M(ee,!0),D=l(ee,2),O=M(D,!0),ne=l(D,4),k=M(ne,!0),re=l(ne,4),oe=o(re),ce=e=>{var n=f(`Indexing…`);t(e,n)},N=e=>{var n=Zt(),r=u(n),i=l(r),a=e=>{var n=f();s(()=>A(n,`· ${c(w),L(()=>c(w).unreadable)??``} unreadable`)),t(e,n)};p(i,e=>{c(w),L(()=>c(w).unreadable)&&e(a)});var o=l(i,2),d=e=>{var n=f();s(()=>A(n,`· ${c(w),L(()=>c(w).starred)??``} starred`)),t(e,n)};p(o,e=>{c(w),L(()=>c(w).starred)&&e(d)});var m=l(o,2),h=e=>{var n=f();s(()=>A(n,`· ${c(w),L(()=>c(w).embedded)??``} embedded${c(w),L(()=>c(w).embedModel?` (${c(w).embedModel})`:``)??``}`)),t(e,n)},g=e=>{var n=f(`· FTS only`);t(e,n)};p(m,e=>{c(w),L(()=>c(w).embedded)?e(h):e(g,-1)});var _=l(m,2),v=e=>{var n=f();s(e=>A(n,`· rebuilt ${e??``}`),[()=>(c(w),L(()=>String(c(w).lastRebuild).slice(0,16).replace(`T`,` `)))]),t(e,n)};p(_,e=>{c(w),L(()=>c(w).lastRebuild)&&e(v)}),s(()=>A(r,`${c(w),L(()=>c(w).notes||0)??``} notes `)),t(e,n)},ue=e=>{var n=f(`…`);t(e,n)};p(oe,e=>{c(w),L(()=>c(w)?.indexing)?e(ce):c(w)?e(N,1):e(ue,-1)}),j(re);var de=l(re,2),P=o(de);let fe;j(de);var F=l(de,4),pe=o(F),R=e=>{var n=f(`Scanning pending files…`);t(e,n)},z=e=>{var n=f();s(()=>A(n,`Last scan: ${c(C),L(()=>c(C).bad)??``} bad of ${c(C),L(()=>c(C).pending)??``} pending${c(C),L(()=>c(C).apply?`, marked ${c(C).marked}`:``)??``}.`)),t(e,n)},me=e=>{var n=f(`Find empty or broken files before Whisper spends time on them.`);t(e,n)};p(pe,e=>{c(C),L(()=>c(C)?.running)?e(R):(c(C),L(()=>c(C)?.finishedAt)?e(z,1):e(me,-1))}),j(F);var he=l(F,2),B=o(he),ge=l(B,2);j(he);var V=l(he,2),_e=e=>{var n=en(),a=o(n);i(a,1,()=>(c(C),L(()=>c(C).files.slice(0,20))),r,(e,n)=>{var r=Qt(),i=o(r),a=M(i,!0),u=l(i);j(r),s(e=>{A(a,(c(n),L(()=>c(n).reason))),A(u,` ${e??``}`)},[()=>(c(n),L(()=>c(n).file.split(/[/\\]/).pop()))]),t(e,r)});var u=l(a,2),d=e=>{var n=$t(),r=M(n);s(()=>A(r,`+${c(C),L(()=>c(C).files.length-20)??``} more`)),t(e,n)};p(u,e=>{c(C),L(()=>c(C).files.length>20)&&e(d)}),j(n),t(e,n)};p(V,e=>{c(C),L(()=>c(C)?.files?.length)&&e(_e)});var H=l(V,4),ve=e=>{var n=nn();i(n,5,()=>(c(b),L(()=>c(b).checks)),r,(e,n)=>{var r=tn(),i=o(r),a=M(i,!0),u=l(i,2),d=M(u,!0);j(r),s(e=>{I(i,1,e,`svelte-4llc2b`),A(a,(c(n),L(()=>c(n).id))),A(d,(c(n),L(()=>c(n).message)))},[()=>x((c(n),L(()=>ie(c(n).level))))]),t(e,r)}),j(n),t(e,n)},ye=e=>{var n=rn();t(e,n)};p(H,e=>{c(b),L(()=>c(b)?.checks?.length)?e(ve):e(ye,-1)}),j(d),s((e,t)=>{A(te,e),A(O,t),A(k,(c(S),L(()=>c(S)?`${c(S).done||0} cleaned · ${c(S).rawOnly||0} raw · ${c(S).pendingAudio||0} pending · ${c(S).unreadable||0} unreadable`:`…`))),fe=I(P,1,`dw-btn-secondary dw-btn-compact svelte-4llc2b`,null,fe,{"is-on":_()===`unreadable`}),B.disabled=(c(C),L(()=>c(C)?.running)),ge.disabled=(c(C),L(()=>c(C)?.running))},[()=>(c(b),L(()=>ae(`Transcription`,c(b)?.queues?.transcription))),()=>(c(b),L(()=>ae(`Cleanup`,c(b)?.queues?.processing)))]),m(`click`,a,E),m(`keydown`,a,e=>e.key===`Enter`&&E()),m(`click`,g,E),m(`click`,P,le),m(`click`,B,()=>se(!1)),m(`click`,ge,()=>se(!0)),t(e,n)};p(de,e=>{h()&&e(P)}),t(e,ue),ce()}var sn=new Set([`recent`,`oldest`,`relevance`]),cn=new Set([`lex`,`hybrid`]);function ln(e){let t=typeof e==`string`?new URLSearchParams(e.startsWith(`?`)?e.slice(1):e):e,n=t.get(`sort`)||``,r=t.get(`mode`)||``,i=(t.get(`year`)||``).trim(),a=(t.get(`month`)||``).trim(),o=/^\d{1,2}$/.test(a)?a.padStart(2,`0`):``;return{q:t.get(`q`)||``,tags:t.getAll(`tag`).map(e=>e.trim()).filter(Boolean),year:/^\d{4}$/.test(i)?i:``,month:i&&o&&Number(o)>=1&&Number(o)<=12?o:``,since:(t.get(`since`)||``).trim(),until:(t.get(`until`)||``).trim(),sort:sn.has(n)?n:``,mode:cn.has(r)?r:``,unreadable:t.get(`unreadable`)===`1`,starred:t.get(`starred`)===`1`,file:t.get(`file`)||``,cue:null}}function un(e){let t=String(e||``).match(/^#?cue-(\d+)$/);if(!t)return null;let n=Number(t[1]);return Number.isInteger(n)&&n>=0?n:null}function dn(e){let t=new URLSearchParams;e.q?.trim()&&t.set(`q`,e.q.trim());for(let n of e.tags||[])n.trim()&&t.append(`tag`,n.trim());return e.year&&t.set(`year`,e.year),e.year&&e.month&&t.set(`month`,e.month),e.since&&t.set(`since`,e.since),e.until&&t.set(`until`,e.until),e.sort&&t.set(`sort`,e.sort),e.mode&&t.set(`mode`,e.mode),e.unreadable&&t.set(`unreadable`,`1`),e.starred&&t.set(`starred`,`1`),e.file&&t.set(`file`,e.file),t.toString()}function fn(e){let t=dn(e),n=t?`/?${t}`:`/`;return e.file&&e.cue!=null&&Number.isInteger(e.cue)&&e.cue>=0?`${n}#cue-${e.cue}`:n}function pn(e){let t=String(e||``).replace(/^filename:\s*/i,``).trim();return t?/^filename:/i.test(e)?!0:/\d{4}[-_.]\d{2}[-_.]\d{2}/.test(t)||/\.(mp3|m4a|wav|webm|ogg|json)$/i.test(t):!1}function mn(e){return String(e||``).replace(/^filename:\s*/i,``).trim().replace(/\.(mp3|m4a|wav|webm|ogg|json)$/i,``)}function hn(e,t){if(!pn(e)||!t.length)return t;let n=mn(e);if(!n)return t;let r=t.filter(e=>`${e.basename||``} ${e.jsonFile||``}`.replace(/\\/g,`/`).includes(n));return r.length?r:t}function gn(e){return String(e||``).replace(/&/g,`&amp;`).replace(/</g,`&lt;`).replace(/>/g,`&gt;`).replace(/"/g,`&quot;`)}function _n(e){return e.replace(/[.*+?^${}()|[\]\\]/g,`\\$&`)}function vn(e,t){let n=String(e||``),r=String(t||``).replace(/^filename:\s*/i,``).split(/\s+/).map(e=>e.replace(/[^\p{L}\p{N}_*-]/gu,``)).filter(e=>e.length>1);if(!r.length)return gn(n);let i=RegExp(`(${r.map(_n).join(`|`)})`,`gi`);return gn(n).replace(i,`<mark>$1</mark>`)}function yn(e){return(String(e||``).replace(/\\/g,`/`).split(`/`).pop()||``).replace(/\.json$/i,``)}var bn=d(`<span class="day svelte-unha62"> </span>`),xn=d(`<span class="elapsed svelte-unha62"> </span>`),Sn=d(`<span class="status svelte-unha62">cleanup skipped</span>`),Cn=d(`<span class="status svelte-unha62"> </span>`),wn=d(`<span class="preview svelte-unha62"><!></span>`),Tn=d(`<span><button type="button" class="chip-label svelte-unha62"> </button> <button type="button" class="chip-x svelte-unha62">×</button></span>`),En=d(`<button type="button"> </button>`),Dn=d(`<div class="note-tags svelte-unha62"></div>`),On=d(`<p class="dw-muted"> </p>`),kn=d(`<p class="dw-muted">Section times need a re-transcribe for word timestamps. Raw segments below still have Whisper times.</p>`),An=d(`<button type="button"><span class="cue-time svelte-unha62"> </span> <span class="cue-text svelte-unha62"> </span></button>`),jn=d(`<!> <!> <!>`,1),Mn=d(`<p class="dw-muted">No cleaned text yet. Raw transcript below.</p>`),Nn=d(`<p class="svelte-unha62"><span class="times svelte-unha62"> </span> </p>`),Pn=d(`<div class="segments svelte-unha62"></div>`),Fn=d(`<div class="dw-segmented svelte-unha62" role="group" aria-label="Transcript view"><button type="button">Readable</button> <button type="button">Raw</button></div> <!>`,1),In=d(`<button type="button" class="dw-btn-secondary dw-btn-compact">Retry</button> <button type="button" class="dw-btn-secondary dw-btn-compact">Skip</button>`,1),Ln=d(`<button type="button" class="dw-btn-secondary dw-btn-compact">File</button> <button type="button" class="dw-btn-secondary dw-btn-compact">File as copy</button>`,1),Rn=d(`<button type="button" class="dw-btn-secondary dw-btn-compact">Unfile</button>`),zn=d(`<!> <!>`,1),Bn=d(`<div class="note-body svelte-unha62"><audio controls="" preload="metadata" class="svelte-unha62"></audio> <!> <!> <form class="tag-edit svelte-unha62"><label class="dw-eyebrow">Tags</label> <div class="tag-row svelte-unha62"><input class="dw-input" type="text" placeholder="Add a tag"/> <button type="submit" class="dw-btn-secondary dw-btn-compact">Add</button></div></form> <div class="actions svelte-unha62"><button type="button" class="dw-btn-secondary dw-btn-compact">Copy</button> <a class="dw-btn-secondary dw-btn-compact svelte-unha62">Audio</a> <a class="dw-btn-secondary dw-btn-compact svelte-unha62">Sidecar</a> <!> <!> <button type="button" class="dw-btn-secondary dw-btn-compact is-danger">Delete</button></div></div>`),Vn=d(`<article><div class="note-top svelte-unha62"><button type="button" class="note-head svelte-unha62"><span class="note-title svelte-unha62"><span class="name svelte-unha62"> </span> <!> <!> <!></span> <!></button> <button type="button">★</button></div> <!> <!></article>`);function Hn(d,_){ne(_,!1);let b=v(),ee=v(),x=v(),S=v(),C=v(),te=v(),E=N(_,`transcription`,8),O=N(_,`variant`,8,`note`),oe=N(_,`query`,8,``),le=N(_,`selectedTags`,24,()=>[]),P=N(_,`expanded`,8,!1),fe=N(_,`showRaw`,8,!1),F=N(_,`busy`,8,!1),pe=N(_,`playing`,8,!1),R=N(_,`landCue`,8,null),z=ae(),me=v(``),he=v(),B=``;function ge(e){let t=e.transcriptionJson?.tags;return Array.isArray(t)?t.map(e=>String(e).trim()).filter(Boolean):[]}function V(e){let t=e.transcriptionJson||{};return t._partial?t.hasCleaned?String(t.preview||``).trim():``:String(t.cleanedTranscription||t.preview||``).trim()}function _e(e,t=200){let n=String(e||``).replace(/\s+/g,` `).trim();return n.length<=t?n:`${n.slice(0,t)}…`}function H(e){return e.split(/\n{2,}/).map(e=>e.trim()).filter(Boolean)}function ve(e){let t=String(e||``).trim();if(!t)return[];let n=H(t);if(n.length>=2)return n;let r=t.split(/(?<=[.!?])\s+/).map(e=>e.trim()).filter(Boolean);return r.length>=2?r:[t]}function ye(e){let t=e.transcriptionJson?.playbackCues;if(Array.isArray(t)&&t.length)return t;let n=V(e);return n?ve(n).map(e=>({text:e,start:0,end:0})):[]}function U(e){return`/audio?file=${encodeURIComponent(e)}`}function W(e){return`/audio?file=${encodeURIComponent(e)}&download=1`}function be(e){return`/note?file=${encodeURIComponent(e)}&download=1`}function xe(e){let t=e?.cleanup;if(!t||typeof t!=`object`)return``;let n=[];t.createdAt&&n.push(String(t.createdAt).slice(0,10)),t.model&&n.push(t.model),t.host&&n.push(t.host);let r=Array.isArray(e.cleanupHistory)?e.cleanupHistory.length:0;return r&&n.push(`${r} earlier`),n.join(` · `)}function Se(e){let t=Math.max(0,Math.floor(Number(e)||0)),n=Math.floor(t/60),r=t%60;return`${n}:${String(r).padStart(2,`0`)}`}function Ce(e){return typeof e?.start==`number`&&Number.isFinite(e.start)}function we(e,t){if(!Ce(t))return;let n=e.currentTarget.closest(`.note`)?.querySelector(`audio`);n&&(n.currentTime=Math.max(0,Number(t.start)||0),n.play())}function G(e,t,n){if(!Ce(t))return!1;let r=e.transcriptionJson?._currentTime;if(typeof r!=`number`)return!1;let i=ye(e)[n+1],a=t.end>t.start?t.end:i?i.start:1/0;return r>=t.start&&r<a}function Te(e){let t=String(e||``).replace(/\\/g,`/`);return/\/_holding(?:\/|$)/i.test(t)?`holding`:/\/_unfiled(?:\/|$)/i.test(t)?`unfiled`:``}function Ee(e){return/^\d{4}-\d{2}-\d{2}/.test(yn(e))}function De(e){return!!e.transcriptionJson?.starred}function K(){let e=c(me).trim();if(!e)return;let t=[...ge(E()),e];y(me,``),z(`savetags`,{jsonFile:E().jsonFile,tags:t})}function q(e){z(`savetags`,{jsonFile:E().jsonFile,tags:ge(E()).filter(t=>t!==e)})}function J(){if(!P()||R()==null)return;let e=`${E().jsonFile}:${R()}`;if(B===e)return;let t=c(he)?.querySelector(`#cue-${R()}`);if(!t)return;B=e,t.scrollIntoView({block:`center`,behavior:`smooth`});let n=ye(E())[R()];Ce(n)&&we({currentTarget:t},n)}ue(J),n(()=>a(E()),()=>{y(b,V(E()))}),n(()=>a(E()),()=>{y(ee,ge(E()))}),n(()=>a(E()),()=>{y(x,De(E()))}),n(()=>a(E()),()=>{y(S,Te(E().jsonFile)===`holding`)}),n(()=>a(E()),()=>{y(C,Te(E().jsonFile)===`unfiled`)}),n(()=>a(E()),()=>{y(te,`tag-${String(E().jsonFile||``).replace(/[^a-zA-Z0-9_-]/g,`_`)}`)}),g(),re();var Y=Vn();let X;var Oe=o(Y),ke=o(Oe),Z=o(ke),Ae=o(Z),je=M(Ae,!0),Me=l(Ae,2),Ne=e=>{var n=bn(),r=M(n,!0);s(()=>A(r,(a(E()),L(()=>E().day)))),t(e,n)};p(Me,e=>{a(O()),a(E()),L(()=>O()===`hit`&&E().day)&&e(Ne)});var Q=l(Me,2),Pe=e=>{var n=xn(),r=M(n,!0);s(()=>A(r,(a(E()),L(()=>E().transcriptionJson.elapsed)))),t(e,n)};p(Q,e=>{a(E()),L(()=>E().transcriptionJson?.elapsed)&&e(Pe)});var Fe=l(Q,2),Ie=e=>{var n=Sn();t(e,n)},Le=e=>{var n=Cn(),r=M(n,!0);s(()=>A(r,(a(E()),L(()=>E().transcriptionJson?.cleanupError?`cleanup failed`:`raw only`)))),t(e,n)};p(Fe,e=>{a(E()),L(()=>E().transcriptionJson?.cleanupSkipped)?e(Ie):c(b)||e(Le,1)}),j(Z);var Re=l(Z,2),ze=e=>{var n=wn(),r=o(n),i=e=>{var n=k(),r=u(n);h(r,()=>(a(vn),a(E()),c(b),a(oe()),L(()=>vn(_e(E().snippet||c(b)||E().transcriptionJson?.preview||E().transcriptionJson?.text||``),oe())))),t(e,n)},l=T(()=>(a(O()),a(oe()),L(()=>O()===`hit`&&oe().trim()))),d=e=>{var n=f();s(e=>A(n,e),[()=>(c(b),a(E()),L(()=>_e(c(b)||E().transcriptionJson?.preview||E().transcriptionJson?.text||``)))]),t(e,n)};p(r,e=>{c(l)?e(i):e(d,-1)}),j(n),t(e,n)};p(Re,e=>{P()||e(ze)}),j(ke);var Be=l(ke,2);let Ve;j(Oe);var He=l(Oe,2),Ue=e=>{var n=Dn();i(n,5,()=>c(ee),r,(e,n)=>{var r=k(),i=u(r),a=e=>{var r=Tn();let i;var a=o(r),u=M(a,!0),d=l(a,2);j(r),s(e=>{i=I(r,1,`dw-chip`,null,i,{"is-active":e}),A(u,c(n)),D(d,`aria-label`,`Remove ${c(n)}`),d.disabled=F()},[()=>le().includes(c(n))]),m(`click`,a,()=>z(`tag`,c(n))),m(`click`,d,()=>q(c(n))),t(e,r)},d=e=>{var r=En();let i;var a=M(r,!0);s(e=>{i=I(r,1,`dw-chip`,null,i,{"is-active":e}),A(a,c(n))},[()=>le().includes(c(n))]),m(`click`,r,()=>z(`tag`,c(n))),t(e,r)};p(i,e=>{P()?e(a):e(d,-1)}),t(e,r)}),j(n),t(e,n)};p(He,e=>{c(ee),a(P()),L(()=>c(ee).length||P())&&e(Ue)});var We=l(He,2),Ge=n=>{var d=Bn(),f=o(d),h=l(f,2),g=n=>{let d=e(()=>(a(E()),L(()=>xe(E().transcriptionJson))));var f=jn(),h=u(f),g=e=>{var n=On(),r=M(n);s(()=>A(r,`Cleaned ${c(d)??``}`)),t(e,n)};p(h,e=>{c(d)&&e(g)});var _=l(h,2),v=e=>{var n=kn();t(e,n)};p(_,e=>{a(E()),L(()=>E().transcriptionJson?.playbackCuesSource!==`words`)&&e(v)});var y=l(_,2),b=e=>{var n=k(),d=u(n);i(d,1,()=>(a(E()),L(()=>ye(E()))),r,(e,n,r)=>{var i=An();D(i,`id`,`cue-${r}`);let a;var u=o(i),d=M(u,!0),f=l(u,2),p=M(f,!0);j(i),s((e,t,r,o)=>{a=I(i,1,`cue svelte-unha62`,null,a,{"is-active":e,untimed:t,"dw-cue-pulse":r}),A(d,o),A(p,(c(n),L(()=>c(n).text)))},[()=>G(E(),c(n),r)||R()===r,()=>!Ce(c(n)),()=>G(E(),c(n),r)||R()===r,()=>(c(n),L(()=>Ce(c(n))?Se(c(n).start):`—`))]),m(`click`,i,e=>we(e,c(n))),t(e,i)}),t(e,n)};p(y,e=>{fe()||e(b)}),t(n,f)},_=e=>{var n=Mn();t(e,n)};p(h,e=>{c(b)?e(g):e(_,-1)});var v=l(h,2),ee=e=>{var n=Fn(),d=u(n),f=o(d);let h;var g=l(f,2);let _;j(d);var v=l(d,2),y=e=>{var n=Pn();i(n,5,()=>(a(E()),L(()=>E().transcriptionJson.segments)),r,(e,n)=>{var r=Nn(),i=o(r),a=M(i),u=l(i);j(r),s((e,t)=>{A(a,`${e??``}–${t??``}`),A(u,` ${c(n),L(()=>c(n).text)??``}`)},[()=>(c(n),L(()=>Se(c(n).start))),()=>(c(n),L(()=>Se(c(n).end)))]),t(e,r)}),j(n),t(e,n)};p(v,e=>{fe()&&e(y)}),s(()=>{h=I(f,1,``,null,h,{"is-on":!fe()}),_=I(g,1,``,null,_,{"is-on":fe()})}),m(`click`,f,()=>z(`raw`,{jsonFile:E().jsonFile,show:!1})),m(`click`,g,()=>z(`raw`,{jsonFile:E().jsonFile,show:!0})),t(e,n)};p(v,e=>{a(E()),L(()=>(E().transcriptionJson?.segments||[]).length)&&e(ee)});var x=l(v,2),w=o(x),O=l(w,2),ne=o(O);ie(ne);var re=l(ne,2);j(O),j(x);var ae=l(x,2),oe=o(ae),ce=l(oe,2),N=l(ce,2),le=l(N,2),ue=e=>{var n=In(),r=u(n),i=l(r,2);s(()=>{r.disabled=F(),i.disabled=F()}),m(`click`,r,()=>z(`retry`,E().jsonFile)),m(`click`,i,()=>z(`skip`,E().jsonFile)),t(e,n)};p(le,e=>{c(b),a(E()),L(()=>!c(b)||E().transcriptionJson?.cleanupError||E().transcriptionJson?.cleanupSkipped)&&e(ue)});var P=l(le,2),pe=e=>{var n=zn(),r=u(n),i=e=>{var n=Ln(),r=u(n),i=l(r,2);s(()=>{r.disabled=F(),i.disabled=F()}),m(`click`,r,()=>z(`resolve`,{jsonFile:E().jsonFile,action:`overwrite`})),m(`click`,i,()=>z(`resolve`,{jsonFile:E().jsonFile,action:`rename`})),t(e,n)},o=T(()=>(a(E()),L(()=>Ee(E().jsonFile))));p(r,e=>{c(o)&&e(i)});var d=l(r,2),f=e=>{var n=Rn();s(()=>n.disabled=F()),m(`click`,n,()=>z(`resolve`,{jsonFile:E().jsonFile,action:`unfile`})),t(e,n)};p(d,e=>{c(S)&&e(f)}),t(e,n)},he=T(()=>(c(S),c(C),a(E()),L(()=>c(S)||c(C)&&Ee(E().jsonFile))));p(P,e=>{c(he)&&e(pe)});var B=l(P,2);j(ae),j(d),s((e,t,n,r)=>{D(f,`src`,e),D(w,`for`,c(te)),D(ne,`id`,c(te)),ne.disabled=F(),re.disabled=t,D(ce,`href`,n),D(N,`href`,r)},[()=>(a(E()),L(()=>U(E().jsonFile))),()=>(a(F()),c(me),L(()=>F()||!c(me).trim())),()=>(a(E()),L(()=>W(E().jsonFile))),()=>(a(E()),L(()=>be(E().jsonFile)))]),m(`timeupdate`,f,e=>z(`time`,{item:E(),event:e})),se(ne,()=>c(me),e=>y(me,e)),m(`submit`,x,de(K)),m(`click`,oe,()=>z(`copy`,E())),m(`click`,B,()=>z(`delete`,E().jsonFile)),t(n,d)};p(We,e=>{P()&&e(Ge)}),j(Y),w(Y,e=>y(he,e),()=>c(he)),s(e=>{X=I(Y,1,`note dw-card dw-card-hover svelte-unha62`,null,X,{"is-open":P(),"is-playing":pe(),"is-hit":O()===`hit`}),D(ke,`title`,(a(E()),L(()=>E().jsonFile))),A(je,e),Ve=I(Be,1,`star svelte-unha62`,null,Ve,{"is-on":c(x)}),D(Be,`aria-pressed`,c(x)),D(Be,`aria-label`,c(x)?`Unstar note`:`Star note`),Be.disabled=F()},[()=>(a(yn),a(E()),L(()=>yn(E().jsonFile)))]),m(`click`,ke,()=>z(`toggle`,E().jsonFile)),m(`click`,Be,()=>z(`star`,{jsonFile:E().jsonFile,starred:!c(x)})),t(d,Y),ce()}function Un(e,t,n){let r=e[t];return Number.isFinite(r)&&r>0?r:n}function Wn(e,t,n){let r=0;for(let i=0;i<t;i+=1)r+=Un(e,i,n);return r}function Gn({count:e,scrollTop:t,viewport:n,sizes:r,estimate:i=108,overscan:a=8}){let o=Math.max(0,Number(e)||0),s=Math.max(1,Number(n)||1),c=Math.max(0,Number(t)||0),l=0,u=0;for(;l<o;){let e=Un(r,l,i);if(u+e>c)break;u+=e,l+=1}l=Math.max(0,l-a);let d=Wn(r,l,i),f=l,p=d,m=c+s+a*i;for(;f<o&&p<m;)p+=Un(r,f,i),f+=1;return{start:l,end:f,startTop:d,total:Wn(r,o,i)}}var Kn=d(`<div class="virt-row svelte-141dx9j"><!></div>`),qn=d(`<div class="virt svelte-141dx9j"></div>`),Jn=d(`<div class="virt-root svelte-141dx9j"><!></div>`);function Yn(e,r){ne(r,!1);let l=v(),d=v(),f=v(),m=N(r,`items`,24,()=>[]),h=N(r,`estimate`,8,108),b=N(r,`overscan`,8,8),x=N(r,`getKey`,8,e=>e.jsonFile),S=v(),C,T=v(0),te=v(640),E=v({});function D(e,t){let n=()=>{let n=e.getBoundingClientRect().height;n>0&&c(E)[t]!==n&&(_(E,c(E)[t]=n),y(E,c(E)))};n();let r=new ResizeObserver(n);return r.observe(e),{update(e){t=e,n()},destroy(){r.disconnect()}}}function O(){y(T,C?C.scrollTop:window.scrollY),y(te,C?C.clientHeight:window.innerHeight)}ee(()=>{C=c(S)?.closest(`.dw-main`)||null;let e=C||window;return O(),e.addEventListener(`scroll`,O,{passive:!0}),window.addEventListener(`resize`,O),()=>{e.removeEventListener(`scroll`,O),window.removeEventListener(`resize`,O)}}),n(()=>(a(m()),c(T),c(te),c(E),a(h()),a(b())),()=>{y(l,m().length<=16?{start:0,end:m().length,startTop:0,total:0}:Gn({count:m().length,scrollTop:c(T),viewport:c(te),sizes:c(E),estimate:h(),overscan:b()}))}),n(()=>(c(l),a(m()),a(x()),c(E),a(h())),()=>{y(d,(()=>{let e=c(l).startTop;return m().slice(c(l).start,c(l).end).map((t,n)=>{let r=c(l).start+n,i={item:t,index:r,key:x()(t,r),top:e};return e+=Un(c(E),r,h()),i})})())}),n(()=>a(m()),()=>{y(f,m().length>16)}),g(),re();var A=Jn(),ie=o(A),ae=e=>{var n=k(),a=u(n);i(a,3,m,(e,t)=>x()(e,t),(e,n,i)=>{var a=k(),o=u(a);F(o,r,`default`,{get item(){return c(n)},get index(){return c(i)}},null),t(e,a)}),t(e,n)},oe=e=>{var n=qn();i(n,5,()=>c(d),e=>e.key,(e,n)=>{var i=Kn(),a=o(i);F(a,r,`default`,{get item(){return c(n),L(()=>c(n).item)},get index(){return c(n),L(()=>c(n).index)}},null),j(i),pe(i,(e,t)=>D?.(e,t),()=>c(n).index),s(()=>fe(i,`transform: translateY(${c(n),L(()=>c(n).top)??``}px)`)),t(e,i)}),j(n),s(()=>fe(n,`height: ${c(l),L(()=>c(l).total)??``}px`)),t(e,n)};p(ie,e=>{c(f)?e(oe,-1):e(ae)}),j(A),w(A,e=>y(S,e),()=>c(S)),t(e,A),ce()}function Xn(t,n){ne(n,!1);let r=N(n,`items`,24,()=>[]),i=N(n,`variant`,8,`note`),o=N(n,`query`,8,``),s=N(n,`selectedTags`,24,()=>[]),l=N(n,`expanded`,24,()=>({})),u=N(n,`showRaw`,24,()=>({})),d=N(n,`noteBusy`,24,()=>({})),f=N(n,`landFile`,8,``),p=N(n,`landCue`,8,null);re(),Yn(t,{get items(){return r()},children:le,$$slots:{default:(t,r)=>{let m=e(()=>r.item);{let r=e(()=>(a(l()),a(c(m)),L(()=>!!l()[c(m).jsonFile]))),h=e(()=>(a(u()),a(c(m)),L(()=>!!u()[c(m).jsonFile]))),g=e(()=>(a(d()),a(c(m)),L(()=>!!d()[c(m).jsonFile]))),_=e(()=>(a(l()),a(c(m)),L(()=>!!l()[c(m).jsonFile]&&typeof c(m).transcriptionJson?._currentTime==`number`))),v=e(()=>(a(f()),a(c(m)),a(p()),L(()=>f()===c(m).jsonFile?p():null)));Hn(t,{get transcription(){return c(m)},get variant(){return i()},get query(){return o()},get selectedTags(){return s()},get expanded(){return c(r)},get showRaw(){return c(h)},get busy(){return c(g)},get playing(){return c(_)},get landCue(){return c(v)},$$events:{toggle:function(e){S.call(this,n,e)},star:function(e){S.call(this,n,e)},tag:function(e){S.call(this,n,e)},savetags:function(e){S.call(this,n,e)},raw:function(e){S.call(this,n,e)},time:function(e){S.call(this,n,e)},copy:function(e){S.call(this,n,e)},retry:function(e){S.call(this,n,e)},skip:function(e){S.call(this,n,e)},resolve:function(e){S.call(this,n,e)},delete:function(e){S.call(this,n,e)}}})}}}}),ce()}var Zn=d(`<button type="button" class="dw-btn-secondary dw-btn-compact">Clear search</button>`),Qn=d(`<option> </option>`),$n=d(`<div class="dw-segmented" role="group" aria-label="Search mode"><button type="button">Words</button> <button type="button">Hybrid</button></div>`),er=d(`<span class="dw-chip-count"> </span>`),tr=d(`<button type="button" class="dw-chip is-active">Unreadable</button>`),nr=d(`<button type="button" class="dw-btn-secondary dw-btn-compact">Clear filters</button>`),rr=d(`<p class="dw-error"> </p>`),ir=d(`<p class="dw-empty">Loading notes…</p>`),ar=d(`<p class="dw-empty">Indexing notes…</p>`),or=d(`<p class="dw-empty">No notes yet. Record or drop a file above.</p>`),sr=d(`<div class="tags-filter svelte-hs422r"><span class="dw-muted"> </span></div>`),cr=d(`<button type="button"> <span class="dw-chip-count"> </span></button>`),lr=d(`<button type="button" class="dw-btn-secondary dw-btn-compact"> </button>`),ur=d(`<p class="dw-muted"> </p>`),dr=d(`<span class="dw-muted"> </span>`),fr=d(`<span class="dw-muted">Includes model suggestions</span>`),pr=d(`<span class="dw-muted">Spelling pass only</span>`),mr=d(`<li class="svelte-hs422r"><label class="svelte-hs422r"><input type="checkbox" class="svelte-hs422r"/> <span><strong> </strong> <span class="dw-chip-count"> </span> <em class="svelte-hs422r"> </em></span></label></li>`),hr=d(`<ul class="consolidate-list svelte-hs422r"></ul> <div class="tag-cloud-more svelte-hs422r"><button type="button" class="dw-btn-primary dw-btn-compact"> </button> <button type="button" class="dw-btn-secondary dw-btn-compact">Cancel</button></div>`,1),gr=d(`<div class="tag-cloud-more svelte-hs422r"><button type="button" class="dw-btn-secondary dw-btn-compact">Dismiss</button></div>`),_r=d(`<div class="dw-card consolidate svelte-hs422r"><div class="consolidate-head svelte-hs422r"><strong> </strong> <!></div> <!></div>`),vr=d(`<section class="dw-card tags-card svelte-hs422r"><div class="tags-head svelte-hs422r"><p class="dw-eyebrow">Tags</p> <p class="dw-muted"> <!> <!></p></div> <!> <div class="tag-cloud-body svelte-hs422r"></div> <div class="tag-cloud-more svelte-hs422r"><!> <!> <label class="model-toggle svelte-hs422r"><input type="checkbox" class="svelte-hs422r"/> Ask model for synonyms</label> <button type="button" class="dw-btn-secondary dw-btn-compact"> </button></div> <!> <!> <!></section>`),yr=d(`<p class="dw-empty">Searching…</p>`),br=d(`<p class="dw-empty">No notes matched <!>.</p>`),xr=d(`<div class="notes svelte-hs422r"><!></div>`),Sr=d(`<section class="hits svelte-hs422r" aria-label="Search hits"><!></section>`),Cr=d(`<div class="years-strip svelte-hs422r"><p class="dw-eyebrow">Years</p> <div class="year-jump svelte-hs422r"></div></div>`),wr=d(`<div class="archive-tools svelte-hs422r"><p class="dw-eyebrow">Notes</p> <div><button type="button" class="dw-text-btn dw-text-btn-accent">Focus</button> <button type="button" class="dw-text-btn">All years</button></div></div>`),Tr=d(`<div class="month-rail svelte-hs422r"><span class="svelte-hs422r"> </span> <span class="svelte-hs422r"> </span></div>`),Er=d(`<div class="month-block svelte-hs422r"><!> <div class="notes svelte-hs422r"><!></div></div>`),Dr=d(`<div class="year-body svelte-hs422r"></div>`),Or=d(`<section class="year-block svelte-hs422r"><button type="button" class="year-head svelte-hs422r"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" aria-hidden="true"><path stroke-linecap="round" stroke-linejoin="round" d="M19 9l-7 7-7-7"></path></svg> <span class="year-label svelte-hs422r"> </span> <span class="year-count svelte-hs422r"> </span></button> <!></section>`),kr=d(`<p class="dw-muted load-more svelte-hs422r"> </p>`),Ar=d(`<div class="archive"><!> <!></div>`),jr=d(`<section class="transcriptions svelte-hs422r"><div class="dw-card search-card svelte-hs422r"><div class="search svelte-hs422r"><span class="search-icon svelte-hs422r" aria-hidden="true"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" class="svelte-hs422r"><path stroke-linecap="round" stroke-linejoin="round" d="M21 21l-6-6m2-5a7 7 0 11-14 0 7 7 0 0114 0z"></path></svg></span> <input class="dw-input svelte-hs422r" type="search" placeholder="Search notes, tags, filenames…" aria-label="Search notes"/> <!></div> <div class="filters svelte-hs422r"><p class="dw-eyebrow">Filters</p> <div class="filter-row svelte-hs422r"><label class="filter-field svelte-hs422r"><span>Year</span> <select class="dw-input dw-select svelte-hs422r"><option>All years</option><!></select></label> <label class="filter-field svelte-hs422r"><span>Month</span> <select class="dw-input dw-select svelte-hs422r"><option>All months</option><!></select></label> <div><button type="button" class="dw-text-btn dates-toggle svelte-hs422r">Dates</button> <label class="filter-field svelte-hs422r"><span>From</span> <input class="dw-input dw-select svelte-hs422r" type="date"/></label> <label class="filter-field svelte-hs422r"><span>To</span> <input class="dw-input dw-select svelte-hs422r" type="date"/></label></div> <div class="dw-segmented" role="group" aria-label="Sort"><button type="button">Recent</button> <button type="button">Oldest</button> <button type="button">Best match</button></div> <!> <button type="button">Starred <!></button> <!> <!></div></div> <p class="dw-muted status-line svelte-hs422r"> </p></div> <!> <!> <!> <!> <!> <!> <!></section>`);function Mr(d,h){ne(h,!1);let x=v(),S=v(),w=v(),O=v(),k=v(),ae=v(),oe=v(),le=v(),ue=v(),de=v(),P=v(),fe=v(),F=v(),R=v(),z=v(),me=v(),he=v(),B=N(h,`transcriptions`,28,()=>[]),ge=N(h,`socket`,8),V=N(h,`noteFilter`,12,`all`),_e=[`January`,`February`,`March`,`April`,`May`,`June`,`July`,`August`,`September`,`October`,`November`,`December`],H=v({}),ve=v({}),ye={},U=v([]),W=v(!1),be=v(!1),xe=v(!0),Se=v(!1),Ce=v(``),we=v(``),G=v(null),Te=v({}),Ee=v(!1),De=v(null),K=v(``),q=v(``),J=v(``),Y=v(``),X=v(``),Oe=v(``),ke=v(``),Z=v(!1),Ae=v(``),je=v(!1),Me=v(!1),Ne=!1,Q=v(null),Pe=v(null),Fe,Ie=v(``),Le=``,Re=v([]),ze=v([]),Be={},Ve=v({}),He=v(null),Ue=!1,We=v(!1);function Ge(e){let t=String(e||``).replace(/\\/g,`/`);if(/\/_holding(?:\/|$)/i.test(t))return{year:null,month:null,key:`holding`};if(/\/_unfiled(?:\/|$)/i.test(t))return{year:null,month:null,key:`unfiled`};let n=t.match(/\/(\d{4})\/(\d{2})(?:\/|$)/);if(n)return{year:n[1],month:n[2],key:`${n[1]}-${n[2]}`};let r=(t.split(`/`).pop()||``).match(/^(\d{4})-(\d{2})-\d{2}/);return r?{year:r[1],month:r[2],key:`${r[1]}-${r[2]}`}:{year:null,month:null,key:`other`}}function Ke(e){return e.key===`holding`?`Holding`:e.key===`unfiled`?`Unfiled`:e.key===`other`?`Other`:`${_e[Number(e.month)-1]||e.month} ${e.year}`}function qe(e){let t=e.transcriptionJson?.tags;return Array.isArray(t)?t.map(e=>String(e).trim()).filter(Boolean):[]}function Je(e){let t=new Map;for(let n of e){let e=Ge(n.jsonFile);t.has(e.key)||t.set(e.key,{...e,items:[]}),t.get(e.key).items.push(n)}for(let e of t.values())e.items.sort((e,t)=>yn(t.jsonFile).localeCompare(yn(e.jsonFile)));let n=new Set([`holding`,`unfiled`,`other`]),r=[...t.values()].filter(e=>!n.has(e.key));r.sort((e,t)=>t.key.localeCompare(e.key));let i=[`holding`,`unfiled`,`other`].map(e=>t.get(e)).filter(Boolean);return[...i.filter(e=>e.key!==`other`),...r,...i.filter(e=>e.key===`other`)]}function Ye(e){let t=new Map;for(let n of e)for(let e of qe(n))t.set(e,(t.get(e)||0)+1);let n=Math.max(1,...t.values());return[...t.entries()].sort((e,t)=>t[1]-e[1]||e[0].localeCompare(t[0])).map(([e,t])=>({tag:e,count:t,size:`${.8+t/n*.7}rem`}))}function Xe(e){y(U,c(U).includes(e)?c(U).filter(t=>t!==e):[...c(U),e])}function Ze(e){return e===`spelling`?`spelling / plural`:e===`similar`?`close spelling`:`same topic`}function Qe(){return c(G)?.groups?c(G).groups.filter((e,t)=>c(Te)[t]!==!1):[]}async function $e(e,t){let n=await fetch(e,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify(t)}),r=await n.json().catch(()=>({}));if(!n.ok)throw Error(r.error||`request failed (${n.status})`);return r}async function et(){y(Se,!0),y(we,``),y(De,null),y(G,null);try{y(Ce,`Finding spelling twins…`);let e=await $e(`/tags/consolidate/preview`,{useModel:!1});if(y(G,e),y(Te,Object.fromEntries((e.groups||[]).map((e,t)=>[t,!0]))),y(Se,!1),c(xe)){y(Ce,`Asking the cleanup model for close synonyms…`);let e=await $e(`/tags/consolidate/preview`,{useModel:!0});y(G,e),y(Te,Object.fromEntries((e.groups||[]).map((e,t)=>[t,!0]))),e.modelError&&y(we,`Model skipped: ${e.modelError}`)}}catch(e){y(we,e.message||String(e))}finally{y(Se,!1),y(Ce,``)}}async function tt(){let e=Qe().map(e=>({keep:e.keep,drop:e.drop}));if(!e.length){y(we,`Select at least one merge.`);return}y(Ee,!0),y(we,``);try{let t=await $e(`/tags/consolidate/apply`,{groups:e});y(De,t);let n=t.mapping||{};y(U,[...new Set(c(U).map(e=>n[e]||e))]),await st(),y(G,{...c(G),groups:[]}),y(Te,{})}catch(e){y(we,e.message||String(e))}finally{y(Ee,!1)}}function nt(){y(G,null),y(Te,{}),y(we,``),y(De,null)}function rt(e){if(e?.transcriptionJson&&!e.transcriptionJson._partial)return e;let t=e.transcriptionJson||{};return{jsonFile:e.jsonFile,basename:e.basename||yn(e.jsonFile),day:e.day||t.day||``,snippet:e.snippet||t.snippet||``,cue:e.cue??t.cue??null,transcriptionJson:{tags:e.tags||t.tags||[],preview:e.preview||t.preview||``,hasCleaned:e.hasCleaned??t.hasCleaned,audioError:e.audioError||t.audioError||null,starred:!!(e.starred??t.starred),_partial:t._partial!==!1,...t,tags:e.tags||t.tags||[],starred:!!(e.starred??t.starred)}}}function it(e,{replace:t=!1}={}){let n=(e||[]).map(rt);if(t){B(n);return}let r=new Map(B().map(e=>[e.jsonFile,e]));for(let e of n){let t=r.get(e.jsonFile);t?.transcriptionJson&&!t.transcriptionJson._partial&&e.transcriptionJson?._partial||r.set(e.jsonFile,e)}B([...r.values()])}function at(e){for(let t of e||[]){let e=Ge(t.jsonFile);e.year&&(Be[e.year]=!0)}Be=Be}async function ot(e){let t=await fetch(e),n=await t.json().catch(()=>({}));if(!t.ok)throw Error(n.error||`request failed (${t.status})`);return n}async function st(){try{let[e,t,n]=await Promise.all([ot(`/notes/years`),ot(`/notes/tags?includeSingletons=1`),ot(`/notes/stats`)]);y(ze,e.years||[]),y(Re,t.tags||[]),y(He,n)}catch{c(ze).length||y(ze,[]),c(Re).length||y(Re,Ye(B()).map(({tag:e,count:t})=>({tag:e,count:t})))}}function ct(){return!!(c(K).trim()||c(Y)||c(X)||c(Z)||c(U).length||V()===`unreadable`)}function lt(){return Number(c(He)?.embedded||0)>0}function ut(){return c(Oe)?c(Oe):c(K).trim()?`relevance`:`recent`}function dt(){return c(ke)?c(ke):lt()?`hybrid`:`lex`}function ft(){let e=c(K).trim()?`relevance`:`recent`,t=lt()?`hybrid`:`lex`;return{q:c(K),tags:c(U),year:c(q),month:c(J),since:c(Y),until:c(X),sort:c(Oe)&&c(Oe)!==e?c(Oe):``,mode:c(ke)&&c(ke)!==t?c(ke):``,unreadable:V()===`unreadable`,starred:c(Z),file:Object.keys(c(H)).find(e=>c(H)[e])||``,cue:c(Pe)}}function pt(){if(Ue||!c(je))return;let e=fn(ft());`${location.pathname}${location.search}${location.hash}`!==e&&(e!==`/`||location.search||location.hash||location.pathname!==`/`)&&history.replaceState(history.state,``,e)}function mt(e=location.search){Ue=!0;let t=ln(e);y(K,t.q),y(U,t.tags),y(q,t.year),y(J,t.month),y(Y,t.since),y(X,t.until),y(Oe,t.sort),y(ke,t.mode),y(Z,t.starred),V(t.unreadable?`unreadable`:`all`),t.file&&y(H,{...c(H),[t.file]:!0}),y(Pe,un(typeof location<`u`?location.hash:``)),Ue=!1}async function ht(){let e=new URLSearchParams;!ct()&&c(q)&&(e.set(`year`,c(q)),c(J)&&e.set(`month`,c(J)));let t=e.toString(),n=await ot(t?`/notes/index?${t}`:`/notes/index`);Ne=!!n.paged,y(Me,!!n.indexing),it(n.notes,{replace:!0}),at(n.notes),Le=`${!ct()&&c(q)?c(q):``}|${!ct()&&c(J)?c(J):``}`,await st()}async function gt(e){e&&Ne&&!Be[e]&&(it((await ot(`/notes/index?year=${encodeURIComponent(e)}`)).notes),Be[e]=!0,Be=Be)}async function _t(){if(!ct()){y(Q,null);let e=`${c(q)}|${c(J)}`;if(e!==Le){Le=e;try{await ht()}catch(e){y(Ae,e.message||String(e))}}c(q)&&(ye[c(q)]=!0,ye=ye);return}try{y(Q,null);let e=new URLSearchParams,t=c(K).trim();t&&e.set(`q`,t);for(let t of c(U))e.append(`tag`,t);V()===`unreadable`&&e.set(`unreadable`,`1`),c(Z)&&e.set(`starred`,`1`),c(Y)&&e.set(`since`,c(Y)),c(X)&&e.set(`until`,c(X)),c(q)&&e.set(`year`,c(q)),c(q)&&c(J)&&e.set(`month`,c(J)),e.set(`sort`,ut()),t&&!pn(t)?e.set(`mode`,dt()):t&&e.set(`mode`,`lex`);let n=await ot(`/notes/search?${e}`);y(Q,hn(t,(n.hits||n.notes||[]).map(rt)))}catch(e){y(Ae,e.message||String(e))}}function vt(e){y(Ie,e),clearTimeout(Fe),Fe=setTimeout(()=>{pt(),_t()},150)}let yt=v(1),bt=v(!1);function xt(e){let t=[],n=new Map;for(let r of e){if(r.key===`holding`||r.key===`unfiled`||r.key===`other`){t.push({kind:`special`,key:r.key,label:Ke(r),months:[r],count:r.items.length});continue}if(!n.has(r.year)){let e={kind:`year`,key:r.year,label:r.year,months:[],count:0};n.set(r.year,e),t.push(e)}let e=n.get(r.year);e.months.push(r),e.count+=r.items.length}for(let e of c(ze)){if(n.has(e.year)){let t=n.get(e.year);t.count<e.count&&(t.count=e.count);continue}let r={kind:`year`,key:e.year,label:e.year,months:[],count:e.count};n.set(e.year,r),t.push(r)}let r=t.filter(e=>e.kind===`special`),i=t.filter(e=>e.kind===`year`).sort((e,t)=>t.key.localeCompare(e.key));return[...r,...i]}function St(e,t){return t===`special`?!0:c(q)?e===c(q):e===String(new Date().getFullYear())||e===c(fe)}function Ct(e){return Object.prototype.hasOwnProperty.call(ye,e.key)?ye[e.key]:St(e.key,e.kind)}function wt(e){return c(S)||c(q)?e.months:e.months.filter(e=>c(z).has(e.key))}function Tt(e){if(!e)return;let t=-1;for(let n=0;n<c(ue).length;n++)c(ue)[n].year===e&&(t=n);t>=0&&c(yt)<t+1&&y(yt,t+1)}function $(e){let t=!Ct(e);ye[e.key]=t,ye=ye,t&&e.kind===`year`&&(Tt(e.key),gt(e.key).catch(e=>{y(Ae,e.message||String(e))}))}function Et(e){y(q,e),y(J,``),!c(K).trim()&&!c(Y)&&!c(X)&&(ye[e]=!0,ye=ye,gt(e).then(()=>ht()).catch(e=>{y(Ae,e.message||String(e))}))}function Dt(){let e=String(new Date().getFullYear()),t={};for(let n of c(F))t[n.key]=n.kind===`special`||n.key===e||n.key===c(fe);ye=t}async function Ot(){if(Ne)try{let e=await ot(`/notes/index?all=1`);it(e.notes),at(e.notes)}catch(e){y(Ae,e.message||String(e))}let e={};for(let t of c(F))e[t.key]=!0;ye=e,c(ue).length&&y(yt,c(ue).length)}function kt(e){if(!e?.jsonFile)return e;let t=B().findIndex(t=>t.jsonFile===e.jsonFile);if(t>=0?(B(B()[t]=e,!0),B(B())):B([...B(),e]),c(Q)){let t=c(Q).findIndex(t=>t.jsonFile===e.jsonFile);t>=0&&(_(Q,c(Q)[t]={...c(Q)[t],...e,day:c(Q)[t].day||e.day}),y(Q,c(Q)))}return e}async function At(e){let t=await fetch(`/note?file=${encodeURIComponent(e)}&_=${Date.now()}`),n=await t.json().catch(()=>({}));if(!t.ok)throw Error(n.error||`failed to load note`);return kt(n)}async function jt(e){if(c(H)[e])y(Pe,null);else{try{await At(e)}catch(e){console.error(e);return}let t=(c(Q)||[]).find(t=>t.jsonFile===e);y(Pe,t?.cue??c(Pe))}_(H,c(H)[e]=!c(H)[e]),y(H,c(H)),pt()}function Mt(e,t){let n=e=>{e>0&&y(yt,c(yt)+1)},r=e.closest(`.dw-main`),i=new IntersectionObserver(e=>{e.some(e=>e.isIntersecting)&&n(t)},{root:r||null,rootMargin:`800px`});return i.observe(e),{update(i){t=i;let a=e.getBoundingClientRect().top,o=(r?.clientHeight||window.innerHeight)+800;i>0&&a<o&&n(i)},destroy(){i.disconnect()}}}async function Nt(e,t){_(Ve,c(Ve)[e]=!0),y(Ve,c(Ve)),y(Ae,``);try{await t()}catch(e){y(Ae,e.message||String(e))}finally{_(Ve,c(Ve)[e]=!1),y(Ve,c(Ve))}}async function Pt(e){await Nt(e,async()=>{await $e(`/process/force`,{file:e}),await At(e)})}async function Ft(e){await Nt(e,async()=>{await $e(`/process/skip`,{file:e}),await At(e)})}async function It(e,t){await Nt(e,async()=>{await $e(`/holding/resolve`,{file:e,action:t})})}function Lt(e){confirm(`Are you sure you want to delete this transcription?`)&&(B(B().filter(t=>t.jsonFile!==e)),c(Q)&&y(Q,c(Q).filter(t=>t.jsonFile!==e)),ge().emit(`delete-transcription`,{jsonFile:e}))}async function Rt(e){try{let t=(await At(e.jsonFile))?.transcriptionJson||{},n=(t.playbackCues||[]).map(e=>String(e.text||``).trim()).filter(Boolean),r=(n.length?n.join(`
2
+
3
+ `):``)||String(t.cleanedTranscription||t.preview||``);await navigator.clipboard.writeText(r)}catch(e){console.error(e)}}async function zt(e,t){await Nt(e,async()=>{kt(await $e(`/note`,{file:e,starred:t}))})}async function Bt(e,t){await Nt(e,async()=>{kt(await $e(`/note`,{file:e,tags:t})),await st()})}function Vt(e,t){e.transcriptionJson._currentTime=t.currentTarget.currentTime,B(B()),c(Q)&&y(Q,c(Q))}function Ht(){y(K,``)}function Ut(){y(U,[]),y(q,``),y(J,``),y(Y,``),y(X,``),y(Z,!1),V(`all`)}function Wt(e){if(!e?.jsonFile)return;let t=B().findIndex(t=>t.jsonFile===e.jsonFile);if(t>=0){let n=B()[t];e.transcriptionJson?._partial&&n.transcriptionJson&&!n.transcriptionJson._partial?B(B()[t]={...n,transcriptionJson:{...n.transcriptionJson,tags:e.transcriptionJson.tags,starred:e.transcriptionJson.starred}},!0):B(B()[t]=e,!0),B(B())}else B([...B(),e])}function Gt(e){if(y(Me,!!e?.indexing),e?.reload){Ne=!0,ht().catch(e=>{y(Ae,e.message||String(e))});return}e?.paged?(Ne=!0,it(e.notes),at(e.notes)):e?.notes&&(it(e.notes,{replace:!Ne}),at(e.notes));let t=Object.keys(c(H)).filter(e=>c(H)[e]);for(let e of t)At(e);st()}function Kt(e){Wt(e)}function qt(){mt(location.search),y(Ie,``),c(je)&&vt(c(x));let e=ln(location.search).file;e&&At(e)}ee(()=>{mt(location.search);let e=ln(location.search).file;return ge().on(`notes-index`,Gt),ge().on(`transcription`,Kt),window.addEventListener(`popstate`,qt),ht().catch(e=>{B().length||y(Ae,e.message||String(e))}).then(async()=>{if(e)try{await At(e),_(H,c(H)[e]=!0),y(H,c(H))}catch(e){y(Ae,e.message||String(e))}}).finally(()=>{y(je,!0)}),()=>{ge().off(`notes-index`,Gt),ge().off(`transcription`,Kt),window.removeEventListener(`popstate`,qt)}}),n(()=>(c(K),c(U),a(V()),c(q),c(J),c(Y),c(X),c(Oe),c(ke),c(Z)),()=>{y(x,[c(K),c(U).join(` `),V(),c(q),c(J),c(Y),c(X),c(Oe),c(ke),c(Z)?`1`:``].join(`\0`))}),n(()=>(c(je),c(x),c(Ie)),()=>{c(je)&&c(x)!==c(Ie)&&vt(c(x))}),n(()=>(c(K),c(Y),c(X),c(Z),c(U),a(V())),()=>{y(S,!!(c(K).trim()||c(Y)||c(X)||c(Z)||c(U).length||V()===`unreadable`))}),n(()=>a(B()),()=>{y(w,Je(B()))}),n(()=>(c(Re),a(B())),()=>{y(O,c(Re).length?(()=>{let e=Math.max(1,...c(Re).map(e=>e.count));return c(Re).map(({tag:t,count:n})=>({tag:t,count:n,size:`${.8+n/e*.7}rem`}))})():Ye(B()))}),n(()=>c(O),()=>{y(k,c(O).filter(e=>e.count>1))}),n(()=>c(O),()=>{y(ae,c(O).filter(e=>e.count===1))}),n(()=>(c(W),c(O),c(k),c(be),c(U)),()=>{y(oe,(()=>{let e=c(W)?c(O):c(k),t=c(be)?e:e.slice(0,40),n=c(O).filter(e=>c(U).includes(e.tag)&&!t.some(t=>t.tag===e.tag));return[...t,...n]})())}),n(()=>c(w),()=>{y(le,c(w).filter(e=>e.key===`holding`||e.key===`unfiled`))}),n(()=>c(w),()=>{y(ue,c(w).filter(e=>e.key!==`holding`&&e.key!==`unfiled`))}),n(()=>(c(S),c(w),c(le),c(ue),c(yt)),()=>{y(de,c(S)?c(w):[...c(le),...c(ue).slice(0,c(yt))])}),n(()=>(c(S),c(ue),c(yt)),()=>{y(P,c(S)?0:Math.max(0,c(ue).length-c(yt)))}),n(()=>c(ue),()=>{y(fe,c(ue)[0]?.year)}),n(()=>c(w),()=>{y(F,xt(c(w)))}),n(()=>c(F),()=>{y(R,c(F).filter(e=>e.kind===`year`).length)}),n(()=>c(de),()=>{y(z,new Set(c(de).map(e=>e.key)))}),n(()=>(c(bt),c(fe)),()=>{!c(bt)&&c(fe)&&(y(bt,!0),Tt(c(fe)))}),n(()=>(c(ze),c(q),c(fe)),()=>{y(me,c(ze).find(e=>e.year===(c(q)||c(fe)))?.count||0)}),n(()=>(c(S),c(Q),c(q),c(J),c(me)),()=>{y(he,c(S)?c(Q)==null?`Searching…`:`${c(Q).length} hit${c(Q).length===1?``:`s`}`:c(q)?`Browsing ${c(q)}${c(J)?` · ${_e[Number(c(J))-1]||c(J)}`:``} · ${c(me)} notes`:`Showing newest year · ${c(me)} notes`)}),g(),re();var Jt=jr(),Yt=o(Jt),Xt=o(Yt),Zt=l(o(Xt),2);ie(Zt);var Qt=l(Zt,2),$t=e=>{var n=Zn();m(`click`,n,Ht),t(e,n)};p(Qt,e=>{c(K)&&e($t)}),j(Xt);var en=l(Xt,2),tn=l(o(en),2),nn=o(tn),rn=l(o(nn),2),an=o(rn);an.value=an.__value=``;var on=l(an);i(on,1,()=>c(ze),r,(e,n)=>{var r=Qn(),i=M(r),a={};s(()=>{A(i,`${c(n),L(()=>c(n).year)??``} · ${c(n),L(()=>c(n).count)??``}`),a!==(a=(c(n),L(()=>c(n).year)))&&(r.value=(r.__value=a)??``)}),t(e,r)}),j(rn),b(rn),j(nn);var sn=l(nn,2),cn=l(o(sn),2),dn=o(cn);dn.value=dn.__value=``;var mn=l(dn);i(mn,1,()=>_e,r,(e,n,r)=>{var i=Qn(),a=M(i,!0),o={};s(e=>{A(a,c(n)),o!==(o=e)&&(i.value=(i.__value=o)??``)},[()=>L(()=>String(r+1).padStart(2,`0`))]),t(e,i)}),j(cn),b(cn),j(sn);var gn=l(sn,2);let _n;var vn=o(gn),bn=l(vn,2),xn=l(o(bn),2);ie(xn),j(bn);var Sn=l(bn,2),Cn=l(o(Sn),2);ie(Cn),j(Sn),j(gn);var wn=l(gn,2),Tn=o(wn);let En;var Dn=l(Tn,2);let On;var kn=l(Dn,2);let An;j(wn);var jn=l(wn,2),Mn=e=>{var n=$n(),r=o(n);let i;var a=l(r,2);let c;j(n),s((e,t)=>{i=I(r,1,``,null,i,{"is-on":e}),c=I(a,1,``,null,c,{"is-on":t})},[()=>dt()===`lex`,()=>dt()===`hybrid`]),m(`click`,r,()=>y(ke,`lex`)),m(`click`,a,()=>y(ke,`hybrid`)),t(e,n)},Nn=T(()=>L(lt));p(jn,e=>{c(Nn)&&e(Mn)});var Pn=l(jn,2);let Fn;var In=l(o(Pn)),Ln=e=>{var n=er(),r=M(n,!0);s(()=>A(r,(c(He),L(()=>c(He).starred)))),t(e,n)};p(In,e=>{c(He),L(()=>c(He)?.starred)&&e(Ln)}),j(Pn);var Rn=l(Pn,2),zn=e=>{var n=tr();m(`click`,n,()=>V(`all`)),t(e,n)};p(Rn,e=>{V()===`unreadable`&&e(zn)});var Bn=l(Rn,2),Vn=e=>{var n=nr();m(`click`,n,Ut),t(e,n)};p(Bn,e=>{c(U),c(q),c(Y),c(X),c(Z),a(V()),L(()=>c(U).length||c(q)||c(Y)||c(X)||c(Z)||V()===`unreadable`)&&e(Vn)}),j(tn),j(en);var Hn=l(en,2),Un=M(Hn,!0);j(Yt);var Wn=l(Yt,2),Gn=e=>{var n=rr(),r=M(n,!0);s(()=>A(r,c(Ae))),t(e,n)};p(Wn,e=>{c(Ae)&&e(Gn)});var Kn=l(Wn,2),qn=e=>{var n=ir();t(e,n)},Jn=e=>{var n=ar();t(e,n)},Yn=e=>{var n=or();t(e,n)};p(Kn,e=>{a(B()),c(je),L(()=>!B().length&&!c(je))?e(qn):(a(B()),c(Me),L(()=>!B().length&&c(Me))?e(Jn,1):(a(B()),L(()=>!B().length)&&e(Yn,2)))});var Mr=l(Kn,2),Nr=e=>{var n=vr(),a=o(n),d=l(o(a),2),h=o(d),g=l(h),v=e=>{var n=f();s(()=>A(n,`· ${c(ae),L(()=>c(ae).length)??``} single-use hidden`)),t(e,n)};p(g,e=>{c(W),c(ae),L(()=>!c(W)&&c(ae).length)&&e(v)});var b=l(g,2),ee=e=>{var n=f();s(()=>A(n,`· ${c(W),c(O),c(k),L(()=>(c(W)?c(O):c(k)).length-40)??``} more`)),t(e,n)};p(b,e=>{c(be),c(W),c(O),c(k),L(()=>!c(be)&&(c(W)?c(O):c(k)).length>40)&&e(ee)}),j(d),j(a);var x=l(a,2),S=e=>{var n=sr(),r=o(n),i=M(r);j(n),s(e=>A(i,`AND ${e??``}`),[()=>(c(U),L(()=>c(U).join(` + `)))]),t(e,n)};p(x,e=>{c(U),L(()=>c(U).length)&&e(S)});var w=l(x,2);i(w,5,()=>c(oe),r,(e,n)=>{var r=cr();let i;var a=o(r),u=l(a),d=M(u,!0);j(r),s(e=>{i=I(r,1,`dw-chip`,null,i,{"is-active":e}),A(a,`${c(n),L(()=>c(n).tag)??``} `),A(d,(c(n),L(()=>c(n).count)))},[()=>c(U).includes(c(n).tag)]),m(`click`,r,()=>Xe(c(n).tag)),t(e,r)}),j(w);var T=l(w,2),E=o(T),D=e=>{var n=lr(),r=M(n);s(()=>A(r,`Show all ${c(W),c(O),c(k),L(()=>(c(W)?c(O):c(k)).length)??``} listed tags`)),m(`click`,n,()=>y(be,!0)),t(e,n)};p(E,e=>{c(be),c(W),c(O),c(k),L(()=>!c(be)&&(c(W)?c(O):c(k)).length>40)&&e(D)});var ne=l(E,2),re=e=>{var n=lr(),r=M(n,!0);s(()=>A(r,(c(W),c(ae),L(()=>c(W)?`Hide single-use tags`:`Show ${c(ae).length} single-use tags`)))),m(`click`,n,()=>y(W,!c(W))),t(e,n)};p(ne,e=>{c(ae),L(()=>c(ae).length)&&e(re)});var se=l(ne,2),ce=o(se);ie(ce),C(),j(se);var N=l(se,2),le=M(N,!0);j(T);var ue=l(T,2),de=e=>{var n=rr(),r=M(n,!0);s(()=>A(r,c(we))),t(e,n)};p(ue,e=>{c(we)&&e(de)});var P=l(ue,2),fe=e=>{var n=ur(),r=M(n);s(()=>A(r,`Merged tags on ${c(De),L(()=>c(De).filesChanged)??``} notes
4
+ (${c(De),L(()=>c(De).uniqueBefore)??``} → ${c(De),L(()=>c(De).uniqueAfter)??``} unique).`)),t(e,n)};p(P,e=>{c(De)&&e(fe)});var F=l(P,2),pe=e=>{var n=_r(),a=o(n),d=o(a),f=M(d,!0),h=l(d,2),g=e=>{var n=dr(),r=M(n,!0);s(()=>A(r,c(Ce))),t(e,n)},v=e=>{var n=dr(),r=M(n);s(()=>A(r,`Model skipped: ${c(G),L(()=>c(G).modelError)??``}`)),t(e,n)},y=e=>{var n=fr();t(e,n)},b=e=>{var n=pr();t(e,n)};p(h,e=>{c(Ce)?e(g):(c(G),L(()=>c(G).modelError)?e(v,1):(c(G),L(()=>c(G).modelUsed)?e(y,2):e(b,-1)))}),j(a);var ee=l(a,2),x=e=>{var n=hr(),a=u(n);i(a,5,()=>(c(G),L(()=>c(G).groups)),r,(e,n,r)=>{var i=mr(),a=o(i),u=o(a);ie(u);var d=l(u,2),f=o(d),p=M(f,!0),m=l(f,2),h=M(m,!0),g=l(m),v=l(g),y=M(v,!0);j(d),j(a),j(i),s((e,t)=>{A(p,(c(n),L(()=>c(n).keep))),A(h,(c(n),L(()=>c(n).counts?.[c(n).keep]||``))),A(g,` ←
5
+ ${e??``} `),A(y,t)},[()=>(c(n),L(()=>c(n).drop.map(e=>`${e}${c(n).counts?.[e]?` (${c(n).counts[e]})`:``}`).join(`, `))),()=>(c(n),L(()=>Ze(c(n).reason)))]),te(u,()=>c(Te)[r],e=>_(Te,c(Te)[r]=e)),t(e,i)}),j(a);var d=l(a,2),f=o(d),p=M(f,!0),h=l(f,2);j(d),s(e=>{f.disabled=c(Ee),A(p,e),h.disabled=c(Ee)},[()=>(c(Ee),L(()=>c(Ee)?`Applying…`:`Apply ${Qe().length} merge${Qe().length===1?``:`s`}`))]),m(`click`,f,tt),m(`click`,h,nt),t(e,n)},S=e=>{var n=gr(),r=M(n);m(`click`,r,nt),t(e,n)};p(ee,e=>{c(G),L(()=>c(G).groups.length)?e(x):e(S,-1)}),j(n),s(()=>A(f,(c(G),L(()=>c(G).groups.length?`${c(G).groups.length} merge${c(G).groups.length===1?``:`s`} from ${c(G).unique} tags`:`No close duplicates in ${c(G).unique} tags`)))),t(e,n)};p(F,e=>{c(G)&&e(pe)}),j(n),s(()=>{A(h,`${c(oe),L(()=>c(oe).length)??``} shown `),ce.disabled=c(Se)||c(Ee),N.disabled=c(Se)||c(Ee),A(le,c(Se)?c(Ce)||`Reviewing tags…`:`Consolidate similar tags`)}),te(ce,()=>c(xe),e=>y(xe,e)),m(`click`,N,et),t(e,n)};p(Mr,e=>{c(O),L(()=>c(O).length)&&e(Nr)});var Pr=l(Mr,2),Fr=n=>{var r=Sr(),i=o(r),a=e=>{var n=yr();t(e,n)},u=e=>{var n=br(),r=l(o(n)),i=e=>{var n=f();s(e=>A(n,`“${e??``}”`),[()=>(c(K),L(()=>c(K).trim()))]),t(e,n)},a=T(()=>(c(K),L(()=>c(K).trim())));p(r,e=>{c(a)&&e(i)}),C(),j(n),t(e,n)},d=n=>{var r=xr(),i=o(r);{let t=e(()=>(c(H),L(()=>Object.keys(c(H)).find(e=>c(H)[e])||``)));Xn(i,{get items(){return c(Q)},variant:`hit`,get query(){return c(K)},get selectedTags(){return c(U)},get expanded(){return c(H)},get showRaw(){return c(ve)},get noteBusy(){return c(Ve)},get landFile(){return c(t)},get landCue(){return c(Pe)},$$events:{toggle:e=>jt(e.detail),star:e=>zt(e.detail.jsonFile,e.detail.starred),tag:e=>Xe(e.detail),savetags:e=>Bt(e.detail.jsonFile,e.detail.tags),raw:e=>{_(ve,c(ve)[e.detail.jsonFile]=e.detail.show),y(ve,c(ve))},time:e=>Vt(e.detail.item,e.detail.event),copy:e=>Rt(e.detail),retry:e=>Pt(e.detail),skip:e=>Ft(e.detail),resolve:e=>It(e.detail.jsonFile,e.detail.action),delete:e=>Lt(e.detail)}})}j(r),t(n,r)};p(i,e=>{c(Q)==null?e(a):(c(Q),L(()=>!c(Q).length)?e(u,1):e(d,-1))}),j(r),t(n,r)};p(Pr,e=>{c(S)&&e(Fr)});var Ir=l(Pr,2),Lr=e=>{var n=Cr(),a=l(o(n),2);i(a,5,()=>c(ze),r,(e,n)=>{var r=cr();let i;var a=o(r),u=l(a),d=M(u,!0);j(r),s(()=>{i=I(r,1,`dw-text-btn`,null,i,{"dw-text-btn-accent":c(q)===c(n).year}),A(a,`${c(n),L(()=>c(n).year)??``} `),A(d,(c(n),L(()=>c(n).count)))}),m(`click`,r,()=>Et(c(n).year)),t(e,r)}),j(a),j(n),t(e,n)};p(Ir,e=>{c(ze),L(()=>c(ze).length)&&e(Lr)});var Rr=l(Ir,2),zr=e=>{var n=wr(),r=l(o(n),2),i=o(r),a=l(i,2);j(r),j(n),m(`click`,i,Dt),m(`click`,a,Ot),t(e,n)};p(Rr,e=>{!c(S)&&c(R)>1&&e(zr)});var Br=l(Rr,2),Vr=n=>{var r=Ar(),a=o(r);i(a,1,()=>c(F),e=>e.key,(n,r)=>{var a=Or(),u=o(a),d=o(u);let f;var h=l(d,2),g=M(h,!0),v=l(h,2),b=M(v);j(u);var ee=l(u,2),x=n=>{var a=Dr();i(a,5,()=>(c(r),L(()=>wt(c(r)))),e=>e.key,(n,i)=>{var a=Er(),u=o(a),d=e=>{var n=Tr(),r=o(n),a=M(r,!0),u=l(r,2),d=M(u,!0);j(n),s(e=>{A(a,e),A(d,(c(i),L(()=>c(i).items.length)))},[()=>(c(i),L(()=>Ke(c(i))))]),t(e,n)};p(u,e=>{c(r),L(()=>c(r).kind===`year`)&&e(d)});var f=l(u,2),m=o(f);{let t=e(()=>(c(H),L(()=>Object.keys(c(H)).find(e=>c(H)[e])||``)));Xn(m,{get items(){return c(i),L(()=>c(i).items)},get selectedTags(){return c(U)},get expanded(){return c(H)},get showRaw(){return c(ve)},get noteBusy(){return c(Ve)},get landFile(){return c(t)},get landCue(){return c(Pe)},$$events:{toggle:e=>jt(e.detail),star:e=>zt(e.detail.jsonFile,e.detail.starred),tag:e=>Xe(e.detail),savetags:e=>Bt(e.detail.jsonFile,e.detail.tags),raw:e=>{_(ve,c(ve)[e.detail.jsonFile]=e.detail.show),y(ve,c(ve))},time:e=>Vt(e.detail.item,e.detail.event),copy:e=>Rt(e.detail),retry:e=>Pt(e.detail),skip:e=>Ft(e.detail),resolve:e=>It(e.detail.jsonFile,e.detail.action),delete:e=>Lt(e.detail)}})}j(f),j(a),t(n,a)}),j(a),t(n,a)},S=T(()=>(c(r),L(()=>Ct(c(r)))));p(ee,e=>{c(S)&&e(x)}),j(a),s((e,t)=>{D(u,`aria-expanded`,e),f=I(d,0,`chevron svelte-hs422r`,null,f,{"is-closed":t}),A(g,(c(r),L(()=>c(r).label))),A(b,`${c(r),L(()=>c(r).count)??``} note${c(r),L(()=>c(r).count===1?``:`s`)??``}`)},[()=>(c(r),L(()=>Ct(c(r)))),()=>!Ct(c(r))]),m(`click`,u,()=>$(c(r))),t(n,a)});var u=l(a,2),d=e=>{var n=kr(),r=M(n);pe(n,(e,t)=>Mt?.(e,t),()=>c(P)),s(()=>A(r,`${c(P)??``} older month${c(P)===1?``:`s`} — scroll to load`)),t(e,n)};p(u,e=>{c(P)>0&&e(d)}),j(r),t(n,r)};p(Br,e=>{c(S)||e(Vr)}),j(Jt),s((e,t,n)=>{cn.disabled=!c(q),_n=I(gn,1,`dates svelte-hs422r`,null,_n,{"is-open":c(We)}),En=I(Tn,1,``,null,En,{"is-on":e}),On=I(Dn,1,``,null,On,{"is-on":t}),An=I(kn,1,``,null,An,{"is-on":n}),Fn=I(Pn,1,`dw-chip`,null,Fn,{"is-active":c(Z)}),A(Un,c(he))},[()=>ut()===`recent`,()=>ut()===`oldest`,()=>ut()===`relevance`]),se(Zt,()=>c(K),e=>y(K,e)),E(rn,()=>c(q),e=>y(q,e)),m(`change`,rn,()=>y(J,c(q)?c(J):``)),E(cn,()=>c(J),e=>y(J,e)),m(`click`,vn,()=>y(We,!c(We))),se(xn,()=>c(Y),e=>y(Y,e)),se(Cn,()=>c(X),e=>y(X,e)),m(`click`,Tn,()=>y(Oe,`recent`)),m(`click`,Dn,()=>y(Oe,`oldest`)),m(`click`,kn,()=>y(Oe,`relevance`)),m(`click`,Pn,()=>y(Z,!c(Z))),t(d,Jt),ce()}var Nr=d(`<div class="dw-app-shell"><!> <main class="dw-main"><!> <!></main> <!> <!></div>`);function Pr(e,n){ne(n,!1);let r=Vt({path:`/socket.io`}),i=v(!1),a=v(!1),s=v(`all`);re();var u=Nr(),d=o(u);Ut(d,{$$events:{help:()=>{y(i,!c(i)),c(i)&&y(a,!1)},tools:()=>{y(a,!c(a)),c(a)&&y(i,!1)}}});var f=l(d,2),p=o(f);qt(p,{}),Mr(l(p,2),{get socket(){return r},get noteFilter(){return c(s)},set noteFilter(e){y(s,e)},$$legacy:!0}),j(f);var m=l(f,2);Yt(m,{get open(){return c(i)},set open(e){y(i,e)},$$legacy:!0}),on(l(m,2),{get open(){return c(a)},set open(e){y(a,e)},get noteFilter(){return c(s)},set noteFilter(e){y(s,e)},$$legacy:!0}),j(u),t(e,u),ce()}export{Pr as component};
@@ -0,0 +1 @@
1
+ {"version":"1789486604854"}
Binary file
@@ -0,0 +1,3 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 128 128" role="img" aria-label="DictaWhisper">
2
+ <image href="data:image/png;base64,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" width="128" height="128" />
3
+ </svg>
@@ -0,0 +1,38 @@
1
+ <!DOCTYPE html>
2
+ <html lang="en" style="color-scheme: dark">
3
+ <head>
4
+ <meta charset="utf-8" />
5
+ <link rel="icon" href="/favicon.png" type="image/png" />
6
+ <link rel="icon" href="/favicon.svg" type="image/svg+xml" />
7
+ <meta name="viewport" content="width=device-width" />
8
+ <title>DictaWhisper</title>
9
+ <link href="/_app/immutable/entry/start.C5XBbXTT.js" rel="modulepreload">
10
+ <link href="/_app/immutable/chunks/BslYtab-.js" rel="modulepreload">
11
+ <link href="/_app/immutable/chunks/BSs9MmST.js" rel="modulepreload">
12
+ <link href="/_app/immutable/entry/app.BJlRju4c.js" rel="modulepreload">
13
+ <link href="/_app/immutable/chunks/xihTtKlq.js" rel="modulepreload">
14
+ <link href="/_app/immutable/nodes/0.D23pkrHr.js" rel="modulepreload">
15
+
16
+ <link href="/_app/immutable/assets/0.C6M3gHo0.css" rel="stylesheet">
17
+ </head>
18
+ <body data-sveltekit-preload-data="hover">
19
+ <div style="display: contents">
20
+ <script>
21
+ {
22
+ __sveltekit_d62gqb = {
23
+ base: ""
24
+ };
25
+
26
+ const element = document.currentScript.parentElement;
27
+
28
+ Promise.all([
29
+ import("/_app/immutable/entry/start.C5XBbXTT.js"),
30
+ import("/_app/immutable/entry/app.BJlRju4c.js")
31
+ ]).then(([kit, app]) => {
32
+ kit.start(app, element);
33
+ });
34
+ }
35
+ </script>
36
+ </div>
37
+ </body>
38
+ </html>
Binary file
package/package.json CHANGED
@@ -1,8 +1,8 @@
1
1
  {
2
2
  "name": "dictawhisper",
3
- "version": "0.0.13",
3
+ "version": "0.0.14",
4
4
  "private": false,
5
- "description": "Name hold. The voice journal is a git clone (dictawhisper.com). A CLI or library may land here later.",
5
+ "description": "Local voice journal. Record or drop audio, transcribe with faster-whisper, keep the .json next to the file.",
6
6
  "homepage": "https://dictawhisper.com",
7
7
  "repository": {
8
8
  "type": "git",
@@ -23,12 +23,21 @@
23
23
  ],
24
24
  "type": "module",
25
25
  "license": "MIT",
26
+ "bin": {
27
+ "dictawhisper": "./bin/dictawhisper.mjs"
28
+ },
26
29
  "files": [
30
+ "bin",
31
+ "src",
32
+ "scripts/transcribe_faster_whisper.py",
33
+ "dist/ui",
34
+ "config.example.json",
27
35
  "README.md",
28
36
  "LICENSE"
29
37
  ],
30
38
  "scripts": {
31
39
  "start": "node --experimental-strip-types src/server.ts",
40
+ "cli": "node --experimental-strip-types src/cli.ts",
32
41
  "dev": "node scripts/ensure-lease.mjs dictawhisper 7777 && node scripts/ensure-lease.mjs dictawhisper-api 8008 && node --experimental-strip-types src/dev.ts",
33
42
  "serve": "node scripts/ensure-lease.mjs dictawhisper 7777 && node scripts/ensure-lease.mjs dictawhisper-api 8008 && node --experimental-strip-types src/dev.ts",
34
43
  "turbo": "WHISPER_MODEL=turbo node --experimental-strip-types src/server.ts",
@@ -50,7 +59,7 @@
50
59
  "site:build": "pnpm --dir site build",
51
60
  "site:deploy": "pnpm --dir site run ship",
52
61
  "ship": "pnpm --dir site run ship",
53
- "prepublishOnly": "node scripts/publish-gate.mjs && pnpm test && pnpm typecheck"
62
+ "prepublishOnly": "node scripts/publish-gate.mjs && pnpm test && pnpm typecheck && pnpm --dir client build"
54
63
  },
55
64
  "engines": {
56
65
  "node": ">=20"