ranuts 0.4.1-alpha.1 → 0.4.1-alpha.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (38) hide show
  1. package/CLAUDE.md +156 -11
  2. package/README.md +2 -0
  3. package/README.zh-CN.md +2 -0
  4. package/dist/{color-B_KMM8UX.js → color-BTvZUuf-.js} +1 -1
  5. package/dist/i18n-DW21b_DJ.js +1 -0
  6. package/dist/index.js +1 -1
  7. package/dist/src/conversation/engine.d.ts +109 -0
  8. package/dist/src/conversation/index.d.ts +12 -0
  9. package/dist/src/conversation/index.js +1 -0
  10. package/dist/src/conversation/types.d.ts +99 -0
  11. package/dist/src/node/index.js +1 -1
  12. package/dist/src/stream/accumulator.d.ts +51 -0
  13. package/dist/src/stream/budget.d.ts +89 -0
  14. package/dist/src/stream/index.d.ts +25 -0
  15. package/dist/src/stream/index.js +1 -0
  16. package/dist/src/stream/sse.d.ts +51 -0
  17. package/dist/src/stream/types.d.ts +106 -0
  18. package/dist/src/utils/canvas.d.ts +1 -0
  19. package/dist/src/utils/diff.d.ts +51 -0
  20. package/dist/src/utils/i18n/index.js +1 -1
  21. package/dist/src/utils/index.d.ts +9 -5
  22. package/dist/src/utils/index.js +1 -1
  23. package/dist/src/utils/number.d.ts +20 -0
  24. package/dist/src/utils/placement.d.ts +42 -5
  25. package/dist/src/utils/scroll.d.ts +93 -0
  26. package/dist/test/budget.test.d.ts +1 -0
  27. package/dist/test/conversation.test.d.ts +1 -0
  28. package/dist/test/diff.test.d.ts +1 -0
  29. package/dist/test/formatBytes.test.d.ts +1 -0
  30. package/dist/test/scroll.test.d.ts +1 -0
  31. package/dist/test/stream.test.d.ts +1 -0
  32. package/dist/umd/index.umd.cjs +1 -1
  33. package/dist/umd/utils/utils.umd.cjs +1 -1
  34. package/dist/utils-B4FnyUzW.js +1 -0
  35. package/docs/API.md +80 -3
  36. package/package.json +11 -2
  37. package/dist/i18n-BJIS1fR1.js +0 -1
  38. package/dist/utils-BNwhohXq.js +0 -1
@@ -0,0 +1 @@
1
+ import{i as e,t}from"./enums-BAgbyGdH.js";import{ct as n,et as r,nt as i,rt as o,st as a}from"./color-BTvZUuf-.js";import{_ as s,x as c}from"./i18n-DW21b_DJ.js";var l=24;function u(e,t){return e.getBoundingClientRect().top-t.getBoundingClientRect().top}function d(e){const{scrollport:t,observe:n=[],threshold:r=l,onPinnedChange:i}=e;let o=!0,a=t.scrollTop,s=null,c=!1;const d=e=>{e!==o&&(o=e,i?.(e))},h=e=>{t.scrollTop=e,a=t.scrollTop},p=()=>{s=null,h(t.scrollHeight),d(!0)},f=()=>{const e=(n=t,Math.max(0,n.scrollHeight-n.clientHeight));var n;Math.abs(t.scrollTop-Math.min(a,e))>.5?(a=t.scrollTop,d(e-t.scrollTop<=r)):o?p():a=t.scrollTop};t.addEventListener("scroll",f,{passive:!0});let m=null;if(n.length>0&&"undefined"!=typeof ResizeObserver){m=new ResizeObserver(()=>{o&&!c&&h(t.scrollHeight)});for(const e of n)m.observe(e)}return{get pinned(){return o},toBottom:p,follow(){o&&h(t.scrollHeight)},captureAnchor(e){s={row:e,top:u(e,t)}},restoreAnchor(e){if(null===s)return!1;const n=void 0===e?s.row:e(),{top:r}=s;return s=null,!(null===n||!t.contains(n))&&(h(t.scrollTop+u(n,t)-r),!0)},releaseAnchor(){s=null},destroy(){c=!0,t.removeEventListener("scroll",f),m?.disconnect()}}}function h(e){if(""===e)return[];const t=e.split("\n");return""===t.at(-1)&&t.pop(),t}function p(e,t,n={}){const r=Math.max(0,n.context??3),i=h(e),o=h(t);let a=0;for(;a<i.length&&a<o.length&&i[a]===o[a];)a+=1;let s=0;for(;s<i.length-a&&s<o.length-a&&i[i.length-1-s]===o[o.length-1-s];)s+=1;const c=i.slice(a,i.length-s),l=o.slice(a,o.length-s),u=(c.length+1)*(l.length+1)>4e6?function(e,t){return[...e.map((e,t)=>({kind:"removed",text:e,oldLine:t+1,newLine:null})),...t.map((e,t)=>({kind:"added",text:e,oldLine:null,newLine:t+1}))]}(c,l):function(e,t){const n=e.length+1,r=t.length+1,i=new Uint32Array(n*r);for(let c=e.length-1;c>=0;c-=1)for(let n=t.length-1;n>=0;n-=1)i[c*r+n]=e[c]===t[n]?i[(c+1)*r+n+1]+1:Math.max(i[(c+1)*r+n],i[c*r+n+1]);const o=[];let a=0,s=0;for(;a<e.length&&s<t.length;)e[a]===t[s]?(o.push({kind:"context",text:e[a],oldLine:a+1,newLine:s+1}),a+=1,s+=1):i[(a+1)*r+s]>=i[a*r+s+1]?(o.push({kind:"removed",text:e[a],oldLine:a+1,newLine:null}),a+=1):(o.push({kind:"added",text:t[s],oldLine:null,newLine:s+1}),s+=1);for(;a<e.length;a+=1)o.push({kind:"removed",text:e[a],oldLine:a+1,newLine:null});for(;s<t.length;s+=1)o.push({kind:"added",text:t[s],oldLine:null,newLine:s+1});return o}(c,l);return function(e,t){const n=e.map(e=>"context"!==e.kind);if(!n.includes(!0))return[];const r=Array.from({length:e.length},()=>!1);n.forEach((n,i)=>{if(n)for(let o=Math.max(0,i-t);o<=Math.min(e.length-1,i+t);o+=1)r[o]=!0});const i=[];let o=[];const a=()=>{if(0===o.length)return;const e=o.map(e=>e.oldLine).filter(e=>null!==e),t=o.map(e=>e.newLine).filter(e=>null!==e);i.push({oldStart:e[0]??0,oldLines:e.length,newStart:t[0]??0,newLines:t.length,lines:o}),o=[]};return r.forEach((t,n)=>{t?o.push(e[n]):a()}),a(),i}([...i.slice(0,a).map((e,t)=>({kind:"context",text:e,oldLine:t+1,newLine:t+1})),...u.map(e=>({...e,oldLine:null===e.oldLine?null:e.oldLine+a,newLine:null===e.newLine?null:e.newLine+a})),...i.slice(i.length-s).map((e,t)=>({kind:"context",text:e,oldLine:i.length-s+t+1,newLine:o.length-s+t+1}))],r)}var f=(e="")=>{if(0===e.length)return 0;if(e.endsWith("%")){const t=Number(e.replace("%",""));return t>1?t/100:t}return Number(e)},m=(e,t=0,n=1)=>Math.min(n,Math.max(t,e)),g=class e{getDecimalLength=e=>{const[t,n]=e.toString().split(".");return n?n.length:0};amend=(e,t=15)=>parseFloat(Number(e).toPrecision(t));power=(e,t)=>Math.pow(10,Math.max(this.getDecimalLength(e),this.getDecimalLength(t)));static handleMethod=(t,n)=>{const{power:r,amend:i}=new e,o=r(t,n),a=i(t*o),s=i(n*o);return e=>{switch(e){case"+":return(a+s)/o;case"-":return(a-s)/o;case"*":return a*s/(o*o);case"/":return a/s}}};static add=(e,t)=>this.handleMethod(e,t)("+");static divide=(e,t)=>this.handleMethod(e,t)("/");static multiply=(e,t)=>this.handleMethod(e,t)("*");static subtract=(e,t)=>this.handleMethod(e,t)("-")};function w(e,t,n){function r(e){const[t,n]=e.toString().split(".");return n?n.length:0}const i=(e,t=15)=>parseFloat(Number(e).toPrecision(t)),o=Math.pow(10,Math.max(r(e),r(n)));let a=0;switch(e=i(e*o),n=i(n*o),t){case"+":a=(e+n)/o;break;case"-":a=(e-n)/o;break;case"*":a=e*n/(o*o);break;case"/":a=e/n}return a=i(a),{result:a,next:(e,t)=>w(a,e,t)}}var y=(e,t="zh-CN",n=2,r=2)=>{let i=["","K","M","B","T"],o=3;if("zh-CN"===t&&(i=[""," 万"," 亿"," 万亿"],o=4),"zh-HK"===t&&(i=[""," 萬"," 億"," 萬億"],o=4),!/^[+-]?\d+(?:\.\d+)?$/.test(e))return"--";const a=parseInt(e).toString().length,s=Math.min(Math.floor((a-1)/o),i.length-1),c=g.divide(Number(e),10**(s*o))?.toFixed(n);return Number(c).toFixed(r)+i[s]},b=(e,t)=>n(e).startsWith("+")||n(e).startsWith("-")?n(e):t?Number(t||0)>0?`+${n(e)}`:n(e):Number(e||0)>0?`+${n(e)}`:n(e),S={"零":0,"〇":0,"一":1,"二":2,"两":2,"三":3,"四":4,"五":5,"六":6,"七":7,"八":8,"九":9},v={"十":10,"百":100,"千":1e3},C=e=>{const t=a(e.trim());if(/^\d+$/.test(t))return Number.parseInt(t,10);if(0===t.length)return null;let n=0,r=0,i=0;for(const o of t)if(void 0!==S[o])i=S[o];else if(void 0!==v[o])r+=(i||("十"===o?1:0))*v[o],i=0;else{if("万"!==o&&"萬"!==o)return null;n=1e4*(n+r+i),r=0,i=0}return n+r+i},U={I:1,V:5,X:10,L:50,C:100,D:500,M:1e3},E=e=>{const t=e.trim().toUpperCase();if(!/^[IVXLCDM]+$/.test(t))return null;let n=0;for(let r=0;r<t.length;r++){const e=U[t[r]],i=U[t[r+1]];i&&e<i?n-=e:n+=e}return n},A={one:1,two:2,three:3,four:4,five:5,six:6,seven:7,eight:8,nine:9,ten:10,eleven:11,twelve:12,thirteen:13,fourteen:14,fifteen:15,sixteen:16,seventeen:17,eighteen:18,nineteen:19,twenty:20},O=e=>{const t=e.trim().toLowerCase();return/^\d+$/.test(t)?Number.parseInt(t,10):void 0!==A[t]?A[t]:E(t)},M=(e,t,n)=>Math.min(n,Math.max(t,e)),k=(e,t,n)=>e+(t-e)*n,L=(e,t,n)=>e===t?0:(n-e)/(t-e),T=(e,t,n,r,i)=>r+(e-t)*(i-r)/(n-t),B=(e,t,n,r,i)=>M(T(e,t,n,r,i),Math.min(r,i),Math.max(r,i)),F=(e,t,n)=>e===t?n<e?0:1:M((n-e)/(t-e),0,1),x=(e,t,n)=>{const r=F(e,t,n);return r*r*(3-2*r)},R=["B","KB","MB","GB","TB"],P=e=>{if(!Number.isFinite(e)||e<=0)return"0 B";let t=e,n=0;for(;t>=1024&&n<R.length-1;)t/=1024,n+=1;return 0===n?`${Math.round(t)} B`:`${t.toFixed(1)} ${R[n]}`},D=()=>{if("undefined"==typeof window)return;const e=window;return e.SpeechRecognition??e.webkitSpeechRecognition},H=()=>void 0!==D(),I=(e={})=>{const{lang:t,continuous:n=!0,interimResults:r=!0,onResult:i,onError:o,onStart:a,onEnd:s}=e;let c=null;const l=()=>{c=null,s?.()},u={get supported(){return void 0!==D()},get active(){return null!==c},start(){const e=D();if(e&&!c)try{const s=new e;s.lang="function"==typeof t?t():t??"",s.continuous=n,s.interimResults=r,s.maxAlternatives=1;let u="",d=0;s.onresult=e=>{const t=e.results,n=Math.min(e.resultIndex??0,t.length);for(n<d&&(d=0,u="");d<n;d++)u+=t[d]?.[0]?.transcript??"";let r="",o=!0;for(let i=d;i<t.length;i++){const e=t[i];r+=e?.[0]?.transcript??"",!1===e?.isFinal&&(o=!1)}i?.(u+r,o)},s.onerror=e=>{return o?.({kind:(t=e.error,"not-allowed"===t||"service-not-allowed"===t?"denied":"no-speech"===t?"noSpeech":"aborted"===t?"aborted":"failed"),detail:e.error});var t},s.onstart=()=>a?.(),s.onend=l,c=s,s.start()}catch(u){c=null,o?.({kind:"failed",detail:u instanceof Error?u.message:String(u)}),s?.()}},stop(){c?.stop()},abort(){c?.abort()},toggle(){c?u.stop():u.start()}};return u},j=e=>"function"==typeof e,N=12e4,z="__ranuts_bridge__",K="default",W=new class{bridges=/* @__PURE__ */new Set;attachedWindow=null;handleMessage=e=>{for(const t of Array.from(this.bridges))t.receive(e)};add(e){this.bridges.add(e),"undefined"!=typeof window&&this.attachedWindow!==window&&(window.addEventListener("message",this.handleMessage),this.attachedWindow=window)}remove(e){this.bridges.delete(e),0===this.bridges.size&&this.attachedWindow&&(this.attachedWindow.removeEventListener("message",this.handleMessage),this.attachedWindow=null)}},V=class{targetWindow;targetOrigin;messageHandlers;pendingRequests;channel;senderId;available;constructor(e,t="*",n=K){this.targetOrigin=t,this.channel=n,this.senderId=r(12),this.messageHandlers=/* @__PURE__ */new Map,this.pendingRequests=/* @__PURE__ */new Map,this.available="undefined"!=typeof window,this.available?(this.targetWindow=e??window,W.add(this)):this.targetWindow=void 0}post(e,t){const n={...t,__bridge:z,channel:this.channel,senderId:this.senderId};e.postMessage(n,this.targetOrigin)}receive=e=>{if(!this.available)return;if("*"!==this.targetOrigin&&e.origin!==this.targetOrigin)return;if(e.source&&e.source!==this.targetWindow)return;const t=e.data;if(!t||"object"!=typeof t||"__ranuts_bridge__"!==t.__bridge)return;if((t.channel??"default")!==this.channel)return;const{type:n,payload:r,id:i,isResponse:o,isError:a,senderId:s}=t;if(o&&i){const e=this.pendingRequests.get(i);return void(e&&(a?e.reject(new Error("string"==typeof r?r:"Bridge request failed")):e.resolve(r),this.pendingRequests.delete(i)))}if(s&&s===this.senderId)return;if("string"!=typeof n||!this.messageHandlers.has(n))return;const c=this.messageHandlers.get(n);if(j(c)){const t=e.source??this.targetWindow;Promise.resolve(c(r)).then(e=>{i&&this.post(t,{type:n,payload:e,id:i,isResponse:!0})}).catch(e=>{i&&this.post(t,{type:n,payload:e instanceof Error?e.message:String(e),id:i,isResponse:!0,isError:!0})})}};on=(e,t)=>{this.messageHandlers.set(e,t)};off=e=>{this.messageHandlers.delete(e)};send=async(e,t)=>{if(!this.available)return Promise.reject(/* @__PURE__ */new Error("PostMessageBridge is unavailable outside a browser environment"));const n=r(10);return new Promise((r,i)=>{const o=setTimeout(()=>{this.pendingRequests.has(n)&&(this.pendingRequests.delete(n),i(/* @__PURE__ */new Error("Request timeout")))},N),a=e=>{clearTimeout(o),i(e)};this.pendingRequests.set(n,{resolve:e=>{clearTimeout(o),r(e)},reject:a});try{this.post(this.targetWindow,{type:e,payload:t,id:n})}catch(s){this.pendingRequests.delete(n),a(s instanceof Error?s:/* @__PURE__ */new Error("Failed to post message"))}})};broadcast=e=>{if(this.available)try{this.post(this.targetWindow,{type:e.type,payload:e.payload})}catch{}};destroy=()=>{W.remove(this),this.messageHandlers.clear(),this.pendingRequests.forEach(e=>{e.reject(/* @__PURE__ */new Error("Bridge destroyed"))}),this.pendingRequests.clear()}},_=class e{static instance;bridges=/* @__PURE__ */new Map;constructor(){}static getInstance(){return e.instance||(e.instance=new e),e.instance}connectClient=({id:e,targetOrigin:t,targetWindow:n,channel:i})=>{const o=new V(n,t,i);if(e||(e=r(10)),this.bridges.has(e))throw new Error(`Bridge ${e} already exists`);return this.bridges.set(e,o),{bridge:o,id:e}};getClient=e=>this.bridges.get(e);removeClient=e=>{const t=this.bridges.get(e);t&&(t.destroy(),this.bridges.delete(e))};removeAllClient=()=>{this.bridges.forEach(e=>{e.destroy()}),this.bridges.clear()};broadcast=e=>{this.bridges.forEach(t=>{t.broadcast(e)})};sendTo=(e,t,n)=>{const r=this.getClient(e);return r?r.send(t,n):Promise.reject(/* @__PURE__ */new Error(`Bridge ${e} not found`))}},q=_.getInstance(),$={connect:({id:e,targetWindow:t,targetOrigin:n,channel:r})=>q.connectClient({id:e,targetWindow:t,targetOrigin:n,channel:r}),remove:e=>{e&&q.removeClient(e)},removeAll:()=>{q.removeAllClient()},broadcast:e=>q.broadcast(e),call:({id:e,type:t,payload:n})=>q.sendTo(e,t,n),broadcastToAll:e=>{if("undefined"==typeof window)return;const t={__bridge:z,channel:K,type:e.type,payload:e.payload};return window.postMessage(t,"*")}},X={init:e=>{const t=new Map(Object.entries(e).filter(e=>j(e[1]))),n=async e=>{const n=e.data;if(!n||"object"!=typeof n||"__ranuts_bridge__"!==n.__bridge)return;const{type:r,payload:i,id:o}=n,a=n.channel??"default";if("string"!=typeof r||!t.has(r))return;const s=t.get(r);if(!s)return;const c=t=>{o&&e.source?.postMessage({__bridge:z,channel:a,type:r,id:o,isResponse:!0,...t},{targetOrigin:e.origin})};try{c({payload:await s(i)})}catch(l){c({payload:l instanceof Error?l.message:String(l),isError:!0})}};window.removeEventListener("message",n),window.addEventListener("message",n);return{destroy:()=>{window.removeEventListener("message",n)}}}},Y="__ranuts_port_init__",G=e=>{const t=/* @__PURE__ */new Map,n=/* @__PURE__ */new Map,i=r=>{const i=r.data;if(!i||"object"!=typeof i||"string"!=typeof i.type)return;const{type:o,payload:a,id:s,isResponse:c,isError:l}=i;if(c&&s){const e=n.get(s);return void(e&&(l?e.reject(new Error("string"==typeof a?a:"Bridge request failed")):e.resolve(a),n.delete(s)))}if(!t.has(o))return;const u=t.get(o);j(u)&&Promise.resolve(u(a)).then(t=>{s&&e.postMessage({type:o,payload:t,id:s,isResponse:!0})}).catch(t=>{s&&e.postMessage({type:o,payload:t instanceof Error?t.message:String(t),id:s,isResponse:!0,isError:!0})})};return e.addEventListener("message",i),e.start(),{on:(e,n)=>{t.set(e,n)},off:e=>{t.delete(e)},send:(t,i)=>{const o=r(10);return new Promise((r,a)=>{const s=setTimeout(()=>{n.has(o)&&(n.delete(o),a(/* @__PURE__ */new Error("Request timeout")))},N),c=e=>{clearTimeout(s),a(e)};n.set(o,{resolve:e=>{clearTimeout(s),r(e)},reject:c});try{e.postMessage({type:t,payload:i,id:o})}catch(l){n.delete(o),c(l instanceof Error?l:/* @__PURE__ */new Error("Failed to post message"))}})},broadcast:t=>{try{e.postMessage({type:t.type,payload:t.payload})}catch{}},destroy:()=>{e.removeEventListener("message",i),t.clear(),n.forEach(e=>e.reject(/* @__PURE__ */new Error("Bridge destroyed"))),n.clear(),e.close()}}},J=({targetWindow:e,targetOrigin:t="*",name:n="default"})=>{const r=new MessageChannel;return e.postMessage({[Y]:!0,name:n},t,[r.port2]),G(r.port1)},Q=({targetOrigin:e="*",name:t="default"}={})=>"undefined"==typeof window?Promise.reject(/* @__PURE__ */new Error("acceptPortBridge is unavailable outside a browser environment")):new Promise(n=>{const r=i=>{if("*"!==e&&i.origin!==e)return;const o=i.data;if(!o||"object"!=typeof o||!0!==o[Y]||o.name!==t)return;const a=i.ports?.[0];a&&(window.removeEventListener("message",r),n(G(a)))};window.addEventListener("message",r)}),Z=e=>{let t,n=!1,r=e;return(...e)=>(n||(t="function"==typeof r?r(...e):r,n=!0,r=void 0),t)},ee=Z,te=e=>{let t=null;const n=()=>(t??=e().catch(e=>{throw t=null,e}),t);return n.reset=()=>{t=null},Object.defineProperty(n,"started",{get:()=>null!==t}),n},ne=()=>{};function re(e={}){if("object"!=typeof e)throw new TypeError("param must be object");return Object.entries(e).reduce((e,[t,n])=>(void 0===n||null==n||e.append(decodeURIComponent(t),decodeURIComponent(n)),e),new URLSearchParams).toString()}var ie=(e,t=ne,n=4)=>{try{const t="string"==typeof e?JSON.parse(e.replace(/'/g,'"')):e;return JSON.stringify(t,null,n)??""}catch(r){return t(r),""}},oe=(e,t)=>{const n={};return Object.keys(e).forEach(r=>{t.includes(r)||(n[r]=e[r])}),n},ae=(e,t)=>{if(e&&t)for(const n in t)e[n]=t[n];return e};function se(e,t,n,r){if(void 0===e)return ne;if(!(t in e)&&!r)return ne;const i=t in e,o=e[t],a=n(o);if("function"!=typeof a)return ne;e[t]=a;let s=!1;return()=>{s||(s=!0,e[t]===a&&(i?e[t]=o:delete e[t]))}}var ce=(e,t)=>{const n=Object.getOwnPropertyDescriptors(t);for(const r of Object.keys(n)){const t=n[r];if(t.get){const n=t.get;Object.defineProperty(e,r,{configurable:!1,enumerable:!0,get:Z(n)})}else{if("object"!=typeof t.value)throw new Error("Exposed values must be either a getter or an nested object");Object.defineProperty(e,r,{configurable:!1,enumerable:!0,writable:!1,value:ce({},t.value)})}}return Object.freeze(e)};function le(e){return Object.prototype.toString.call(e)}function ue(e,t,n=/* @__PURE__ */new Map){if(e===t)return!0;if(null==e||null==t)return e===t;if(e!=e&&t!=t)return!0;const r=typeof e;if(r!==typeof t)return!1;if("object"!==r)return e===t;const i=le(e);if(i!==le(t))return!1;if(n.has(e))return n.get(e)===t;if(n.set(e,t),"[object Array]"===i){if(e.length!==t.length)return!1;for(let r=0;r<e.length;r++)if(!ue(e[r],t[r],n))return!1;return!0}if("[object Date]"===i)return+e===+t;if("[object RegExp]"===i)return e.toString()===t.toString();if("[object Map]"===i){if(e.size!==t.size)return!1;let r=!0;return e.forEach((e,i)=>{r&&(t.has(i)&&ue(e,t.get(i),n)||(r=!1))}),r}if("[object Set]"===i){if(e.size!==t.size)return!1;const r=Array.from(e),i=Array.from(t);return r.every(e=>i.some(t=>ue(e,t,n)))}const o=Object.keys(e),a=Object.keys(t);if(o.length!==a.length)return!1;for(const s of o)if(!Object.prototype.hasOwnProperty.call(t,s)||!ue(e[s],t[s],n))return!1;return!0}var de=(e,t=/* @__PURE__ */new WeakMap)=>{if(null===e||"object"!=typeof e)return e;if(t.has(e))return t.get(e);if(e instanceof Date)return new Date(e.getTime());if(e instanceof RegExp)return new RegExp(e.source,e.flags);if(Array.isArray(e)){const n=[];t.set(e,n);for(let r=0;r<e.length;r++)n[r]=de(e[r],t);return n}if(e instanceof Map){const n=/* @__PURE__ */new Map;return t.set(e,n),e.forEach((e,r)=>{n.set("object"==typeof r&&null!==r?de(r,t):r,de(e,t))}),n}if(e instanceof Set){const n=/* @__PURE__ */new Set;return t.set(e,n),e.forEach(e=>{n.add(de(e,t))}),n}if("object"==typeof e&&e.constructor===Object){const n={};return t.set(e,n),[...Object.getOwnPropertyNames(e),...Object.getOwnPropertySymbols(e)].forEach(r=>{n[r]=de(e[r],t)}),n}try{const n=new(0,Object.getPrototypeOf(e).constructor);t.set(e,n);for(const r in e)Object.prototype.hasOwnProperty.call(e,r)&&(n[r]=de(e[r],t));return n}catch{return console.warn(`Unable to deeply clone object of type ${Object.prototype.toString.call(e)}. Fallback to shallow copy.`),{...e}}},he={172351395:{name:"EBML",type:"Container"},646:{name:"EBMLVersion",type:"Uint"},759:{name:"EBMLReadVersion",type:"Uint"},754:{name:"EBMLMaxIDLength",type:"Uint"},755:{name:"EBMLMaxSizeLength",type:"Uint"},642:{name:"DocType",type:"String"},647:{name:"DocTypeVersion",type:"Uint"},645:{name:"DocTypeReadVersion",type:"Uint"},108:{name:"Void",type:"Binary"},63:{name:"CRC-32",type:"Binary"},190023271:{name:"SignatureSlot",type:"Container"},16010:{name:"SignatureAlgo",type:"Uint"},16026:{name:"SignatureHash",type:"Uint"},16037:{name:"SignaturePublicKey",type:"Binary"},16053:{name:"Signature",type:"Binary"},15963:{name:"SignatureElements",type:"Container"},15995:{name:"SignatureElementList",type:"Container"},9522:{name:"SignedElement",type:"Binary"},139690087:{name:"Segment",type:"Container"},21863284:{name:"SeekHead",type:"Container"},3515:{name:"Seek",type:"Container"},5035:{name:"SeekID",type:"Binary"},5036:{name:"SeekPosition",type:"Uint"},88713574:{name:"Info",type:"Container"},13220:{name:"SegmentUID",type:"Binary"},13188:{name:"SegmentFilename",type:"String"},1882403:{name:"PrevUID",type:"Binary"},1868715:{name:"PrevFilename",type:"String"},2013475:{name:"NextUID",type:"Binary"},1999803:{name:"NextFilename",type:"String"},1092:{name:"SegmentFamily",type:"Binary"},10532:{name:"ChapterTranslate",type:"Container"},10748:{name:"ChapterTranslateEditionUID",type:"Uint"},10687:{name:"ChapterTranslateCodec",type:"Uint"},10661:{name:"ChapterTranslateID",type:"Binary"},710577:{name:"TimecodeScale",type:"Uint"},1161:{name:"Duration",type:"Float"},1121:{name:"DateUTC",type:"Date"},15273:{name:"Title",type:"String"},3456:{name:"MuxingApp",type:"String"},5953:{name:"WritingApp",type:"String"},103:{name:"Timecode",type:"Uint"},6228:{name:"SilentTracks",type:"Container"},6359:{name:"SilentTrackNumber",type:"Uint"},39:{name:"Position",type:"Uint"},43:{name:"PrevSize",type:"Uint"},35:{name:"SimpleBlock",type:"Binary"},32:{name:"BlockGroup",type:"Container"},33:{name:"Block",type:"Binary"},34:{name:"BlockVirtual",type:"Binary"},13729:{name:"BlockAdditions",type:"Container"},38:{name:"BlockMore",type:"Container"},110:{name:"BlockAddID",type:"Uint"},37:{name:"BlockAdditional",type:"Binary"},27:{name:"BlockDuration",type:"Uint"},122:{name:"ReferencePriority",type:"Uint"},123:{name:"ReferenceBlock",type:"Int"},125:{name:"ReferenceVirtual",type:"Int"},36:{name:"CodecState",type:"Binary"},13730:{name:"DiscardPadding",type:"Int"},14:{name:"Slices",type:"Container"},104:{name:"TimeSlice",type:"Container"},76:{name:"LaceNumber",type:"Uint"},77:{name:"FrameNumber",type:"Uint"},75:{name:"BlockAdditionID",type:"Uint"},78:{name:"Delay",type:"Uint"},79:{name:"SliceDuration",type:"Uint"},72:{name:"ReferenceFrame",type:"Container"},73:{name:"ReferenceOffset",type:"Uint"},74:{name:"ReferenceTimeCode",type:"Uint"},47:{name:"EncryptedBlock",type:"Binary"},106212971:{name:"Tracks",type:"Container"},46:{name:"TrackEntry",type:"Container"},87:{name:"TrackNumber",type:"Uint"},13253:{name:"TrackUID",type:"Uint"},3:{name:"TrackType",type:"Uint"},57:{name:"FlagEnabled",type:"Uint"},8:{name:"FlagDefault",type:"Uint"},5546:{name:"FlagForced",type:"Uint"},28:{name:"FlagLacing",type:"Uint"},11751:{name:"MinCache",type:"Uint"},11768:{name:"MaxCache",type:"Uint"},254851:{name:"DefaultDuration",type:"Uint"},216698:{name:"DefaultDecodedFieldDuration",type:"Uint"},209231:{name:"TrackTimecodeScale",type:"Float"},4991:{name:"TrackOffset",type:"Int"},5614:{name:"MaxBlockAdditionID",type:"Uint"},4974:{name:"Name",type:"String"},177564:{name:"Language",type:"String"},6:{name:"CodecID",type:"String"},9122:{name:"CodecPrivate",type:"Binary"},362120:{name:"CodecName",type:"String"},13382:{name:"AttachmentLink",type:"Uint"},1742487:{name:"CodecSettings",type:"String"},1785920:{name:"CodecInfoURL",type:"String"},438848:{name:"CodecDownloadURL",type:"String"},42:{name:"CodecDecodeAll",type:"Uint"},12203:{name:"TrackOverlay",type:"Uint"},5802:{name:"CodecDelay",type:"Uint"},5819:{name:"SeekPreRoll",type:"Uint"},9764:{name:"TrackTranslate",type:"Container"},9980:{name:"TrackTranslateEditionUID",type:"Uint"},9919:{name:"TrackTranslateCodec",type:"Uint"},9893:{name:"TrackTranslateTrackID",type:"Binary"},96:{name:"Video",type:"Container"},26:{name:"FlagInterlaced",type:"Uint"},5048:{name:"StereoMode",type:"Uint"},5056:{name:"AlphaMode",type:"Uint"},5049:{name:"OldStereoMode",type:"Uint"},48:{name:"PixelWidth",type:"Uint"},58:{name:"PixelHeight",type:"Uint"},5290:{name:"PixelCropBottom",type:"Uint"},5307:{name:"PixelCropTop",type:"Uint"},5324:{name:"PixelCropLeft",type:"Uint"},5341:{name:"PixelCropRight",type:"Uint"},5296:{name:"DisplayWidth",type:"Uint"},5306:{name:"DisplayHeight",type:"Uint"},5298:{name:"DisplayUnit",type:"Uint"},5299:{name:"AspectRatioType",type:"Uint"},963876:{name:"ColourSpace",type:"Binary"},1029411:{name:"GammaValue",type:"Float"},230371:{name:"FrameRate",type:"Float"},97:{name:"Audio",type:"Container"},53:{name:"SamplingFrequency",type:"Float"},14517:{name:"OutputSamplingFrequency",type:"Float"},31:{name:"Channels",type:"Uint"},15739:{name:"ChannelPositions",type:"Binary"},8804:{name:"BitDepth",type:"Uint"},98:{name:"TrackOperation",type:"Container"},99:{name:"TrackCombinePlanes",type:"Container"},100:{name:"TrackPlane",type:"Container"},101:{name:"TrackPlaneUID",type:"Uint"},102:{name:"TrackPlaneType",type:"Uint"},105:{name:"TrackJoinBlocks",type:"Container"},109:{name:"TrackJoinUID",type:"Uint"},64:{name:"TrickTrackUID",type:"Uint"},65:{name:"TrickTrackSegmentUID",type:"Binary"},70:{name:"TrickTrackFlag",type:"Uint"},71:{name:"TrickMasterTrackUID",type:"Uint"},68:{name:"TrickMasterTrackSegmentUID",type:"Binary"},11648:{name:"ContentEncodings",type:"Container"},8768:{name:"ContentEncoding",type:"Container"},4145:{name:"ContentEncodingOrder",type:"Uint"},4146:{name:"ContentEncodingScope",type:"Uint"},4147:{name:"ContentEncodingType",type:"Uint"},4148:{name:"ContentCompression",type:"Container"},596:{name:"ContentCompAlgo",type:"Uint"},597:{name:"ContentCompSettings",type:"Binary"},4149:{name:"ContentEncryption",type:"Container"},2017:{name:"ContentEncAlgo",type:"Uint"},2018:{name:"ContentEncKeyID",type:"Binary"},2019:{name:"ContentSignature",type:"Binary"},2020:{name:"ContentSigKeyID",type:"Binary"},2021:{name:"ContentSigAlgo",type:"Uint"},2022:{name:"ContentSigHashAlgo",type:"Uint"},206814059:{name:"Cues",type:"Container"},59:{name:"CuePoint",type:"Container"},51:{name:"CueTime",type:"Uint"},55:{name:"CueTrackPositions",type:"Container"},119:{name:"CueTrack",type:"Uint"},113:{name:"CueClusterPosition",type:"Uint"},112:{name:"CueRelativePosition",type:"Uint"},50:{name:"CueDuration",type:"Uint"},4984:{name:"CueBlockNumber",type:"Uint"},106:{name:"CueCodecState",type:"Uint"},91:{name:"CueReference",type:"Container"},22:{name:"CueRefTime",type:"Uint"},23:{name:"CueRefCluster",type:"Uint"},4959:{name:"CueRefNumber",type:"Uint"},107:{name:"CueRefCodecState",type:"Uint"},155296873:{name:"Attachments",type:"Container"},8615:{name:"AttachedFile",type:"Container"},1662:{name:"FileDescription",type:"String"},1646:{name:"FileName",type:"String"},1632:{name:"FileMimeType",type:"String"},1628:{name:"FileData",type:"Binary"},1710:{name:"FileUID",type:"Uint"},1653:{name:"FileReferral",type:"Binary"},1633:{name:"FileUsedStartTime",type:"Uint"},1634:{name:"FileUsedEndTime",type:"Uint"},4433776:{name:"Chapters",type:"Container"},1465:{name:"EditionEntry",type:"Container"},1468:{name:"EditionUID",type:"Uint"},1469:{name:"EditionFlagHidden",type:"Uint"},1499:{name:"EditionFlagDefault",type:"Uint"},1501:{name:"EditionFlagOrdered",type:"Uint"},54:{name:"ChapterAtom",type:"Container"},13252:{name:"ChapterUID",type:"Uint"},5716:{name:"ChapterStringUID",type:"String"},17:{name:"ChapterTimeStart",type:"Uint"},18:{name:"ChapterTimeEnd",type:"Uint"},24:{name:"ChapterFlagHidden",type:"Uint"},1432:{name:"ChapterFlagEnabled",type:"Uint"},11879:{name:"ChapterSegmentUID",type:"Binary"},11964:{name:"ChapterSegmentEditionUID",type:"Uint"},9155:{name:"ChapterPhysicalEquiv",type:"Uint"},15:{name:"ChapterTrack",type:"Container"},9:{name:"ChapterTrackNumber",type:"Uint"},0:{name:"ChapterDisplay",type:"Container"},5:{name:"ChapString",type:"String"},892:{name:"ChapLanguage",type:"String"},894:{name:"ChapCountry",type:"String"},10564:{name:"ChapProcess",type:"Container"},10581:{name:"ChapProcessCodecID",type:"Uint"},1293:{name:"ChapProcessPrivate",type:"Binary"},10513:{name:"ChapProcessCommand",type:"Container"},10530:{name:"ChapProcessTime",type:"Uint"},10547:{name:"ChapProcessData",type:"Binary"},39109479:{name:"Tags",type:"Container"},13171:{name:"Tag",type:"Container"},9152:{name:"Targets",type:"Container"},10442:{name:"TargetTypeValue",type:"Uint"},9162:{name:"TargetType",type:"String"},9157:{name:"TagTrackUID",type:"Uint"},9161:{name:"TagEditionUID",type:"Uint"},9156:{name:"TagChapterUID",type:"Uint"},9158:{name:"TagAttachmentUID",type:"Uint"},10184:{name:"SimpleTag",type:"Container"},1443:{name:"TagName",type:"String"},1146:{name:"TagLanguage",type:"String"},1156:{name:"TagDefault",type:"Uint"},1159:{name:"TagString",type:"String"},1157:{name:"TagBinary",type:"Binary"}},pe=class{name;type;source;data;constructor(e="Unknown",t="Unknown"){this.name=e,this.type=t}updateBySource(){}setSource(e){this.source=e,this.updateBySource()}updateByData(){}setData(e){this.data=e,this.updateByData()}};function fe(e){return e.length%2==1?"0"+e:e}var me=class extends pe{constructor(e,t){super(e,t||"Uint")}updateBySource(){this.data="";for(let e=0;e<this.source.length;e++){const t=this.source[e].toString(16);this.data+=fe(t)}}updateByData(){const e=this.data.length/2;this.source=new Uint8Array(e);for(let t=0;t<e;t++){const e=this.data.substr(2*t,2);this.source[t]=parseInt(e,16)}}getValue(){return parseInt(this.data,16)}setValue(e){this.setData(fe(e.toString(16)))}},ge=class extends pe{constructor(e,t){super(e,t||"Float")}getFloatArrayType(){return this.source&&4===this.source.length?Float32Array:Float64Array}updateBySource(){const e=this.source.reverse(),t=new(this.getFloatArrayType())(e.buffer);this.data=t[0]}updateByData(){const e=new(this.getFloatArrayType())([this.data]),t=new Uint8Array(e.buffer);this.source=t.reverse()}getValue(){return this.data}setValue(e){this.setData(e)}},we=class e extends pe{offset=0;data=[];constructor(e,t){super(e,t||"Container")}readByte(){return this.source[this.offset++]}readUint(){const e=this.readByte(),t=8-e.toString(2).length;let n=e-(1<<7-t);for(let r=0;r<t;r++)n*=256,n+=this.readByte();return n}updateBySource(){let t;for(this.data=[],this.offset=0;this.offset<this.source.length;this.offset=t){const n=this.readUint(),r=this.readUint();t=Math.min(this.offset+r,this.source.length);const i=this.source.slice(this.offset,t),o=he[n]||{name:"Unknown",type:"Unknown"};let a=pe;switch(o.type){case"Container":a=e;break;case"Uint":a=me;break;case"Float":a=ge}const s=new a(o.name,o.type);s.setSource(i),this.data.push({id:n,idHex:n.toString(16),data:s})}}writeUint(e,t=!1){let n=1,r=128;for(;e>=r&&n<8;)n++,r*=128;if(!t){let t=r+e;for(let e=n-1;e>=0;e--){const n=t%256;this.source[this.offset+e]=n,t=(t-n)/256}}this.offset+=n}writeSections(e=!1){this.offset=0;for(let t=0;t<this.data.length;t++){const n=this.data[t],r=n.data.source,i=r.length;this.writeUint(n.id,e),this.writeUint(i,e),e||this.source.set(r,this.offset),this.offset+=i}return this.offset}updateByData(){const e=this.writeSections(!0);this.source=new Uint8Array(e),this.writeSections()}getSectionById(e){for(let t=0;t<this.data.length;t++){const n=this.data[t];if(n.id===e)return n.data}}},ye=class extends we{constructor(e){super("File","File"),this.setSource(e)}fixDuration(e){const t=this.getSectionById(139690087);if(!t)return!1;const n=t.getSectionById(88713574);if(!n)return!1;const r=n.getSectionById(710577);if(!r)return!1;let i=n.getSectionById(1161);if(i){if(!(i.getValue()<=0))return!1;i.setValue(e)}else i=new ge("Duration","Float"),i.setValue(e),n.data.push({id:1161,data:i});return r.setValue(1e6),n.updateByData(),t.updateByData(),this.updateByData(),!0}toBlob(e="video/webm"){return new Blob([this.source.buffer],{type:e})}};var be=class{startTime;chunks;mediaRecorder;blob;constructor(){this.startTime=Date.now(),this.chunks=[],navigator.mediaDevices.getUserMedia({audio:!0}).then(e=>{this.init(e)}).catch(e=>{})}init(e){const t=function(){const e=["audio/webm","audio/mp4","audio/ogg","audio/wav","audio/aac"];for(let t=0;t<e.length;t++)if(MediaRecorder.isTypeSupported(e[t]))return e[t]}();this.mediaRecorder=new MediaRecorder(e,{mimeType:t}),this.mediaRecorder?.addEventListener("dataavailable",async e=>{if(e.data.size>0&&this.chunks.push(e.data),"inactive"===this.mediaRecorder?.state){const e=Date.now()-this.startTime;this.blob=new Blob(this.chunks,{type:t}),"audio/webm"===t&&(this.blob=await((e,t,n="video/webm")=>new Promise((r,i)=>{try{const o=new FileReader;o.addEventListener("loadend",()=>{try{const i=o.result,a=new ye(new Uint8Array(i));a.fixDuration(t)?r(a.toBlob(n)):r(e)}catch(a){i(a)}}),o.addEventListener("error",()=>i()),o.readAsArrayBuffer(e)}catch(o){i(o)}}))(this.blob,e,this.blob.type)),this.chunks=[]}}),this.mediaRecorder?.start()}start(){return"paused"===this.mediaRecorder?.state&&this.mediaRecorder.resume(),this.mediaRecorder}pause(){return"recording"===this.mediaRecorder?.state&&this.mediaRecorder.pause(),this.mediaRecorder}stop(){return this.mediaRecorder?.stop(),this.blob}},Se=new e,ve=(e,t={})=>{const{subscriber:n,equals:r}=t;let i=e;return[()=>i,e=>{var t,o;(t=i,o=e,!1!==r&&("function"==typeof r?r(t,o):Object.is(t,o)))||(i=e,n&&Se.call(n))}]},Ce="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";function Ue(e,t,n,r){let i,o,a;const s=t||[0],c=(n=n||0)>>>3,l=-1===r?3:0;for(i=0;i<e.length;i+=1)a=i+c,o=a>>>2,s.length<=o&&s.push(0),s[o]|=e[i]<<8*(l+r*(a%4));return{value:s,binLen:8*e.length+n}}function Ee(e,t,n){switch(t){case"UTF8":case"UTF16BE":case"UTF16LE":break;default:throw new Error("encoding must be UTF8, UTF16BE, or UTF16LE")}switch(e){case"HEX":return function(e,t,r){return function(e,t,n,r){let i,o,a,s;if(0!=e.length%2)throw new Error("String of HEX type must be in byte increments");const c=t||[0],l=(n=n||0)>>>3,u=-1===r?3:0;for(i=0;i<e.length;i+=2){if(o=parseInt(e.substr(i,2),16),isNaN(o))throw new Error("String of HEX type contains invalid characters");for(s=(i>>>1)+l,a=s>>>2;c.length<=a;)c.push(0);c[a]|=o<<8*(u+r*(s%4))}return{value:c,binLen:4*e.length+n}}(e,t,r,n)};case"TEXT":return function(e,r,i){return function(e,t,n,r,i){let o,a,s,c,l,u,d,h,p=0;const f=n||[0],m=(r=r||0)>>>3;if("UTF8"===t)for(d=-1===i?3:0,s=0;s<e.length;s+=1)for(o=e.charCodeAt(s),a=[],128>o?a.push(o):2048>o?(a.push(192|o>>>6),a.push(128|63&o)):55296>o||57344<=o?a.push(224|o>>>12,128|o>>>6&63,128|63&o):(s+=1,o=65536+((1023&o)<<10|1023&e.charCodeAt(s)),a.push(240|o>>>18,128|o>>>12&63,128|o>>>6&63,128|63&o)),c=0;c<a.length;c+=1){for(u=p+m,l=u>>>2;f.length<=l;)f.push(0);f[l]|=a[c]<<8*(d+i*(u%4)),p+=1}else for(d=-1===i?2:0,h="UTF16LE"===t&&1!==i||"UTF16LE"!==t&&1===i,s=0;s<e.length;s+=1){for(o=e.charCodeAt(s),!0===h&&(c=255&o,o=c<<8|o>>>8),u=p+m,l=u>>>2;f.length<=l;)f.push(0);f[l]|=o<<8*(d+i*(u%4)),p+=2}return{value:f,binLen:8*p+r}}(e,t,r,i,n)};case"B64":return function(e,t,r){return function(e,t,n,r){let i,o,a,s,c,l,u,d=0;const h=t||[0],p=(n=n||0)>>>3,f=-1===r?3:0,m=e.indexOf("=");if(-1===e.search(/^[a-z\d=+/]+$/i))throw new Error("Invalid character in base-64 string");if(e=e.replace(/=/g,""),-1!==m&&m<e.length)throw new Error("Invalid '=' found in base-64 string");for(o=0;o<e.length;o+=4){for(c=e.substr(o,4),s=0,a=0;a<c.length;a+=1)i=Ce.indexOf(c.charAt(a)),s|=i<<18-6*a;for(a=0;a<c.length-1;a+=1){for(u=d+p,l=u>>>2;h.length<=l;)h.push(0);h[l]|=(s>>>16-8*a&255)<<8*(f+r*(u%4)),d+=1}}return{value:h,binLen:8*d+n}}(e,t,r,n)};case"BYTES":return function(e,t,r){return function(e,t,n,r){let i,o,a,s;const c=t||[0],l=(n=n||0)>>>3,u=-1===r?3:0;for(o=0;o<e.length;o+=1)i=e.charCodeAt(o),s=o+l,a=s>>>2,c.length<=a&&c.push(0),c[a]|=i<<8*(u+r*(s%4));return{value:c,binLen:8*e.length+n}}(e,t,r,n)};case"ARRAYBUFFER":return function(e,t,r){return function(e,t,n,r){return Ue(new Uint8Array(e),t,n,r)}(e,t,r,n)};case"UINT8ARRAY":return function(e,t,r){return Ue(e,t,r,n)};default:throw new Error("format must be HEX, TEXT, B64, BYTES, ARRAYBUFFER, or UINT8ARRAY")}}function Ae(e,t,n,r){switch(e){case"HEX":return function(e){return function(e,t,n,r){const i="0123456789abcdef";let o,a,s="";const c=t/8,l=-1===n?3:0;for(o=0;o<c;o+=1)a=e[o>>>2]>>>8*(l+n*(o%4)),s+=i.charAt(a>>>4&15)+i.charAt(15&a);return r.outputUpper?s.toUpperCase():s}(e,t,n,r)};case"B64":return function(e){return function(e,t,n,r){let i,o,a,s,c,l="";const u=t/8,d=-1===n?3:0;for(i=0;i<u;i+=3)for(s=i+1<u?e[i+1>>>2]:0,c=i+2<u?e[i+2>>>2]:0,a=(e[i>>>2]>>>8*(d+n*(i%4))&255)<<16|(s>>>8*(d+n*((i+1)%4))&255)<<8|c>>>8*(d+n*((i+2)%4))&255,o=0;o<4;o+=1)l+=8*i+6*o<=t?Ce.charAt(a>>>6*(3-o)&63):r.b64Pad;return l}(e,t,n,r)};case"BYTES":return function(e){return function(e,t,n){let r,i,o="";const a=t/8,s=-1===n?3:0;for(r=0;r<a;r+=1)i=e[r>>>2]>>>8*(s+n*(r%4))&255,o+=String.fromCharCode(i);return o}(e,t,n)};case"ARRAYBUFFER":return function(e){return function(e,t,n){let r;const i=t/8,o=new ArrayBuffer(i),a=new Uint8Array(o),s=-1===n?3:0;for(r=0;r<i;r+=1)a[r]=e[r>>>2]>>>8*(s+n*(r%4))&255;return o}(e,t,n)};case"UINT8ARRAY":return function(e){return function(e,t,n){let r;const i=t/8,o=-1===n?3:0,a=new Uint8Array(i);for(r=0;r<i;r+=1)a[r]=e[r>>>2]>>>8*(o+n*(r%4))&255;return a}(e,t,n)};default:throw new Error("format must be HEX, B64, BYTES, ARRAYBUFFER, or UINT8ARRAY")}}var Oe=4294967296,Me=[1116352408,1899447441,3049323471,3921009573,961987163,1508970993,2453635748,2870763221,3624381080,310598401,607225278,1426881987,1925078388,2162078206,2614888103,3248222580,3835390401,4022224774,264347078,604807628,770255983,1249150122,1555081692,1996064986,2554220882,2821834349,2952996808,3210313671,3336571891,3584528711,113926993,338241895,666307205,773529912,1294757372,1396182291,1695183700,1986661051,2177026350,2456956037,2730485921,2820302411,3259730800,3345764771,3516065817,3600352804,4094571909,275423344,430227734,506948616,659060556,883997877,958139571,1322822218,1537002063,1747873779,1955562222,2024104815,2227730452,2361852424,2428436474,2756734187,3204031479,3329325298],ke=[3238371032,914150663,812702999,4144912697,4290775857,1750603025,1694076839,3204075428],Le=[1779033703,3144134277,1013904242,2773480762,1359893119,2600822924,528734635,1541459225],Te="Chosen SHA variant is not supported",Be="Cannot set numRounds with MAC";function Fe(e,t){let n,r;const i=e.binLen>>>3,o=t.binLen>>>3,a=i<<3,s=4-i<<3;if(i%4!=0){for(n=0;n<o;n+=4)r=i+n>>>2,e.value[r]|=t.value[n>>>2]<<a,e.value.push(0),e.value[r+1]|=t.value[n>>>2]>>>s;return(e.value.length<<2)-4>=o+i&&e.value.pop(),{value:e.value,binLen:e.binLen+t.binLen}}return{value:e.value.concat(t.value),binLen:e.binLen+t.binLen}}function xe(e){const t={outputUpper:!1,b64Pad:"=",outputLen:-1},n=e||{},r="Output length must be a multiple of 8";if(t.outputUpper=n.outputUpper||!1,n.b64Pad&&(t.b64Pad=n.b64Pad),n.outputLen){if(n.outputLen%8!=0)throw new Error(r);t.outputLen=n.outputLen}else if(n.shakeLen){if(n.shakeLen%8!=0)throw new Error(r);t.outputLen=n.shakeLen}if("boolean"!=typeof t.outputUpper)throw new Error("Invalid outputUpper formatting option");if("string"!=typeof t.b64Pad)throw new Error("Invalid b64Pad formatting option");return t}function Re(e,t,n,r){const i=e+" must include a value and format";if(!t){if(!r)throw new Error(i);return r}if(void 0===t.value||!t.format)throw new Error(i);return Ee(t.format,t.encoding||"UTF8",n)(t.value)}var Pe=class{shaVariant;inputFormat;utfType;numRounds;keyWithIPad;keyWithOPad;remainder;remainderLen;updateCalled;processedLen;macKeySet;constructor(e,t,n){const r=n||{};if(this.inputFormat=t,this.utfType=r.encoding||"UTF8",this.numRounds=r.numRounds||1,isNaN(this.numRounds)||this.numRounds!==parseInt(this.numRounds,10)||1>this.numRounds)throw new Error("numRounds must a integer >= 1");this.shaVariant=e,this.remainder=[],this.remainderLen=0,this.updateCalled=!1,this.processedLen=0,this.macKeySet=!1,this.keyWithIPad=[],this.keyWithOPad=[]}update(e){let t,n=0;const r=this.variantBlockSize>>>5,i=this.converterFunc(e,this.remainder,this.remainderLen),o=i.binLen,a=i.value,s=o>>>5;for(t=0;t<s;t+=r)n+this.variantBlockSize<=o&&(this.intermediateState=this.roundFunc(a.slice(t,t+r),this.intermediateState),n+=this.variantBlockSize);return this.processedLen+=n,this.remainder=a.slice(n>>>5),this.remainderLen=o%this.variantBlockSize,this.updateCalled=!0,this}getHash(e,t){let n,r,i=this.outputBinLen;const o=xe(t);if(this.isVariableLen){if(-1===o.outputLen)throw new Error("Output length must be specified in options");i=o.outputLen}const a=Ae(e,i,this.bigEndianMod,o);if(this.macKeySet&&this.getMAC)return a(this.getMAC(o));for(r=this.finalizeFunc(this.remainder.slice(),this.remainderLen,this.processedLen,this.stateCloneFunc(this.intermediateState),i),n=1;n<this.numRounds;n+=1)this.isVariableLen&&i%32!=0&&(r[r.length-1]&=16777215>>>24-i%32),r=this.finalizeFunc(r,i,0,this.newStateFunc(this.shaVariant),i);return a(r)}setHMACKey(e,t,n){if(!this.HMACSupported)throw new Error("Variant does not support HMAC");if(this.updateCalled)throw new Error("Cannot set MAC key after calling update");const r=Ee(t,(n||{}).encoding||"UTF8",this.bigEndianMod);this._setHMACKey(r(e))}_setHMACKey(e){const t=this.variantBlockSize>>>3,n=t/4-1;let r;if(1!==this.numRounds)throw new Error(Be);if(this.macKeySet)throw new Error("MAC key already set");for(t<e.binLen/8&&(e.value=this.finalizeFunc(e.value,e.binLen,0,this.newStateFunc(this.shaVariant),this.outputBinLen));e.value.length<=n;)e.value.push(0);for(r=0;r<=n;r+=1)this.keyWithIPad[r]=909522486^e.value[r],this.keyWithOPad[r]=1549556828^e.value[r];this.intermediateState=this.roundFunc(this.keyWithIPad,this.intermediateState),this.processedLen=this.variantBlockSize,this.macKeySet=!0}getHMAC(e,t){const n=xe(t);return Ae(e,this.outputBinLen,this.bigEndianMod,n)(this._getHMAC())}_getHMAC(){let e;if(!this.macKeySet)throw new Error("Cannot call getHMAC without first setting MAC key");const t=this.finalizeFunc(this.remainder.slice(),this.remainderLen,this.processedLen,this.stateCloneFunc(this.intermediateState),this.outputBinLen);return e=this.roundFunc(this.keyWithOPad,this.newStateFunc(this.shaVariant)),e=this.finalizeFunc(t,this.outputBinLen,this.variantBlockSize,e,this.outputBinLen),e}};function De(e,t){return e<<t|e>>>32-t}function He(e,t){return e>>>t|e<<32-t}function Ie(e,t){return e>>>t}function je(e,t,n){return e^t^n}function Ne(e,t,n){return e&t^~e&n}function ze(e,t,n){return e&t^e&n^t&n}function Ke(e){return He(e,2)^He(e,13)^He(e,22)}function We(e,t){const n=(65535&e)+(65535&t);return((e>>>16)+(t>>>16)+(n>>>16)&65535)<<16|65535&n}function Ve(e,t,n,r){const i=(65535&e)+(65535&t)+(65535&n)+(65535&r);return((e>>>16)+(t>>>16)+(n>>>16)+(r>>>16)+(i>>>16)&65535)<<16|65535&i}function _e(e,t,n,r,i){const o=(65535&e)+(65535&t)+(65535&n)+(65535&r)+(65535&i);return((e>>>16)+(t>>>16)+(n>>>16)+(r>>>16)+(i>>>16)+(o>>>16)&65535)<<16|65535&o}function qe(e){return He(e,17)^He(e,19)^Ie(e,10)}function $e(e){return He(e,7)^He(e,18)^Ie(e,3)}function Xe(e){return He(e,6)^He(e,11)^He(e,25)}function Ye(e){return[1732584193,4023233417,2562383102,271733878,3285377520]}function Ge(e,t){let n,r,i,o,a,s,c;const l=[];for(n=t[0],r=t[1],i=t[2],o=t[3],a=t[4],c=0;c<80;c+=1)l[c]=c<16?e[c]:De(l[c-3]^l[c-8]^l[c-14]^l[c-16],1),s=c<20?_e(De(n,5),Ne(r,i,o),a,1518500249,l[c]):c<40?_e(De(n,5),je(r,i,o),a,1859775393,l[c]):c<60?_e(De(n,5),ze(r,i,o),a,2400959708,l[c]):_e(De(n,5),je(r,i,o),a,3395469782,l[c]),a=o,o=i,i=De(r,30),r=n,n=s;return t[0]=We(n,t[0]),t[1]=We(r,t[1]),t[2]=We(i,t[2]),t[3]=We(o,t[3]),t[4]=We(a,t[4]),t}function Je(e,t,n,r){let i;const o=15+(t+65>>>9<<4),a=t+n;for(;e.length<=o;)e.push(0);for(e[t>>>5]|=128<<24-t%32,e[o]=4294967295&a,e[o-1]=a/Oe|0,i=0;i<e.length;i+=16)r=Ge(e.slice(i,i+16),r);return r}var Qe=class extends Pe{intermediateState;variantBlockSize;bigEndianMod;outputBinLen;isVariableLen;HMACSupported;converterFunc;roundFunc;finalizeFunc;stateCloneFunc;newStateFunc;getMAC;constructor(e,t,n){if("SHA-1"!==e)throw new Error(Te);super(e,t,n);const r=n||{};this.HMACSupported=!0,this.getMAC=this._getHMAC,this.bigEndianMod=-1,this.converterFunc=Ee(this.inputFormat,this.utfType,this.bigEndianMod),this.roundFunc=Ge,this.stateCloneFunc=function(e){return e.slice()},this.newStateFunc=Ye,this.finalizeFunc=Je,this.intermediateState=[1732584193,4023233417,2562383102,271733878,3285377520],this.variantBlockSize=512,this.outputBinLen=160,this.isVariableLen=!1,r.hmacKey&&this._setHMACKey(Re("hmacKey",r.hmacKey,this.bigEndianMod))}};function Ze(e){let t;return t="SHA-224"===e?ke.slice():Le.slice(),t}function et(e,t){let n,r,i,o,a,s,c,l,u,d,h;const p=[];for(n=t[0],r=t[1],i=t[2],o=t[3],a=t[4],s=t[5],c=t[6],l=t[7],h=0;h<64;h+=1)p[h]=h<16?e[h]:Ve(qe(p[h-2]),p[h-7],$e(p[h-15]),p[h-16]),u=_e(l,Xe(a),Ne(a,s,c),Me[h],p[h]),d=We(Ke(n),ze(n,r,i)),l=c,c=s,s=a,a=We(o,u),o=i,i=r,r=n,n=We(u,d);return t[0]=We(n,t[0]),t[1]=We(r,t[1]),t[2]=We(i,t[2]),t[3]=We(o,t[3]),t[4]=We(a,t[4]),t[5]=We(s,t[5]),t[6]=We(c,t[6]),t[7]=We(l,t[7]),t}var tt=class extends Pe{intermediateState;variantBlockSize;bigEndianMod;outputBinLen;isVariableLen;HMACSupported;converterFunc;roundFunc;finalizeFunc;stateCloneFunc;newStateFunc;getMAC;constructor(e,t,n){if("SHA-224"!==e&&"SHA-256"!==e)throw new Error(Te);super(e,t,n);const r=n||{};this.getMAC=this._getHMAC,this.HMACSupported=!0,this.bigEndianMod=-1,this.converterFunc=Ee(this.inputFormat,this.utfType,this.bigEndianMod),this.roundFunc=et,this.stateCloneFunc=function(e){return e.slice()},this.newStateFunc=Ze,this.finalizeFunc=function(t,n,r,i){return function(e,t,n,r,i){let o,a;const s=15+(t+65>>>9<<4),c=t+n;for(;e.length<=s;)e.push(0);for(e[t>>>5]|=128<<24-t%32,e[s]=4294967295&c,e[s-1]=c/Oe|0,o=0;o<e.length;o+=16)r=et(e.slice(o,o+16),r);return a="SHA-224"===i?[r[0],r[1],r[2],r[3],r[4],r[5],r[6]]:r,a}(t,n,r,i,e)},this.intermediateState=Ze(e),this.variantBlockSize=512,this.outputBinLen="SHA-224"===e?224:256,this.isVariableLen=!1,r.hmacKey&&this._setHMACKey(Re("hmacKey",r.hmacKey,this.bigEndianMod))}},nt=class{highOrder;lowOrder;constructor(e,t){this.highOrder=e,this.lowOrder=t}};function rt(e,t){let n;return t>32?(n=64-t,new nt(e.lowOrder<<t|e.highOrder>>>n,e.highOrder<<t|e.lowOrder>>>n)):0!==t?(n=32-t,new nt(e.highOrder<<t|e.lowOrder>>>n,e.lowOrder<<t|e.highOrder>>>n)):e}function it(e,t){let n;return t<32?(n=32-t,new nt(e.highOrder>>>t|e.lowOrder<<n,e.lowOrder>>>t|e.highOrder<<n)):(n=64-t,new nt(e.lowOrder>>>t|e.highOrder<<n,e.highOrder>>>t|e.lowOrder<<n))}function ot(e,t){return new nt(e.highOrder>>>t,e.lowOrder>>>t|e.highOrder<<32-t)}function at(e,t,n){return new nt(e.highOrder&t.highOrder^~e.highOrder&n.highOrder,e.lowOrder&t.lowOrder^~e.lowOrder&n.lowOrder)}function st(e,t,n){return new nt(e.highOrder&t.highOrder^e.highOrder&n.highOrder^t.highOrder&n.highOrder,e.lowOrder&t.lowOrder^e.lowOrder&n.lowOrder^t.lowOrder&n.lowOrder)}function ct(e){const t=it(e,28),n=it(e,34),r=it(e,39);return new nt(t.highOrder^n.highOrder^r.highOrder,t.lowOrder^n.lowOrder^r.lowOrder)}function lt(e,t){let n,r;n=(65535&e.lowOrder)+(65535&t.lowOrder),r=(e.lowOrder>>>16)+(t.lowOrder>>>16)+(n>>>16);const i=(65535&r)<<16|65535&n;n=(65535&e.highOrder)+(65535&t.highOrder)+(r>>>16),r=(e.highOrder>>>16)+(t.highOrder>>>16)+(n>>>16);return new nt((65535&r)<<16|65535&n,i)}function ut(e,t,n,r){let i,o;i=(65535&e.lowOrder)+(65535&t.lowOrder)+(65535&n.lowOrder)+(65535&r.lowOrder),o=(e.lowOrder>>>16)+(t.lowOrder>>>16)+(n.lowOrder>>>16)+(r.lowOrder>>>16)+(i>>>16);const a=(65535&o)<<16|65535&i;i=(65535&e.highOrder)+(65535&t.highOrder)+(65535&n.highOrder)+(65535&r.highOrder)+(o>>>16),o=(e.highOrder>>>16)+(t.highOrder>>>16)+(n.highOrder>>>16)+(r.highOrder>>>16)+(i>>>16);return new nt((65535&o)<<16|65535&i,a)}function dt(e,t,n,r,i){let o,a;o=(65535&e.lowOrder)+(65535&t.lowOrder)+(65535&n.lowOrder)+(65535&r.lowOrder)+(65535&i.lowOrder),a=(e.lowOrder>>>16)+(t.lowOrder>>>16)+(n.lowOrder>>>16)+(r.lowOrder>>>16)+(i.lowOrder>>>16)+(o>>>16);const s=(65535&a)<<16|65535&o;o=(65535&e.highOrder)+(65535&t.highOrder)+(65535&n.highOrder)+(65535&r.highOrder)+(65535&i.highOrder)+(a>>>16),a=(e.highOrder>>>16)+(t.highOrder>>>16)+(n.highOrder>>>16)+(r.highOrder>>>16)+(i.highOrder>>>16)+(o>>>16);return new nt((65535&a)<<16|65535&o,s)}function ht(e,t){return new nt(e.highOrder^t.highOrder,e.lowOrder^t.lowOrder)}function pt(e,t,n,r,i){return new nt(e.highOrder^t.highOrder^n.highOrder^r.highOrder^i.highOrder,e.lowOrder^t.lowOrder^n.lowOrder^r.lowOrder^i.lowOrder)}function ft(e){const t=it(e,19),n=it(e,61),r=ot(e,6);return new nt(t.highOrder^n.highOrder^r.highOrder,t.lowOrder^n.lowOrder^r.lowOrder)}function mt(e){const t=it(e,1),n=it(e,8),r=ot(e,7);return new nt(t.highOrder^n.highOrder^r.highOrder,t.lowOrder^n.lowOrder^r.lowOrder)}function gt(e){const t=it(e,14),n=it(e,18),r=it(e,41);return new nt(t.highOrder^n.highOrder^r.highOrder,t.lowOrder^n.lowOrder^r.lowOrder)}var wt=[new nt(Me[0],3609767458),new nt(Me[1],602891725),new nt(Me[2],3964484399),new nt(Me[3],2173295548),new nt(Me[4],4081628472),new nt(Me[5],3053834265),new nt(Me[6],2937671579),new nt(Me[7],3664609560),new nt(Me[8],2734883394),new nt(Me[9],1164996542),new nt(Me[10],1323610764),new nt(Me[11],3590304994),new nt(Me[12],4068182383),new nt(Me[13],991336113),new nt(Me[14],633803317),new nt(Me[15],3479774868),new nt(Me[16],2666613458),new nt(Me[17],944711139),new nt(Me[18],2341262773),new nt(Me[19],2007800933),new nt(Me[20],1495990901),new nt(Me[21],1856431235),new nt(Me[22],3175218132),new nt(Me[23],2198950837),new nt(Me[24],3999719339),new nt(Me[25],766784016),new nt(Me[26],2566594879),new nt(Me[27],3203337956),new nt(Me[28],1034457026),new nt(Me[29],2466948901),new nt(Me[30],3758326383),new nt(Me[31],168717936),new nt(Me[32],1188179964),new nt(Me[33],1546045734),new nt(Me[34],1522805485),new nt(Me[35],2643833823),new nt(Me[36],2343527390),new nt(Me[37],1014477480),new nt(Me[38],1206759142),new nt(Me[39],344077627),new nt(Me[40],1290863460),new nt(Me[41],3158454273),new nt(Me[42],3505952657),new nt(Me[43],106217008),new nt(Me[44],3606008344),new nt(Me[45],1432725776),new nt(Me[46],1467031594),new nt(Me[47],851169720),new nt(Me[48],3100823752),new nt(Me[49],1363258195),new nt(Me[50],3750685593),new nt(Me[51],3785050280),new nt(Me[52],3318307427),new nt(Me[53],3812723403),new nt(Me[54],2003034995),new nt(Me[55],3602036899),new nt(Me[56],1575990012),new nt(Me[57],1125592928),new nt(Me[58],2716904306),new nt(Me[59],442776044),new nt(Me[60],593698344),new nt(Me[61],3733110249),new nt(Me[62],2999351573),new nt(Me[63],3815920427),new nt(3391569614,3928383900),new nt(3515267271,566280711),new nt(3940187606,3454069534),new nt(4118630271,4000239992),new nt(116418474,1914138554),new nt(174292421,2731055270),new nt(289380356,3203993006),new nt(460393269,320620315),new nt(685471733,587496836),new nt(852142971,1086792851),new nt(1017036298,365543100),new nt(1126000580,2618297676),new nt(1288033470,3409855158),new nt(1501505948,4234509866),new nt(1607167915,987167468),new nt(1816402316,1246189591)];function yt(e){return"SHA-384"===e?[new nt(3418070365,ke[0]),new nt(1654270250,ke[1]),new nt(2438529370,ke[2]),new nt(355462360,ke[3]),new nt(1731405415,ke[4]),new nt(41048885895,ke[5]),new nt(3675008525,ke[6]),new nt(1203062813,ke[7])]:[new nt(Le[0],4089235720),new nt(Le[1],2227873595),new nt(Le[2],4271175723),new nt(Le[3],1595750129),new nt(Le[4],2917565137),new nt(Le[5],725511199),new nt(Le[6],4215389547),new nt(Le[7],327033209)]}function bt(e,t){let n,r,i,o,a,s,c,l,u,d,h,p;const f=[];for(n=t[0],r=t[1],i=t[2],o=t[3],a=t[4],s=t[5],c=t[6],l=t[7],h=0;h<80;h+=1)h<16?(p=2*h,f[h]=new nt(e[p],e[p+1])):f[h]=ut(ft(f[h-2]),f[h-7],mt(f[h-15]),f[h-16]),u=dt(l,gt(a),at(a,s,c),wt[h],f[h]),d=lt(ct(n),st(n,r,i)),l=c,c=s,s=a,a=lt(o,u),o=i,i=r,r=n,n=lt(u,d);return t[0]=lt(n,t[0]),t[1]=lt(r,t[1]),t[2]=lt(i,t[2]),t[3]=lt(o,t[3]),t[4]=lt(a,t[4]),t[5]=lt(s,t[5]),t[6]=lt(c,t[6]),t[7]=lt(l,t[7]),t}var St=class extends Pe{intermediateState;variantBlockSize;bigEndianMod;outputBinLen;isVariableLen;HMACSupported;converterFunc;roundFunc;finalizeFunc;stateCloneFunc;newStateFunc;getMAC;constructor(e,t,n){if("SHA-384"!==e&&"SHA-512"!==e)throw new Error(Te);super(e,t,n);const r=n||{};this.getMAC=this._getHMAC,this.HMACSupported=!0,this.bigEndianMod=-1,this.converterFunc=Ee(this.inputFormat,this.utfType,this.bigEndianMod),this.roundFunc=bt,this.stateCloneFunc=function(e){return e.slice()},this.newStateFunc=yt,this.finalizeFunc=function(t,n,r,i){return function(e,t,n,r,i){let o,a;const s=31+(t+129>>>10<<5),c=t+n;for(;e.length<=s;)e.push(0);for(e[t>>>5]|=128<<24-t%32,e[s]=4294967295&c,e[s-1]=c/Oe|0,o=0;o<e.length;o+=32)r=bt(e.slice(o,o+32),r);return a="SHA-384"===i?[r[0].highOrder,r[0].lowOrder,r[1].highOrder,r[1].lowOrder,r[2].highOrder,r[2].lowOrder,r[3].highOrder,r[3].lowOrder,r[4].highOrder,r[4].lowOrder,r[5].highOrder,r[5].lowOrder]:[r[0].highOrder,r[0].lowOrder,r[1].highOrder,r[1].lowOrder,r[2].highOrder,r[2].lowOrder,r[3].highOrder,r[3].lowOrder,r[4].highOrder,r[4].lowOrder,r[5].highOrder,r[5].lowOrder,r[6].highOrder,r[6].lowOrder,r[7].highOrder,r[7].lowOrder],a}(t,n,r,i,e)},this.intermediateState=yt(e),this.variantBlockSize=1024,this.outputBinLen="SHA-384"===e?384:512,this.isVariableLen=!1,r.hmacKey&&this._setHMACKey(Re("hmacKey",r.hmacKey,this.bigEndianMod))}},vt=[new nt(0,1),new nt(0,32898),new nt(2147483648,32906),new nt(2147483648,2147516416),new nt(0,32907),new nt(0,2147483649),new nt(2147483648,2147516545),new nt(2147483648,32777),new nt(0,138),new nt(0,136),new nt(0,2147516425),new nt(0,2147483658),new nt(0,2147516555),new nt(2147483648,139),new nt(2147483648,32905),new nt(2147483648,32771),new nt(2147483648,32770),new nt(2147483648,128),new nt(0,32778),new nt(2147483648,2147483658),new nt(2147483648,2147516545),new nt(2147483648,32896),new nt(0,2147483649),new nt(2147483648,2147516424)],Ct=[[0,36,3,41,18],[1,44,10,45,2],[62,6,43,15,61],[28,55,25,21,56],[27,20,39,8,14]];function Ut(e){let t;const n=[];for(t=0;t<5;t+=1)n[t]=[new nt(0,0),new nt(0,0),new nt(0,0),new nt(0,0),new nt(0,0)];return n}function Et(e){let t;const n=[];for(t=0;t<5;t+=1)n[t]=e[t].slice();return n}function At(e,t){let n,r,i,o;const a=[],s=[];if(null!=e)for(r=0;r<e.length;r+=2)t[(r>>>1)%5][(r>>>1)/5|0]=ht(t[(r>>>1)%5][(r>>>1)/5|0],new nt(e[r+1],e[r]));for(n=0;n<24;n+=1){for(o=Ut(),r=0;r<5;r+=1)a[r]=pt(t[r][0],t[r][1],t[r][2],t[r][3],t[r][4]);for(r=0;r<5;r+=1)s[r]=ht(a[(r+4)%5],rt(a[(r+1)%5],1));for(r=0;r<5;r+=1)for(i=0;i<5;i+=1)t[r][i]=ht(t[r][i],s[r]);for(r=0;r<5;r+=1)for(i=0;i<5;i+=1)o[i][(2*r+3*i)%5]=rt(t[r][i],Ct[r][i]);for(r=0;r<5;r+=1)for(i=0;i<5;i+=1)t[r][i]=ht(o[r][i],new nt(~o[(r+1)%5][i].highOrder&o[(r+2)%5][i].highOrder,~o[(r+1)%5][i].lowOrder&o[(r+2)%5][i].lowOrder));t[0][0]=ht(t[0][0],vt[n])}return t}function Ot(e){let t,n,r=0;const i=[0,0],o=[4294967295&e,e/Oe&2097151];for(t=6;t>=0;t--)n=o[t>>2]>>>8*t&255,0===n&&0===r||(i[r+1>>2]|=n<<8*(r+1),r+=1);return r=0!==r?r:1,i[0]|=r,{value:r+1>4?i:[i[0]],binLen:8+8*r}}function Mt(e){return Fe(Ot(e.binLen),e)}function kt(e,t){let n,r=Ot(t);r=Fe(r,e);const i=t>>>2,o=(i-r.value.length%i)%i;for(n=0;n<o;n++)r.value.push(0);return r.value}var Lt=class extends Pe{intermediateState;variantBlockSize;bigEndianMod;outputBinLen;isVariableLen;HMACSupported;converterFunc;roundFunc;finalizeFunc;stateCloneFunc;newStateFunc;getMAC;constructor(e,t,n){let r=6,i=0;super(e,t,n);const o=n||{};if(1!==this.numRounds){if(o.kmacKey||o.hmacKey)throw new Error(Be);if("CSHAKE128"===this.shaVariant||"CSHAKE256"===this.shaVariant)throw new Error("Cannot set numRounds for CSHAKE variants")}switch(this.bigEndianMod=1,this.converterFunc=Ee(this.inputFormat,this.utfType,this.bigEndianMod),this.roundFunc=At,this.stateCloneFunc=Et,this.newStateFunc=Ut,this.intermediateState=Ut(),this.isVariableLen=!1,e){case"SHA3-224":this.variantBlockSize=i=1152,this.outputBinLen=224,this.HMACSupported=!0,this.getMAC=this._getHMAC;break;case"SHA3-256":this.variantBlockSize=i=1088,this.outputBinLen=256,this.HMACSupported=!0,this.getMAC=this._getHMAC;break;case"SHA3-384":this.variantBlockSize=i=832,this.outputBinLen=384,this.HMACSupported=!0,this.getMAC=this._getHMAC;break;case"SHA3-512":this.variantBlockSize=i=576,this.outputBinLen=512,this.HMACSupported=!0,this.getMAC=this._getHMAC;break;case"SHAKE128":r=31,this.variantBlockSize=i=1344,this.outputBinLen=-1,this.isVariableLen=!0,this.HMACSupported=!1,this.getMAC=null;break;case"SHAKE256":r=31,this.variantBlockSize=i=1088,this.outputBinLen=-1,this.isVariableLen=!0,this.HMACSupported=!1,this.getMAC=null;break;case"KMAC128":r=4,this.variantBlockSize=i=1344,this._initializeKMAC(n),this.outputBinLen=-1,this.isVariableLen=!0,this.HMACSupported=!1,this.getMAC=this._getKMAC;break;case"KMAC256":r=4,this.variantBlockSize=i=1088,this._initializeKMAC(n),this.outputBinLen=-1,this.isVariableLen=!0,this.HMACSupported=!1,this.getMAC=this._getKMAC;break;case"CSHAKE128":this.variantBlockSize=i=1344,r=this._initializeCSHAKE(n),this.outputBinLen=-1,this.isVariableLen=!0,this.HMACSupported=!1,this.getMAC=null;break;case"CSHAKE256":this.variantBlockSize=i=1088,r=this._initializeCSHAKE(n),this.outputBinLen=-1,this.isVariableLen=!0,this.HMACSupported=!1,this.getMAC=null;break;default:throw new Error(Te)}this.finalizeFunc=function(e,t,n,o,a){return function(e,t,n,r,i,o,a){let s,c,l=0;const u=[],d=i>>>5,h=t>>>5;for(s=0;s<h&&t>=i;s+=d)r=At(e.slice(s,s+d),r),t-=i;for(e=e.slice(s),t%=i;e.length<d;)e.push(0);for(s=t>>>3,e[s>>2]^=o<<s%4*8,e[d-1]^=2147483648,r=At(e,r);32*u.length<a&&(c=r[l%5][l/5|0],u.push(c.lowOrder),!(32*u.length>=a));)u.push(c.highOrder),l+=1,0==64*l%i&&(At(null,r),l=0);return u}(e,t,0,o,i,r,a)},o.hmacKey&&this._setHMACKey(Re("hmacKey",o.hmacKey,this.bigEndianMod))}_initializeCSHAKE(e,t){const n=function(e){const t=e||{};return{funcName:Re("funcName",t.funcName,1,{value:[],binLen:0}),customization:Re("Customization",t.customization,1,{value:[],binLen:0})}}(e||{});t&&(n.funcName=t);const r=Fe(Mt(n.funcName),Mt(n.customization));if(0!==n.customization.binLen||0!==n.funcName.binLen){const e=kt(r,this.variantBlockSize>>>3);for(let t=0;t<e.length;t+=this.variantBlockSize>>>5)this.intermediateState=this.roundFunc(e.slice(t,t+(this.variantBlockSize>>>5)),this.intermediateState),this.processedLen+=this.variantBlockSize;return 4}return 31}_initializeKMAC(e){const t=function(e){const t=e||{};return{kmacKey:Re("kmacKey",t.kmacKey,1),funcName:{value:[1128353099],binLen:32},customization:Re("Customization",t.customization,1,{value:[],binLen:0})}}(e||{});this._initializeCSHAKE(e,t.funcName);const n=kt(Mt(t.kmacKey),this.variantBlockSize>>>3);for(let r=0;r<n.length;r+=this.variantBlockSize>>>5)this.intermediateState=this.roundFunc(n.slice(r,r+(this.variantBlockSize>>>5)),this.intermediateState),this.processedLen+=this.variantBlockSize;this.macKeySet=!0}_getKMAC(e){const t=Fe({value:this.remainder.slice(),binLen:this.remainderLen},function(e){let t,n,r=0;const i=[0,0],o=[4294967295&e,e/Oe&2097151];for(t=6;t>=0;t--)n=o[t>>2]>>>8*t&255,0===n&&0===r||(i[r>>2]|=n<<8*r,r+=1);return r=0!==r?r:1,i[r>>2]|=r<<8*r,{value:r+1>4?i:[i[0]],binLen:8+8*r}}(e.outputLen));return this.finalizeFunc(t.value,t.binLen,this.processedLen,this.stateCloneFunc(this.intermediateState),e.outputLen)}},Tt=class{shaObj;constructor(e,t,n){if("SHA-1"===e)this.shaObj=new Qe(e,t,n);else if("SHA-224"===e||"SHA-256"===e)this.shaObj=new tt(e,t,n);else if("SHA-384"===e||"SHA-512"===e)this.shaObj=new St(e,t,n);else{if("SHA3-224"!==e&&"SHA3-256"!==e&&"SHA3-384"!==e&&"SHA3-512"!==e&&"SHAKE128"!==e&&"SHAKE256"!==e&&"CSHAKE128"!==e&&"CSHAKE256"!==e&&"KMAC128"!==e&&"KMAC256"!==e)throw new Error(Te);this.shaObj=new Lt(e,t,n)}}update(e){return this.shaObj.update(e),this}getHash(e,t){return this.shaObj.getHash(e,t)}setHMACKey(e,t,n){this.shaObj.setHMACKey(e,t,n)}getHMAC(e,t){return this.shaObj.getHMAC(e,t)}},Bt=class{static generate(e,t){const n={digits:6,algorithm:"SHA-1",period:30,timestamp:Date.now(),...t},r=Math.floor(n.timestamp/1e3),i=this.leftpad(this.dec2hex(Math.floor(r/n.period)),16,"0"),o=new Tt(n.algorithm,"HEX");o.setHMACKey(this.base32tohex(e),"HEX"),o.update(i);const a=o.getHMAC("HEX"),s=this.hex2dec(a.substring(a.length-1));let c=(this.hex2dec(a.slice(2*s,2*s+8))&this.hex2dec("7fffffff"))+"";const l=Math.max(c.length-n.digits,0);c=c.substring(l,l+n.digits);return{otp:c,expires:Math.ceil((n.timestamp+1)/(1e3*n.period))*n.period*1e3}}static hex2dec(e){return parseInt(e,16)}static dec2hex(e){return(e<15.5?"0":"")+Math.round(e).toString(16)}static base32tohex(e){let t="",n="";const r=e.endsWith("=")?e.slice(0,e.lastIndexOf("=")):e;for(let i=0;i<r.length;i++){const n="ABCDEFGHIJKLMNOPQRSTUVWXYZ234567".indexOf(e.charAt(i).toUpperCase());if(-1===n)throw new Error("Invalid base32 character in key");t+=this.leftpad(n.toString(2),5,"0")}for(let i=0;i+8<=t.length;i+=8){const e=t.slice(i,i+8);n+=this.leftpad(parseInt(e,2).toString(16),2,"0")}return n}static leftpad(e,t,n){return t+1>=e.length&&(e=Array(t+1-e.length).join(n)+e),e}};function Ft(e){if(!Array.isArray(e))throw new TypeError("Middleware stack must be an array!");for(const t of e)if("function"!=typeof t)throw new TypeError("Middleware must be composed of functions!");return function(t,n){let r=-1;return function i(o){if(o<=r)return Promise.reject(/* @__PURE__ */new Error("next() called multiple times"));r=o;let a=e[o];o===e.length&&n&&(a=n);if(!a)return Promise.resolve();try{return Promise.resolve(a(t,i.bind(null,o+1)))}catch(s){return Promise.reject(s)}}(0)}}var xt=["log","info","warn","error","assert"],Rt=(e=ne)=>{if("undefined"==typeof console)return ne;const t=xt.map(t=>se(console,t,n=>{if("function"!=typeof n)return;const r=n;return function(...n){e(t,...n),r.apply(console,n)}}));return()=>t.forEach(e=>e())},Pt=(e,t=500)=>{let n,r=null,i=null;const o=()=>{if(r=null,!i)return;const t=i,o=n;i=null,n=void 0,e.apply(o,t)},a=function(...e){n=this,i=e,null!==r&&clearTimeout(r),r=setTimeout(o,t)};return a.cancel=()=>{null!==r&&clearTimeout(r),r=null,i=null,n=void 0},a.flush=()=>{null!==r&&(clearTimeout(r),o())},a.pending=()=>null!==r,a},Dt=/* @__PURE__ */function(e){return e.IPAD="ipad",e.ANDROID="android",e.IPhONE="iphone",e.PC="pc",e}({}),Ht=()=>{if("undefined"!=typeof window){const e=navigator.userAgent.toLowerCase();return/ipad|ipod/.test(e)?"ipad":/android/.test(e)?"android":/iphone/.test(e)?"iphone":"pc"}return"pc"},It="undefined"!=typeof window,jt=()=>"undefined"!=typeof window,Nt="(max-width: 768px)",zt=e=>"undefined"!=typeof window&&"function"==typeof window.matchMedia&&window.matchMedia(e).matches,Kt=(e,t)=>{if("undefined"==typeof window||"function"!=typeof window.matchMedia)return t(!1),()=>{};const n=window.matchMedia(e),r=()=>t(n.matches);if(r(),"function"==typeof n.addEventListener)return n.addEventListener("change",r),()=>n.removeEventListener("change",r);const i=n;return i.addListener(r),()=>i.removeListener(r)},Wt=()=>!!jt()&&window.navigator.userAgent.toLowerCase().includes("micromessenger"),Vt=()=>{if(!jt())return!1;const e=window.navigator.userAgent;return!!/Android|webOS|iPhone|iPod|iPad|BlackBerry/i.test(e)},_t=(e,t)=>{if("undefined"==typeof document)return;const n=e.classList;n.contains(t)||n.add(t)},qt=(e,t)=>{if("undefined"==typeof document)return;const n=e.classList;n.contains(t)&&n.remove(t)},$t=e=>{if("undefined"==typeof document)return;const t=document.createDocumentFragment();return e.forEach(e=>t.appendChild(e)),t},Xt=/["'&<>]/;function Yt(e){const t=""+e,n=Xt.exec(t);if(!n)return t;let r,i="",o=0,a=0;for(o=n.index;o<t.length;o++){switch(t.charCodeAt(o)){case 34:r="&quot;";break;case 38:r="&amp;";break;case 39:r="&#39;";break;case 60:r="&lt;";break;case 62:r="&gt;";break;default:continue}a!==o&&(i+=t.substring(a,o)),a=o+1,i+=r}return a!==o?i+t.substring(a,o):i}var Gt=(e=375)=>{let t=e;const{documentElement:n}=document,r=window.matchMedia("(orientation: portrait)");let i,o=667/375;function a(){const e=!r.matches;let i=window.screen.width,a=window.screen.height;i<a&&([i,a]=[a,i]);let s=n.clientWidth,c=a;s/c>=o?(s=c*o,n.classList.remove("adjustHeight"),n.classList.add("adjustWidth")):(c=s/o,n.classList.remove("adjustWidth"),n.classList.add("adjustHeight"));let l=s/t*16;e&&(l/=o),n.style.fontSize=`${l}px`;const u=window.getComputedStyle(n).fontSize.replace("px","")||0;l!==u&&(n.style.fontSize=l/Number(u)*l+"px")}Ht()===Dt.IPAD&&(o=1024/768,t=768),window.addEventListener("resize",function(){clearTimeout(i),i=setTimeout(a,300)},!1),window.addEventListener("pageshow",function(e){e.persisted&&(clearTimeout(i),i=setTimeout(a,300))},!1),window.addEventListener("orientationchange",function(){a()},!1),a()},Jt=e=>{const t=e.style.height,n=e=>{const t=parseFloat(e);return Number.isFinite(t)?t:0},r=()=>{e.style.height="auto";const t=getComputedStyle(e),r="border-box"===t.boxSizing?n(t.borderTopWidth)+n(t.borderBottomWidth):-(n(t.paddingTop)+n(t.paddingBottom));e.style.height=`${e.scrollHeight+r}px`};return e.addEventListener("input",r),r(),()=>{e.removeEventListener("input",r),e.style.height=t}},Qt=(e=ne)=>{if("undefined"==typeof window)return ne;const t=t=>e(t),n=t=>e(t);return window.addEventListener("unhandledrejection",t,!0),window.addEventListener("error",n,!0),()=>{window.removeEventListener("unhandledrejection",t,!0),window.removeEventListener("error",n,!0)}},Zt=class{ac;constructor(){this.ac=new AbortController}get signal(){return this.ac.signal}on(e,t,n,r){return e.addEventListener(t,n,{...r,signal:this.ac.signal}),this}delegate(e,t,n,r,i){return e.addEventListener(n,n=>{const i=n.target?.closest(t);i&&e.contains(i)&&r(n,i)},{...i,signal:this.ac.signal}),this}abort(){this.ac.abort(),this.ac=new AbortController}};function en(e={}){const{windowMs:t=300,maxDistancePx:n=60}=e;let r=-1/0,i=0,o=0;const a=()=>{r=-1/0,i=0,o=0};return{check:(e,s,c=Date.now())=>c-r<t&&Math.hypot(e-i,s-o)<n?(a(),!0):(r=c,i=e,o=s,!1),reset:a}}var tn={easeIn:function(e,t,n,r){return e>=r&&(e=r),n*(e/=r)*e+t},easeOut:function(e,t,n,r){return e>=r&&(e=r),-n*(e/=r)*(e-2)+t}},nn={easeIn:function(e,t,n,r){return e>=r&&(e=r),n*(e/=r)*e*e+t},easeOut:function(e,t,n,r){return e>=r&&(e=r),n*((e=e/r-1)*e*e+1)+t}},rn={easeIn:function(e,t,n,r){return e>=r&&(e=r),n*(e/=r)*e*e*e+t},easeOut:function(e,t,n,r){return e>=r&&(e=r),-n*((e=e/r-1)*e*e*e-1)+t}},on={easeIn:function(e,t,n,r){return e>=r&&(e=r),n*(e/=r)*e*e*e*e+t},easeOut:function(e,t,n,r){return e>=r&&(e=r),n*((e=e/r-1)*e*e*e*e+1)+t}},an={easeIn:function(e,t,n,r){return e>=r&&(e=r),-n*Math.cos(e/r*(Math.PI/2))+n+t},easeOut:function(e,t,n,r){return e>=r&&(e=r),n*Math.sin(e/r*(Math.PI/2))+t}},sn={easeIn:function(e,t,n,r){return e>=r&&(e=r),0===e?t:n*Math.pow(2,10*(e/r-1))+t},easeOut:function(e,t,n,r){return e>=r&&(e=r),e===r?t+n:n*(1-Math.pow(2,-10*e/r))+t}},cn={easeIn:function(e,t,n,r){return e>=r&&(e=r),-n*(Math.sqrt(1-(e/=r)*e)-1)+t},easeOut:function(e,t,n,r){return e>=r&&(e=r),n*Math.sqrt(1-(e=e/r-1)*e)+t}},ln=e=>t*e,un=(e,t)=>[+(Math.cos(e)*t).toFixed(8),+(Math.sin(e)*t).toFixed(8)],dn=(e,t)=>{const n=-e/t;return[n,-n*e+t]},hn=(e,t,n,r,i)=>{e.beginPath();const o=ln(90/Math.PI/t*i),a=n+o,s=r-o;e.arc(0,0,t,a,s,!1),e.lineTo(...un((n+r)/2,i/2/Math.abs(Math.sin((n-r)/2)))),e.closePath()},pn=(e,...[t,n,r,i,o])=>{const a=Math.min(r,i),s=Math.PI;o>a/2&&(o=a/2),e.beginPath(),e.moveTo(t+o,n),e.lineTo(t+o,n),e.lineTo(t+r-o,n),e.arc(t+r-o,n+o,o,-s/2,0),e.lineTo(t+r,n+i-o),e.arc(t+r-o,n+i-o,o,0,s/2),e.lineTo(t+o,n+i),e.arc(t+o,n+i-o,o,s/2,s),e.lineTo(t,n+o),e.arc(t+o,n+o,o,s,-s/2),e.closePath()},fn=(e,t,n,r,i,o)=>{const a=(e=>{const t=e.indexOf("linear-gradient("),n=e.lastIndexOf(")");if(-1===t||n<=t+16)throw new TypeError("getLinearGradient: background must be a linear-gradient(...) value");return e.slice(t+16,n)})(o).split(",").map(e=>e.trim());let s=a.shift(),c=[0,0,0,0];if(s.includes("deg")){const e=Number(s.slice(0,-3))%360;s=`${e}`;const o=e=>Math.tan(e/180*Math.PI);e>=0&&e<45?c=[t,n+i,t+r,n+i-r*o(e-0)]:e>=45&&e<90?c=[t,n+i,t+r-i*o(e-45),n]:e>=90&&e<135?c=[t+r,n+i,t+r-i*o(e-90),n]:e>=135&&e<180?c=[t+r,n+i,t,n+r*o(e-135)]:e>=180&&e<225?c=[t+r,n,t,n+r*o(e-180)]:e>=225&&e<270?c=[t+r,n,t+i*o(e-225),n+i]:e>=270&&e<315?c=[t,n,t+i*o(e-270),n+i]:e>=315&&e<360&&(c=[t,n,t+r,n+i-r*o(e-315)])}else s.includes("top")?c=[t,n+i,t,n]:s.includes("bottom")?c=[t,n,t,n+i]:s.includes("left")?c=[t+r,n,t,n]:s.includes("right")&&(c=[t,n,t+r,n]);const l=e.createLinearGradient(...c.map(e=>e|0));return a.reduce((e,t,n)=>{const r=t.split(" ");return 1===r.length?e.addColorStop(n,r[0]):2===r.length&&e.addColorStop(Number(r[1]),r[0]),e},l)},mn=e=>new Promise((t,n)=>{const r=new Image;r.onload=()=>t(r),r.onerror=e=>n(e),r.src=e}),gn=(e,t)=>{const n=document.createElement("canvas"),r=n.getContext("2d"),{width:i,height:o}=e;return n.width=i,n.height=o,pn(r,0,0,i,o,t),r.clip(),r.drawImage(e,0,0,i,o),n},wn=(e,t)=>{const n=document.createElement("canvas"),r=n.getContext("2d"),{width:i,height:o}=e;if(n.width=i,n.height=o,"string"==typeof r.filter)r.filter=`opacity(${100*t}%)`,r.drawImage(e,0,0,i,o);else{r.drawImage(e,0,0,i,o);const n=r.getImageData(0,0,i,o),{data:a}=n,s=a.length;for(let e=0;e<s;e+=4){const n=a[e+3];0!==n&&(a[e+3]=n*t)}r.putImageData(n,0,0)}return n},yn=(e,t)=>{t=t||e/3;const n=Math.ceil(e),r=t*t,i=2*r,o=1/(2*Math.PI*r),a=[];let s=0;for(let c=-n;c<=n;c++)for(let e=-n;e<=n;e++){const t=o*Math.exp(-(c*c+e*e)/i);a.push(t),s+=t}for(let c=0;c<a.length;c++)a[c]/=s;return a},bn=(e,t,n)=>new Promise((r,i)=>{if("undefined"==typeof window)return void i(/* @__PURE__ */new Error("isImageSize is browser-only: window is undefined"));const o=window.URL||window.webkitURL,a=new Image,s=o.createObjectURL(e),c=()=>o.revokeObjectURL(s);a.onload=()=>{c();const e=void 0===t||a.width===t,i=void 0===n||a.height===n;r(e&&i)},a.onerror=()=>{c(),i(/* @__PURE__ */new Error("failed to decode image"))},a.src=s}),Sn=e=>new Promise((t,n)=>{const r=new FileReader;r.onload=function(){t({success:!0,data:r.result,message:""})},r.onerror=e=>{n({success:!1,data:e,message:""})},r.readAsDataURL(e)}),vn=/* @__PURE__ */new Map,Cn=/* @__PURE__ */new Map,Un="data-adopted-style",En="data-adopted-sheet",An=(e,t,n)=>{if("undefined"==typeof CSSStyleSheet)return!1;try{if(!n.has(t)){const e=new CSSStyleSheet;e.replaceSync(t),n.set(t,e)}const r=n.get(t);return e.adoptedStyleSheets.includes(r)||(e.adoptedStyleSheets=[...e.adoptedStyleSheets,r]),!0}catch{return!1}},On=(e,t,n=Un)=>{if("undefined"!=typeof document&&t&&!An(e,t,vn)&&!e.querySelector(`style[${n}]`)){const r=document.createElement("style");r.setAttribute(n,""),r.textContent=t,e.appendChild(r)}},Mn=(e,t,n=En)=>{if("undefined"!=typeof document&&t&&!An(e,t,Cn)&&!Array.from(e.querySelectorAll(`style[${n}]`)).some(e=>e.textContent===t)){const r=document.createElement("style");r.setAttribute(n,""),r.textContent=t,e.appendChild(r)}},kn=e=>({status:"success",code:0,data:e,error:!1}),Ln=(e,t=null)=>({status:"error",code:1,data:t,error:!0,message:e}),Tn=class{database;version;dbName;stores;upgrade;constructor({dbName:e,version:t,stores:n,upgrade:r}){this.dbName=e,this.version=t||1,this.stores=n||[],this.upgrade=r}openDataBase=()=>new Promise((e,t)=>{if("undefined"==typeof indexedDB)return void t(Ln("indexedDB is not available"));const n=indexedDB.open(this.dbName,this.version);n.onsuccess=()=>{this.database=n.result,this.version=this.database.version,this.database.onversionchange=()=>{this.database?.close(),this.database=void 0},e(kn({db:this.database}))},n.onerror=()=>{if(n.error&&"VersionError"===n.error.name){const[,r]=(n.error.message||"").match(/\d+/g)||[];if(Number(r)>this.version)return this.version=Number(r),void this.refreshDatabase().then(e,t)}t(Ln("open database error",n.error))},n.onupgradeneeded=e=>{const t=n.result;this.database=t,this.version=t.version;for(const r of this.stores){const e=t.objectStoreNames.contains(r.name)?n.transaction?.objectStore(r.name):t.createObjectStore(r.name,r.options);for(const t of r.indexes||[])e&&!e.indexNames.contains(t.name)&&e.createIndex(t.name,t.keyPath,t.options)}this.upgrade?.(t,e,n.transaction)}});closeDataBase=()=>{this.database?.close(),this.database=void 0};refreshDatabase=()=>(this.closeDataBase(),this.openDataBase());deleteDatabase=({dbName:e}={})=>new Promise((t,n)=>{const r=indexedDB.deleteDatabase(e??this.dbName);r.onsuccess=()=>t(kn(null)),r.onerror=()=>n(Ln("delete database error",r.error))});getObjectStore=(e,t="readonly")=>{if(this.database)return this.database.transaction([e],t).objectStore(e)};run=(e,t,n,r,i)=>new Promise((o,a)=>{let s;try{const r=this.database?.transaction(e,t).objectStore(e);s=r&&n(r)}catch(l){return void a(Ln(`${r} error`,l))}if(!s)return void a(Ln(`${r} error`));const c=s;c.onsuccess=()=>o(kn(i(c))),c.onerror=()=>a(Ln(`${r} error`,c.error))});add=({storeName:e,data:t})=>this.run(e,"readwrite",e=>e.add(t),"add",()=>t);update=({storeName:e,data:t})=>this.run(e,"readwrite",e=>e.put(t),"update",()=>null);readByKey=({storeName:e,key:t})=>this.run(e,"readonly",e=>e.get(t),"read",e=>e.result);readAll=({storeName:e,query:t,count:n})=>this.run(e,"readonly",e=>e.getAll(t,n),"read all",e=>e.result);count=({storeName:e,query:t})=>this.run(e,"readonly",e=>e.count(t),"count",e=>e.result);readByCursor=({storeName:e,keyRange:t,direction:n})=>new Promise((r,i)=>{const o=(this.database?.transaction(e,"readonly").objectStore(e))?.openCursor(t,n),a=[];o?(o.onsuccess=()=>{const e=o.result;e?(a.push(e.value),e.continue()):r(kn(a))},o.onerror=()=>i(Ln("read cursor error",o.error))):i(Ln("read cursor error"))});delete=({storeName:e,key:t})=>this.run(e,"readwrite",e=>e.delete(t),"delete",()=>null);clear=({storeName:e})=>this.run(e,"readwrite",e=>e.clear(),"clear",()=>null);collection=e=>{const t=(e,t)=>e.then(e=>e.data??t).catch(()=>t),n=e=>e.then(()=>!0).catch(()=>!1);return{name:e,get:t=>this.readByKey({storeName:e,key:t}).then(e=>e.data??null).catch(()=>null),all:()=>t(this.readByCursor({storeName:e}),[]),count:()=>t(this.count({storeName:e}),0),add:t=>n(this.add({storeName:e,data:t})),put:t=>n(this.update({storeName:e,data:t})),remove:t=>n(this.delete({storeName:e,key:t})),clear:()=>n(this.clear({storeName:e}))}}},Bn=({dbName:e,storeName:t="files",key:n="pending"})=>{const r=()=>new Promise(n=>{if("undefined"==typeof indexedDB)return void n(null);let r;try{r=indexedDB.open(e,1)}catch{return void n(null)}r.onupgradeneeded=()=>{r.result.objectStoreNames.contains(t)||r.result.createObjectStore(t)},r.onerror=()=>n(null),r.onblocked=()=>n(null),r.onsuccess=()=>n(r.result)});return{put:async e=>{const i=await r();return!!i&&new Promise(r=>{try{const o=i.transaction(t,"readwrite");o.objectStore(t).put(e,n),o.oncomplete=()=>{i.close(),r(!0)},o.onerror=o.onabort=()=>{i.close(),r(!1)}}catch{i.close(),r(!1)}})},take:async()=>{const e=await r();return e?new Promise(r=>{try{const i=e.transaction(t,"readwrite"),o=i.objectStore(t),a=o.get(n);let s=null;a.onsuccess=()=>{s=a.result??null,null!==s&&o.delete(n)},i.oncomplete=()=>{e.close(),r(s)},i.onerror=i.onabort=()=>{e.close(),r(null)}}catch{e.close(),r(null)}}):null}}},Fn=e=>{const t=Array.from({length:e.length});let n=0;for(let r=0;r<e.length;r++)t[r]=n,n+=e[r]||0;return t},xn=(e,t)=>{if(0===e.length)return 0;let n=0,r=e.length-1,i=0;for(;n<=r;){const o=n+r>>1;e[o]<=t?(i=o,n=o+1):r=o-1}return i},Rn=(e,t,n)=>{const r=t+e.length,i=n.map(e=>({value:e.value,s:Math.max(e.start,t)-t,e:Math.min(e.end,r)-t})).filter(e=>e.e>e.s).sort((e,t)=>e.s-t.s||e.e-t.e),o=[],a=(n,r,i)=>{o.push({text:e.slice(n,r),start:t+n,end:t+r,value:i})};let s=0;for(const c of i){let e=c.s;if(e<s){if(c.e<=s)continue;e=s}e>s&&a(s,e,null),a(e,c.e,c.value),s=c.e}return s<e.length&&a(s,e.length,null),0===o.length&&a(0,e.length,null),o},Pn=(()=>{const e=/* @__PURE__ */new Uint8Array(128);for(let t=0;t<78;t++)e["abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_-.,!?;:'\"()[]{}".charCodeAt(t)]=1;return e})(),Dn=e=>e<128&&1===Pn[e],Hn={pages:[],charsPerLine:0,linesPerPage:0,charsPerPage:0},In=(e,t,n,r={})=>{const i=e.replace(/(?:\r\n|\r|\n)+/g,"\n")||"",o=i.length,a=r.minBox??30,{charWidth:s,lineHeight:c}=n,l=n.narrowRatio??.5625;if(t.width<a||t.height<a||s<=0||c<=0)return{...Hn,total:o};const u=Math.floor(t.width/s),d=Math.floor(t.height/c),h=u*d;if(u<=0||d<=0)return{...Hn,total:o};const p=e=>{let t=e,n=e;for(;t<o;){const e=i.charCodeAt(t);if(Dn(e))t++;else{if(32===e){n=t,t++;break}t++}}return n},f=e=>{let t=e,n=e;for(;t>0;){const e=i.charCodeAt(t-1);if(Dn(e))n=t-1,t--;else{if(32===e)break;t--}}return n},m=[];let g=0;for(;o>g;){let e=0,t=0;const n=g;let r=h;for(;e<d&&t<h&&g<o;){const n=i.charCodeAt(g);if(10===n||13===n){e++,t=0,g++,r--;continue}const o=Dn(n);if(t>=u){if(o){const n=f(g);if(p(g)-n>u){e++,t=0;continue}}e++,t=0}else g++,t+=o?l:1,r--}if(g<o&&Dn(i.charCodeAt(g))){const e=f(g);p(g)-e>r&&e>n&&(g=e)}if(g===n)break;m.push({text:i.slice(n,g),start:n,end:g,index:m.length})}return{pages:m,total:o,charsPerLine:u,linesPerPage:d,charsPerPage:h}},jn=e=>{const t=e.search(/[?#]/);return-1===t?[e,""]:[e.slice(0,t),e.slice(t)]},Nn=e=>{const t=e.locales.length>0?e.locales:[{code:"en"}],n=(e=>{const t=(e=>{let t=e.length;for(;t>0&&"/"===e[t-1];)t--;return e.slice(0,t)})(e.trim());return t?t.startsWith("/")?t:`/${t}`:""})(e.base??""),r=e.defaultLocale??(t.find(e=>!e.prefix)??t[0]).code,i=t.filter(e=>e.prefix).sort((e,t)=>t.prefix.length-e.prefix.length),o=e=>{const t=e||"/";return n?t===n?"/":t.startsWith(`${n}/`)?t.slice(n.length):t.startsWith("/")?t:`/${t}`:t.startsWith("/")?t:`/${t}`},a=e=>{const t=e.split("/").filter(Boolean)[0],n=t?i.find(e=>e.prefix===t):void 0;if(!n)return{code:r,rest:e};const o=e.slice(n.prefix.length+1)||"/";return{code:n.code,rest:o.startsWith("/")?o:`/${o}`}},s=(e,i=r)=>{const[s,c]=jn(e),{rest:l}=a(o(s)),{prefix:u}=(e=>t.find(t=>t.code===e)??{code:r})(i);return`${n}${u?`/${u}${l}`:l}${c}`||"/"};return{base:n,defaultLocale:r,localeFromPath:e=>a(o(jn(e)[0])).code,stripLocale:e=>{const[t,r]=jn(e);return`${n}${a(o(t)).rest}${r}`},href:s,hrefForLocale:(e,t)=>s(e,t),alternates:e=>t.map(t=>({code:t.code,href:s(e,t.code)}))}},zn=(e,t,n,r)=>"end"===e?t+n-r:"center"===e?t+(n-r)/2:t,Kn=e=>{const{anchor:t,floating:n,offset:r=0,padding:i=8}=e,o=e.boundary??{top:0,left:0,width:"undefined"!=typeof window?window.innerWidth:1/0,height:"undefined"!=typeof window?window.innerHeight:1/0},[a,s]=e.placement.split("-"),c=s??"start";let l=a;const u="top"===l||"bottom"===l,d=t.width>0&&t.height>0&&n.width>0&&n.height>0;if(d&&u){const e=o.top+o.height-(t.top+t.height),i=t.top-o.top;"bottom"===l&&e<n.height+r&&i>e?l="top":"top"===l&&i<n.height+r&&e>i&&(l="bottom")}else if(d){const e=o.left+o.width-(t.left+t.width),i=t.left-o.left;"right"===l&&e<n.width+r&&i>e?l="left":"left"===l&&i<n.width+r&&e>i&&(l="right")}const h=(e,t,n)=>zn(c,e,t,n);let p,f;if("bottom"===l?(p=t.top+t.height+r,f=h(t.left,t.width,n.width)):"top"===l?(p=t.top-n.height-r,f=h(t.left,t.width,n.width)):"right"===l?(p=h(t.top,t.height,n.height),f=t.left+t.width+r):(p=h(t.top,t.height,n.height),f=t.left-n.width-r),d&&u){const e=o.left+i,t=o.left+o.width-n.width-i;t>=e&&(f=Math.min(Math.max(f,e),t))}else if(d){const e=o.top+i,t=o.top+o.height-n.height-i;t>=e&&(p=Math.min(Math.max(p,e),t))}return{top:p,left:f,placement:s?`${l}-${c}`:l,side:l,align:c}},Wn=(e,t,n)=>new Promise((r,i)=>{if("undefined"==typeof FileReader)return void i(/* @__PURE__ */new Error("FileReader is not available"));const o=new FileReader;o.onload=()=>r(o.result),o.onerror=()=>i(o.error??/* @__PURE__ */new Error("read file error")),o.onabort=()=>i(/* @__PURE__ */new Error("read file aborted")),"arrayBuffer"===t?o.readAsArrayBuffer(e):"text"===t?o.readAsText(e,n):"dataURL"===t?o.readAsDataURL(e):o.readAsBinaryString(e)}),Vn=e=>Wn(e,"arrayBuffer"),_n=async e=>new Uint8Array(await Vn(e)),qn=(e,t)=>Wn(e,"text",t),$n=e=>Wn(e,"dataURL"),Xn=e=>{const t=e instanceof Uint8Array?e:new Uint8Array(e);let n="";for(let r=0;r<t.length;r+=32768)n+=String.fromCharCode.apply(null,Array.from(t.subarray(r,r+32768)));return btoa(n)},Yn=e=>{const t=e.startsWith("data:")?e.slice(e.indexOf(",")+1):e,n=atob(t),r=new Uint8Array(n.length);for(let i=0;i<n.length;i++)r[i]=n.charCodeAt(i);return r},Gn=e=>Xn(e).replace(/\+/g,"-").replace(/\//g,"_").replace(/=+$/,""),Jn=e=>{try{const t=e.replace(/-/g,"+").replace(/_/g,"/"),n=t.padEnd(4*Math.ceil(t.length/4),"=");return Yn(n)}catch{return null}},Qn=e=>{let t=0;for(const i of e)t+=i.length;const n=new Uint8Array(t);let r=0;for(const i of e)n.set(i,r),r+=i.length;return n},Zn=e=>e.length>=2&&31===e[0]&&139===e[1],er=e=>e.length>=4&&80===e[0]&&75===e[1]&&3===e[2]&&4===e[3],tr=e=>{if(e.length<8||er(e))return!1;const t=239===e[0]&&187===e[1]&&191===e[2]?3:0,n=new TextDecoder("latin1").decode(e.subarray(t,t+2048)).replace(/^\s+/,"");return/^<(!doctype\s+html|html|head|body|table|meta|\?xml[^>]*>\s*<html)/i.test(n)},nr=async e=>{if(!Zn(e))return e;if("undefined"==typeof DecompressionStream)throw new Error("DecompressionStream is not available in this runtime");const t=new Response(e).body.pipeThrough(new DecompressionStream("gzip"));return new Uint8Array(await new Response(t).arrayBuffer())},rr=async(e,t)=>{const n=await fetch(e,t);if(!n.ok)throw new Error(`Failed to fetch '${String(e)}' (${n.status} ${n.statusText})`);return nr(new Uint8Array(await n.arrayBuffer()))},ir=(e,t=["utf-8","gb18030","latin1"])=>{if(e.length>=3&&239===e[0]&&187===e[1]&&191===e[2])return new TextDecoder("utf-8").decode(e.subarray(3));for(let n=0;n<t.length;n++){const r=n===t.length-1;try{return new TextDecoder(t[n],{fatal:!r}).decode(e)}catch{}}return new TextDecoder("latin1").decode(e)},or=async(e,t,n={})=>{const r=e instanceof Blob?e:new Blob([e],{type:n.mimeType}),i=globalThis.showSaveFilePicker;if("function"==typeof i){const e=t.includes(".")?`.${t.split(".").pop()}`:"";try{const o=await(await i({suggestedName:t,types:[{description:n.description||"File",accept:{[n.mimeType||r.type||"application/octet-stream"]:e?[e]:[]}}]})).createWritable();return await o.write(r),await o.close(),!0}catch(o){if("AbortError"===o?.name)return!1}}return ar(r,t)},ar=(e,t)=>{const n=URL.createObjectURL(e),r=document.createElement("a");return r.href=n,r.download=t,r.style.display="none",document.body.appendChild(r),r.click(),setTimeout(()=>{r.remove(),URL.revokeObjectURL(n)},100),!0},sr=()=>{const e=globalThis.crypto;if(!e?.getRandomValues)throw new Error("ranuts/secure: Web Crypto is unavailable (needs a browser, Node >= 19, Deno or a Worker)");return e},cr=(e,t)=>{const n=new TextEncoder,r="string"==typeof e?n.encode(e):e,i="string"==typeof t?n.encode(t):t;if(r.length!==i.length)return!1;let o=0;for(let a=0;a<r.length;a++)o|=r[a]^i[a];return 0===o},lr="ABCDEFGHJKLMNPQRSTUVWXYZ23456789",ur=(e,t=lr)=>{if(!Number.isInteger(e)||e<0)throw new RangeError("secureRandomString: length must be a whole number");if(t.length<2)throw new RangeError("secureRandomString: alphabet needs at least two characters");if(t.length>256)throw new RangeError("secureRandomString: alphabet must fit in one byte");if(0===e)return"";const n=sr(),r=Math.floor(256/t.length)*t.length;let i="";const o=new Uint8Array(Math.min(Math.max(e,16),4096));let a=o.length;for(;i.length<e;){a>=o.length&&(n.getRandomValues(o),a=0);const e=o[a++];e<r&&(i+=t[e%t.length])}return i},dr=(e=32)=>{if(!Number.isInteger(e)||e<1)throw new RangeError("secureToken: bytes must be a positive whole number");const t=new Uint8Array(e);return sr().getRandomValues(t),Array.from(t,e=>e.toString(16).padStart(2,"0")).join("")},hr=class{worker=null;nextOperationId=1;pending=/* @__PURE__ */new Map;options;constructor(e){this.options=e}get active(){return null!==this.worker}get pendingCount(){return this.pending.size}send=(e,t,n)=>{const r=this.nextOperationId++;return new Promise((i,o)=>{const a={resolve:i,reject:o,onProgress:t};this.options.timeout&&(a.timer=setTimeout(()=>{this.pending.delete(r),o(/* @__PURE__ */new Error(`worker request timed out after ${this.options.timeout}ms`))},this.options.timeout)),this.pending.set(r,a);try{this.getWorker().postMessage({...e,operationId:r},n??[])}catch(s){this.settle(r),o(s instanceof Error?s:new Error(String(s)))}})};dispose=()=>{this.worker?.terminate(),this.worker=null,this.rejectAll(/* @__PURE__ */new Error("worker disposed"))};getWorker=()=>(this.worker||(this.worker=this.options.create(),this.worker.onmessage=e=>this.handleMessage(e.data),this.worker.onerror=e=>this.rejectAll(new Error(e.message||"worker crashed"))),this.worker);settle=e=>{const t=this.pending.get(e);return t?.timer&&clearTimeout(t.timer),this.pending.delete(e),t};handleMessage=e=>{const t=this.pending.get(e.operationId);if(!t)return;const{isProgress:n,getProgress:r,isError:i,getErrorMessage:o}=this.options;if(n?n(e):"progress"===e.type){const n=r?r(e):e.progress;return void t.onProgress?.(n)}if(this.settle(e.operationId),i?i(e):"error"===e.type){const n=o?o(e):e.message;t.reject(new Error(n||"worker error"))}else t.resolve(e)};rejectAll=e=>{for(const[t,n]of this.pending)n.timer&&clearTimeout(n.timer),n.reject(e),this.pending.delete(t)}},pr=(e,t={})=>{const n=t.scope??globalThis;if(!n||"function"!=typeof n.addEventListener)return()=>{};const r=t.resultType??"result",i=t=>{const i=t.data;if(!i||"number"!=typeof i.operationId)return;const{operationId:o}=i,a=e=>n.postMessage({...e,operationId:o}),s={progress:e=>a({type:"progress",progress:e})};Promise.resolve().then(()=>e(i,s)).then(e=>a("object"==typeof e&&null!==e?e:{type:r,result:e}),e=>a({type:"error",message:e instanceof Error?e.message:String(e)}))};return n.addEventListener("message",i),()=>n.removeEventListener("message",i)},fr=()=>"undefined"!=typeof window,mr=(e,t={})=>{const{timeout:n=8e3,fallbackDelay:r=2500}=t;if(!fr())return()=>{};const i=window.requestIdleCallback;if(i){const t=i(e,{timeout:n});return()=>window.cancelIdleCallback?.(t)}const o=setTimeout(e,r);return()=>clearTimeout(o)},gr=(e={})=>{const{optOutKey:t,slowTypes:n=["slow-2g","2g"]}=e;if(!fr())return!1;if(t)try{if(localStorage.getItem(t))return!1}catch{}const r=navigator.connection;return!r?.saveData&&(!r?.effectiveType||!n.includes(r.effectiveType))},wr=async e=>{if("undefined"==typeof caches)return!1;try{return Boolean(await caches.match(e))}catch{return!1}},yr=async e=>{try{if(await wr(e))return;await fetch(e,{cache:"force-cache"})}catch{}},br=async(e,t={})=>{if(!(0===e.length||t.serviceWorkerMessage&&((e,t)=>{try{const n="undefined"!=typeof navigator&&"serviceWorker"in navigator?navigator.serviceWorker.controller:null;return!!n&&(n.postMessage({type:t,urls:e}),!0)}catch{return!1}})(e,t.serviceWorkerMessage)))for(const n of e)await yr(n)},Sr=(e,t={})=>gr(t)?mr(()=>{br(e,t)},t):()=>{},vr=()=>{let e,t;return{promise:new Promise((n,r)=>{e=n,t=r}),resolve:e,reject:t}},Cr=class extends Error{constructor(e){super(e),this.name="TimeoutError"}},Ur=(e,t,n={})=>{const{message:r=`operation timed out after ${t}ms`,onTimeout:i}=n;return new Promise((n,o)=>{const a=setTimeout(()=>{i?.(),o(new Cr(r))},t);e.then(e=>{clearTimeout(a),n(e)},e=>{clearTimeout(a),o(e)})})},Er=(e,t,n,r)=>new Promise((i,o)=>{const a=setTimeout(()=>{r?.(),i(n)},t);e.then(e=>{clearTimeout(a),i(e)},e=>{clearTimeout(a),o(e)})}),Ar=e=>new Promise(t=>setTimeout(t,e)),Or=()=>{let e=0;return{start:()=>++e,isCurrent:t=>t===e}},Mr=67324752,kr=33639248,Lr=101010256,Tr=30,Br=46,Fr=0,xr=8,Rr=(e,t)=>e[t]|e[t+1]<<8,Pr=(e,t)=>(e[t]|e[t+1]<<8|e[t+2]<<16|e[t+3]<<24)>>>0,Dr=/* @__PURE__ */(()=>{const e=/* @__PURE__ */new Uint32Array(256);for(let t=0;t<256;t++){let n=t;for(let e=0;e<8;e++)n=1&n?3988292384^n>>>1:n>>>1;e[t]=n}return e})(),Hr=e=>{let t=4294967295;for(let n=0;n<e.length;n++)t=(Dr[255&(t^e[n])]??0)^t>>>8;return(4294967295^t)>>>0},Ir=async e=>{if("undefined"==typeof DecompressionStream)throw new Error("DecompressionStream is not available in this runtime");const t=new DecompressionStream("deflate-raw"),n=t.writable.getWriter(),r=t.readable.getReader();n.write(e),n.close();const i=[];for(;;){const{done:e,value:t}=await r.read();if(e)break;t&&i.push(t)}return jr(i)},jr=e=>{let t=0;for(const i of e)t+=i.length;const n=new Uint8Array(t);let r=0;for(const i of e)n.set(i,r),r+=i.length;return n},Nr=e=>{const t=(e=>{const t=Math.max(0,e.length-65558);for(let n=e.length-22;n>=t;n--)if(Pr(e,n)===Lr)return n;return-1})(e);if(-1===t)return[];const n=Rr(e,t+10),r=[];let i=Pr(e,t+16);for(let o=0;o<n&&!(i+Br>e.length)&&Pr(e,i)===kr;o++){const t=Rr(e,i+10),n=Rr(e,i+12),o=Rr(e,i+14),a=Pr(e,i+16),s=Pr(e,i+20),c=Pr(e,i+24),l=Rr(e,i+28),u=Rr(e,i+30),d=Rr(e,i+32),h=Pr(e,i+42),p=e.slice(i+Br,i+Br+l),f=new TextDecoder("utf-8",{fatal:!1}).decode(p),m=h+Tr<=e.length,g=m?Rr(e,h+26):0,w=m?Rr(e,h+28):0,y=i;i+=Br+l+u+d,r.push({name:f,compression:t,crc:a,compressedSize:s,uncompressedSize:c,modTime:n,modDate:o,directory:f.endsWith("/"),dataStart:h+Tr+g+w,nameBytes:p,localOffset:h,centralStart:y,centralEnd:i})}return r},zr=(e,t)=>Nr(e).some(e=>e.name===t),Kr=async(e,t)=>{const n="string"==typeof t?Nr(e).find(e=>e.name===t):t;if(!n||n.directory)return null;if(n.dataStart+n.compressedSize>e.length)return null;const r=e.slice(n.dataStart,n.dataStart+n.compressedSize);if(0===n.compression)return r;if(8!==n.compression)return null;try{return await Ir(r)}catch{return null}},Wr=(e,t,n,r=0,i=0)=>{const o=new Uint8Array(Tr+e.length),a=new DataView(o.buffer);return a.setUint32(0,Mr,!0),a.setUint16(4,20,!0),a.setUint16(6,0,!0),a.setUint16(8,0,!0),a.setUint16(10,r,!0),a.setUint16(12,i,!0),a.setUint32(14,n,!0),a.setUint32(18,t,!0),a.setUint32(22,t,!0),a.setUint16(26,e.length,!0),o.set(e,Tr),o},Vr=(e,t,n,r,i=0,o=0)=>{const a=new Uint8Array(Br+e.length),s=new DataView(a.buffer);return s.setUint32(0,kr,!0),s.setUint16(4,20,!0),s.setUint16(6,20,!0),s.setUint16(8,0,!0),s.setUint16(10,0,!0),s.setUint16(12,i,!0),s.setUint16(14,o,!0),s.setUint32(16,n,!0),s.setUint32(20,t,!0),s.setUint32(24,t,!0),s.setUint16(28,e.length,!0),s.setUint32(42,r,!0),a.set(e,Br),a},_r=e=>"string"==typeof e?(new TextEncoder).encode(e):e,qr=async(e,t={})=>{const{filter:n,transform:r,inject:i}=t,o=Nr(e);if(0===o.length)return e;const a=/* @__PURE__ */new Map;if(r)for(const g of o)if(!g.directory&&(!n||n(g)))try{const t=await Kr(e,g);if(!t)continue;const n=await r(t,g);if(null==n)continue;const i=_r(n);if(i.length===t.length&&i.every((e,n)=>e===t[n]))continue;a.set(g,i)}catch{}const s=(i??[]).map(({name:e,data:t})=>({nameBytes:(new TextEncoder).encode(e),data:_r(t)}));if(0===a.size&&0===s.length)return e;const c=[],l=[];let u=0;for(const g of o){l.push(u);const t=a.get(g);if(t){const e=Wr(g.nameBytes,t.length,Hr(t),g.modTime,g.modDate);c.push(e,t),u+=e.length+t.length;continue}const n=new Uint8Array(Tr+g.nameBytes.length),r=new DataView(n.buffer);r.setUint32(0,Mr,!0),r.setUint16(4,20,!0),r.setUint16(6,0,!0),r.setUint16(8,g.compression,!0),r.setUint16(10,g.modTime,!0),r.setUint16(12,g.modDate,!0),r.setUint32(14,g.crc,!0),r.setUint32(18,g.compressedSize,!0),r.setUint32(22,g.uncompressedSize,!0),r.setUint16(26,g.nameBytes.length,!0),n.set(g.nameBytes,Tr);const i=e.slice(g.dataStart,g.dataStart+g.compressedSize);c.push(n,i),u+=n.length+i.length}const d=[];for(const g of s){d.push(u);const e=Wr(g.nameBytes,g.data.length,Hr(g.data));c.push(e,g.data),u+=e.length+g.data.length}const h=u;for(let g=0;g<o.length;g++){const t=o[g],n=a.get(t);if(n){const e=Vr(t.nameBytes,n.length,Hr(n),l[g],t.modTime,t.modDate);c.push(e),u+=e.length;continue}const r=new Uint8Array(e.slice(t.centralStart,t.centralEnd)),i=new DataView(r.buffer);i.setUint16(8,-9&Rr(r,8),!0),i.setUint32(42,l[g],!0),c.push(r),u+=r.length}for(let g=0;g<s.length;g++){const e=s[g],t=Vr(e.nameBytes,e.data.length,Hr(e.data),d[g]);c.push(t),u+=t.length}const p=o.length+s.length,f=new Uint8Array(22),m=new DataView(f.buffer);return m.setUint32(0,Lr,!0),m.setUint16(8,p,!0),m.setUint16(10,p,!0),m.setUint32(12,u-h,!0),m.setUint32(16,h,!0),c.push(f),jr(c)},$r=e=>{const t=[],n=[];let r=0;for(const s of e){const e=(new TextEncoder).encode(s.name),i=_r(s.data),o=Hr(i),a=Wr(e,i.length,o);n.push(Vr(e,i.length,o,r)),t.push(a,i),r+=a.length+i.length}const i=r;for(const s of n)t.push(s),r+=s.length;const o=new Uint8Array(22),a=new DataView(o.buffer);return a.setUint32(0,Lr,!0),a.setUint16(8,e.length,!0),a.setUint16(10,e.length,!0),a.setUint32(12,r-i,!0),a.setUint32(16,i,!0),t.push(o),jr(t)};function Xr(){if("undefined"!=typeof window){const[e]=performance.getEntriesByType("navigation"),[t={},n={}]=performance.getEntriesByType("paint"),{startTime:r}=t,{startTime:i}=n,{domainLookupEnd:o,domainLookupStart:a,connectEnd:s,connectStart:c,secureConnectionStart:l,loadEventStart:u,domInteractive:d,domContentLoadedEventEnd:h,duration:p,responseStart:f,requestStart:m,responseEnd:g,fetchStart:w,transferSize:y,encodedBodySize:b,redirectEnd:S,redirectStart:v,redirectCount:C}=e;return{dnsSearch:o-a,tcpConnect:s-c,sslConnect:s-l,request:f-m,response:g-f,parseDomTree:d-g,resource:u-h,domReady:h-w,interactive:d-w,complete:u-w,httpHead:y-b,redirect:C,redirectTime:S-v,duration:p,fp:r,fcp:i}}}var Yr={},Gr=e=>{"string"==typeof e?Yr.url=e:Object.assign(Yr,e)},Jr=()=>Yr.url??"",Qr=({url:e,type:t="application/json; charset=UTF-8",payload:n={}})=>{const r=e||Jr();return!!r&&((({url:e="",type:t="application/json; charset=UTF-8",payload:n={}})=>{if("undefined"==typeof navigator||!navigator.sendBeacon||!e)return!1;const r=new Blob([JSON.stringify(n)],{type:t});return navigator.sendBeacon(e,r)})({url:r,type:t,payload:n})||(({url:e="",payload:t={}})=>{if("undefined"==typeof document||!e)return!1;const n=new Image;return n.width=1,n.height=1,n.src=`${e}?${re(t)}`,!0})({url:r,payload:n}))};function Zr(e={}){if("undefined"==typeof window)return{};const{width:t,height:n}=c();return{id:o(),path:window.location.href,time:Date.now(),referrer:document.referrer,ratio:`${t}x${n}`,userAgent:window.navigator.userAgent,...Yr.userIdCookie?{userId:s(Yr.userIdCookie)}:{},...e}}var ei=(e={})=>{if("undefined"==typeof window)return ne;const{requestHook:t=ne,responseHook:n=ne,errorHook:r=ne}=e;return se(window,"fetch",e=>{if("function"!=typeof e)return;const i=e;return(e,o)=>(t(e,o),i.apply(window,[e,o]).then(t=>(n(e,o,t),t)).catch(t=>{throw r(e,t),t}))})},ti=(e={})=>{if("undefined"==typeof window||"undefined"==typeof XMLHttpRequest)return ne;const t=XMLHttpRequest.prototype,{requestHook:n=ne,responseHook:r=ne,errorHook:i=ne}=e,o=se(t,"open",e=>{if("function"!=typeof e)return;const t=e;return function(...e){n(e),t.apply(this,e)}}),a=se(t,"send",e=>{if("function"!=typeof e)return;const t=e;return function(...e){this.addEventListener("loadend",()=>r(this),{once:!0}),this.addEventListener("error",()=>i(this),{once:!0}),t.apply(this,e)}});return()=>{a(),o()}};function ni(e,t=300){let n,r=0,i=null,o=null;const a=()=>{if(i=null,!o)return;const t=o,a=n;o=null,n=void 0,r=Date.now(),e.apply(a,t)},s=function(...e){const s=t-(Date.now()-r);n=this,o=e,s<=0?(null!==i&&(clearTimeout(i),i=null),a()):null===i&&(i=setTimeout(a,s))};return s.cancel=()=>{null!==i&&clearTimeout(i),i=null,o=null,n=void 0},s.pending=()=>null!==i,s}var ri={click:!0,error:!0,fetch:!0,xhr:!0,performance:!0,console:!1},ii=class{options;teardown=[];send=ne;constructor(e){this.options=e,Gr({url:e.url,userIdCookie:e.userIdCookie}),this.send=ni(e=>Qr(e),e.throttleMs??300)}get running(){return this.teardown.length>0}start=()=>{if(this.running)return this.stop;const e={...ri,...this.options.channels};return e.performance&&this.reportPerformance(),e.click&&this.teardown.push(this.reportClick()),e.error&&this.teardown.push(this.reportError()),e.fetch&&this.teardown.push(this.reportFetch()),e.xhr&&this.teardown.push(this.reportXhr()),e.console&&this.teardown.push(this.reportConsole()),this.stop};stop=()=>{const e=this.teardown.splice(0,this.teardown.length);for(const t of e)t()};event=(e,t)=>({payload:{...Zr(),data:t,type:e}});log=e=>{this.send({payload:{...Zr(),...e}})};reportPerformance=()=>{Qr({payload:{...Xr(),...Zr(),type:"performance"}})};reportClick=()=>((e=ne)=>{if("undefined"==typeof document)return ne;const t=t=>e(t);return document.addEventListener("click",t,!0),()=>document.removeEventListener("click",t,!0)})(e=>{const{pageX:t,pageY:n,screenX:r,screenY:i,type:o}=e;this.send(this.event("click",{pageX:t,pageY:n,screenX:r,screenY:i,type:o}))});reportError=()=>Qt((...e)=>this.send(this.event("error",{...e})));reportFetch=()=>ei({requestHook:(...e)=>this.send(this.event("fetchRequest",{...e})),responseHook:(...e)=>this.send(this.event("fetchResponse",{...e})),errorHook:(...e)=>this.send(this.event("fetchError",{...e}))});reportXhr=()=>ti({requestHook:(...e)=>this.send(this.event("xhrRequest",{...e})),responseHook:(...e)=>this.send(this.event("xhrResponse",{...e})),errorHook:(...e)=>this.send(this.event("xhrError",{...e}))});reportConsole=()=>Rt((...e)=>this.send(this.event("console",{...e})))},oi=/* @__PURE__ */new Map([[100,"Continue"],[101,"Switching Protocols"],[102,"Processing"],[103,"Early Hints"],[200,"OK"],[201,"Created"],[202,"Accepted"],[203,"Non-Authoritative Information"],[204,"No Content"],[205,"Reset Content"],[206,"Partial Content"],[207,"Multi-Status"],[208,"Already Reported"],[226,"IM Used"],[300,"Multiple Choices"],[301,"Moved Permanently"],[302,"Found"],[303,"See Other"],[304,"Not Modified"],[305,"Use Proxy"],[307,"Temporary Redirect"],[308,"Permanent Redirect"],[400,"Bad Request"],[401,"Unauthorized"],[402,"Payment Required"],[403,"Forbidden"],[404,"Not Found"],[405,"Method Not Allowed"],[406,"Not Acceptable"],[407,"Proxy Authentication Required"],[408,"Request Timeout"],[409,"Conflict"],[410,"Gone"],[411,"Length Required"],[412,"Precondition Failed"],[413,"Payload Too Large"],[414,"URI Too Long"],[415,"Unsupported Media Type"],[416,"Range Not Satisfiable"],[417,"Expectation Failed"],[418,"I'm a Teapot"],[421,"Misdirected Request"],[422,"Unprocessable Entity"],[423,"Locked"],[424,"Failed Dependency"],[425,"Too Early"],[426,"Upgrade Required"],[428,"Precondition Required"],[429,"Too Many Requests"],[431,"Request Header Fields Too Large"],[451,"Unavailable For Legal Reasons"],[500,"Internal Server Error"],[501,"Not Implemented"],[502,"Bad Gateway"],[503,"Service Unavailable"],[504,"Gateway Timeout"],[505,"HTTP Version Not Supported"],[506,"Variant Also Negotiates"],[507,"Insufficient Storage"],[508,"Loop Detected"],[509,"Bandwidth Limit Exceeded"],[510,"Not Extended"],[511,"Network Authentication Required"]]),ai={message:oi,code:function(e){const t=/* @__PURE__ */new Map;for(const[n,r]of e)t.set(r.toLowerCase(),n);return t}(oi),codes:function(e){const t=[];for(const[n,r]of e)t.push(n);return t}(oi),redirect:{300:!0,301:!0,302:!0,303:!0,305:!0,307:!0,308:!0},empty:{204:!0,205:!0,304:!0},retry:{502:!0,503:!0,504:!0}};function si(e){if(!ai.message.has(e))throw new Error("invalid status code: "+e);return ai.message.get(e)}function ci(e){if("number"==typeof e)return si(e);if("string"!=typeof e)throw new TypeError("code must be a number or string");const t=parseInt(e,10);return!isNaN(t)&&ai.codes.includes(t)?si(t):function(e){const t=e.toLowerCase();if(ai.code.has(t),!ai.code.has(t))throw new Error('invalid status message: "'+e+'"');return ai.code.get(t)}(e)}var li=class{running=0;executed=0;simultaneous;queue=[];idleWaiters=[];constructor({simultaneous:e=1}={}){this.simultaneous=Math.max(1,e)}get pending(){return this.queue.length}get idle(){return 0===this.queue.length&&0===this.running}add=e=>"function"!=typeof e?Promise.reject(/* @__PURE__ */new TypeError("QuestQueue.add expects a function")):new Promise((t,n)=>{this.queue.push({task:e,resolve:t,reject:n}),this.next()});allSettled=e=>Promise.allSettled(e.map(e=>this.add(e)));onIdle=()=>this.idle?Promise.resolve():new Promise(e=>this.idleWaiters.push(e));clear=()=>{const e=this.queue.splice(0,this.queue.length);for(const t of e)t.reject(/* @__PURE__ */new Error("QuestQueue cleared"));this.settleIdle()};next=()=>{for(;this.running<this.simultaneous&&this.queue.length>0;){const e=this.queue.shift();this.running++,Promise.resolve().then(e.task).then(e.resolve,e.reject).finally(()=>{this.running--,this.executed++,this.settleIdle(),this.next()})}};settleIdle=()=>{if(!this.idle)return;const e=this.idleWaiters.splice(0,this.idleWaiters.length);for(const t of e)t()}},ui=/* @__PURE__ */new Set,di=({type:e,content:t})=>new Promise((n,r)=>{const o=i(`${e}:${t}`);if(ui.has(o))return void n({success:!0});const a=document.createElement("script");if(a.onload=function(){ui.add(o),n({success:!0})},a.onerror=function(e){r({success:!1,error:e})},"content"===e)return a.textContent=t,document.body.append(a),ui.add(o),void n({success:!0});a.src=t,document.body.append(a)}),hi=(e,t,n)=>{const r=(e=Array.isArray(e)?e:[e]).map(e=>{let n;if(e.toLowerCase().endsWith(".css")){const t=document.createElement("link");t.type="text/css",t.rel="stylesheet",t.href=e,n=t}else n=document.createElement("script"),n.type="text/javascript",n.src=e;const r=document.getElementsByTagName("body")[0];return(t||r).appendChild(n),new Promise(e=>{n.onload=()=>{e()}})});return new Promise(e=>{Promise.all(r).then(()=>{n&&n(),e()})})};export{or as $,Rt as $t,wr as A,b as An,nn as At,ur as B,E as Bn,Jt as Bt,zr as C,Q as Cn,hn as Ct,Ar as D,I as Dn,dn as Dt,vr as E,J as En,fn as Et,mr as F,k as Fn,an as Ft,Gn as G,y as Gn,Nt as Gt,Yn as H,m as Hn,Yt as Ht,hr as I,F as In,Zt as It,rr as J,Vt as Jt,Qn as K,p as Kn,Ht as Kt,pr as L,w as Ln,en as Lt,yr as M,B as Mn,tn as Mt,br as N,P as Nn,rn as Nt,Ur as O,H as On,pn as Ot,Sr as P,L as Pn,on as Pt,er as Q,Pt as Qt,lr as R,C as Rn,Qt as Rt,qr as S,V as Sn,wn as St,Or as T,G as Tn,un as Tt,Jn as U,T as Un,qt as Ut,dr as V,f as Vn,$t as Vt,Xn as W,x as Wn,Gt as Wt,Zn as X,zt as Xt,nr as Y,Wt as Yt,tr as Z,Kt as Zt,Hr as _,z as _n,Sn as _t,ai as a,de as an,Kn as at,Nr as b,K as bn,yn as bt,ei as c,ue as cn,Fn as ct,Jr as d,re as dn,Tn as dt,Ft as en,Vn as et,Qr as f,se as fn,Bn as ft,Fr as g,te as gn,On as gt,xr as h,Z as hn,Mn as ht,ci as i,be as in,zn as it,gr as j,M as jn,sn as jt,Er as k,g as kn,cn as kt,ti as l,ae as ln,xn as lt,Xr as m,ee as mn,Un as mt,hi as n,ve as nn,qn as nt,ii as o,oe as on,Nn as ot,Gr as p,ne as pn,En as pt,ir as q,d as qn,It as qt,li as r,Se as rn,_n as rt,ni as s,ie as sn,In as st,di as t,Bt as tn,$n as tt,Zr as u,ce as un,Rn as ut,$r as v,_ as vn,gn as vt,Cr as w,q as wn,ln as wt,Kr as x,X as xn,bn as xt,Ir as y,$ as yn,mn as yt,cr as z,O as zn,_t as zt};
package/docs/API.md CHANGED
@@ -8,16 +8,18 @@ constraints, conventions) read [../CLAUDE.md](../CLAUDE.md) first.
8
8
  Import from the **subpath** that owns the symbol, e.g. `import { debounce } from
9
9
  'ranuts/utils'`. The root `ranuts` barrel re-exports the utils + visual surface.
10
10
 
11
- **413 exports** across 6 entry points. Generated at 2026-08-18T13:16:54.528Z.
11
+ **454 exports** across 8 entry points.
12
12
 
13
13
  ## Entry points
14
14
 
15
- - [`ranuts/utils`](#ranuts-utils) — Browser and general-purpose utilities · _browser + node_ · 327 exports
15
+ - [`ranuts/utils`](#ranuts-utils) — Browser and general-purpose utilities · _browser + node_ · 339 exports
16
16
  - [`ranuts/sw`](#ranuts-sw) — Service Worker caching strategies and the precache protocol · _service worker only_ · 9 exports
17
17
  - [`ranuts/node`](#ranuts-node) — Node server utilities (fs / http / ws / middleware) · _node only_ · 26 exports
18
18
  - [`ranuts/visual`](#ranuts-visual) — 2D rendering engine (Canvas / WebGL / WebGPU) · _browser only_ · 16 exports
19
19
  - [`ranuts/i18n`](#ranuts-i18n) — Framework-agnostic i18n engine (also re-exported from ranuts/utils) · _browser + node_ · 9 exports
20
20
  - [`ranuts/vnode`](#ranuts-vnode) — Snabbdom-style virtual DOM · _browser_ · 26 exports
21
+ - [`ranuts/stream`](#ranuts-stream) — SSE parsing, a provider-neutral model-stream fold, and the token budget that decides when a history stops fitting · _browser + node_ · 20 exports
22
+ - [`ranuts/conversation`](#ranuts-conversation) — Project an append-only event log into renderable conversation nodes · _browser + node_ · 9 exports
21
23
 
22
24
  ## `ranuts/utils`
23
25
 
@@ -34,6 +36,7 @@ import { /* … */ } from 'ranuts/utils';
34
36
  - `addNumSym(value: string | number, flag?: string | number) => string`
35
37
  - `adoptSheetText(shadowRoot: ShadowRoot, cssText: string, marker?: string) => void` — Inject dynamic styles supplied at runtime (a component's `sheet` property, say).
36
38
  - `adoptStyles(shadowRoot: ShadowRoot, cssText: string, marker?: string) => void` — Inject a component's static styles into a shadow root.
39
+ - `alignCrossAxis(align: PlacementAlign, anchorStart: number, anchorSize: number, floatingSize: number) => number` — Where a floating panel starts along the cross axis, given how
37
40
  - `appendUrl(url: string, params?: Record<string, string>) => string` — Turn an object into a query string and append it to a URL
38
41
  - `arrayBufferToString(buffer: ArrayBuffer | Uint8Array) => string` — Decode bytes into a string using the sniffed encoding. Required when reading
39
42
  - `autosizeTextarea(element: HTMLTextAreaElement) => (() => void)` — Make a `<textarea>` grow and shrink with its content, so a long message is
@@ -60,6 +63,7 @@ import { /* … */ } from 'ranuts/utils';
60
63
  - `cosinePalette(t: number, a: RGB, b: RGB, c: RGB, d: RGB) => RGB` — Inigo Quilez cosine gradient palette: `a + b * cos(2π(c·t + d))`. Each of `a,b,c,d` is an RGB triple; `t` is the position 0..1. Returns an RGB triple.
61
64
  - `crc32(data: Uint8Array) => number` — CRC32 checksum (IEEE 802.3 polynomial), the one ZIP stores per entry.
62
65
  - `create(tagName: string, options?: ElementCreationOptions) => Chain`
66
+ - `createBottomFollower(options: BottomFollowerOptions) => BottomFollower` — Creates a bottom-follow controller for one scrollport.
63
67
  - `createData(params?: Record<string, unknown>) => Record<string, unknown>` — Build the standard envelope that accompanies a report — page URL, referrer,
64
68
  - `createDocumentFragment(list: Element[]) => DocumentFragment | undefined` — Create a DocumentFragment
65
69
  - `createDoubleTapDetector(options?: DoubleTapDetectorOptions) => DoubleTapDetector` — Double-tap detection over raw `(x, y, time)` samples — pointer-type-agnostic,
@@ -81,6 +85,7 @@ import { /* … */ } from 'ranuts/utils';
81
85
  - `deferred<T = void>() => Deferred<T>` — A promise plus its `resolve` / `reject`, for the case where the thing that
82
86
  - `delay(ms: number) => Promise<void>` — Resolve after `ms` milliseconds. Uses the bare `setTimeout`, so it works in
83
87
  - `detectLanguage(text: string, sampleSize?: number) => TextLanguage` — Decide a text's primary language from the ratio of CJK to Latin characters.
88
+ - `diffLines(oldText: string, newText: string, options?: DiffOptions) => DiffHunk[]` — Diffs two texts by line.
84
89
  - `durationHandler<T, U>(handler: (...args: T[]) => U, ...params: T[]) => ((a: number) => Promise<U>)` — Run a function repeatedly at a fixed interval
85
90
  - `encodeUrl(url: string) => string` — Encode a URL to a percent-encoded form, excluding already-encoded sequences.
86
91
  - `escapeHtml(string?: string | number | null) => string`
@@ -89,6 +94,7 @@ import { /* … */ } from 'ranuts/utils';
89
94
  - `fetchMaybeGzip(input: RequestInfo | URL, init?: RequestInit) => Promise<Uint8Array>` — Fetch a resource that may be delivered gzipped or already
90
95
  - `filterObj(obj: Record<string, unknown>, list: Array<string>) => Record<string, unknown>` — Return a new object without the properties whose values appear in `list` — typically used to drop empty strings and nulls
91
96
  - `fit(value: number, a1: number, a2: number, b1: number, b2: number) => number` — Remap `value` from `[a1, a2]` onto `[b1, b2]` and clamp to the output range — the shader `fit`.
97
+ - `formatBytes(bytes: number) => string` — Format a byte count for a person to read.
92
98
  - `formatDate(value?: DateInput, pattern?: string) => string` — Format a date with a token pattern. Accepts a timestamp, a date string, a
93
99
  - `formatDuration(seconds: number) => string` — Format an elapsed number of **seconds** as a colon-separated clock duration,
94
100
  - `formatJson(value: string | object, onError?: (error: Error) => void, indent?: number) => string` — Pretty-print JSON. Accepts an object or a JSON string (single quotes are
@@ -264,6 +270,8 @@ import { /* … */ } from 'ranuts/utils';
264
270
 
265
271
  - `interface AcceptPortBridgeOptions`
266
272
  - `interface BeaconPayload`
273
+ - `interface BottomFollower` — Imperative bottom-follow controller.
274
+ - `interface BottomFollowerOptions` — How to construct a follower.
267
275
  - `interface BridgeManagerOptions`
268
276
  - `interface BroadcastPayload`
269
277
  - `interface CallToPayload`
@@ -271,6 +279,9 @@ import { /* … */ } from 'ranuts/utils';
271
279
  - `interface ComputePlacementOptions`
272
280
  - `interface Debounced`
273
281
  - `interface Deferred` — Promise primitives that JavaScript does not ship: an externally settled promise and a
282
+ - `interface DiffHunk` — A run of changed lines plus the context around it.
283
+ - `interface DiffLine` — One line of a diff, carrying both line numbers so a gutter can show either side.
284
+ - `interface DiffOptions` — How to compute a diff.
274
285
  - `interface DoubleTapDetector`
275
286
  - `interface DoubleTapDetectorOptions`
276
287
  - `interface FormatRelativeOptions`
@@ -325,12 +336,15 @@ import { /* … */ } from 'ranuts/utils';
325
336
 
326
337
  - `type CurrentDevice`
327
338
  - `type DateInput` — Accepted everywhere a moment in time is taken; `undefined` means "now".
339
+ - `type DiffLineKind` — What happened to one line.
328
340
  - `type EasingFn` — One easing function: (elapsed, from, delta, duration) => current value
329
341
  - `type ImgSource` — A bitmap container usable both as a drawImage source and as a render target
330
342
  - `type LocaleChangeHandler`
331
343
  - `type LocaleMessages` — Locale → dictionary. Parameterised by the dictionary shape so an app can hand in its own
332
344
  - `type MessageDict`
333
- - `type Placement`
345
+ - `type Placement` — A side, optionally suffixed with a cross-axis alignment — the same grammar
346
+ - `type PlacementAlign` — Where the panel lines up along the cross axis: with the anchor's leading
347
+ - `type PlacementSide` — The side of the anchor a floating panel sits on.
334
348
  - `type RelativeStyle` — `'compact'` is ours; the other three are `Intl.RelativeTimeFormat` styles.
335
349
  - `type RGB` — An RGB triple with each channel in 0..1 (linear or sRGB depending on the operation).
336
350
  - `type SpeechErrorKind` — `denied` means the user or the browser refused the microphone — worth surfacing.
@@ -558,3 +572,66 @@ import { /* … */ } from 'ranuts/vnode';
558
572
 
559
573
  - `namespace is` — Type guards — array / string / primitive / VNode
560
574
 
575
+ ## `ranuts/stream`
576
+
577
+ SSE parsing, a provider-neutral model-stream fold, and the token budget that decides when a history stops fitting · runtime: **browser + node** · source: `src/stream/index.ts`
578
+
579
+ ```ts
580
+ import { /* … */ } from 'ranuts/stream';
581
+ ```
582
+
583
+ ### Functions
584
+
585
+ - `addUsage(total: TokenUsage | undefined, next: TokenUsage | undefined) => TokenUsage` — Adds two usage reports.
586
+ - `createStreamAccumulator() => StreamAccumulator` — Creates a fold over one streamed response.
587
+ - `estimateTokens(text: string) => number` — Estimates how many tokens a string costs.
588
+ - `mapEventStream(source: ByteSource, map: (event: ServerSentEvent) => readonly StreamChunk[]) => AsyncGenerator<StreamChunk>` — Maps SSE events onto StreamChunk values using a caller-supplied vendor mapping.
589
+ - `parseEventStream(source: ByteSource) => AsyncGenerator<ServerSentEvent>` — Parses a byte stream as `text/event-stream`.
590
+ - `planCompaction(sizes: readonly number[], limits: CompactionLimits) => CompactionPlan` — Decides how much of a history no longer fits.
591
+
592
+ ### Interfaces
593
+
594
+ - `interface CompactionLimits` — What a compaction has to fit under, and what it may not touch.
595
+ - `interface CompactionPlan` — What to do with a history that has grown.
596
+ - `interface ReasoningBlock` — Model reasoning, when the provider exposes it. Kept separate from TextBlock
597
+ - `interface ServerSentEvent` — One parsed `text/event-stream` event.
598
+ - `interface StreamAccumulator` — Stateful fold over one response's chunks.
599
+ - `interface StreamSnapshot` — Immutable view of everything received so far.
600
+ - `interface TextBlock` — Assistant prose addressed to the user.
601
+ - `interface TokenUsage` — Token counts reported for one response. Every field is optional: providers differ.
602
+ - `interface ToolCallBlock` — One tool invocation requested by the model.
603
+
604
+ ### Types
605
+
606
+ - `type ByteSource` — Anything `for await` can walk that yields byte chunks — a `fetch` body, or a fake.
607
+ - `type ContentBlock` — One completed unit of assistant output.
608
+ - `type ContentBlockType` — Discriminator for the content a block accumulates.
609
+ - `type FinishReason` — Why the response ended.
610
+ - `type StreamChunk` — One normalized event from a streamed response.
611
+
612
+ ## `ranuts/conversation`
613
+
614
+ Project an append-only event log into renderable conversation nodes · runtime: **browser + node** · source: `src/conversation/index.ts`
615
+
616
+ ```ts
617
+ import { /* … */ } from 'ranuts/conversation';
618
+ ```
619
+
620
+ ### Functions
621
+
622
+ - `createConversationEngine<Event>(options: ConversationEngineOptions<Event>) => ConversationEngine<Event>` — Creates an engine over a set of definitions.
623
+
624
+ ### Interfaces
625
+
626
+ - `interface ConversationEngine` — A running conversation projection.
627
+ - `interface ConversationEngineOptions` — How to construct an engine.
628
+ - `interface ConversationMatch` — A definition's claim on one event.
629
+ - `interface ConversationNode` — One live node, as a view sees it.
630
+ - `interface ConversationNodeDefinition` — One independently registered event-to-node state machine.
631
+ - `interface ConversationReader` — Strictly-backward lookup offered to a definition while it starts a node.
632
+
633
+ ### Types
634
+
635
+ - `type ConversationPublication` — When subscribers should see the result of one accepted event.
636
+ - `type FrameScheduler` — Defers work to the next paint, or to a microtask where there is no paint.
637
+
package/package.json CHANGED
@@ -1,8 +1,8 @@
1
1
  {
2
2
  "name": "ranuts",
3
- "version": "0.4.1-alpha.1",
3
+ "version": "0.4.1-alpha.2",
4
4
  "description": "Tree-shakeable TypeScript utility library: DOM/BOM helpers, string/object/number/color utils, debounce/throttle/compose, a 2D rendering engine and a virtual DOM.",
5
- "main": "dist/index.umd.cjs",
5
+ "main": "dist/umd/index.umd.cjs",
6
6
  "module": "dist/index.js",
7
7
  "type": "module",
8
8
  "types": "dist/index.d.ts",
@@ -40,6 +40,14 @@
40
40
  "./vnode": {
41
41
  "types": "./dist/src/vnode/index.d.ts",
42
42
  "import": "./dist/src/vnode/index.js"
43
+ },
44
+ "./stream": {
45
+ "types": "./dist/src/stream/index.d.ts",
46
+ "import": "./dist/src/stream/index.js"
47
+ },
48
+ "./conversation": {
49
+ "types": "./dist/src/conversation/index.d.ts",
50
+ "import": "./dist/src/conversation/index.js"
43
51
  }
44
52
  },
45
53
  "repository": {
@@ -108,6 +116,7 @@
108
116
  "tsc": "tsc --noEmit",
109
117
  "dev": "vite --host",
110
118
  "doc:api": "tsx ./bin/generate-api-docs.ts",
119
+ "doc:api:check": "tsx ./bin/generate-api-docs.ts --check",
111
120
  "prepublish": "npm run build"
112
121
  }
113
122
  }
@@ -1 +0,0 @@
1
- var e=(e,t=2)=>String(e).padStart(t,"0"),t=e=>null==e?/* @__PURE__ */new Date:new Date(e),n=/YYYY|YY|MM|M|DD|D|HH|H|hh|h|mm|m|ss|s|SSS|A|a|\[([^\]]*)]/g,r=(r,s="YYYY-MM-DD HH:mm:ss")=>{const a=t(r);if(Number.isNaN(a.getTime()))return"Invalid Date";const o=a.getHours(),i=o%12||12,c={YYYY:String(a.getFullYear()),YY:e(a.getFullYear()%100),MM:e(a.getMonth()+1),M:String(a.getMonth()+1),DD:e(a.getDate()),D:String(a.getDate()),HH:e(o),H:String(o),hh:e(i),h:String(i),mm:e(a.getMinutes()),m:String(a.getMinutes()),ss:e(a.getSeconds()),s:String(a.getSeconds()),SSS:e(a.getMilliseconds(),3),A:o<12?"AM":"PM",a:o<12?"am":"pm"};return s.replace(n,(e,t)=>void 0!==t?t:c[e])};function s(e){const t=e?new Date(e):/* @__PURE__ */new Date;return t.format=(e="YYYY-MM-DD HH:mm:ss")=>r(t,e),t}var a=t=>{if(!Number.isFinite(t))return"";const n=Math.max(0,Math.trunc(t)),r=Math.trunc(n/3600),s=Math.trunc(n%3600/60),a=e(n%60);return 0===r?`${e(s)}:${a}`:`${e(r)}:${e(s)}:${a}`},o=e=>a(e),i=/(?:(\d{2,}):)?(\d{2}):(\d{2})\.(\d{3})/,c=e=>{const t=e.trim().match(i);if(!t)return;const[,n,r,s,a]=t;return(n?3600*Number(n):0)+60*Number(r)+Number(s)+Number(a)/1e3},u=e=>{const[t,n]=e.split("--\x3e");if(!t||!n)return;const r=c(t),s=c(n.trim().split(/\s+/)[0]??"");return void 0!==r&&void 0!==s?{start:r,end:s}:void 0},l=[["year",315576e5],["month",26298e5],["week",6048e5],["day",864e5],["hour",36e5],["minute",6e4],["second",1e3]],d={year:"y",quarter:"q",month:"mo",week:"w",day:"d",hour:"h",minute:"m",second:"s"},f=/* @__PURE__ */new Map,h=(e,n={})=>{const{now:r,locale:s,style:a="long",numeric:o="auto"}=n,i=t(e).getTime(),c=t(r).getTime();if(Number.isNaN(i)||Number.isNaN(c))return"";const u=i-c,h=Math.abs(u);let g=l.findIndex(([,e])=>h>=e);-1===g&&(g=l.length-1);const m=u<0?-1:1;let[p,w]=l[g],y=m*Math.round(h/w);if(g>0&&Math.abs(y)*w>=l[g-1][1]&&([p,w]=l[g-1],y=m*Math.round(h/w)),"compact"===a)return`${Math.abs(y)}${d[p]??""}`;const _=((e,t,n)=>{if("undefined"==typeof Intl||"function"!=typeof Intl.RelativeTimeFormat)return;const r=`${String(e)}|${t}|${n}`;let s=f.get(r);return s||(s=new Intl.RelativeTimeFormat(e,{style:t,numeric:n}),f.set(r,s)),s})(s,a,o);if(!_){const e=d[p]??"";return y<0?`${Math.abs(y)}${e} ago`:`in ${y}${e}`}return _.format(y,p)},g=()=>{if("undefined"!=typeof document)return performance.now();if("undefined"!=typeof process){const[e,t]=process.hrtime();return 1e3*e+t/1e6}return Date.now()},m=e=>{const t=document.cookie.split("; ");for(let n=0;n<t.length;n++){const r=t[n].split("=");if(r[0]===e)return decodeURIComponent(r[1])}return""},p=(e,t)=>new Promise(function(n,r){const s=new XMLHttpRequest;s.open(t.method||"GET",e,!0),s.responseType=t.responseType||"arraybuffer",s.onload=function(){200===s.status?n({success:!0,data:s.response,message:""}):r({success:!1,data:s.status,message:`The request status is${s.status}`})},s.onerror=function(e){r({success:!1,data:e,message:""})},s.onprogress=e=>{t.onProgress&&t.onProgress(e)},s.withCredentials=t.withCredentials||!1,t.headers&&Object.keys(t.headers).forEach(function(e){t.headers?.[e]&&s.setRequestHeader(e,t.headers[e])}),s.send(t.body)}),w=e=>{const t=e.backingStorePixelRatio||e.webkitBackingStorePixelRatio||e.mozBackingStorePixelRatio||e.msBackingStorePixelRatio||e.oBackingStorePixelRatio||1;return(("undefined"==typeof window?1:window.devicePixelRatio)||1)/t},y=async e=>{if("string"==typeof e)return e;if(e instanceof Blob)return URL.createObjectURL(e);if(e instanceof ArrayBuffer)return URL.createObjectURL(new Blob([e]));if(e instanceof Response){const t=await e.blob();return URL.createObjectURL(t)}return e},_=(e=10)=>{const t=[];let n,r=0;return new Promise(s=>{const a=()=>{const o=g(),i=o-r;0!==r&&t.push(i),r=o,t.length>e&&(s(1/(t.reduce((e,t)=>e+t)/e)),cancelAnimationFrame(n)),n=requestAnimationFrame(a)};t.length<=e&&(n=requestAnimationFrame(a))})},b=e=>{const t={},n=(e=>{const t=e??("undefined"==typeof window?"":window.location.href),n=t.indexOf("?");if(-1===n)return"";const r=t.slice(n+1),s=r.indexOf("#");return-1===s?r:r.slice(0,s)})(e);if(!n)return t;for(const r of n.split("&")){if(!r)continue;const e=r.indexOf("="),n=-1===e?r:r.slice(0,e),s=-1===e?"":r.slice(e+1);if(n)try{t[decodeURIComponent(n.replace(/\+/g," "))]=decodeURIComponent(s.replace(/\+/g," "))}catch{t[n]=s}}return t},v=(e,t)=>{const n=b(t)[e];if(void 0===n)return!1;const r=n.toLowerCase();return""===r||"1"===r||"true"===r},M=()=>{if("undefined"==typeof window)return!1;try{return window.parent!==window}catch{return!0}};function S(e,t={}){let n=e;0===n.indexOf("//")&&(n=n.replace("//","https://"));const r=new URL(n);return t&&Object.keys(t).forEach(e=>{t[e]&&r.searchParams.set(e,t[e])}),r.href}function x(e){if("undefined"!=typeof window){const t=new RegExp(`(^| )${e}(?:=([^;]*))?(;|$)`).exec(document.cookie);if(t&&t[2])return t[2]}return""}var D=()=>"undefined"!=typeof window?{width:window.innerWidth,height:window.innerHeight}:{width:0,height:0},k=()=>{if("undefined"!=typeof window)return window.navigator.connection},$=/(?:[^\x21\x25\x26-\x3B\x3D\x3F-\x5B\x5D\x5F\x7E]|%(?:[^\da-f]|[\da-f][^\da-f]|$))+/gi,R=/(^|[^\uD800-\uDBFF])[\uDC00-\uDFFF]|[\uD800-\uDBFF]([^\uDC00-\uDFFF]|$)/g;function F(e){return String(e).replace(R,"$1�$2").replace($,encodeURI)}var Y=e=>new Promise((t,n)=>{const r=new Image,s=/* @__PURE__ */(new Date).getTime();r.src=e||`https://github.com/favicon.ico?d=${s}`,r.onload=()=>{t(/* @__PURE__ */(new Date).getTime()-s)},r.onerror=e=>{n(e)}}),N=(e,...t)=>n=>new Promise((r,s)=>{setTimeout(async()=>{try{r(await e(...t))}catch(n){s(n)}},n)}),O=async e=>{const{url:t,duration:n=3e3,count:r=5}=e;let s=0,a=0;const o=[];for(let i=0;i<r;i++){const e=await N(Y,t)(n);o.push(e)}return s=Math.max(...o)-Math.min(...o),a=o.reduce((e,t)=>e+t)/o.length,{ping:a,jitter:s}},L=()=>{if("undefined"!=typeof navigator)return navigator.vendor&&navigator.vendor.indexOf("Apple")>-1&&navigator.userAgent&&!navigator.userAgent.includes("CriOS")&&!navigator.userAgent.includes("FxiOS")},I=()=>{try{return"undefined"==typeof localStorage?null:localStorage}catch{return null}},P=(e,t)=>{try{I()?.setItem(e,t)}catch{}},C=e=>{try{return I()?.getItem(e)??""}catch{return""}},H=e=>{try{I()?.removeItem(e)}catch{}},A=(e="")=>{const t=t=>`${e}${t}`;return{keyOf:t,get:(e,n)=>{const r=C(t(e));if(!r)return n;try{return JSON.parse(r)}catch{return n}},set:(e,n)=>{let r;try{r=JSON.stringify(n)}catch{return!1}return P(t(e),r),C(t(e))===r},remove:e=>H(t(e))}},T=(e,t=2e4)=>{const n=e.slice(0,t);let r=0,s=0;for(const a of n){const e=a.codePointAt(0)??0;e>=19968&&e<=40959||e>=13312&&e<=19903?r++:(e>=65&&e<=90||e>=97&&e<=122)&&s++}return 0===r&&0===s?"other":r>=s?"zh":s>3*r?"en":"zh"},B=()=>{if("undefined"==typeof navigator)return"other";const e=(navigator.language||"").toLowerCase();return e.startsWith("zh")?"zh":e.startsWith("en")?"en":"other"},U=e=>{const{supported:t,query:n,cookie:r,storageKey:s,useNavigator:a=!0,url:o}=e,i=e.fallback??t[0]??"en";if(0===t.length)return i;const c=t.map(e=>e.toLowerCase()),u=e=>{if(!e)return;const n=e.trim().toLowerCase();if(!n)return;const r=c.indexOf(n);if(-1!==r)return t[r];const s=n.split("-")[0],a=c.findIndex(e=>e===s||e.split("-")[0]===s);return-1===a?void 0:t[a]},l=[];if(n&&l.push(b(o)[n]),r&&l.push(x(r)),s&&l.push(C(s)),a&&"undefined"!=typeof navigator){const{languages:e,language:t}=navigator;l.push(...e??[],t)}for(const d of l){const e=u(d);if(e)return e}return i},j=Object.freeze({}),q=class{_locale;_fallback;_messages;_persist;_storageKey;_handlers=/* @__PURE__ */new Set;constructor(e={}){this._messages={...e.messages},this._fallback=e.fallbackLocale??"en",this._persist=e.persist??!1,this._storageKey=e.storageKey??"ran-locale",this._locale=this._resolveInitialLocale(e)}_resolveInitialLocale(e){const t=Object.keys(this._messages),n=this._persist&&C(this._storageKey)||null;if(n&&(this._messages[n]||0===t.length))return n;if(e.locale)return e.locale;if(e.detectNavigator){const e=U({supported:t,useNavigator:!0,fallback:""});if(e)return e}return this._fallback}get locale(){return this._locale}getLocale(){return this._locale}setLocale(e){e!==this._locale&&(this._locale=e,this._persist&&P(this._storageKey,e),this._notify())}addMessages(e,t){this._messages[e]={...this._messages[e],...t}}getMessages(e=this._locale){return this._messages[e]??{}}get availableLocales(){return Object.keys(this._messages)}t(e,t){const n=this._messages[this._locale]?.[e]??this._messages[this._fallback]?.[e]??e;return this._interpolate(n,t)}_interpolate(e,t){const n=t??j;return e.replace(/\{\{|\}\}|\{(\w+)\}/g,(e,t)=>"{{"===e?"{":"}}"===e?"}":null!=n[t]?String(n[t]):e)}onChange(e){return this._handlers.add(e),()=>{this._handlers.delete(e)}}_notify(){for(const e of this._handlers)e(this._locale)}destroy(){this._handlers.clear()}},z=null;function E(e={}){const t=new q(e);return z=t,t}function K(){return z}export{h as A,M as C,p as D,v as E,s as F,c as M,g as N,r as O,o as P,Y as S,O as T,m as _,B as a,w as b,C as c,S as d,k as f,b as g,F as h,T as i,u as j,a as k,H as l,N as m,E as n,U as o,y as p,K as r,A as s,q as t,P as u,x as v,L as w,D as x,_ as y};