dictawhisper 0.1.0 → 0.1.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +2 -2
- package/dist/ui/_app/immutable/chunks/B7P9Bdo4.js +33 -0
- package/dist/ui/_app/immutable/chunks/ICzWSN-L.js +10 -0
- package/dist/ui/_app/immutable/entry/app.BeDpCbyd.js +2 -0
- package/dist/ui/_app/immutable/entry/start.Bw1T7G7Y.js +1 -0
- package/dist/ui/_app/immutable/nodes/0.BUULaIw9.js +1 -0
- package/dist/ui/_app/immutable/nodes/1.D7ds6MUE.js +1 -0
- package/dist/ui/_app/immutable/nodes/2.EDwNSJmR.js +5 -0
- package/dist/ui/_app/version.json +1 -1
- package/dist/ui/index.html +8 -8
- package/package.json +5 -4
- package/src/config.ts +4 -4
- package/src/dev.ts +2 -2
- package/src/lib/fsLib.ts +26 -11
- package/src/lib/{localberthGet.ts → localslipGet.ts} +14 -14
- package/src/lib/organizationLib.ts +11 -4
- package/src/lib/pathAllowLib.ts +9 -4
- package/src/mcp.ts +1 -0
- package/dist/ui/_app/immutable/chunks/B6cwCJKA.js +0 -1
- package/dist/ui/_app/immutable/chunks/BSs9MmST.js +0 -3
- package/dist/ui/_app/immutable/entry/app.B1YXqgCp.js +0 -2
- package/dist/ui/_app/immutable/entry/start.BYT3hNJ7.js +0 -1
- package/dist/ui/_app/immutable/nodes/0.D23pkrHr.js +0 -1
- package/dist/ui/_app/immutable/nodes/1.Ds-_qQ1w.js +0 -1
- package/dist/ui/_app/immutable/nodes/2.59uAq_ko.js +0 -5
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import{$ as e,A as t,B as n,Ct as r,D as i,E as a,F as o,G as s,H as c,I as l,J as u,K as d,L as f,M as p,N as m,O as h,P as g,Q as _,R as v,S as y,St as b,V as x,Z as S,_ as C,_t as w,a as ee,at as T,b as E,bt as D,c as O,ct as te,d as k,dt as A,et as j,f as ne,g as re,gt as M,h as ie,i as N,it as ae,j as oe,k as se,l as P,lt as F,m as ce,mt as le,n as ue,nt as I,o as de,p as fe,pt as pe,q as me,rt as L,st as he,t as ge,tt as _e,u as ve,v as ye,vt as R,wt as be,x as xe,xt as z,y as Se,yt as Ce,z as B}from"../chunks/B7P9Bdo4.js";import"../chunks/xihTtKlq.js";w();var we=Object.create(null);we.open=`0`,we.close=`1`,we.ping=`2`,we.pong=`3`,we.message=`4`,we.upgrade=`5`,we.noop=`6`;var V=Object.create(null);Object.keys(we).forEach(e=>{V[we[e]]=e});var Te={type:`error`,data:`parser error`},Ee=typeof Blob==`function`||typeof Blob<`u`&&Object.prototype.toString.call(Blob)===`[object BlobConstructor]`,De=typeof ArrayBuffer==`function`,H=e=>typeof ArrayBuffer.isView==`function`?ArrayBuffer.isView(e):e&&e.buffer instanceof ArrayBuffer,Oe=({type:e,data:t},n,r)=>Ee&&t instanceof Blob?n?r(t):ke(t,r):De&&(t instanceof ArrayBuffer||H(t))?n?r(t):ke(new Blob([t]),r):r(we[e]+(t||``)),ke=(e,t)=>{let n=new FileReader;return n.onload=function(){let e=n.result.split(`,`)[1];t(`b`+(e||``))},n.readAsDataURL(e)};function U(e){return e instanceof Uint8Array?e:e instanceof ArrayBuffer?new Uint8Array(e):new Uint8Array(e.buffer,e.byteOffset,e.byteLength)}var Ae;function je(e,t){if(Ee&&e.data instanceof Blob)return e.data.arrayBuffer().then(U).then(t);if(De&&(e.data instanceof ArrayBuffer||H(e.data)))return t(U(e.data));Oe(e,!1,e=>{Ae||=new TextEncoder,t(Ae.encode(e))})}var Me=`ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/`,Ne=typeof Uint8Array>`u`?[]:new Uint8Array(256);for(let e=0;e<64;e++)Ne[Me.charCodeAt(e)]=e;var Pe=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=Ne[e.charCodeAt(r)],o=Ne[e.charCodeAt(r+1)],s=Ne[e.charCodeAt(r+2)],c=Ne[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},Fe=typeof ArrayBuffer==`function`,W=(e,t)=>{if(typeof e!=`string`)return{type:`message`,data:Le(e,t)};let n=e.charAt(0);return n===`b`?{type:`message`,data:Ie(e.substring(1),t)}:V[n]?e.length>1?{type:V[n],data:e.substring(1)}:{type:V[n]}:Te},Ie=(e,t)=>Fe?Le(Pe(e),t):{base64:!0,data:e},Le=(e,t)=>{switch(t){case`blob`:return e instanceof Blob?e:new Blob([e]);default:return e instanceof ArrayBuffer?e:e.buffer}},Re=``,G=(e,t)=>{let n=e.length,r=Array(n),i=0;e.forEach((e,a)=>{Oe(e,!1,e=>{r[a]=e,++i===n&&t(r.join(Re))})})},K=(e,t)=>{let n=e.split(Re),r=[];for(let e=0;e<n.length;e++){let i=W(n[e],t);if(r.push(i),i.type===`error`)break}return r};function q(){return new TransformStream({transform(e,t){je(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 ze;function Be(e){return e.reduce((e,t)=>e+t.length,0)}function Ve(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 He(e,t){ze||=new TextDecoder;let n=[],r=0,i=-1,a=!1;return new TransformStream({transform(o,s){for(n.push(o);;){if(r===0){if(Be(n)<1)break;let e=Ve(n,1);a=(e[0]&128)==128,i=e[0]&127,r=i<126?3:i===126?1:2}else if(r===1){if(Be(n)<2)break;let e=Ve(n,2);i=new DataView(e.buffer,e.byteOffset,e.length).getUint16(0),r=3}else if(r===2){if(Be(n)<8)break;let e=Ve(n,8),t=new DataView(e.buffer,e.byteOffset,e.length),a=t.getUint32(0);if(a>2**21-1){s.enqueue(Te);break}i=a*2**32+t.getUint32(4),r=3}else{if(Be(n)<i)break;let e=Ve(n,i);s.enqueue(W(a?e:ze.decode(e),t)),r=0}if(i===0||i>e){s.enqueue(Te);break}}}})}function J(e){if(e)return Ue(e)}function Ue(e){for(var t in J.prototype)e[t]=J.prototype[t];return e}J.prototype.on=J.prototype.addEventListener=function(e,t){return this._callbacks=this._callbacks||{},(this._callbacks[`$`+e]=this._callbacks[`$`+e]||[]).push(t),this},J.prototype.once=function(e,t){function n(){this.off(e,n),t.apply(this,arguments)}return n.fn=t,this.on(e,n),this},J.prototype.off=J.prototype.removeListener=J.prototype.removeAllListeners=J.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},J.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},J.prototype.emitReserved=J.prototype.emit,J.prototype.listeners=function(e){return this._callbacks=this._callbacks||{},this._callbacks[`$`+e]||[]},J.prototype.hasListeners=function(e){return!!this.listeners(e).length};var We=typeof Promise==`function`&&typeof Promise.resolve==`function`?e=>Promise.resolve().then(e):(e,t)=>t(e,0),Ge=typeof self<`u`?self:typeof window<`u`?window:Function(`return this`)(),Ke=`arraybuffer`;function Y(e,...t){return t.reduce((t,n)=>(e.hasOwnProperty(n)&&(t[n]=e[n]),t),{})}var qe=Ge.setTimeout,Je=Ge.clearTimeout;function Ye(e,t){t.useNativeTimers?(e.setTimeoutFn=qe.bind(Ge),e.clearTimeoutFn=Je.bind(Ge)):(e.setTimeoutFn=Ge.setTimeout.bind(Ge),e.clearTimeoutFn=Ge.clearTimeout.bind(Ge))}var Xe=1.33;function Ze(e){return typeof e==`string`?Qe(e):Math.ceil((e.byteLength||e.size)*Xe)}function Qe(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 $e(){return Date.now().toString(36).substring(3)+Math.random().toString(36).substring(2,5)}function et(e){let t=``;for(let n in e)e.hasOwnProperty(n)&&(t.length&&(t+=`&`),t+=encodeURIComponent(n)+`=`+encodeURIComponent(e[n]));return t}function tt(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 nt=class extends Error{constructor(e,t,n){super(e),this.description=t,this.context=n,this.type=`TransportError`}},rt=class extends J{constructor(e){super(),this.writable=!1,Ye(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 nt(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=W(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=et(e);return t.length?`?`+t:``}},it=class extends rt{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){K(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,G(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]=$e()),!this.supportsBinary&&!t.sid&&(t.b64=1),this.createUri(e,t)}},at=!1;try{at=typeof XMLHttpRequest<`u`&&`withCredentials`in new XMLHttpRequest}catch{}var ot=at;function st(){}var ct=class extends it{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}},lt=class e extends J{constructor(e,t,n){super(),this.createRequest=e,Ye(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=Y(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=st,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(lt.requestsCount=0,lt.requests={},typeof document<`u`){if(typeof attachEvent==`function`)attachEvent(`onunload`,ut);else if(typeof addEventListener==`function`){let e=`onpagehide`in Ge?`pagehide`:`unload`;addEventListener(e,ut,!1)}}function ut(){for(let e in lt.requests)lt.requests.hasOwnProperty(e)&<.requests[e].abort()}var dt=(function(){let e=pt({xdomain:!1});return e&&e.responseType!==null})(),ft=class extends ct{constructor(e){super(e);let t=e&&e.forceBase64;this.supportsBinary=dt&&!t}request(e={}){return Object.assign(e,{xd:this.xd},this.opts),new lt(pt,this.uri(),e)}};function pt(e){let t=e.xdomain;try{if(typeof XMLHttpRequest<`u`&&(!t||ot))return new XMLHttpRequest}catch{}if(!t)try{return new Ge[[`Active`,`Object`].join(`X`)](`Microsoft.XMLHTTP`)}catch{}}var mt=typeof navigator<`u`&&typeof navigator.product==`string`&&navigator.product.toLowerCase()===`reactnative`,ht=class extends rt{get name(){return`websocket`}doOpen(){let e=this.uri(),t=this.opts.protocols,n=mt?{}:Y(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;Oe(n,this.supportsBinary,e=>{try{this.doWrite(n,e)}catch{}r&&We(()=>{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]=$e()),this.supportsBinary||(t.b64=1),this.createUri(e,t)}},gt=Ge.WebSocket||Ge.MozWebSocket,_t={websocket:class extends ht{createSocket(e,t,n){return mt?new gt(e,t,n):t?new gt(e,t):new gt(e)}doWrite(e,t){this.ws.send(t)}},webtransport:class extends rt{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=He(2**53-1,this.socket.binaryType),n=e.readable.pipeThrough(t).getReader(),r=q();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&&We(()=>{this.writable=!0,this.emitReserved(`drain`)},this.setTimeoutFn)})}}doClose(){var e;(e=this._transport)==null||e.close()}},polling:ft},vt=/^(?:(?![^:@\/?#]+:[^:@\/]*@)(http|https|ws|wss):\/\/)?((?:(([^:@\/?#]*)(?::([^:@\/?#]*))?)?@)?((?:[a-f0-9]{0,4}:){2,7}[a-f0-9]{0,4}|[^:\/?#]*)(?::(\d*))?)(((\/(?:[^?#](?![^?#\/]*\.[^?#\/.]+(?:[?#]|$)))*\/?)?([^?#\/]*))(?:\?([^#]*))?(?:#(.*))?)/,yt=[`source`,`protocol`,`authority`,`userInfo`,`user`,`password`,`host`,`port`,`relative`,`path`,`directory`,`file`,`query`,`anchor`];function bt(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=vt.exec(e||``),a={},o=14;for(;o--;)a[yt[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=xt(a,a.path),a.queryKey=St(a,a.query),a}function xt(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 St(e,t){let n={};return t.replace(/(?:^|&)([^&=]*)=?([^&]*)/g,function(e,t,r){t&&(n[t]=r)}),n}var Ct=typeof addEventListener==`function`&&typeof removeEventListener==`function`,wt=[];Ct&&addEventListener(`offline`,()=>{wt.forEach(e=>e())},!1);var Tt=class e extends J{constructor(e,t){if(super(),this.binaryType=Ke,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=bt(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=bt(t.host).host);Ye(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=tt(this.opts.query)),Ct&&(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`})},wt.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+=Ze(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,We(()=>{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(),Ct&&(this._beforeunloadEventListener&&removeEventListener(`beforeunload`,this._beforeunloadEventListener,!1),this._offlineEventListener)){let e=wt.indexOf(this._offlineEventListener);e!==-1&&wt.splice(e,1)}this.readyState=`closed`,this.id=null,this.emitReserved(`close`,e,t),this.writeBuffer=[],this._prevBufferLen=0}}};Tt.protocol=4;var Et=class extends Tt{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;Tt.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;Tt.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 Et{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=>_t[e]).filter(e=>!!e)),super(n?r:e,r)}};Dt.protocol;function Ot(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=bt(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 kt=typeof ArrayBuffer==`function`,At=e=>typeof ArrayBuffer.isView==`function`?ArrayBuffer.isView(e):e.buffer instanceof ArrayBuffer,jt=Object.prototype.toString,Mt=typeof Blob==`function`||typeof Blob<`u`&&jt.call(Blob)===`[object BlobConstructor]`,Nt=typeof File==`function`||typeof File<`u`&&jt.call(File)===`[object FileConstructor]`;function Pt(e){return kt&&(e instanceof ArrayBuffer||At(e))||Mt&&e instanceof Blob||Nt&&e instanceof File}function Ft(e,t){if(!e||typeof e!=`object`)return!1;if(Array.isArray(e)){for(let t=0,n=e.length;t<n;t++)if(Ft(e[t]))return!0;return!1}if(Pt(e))return!0;if(e.toJSON&&typeof e.toJSON==`function`&&arguments.length===1)return Ft(e.toJSON(),!0);for(let t in e)if(Object.prototype.hasOwnProperty.call(e,t)&&Ft(e[t]))return!0;return!1}function It(e){let t=[],n=e.data,r=e;return r.data=Lt(n,t),r.attachments=t.length,{packet:r,buffers:t}}function Lt(e,t,n){if(!e)return e;if(Pt(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]=Lt(e[r],t);return n}if(typeof e==`object`&&!(e instanceof Date)){if(e.toJSON&&typeof e.toJSON==`function`&&!n)return Lt(e.toJSON(),t,!0);let r={};for(let n in e)Object.prototype.hasOwnProperty.call(e,n)&&(r[n]=Lt(e[n],t));return r}return e}function Rt(e,t){return e.data=zt(e.data,t),delete e.attachments,e}function zt(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]=zt(e[n],t);else if(typeof e==`object`)for(let n in e)Object.prototype.hasOwnProperty.call(e,n)&&(e[n]=zt(e[n],t));return e}var Bt=b(((e,t)=>{var n=1e3,r=n*60,i=r*60,a=i*24,o=a*7,s=a*365.25;t.exports=function(e,t){t||={};var n=typeof e;if(n===`string`&&e.length>0)return c(e);if(n===`number`&&isFinite(e))return t.long?u(e):l(e);throw Error(`val is not a non-empty string or a valid number. val=`+JSON.stringify(e))};function c(e){if(e=String(e),!(e.length>100)){var t=/^(-?(?:\d+)?\.?\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec(e);if(t){var c=parseFloat(t[1]);switch((t[2]||`ms`).toLowerCase()){case`years`:case`year`:case`yrs`:case`yr`:case`y`:return c*s;case`weeks`:case`week`:case`w`:return c*o;case`days`:case`day`:case`d`:return c*a;case`hours`:case`hour`:case`hrs`:case`hr`:case`h`:return c*i;case`minutes`:case`minute`:case`mins`:case`min`:case`m`:return c*r;case`seconds`:case`second`:case`secs`:case`sec`:case`s`:return c*n;case`milliseconds`:case`millisecond`:case`msecs`:case`msec`:case`ms`:return c;default:return}}}}function l(e){var t=Math.abs(e);return t>=a?Math.round(e/a)+`d`:t>=i?Math.round(e/i)+`h`:t>=r?Math.round(e/r)+`m`:t>=n?Math.round(e/n)+`s`:e+`ms`}function u(e){var t=Math.abs(e);return t>=a?d(e,t,a,`day`):t>=i?d(e,t,i,`hour`):t>=r?d(e,t,r,`minute`):t>=n?d(e,t,n,`second`):e+` ms`}function d(e,t,n,r){var i=t>=n*1.5;return Math.round(e/n)+` `+r+(i?`s`:``)}})),Vt=b(((e,t)=>{function n(e){n.debug=n,n.default=n,n.coerce=c,n.disable=o,n.enable=i,n.enabled=s,n.humanize=Bt(),n.destroy=l,Object.keys(e).forEach(t=>{n[t]=e[t]}),n.names=[],n.skips=[],n.formatters={};function t(e){let t=0;for(let n=0;n<e.length;n++)t=(t<<5)-t+e.charCodeAt(n),t|=0;return n.colors[Math.abs(t)%n.colors.length]}n.selectColor=t;function n(e){let t,i=null,a,o;function s(...e){if(!s.enabled)return;let r=s,i=Number(new Date);r.diff=i-(t||i),r.prev=t,r.curr=i,t=i,e[0]=n.coerce(e[0]),typeof e[0]!=`string`&&e.unshift(`%O`);let a=0;e[0]=e[0].replace(/%([a-zA-Z%])/g,(t,i)=>{if(t===`%%`)return`%`;a++;let o=n.formatters[i];if(typeof o==`function`){let n=e[a];t=o.call(r,n),e.splice(a,1),a--}return t}),n.formatArgs.call(r,e),(r.log||n.log).apply(r,e)}return s.namespace=e,s.useColors=n.useColors(),s.color=n.selectColor(e),s.extend=r,s.destroy=n.destroy,Object.defineProperty(s,"enabled",{enumerable:!0,configurable:!1,get:()=>i===null?(a!==n.namespaces&&(a=n.namespaces,o=n.enabled(e)),o):i,set:e=>{i=e}}),typeof n.init==`function`&&n.init(s),s}function r(e,t){let r=n(this.namespace+(t===void 0?`:`:t)+e);return r.log=this.log,r}function i(e){n.save(e),n.namespaces=e,n.names=[],n.skips=[];let t=(typeof e==`string`?e:``).trim().replace(/\s+/g,`,`).split(`,`).filter(Boolean);for(let e of t)e[0]===`-`?n.skips.push(e.slice(1)):n.names.push(e)}function a(e,t){let n=0,r=0,i=-1,a=0;for(;n<e.length;)if(r<t.length&&(t[r]===e[n]||t[r]===`*`))t[r]===`*`?(i=r,a=n,r++):(n++,r++);else if(i!==-1)r=i+1,a++,n=a;else return!1;for(;r<t.length&&t[r]===`*`;)r++;return r===t.length}function o(){let e=[...n.names,...n.skips.map(e=>`-`+e)].join(`,`);return n.enable(``),e}function s(e){for(let t of n.skips)if(a(e,t))return!1;for(let t of n.names)if(a(e,t))return!0;return!1}function c(e){return e instanceof Error?e.stack||e.message:e}function l(){console.warn("Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.")}return n.enable(n.load()),n}t.exports=n})),Ht=b(((e,t)=>{e.formatArgs=r,e.save=i,e.load=a,e.useColors=n,e.storage=o(),e.destroy=(()=>{let e=!1;return()=>{e||(e=!0,console.warn("Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`."))}})(),e.colors=`#0000CC.#0000FF.#0033CC.#0033FF.#0066CC.#0066FF.#0099CC.#0099FF.#00CC00.#00CC33.#00CC66.#00CC99.#00CCCC.#00CCFF.#3300CC.#3300FF.#3333CC.#3333FF.#3366CC.#3366FF.#3399CC.#3399FF.#33CC00.#33CC33.#33CC66.#33CC99.#33CCCC.#33CCFF.#6600CC.#6600FF.#6633CC.#6633FF.#66CC00.#66CC33.#9900CC.#9900FF.#9933CC.#9933FF.#99CC00.#99CC33.#CC0000.#CC0033.#CC0066.#CC0099.#CC00CC.#CC00FF.#CC3300.#CC3333.#CC3366.#CC3399.#CC33CC.#CC33FF.#CC6600.#CC6633.#CC9900.#CC9933.#CCCC00.#CCCC33.#FF0000.#FF0033.#FF0066.#FF0099.#FF00CC.#FF00FF.#FF3300.#FF3333.#FF3366.#FF3399.#FF33CC.#FF33FF.#FF6600.#FF6633.#FF9900.#FF9933.#FFCC00.#FFCC33`.split(`.`);function n(){if(typeof window<`u`&&window.process&&(window.process.type===`renderer`||window.process.__nwjs))return!0;if(typeof navigator<`u`&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/(edge|trident)\/(\d+)/))return!1;let e;return typeof document<`u`&&document.documentElement&&document.documentElement.style&&document.documentElement.style.WebkitAppearance||typeof window<`u`&&window.console&&(window.console.firebug||window.console.exception&&window.console.table)||typeof navigator<`u`&&navigator.userAgent&&(e=navigator.userAgent.toLowerCase().match(/firefox\/(\d+)/))&&parseInt(e[1],10)>=31||typeof navigator<`u`&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/applewebkit\/(\d+)/)}function r(e){if(e[0]=(this.useColors?`%c`:``)+this.namespace+(this.useColors?` %c`:` `)+e[0]+(this.useColors?`%c `:` `)+`+`+t.exports.humanize(this.diff),!this.useColors)return;let n=`color: `+this.color;e.splice(1,0,n,`color: inherit`);let r=0,i=0;e[0].replace(/%[a-zA-Z%]/g,e=>{e!==`%%`&&(r++,e===`%c`&&(i=r))}),e.splice(i,0,n)}e.log=console.debug||console.log||(()=>{});function i(t){try{t?e.storage.setItem(`debug`,t):e.storage.removeItem(`debug`)}catch{}}function a(){let t;try{t=e.storage.getItem(`debug`)||e.storage.getItem(`DEBUG`)}catch{}return!t&&typeof process<`u`&&`env`in process&&(t={}.DEBUG),t}function o(){try{return localStorage}catch{}}t.exports=Vt()(e);var{formatters:s}=t.exports;s.j=function(e){try{return JSON.stringify(e)}catch(e){return`[UnexpectedJSONParseError]: `+e.message}}})),Ut=r({Decoder:()=>qt,Encoder:()=>Kt,PacketType:()=>X,isPacketValid:()=>en,protocol:()=>5}),Wt=(0,be(Ht()).default)(`socket.io-parser`),Gt=[`connect`,`connect_error`,`disconnect`,`disconnecting`,`newListener`,`removeListener`],X;(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`})(X||={});var Kt=class{constructor(e){this.replacer=e}encode(e){return Wt(`encoding packet %j`,e),(e.type===X.EVENT||e.type===X.ACK)&&Ft(e)?this.encodeAsBinary({type:e.type===X.EVENT?X.BINARY_EVENT:X.BINARY_ACK,nsp:e.nsp,data:e.data,id:e.id}):[this.encodeAsString(e)]}encodeAsString(e){let t=``+e.type;return(e.type===X.BINARY_EVENT||e.type===X.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)),Wt(`encoded %j as %s`,e,t),t}encodeAsBinary(e){let t=It(e),n=this.encodeAsString(t.packet),r=t.buffers;return r.unshift(n),r}},qt=class e extends J{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===X.BINARY_EVENT;n||t.type===X.BINARY_ACK?(t.type=n?X.EVENT:X.ACK,this.reconstructor=new Jt(t)):super.emitReserved(`decoded`,t)}else if(Pt(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(X[r.type]===void 0)throw Error(`unknown packet type `+r.type);if(r.type===X.BINARY_EVENT||r.type===X.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(!Xt(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 Wt(`decoded %s as %j`,t,r),r}tryParse(e){try{return JSON.parse(e,this.opts.reviver)}catch{return!1}}static isPayloadValid(e,t){switch(e){case X.CONNECT:return Qt(t);case X.DISCONNECT:return t===void 0;case X.CONNECT_ERROR:return typeof t==`string`||Qt(t);case X.EVENT:case X.BINARY_EVENT:return Array.isArray(t)&&(typeof t[0]==`number`||typeof t[0]==`string`&&Gt.indexOf(t[0])===-1);case X.ACK:case X.BINARY_ACK:return Array.isArray(t)}}destroy(){this.reconstructor&&=(this.reconstructor.finishedReconstruction(),null)}},Jt=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=Rt(this.reconPack,this.buffers);return this.finishedReconstruction(),e}return null}finishedReconstruction(){this.reconPack=null,this.buffers=[]}};function Yt(e){return typeof e==`string`}var Xt=Number.isInteger||function(e){return typeof e==`number`&&isFinite(e)&&Math.floor(e)===e};function Zt(e){return e===void 0||Xt(e)}function Qt(e){return Object.prototype.toString.call(e)===`[object Object]`}function $t(e,t){switch(e){case X.CONNECT:return t===void 0||Qt(t);case X.DISCONNECT:return t===void 0;case X.EVENT:return Array.isArray(t)&&(typeof t[0]==`number`||typeof t[0]==`string`&&Gt.indexOf(t[0])===-1);case X.ACK:return Array.isArray(t);case X.CONNECT_ERROR:return typeof t==`string`||Qt(t);default:return!1}}function en(e){return Yt(e.nsp)&&Zt(e.id)&&$t(e.type,e.data)}function tn(e,t,n){return e.on(t,n),function(){e.off(t,n)}}var nn=Object.freeze({connect:1,connect_error:1,disconnect:1,disconnecting:1,newListener:1,removeListener:1}),rn=class extends J{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=[tn(e,`open`,this.onopen.bind(this)),tn(e,`packet`,this.onpacket.bind(this)),tn(e,`error`,this.onerror.bind(this)),tn(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(nn.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:X.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:X.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 X.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 X.EVENT:case X.BINARY_EVENT:this.onevent(e);break;case X.ACK:case X.BINARY_ACK:this.onack(e);break;case X.DISCONNECT:this.ondisconnect();break;case X.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:X.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:X.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 an(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}an.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},an.prototype.reset=function(){this.attempts=0},an.prototype.setMin=function(e){this.ms=e},an.prototype.setMax=function(e){this.max=e},an.prototype.setJitter=function(e){this.jitter=e};var on=class extends J{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,Ye(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 an({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||Ut;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=tn(t,`open`,function(){n.onopen(),e&&e()}),i=t=>{this.cleanup(),this._readyState=`closed`,this.emitReserved(`error`,t),e?e(t):this.maybeReconnectOnOpen()},a=tn(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(tn(e,`ping`,this.onping.bind(this)),tn(e,`data`,this.ondata.bind(this)),tn(e,`error`,this.onerror.bind(this)),tn(e,`close`,this.onclose.bind(this)),tn(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){We(()=>{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 rn(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)}},sn={};function cn(e,t){typeof e==`object`&&(t=e,e=void 0),t||={};let n=Ot(e,t.path||`/socket.io`),r=n.source,i=n.id,a=n.path,o=sn[i]&&a in sn[i].nsps,s=t.forceNew||t[`force new connection`]||!1===t.multiplex||o,c;return s?c=new on(r,t):(sn[i]||(sn[i]=new on(r,t)),c=sn[i]),n.query&&!t.query&&(t.query=n.queryKey),c.socket(n.path,t)}Object.assign(cn,{Manager:on,Socket:rn,io:cn,connect:cn}),un[z]=`src/lib/components/AppHeader.svelte`;var ln=n(f(`<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>`),un[z],[[67,0,[[68,2,[[69,4,[[70,6,[[71,8],[72,8]]],[74,6,[[75,8],[76,8]]]]],[79,4,[[80,6,[[81,8],[82,8],[83,8]]],[85,6],[88,6]]]]]]]]);function un(t,n){oe(new.target),le(n,!1,un);let r=ue(),i=M(L({label:`Whisper`,state:`unknown`,title:``}),`whisper`),a=M(L({label:`ollanet`,state:`unknown`,title:``}),`ollanet`),s=M(L({label:`…`,state:`unknown`,title:``}),`device`),l;function d(e){return I(e,`fail`)?`dw-pill is-fail`:I(e,`warn`)?`dw-pill is-warn`:`dw-pill`}async function f(){try{let e=(await F(fetch(`/health`)))(),t=(await F(e.json().catch(()=>null)))();if(!t)return;let n=t.whisperWorker||`off`;I(n,`ready`)?T(i,{label:`Whisper`,state:`ok`,title:`ready · ${t.whisper||``}`}):I(n,`starting`)?T(i,{label:`Starting`,state:`warn`,title:`Whisper worker is starting`}):T(i,{label:`Whisper`,state:`fail`,title:`worker ${n}`}),t.ollanet?.reachable?T(a,{label:`ollanet`,state:`ok`,title:t.ollanet.cleanModel||t.ollanet.machine||`reachable`}):t.ollanet?.machine||t.ollanet?.cleanModel?T(a,{label:`ollanet`,state:`fail`,title:`unreachable`}):T(a,{label:`ollanet`,state:`warn`,title:`not configured`});let r=String(t.device||``).toLowerCase();T(s,{label:I(r,`cpu`)?`CPU`:`GPU`,state:I(r,`cpu`)?`warn`:`ok`,title:t.device||``})}catch{T(i,{label:`Whisper`,state:`fail`,title:`health unreachable`}),T(a,{label:`ollanet`,state:`fail`,title:`health unreachable`}),T(s,{label:`…`,state:`unknown`,title:``})}}ee(()=>{f(),l=setInterval(()=>void f(),15e3)}),N(()=>{l&&clearInterval(l)});var m={...p()};ve();var h=ln(),_=S(h),v=j(S(_),2),y=S(v),b=S(y),x=e(b,!0),C=j(b,2),w=e(C,!0),O=j(C,2),te=e(O,!0);D(y);var k=j(y,2),A=j(k,2);return D(v),D(_),D(h),u((e,t,n)=>{E(b,1,e,`svelte-isll26`),re(b,`title`,c(i).title),g(x,c(i).label),E(C,1,t,`svelte-isll26`),re(C,`title`,c(a).title),g(w,c(a).label),E(O,1,n,`svelte-isll26`),re(O,`title`,c(s).title),g(te,c(s).label)},[()=>xe(d(c(i).state)),()=>xe(d(c(a).state)),()=>xe(d(c(s).state))]),B(`click`,k,function(){return r(`tools`)}),B(`click`,A,function(){return r(`help`)}),o(t,h),pe(m)}mn[z]=`src/lib/components/AudioRecorder.svelte`;var dn=n(f(`<p class="dw-muted svelte-1v6qg5g"> </p>`),mn[z],[[229,4]]),fn=n(f(`<p class="dw-error svelte-1v6qg5g"> </p>`),mn[z],[[232,4]]),pn=n(f(`<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>`),mn[z],[[191,0,[[199,2,[[200,4]]],[202,2,[[203,4],[212,4],[215,4],[218,4]]],[227,2]]]]);function mn(n,r){oe(new.target),le(r,!1,mn);let i=M(L(),`canvas`),a=M(L(),`well`),s=M(L(),`fileInput`),l,d,f=null,m=[],h=M(L(!1),`recording`),_=M(L(!1),`dragOver`),v=M(L(``),`error`),y=M(L(``),`status`),b=0;function x(e){return String(e).padStart(2,`0`)}function C(){let e=new Date;return`${e.getFullYear()}-${x(e.getMonth()+1)}-${x(e.getDate())}_${x(e.getHours())}-${x(e.getMinutes())}-${x(e.getSeconds())}`}function w(){c(i)&&c(a)&&(ae(i,c(i).width=c(a).clientWidth),ae(i,c(i).height=60),O())}function O(){l&&c(i)&&(l.fillStyle=`rgb(0 0 0 / 0.35)`,l.fillRect(0,0,c(i).width,c(i).height))}ee(()=>{l=c(i).getContext(`2d`),w();let e=new ResizeObserver(()=>w());return c(a)&&e.observe(c(a)),()=>e.disconnect()}),N(()=>{b&&cancelAnimationFrame(b),I(f?.state,`recording`)&&f.stop()});async function te(){if(!navigator.mediaDevices?.getUserMedia)throw Error(`getUserMedia not supported`);let e=(await F(navigator.mediaDevices.getUserMedia({audio:!0})))();f=new MediaRecorder(e),f.onstop=function(){let e=`voice-recording_${C()}`;de(new Blob(m,{type:`audio/webm; codecs=opus`}),e),m=[]},f.ondataavailable=function(e){m.push(e.data)},me(e)}async function k(){T(v,``);try{f||(await F(te()))(),m=[],f.start(),T(h,!0)}catch(e){T(v,`Microphone access is required to record.`),console.log(`The following error occured: `+e)}}function re(){f&&!I(f.state,`inactive`)&&(f.stop(),T(h,!1),O())}async function ie(e,t){let n=new FormData,r=e.name||`${t}.webm`;n.append(`file`,e,r),n.append(`clipName`,t);let i=(await F(fetch(`/audio`,{method:`POST`,body:n})))(),a=(await F(i.json().catch(()=>({}))))();if(!i.ok)throw Error(a.error||`upload failed (${i.status})`);return a}function se(e){e.preventDefault(),T(_,!0)}function P(){T(_,!1)}function ce(e){e.preventDefault(),T(_,!1),fe(e.dataTransfer.files)}function ue(e){fe(e.target.files),e.target.value=``}async function de(e,t=null){I(t,null)&&(t=`${e.name.split(`.`).slice(0,-1).join(`.`)}_${C()}`),T(y,`Sending ${t}…`);try{(await F(ie(e,t)))(),T(y,``)}catch(e){T(v,e.message||String(e)),T(y,``)}}function fe(e){e?.length&&(T(v,``),Array.from(e).forEach(e=>{e.type.startsWith(`audio/`)?de(e):T(v,`Unsupported file type. Please upload an audio file.`)}))}function me(e){d||=new AudioContext;let t=d.createMediaStreamSource(e),n=d.createAnalyser();n.fftSize=2048;let r=n.frequencyBinCount,a=new Uint8Array(r);t.connect(n);function o(){if(b=requestAnimationFrame(o),!l||!c(i))return;let e=c(i).width,t=c(i).height;if(l.fillStyle=`rgb(0 0 0 / 0.35)`,l.fillRect(0,0,e,t),!c(h)){l.strokeStyle=`rgb(251 191 36 / 0.25)`,l.beginPath(),l.moveTo(0,t/2),l.lineTo(e,t/2),l.stroke();return}n.getByteTimeDomainData(a),l.lineWidth=2,l.strokeStyle=`#fcd34d`,l.beginPath();let s=e/r,u=0;for(let e=0;e<r;e++){let n=a[e]/128*t/2;I(e,0)?l.moveTo(u,n):l.lineTo(u,n),u+=s}l.lineTo(c(i).width,c(i).height/2),l.stroke()}o()}var he={...p()};ve();var ge=pn();let _e;var ye=S(ge),R=S(ye);ne(R,e=>T(i,e),()=>c(i)),D(ye),ne(ye,e=>T(a,e),()=>c(a));var be=j(ye,2),xe=S(be);let z;var Se=e(xe,!0),Ce=j(xe,2),we=j(Ce,2),V=j(we,2);ne(V,e=>T(s,e),()=>c(s)),D(be);var Te=j(be,4),Ee=t=>{var n=dn(),r=e(n,!0);u(()=>g(r,c(y))),o(t,n)};A(()=>t(Te,e=>{c(y)&&e(Ee)}),`if`,mn,228,2);var De=j(Te,2),H=t=>{var n=fn(),r=e(n,!0);u(()=>g(r,c(v))),o(t,n)};return A(()=>t(De,e=>{c(v)&&e(H)}),`if`,mn,231,2),D(ge),u(()=>{_e=E(ge,1,`dw-card-elevated capture svelte-1v6qg5g`,null,_e,{"is-drop":c(_)}),z=E(xe,1,`dw-btn-primary`,null,z,{"is-recording":c(h)}),xe.disabled=c(h),g(Se,c(h)?`Recording…`:`Record`),Ce.disabled=!c(h)}),B(`click`,xe,k),B(`click`,Ce,re),B(`click`,we,function(){return c(s)?.click()}),B(`change`,V,ue),B(`dragover`,ge,se),B(`dragleave`,ge,P),B(`drop`,ge,ce),o(n,ge),pe(he)}gn[z]=`src/lib/components/CollapsibleAside.svelte`;var hn=n(f(`<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),gn[z],[[24,2],[25,2,[[26,4,[[27,6],[28,6]]],[30,4,[[30,139]]],[31,4],[32,4,[[32,138]]]]]]);function gn(e,n){oe(new.target),le(n,!1,gn);let r=O(n,`open`,12,!1),i=ue();function a(){r(!1),i(`close`)}function s(e){I(e.key,`Escape`)&&r()&&a()}ee(()=>(window.addEventListener(`keydown`,s),()=>window.removeEventListener(`keydown`,s)));var c={...p()};ve();var u=l(),d=_(u),f=e=>{var t=hn(),n=_(t),r=j(n,2),i=S(r),s=j(S(i),2);D(i),Ce(6),D(r),B(`click`,n,a),B(`keydown`,n,function(e){return I(e.key,`Enter`)&&a()}),B(`click`,s,a),o(e,t)};return A(()=>t(d,e=>{r()&&e(f)}),`if`,gn,23,0),o(e,u),pe(c)}Z[z]=`src/lib/components/ToolsAside.svelte`;var _n=n(f(`<p class="dw-error"> </p>`),Z[z],[[100,6]]),vn=n(f(` <!> <!> <!> <!>`,1),Z[z],[]),yn=n(f(`<li class="svelte-4llc2b"><span class="reason svelte-4llc2b"> </span> </li>`),Z[z],[[169,10,[[169,14]]]]),bn=n(f(`<li class="svelte-4llc2b"> </li>`),Z[z],[[172,10]]),xn=n(f(`<ul class="hits svelte-4llc2b"><!> <!></ul>`),Z[z],[[167,6]]),Sn=n(f(`<li class="svelte-4llc2b"><span> </span> <span class="check-msg svelte-4llc2b"> </span></li>`),Z[z],[[181,10,[[182,12],[183,12]]]]),Cn=n(f(`<ul class="checks svelte-4llc2b"></ul>`),Z[z],[[179,6]]),wn=n(f(`<p class="line svelte-4llc2b">Health unavailable.</p>`),Z[z],[[188,6]]),Tn=n(f(`<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),Z[z],[[92,2],[93,2,[[94,4,[[95,6],[96,6]]],[103,4],[104,4],[105,4],[107,4],[108,4],[113,4],[114,4],[137,4,[[138,6]]],[148,4],[149,4],[158,4,[[159,6],[162,6]]],[177,4]]]]);function Z(n,r){oe(new.target),le(r,!1,Z);let i=O(r,`open`,12,!1),a=O(r,`noteFilter`,12,`all`),f=M(L(null),`health`),m=M(L(null),`status`),y=M(L(null),`probe`),b=M(L(null),`journal`),C=M(L(``),`error`),w;function te(){i(!1)}function k(e){I(e.key,`Escape`)&&i()&&te()}function ne(e){return I(e,`fail`)?`dw-pill is-fail`:I(e,`warn`)?`dw-pill is-warn`:`dw-pill`}function re(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 ie(){T(C,``);try{let[e,t,n,r]=(await F(Promise.all([fetch(`/health`),fetch(`/status`),fetch(`/tools/probe`),fetch(`/notes/stats`)])))();T(f,(await F(e.json().catch(()=>null)))()),T(m,t.ok?(await F(t.json()))():null),T(y,n.ok||I(n.status,409)?(await F(n.json()))():null),T(b,r.ok?(await F(r.json()))():null)}catch(e){T(C,e.message||String(e))}}async function ae(e){T(C,``);try{let t=(await F(fetch(`/tools/probe`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({apply:e})})))();T(y,(await F(t.json().catch(()=>null)))()),!t.ok&&I(t.status,409,!1)&&T(C,c(y)?.error||`probe ${t.status}`),(await F(ie()))()}catch(e){T(C,e.message||String(e))}}function P(){a(I(a(),`unreadable`)?`all`:`unreadable`)}ee(()=>(window.addEventListener(`keydown`,k),w=setInterval(()=>{i()&&ie()},4e3),()=>window.removeEventListener(`keydown`,k))),N(()=>{w&&clearInterval(w)}),d(()=>x(i()),()=>{i()&&ie()}),me();var ce={...p()};ve();var ue=l(),de=_(ue),fe=n=>{var r=Tn(),i=_(r),l=j(i,2),d=S(l),p=j(S(d),2);D(d);var x=j(d,2),w=t=>{var n=_n(),r=e(n,!0);u(()=>g(r,c(C))),o(t,n)};A(()=>t(x,e=>{c(C)&&e(w)}),`if`,Z,99,4);var ee=j(x,4),T=e(ee,!0),O=j(ee,2),k=e(O,!0),M=j(O,4),ie=e(M,!0),N=j(M,4),oe=S(N),F=e=>{var t=v(`Indexing…`);o(e,t)},ce=e=>{var n=vn(),r=_(n),i=j(r),a=e=>{var t=v();u(()=>g(t,`· ${c(b),s(()=>c(b).unreadable)??``} unreadable`)),o(e,t)};A(()=>t(i,e=>{c(b),s(()=>c(b).unreadable)&&e(a)}),`if`,Z,119,8);var l=j(i,2),d=e=>{var t=v();u(()=>g(t,`· ${c(b),s(()=>c(b).starred)??``} starred`)),o(e,t)};A(()=>t(l,e=>{c(b),s(()=>c(b).starred)&&e(d)}),`if`,Z,122,8);var f=j(l,2),p=e=>{var t=v();u(()=>g(t,`· ${c(b),s(()=>c(b).embedded)??``} embedded${c(b),s(()=>c(b).embedModel?` (${c(b).embedModel})`:``)??``}`)),o(e,t)},m=e=>{var t=v(`· FTS only`);o(e,t)};A(()=>t(f,e=>{c(b),s(()=>c(b).embedded)?e(p):e(m,-1)}),`if`,Z,125,8);var h=j(f,2),y=e=>{var t=v();u(e=>g(t,`· rebuilt ${e??``}`),[()=>(c(b),s(()=>String(c(b).lastRebuild).slice(0,16).replace(`T`,` `)))]),o(e,t)};A(()=>t(h,e=>{c(b),s(()=>c(b).lastRebuild)&&e(y)}),`if`,Z,130,8),u(()=>g(r,`${c(b),s(()=>c(b).notes||0)??``} notes `)),o(e,n)},le=e=>{var t=v(`…`);o(e,t)};A(()=>t(oe,e=>{c(b),s(()=>c(b)?.indexing)?e(F):c(b)?e(ce,1):e(le,-1)}),`if`,Z,115,6),D(N);var ue=j(N,2),de=S(ue);let fe;D(ue);var pe=j(ue,4),me=S(pe),L=e=>{var t=v(`Scanning pending files…`);o(e,t)},he=e=>{var t=v();u(()=>g(t,`Last scan: ${c(y),s(()=>c(y).bad)??``} bad of ${c(y),s(()=>c(y).pending)??``} pending${c(y),s(()=>c(y).apply?`, marked ${c(y).marked}`:``)??``}.`)),o(e,t)},ge=e=>{var t=v(`Find empty or broken files before Whisper spends time on them.`);o(e,t)};A(()=>t(me,e=>{c(y),s(()=>c(y)?.running)?e(L):(c(y),s(()=>c(y)?.finishedAt)?e(he,1):e(ge,-1))}),`if`,Z,150,6),D(pe);var _e=j(pe,2),ve=S(_e),ye=j(ve,2);D(_e);var R=j(_e,2),be=n=>{var r=xn(),i=S(r);A(()=>h(i,1,()=>(c(y),s(()=>c(y).files.slice(0,20))),se,(t,n)=>{var r=yn(),i=S(r),a=e(i,!0),l=j(i);D(r),u(e=>{g(a,(c(n),s(()=>c(n).reason))),g(l,` ${e??``}`)},[()=>(c(n),s(()=>c(n).file.split(/[/\\]/).pop()))]),o(t,r)}),`each`,Z,168,8);var a=j(i,2),l=t=>{var n=bn(),r=e(n);u(()=>g(r,`+${c(y),s(()=>c(y).files.length-20)??``} more`)),o(t,n)};A(()=>t(a,e=>{c(y),s(()=>c(y).files.length>20)&&e(l)}),`if`,Z,171,8),D(r),o(n,r)};A(()=>t(R,e=>{c(y),s(()=>c(y)?.files?.length)&&e(be)}),`if`,Z,166,4);var z=j(R,4),Se=t=>{var n=Cn();A(()=>h(n,5,()=>(c(f),s(()=>c(f).checks)),se,(t,n)=>{var r=Sn(),i=S(r),a=e(i,!0),l=j(i,2),d=e(l,!0);D(r),u(e=>{E(i,1,e,`svelte-4llc2b`),g(a,(c(n),s(()=>c(n).id))),g(d,(c(n),s(()=>c(n).message)))},[()=>xe((c(n),s(()=>ne(c(n).level))))]),o(t,r)}),`each`,Z,180,8),D(n),o(t,n)},Ce=e=>{var t=wn();o(e,t)};A(()=>t(z,e=>{c(f),s(()=>c(f)?.checks?.length)?e(Se):e(Ce,-1)}),`if`,Z,178,4),D(l),u((e,t)=>{g(T,e),g(k,t),g(ie,(c(m),s(()=>c(m)?`${c(m).done||0} cleaned · ${c(m).rawOnly||0} raw · ${c(m).pendingAudio||0} pending · ${c(m).unreadable||0} unreadable`:`…`))),fe=E(de,1,`dw-btn-secondary dw-btn-compact svelte-4llc2b`,null,fe,{"is-on":I(a(),`unreadable`)}),ve.disabled=(c(y),s(()=>c(y)?.running)),ye.disabled=(c(y),s(()=>c(y)?.running))},[()=>(c(f),s(()=>re(`Transcription`,c(f)?.queues?.transcription))),()=>(c(f),s(()=>re(`Cleanup`,c(f)?.queues?.processing)))]),B(`click`,i,te),B(`keydown`,i,function(e){return I(e.key,`Enter`)&&te()}),B(`click`,p,te),B(`click`,de,P),B(`click`,ve,function(){return ae(!1)}),B(`click`,ye,function(){return ae(!0)}),o(n,r)};return A(()=>t(de,e=>{i()&&e(fe)}),`if`,Z,91,0),o(n,ue),pe(ce)}var En=new Set([`recent`,`oldest`,`relevance`]),Dn=new Set([`lex`,`hybrid`]);function On(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:En.has(n)?n:``,mode:Dn.has(r)?r:``,unreadable:t.get(`unreadable`)===`1`,starred:t.get(`starred`)===`1`,file:t.get(`file`)||``,cue:null}}function kn(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 An(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 jn(e){let t=An(e),n=t?`/?${t}`:`/`;return e.file&&e.cue!=null&&Number.isInteger(e.cue)&&e.cue>=0?`${n}#cue-${e.cue}`:n}function Mn(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 Nn(e){return String(e||``).replace(/^filename:\s*/i,``).trim().replace(/\.(mp3|m4a|wav|webm|ogg|json)$/i,``)}function Pn(e,t){if(!Mn(e)||!t.length)return t;let n=Nn(e);if(!n)return t;let r=t.filter(e=>`${e.basename||``} ${e.jsonFile||``}`.replace(/\\/g,`/`).includes(n));return r.length?r:t}function Fn(e){return String(e||``).replace(/&/g,`&`).replace(/</g,`<`).replace(/>/g,`>`).replace(/"/g,`"`)}function In(e){return e.replace(/[.*+?^${}()|[\]\\]/g,`\\$&`)}function Ln(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 Fn(n);let i=RegExp(`(${r.map(In).join(`|`)})`,`gi`);return Fn(n).replace(i,`<mark>$1</mark>`)}function Rn(e){return(String(e||``).replace(/\\/g,`/`).split(`/`).pop()||``).replace(/\.json$/i,``)}Q[z]=`src/lib/components/NoteCard.svelte`;var zn=n(f(`<span class="day svelte-unha62"> </span>`),Q[z],[[180,10]]),Bn=n(f(`<span class="elapsed svelte-unha62"> </span>`),Q[z],[[183,10]]),Vn=n(f(`<span class="status svelte-unha62">cleanup skipped</span>`),Q[z],[[186,10]]),Hn=n(f(`<span class="status svelte-unha62"> </span>`),Q[z],[[188,10]]),Un=n(f(`<span class="preview svelte-unha62"><!></span>`),Q[z],[[192,8]]),Wn=n(f(`<span><button type="button" class="chip-label svelte-unha62"> </button> <button type="button" class="chip-x svelte-unha62">×</button></span>`),Q[z],[[227,10,[[228,12],[229,12]]]]),Gn=n(f(`<button type="button"> </button>`),Q[z],[[234,10]]),Kn=n(f(`<div class="note-tags svelte-unha62"></div>`),Q[z],[[224,4]]),qn=n(f(`<p class="dw-muted"> </p>`),Q[z],[[258,10]]),Jn=n(f(`<p class="dw-muted">Section times need a re-transcribe for word timestamps. Raw segments below still have Whisper times.</p>`),Q[z],[[261,10]]),Yn=n(f(`<button type="button"><span class="cue-time svelte-unha62"> </span> <span class="cue-text svelte-unha62"> </span></button>`),Q[z],[[267,12,[[276,14],[277,14]]]]),Xn=n(f(`<!> <!> <!>`,1),Q[z],[]),Zn=n(f(`<p class="dw-muted">No cleaned text yet. Raw transcript below.</p>`),Q[z],[[282,8]]),Qn=n(f(`<p class="svelte-unha62"><span class="times svelte-unha62"> </span> </p>`),Q[z],[[296,14,[[297,16]]]]),$n=n(f(`<div class="segments svelte-unha62"></div>`),Q[z],[[294,10]]),er=n(f(`<div class="dw-segmented svelte-unha62" role="group" aria-label="Transcript view"><button type="button">Readable</button> <button type="button">Raw</button></div> <!>`,1),Q[z],[[285,8,[[286,10],[289,10]]]]),tr=n(f(`<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),Q[z],[[330,10],[338,10]]),nr=n(f(`<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),Q[z],[[349,12],[357,12]]),rr=n(f(`<button type="button" class="dw-btn-secondary dw-btn-compact">Unfile</button>`),Q[z],[[367,12]]),ir=n(f(`<!> <!>`,1),Q[z],[]),ar=n(f(`<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>`),Q[z],[[248,4,[[249,6],[305,6,[[309,8],[310,8,[[311,10],[319,10]]]]],[323,6,[[324,8],[327,8],[328,8],[377,8]]]]]]),or=n(f(`<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>`),Q[z],[[163,0,[[170,2,[[171,4,[[177,6,[[178,8]]]]],[210,4]]]]]]);function Q(n,r){oe(new.target),le(r,!1,Q);let a=L(),f=L(),m=L(),y=L(),b=L(),C=L(),w=O(r,`transcription`,8),ee=O(r,`variant`,8,`note`),N=O(r,`query`,8,``),ae=O(r,`selectedTags`,24,()=>[]),P=O(r,`expanded`,8,!1),F=O(r,`showRaw`,8,!1),de=O(r,`busy`,8,!1),fe=O(r,`playing`,8,!1),ye=O(r,`landCue`,8,null),R=ue(),be=M(L(``),`tagDraft`),xe=M(L(),`card`),z=``;function Se(e){let t=e.transcriptionJson?.tags;return Array.isArray(t)?t.map(e=>String(e).trim()).filter(Boolean):[]}function Ce(e){let t=e.transcriptionJson||{};return t._partial?t.hasCleaned?String(t.preview||``).trim():``:String(t.cleanedTranscription||t.preview||``).trim()}function we(e,t=200){let n=String(e||``).replace(/\s+/g,` `).trim();return n.length<=t?n:`${n.slice(0,t)}…`}function V(e){return e.split(/\n{2,}/).map(e=>e.trim()).filter(Boolean)}function Te(e){let t=String(e||``).trim();if(!t)return[];let n=V(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 Ee(e){let t=e.transcriptionJson?.playbackCues;if(Array.isArray(t)&&t.length)return t;let n=Ce(e);return n?Te(n).map(e=>({text:e,start:0,end:0})):[]}function De(e){return`/audio?file=${encodeURIComponent(e)}`}function H(e){return`/audio?file=${encodeURIComponent(e)}&download=1`}function Oe(e){return`/note?file=${encodeURIComponent(e)}&download=1`}function ke(e){let t=e?.cleanup;if(!t||I(typeof t,`object`,!1))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 U(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 Ae(e){return I(typeof e?.start,`number`)&&Number.isFinite(e.start)}function je(e,t){if(!Ae(t))return;let n=e.currentTarget.closest(`.note`)?.querySelector(`audio`);n&&(n.currentTime=Math.max(0,Number(t.start)||0),n.play())}function Me(e,t,n){if(!Ae(t))return!1;let r=e.transcriptionJson?._currentTime;if(I(typeof r,`number`,!1))return!1;let i=Ee(e)[n+1],a=t.end>t.start?t.end:i?i.start:1/0;return r>=t.start&&r<a}function Ne(e){let t=String(e||``).replace(/\\/g,`/`);return/\/_holding(?:\/|$)/i.test(t)?`holding`:/\/_unfiled(?:\/|$)/i.test(t)?`unfiled`:``}function Pe(e){return/^\d{4}-\d{2}-\d{2}/.test(Rn(e))}function Fe(e){return!!e.transcriptionJson?.starred}function W(){let e=c(be).trim();if(!e)return;let t=[...Se(w()),e];T(be,``),R(`savetags`,{jsonFile:w().jsonFile,tags:t})}function Ie(e){R(`savetags`,{jsonFile:w().jsonFile,tags:Se(w()).filter(t=>I(t,e,!1))})}function Le(){if(!P()||_e(ye(),null))return;let e=`${w().jsonFile}:${ye()}`;if(I(z,e))return;let t=c(xe)?.querySelector(`#cue-${ye()}`);if(!t)return;z=e,t.scrollIntoView({block:`center`,behavior:`smooth`});let n=Ee(w())[ye()];Ae(n)&&je({currentTarget:t},n)}ge(Le),d(()=>x(w()),()=>{T(a,Ce(w()))}),d(()=>x(w()),()=>{T(f,Se(w()))}),d(()=>x(w()),()=>{T(m,Fe(w()))}),d(()=>x(w()),()=>{T(y,I(Ne(w().jsonFile),`holding`))}),d(()=>x(w()),()=>{T(b,I(Ne(w().jsonFile),`unfiled`))}),d(()=>x(w()),()=>{T(C,`tag-${String(w().jsonFile||``).replace(/[^a-zA-Z0-9_-]/g,`_`)}`)}),me();var Re={...p()};ve();var G=or();let K;var q=S(G),ze=S(q),Be=S(ze),Ve=S(Be),He=e(Ve,!0),J=j(Ve,2),Ue=t=>{var n=zn(),r=e(n,!0);u(()=>g(r,(x(w()),s(()=>w().day)))),o(t,n)};A(()=>t(J,e=>{x(ee()),x(w()),s(()=>I(ee(),`hit`)&&w().day)&&e(Ue)}),`if`,Q,179,8);var We=j(J,2),Ge=t=>{var n=Bn(),r=e(n,!0);u(()=>g(r,(x(w()),s(()=>w().transcriptionJson.elapsed)))),o(t,n)};A(()=>t(We,e=>{x(w()),s(()=>w().transcriptionJson?.elapsed)&&e(Ge)}),`if`,Q,182,8);var Ke=j(We,2),Y=e=>{var t=Vn();o(e,t)},qe=t=>{var n=Hn(),r=e(n,!0);u(()=>g(r,(x(w()),s(()=>w().transcriptionJson?.cleanupError?`cleanup failed`:`raw only`)))),o(t,n)};A(()=>t(Ke,e=>{x(w()),s(()=>w().transcriptionJson?.cleanupSkipped)?e(Y):c(a)||e(qe,1)}),`if`,Q,185,8),D(Be);var Je=j(Be,2),Ye=e=>{var n=Un(),r=S(n),d=e=>{var t=l(),n=_(t);i(n,()=>(x(Ln),x(w()),c(a),x(N()),s(()=>Ln(we(w().snippet||c(a)||w().transcriptionJson?.preview||w().transcriptionJson?.text||``),N())))),o(e,t)},f=te(()=>(x(ee()),x(N()),s(()=>I(ee(),`hit`)&&N().trim()))),p=e=>{var t=v();u(e=>g(t,e),[()=>(c(a),x(w()),s(()=>we(c(a)||w().transcriptionJson?.preview||w().transcriptionJson?.text||``)))]),o(e,t)};A(()=>t(r,e=>{c(f)?e(d):e(p,-1)}),`if`,Q,193,10),D(n),o(e,n)};A(()=>t(Je,e=>{P()||e(Ye)}),`if`,Q,191,6),D(ze);var Xe=j(ze,2);let Ze;D(q);var Qe=j(q,2),$e=n=>{var r=Kn();A(()=>h(r,5,()=>c(f),se,(n,r)=>{var i=l(),a=_(i),s=t=>{var n=Wn();let i;var a=S(n),s=e(a,!0),l=j(a,2);D(n),u(e=>{i=E(n,1,`dw-chip`,null,i,{"is-active":e}),g(s,c(r)),re(l,`aria-label`,`Remove ${c(r)}`),l.disabled=de()},[()=>ae().includes(c(r))]),B(`click`,a,function(){return R(`tag`,c(r))}),B(`click`,l,function(){return Ie(c(r))}),o(t,n)},d=t=>{var n=Gn();let i;var a=e(n,!0);u(e=>{i=E(n,1,`dw-chip`,null,i,{"is-active":e}),g(a,c(r))},[()=>ae().includes(c(r))]),B(`click`,n,function(){return R(`tag`,c(r))}),o(t,n)};A(()=>t(a,e=>{P()?e(s):e(d,-1)}),`if`,Q,226,8),o(n,i)}),`each`,Q,225,6),D(r),o(n,r)};A(()=>t(Qe,e=>{c(f),x(P()),s(()=>c(f).length||P())&&e($e)}),`if`,Q,223,2);var et=j(Qe,2),tt=n=>{var r=ar(),i=S(r),d=j(i,2),f=n=>{let r=M(he(()=>(x(w()),s(()=>ke(w().transcriptionJson)))),`cleanedBy`);c(r);var i=Xn(),a=_(i),d=t=>{var n=qn(),i=e(n);u(()=>g(i,`Cleaned ${c(r)??``}`)),o(t,n)};A(()=>t(a,e=>{c(r)&&e(d)}),`if`,Q,257,8);var f=j(a,2),p=e=>{var t=Jn();o(e,t)};A(()=>t(f,e=>{x(w()),s(()=>I(w().transcriptionJson?.playbackCuesSource,`words`,!1))&&e(p)}),`if`,Q,260,8);var m=j(f,2),v=t=>{var n=l(),r=_(n);A(()=>h(r,1,()=>(x(w()),s(()=>Ee(w()))),se,(t,n,r)=>{var i=Yn();re(i,`id`,`cue-${r}`);let a;var l=S(i),d=e(l,!0),f=j(l,2),p=e(f,!0);D(i),u((e,t,r,o)=>{a=E(i,1,`cue svelte-unha62`,null,a,{"is-active":e,untimed:t,"dw-cue-pulse":r}),g(d,o),g(p,(c(n),s(()=>c(n).text)))},[()=>Me(w(),c(n),r)||I(ye(),r),()=>!Ae(c(n)),()=>Me(w(),c(n),r)||I(ye(),r),()=>(c(n),s(()=>Ae(c(n))?U(c(n).start):`—`))]),B(`click`,i,function(e){return je(e,c(n))}),o(t,i)}),`each`,Q,266,10),o(t,n)};A(()=>t(m,e=>{F()||e(v)}),`if`,Q,265,8),o(n,i)},p=e=>{var t=Zn();o(e,t)};A(()=>t(d,e=>{c(a)?e(f):e(p,-1)}),`if`,Q,255,6);var m=j(d,2),v=n=>{var r=er(),i=_(r),a=S(i);let l;var d=j(a,2);let f;D(i);var p=j(i,2),m=t=>{var n=$n();A(()=>h(n,5,()=>(x(w()),s(()=>w().transcriptionJson.segments)),se,(t,n)=>{var r=Qn(),i=S(r),a=e(i),l=j(i);D(r),u((e,t)=>{g(a,`${e??``}–${t??``}`),g(l,` ${c(n),s(()=>c(n).text)??``}`)},[()=>(c(n),s(()=>U(c(n).start))),()=>(c(n),s(()=>U(c(n).end)))]),o(t,r)}),`each`,Q,295,12),D(n),o(t,n)};A(()=>t(p,e=>{F()&&e(m)}),`if`,Q,293,8),u(()=>{l=E(a,1,``,null,l,{"is-on":!F()}),f=E(d,1,``,null,f,{"is-on":F()})}),B(`click`,a,function(){return R(`raw`,{jsonFile:w().jsonFile,show:!1})}),B(`click`,d,function(){return R(`raw`,{jsonFile:w().jsonFile,show:!0})}),o(n,r)};A(()=>t(m,e=>{x(w()),s(()=>(w().transcriptionJson?.segments||[]).length)&&e(v)}),`if`,Q,284,6);var ee=j(m,2),O=S(ee),ne=j(O,2),N=S(ne);ie(N);var ae=j(N,2);D(ne),D(ee);var oe=j(ee,2),P=S(oe),le=j(P,2),ue=j(le,2),fe=j(ue,2),pe=e=>{var t=tr(),n=_(t),r=j(n,2);u(()=>{n.disabled=de(),r.disabled=de()}),B(`click`,n,function(){return R(`retry`,w().jsonFile)}),B(`click`,r,function(){return R(`skip`,w().jsonFile)}),o(e,t)};A(()=>t(fe,e=>{c(a),x(w()),s(()=>!c(a)||w().transcriptionJson?.cleanupError||w().transcriptionJson?.cleanupSkipped)&&e(pe)}),`if`,Q,329,8);var me=j(fe,2),L=e=>{var n=ir(),r=_(n),i=e=>{var t=nr(),n=_(t),r=j(n,2);u(()=>{n.disabled=de(),r.disabled=de()}),B(`click`,n,function(){return R(`resolve`,{jsonFile:w().jsonFile,action:`overwrite`})}),B(`click`,r,function(){return R(`resolve`,{jsonFile:w().jsonFile,action:`rename`})}),o(e,t)},a=te(()=>(x(w()),s(()=>Pe(w().jsonFile))));A(()=>t(r,e=>{c(a)&&e(i)}),`if`,Q,348,10);var l=j(r,2),d=e=>{var t=rr();u(()=>t.disabled=de()),B(`click`,t,function(){return R(`resolve`,{jsonFile:w().jsonFile,action:`unfile`})}),o(e,t)};A(()=>t(l,e=>{c(y)&&e(d)}),`if`,Q,366,10),o(e,n)},ge=te(()=>(c(y),c(b),x(w()),s(()=>c(y)||c(b)&&Pe(w().jsonFile))));A(()=>t(me,e=>{c(ge)&&e(L)}),`if`,Q,347,8);var _e=j(me,2);D(oe),D(r),u((e,t,n,r)=>{re(i,`src`,e),re(O,`for`,c(C)),re(N,`id`,c(C)),N.disabled=de(),ae.disabled=t,re(le,`href`,n),re(ue,`href`,r)},[()=>(x(w()),s(()=>De(w().jsonFile))),()=>(x(de()),c(be),s(()=>de()||!c(be).trim())),()=>(x(w()),s(()=>H(w().jsonFile))),()=>(x(w()),s(()=>Oe(w().jsonFile)))]),B(`timeupdate`,i,function(e){return R(`time`,{item:w(),event:e})}),ce(N,function(){return c(be)},function(e){T(be,e)}),B(`submit`,ee,k(W)),B(`click`,P,function(){return R(`copy`,w())}),B(`click`,_e,function(){return R(`delete`,w().jsonFile)}),o(n,r)};return A(()=>t(et,e=>{P()&&e(tt)}),`if`,Q,247,2),D(G),ne(G,e=>T(xe,e),()=>c(xe)),u(e=>{K=E(G,1,`note dw-card dw-card-hover svelte-unha62`,null,K,{"is-open":P(),"is-playing":fe(),"is-hit":I(ee(),`hit`)}),re(ze,`title`,(x(w()),s(()=>w().jsonFile))),g(He,e),Ze=E(Xe,1,`star svelte-unha62`,null,Ze,{"is-on":c(m)}),re(Xe,`aria-pressed`,c(m)),re(Xe,`aria-label`,c(m)?`Unstar note`:`Star note`),Xe.disabled=de()},[()=>(x(Rn),x(w()),s(()=>Rn(w().jsonFile)))]),B(`click`,ze,function(){return R(`toggle`,w().jsonFile)}),B(`click`,Xe,function(){return R(`star`,{jsonFile:w().jsonFile,starred:!c(m)})}),o(n,G),pe(Re)}function sr(e,t,n){let r=e[t];return Number.isFinite(r)&&r>0?r:n}function cr(e,t,n){let r=0;for(let i=0;i<t;i+=1)r+=sr(e,i,n);return r}function lr({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=sr(r,l,i);if(u+e>c)break;u+=e,l+=1}l=Math.max(0,l-a);let d=cr(r,l,i),f=l,p=d,m=c+s+a*i;for(;f<o&&p<m;)p+=sr(r,f,i),f+=1;return{start:l,end:f,startTop:d,total:cr(r,o,i)}}pr[z]=`src/lib/components/VirtualList.svelte`;var ur=n(f(`<div class="virt-row svelte-141dx9j"><!></div>`),pr[z],[[86,8]]),dr=n(f(`<div class="virt svelte-141dx9j"></div>`),pr[z],[[84,4]]),fr=n(f(`<div class="virt-root svelte-141dx9j"><!></div>`),pr[z],[[78,0]]);function pr(e,n){oe(new.target),le(n,!1,pr);let r=L(),i=L(),f=L(),m=O(n,`items`,24,()=>[]),g=O(n,`estimate`,8,108),v=O(n,`overscan`,8,8),b=O(n,`getKey`,8,e=>e.jsonFile),C=M(L(),`root`),w,E=M(L(0),`scrollTop`),te=M(L(640),`viewport`),k=M(L({}),`sizes`);function j(e,t){let n=()=>{let n=e.getBoundingClientRect().height;n>0&&I(c(k)[t],n,!1)&&(ae(k,c(k)[t]=n),T(k,c(k)))};n();let r=new ResizeObserver(n);return r.observe(e),{update(e){t=e,n()},destroy(){r.disconnect()}}}function re(){T(E,w?w.scrollTop:window.scrollY),T(te,w?w.clientHeight:window.innerHeight)}ee(()=>{w=c(C)?.closest(`.dw-main`)||null;let e=w||window;return re(),e.addEventListener(`scroll`,re,{passive:!0}),window.addEventListener(`resize`,re),()=>{e.removeEventListener(`scroll`,re),window.removeEventListener(`resize`,re)}}),d(()=>(x(m()),c(E),c(te),c(k),x(g()),x(v())),()=>{T(r,m().length<=16?{start:0,end:m().length,startTop:0,total:0}:lr({count:m().length,scrollTop:c(E),viewport:c(te),sizes:c(k),estimate:g(),overscan:v()}))}),d(()=>(c(r),x(m()),x(b()),c(k),x(g())),()=>{T(i,(()=>{let e=c(r).startTop;return m().slice(c(r).start,c(r).end).map((t,n)=>{let i=c(r).start+n,a={item:t,index:i,key:b()(t,i),top:e};return e+=sr(c(k),i,g()),a})})())}),d(()=>x(m()),()=>{T(f,m().length>16)}),me();var ie={...p()};ve();var N=fr(),se=S(N),P=e=>{var t=l(),r=_(t);A(()=>h(r,3,m,(e,t)=>b()(e,t),(e,t,r)=>{var i=l(),s=_(i);a(s,n,`default`,{get item(){return c(t)},get index(){return c(r)}},null),o(e,i)}),`each`,pr,80,4),o(e,t)},F=e=>{var t=dr();A(()=>h(t,5,()=>c(i),e=>e.key,(e,t)=>{var r=ur(),i=S(r);a(i,n,`default`,{get item(){return c(t),s(()=>c(t).item)},get index(){return c(t),s(()=>c(t).index)}},null),D(r),y(r,(e,t)=>j?.(e,t),()=>c(t).index),u(()=>Se(r,`transform: translateY(${c(t),s(()=>c(t).top)??``}px)`)),o(e,r)}),`each`,pr,85,6),D(t),u(()=>Se(t,`height: ${c(r),s(()=>c(r).total)??``}px`)),o(e,t)};return A(()=>t(se,e=>{c(f)?e(F,-1):e(P)}),`if`,pr,79,2),D(N),ne(N,e=>T(C,e),()=>c(C)),o(e,N),pe(ie)}mr[z]=`src/lib/components/NoteList.svelte`;function mr(e,t){oe(new.target),le(t,!1,mr);let n=O(t,`items`,24,()=>[]),r=O(t,`variant`,8,`note`),i=O(t,`query`,8,``),a=O(t,`selectedTags`,24,()=>[]),o=O(t,`expanded`,24,()=>({})),l=O(t,`showRaw`,24,()=>({})),u=O(t,`noteBusy`,24,()=>({})),d=O(t,`landFile`,8,``),f=O(t,`landCue`,8,null);var m={...p()};return ve(),A(()=>pr(e,{get items(){return n()},children:R,$$slots:{default:(e,n)=>{let p=he(()=>n.item);{let n=he(()=>(x(o()),x(c(p)),s(()=>!!o()[c(p).jsonFile]))),m=he(()=>(x(l()),x(c(p)),s(()=>!!l()[c(p).jsonFile]))),h=he(()=>(x(u()),x(c(p)),s(()=>!!u()[c(p).jsonFile]))),g=he(()=>(x(o()),x(c(p)),s(()=>!!o()[c(p).jsonFile]&&I(typeof c(p).transcriptionJson?._currentTime,`number`)))),_=he(()=>(x(d()),x(c(p)),x(f()),s(()=>I(d(),c(p).jsonFile)?f():null)));A(()=>Q(e,{get transcription(){return c(p)},get variant(){return r()},get query(){return i()},get selectedTags(){return a()},get expanded(){return c(n)},get showRaw(){return c(m)},get busy(){return c(h)},get playing(){return c(g)},get landCue(){return c(_)},$$events:{toggle:function(e){P.call(this,t,e)},star:function(e){P.call(this,t,e)},tag:function(e){P.call(this,t,e)},savetags:function(e){P.call(this,t,e)},raw:function(e){P.call(this,t,e)},time:function(e){P.call(this,t,e)},copy:function(e){P.call(this,t,e)},retry:function(e){P.call(this,t,e)},skip:function(e){P.call(this,t,e)},resolve:function(e){P.call(this,t,e)},delete:function(e){P.call(this,t,e)}}}),`component`,mr,17,2,{componentTag:`NoteCard`})}}}}),`component`,mr,16,0,{componentTag:`VirtualList`}),pe(m)}$[z]=`src/lib/components/Transcriptions.svelte`;var hr=n(f(`<button type="button" class="dw-btn-secondary dw-btn-compact">Clear search</button>`),$[z],[[886,8]]),gr=n(f(`<option> </option>`),$[z],[[898,14]]),_r=n(f(`<option> </option>`),$[z],[[907,14]]),vr=n(f(`<div class="dw-segmented" role="group" aria-label="Search mode"><button type="button">Words</button> <button type="button">Hybrid</button></div>`),$[z],[[932,10,[[933,12],[934,12]]]]),yr=n(f(`<span class="dw-chip-count"> </span>`),$[z],[[947,12]]),br=n(f(`<button type="button" class="dw-chip is-active">Unreadable</button>`),$[z],[[951,10]]),xr=n(f(`<button type="button" class="dw-btn-secondary dw-btn-compact">Clear filters</button>`),$[z],[[954,10]]),Sr=n(f(`<p class="dw-error"> </p>`),$[z],[[962,4]]),Cr=n(f(`<p class="dw-empty">Loading notes…</p>`),$[z],[[966,4]]),wr=n(f(`<p class="dw-empty">Indexing notes…</p>`),$[z],[[968,4]]),Tr=n(f(`<p class="dw-empty">No notes yet. Record or drop a file above.</p>`),$[z],[[970,4]]),Er=n(f(`<div class="tags-filter svelte-hs422r"><span class="dw-muted"> </span></div>`),$[z],[[988,8,[[989,10]]]]),Dr=n(f(`<button type="button"> <span class="dw-chip-count"> </span></button>`),$[z],[[994,10,[[1001,12]]]]),Or=n(f(`<button type="button" class="dw-btn-secondary dw-btn-compact"> </button>`),$[z],[[1007,10]]),kr=n(f(`<button type="button" class="dw-btn-secondary dw-btn-compact"> </button>`),$[z],[[1012,10]]),Ar=n(f(`<p class="dw-error"> </p>`),$[z],[[1030,8]]),jr=n(f(`<p class="dw-muted"> </p>`),$[z],[[1033,8]]),Mr=n(f(`<span class="dw-muted"> </span>`),$[z],[[1047,14]]),Nr=n(f(`<span class="dw-muted"> </span>`),$[z],[[1049,14]]),Pr=n(f(`<span class="dw-muted">Includes model suggestions</span>`),$[z],[[1051,14]]),Fr=n(f(`<span class="dw-muted">Spelling pass only</span>`),$[z],[[1053,14]]),Ir=n(f(`<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>`),$[z],[[1059,16,[[1060,18,[[1061,20],[1062,20,[[1063,22],[1064,22],[1069,22]]]]]]]]),Lr=n(f(`<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),$[z],[[1057,12],[1075,12,[[1076,14],[1081,14]]]]),Rr=n(f(`<div class="tag-cloud-more svelte-hs422r"><button type="button" class="dw-btn-secondary dw-btn-compact">Dismiss</button></div>`),$[z],[[1086,12,[[1087,14]]]]),zr=n(f(`<div class="dw-card consolidate svelte-hs422r"><div class="consolidate-head svelte-hs422r"><strong> </strong> <!></div> <!></div>`),$[z],[[1039,8,[[1040,10,[[1041,12]]]]]]),Br=n(f(`<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>`),$[z],[[974,4,[[975,6,[[976,8],[977,8]]],[992,6],[1005,6,[[1016,8,[[1017,10]]],[1020,8]]]]]]),Vr=n(f(`<p class="dw-empty">Searching…</p>`),$[z],[[1098,8]]),Hr=n(f(`<p class="dw-empty">No notes matched <!>.</p>`),$[z],[[1100,8]]),Ur=n(f(`<div class="notes svelte-hs422r"><!></div>`),$[z],[[1107,8]]),Wr=n(f(`<section class="hits svelte-hs422r" aria-label="Search hits"><!></section>`),$[z],[[1096,4]]),Gr=n(f(`<button type="button"> <span class="dw-chip-count"> </span></button>`),$[z],[[1143,10,[[1150,12]]]]),Kr=n(f(`<div class="years-strip svelte-hs422r"><p class="dw-eyebrow">Years</p> <div class="year-jump svelte-hs422r"></div></div>`),$[z],[[1139,4,[[1140,6],[1141,6]]]]),qr=n(f(`<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>`),$[z],[[1158,4,[[1159,6],[1160,6,[[1161,8],[1162,8]]]]]]),Jr=n(f(`<div class="month-rail svelte-hs422r"><span class="svelte-hs422r"> </span> <span class="svelte-hs422r"> </span></div>`),$[z],[[1188,18,[[1189,20],[1190,20]]]]),Yr=n(f(`<div class="month-block svelte-hs422r"><!> <div class="notes svelte-hs422r"><!></div></div>`),$[z],[[1186,14,[[1193,16]]]]),Xr=n(f(`<div class="year-body svelte-hs422r"></div>`),$[z],[[1184,10]]),Zr=n(f(`<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>`),$[z],[[1170,6,[[1171,8,[[1177,10,[[1178,12]]],[1180,10],[1181,10]]]]]]),Qr=n(f(`<p class="dw-muted load-more svelte-hs422r"> </p>`),$[z],[[1225,6]]),$r=n(f(`<div class="archive"><!> <!></div>`),$[z],[[1168,2]]),ei=n(f(`<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>`),$[z],[[870,0,[[871,2,[[872,4,[[873,6,[[874,8,[[875,10]]]]],[878,6]]],[890,4,[[891,6],[892,6,[[893,8,[[894,10],[895,10,[[896,12]]]]],[902,8,[[903,10],[904,10,[[905,12]]]]],[911,8,[[912,10],[915,10,[[916,12],[917,12]]],[919,10,[[920,12],[921,12]]]]],[924,8,[[925,10],[926,10],[927,10]]],[939,8]]]]],[958,4]]]]]]);function $(n,r){oe(new.target),le(r,!1,$);var i=m(r);let a=L(),l=L(),f=L(),b=L(),w=L(),k=L(),ne=L(),N=L(),P=L(),ue=L(),ge=L(),R=L(),be=L(),xe=L(),z=L(),Se=L(),we=L(),V=O(r,`transcriptions`,28,()=>[]),Te=O(r,`socket`,8),Ee=O(r,`noteFilter`,12,`all`),De=[`January`,`February`,`March`,`April`,`May`,`June`,`July`,`August`,`September`,`October`,`November`,`December`],H=M(L({}),`expanded`),Oe=M(L({}),`showRaw`),ke={},U=M(L([]),`selectedTags`),Ae=M(L(!1),`showSingletons`),je=M(L(!1),`showAllFrequent`),Me=M(L(!0),`useModelForTags`),Ne=M(L(!1),`consolidateBusy`),Pe=M(L(``),`consolidatePhase`),Fe=M(L(``),`consolidateError`),W=M(L(null),`consolidatePlan`),Ie=M(L({}),`consolidateSelected`),Le=M(L(!1),`applyBusy`),Re=M(L(null),`applyResult`),G=M(L(``),`searchQuery`),K=M(L(``),`filterYear`),q=M(L(``),`filterMonth`),ze=M(L(``),`since`),Be=M(L(``),`until`),Ve=M(L(``),`sortChoice`),He=M(L(``),`modeChoice`),J=M(L(!1),`starredOnly`),Ue=M(L(``),`inboxError`),We=M(L(!1),`indexReady`),Ge=M(L(!1),`indexing`),Ke=!1,Y=M(L(null),`remoteHits`),qe=M(L(null),`landCue`),Je,Ye=M(L(``),`lastSearchKey`),Xe=``,Ze=M(L([]),`tagRows`),Qe=M(L([]),`yearCounts`),$e={},et=M(L({}),`noteBusy`),tt=M(L(null),`journalMeta`),nt=!1,rt=M(L(!1),`datesOpen`);function it(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 at(e){return I(e.key,`holding`)?`Holding`:I(e.key,`unfiled`)?`Unfiled`:I(e.key,`other`)?`Other`:`${De[Number(e.month)-1]||e.month} ${e.year}`}function ot(e){let t=e.transcriptionJson?.tags;return Array.isArray(t)?t.map(e=>String(e).trim()).filter(Boolean):[]}function st(e){let t=new Map;for(let n of e){let e=it(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)=>Rn(t.jsonFile).localeCompare(Rn(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=>I(e.key,`other`,!1)),...r,...i.filter(e=>I(e.key,`other`))]}function ct(e){let t=new Map;for(let n of e)for(let e of ot(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 lt(e){T(U,c(U).includes(e)?c(U).filter(t=>I(t,e,!1)):[...c(U),e])}function ut(e){return I(e,`spelling`)?`spelling / plural`:I(e,`similar`)?`close spelling`:`same topic`}function dt(){return c(W)?.groups?c(W).groups.filter((e,t)=>I(c(Ie)[t],!1,!1)):[]}async function ft(e,t){let n=(await F(fetch(e,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify(t)})))(),r=(await F(n.json().catch(()=>({}))))();if(!n.ok)throw Error(r.error||`request failed (${n.status})`);return r}async function pt(){T(Ne,!0),T(Fe,``),T(Re,null),T(W,null);try{T(Pe,`Finding spelling twins…`);let e=(await F(ft(`/tags/consolidate/preview`,{useModel:!1})))();if(T(W,e),T(Ie,Object.fromEntries((e.groups||[]).map((e,t)=>[t,!0]))),T(Ne,!1),c(Me)){T(Pe,`Asking the cleanup model for close synonyms…`);let e=(await F(ft(`/tags/consolidate/preview`,{useModel:!0})))();T(W,e),T(Ie,Object.fromEntries((e.groups||[]).map((e,t)=>[t,!0]))),e.modelError&&T(Fe,`Model skipped: ${e.modelError}`)}}catch(e){T(Fe,e.message||String(e))}finally{T(Ne,!1),T(Pe,``)}}async function mt(){let e=dt().map(e=>({keep:e.keep,drop:e.drop}));if(!e.length){T(Fe,`Select at least one merge.`);return}T(Le,!0),T(Fe,``);try{let t=(await F(ft(`/tags/consolidate/apply`,{groups:e})))();T(Re,t);let n=t.mapping||{};T(U,[...new Set(c(U).map(e=>n[e]||e))]),(await F(bt()))(),T(W,{...c(W),groups:[]}),T(Ie,{})}catch(e){T(Fe,e.message||String(e))}finally{T(Le,!1)}}function ht(){T(W,null),T(Ie,{}),T(Fe,``),T(Re,null)}function gt(e){if(e?.transcriptionJson&&!e.transcriptionJson._partial)return e;let t=e.transcriptionJson||{};return{jsonFile:e.jsonFile,basename:e.basename||Rn(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:I(t._partial,!1,!1),...t,tags:e.tags||t.tags||[],starred:!!(e.starred??t.starred)}}}function _t(e,{replace:t=!1}={}){let n=(e||[]).map(gt);if(t){V(n);return}let r=new Map(V().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)}V([...r.values()])}function vt(e){for(let t of e||[]){let e=it(t.jsonFile);e.year&&($e[e.year]=!0)}$e=$e}async function yt(e){let t=(await F(fetch(e)))(),n=(await F(t.json().catch(()=>({}))))();if(!t.ok)throw Error(n.error||`request failed (${t.status})`);return n}async function bt(){try{let[e,t,n]=(await F(Promise.all([yt(`/notes/years`),yt(`/notes/tags?includeSingletons=1`),yt(`/notes/stats`)])))();T(Qe,e.years||[]),T(Ze,t.tags||[]),T(tt,n)}catch{c(Qe).length||T(Qe,[]),c(Ze).length||T(Ze,ct(V()).map(({tag:e,count:t})=>({tag:e,count:t})))}}function xt(){return!!(c(G).trim()||c(ze)||c(Be)||c(J)||c(U).length||I(Ee(),`unreadable`))}function St(){return Number(c(tt)?.embedded||0)>0}function Ct(){return c(Ve)?c(Ve):c(G).trim()?`relevance`:`recent`}function wt(){return c(He)?c(He):St()?`hybrid`:`lex`}function Tt(){let e=c(G).trim()?`relevance`:`recent`,t=St()?`hybrid`:`lex`;return{q:c(G),tags:c(U),year:c(K),month:c(q),since:c(ze),until:c(Be),sort:c(Ve)&&I(c(Ve),e,!1)?c(Ve):``,mode:c(He)&&I(c(He),t,!1)?c(He):``,unreadable:I(Ee(),`unreadable`),starred:c(J),file:Object.keys(c(H)).find(e=>c(H)[e])||``,cue:c(qe)}}function Et(){if(nt||!c(We))return;let e=jn(Tt()),t=`${location.pathname}${location.search}${location.hash}`;I(t,e)||I(e,`/`)&&!location.search&&!location.hash&&I(location.pathname,`/`)||history.replaceState(history.state,``,e)}function Dt(e=location.search){nt=!0;let t=On(e);T(G,t.q),T(U,t.tags),T(K,t.year),T(q,t.month),T(ze,t.since),T(Be,t.until),T(Ve,t.sort),T(He,t.mode),T(J,t.starred),Ee(t.unreadable?`unreadable`:`all`),t.file&&T(H,{...c(H),[t.file]:!0}),T(qe,kn(I(typeof location,`undefined`,!1)?location.hash:``)),nt=!1}async function Ot(){let e=new URLSearchParams;!xt()&&c(K)&&(e.set(`year`,c(K)),c(q)&&e.set(`month`,c(q)));let t=e.toString(),n=(await F(yt(t?`/notes/index?${t}`:`/notes/index`)))();Ke=!!n.paged,T(Ge,!!n.indexing),_t(n.notes,{replace:!0}),vt(n.notes),Xe=`${!xt()&&c(K)?c(K):``}|${!xt()&&c(q)?c(q):``}`,(await F(bt()))()}async function kt(e){e&&Ke&&!$e[e]&&(_t((await F(yt(`/notes/index?year=${encodeURIComponent(e)}`)))().notes),$e[e]=!0,$e=$e)}async function At(){if(!xt()){T(Y,null);let e=`${c(K)}|${c(q)}`;if(I(e,Xe,!1)){Xe=e;try{(await F(Ot()))()}catch(e){T(Ue,e.message||String(e))}}c(K)&&(ke[c(K)]=!0,ke=ke);return}try{T(Y,null);let e=new URLSearchParams,t=c(G).trim();t&&e.set(`q`,t);for(let t of c(U))e.append(`tag`,t);I(Ee(),`unreadable`)&&e.set(`unreadable`,`1`),c(J)&&e.set(`starred`,`1`),c(ze)&&e.set(`since`,c(ze)),c(Be)&&e.set(`until`,c(Be)),c(K)&&e.set(`year`,c(K)),c(K)&&c(q)&&e.set(`month`,c(q)),e.set(`sort`,Ct()),t&&!Mn(t)?e.set(`mode`,wt()):t&&e.set(`mode`,`lex`);let n=(await F(yt(`/notes/search?${e}`)))();T(Y,Pn(t,(n.hits||n.notes||[]).map(gt)))}catch(e){T(Ue,e.message||String(e))}}function jt(e){T(Ye,e),clearTimeout(Je),Je=setTimeout(()=>{Et(),At()},150)}let Mt=M(L(1),`monthPage`),Nt=M(L(!1),`pagedYearInit`);function Pt(e){let t=[],n=new Map;for(let r of e){if(I(r.key,`holding`)||I(r.key,`unfiled`)||I(r.key,`other`)){t.push({kind:`special`,key:r.key,label:at(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(Qe)){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=>I(e.kind,`special`)),i=t.filter(e=>I(e.kind,`year`)).sort((e,t)=>t.key.localeCompare(e.key));return[...r,...i]}function Ft(e,t){if(I(t,`special`))return!0;if(c(K))return I(e,c(K));let n=String(new Date().getFullYear());return I(e,n)||I(e,c(R))}function It(e){return Object.prototype.hasOwnProperty.call(ke,e.key)?ke[e.key]:Ft(e.key,e.kind)}function Lt(e){return c(l)||c(K)?e.months:e.months.filter(e=>c(z).has(e.key))}function Rt(e){if(!e)return;let t=-1;for(let n=0;n<c(P).length;n++)I(c(P)[n].year,e)&&(t=n);t>=0&&c(Mt)<t+1&&T(Mt,t+1)}function zt(e){let t=!It(e);ke[e.key]=t,ke=ke,t&&I(e.kind,`year`)&&(Rt(e.key),kt(e.key).catch(e=>{T(Ue,e.message||String(e))}))}function Bt(e){T(K,e),T(q,``),!c(G).trim()&&!c(ze)&&!c(Be)&&(ke[e]=!0,ke=ke,kt(e).then(()=>Ot()).catch(e=>{T(Ue,e.message||String(e))}))}function Vt(){let e=String(new Date().getFullYear()),t={};for(let n of c(be))t[n.key]=I(n.kind,`special`)||I(n.key,e)||I(n.key,c(R));ke=t}async function Ht(){if(Ke)try{let e=(await F(yt(`/notes/index?all=1`)))();_t(e.notes),vt(e.notes)}catch(e){T(Ue,e.message||String(e))}let e={};for(let t of c(be))e[t.key]=!0;ke=e,c(P).length&&T(Mt,c(P).length)}function Ut(e){if(!e?.jsonFile)return e;let t=V().findIndex(t=>I(t.jsonFile,e.jsonFile));if(t>=0?(i.mutation(null,[`transcriptions`,t],V(V()[t]=e,!0),623,6),V(V())):V([...V(),e]),c(Y)){let t=c(Y).findIndex(t=>I(t.jsonFile,e.jsonFile));t>=0&&(ae(Y,c(Y)[t]={...c(Y)[t],...e,day:c(Y)[t].day||e.day}),T(Y,c(Y)))}return e}async function Wt(e){let t=(await F(fetch(`/note?file=${encodeURIComponent(e)}&_=${Date.now()}`)))(),n=(await F(t.json().catch(()=>({}))))();if(!t.ok)throw Error(n.error||`failed to load note`);return Ut(n)}async function Gt(e){if(c(H)[e])T(qe,null);else{try{(await F(Wt(e)))()}catch(e){console.error(...de(`error`,e));return}let t=(c(Y)||[]).find(t=>I(t.jsonFile,e));T(qe,t?.cue??c(qe))}ae(H,c(H)[e]=!c(H)[e]),T(H,c(H)),Et()}function X(e,t){let n=e=>{e>0&&T(Mt,c(Mt)+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 Kt(e,t){ae(et,c(et)[e]=!0),T(et,c(et)),T(Ue,``);try{(await F(t()))()}catch(e){T(Ue,e.message||String(e))}finally{ae(et,c(et)[e]=!1),T(et,c(et))}}async function qt(e){(await F(Kt(e,async()=>{(await F(ft(`/process/force`,{file:e})))(),(await F(Wt(e)))()})))()}async function Jt(e){(await F(Kt(e,async()=>{(await F(ft(`/process/skip`,{file:e})))(),(await F(Wt(e)))()})))()}async function Yt(e,t){(await F(Kt(e,async()=>{(await F(ft(`/holding/resolve`,{file:e,action:t})))()})))()}function Xt(e){confirm(`Are you sure you want to delete this transcription?`)&&(V(V().filter(t=>I(t.jsonFile,e,!1))),c(Y)&&T(Y,c(Y).filter(t=>I(t.jsonFile,e,!1))),Te().emit(`delete-transcription`,{jsonFile:e}))}async function Zt(e){try{let t=(await F(Wt(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 F(navigator.clipboard.writeText(r)))()}catch(e){console.error(...de(`error`,e))}}async function Qt(e,t){(await F(Kt(e,async()=>{Ut((await F(ft(`/note`,{file:e,starred:t})))())})))()}async function $t(e,t){(await F(Kt(e,async()=>{Ut((await F(ft(`/note`,{file:e,tags:t})))()),(await F(bt()))()})))()}function en(e,t){e.transcriptionJson._currentTime=t.currentTarget.currentTime,V(V()),c(Y)&&T(Y,c(Y))}function tn(){T(G,``)}function nn(){T(U,[]),T(K,``),T(q,``),T(ze,``),T(Be,``),T(J,!1),Ee(`all`)}function rn(e){if(!e?.jsonFile)return;let t=V().findIndex(t=>I(t.jsonFile,e.jsonFile));if(t>=0){let n=V()[t];e.transcriptionJson?._partial&&n.transcriptionJson&&!n.transcriptionJson._partial?i.mutation(null,[`transcriptions`,t],V(V()[t]={...n,transcriptionJson:{...n.transcriptionJson,tags:e.transcriptionJson.tags,starred:e.transcriptionJson.starred}},!0),787,8):i.mutation(null,[`transcriptions`,t],V(V()[t]=e,!0),796,8),V(V())}else V([...V(),e])}function an(e){if(T(Ge,!!e?.indexing),e?.reload){Ke=!0,Ot().catch(e=>{T(Ue,e.message||String(e))});return}e?.paged?(Ke=!0,_t(e.notes),vt(e.notes)):e?.notes&&(_t(e.notes,{replace:!Ke}),vt(e.notes));let t=Object.keys(c(H)).filter(e=>c(H)[e]);for(let e of t)Wt(e);bt()}function on(e){rn(e)}function sn(){Dt(location.search),T(Ye,``),c(We)&&jt(c(a));let e=On(location.search).file;e&&Wt(e)}ee(()=>{Dt(location.search);let e=On(location.search).file;return Te().on(`notes-index`,an),Te().on(`transcription`,on),window.addEventListener(`popstate`,sn),Ot().catch(e=>{V().length||T(Ue,e.message||String(e))}).then(async()=>{if(e)try{(await F(Wt(e)))(),ae(H,c(H)[e]=!0),T(H,c(H))}catch(e){T(Ue,e.message||String(e))}}).finally(()=>{T(We,!0)}),()=>{Te().off(`notes-index`,an),Te().off(`transcription`,on),window.removeEventListener(`popstate`,sn)}}),d(()=>(c(G),c(U),x(Ee()),c(K),c(q),c(ze),c(Be),c(Ve),c(He),c(J)),()=>{T(a,[c(G),c(U).join(` `),Ee(),c(K),c(q),c(ze),c(Be),c(Ve),c(He),c(J)?`1`:``].join(`\0`))}),d(()=>(c(We),c(a),c(Ye)),()=>{c(We)&&I(c(a),c(Ye),!1)&&jt(c(a))}),d(()=>(c(G),c(ze),c(Be),c(J),c(U),x(Ee())),()=>{T(l,!!(c(G).trim()||c(ze)||c(Be)||c(J)||c(U).length||I(Ee(),`unreadable`)))}),d(()=>x(V()),()=>{T(f,st(V()))}),d(()=>(c(Ze),x(V())),()=>{T(b,c(Ze).length?(()=>{let e=Math.max(1,...c(Ze).map(e=>e.count));return c(Ze).map(({tag:t,count:n})=>({tag:t,count:n,size:`${.8+n/e*.7}rem`}))})():ct(V()))}),d(()=>c(b),()=>{T(w,c(b).filter(e=>e.count>1))}),d(()=>c(b),()=>{T(k,c(b).filter(e=>I(e.count,1)))}),d(()=>(c(Ae),c(b),c(w),c(je),c(U)),()=>{T(ne,(()=>{let e=c(Ae)?c(b):c(w),t=c(je)?e:e.slice(0,40),n=c(b).filter(e=>c(U).includes(e.tag)&&!t.some(t=>I(t.tag,e.tag)));return[...t,...n]})())}),d(()=>c(f),()=>{T(N,c(f).filter(e=>I(e.key,`holding`)||I(e.key,`unfiled`)))}),d(()=>c(f),()=>{T(P,c(f).filter(e=>I(e.key,`holding`,!1)&&I(e.key,`unfiled`,!1)))}),d(()=>(c(l),c(f),c(N),c(P),c(Mt)),()=>{T(ue,c(l)?c(f):[...c(N),...c(P).slice(0,c(Mt))])}),d(()=>(c(l),c(P),c(Mt)),()=>{T(ge,c(l)?0:Math.max(0,c(P).length-c(Mt)))}),d(()=>c(P),()=>{T(R,c(P)[0]?.year)}),d(()=>c(f),()=>{T(be,Pt(c(f)))}),d(()=>c(be),()=>{T(xe,c(be).filter(e=>I(e.kind,`year`)).length)}),d(()=>c(ue),()=>{T(z,new Set(c(ue).map(e=>e.key)))}),d(()=>(c(Nt),c(R)),()=>{!c(Nt)&&c(R)&&(T(Nt,!0),Rt(c(R)))}),d(()=>(c(Qe),c(K),c(R)),()=>{T(Se,c(Qe).find(e=>I(e.year,c(K)||c(R)))?.count||0)}),d(()=>(c(l),c(Y),c(K),c(q),c(Se)),()=>{T(we,c(l)?_e(c(Y),null)?`Searching…`:`${c(Y).length} hit${I(c(Y).length,1)?``:`s`}`:c(K)?`Browsing ${c(K)}${c(q)?` · ${De[Number(c(q))-1]||c(q)}`:``} · ${c(Se)} notes`:`Showing newest year · ${c(Se)} notes`)}),me();var cn={...p()};ve();var ln=ei(),un=S(ln),dn=S(un),fn=j(S(dn),2);ie(fn);var pn=j(fn,2),mn=e=>{var t=hr();B(`click`,t,tn),o(e,t)};A(()=>t(pn,e=>{c(G)&&e(mn)}),`if`,$,885,6),D(dn);var hn=j(dn,2),gn=j(S(hn),2),_n=S(gn),vn=j(S(_n),2),yn=S(vn);yn.value=yn.__value=``;var bn=j(yn);A(()=>h(bn,1,()=>c(Qe),se,(t,n)=>{var r=gr(),i=e(r),a={};u(()=>{g(i,`${c(n),s(()=>c(n).year)??``} · ${c(n),s(()=>c(n).count)??``}`),a!==(a=(c(n),s(()=>c(n).year)))&&(r.value=(r.__value=a)??``)}),o(t,r)}),`each`,$,897,12),D(vn),ye(vn),D(_n);var xn=j(_n,2),Sn=j(S(xn),2),Cn=S(Sn);Cn.value=Cn.__value=``;var wn=j(Cn);A(()=>h(wn,1,()=>De,se,(t,n,r)=>{var i=_r(),a=e(i,!0),l={};u(e=>{g(a,c(n)),l!==(l=e)&&(i.value=(i.__value=l)??``)},[()=>s(()=>String(r+1).padStart(2,`0`))]),o(t,i)}),`each`,$,906,12),D(Sn),ye(Sn),D(xn);var Tn=j(xn,2);let Z;var En=S(Tn),Dn=j(En,2),An=j(S(Dn),2);ie(An),D(Dn);var Nn=j(Dn,2),Fn=j(S(Nn),2);ie(Fn),D(Nn),D(Tn);var In=j(Tn,2),Ln=S(In);let zn;var Bn=j(Ln,2);let Vn;var Hn=j(Bn,2);let Un;D(In);var Wn=j(In,2),Gn=e=>{var t=vr(),n=S(t);let r;var i=j(n,2);let a;D(t),u((e,t)=>{r=E(n,1,``,null,r,{"is-on":e}),a=E(i,1,``,null,a,{"is-on":t})},[()=>I(wt(),`lex`),()=>I(wt(),`hybrid`)]),B(`click`,n,function(){return T(He,`lex`)}),B(`click`,i,function(){return T(He,`hybrid`)}),o(e,t)},Kn=te(()=>s(St));A(()=>t(Wn,e=>{c(Kn)&&e(Gn)}),`if`,$,931,8);var qn=j(Wn,2);let Jn;var Yn=j(S(qn)),Xn=t=>{var n=yr(),r=e(n,!0);u(()=>g(r,(c(tt),s(()=>c(tt).starred)))),o(t,n)};A(()=>t(Yn,e=>{c(tt),s(()=>c(tt)?.starred)&&e(Xn)}),`if`,$,946,10),D(qn);var Zn=j(qn,2),Qn=e=>{var t=br();B(`click`,t,function(){return Ee(`all`)}),o(e,t)};A(()=>t(Zn,e=>{I(Ee(),`unreadable`)&&e(Qn)}),`if`,$,950,8);var $n=j(Zn,2),er=e=>{var t=xr();B(`click`,t,nn),o(e,t)};A(()=>t($n,e=>{c(U),c(K),c(ze),c(Be),c(J),x(Ee()),s(()=>c(U).length||c(K)||c(ze)||c(Be)||c(J)||I(Ee(),`unreadable`))&&e(er)}),`if`,$,953,8),D(gn),D(hn);var tr=j(hn,2),nr=e(tr,!0);D(un);var rr=j(un,2),ir=t=>{var n=Sr(),r=e(n,!0);u(()=>g(r,c(Ue))),o(t,n)};A(()=>t(rr,e=>{c(Ue)&&e(ir)}),`if`,$,961,2);var ar=j(rr,2),or=e=>{var t=Cr();o(e,t)},Q=e=>{var t=wr();o(e,t)},sr=e=>{var t=Tr();o(e,t)};A(()=>t(ar,e=>{x(V()),c(We),s(()=>!V().length&&!c(We))?e(or):(x(V()),c(Ge),s(()=>!V().length&&c(Ge))?e(Q,1):(x(V()),s(()=>!V().length)&&e(sr,2)))}),`if`,$,965,2);var cr=j(ar,2),lr=n=>{var r=Br(),i=S(r),a=j(S(i),2),l=S(a),d=j(l),f=e=>{var t=v();u(()=>g(t,`· ${c(k),s(()=>c(k).length)??``} single-use hidden`)),o(e,t)};A(()=>t(d,e=>{c(Ae),c(k),s(()=>!c(Ae)&&c(k).length)&&e(f)}),`if`,$,979,10);var p=j(d,2),m=e=>{var t=v();u(()=>g(t,`· ${c(Ae),c(b),c(w),s(()=>(c(Ae)?c(b):c(w)).length-40)??``} more`)),o(e,t)};A(()=>t(p,e=>{c(je),c(Ae),c(b),c(w),s(()=>!c(je)&&(c(Ae)?c(b):c(w)).length>40)&&e(m)}),`if`,$,982,10),D(a),D(i);var y=j(i,2),x=t=>{var n=Er(),r=S(n),i=e(r);D(n),u(e=>g(i,`AND ${e??``}`),[()=>(c(U),s(()=>c(U).join(` + `)))]),o(t,n)};A(()=>t(y,e=>{c(U),s(()=>c(U).length)&&e(x)}),`if`,$,987,6);var C=j(y,2);A(()=>h(C,5,()=>c(ne),se,(t,n)=>{var r=Dr();let i;var a=S(r),l=j(a),d=e(l,!0);D(r),u(e=>{i=E(r,1,`dw-chip`,null,i,{"is-active":e}),g(a,`${c(n),s(()=>c(n).tag)??``} `),g(d,(c(n),s(()=>c(n).count)))},[()=>c(U).includes(c(n).tag)]),B(`click`,r,function(){return lt(c(n).tag)}),o(t,r)}),`each`,$,993,8),D(C);var ee=j(C,2),O=S(ee),te=t=>{var n=Or(),r=e(n);u(()=>g(r,`Show all ${c(Ae),c(b),c(w),s(()=>(c(Ae)?c(b):c(w)).length)??``} listed tags`)),B(`click`,n,function(){return T(je,!0)}),o(t,n)};A(()=>t(O,e=>{c(je),c(Ae),c(b),c(w),s(()=>!c(je)&&(c(Ae)?c(b):c(w)).length>40)&&e(te)}),`if`,$,1006,8);var re=j(O,2),M=t=>{var n=kr(),r=e(n,!0);u(()=>g(r,(c(Ae),c(k),s(()=>c(Ae)?`Hide single-use tags`:`Show ${c(k).length} single-use tags`)))),B(`click`,n,function(){return T(Ae,!c(Ae))}),o(t,n)};A(()=>t(re,e=>{c(k),s(()=>c(k).length)&&e(M)}),`if`,$,1011,8);var N=j(re,2),oe=S(N);ie(oe),Ce(),D(N);var P=j(N,2),F=e(P,!0);D(ee);var ce=j(ee,2),le=t=>{var n=Ar(),r=e(n,!0);u(()=>g(r,c(Fe))),o(t,n)};A(()=>t(ce,e=>{c(Fe)&&e(le)}),`if`,$,1029,6);var ue=j(ce,2),de=t=>{var n=jr(),r=e(n);u(()=>g(r,`Merged tags on ${c(Re),s(()=>c(Re).filesChanged)??``} notes
|
|
4
|
+
(${c(Re),s(()=>c(Re).uniqueBefore)??``} → ${c(Re),s(()=>c(Re).uniqueAfter)??``} unique).`)),o(t,n)};A(()=>t(ue,e=>{c(Re)&&e(de)}),`if`,$,1032,6);var pe=j(ue,2),me=n=>{var r=zr(),i=S(r),a=S(i),l=e(a,!0),d=j(a,2),f=t=>{var n=Mr(),r=e(n,!0);u(()=>g(r,c(Pe))),o(t,n)},p=t=>{var n=Nr(),r=e(n);u(()=>g(r,`Model skipped: ${c(W),s(()=>c(W).modelError)??``}`)),o(t,n)},m=e=>{var t=Pr();o(e,t)},v=e=>{var t=Fr();o(e,t)};A(()=>t(d,e=>{c(Pe)?e(f):(c(W),s(()=>c(W).modelError)?e(p,1):(c(W),s(()=>c(W).modelUsed)?e(m,2):e(v,-1)))}),`if`,$,1046,12),D(i);var y=j(i,2),b=t=>{var n=Lr(),r=_(n);A(()=>h(r,5,()=>(c(W),s(()=>c(W).groups)),se,(t,n,r)=>{var i=Ir(),a=S(i),l=S(a);ie(l);var d=j(l,2),f=S(d),p=e(f,!0),m=j(f,2),h=e(m,!0),_=j(m),v=j(_),y=e(v,!0);D(d),D(a),D(i),u((e,t)=>{g(p,(c(n),s(()=>c(n).keep))),g(h,(c(n),s(()=>c(n).counts?.[c(n).keep]||``))),g(_,` ←
|
|
5
|
+
${e??``} `),g(y,t)},[()=>(c(n),s(()=>c(n).drop.map(e=>`${e}${c(n).counts?.[e]?` (${c(n).counts[e]})`:``}`).join(`, `))),()=>(c(n),s(()=>ut(c(n).reason)))]),fe(l,function(){return c(Ie)[r]},function(e){ae(Ie,c(Ie)[r]=e)}),o(t,i)}),`each`,$,1058,14),D(r);var i=j(r,2),a=S(i),l=e(a,!0),d=j(a,2);D(i),u(e=>{a.disabled=c(Le),g(l,e),d.disabled=c(Le)},[()=>(c(Le),s(()=>c(Le)?`Applying…`:`Apply ${dt().length} merge${I(dt().length,1)?``:`s`}`))]),B(`click`,a,mt),B(`click`,d,ht),o(t,n)},x=t=>{var n=Rr(),r=e(n);B(`click`,r,ht),o(t,n)};A(()=>t(y,e=>{c(W),s(()=>c(W).groups.length)?e(b):e(x,-1)}),`if`,$,1056,10),D(r),u(()=>g(l,(c(W),s(()=>c(W).groups.length?`${c(W).groups.length} merge${I(c(W).groups.length,1)?``:`s`} from ${c(W).unique} tags`:`No close duplicates in ${c(W).unique} tags`)))),o(n,r)};A(()=>t(pe,e=>{c(W)&&e(me)}),`if`,$,1038,6),D(r),u(()=>{g(l,`${c(ne),s(()=>c(ne).length)??``} shown `),oe.disabled=c(Ne)||c(Le),P.disabled=c(Ne)||c(Le),g(F,c(Ne)?c(Pe)||`Reviewing tags…`:`Consolidate similar tags`)}),fe(oe,function(){return c(Me)},function(e){T(Me,e)}),B(`click`,P,pt),o(n,r)};A(()=>t(cr,e=>{c(b),s(()=>c(b).length)&&e(lr)}),`if`,$,973,2);var ur=j(cr,2),dr=e=>{var n=Wr(),r=S(n),i=e=>{var t=Vr();o(e,t)},a=e=>{var n=Hr(),r=j(S(n)),i=e=>{var t=v();u(e=>g(t,`“${e??``}”`),[()=>(c(G),s(()=>c(G).trim()))]),o(e,t)},a=te(()=>(c(G),s(()=>c(G).trim())));A(()=>t(r,e=>{c(a)&&e(i)}),`if`,$,1102,10),Ce(),D(n),o(e,n)},l=e=>{var t=Ur(),n=S(t);{let e=he(()=>(c(H),s(()=>Object.keys(c(H)).find(e=>c(H)[e])||``)));A(()=>mr(n,{get items(){return c(Y)},variant:`hit`,get query(){return c(G)},get selectedTags(){return c(U)},get expanded(){return c(H)},get showRaw(){return c(Oe)},get noteBusy(){return c(et)},get landFile(){return c(e)},get landCue(){return c(qe)},$$events:{toggle:e=>Gt(e.detail),star:e=>Qt(e.detail.jsonFile,e.detail.starred),tag:e=>lt(e.detail),savetags:e=>$t(e.detail.jsonFile,e.detail.tags),raw:e=>{ae(Oe,c(Oe)[e.detail.jsonFile]=e.detail.show),T(Oe,c(Oe))},time:e=>en(e.detail.item,e.detail.event),copy:e=>Zt(e.detail),retry:e=>qt(e.detail),skip:e=>Jt(e.detail),resolve:e=>Yt(e.detail.jsonFile,e.detail.action),delete:e=>Xt(e.detail)}}),`component`,$,1108,10,{componentTag:`NoteList`})}D(t),o(e,t)};A(()=>t(r,e=>{_e(c(Y),null)?e(i):(c(Y),s(()=>!c(Y).length)?e(a,1):e(l,-1))}),`if`,$,1097,6),D(n),o(e,n)};A(()=>t(ur,e=>{c(l)&&e(dr)}),`if`,$,1095,2);var fr=j(ur,2),pr=t=>{var n=Kr(),r=j(S(n),2);A(()=>h(r,5,()=>c(Qe),se,(t,n)=>{var r=Gr();let i;var a=S(r),l=j(a),d=e(l,!0);D(r),u(()=>{i=E(r,1,`dw-text-btn`,null,i,{"dw-text-btn-accent":I(c(K),c(n).year)}),g(a,`${c(n),s(()=>c(n).year)??``} `),g(d,(c(n),s(()=>c(n).count)))}),B(`click`,r,function(){return Bt(c(n).year)}),o(t,r)}),`each`,$,1142,8),D(r),D(n),o(t,n)};A(()=>t(fr,e=>{c(Qe),s(()=>c(Qe).length)&&e(pr)}),`if`,$,1138,2);var ti=j(fr,2),ni=e=>{var t=qr(),n=j(S(t),2),r=S(n),i=j(r,2);D(n),D(t),B(`click`,r,Vt),B(`click`,i,Ht),o(e,t)};A(()=>t(ti,e=>{!c(l)&&c(xe)>1&&e(ni)}),`if`,$,1157,2);var ri=j(ti,2),ii=n=>{var r=$r(),i=S(r);A(()=>h(i,1,()=>c(be),e=>e.key,(n,r)=>{var i=Zr(),a=S(i),l=S(a);let d;var f=j(l,2),p=e(f,!0),m=j(f,2),_=e(m);D(a);var v=j(a,2),y=n=>{var i=Xr();A(()=>h(i,5,()=>(c(r),s(()=>Lt(c(r)))),e=>e.key,(n,i)=>{var a=Yr(),l=S(a),d=t=>{var n=Jr(),r=S(n),a=e(r,!0),l=j(r,2),d=e(l,!0);D(n),u(e=>{g(a,e),g(d,(c(i),s(()=>c(i).items.length)))},[()=>(c(i),s(()=>at(c(i))))]),o(t,n)};A(()=>t(l,e=>{c(r),s(()=>I(c(r).kind,`year`))&&e(d)}),`if`,$,1187,16);var f=j(l,2),p=S(f);{let e=he(()=>(c(H),s(()=>Object.keys(c(H)).find(e=>c(H)[e])||``)));A(()=>mr(p,{get items(){return c(i),s(()=>c(i).items)},get selectedTags(){return c(U)},get expanded(){return c(H)},get showRaw(){return c(Oe)},get noteBusy(){return c(et)},get landFile(){return c(e)},get landCue(){return c(qe)},$$events:{toggle:e=>Gt(e.detail),star:e=>Qt(e.detail.jsonFile,e.detail.starred),tag:e=>lt(e.detail),savetags:e=>$t(e.detail.jsonFile,e.detail.tags),raw:e=>{ae(Oe,c(Oe)[e.detail.jsonFile]=e.detail.show),T(Oe,c(Oe))},time:e=>en(e.detail.item,e.detail.event),copy:e=>Zt(e.detail),retry:e=>qt(e.detail),skip:e=>Jt(e.detail),resolve:e=>Yt(e.detail.jsonFile,e.detail.action),delete:e=>Xt(e.detail)}}),`component`,$,1194,18,{componentTag:`NoteList`})}D(f),D(a),o(n,a)}),`each`,$,1185,12),D(i),o(n,i)},b=te(()=>(c(r),s(()=>It(c(r)))));A(()=>t(v,e=>{c(b)&&e(y)}),`if`,$,1183,8),D(i),u((e,t)=>{re(a,`aria-expanded`,e),d=E(l,0,`chevron svelte-hs422r`,null,d,{"is-closed":t}),g(p,(c(r),s(()=>c(r).label))),g(_,`${c(r),s(()=>c(r).count)??``} note${c(r),s(()=>I(c(r).count,1)?``:`s`)??``}`)},[()=>(c(r),s(()=>It(c(r)))),()=>!It(c(r))]),B(`click`,a,function(){return zt(c(r))}),o(n,i)}),`each`,$,1169,4);var a=j(i,2),l=t=>{var n=Qr(),r=e(n);y(n,(e,t)=>X?.(e,t),()=>c(ge)),u(()=>g(r,`${c(ge)??``} older month${I(c(ge),1)?``:`s`} — scroll to load`)),o(t,n)};A(()=>t(a,e=>{c(ge)>0&&e(l)}),`if`,$,1224,4),D(r),o(n,r)};return A(()=>t(ri,e=>{c(l)||e(ii)}),`if`,$,1167,2),D(ln),u((e,t,n)=>{Sn.disabled=!c(K),Z=E(Tn,1,`dates svelte-hs422r`,null,Z,{"is-open":c(rt)}),zn=E(Ln,1,``,null,zn,{"is-on":e}),Vn=E(Bn,1,``,null,Vn,{"is-on":t}),Un=E(Hn,1,``,null,Un,{"is-on":n}),Jn=E(qn,1,`dw-chip`,null,Jn,{"is-active":c(J)}),g(nr,c(we))},[()=>I(Ct(),`recent`),()=>I(Ct(),`oldest`),()=>I(Ct(),`relevance`)]),ce(fn,function(){return c(G)},function(e){T(G,e)}),C(vn,function(){return c(K)},function(e){T(K,e)}),B(`change`,vn,function(){return T(q,c(K)?c(q):``)}),C(Sn,function(){return c(q)},function(e){T(q,e)}),B(`click`,En,function(){return T(rt,!c(rt))}),ce(An,function(){return c(ze)},function(e){T(ze,e)}),ce(Fn,function(){return c(Be)},function(e){T(Be,e)}),B(`click`,Ln,function(){return T(Ve,`recent`)}),B(`click`,Bn,function(){return T(Ve,`oldest`)}),B(`click`,Hn,function(){return T(Ve,`relevance`)}),B(`click`,qn,function(){return T(J,!c(J))}),o(n,ln),pe(cn)}ni[z]=`src/routes/+page.svelte`;var ti=n(f(`<div class="dw-app-shell"><!> <main class="dw-main"><!> <!></main> <!> <!></div>`),ni[z],[[15,0,[[26,2]]]]);function ni(e,t){oe(new.target),le(t,!1,ni);let n=cn({path:`/socket.io`}),r=M(L(!1),`helpOpen`),i=M(L(!1),`toolsOpen`),a=M(L(`all`),`noteFilter`);var s={...p()};ve();var l=ti(),u=S(l);A(()=>un(u,{$$events:{help:()=>{T(r,!c(r)),c(r)&&T(i,!1)},tools:()=>{T(i,!c(i)),c(i)&&T(r,!1)}}}),`component`,ni,16,2,{componentTag:`AppHeader`});var d=j(u,2),f=S(d);A(()=>mn(f,{}),`component`,ni,27,4,{componentTag:`AudioRecorder`});var m=j(f,2);A(()=>$(m,{get socket(){return n},get noteFilter(){return c(a)},set noteFilter(e){T(a,e)},$$legacy:!0}),`component`,ni,28,4,{componentTag:`Transcriptions`}),D(d);var h=j(d,2);A(()=>gn(h,{get open(){return c(r)},set open(e){T(r,e)},$$legacy:!0}),`component`,ni,30,2,{componentTag:`CollapsibleAside`});var g=j(h,2);return A(()=>Z(g,{get open(){return c(i)},set open(e){T(i,e)},get noteFilter(){return c(a)},set noteFilter(e){T(a,e)},$$legacy:!0}),`component`,ni,31,2,{componentTag:`ToolsAside`}),D(l),o(e,l),pe(s)}export{ni as component};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":"
|
|
1
|
+
{"version":"1789597634625"}
|
package/dist/ui/index.html
CHANGED
|
@@ -6,12 +6,12 @@
|
|
|
6
6
|
<link rel="icon" href="/favicon.svg" type="image/svg+xml" />
|
|
7
7
|
<meta name="viewport" content="width=device-width" />
|
|
8
8
|
<title>DictaWhisper</title>
|
|
9
|
-
<link href="/_app/immutable/entry/start.
|
|
10
|
-
<link href="/_app/immutable/chunks/
|
|
11
|
-
<link href="/_app/immutable/chunks/
|
|
12
|
-
<link href="/_app/immutable/entry/app.
|
|
9
|
+
<link href="/_app/immutable/entry/start.Bw1T7G7Y.js" rel="modulepreload">
|
|
10
|
+
<link href="/_app/immutable/chunks/ICzWSN-L.js" rel="modulepreload">
|
|
11
|
+
<link href="/_app/immutable/chunks/B7P9Bdo4.js" rel="modulepreload">
|
|
12
|
+
<link href="/_app/immutable/entry/app.BeDpCbyd.js" rel="modulepreload">
|
|
13
13
|
<link href="/_app/immutable/chunks/xihTtKlq.js" rel="modulepreload">
|
|
14
|
-
<link href="/_app/immutable/nodes/0.
|
|
14
|
+
<link href="/_app/immutable/nodes/0.BUULaIw9.js" rel="modulepreload">
|
|
15
15
|
|
|
16
16
|
<link href="/_app/immutable/assets/0.C6M3gHo0.css" rel="stylesheet">
|
|
17
17
|
</head>
|
|
@@ -19,15 +19,15 @@
|
|
|
19
19
|
<div style="display: contents">
|
|
20
20
|
<script>
|
|
21
21
|
{
|
|
22
|
-
|
|
22
|
+
__sveltekit_tcus6x = {
|
|
23
23
|
base: ""
|
|
24
24
|
};
|
|
25
25
|
|
|
26
26
|
const element = document.currentScript.parentElement;
|
|
27
27
|
|
|
28
28
|
Promise.all([
|
|
29
|
-
import("/_app/immutable/entry/start.
|
|
30
|
-
import("/_app/immutable/entry/app.
|
|
29
|
+
import("/_app/immutable/entry/start.Bw1T7G7Y.js"),
|
|
30
|
+
import("/_app/immutable/entry/app.BeDpCbyd.js")
|
|
31
31
|
]).then(([kit, app]) => {
|
|
32
32
|
kit.start(app, element);
|
|
33
33
|
});
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "dictawhisper",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.2",
|
|
4
4
|
"private": false,
|
|
5
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",
|
|
@@ -38,8 +38,8 @@
|
|
|
38
38
|
"scripts": {
|
|
39
39
|
"start": "node --experimental-strip-types src/server.ts",
|
|
40
40
|
"cli": "node --experimental-strip-types src/cli.ts",
|
|
41
|
-
"dev": "
|
|
42
|
-
"serve": "
|
|
41
|
+
"dev": "localslip claim dictawhisper --port 7777 && localslip claim dictawhisper-api --port 8008 && node --experimental-strip-types src/dev.ts",
|
|
42
|
+
"serve": "localslip claim dictawhisper --port 7777 && localslip claim dictawhisper-api --port 8008 && node --experimental-strip-types src/dev.ts",
|
|
43
43
|
"turbo": "WHISPER_MODEL=turbo node --experimental-strip-types src/server.ts",
|
|
44
44
|
"ui": "pnpm --dir client dev",
|
|
45
45
|
"typecheck": "tsc --noEmit -p tsconfig.json",
|
|
@@ -55,7 +55,7 @@
|
|
|
55
55
|
"inbox:convert": "node scripts/inbox-convert-non-mp3.mjs",
|
|
56
56
|
"inbox:stamp-mtime": "node scripts/inbox-stamp-mtime.mjs",
|
|
57
57
|
"inbox:fix-mtime": "node scripts/inbox-fix-mtime.mjs",
|
|
58
|
-
"site:dev": "
|
|
58
|
+
"site:dev": "localslip claim dictawhisper-site --port 5186 && pnpm --dir site dev",
|
|
59
59
|
"site:build": "pnpm --dir site build",
|
|
60
60
|
"site:deploy": "pnpm --dir site run ship",
|
|
61
61
|
"ship": "pnpm --dir site run ship",
|
|
@@ -67,6 +67,7 @@
|
|
|
67
67
|
"packageManager": "pnpm@8.14.1",
|
|
68
68
|
"pnpm": {
|
|
69
69
|
"overrides": {
|
|
70
|
+
"cookie@<0.7.0": "1.1.1",
|
|
70
71
|
"fast-uri": "3.1.7",
|
|
71
72
|
"hono": "4.13.7",
|
|
72
73
|
"qs": "6.16.0",
|
package/src/config.ts
CHANGED
|
@@ -2,7 +2,7 @@ import fs from 'fs';
|
|
|
2
2
|
import os from 'os';
|
|
3
3
|
import path from 'path';
|
|
4
4
|
import { z } from 'zod';
|
|
5
|
-
import {
|
|
5
|
+
import { localslipGet } from './lib/localslipGet.ts';
|
|
6
6
|
|
|
7
7
|
export function resolveConfigPath(
|
|
8
8
|
env: NodeJS.ProcessEnv = process.env,
|
|
@@ -152,7 +152,7 @@ export function applyConfigToEnv(config: DictaConfig): void {
|
|
|
152
152
|
process.env.WHISPER_COMPUTE_TYPE = config.whisper.computeType;
|
|
153
153
|
}
|
|
154
154
|
|
|
155
|
-
/**
|
|
155
|
+
/** LocalSlip start on the UI lease sets PORT=7777. That must not become the API. */
|
|
156
156
|
export function resolveApiListenPort(
|
|
157
157
|
envPort: string | undefined,
|
|
158
158
|
uiPort: number | undefined,
|
|
@@ -184,8 +184,8 @@ export function loadConfig(configPath: string = resolveConfigPath()): DictaConfi
|
|
|
184
184
|
host: process.env.HOST?.trim() || parsed.http.host,
|
|
185
185
|
port: resolveListenPort(
|
|
186
186
|
process.env.PORT,
|
|
187
|
-
|
|
188
|
-
|
|
187
|
+
localslipGet('dictawhisper'),
|
|
188
|
+
localslipGet('dictawhisper-api'),
|
|
189
189
|
parsed.http.port,
|
|
190
190
|
servePackagedUi()
|
|
191
191
|
),
|
package/src/dev.ts
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import { execSync, spawn, type ChildProcess } from 'child_process';
|
|
2
|
-
import {
|
|
2
|
+
import { localslipGet } from './lib/localslipGet.ts';
|
|
3
3
|
|
|
4
4
|
const children: ChildProcess[] = [];
|
|
5
5
|
|
|
6
6
|
function apiEnv(): NodeJS.ProcessEnv {
|
|
7
7
|
return {
|
|
8
8
|
...process.env,
|
|
9
|
-
PORT: String(
|
|
9
|
+
PORT: String(localslipGet('dictawhisper-api') ?? 8008),
|
|
10
10
|
};
|
|
11
11
|
}
|
|
12
12
|
|
package/src/lib/fsLib.ts
CHANGED
|
@@ -1,26 +1,40 @@
|
|
|
1
1
|
import fs from 'fs';
|
|
2
|
+
import path from 'path';
|
|
3
|
+
import { allowedRoots } from './pathAllowLib.ts';
|
|
4
|
+
|
|
5
|
+
function pathInsideWatchRoot(filePath: string): string {
|
|
6
|
+
const resolved = path.resolve(filePath);
|
|
7
|
+
for (const root of allowedRoots()) {
|
|
8
|
+
const rel = path.relative(root, resolved);
|
|
9
|
+
if (rel === '..' || rel.startsWith(`..${path.sep}`) || path.isAbsolute(rel)) continue;
|
|
10
|
+
return resolved;
|
|
11
|
+
}
|
|
12
|
+
throw new Error(`path is outside configured watch roots: ${filePath}`);
|
|
13
|
+
}
|
|
2
14
|
|
|
3
15
|
export async function moveFile(filePath: string, destPath: string): Promise<void> {
|
|
4
|
-
|
|
16
|
+
const src = pathInsideWatchRoot(filePath);
|
|
17
|
+
const dest = pathInsideWatchRoot(destPath);
|
|
18
|
+
console.log(`[fs-move] Moving file from ${src} to ${dest}`);
|
|
5
19
|
return new Promise((resolve, reject) => {
|
|
6
|
-
const fileExists = fs.existsSync(
|
|
20
|
+
const fileExists = fs.existsSync(dest);
|
|
7
21
|
// if the file exist in destPath, reject with an error
|
|
8
22
|
if (fileExists) {
|
|
9
|
-
const error = new Error(`Destination file already exists: ${
|
|
23
|
+
const error = new Error(`Destination file already exists: ${dest}`);
|
|
10
24
|
console.error(`[fs-move-error] ${error.message}`);
|
|
11
25
|
return resolve();
|
|
12
26
|
}
|
|
13
|
-
fs.copyFile(
|
|
27
|
+
fs.copyFile(src, dest, (err) => {
|
|
14
28
|
if (err) {
|
|
15
|
-
console.error('[fs-copy-error] copy failed',
|
|
29
|
+
console.error('[fs-copy-error] copy failed', src, dest, err);
|
|
16
30
|
reject(err);
|
|
17
31
|
} else {
|
|
18
|
-
fs.unlink(
|
|
32
|
+
fs.unlink(src, (unlinkErr) => {
|
|
19
33
|
if (unlinkErr) {
|
|
20
|
-
console.error('[fs-delete-error] unlink failed',
|
|
34
|
+
console.error('[fs-delete-error] unlink failed', src, unlinkErr);
|
|
21
35
|
reject(unlinkErr);
|
|
22
36
|
} else {
|
|
23
|
-
console.log(`[fs-delete] Moved ${
|
|
37
|
+
console.log(`[fs-delete] Moved ${src} to ${dest}`);
|
|
24
38
|
resolve();
|
|
25
39
|
}
|
|
26
40
|
});
|
|
@@ -30,8 +44,9 @@ export async function moveFile(filePath: string, destPath: string): Promise<void
|
|
|
30
44
|
}
|
|
31
45
|
|
|
32
46
|
export function confirmFolder(folderPath: string): string {
|
|
33
|
-
|
|
34
|
-
|
|
47
|
+
const allowed = pathInsideWatchRoot(folderPath);
|
|
48
|
+
if (!fs.existsSync(allowed)) {
|
|
49
|
+
fs.mkdirSync(allowed, { recursive: true });
|
|
35
50
|
}
|
|
36
|
-
return
|
|
51
|
+
return allowed;
|
|
37
52
|
}
|
|
@@ -1,14 +1,14 @@
|
|
|
1
|
-
import { spawnSync } from 'child_process';
|
|
2
|
-
|
|
3
|
-
/** `
|
|
4
|
-
export function
|
|
5
|
-
const result = spawnSync('
|
|
6
|
-
encoding: 'utf8',
|
|
7
|
-
timeout: 5000,
|
|
8
|
-
windowsHide: true,
|
|
9
|
-
shell: process.platform === 'win32',
|
|
10
|
-
});
|
|
11
|
-
if (result.status !== 0) return undefined;
|
|
12
|
-
const n = Number((result.stdout || '').trim());
|
|
13
|
-
return Number.isInteger(n) && n > 0 && n <= 65535 ? n : undefined;
|
|
14
|
-
}
|
|
1
|
+
import { spawnSync } from 'child_process';
|
|
2
|
+
|
|
3
|
+
/** `localslip get <name>` — undefined if the CLI or lease is missing. */
|
|
4
|
+
export function localslipGet(name: string): number | undefined {
|
|
5
|
+
const result = spawnSync('localslip', ['get', name], {
|
|
6
|
+
encoding: 'utf8',
|
|
7
|
+
timeout: 5000,
|
|
8
|
+
windowsHide: true,
|
|
9
|
+
shell: process.platform === 'win32',
|
|
10
|
+
});
|
|
11
|
+
if (result.status !== 0) return undefined;
|
|
12
|
+
const n = Number((result.stdout || '').trim());
|
|
13
|
+
return Number.isInteger(n) && n > 0 && n <= 65535 ? n : undefined;
|
|
14
|
+
}
|
|
@@ -5,8 +5,8 @@ import { getSettleMs, inspectFileReadiness, isSkippedWatchPath, requestWhenSettl
|
|
|
5
5
|
import { Watcher } from '../classes/Watcher.ts';
|
|
6
6
|
import { confirmFolder, moveFile } from './fsLib.ts';
|
|
7
7
|
import { checkTranscription, getTranscriptionFilename, process, relocateTranscription } from './transcriptionLib.ts';
|
|
8
|
+
import { containedRelative, resolveAllowedPath } from './pathAllowLib.ts';
|
|
8
9
|
import { config } from '../config.ts';
|
|
9
|
-
import { containedRelative } from './pathAllowLib.ts';
|
|
10
10
|
|
|
11
11
|
const DATE_NAME = /^(?:MTIME_)?(\d{4})-(\d{2})-\d{2}/;
|
|
12
12
|
|
|
@@ -146,12 +146,19 @@ export type HoldingAction = 'overwrite' | 'rename' | 'unfile';
|
|
|
146
146
|
|
|
147
147
|
/** Move a holding/unfiled note into YYYY/MM or _unfiled. */
|
|
148
148
|
export async function resolveHeldFile(filePath: string, action: HoldingAction): Promise<string> {
|
|
149
|
+
const allowed = resolveAllowedPath(filePath);
|
|
150
|
+
if (!allowed.ok) throw new Error(allowed.error);
|
|
151
|
+
filePath = allowed.path;
|
|
149
152
|
if (!fs.existsSync(filePath)) throw new Error('file not found');
|
|
150
153
|
if (filePath.toLowerCase().endsWith('.json')) {
|
|
151
|
-
|
|
154
|
+
const audio = findAudioForSidecar(filePath);
|
|
155
|
+
if (audio) {
|
|
156
|
+
const audioAllowed = resolveAllowedPath(audio);
|
|
157
|
+
if (!audioAllowed.ok) throw new Error(audioAllowed.error);
|
|
158
|
+
filePath = audioAllowed.path;
|
|
159
|
+
}
|
|
152
160
|
}
|
|
153
|
-
const
|
|
154
|
-
const root = config.watch.roots.find((candidate) => containedRelative(resolved, path.resolve(candidate)));
|
|
161
|
+
const root = config.watch.roots.find((candidate) => containedRelative(filePath, path.resolve(candidate)));
|
|
155
162
|
if (!root) throw new Error('file is not under a watch root');
|
|
156
163
|
|
|
157
164
|
const date = dateFromFilename(filePath);
|
package/src/lib/pathAllowLib.ts
CHANGED
|
@@ -12,10 +12,15 @@ export function allowedRoots(): string[] {
|
|
|
12
12
|
|
|
13
13
|
function existingRealPath(filePath: string): string {
|
|
14
14
|
const resolved = path.resolve(filePath);
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
15
|
+
for (const root of allowedRoots()) {
|
|
16
|
+
const rel = path.relative(root, resolved);
|
|
17
|
+
if (rel === '..' || rel.startsWith(`..${path.sep}`) || path.isAbsolute(rel)) continue;
|
|
18
|
+
try {
|
|
19
|
+
if (fs.existsSync(resolved)) return fs.realpathSync(resolved);
|
|
20
|
+
} catch {
|
|
21
|
+
// keep the resolved path
|
|
22
|
+
}
|
|
23
|
+
return resolved;
|
|
19
24
|
}
|
|
20
25
|
return resolved;
|
|
21
26
|
}
|