feat: add Tauri desktop chat app with React + TypeScript

This commit is contained in:
Evandro Fonseca Junior committed 2026-03-26 21:05:41 -03:00
1 parent d8c5697f39
commit ee3980436b
4132 files changed
+1163398

No files matched your search

+1
View File
@@ -0,0 +1 @@
.sidebar{width:260px;min-width:260px;background:var(--bg2);border-right:1px solid var(--border);display:flex;flex-direction:column;overflow:hidden}.sidebar-header{display:flex;align-items:center;padding:14px 14px 12px;border-bottom:1px solid var(--border);gap:8px}.sidebar-brand{display:flex;align-items:center;gap:8px;flex:1}.brand-icon{font-size:1.1rem}.brand-name{font-size:.95rem;font-weight:700;letter-spacing:-.01em}.icon-btn{background:none;border:none;color:var(--text2);cursor:pointer;font-size:1rem;padding:4px 6px;border-radius:var(--radius-sm);transition:background .15s,color .15s;line-height:1}.icon-btn:hover{background:var(--bg4);color:var(--text)}.settings-panel{padding:12px 14px;border-bottom:1px solid var(--border);display:flex;flex-direction:column;gap:6px;background:var(--bg3)}.settings-label{font-size:.7rem;font-weight:600;color:var(--text3);text-transform:uppercase;letter-spacing:.05em}.settings-input{background:var(--bg4);border:1px solid var(--border);border-radius:var(--radius-sm);color:var(--text);font-size:.8rem;padding:6px 10px;outline:none;transition:border-color .15s;font-family:inherit}.settings-input:focus{border-color:var(--accent)}.model-section{padding:10px 14px;border-bottom:1px solid var(--border)}.model-row{display:flex;align-items:center;gap:8px}.status-dot{width:7px;height:7px;border-radius:50%;flex-shrink:0;transition:background .3s}.status-dot.status-ok{background:var(--success);box-shadow:0 0 6px var(--success)}.status-dot.status-error{background:var(--danger)}.status-dot.status-loading{background:var(--warning);animation:pulse 1s infinite}@keyframes pulse{0%,to{opacity:1}50%{opacity:.4}}.model-select{flex:1;background:var(--bg4);border:1px solid var(--border);border-radius:var(--radius-sm);color:var(--text);font-size:.78rem;padding:5px 8px;outline:none;cursor:pointer;min-width:0;font-family:inherit}.model-select:focus{border-color:var(--accent)}.sidebar-actions{padding:10px 14px 6px}.new-chat-btn{width:100%;background:var(--accent);color:#fff;border:none;border-radius:var(--radius-sm);padding:8px 12px;font-size:.82rem;font-weight:600;cursor:pointer;display:flex;align-items:center;justify-content:center;gap:6px;transition:background .15s,transform .1s;font-family:inherit}.new-chat-btn:hover{background:var(--accent2)}.new-chat-btn:active{transform:scale(.98)}.chat-list{flex:1;overflow-y:auto;padding:6px 8px;display:flex;flex-direction:column;gap:1px}.chat-list-empty{text-align:center;color:var(--text3);font-size:.8rem;padding:20px 0}.chat-item{display:flex;align-items:center;gap:8px;padding:8px 10px;border-radius:var(--radius-sm);cursor:pointer;font-size:.82rem;color:var(--text2);transition:background .1s,color .1s;position:relative}.chat-item:hover{background:var(--bg3);color:var(--text)}.chat-item.active{background:var(--bg4);color:var(--text)}.chat-item-icon{font-size:.85rem;flex-shrink:0;opacity:.6}.chat-item-title{flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.chat-item-del{opacity:0;background:none;border:none;color:var(--danger);cursor:pointer;font-size:.75rem;padding:2px 5px;border-radius:4px;line-height:1;transition:opacity .15s,background .15s;flex-shrink:0}.chat-item:hover .chat-item-del{opacity:1}.chat-item-del:hover{background:#f0404026}.sidebar-footer{padding:10px 14px;border-top:1px solid var(--border)}.footer-version{font-size:.7rem;color:var(--text3)}.msg-edit-container{width:100%;max-width:780px}.msg-edit-textarea{width:100%;background:var(--bg3);border:1px solid var(--accent);border-radius:var(--radius);color:var(--text);font-size:.9rem;font-family:inherit;padding:10px 14px;resize:none;min-height:80px;outline:none;line-height:1.6}.msg-edit-actions{display:flex;gap:6px;margin-top:8px}.btn-primary{background:var(--accent);color:#fff;border:none;border-radius:var(--radius-sm);padding:6px 14px;font-size:.8rem;font-weight:600;cursor:pointer;font-family:inherit;transition:background .15s}.btn-primary:hover{background:var(--accent2)}.btn-secondary{background:var(--bg4);color:var(--text2);border:1px solid var(--border);border-radius:var(--radius-sm);padding:6px 14px;font-size:.8rem;cursor:pointer;font-family:inherit;transition:background .15s}.btn-secondary:hover{background:var(--bg5);color:var(--text)}.btn-ghost{background:none;color:var(--text3);border:none;border-radius:var(--radius-sm);padding:6px 10px;font-size:.8rem;cursor:pointer;font-family:inherit;transition:color .15s}.btn-ghost:hover{color:var(--text2)}.msg-actions{display:flex;gap:4px;margin-top:5px;opacity:0;transition:opacity .15s}.msg-wrapper:hover .msg-actions{opacity:1}.action-btn{background:none;border:1px solid var(--border);color:var(--text2);border-radius:var(--radius-sm);padding:3px 9px;font-size:.72rem;cursor:pointer;transition:all .15s;font-family:inherit;white-space:nowrap}.action-btn:hover{background:var(--bg3);color:var(--text);border-color:var(--border2)}.action-btn.copied{color:var(--success);border-color:var(--success)}.action-btn.danger:hover{background:#f040401Line truncated
+108
View File
@@ -0,0 +1,108 @@
var tp=Object.defineProperty;var Yu=e=>{throw TypeError(e)};var np=(e,t,n)=>t in e?tp(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n;var G=(e,t,n)=>np(e,typeof t!="symbol"?t+"":t,n),rp=(e,t,n)=>t.has(e)||Yu("Cannot "+n);var Xu=(e,t,n)=>t.has(e)?Yu("Cannot add the same private member more than once"):t instanceof WeakSet?t.add(e):t.set(e,n);var El=(e,t,n)=>(rp(e,t,"access private method"),n);(function(){const t=document.createElement("link").relList;if(t&&t.supports&&t.supports("modulepreload"))return;for(const l of document.querySelectorAll('link[rel="modulepreload"]'))r(l);new MutationObserver(l=>{for(const i of l)if(i.type==="childList")for(const o of i.addedNodes)o.tagName==="LINK"&&o.rel==="modulepreload"&&r(o)}).observe(document,{childList:!0,subtree:!0});function n(l){const i={};return l.integrity&&(i.integrity=l.integrity),l.referrerPolicy&&(i.referrerPolicy=l.referrerPolicy),l.crossOrigin==="use-credentials"?i.credentials="include":l.crossOrigin==="anonymous"?i.credentials="omit":i.credentials="same-origin",i}function r(l){if(l.ep)return;l.ep=!0;const i=n(l);fetch(l.href,i)}})();function lp(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}var kc={exports:{}},Li={},wc={exports:{}},U={};/**
* @license React
* react.production.min.js
*
* Copyright (c) Facebook, Inc. and its affiliates.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*/var fl=Symbol.for("react.element"),ip=Symbol.for("react.portal"),op=Symbol.for("react.fragment"),sp=Symbol.for("react.strict_mode"),up=Symbol.for("react.profiler"),ap=Symbol.for("react.provider"),cp=Symbol.for("react.context"),fp=Symbol.for("react.forward_ref"),dp=Symbol.for("react.suspense"),pp=Symbol.for("react.memo"),hp=Symbol.for("react.lazy"),Ku=Symbol.iterator;function mp(e){return e===null||typeof e!="object"?null:(e=Ku&&e[Ku]||e["@@iterator"],typeof e=="function"?e:null)}var Sc={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},Ec=Object.assign,xc={};function or(e,t,n){this.props=e,this.context=t,this.refs=xc,this.updater=n||Sc}or.prototype.isReactComponent={};or.prototype.setState=function(e,t){if(typeof e!="object"&&typeof e!="function"&&e!=null)throw Error("setState(...): takes an object of state variables to update or a function which returns an object of state variables.");this.updater.enqueueSetState(this,e,t,"setState")};or.prototype.forceUpdate=function(e){this.updater.enqueueForceUpdate(this,e,"forceUpdate")};function _c(){}_c.prototype=or.prototype;function Ps(e,t,n){this.props=e,this.context=t,this.refs=xc,this.updater=n||Sc}var Os=Ps.prototype=new _c;Os.constructor=Ps;Ec(Os,or.prototype);Os.isPureReactComponent=!0;var Zu=Array.isArray,Tc=Object.prototype.hasOwnProperty,Is={current:null},Cc={key:!0,ref:!0,__self:!0,__source:!0};function Nc(e,t,n){var r,l={},i=null,o=null;if(t!=null)for(r in t.ref!==void 0&&(o=t.ref),t.key!==void 0&&(i=""+t.key),t)Tc.call(t,r)&&!Cc.hasOwnProperty(r)&&(l[r]=t[r]);var s=arguments.length-2;if(s===1)l.children=n;else if(1<s){for(var u=Array(s),a=0;a<s;a++)u[a]=arguments[a+2];l.children=u}if(e&&e.defaultProps)for(r in s=e.defaultProps,s)l[r]===void 0&&(l[r]=s[r]);return{$$typeof:fl,type:e,key:i,ref:o,props:l,_owner:Is.current}}function gp(e,t){return{$$typeof:fl,type:e.type,key:t,ref:e.ref,props:e.props,_owner:e._owner}}function zs(e){return typeof e=="object"&&e!==null&&e.$$typeof===fl}function yp(e){var t={"=":"=0",":":"=2"};return"$"+e.replace(/[=:]/g,function(n){return t[n]})}var qu=/\/+/g;function eo(e,t){return typeof e=="object"&&e!==null&&e.key!=null?yp(""+e.key):t.toString(36)}function Vl(e,t,n,r,l){var i=typeof e;(i==="undefined"||i==="boolean")&&(e=null);var o=!1;if(e===null)o=!0;else switch(i){case"string":case"number":o=!0;break;case"object":switch(e.$$typeof){case fl:case ip:o=!0}}if(o)return o=e,l=l(o),e=r===""?"."+eo(o,0):r,Zu(l)?(n="",e!=null&&(n=e.replace(qu,"$&/")+"/"),Vl(l,t,n,"",function(a){return a})):l!=null&&(zs(l)&&(l=gp(l,n+(!l.key||o&&o.key===l.key?"":(""+l.key).replace(qu,"$&/")+"/")+e)),t.push(l)),1;if(o=0,r=r===""?".":r+":",Zu(e))for(var s=0;s<e.length;s++){i=e[s];var u=r+eo(i,s);o+=Vl(i,t,n,u,l)}else if(u=mp(e),typeof u=="function")for(e=u.call(e),s=0;!(i=e.next()).done;)i=i.value,u=r+eo(i,s++),o+=Vl(i,t,n,u,l);else if(i==="object")throw t=String(e),Error("Objects are not valid as a React child (found: "+(t==="[object Object]"?"object with keys {"+Object.keys(e).join(", ")+"}":t)+"). If you meant to render a collection of children, use an array instead.");return o}function xl(e,t,n){if(e==null)return e;var r=[],l=0;return Vl(e,r,"","",function(i){return t.call(n,i,l++)}),r}function vp(e){if(e._status===-1){var t=e._result;t=t(),t.then(function(n){(e._status===0||e._status===-1)&&(e._status=1,e._result=n)},function(n){(e._status===0||e._status===-1)&&(e._status=2,e._result=n)}),e._status===-1&&(e._status=0,e._result=t)}if(e._status===1)return e._result.default;throw e._result}var Ae={current:null},Ql={transition:null},kp={ReactCurrentDispatcher:Ae,ReactCurrentBatchConfig:Ql,ReactCurrentOwner:Is};function Rc(){throw Error("act(...) is not supported in production builds of React.")}U.Children={map:xl,forEach:function(e,t,n){xl(e,function(){t.apply(this,arguments)},n)},count:function(e){var t=0;return xl(e,function(){t++}),t},toArray:function(e){return xl(e,function(t){return t})||[]},only:function(e){if(!zs(e))throw Error("React.Children.only expected to receive a single React element child.");return e}};U.Component=or;U.Fragment=op;U.Profiler=up;U.PureComponent=Ps;U.StrictMode=sp;U.Suspense=dp;U.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED=kp;U.act=Rc;U.cloneElement=function(e,t,n){if(e==null)throw Error("React.cloneElement(...): The argument must be a React element, but you passed "+e+".");var r=Ec({},e.props),l=e.key,i=e.ref,o=e._owner;if(t!=null){if(t.ref!==void 0&&(i=t.ref,o=Is.current),t.key!==void 0&&(l=""+t.key),e.type&&e.type.defaultProps)var s=e.type.defaultProps;for(u in t)Tc.call(t,u)&&!Cc.hasOwnProperty(u)&&(r[u]=t[u]===void 0&&s!==void 0?s[u]:t[u])}var u=arguments.length-2;if(u===1)r.children=n;else if(1<u){s=Array(u);for(var a=0;a<u;a++)s[a]=arguments[a+2];r.children=s}return{$$typeof:fl,type:e.type,key:l,ref:i,props:r,_owner:o}};U.createContext=function(e){return e={$$typeof:cp,_currentValue:e,_currentValue2:e,_threadCount:0,ProviderLine truncated
* @license React
* react-jsx-runtime.production.min.js
*
* Copyright (c) Facebook, Inc. and its affiliates.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*/var Sp=M,Ep=Symbol.for("react.element"),xp=Symbol.for("react.fragment"),_p=Object.prototype.hasOwnProperty,Tp=Sp.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner,Cp={key:!0,ref:!0,__self:!0,__source:!0};function Ac(e,t,n){var r,l={},i=null,o=null;n!==void 0&&(i=""+n),t.key!==void 0&&(i=""+t.key),t.ref!==void 0&&(o=t.ref);for(r in t)_p.call(t,r)&&!Cp.hasOwnProperty(r)&&(l[r]=t[r]);if(e&&e.defaultProps)for(r in t=e.defaultProps,t)l[r]===void 0&&(l[r]=t[r]);return{$$typeof:Ep,type:e,key:i,ref:o,props:l,_owner:Tp.current}}Li.Fragment=xp;Li.jsx=Ac;Li.jsxs=Ac;kc.exports=Li;var _=kc.exports,zo={},Lc={exports:{}},Ve={},Pc={exports:{}},Oc={};/**
* @license React
* scheduler.production.min.js
*
* Copyright (c) Facebook, Inc. and its affiliates.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*/(function(e){function t(C,E){var I=C.length;C.push(E);e:for(;0<I;){var D=I-1>>>1,K=C[D];if(0<l(K,E))C[D]=E,C[I]=K,I=D;else break e}}function n(C){return C.length===0?null:C[0]}function r(C){if(C.length===0)return null;var E=C[0],I=C.pop();if(I!==E){C[0]=I;e:for(var D=0,K=C.length,J=K>>>1;D<J;){var je=2*(D+1)-1,V=C[je],ye=je+1,Xe=C[ye];if(0>l(V,I))ye<K&&0>l(Xe,V)?(C[D]=Xe,C[ye]=I,D=ye):(C[D]=V,C[je]=I,D=je);else if(ye<K&&0>l(Xe,I))C[D]=Xe,C[ye]=I,D=ye;else break e}}return E}function l(C,E){var I=C.sortIndex-E.sortIndex;return I!==0?I:C.id-E.id}if(typeof performance=="object"&&typeof performance.now=="function"){var i=performance;e.unstable_now=function(){return i.now()}}else{var o=Date,s=o.now();e.unstable_now=function(){return o.now()-s}}var u=[],a=[],m=1,g=null,d=3,y=!1,w=!1,k=!1,O=typeof setTimeout=="function"?setTimeout:null,p=typeof clearTimeout=="function"?clearTimeout:null,c=typeof setImmediate<"u"?setImmediate:null;typeof navigator<"u"&&navigator.scheduling!==void 0&&navigator.scheduling.isInputPending!==void 0&&navigator.scheduling.isInputPending.bind(navigator.scheduling);function h(C){for(var E=n(a);E!==null;){if(E.callback===null)r(a);else if(E.startTime<=C)r(a),E.sortIndex=E.expirationTime,t(u,E);else break;E=n(a)}}function v(C){if(k=!1,h(C),!w)if(n(u)!==null)w=!0,ln(T);else{var E=n(a);E!==null&&on(v,E.startTime-C)}}function T(C,E){w=!1,k&&(k=!1,p(L),L=-1),y=!0;var I=d;try{for(h(E),g=n(u);g!==null&&(!(g.expirationTime>E)||C&&!B());){var D=g.callback;if(typeof D=="function"){g.callback=null,d=g.priorityLevel;var K=D(g.expirationTime<=E);E=e.unstable_now(),typeof K=="function"?g.callback=K:g===n(u)&&r(u),h(E)}else r(u);g=n(u)}if(g!==null)var J=!0;else{var je=n(a);je!==null&&on(v,je.startTime-E),J=!1}return J}finally{g=null,d=I,y=!1}}var N=!1,A=null,L=-1,X=5,j=-1;function B(){return!(e.unstable_now()-j<X)}function Ge(){if(A!==null){var C=e.unstable_now();j=C;var E=!0;try{E=A(!0,C)}finally{E?Ye():(N=!1,A=null)}}else N=!1}var Ye;if(typeof c=="function")Ye=function(){c(Ge)};else if(typeof MessageChannel<"u"){var xt=new MessageChannel,ar=xt.port2;xt.port1.onmessage=Ge,Ye=function(){ar.postMessage(null)}}else Ye=function(){O(Ge,0)};function ln(C){A=C,N||(N=!0,Ye())}function on(C,E){L=O(function(){C(e.unstable_now())},E)}e.unstable_IdlePriority=5,e.unstable_ImmediatePriority=1,e.unstable_LowPriority=4,e.unstable_NormalPriority=3,e.unstable_Profiling=null,e.unstable_UserBlockingPriority=2,e.unstable_cancelCallback=function(C){C.callback=null},e.unstable_continueExecution=function(){w||y||(w=!0,ln(T))},e.unstable_forceFrameRate=function(C){0>C||125<C?console.error("forceFrameRate takes a positive int between 0 and 125, forcing frame rates higher than 125 fps is not supported"):X=0<C?Math.floor(1e3/C):5},e.unstable_getCurrentPriorityLevel=function(){return d},e.unstable_getFirstCallbackNode=function(){return n(u)},e.unstable_next=function(C){switch(d){case 1:case 2:case 3:var E=3;break;default:E=d}var I=d;d=E;try{return C()}finally{d=I}},e.unstable_pauseExecution=function(){},e.unstable_requestPaint=function(){},e.unstable_runWithPriority=function(C,E){switch(C){case 1:case 2:case 3:case 4:case 5:break;default:C=3}var I=d;d=C;try{return E()}finally{d=I}},e.unstable_scheduleCallback=function(C,E,I){var D=e.unstable_now();switch(typeof I=="object"&&I!==null?(I=I.delay,I=typeof I=="number"&&0<I?D+I:D):I=D,C){case 1:var K=-1;break;case 2:K=250;break;case 5:K=1073741823;break;case 4:K=1e4;break;default:K=5e3}return K=I+K,C={id:m++,callback:E,priorityLevel:C,startTime:I,expirationTime:K,sortIndex:-1},I>D?(C.sortIndex=I,t(a,C),n(u)===null&&C===n(a)&&(k?(p(L),L=-1):k=!0,on(v,I-D))):(C.sortIndex=K,t(u,C),w||y||(w=!0,ln(T))),C},e.unstable_shouldYield=B,e.unstable_wrapCallback=function(C){var E=d;return function(){var I=d;d=E;try{return C.apply(this,arguments)}finally{d=I}}}})(Oc);Pc.exports=Oc;var Np=Pc.exports;/**
* @license React
* react-dom.production.min.js
*
* Copyright (c) Facebook, Inc. and its affiliates.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*/var Rp=M,We=Np;function S(e){for(var t="https://reactjs.org/docs/error-decoder.html?invariant="+e,n=1;n<arguments.length;n++)t+="&args[]="+encodeURIComponent(arguments[n]);return"Minified React error #"+e+"; visit "+t+" for the full message or use the non-minified dev environment for full errors and additional helpful warnings."}var Ic=new Set,Yr={};function _n(e,t){bn(e,t),bn(e+"Capture",t)}function bn(e,t){for(Yr[e]=t,e=0;e<t.length;e++)Ic.add(t[e])}var Ot=!(typeof window>"u"||typeof window.document>"u"||typeof window.document.createElement>"u"),Do=Object.prototype.hasOwnProperty,Ap=/^[:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD][:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD\-.0-9\u00B7\u0300-\u036F\u203F-\u2040]*$/,Ju={},bu={};function Lp(e){return Do.call(bu,e)?!0:Do.call(Ju,e)?!1:Ap.test(e)?bu[e]=!0:(Ju[e]=!0,!1)}function Pp(e,t,n,r){if(n!==null&&n.type===0)return!1;switch(typeof t){case"function":case"symbol":return!0;case"boolean":return r?!1:n!==null?!n.acceptsBooleans:(e=e.toLowerCase().slice(0,5),e!=="data-"&&e!=="aria-");default:return!1}}function Op(e,t,n,r){if(t===null||typeof t>"u"||Pp(e,t,n,r))return!0;if(r)return!1;if(n!==null)switch(n.type){case 3:return!t;case 4:return t===!1;case 5:return isNaN(t);case 6:return isNaN(t)||1>t}return!1}function Le(e,t,n,r,l,i,o){this.acceptsBooleans=t===2||t===3||t===4,this.attributeName=r,this.attributeNamespace=l,this.mustUseProperty=n,this.propertyName=e,this.type=t,this.sanitizeURL=i,this.removeEmptyString=o}var ge={};"children dangerouslySetInnerHTML defaultValue defaultChecked innerHTML suppressContentEditableWarning suppressHydrationWarning style".split(" ").forEach(function(e){ge[e]=new Le(e,0,!1,e,null,!1,!1)});[["acceptCharset","accept-charset"],["className","class"],["htmlFor","for"],["httpEquiv","http-equiv"]].forEach(function(e){var t=e[0];ge[t]=new Le(t,1,!1,e[1],null,!1,!1)});["contentEditable","draggable","spellCheck","value"].forEach(function(e){ge[e]=new Le(e,2,!1,e.toLowerCase(),null,!1,!1)});["autoReverse","externalResourcesRequired","focusable","preserveAlpha"].forEach(function(e){ge[e]=new Le(e,2,!1,e,null,!1,!1)});"allowFullScreen async autoFocus autoPlay controls default defer disabled disablePictureInPicture disableRemotePlayback formNoValidate hidden loop noModule noValidate open playsInline readOnly required reversed scoped seamless itemScope".split(" ").forEach(function(e){ge[e]=new Le(e,3,!1,e.toLowerCase(),null,!1,!1)});["checked","multiple","muted","selected"].forEach(function(e){ge[e]=new Le(e,3,!0,e,null,!1,!1)});["capture","download"].forEach(function(e){ge[e]=new Le(e,4,!1,e,null,!1,!1)});["cols","rows","size","span"].forEach(function(e){ge[e]=new Le(e,6,!1,e,null,!1,!1)});["rowSpan","start"].forEach(function(e){ge[e]=new Le(e,5,!1,e.toLowerCase(),null,!1,!1)});var Ds=/[\-:]([a-z])/g;function Ms(e){return e[1].toUpperCase()}"accent-height alignment-baseline arabic-form baseline-shift cap-height clip-path clip-rule color-interpolation color-interpolation-filters color-profile color-rendering dominant-baseline enable-background fill-opacity fill-rule flood-color flood-opacity font-family font-size font-size-adjust font-stretch font-style font-variant font-weight glyph-name glyph-orientation-horizontal glyph-orientation-vertical horiz-adv-x horiz-origin-x image-rendering letter-spacing lighting-color marker-end marker-mid marker-start overline-position overline-thickness paint-order panose-1 pointer-events rendering-intent shape-rendering stop-color stop-opacity strikethrough-position strikethrough-thickness stroke-dasharray stroke-dashoffset stroke-linecap stroke-linejoin stroke-miterlimit stroke-opacity stroke-width text-anchor text-decoration text-rendering underline-position underline-thickness unicode-bidi unicode-range units-per-em v-alphabetic v-hanging v-ideographic v-mathematical vector-effect vert-adv-y vert-origin-x vert-origin-y word-spacing writing-mode xmlns:xlink x-height".split(" ").forEach(function(e){var t=e.replace(Ds,Ms);ge[t]=new Le(t,1,!1,e,null,!1,!1)});"xlink:actuate xlink:arcrole xlink:role xlink:show xlink:title xlink:type".split(" ").forEach(function(e){var t=e.replace(Ds,Ms);ge[t]=new Le(t,1,!1,e,"http://www.w3.org/1999/xlink",!1,!1)});["xml:base","xml:lang","xml:space"].forEach(function(e){var t=e.replace(Ds,Ms);ge[t]=new Le(t,1,!1,e,"http://www.w3.org/XML/1998/namespace",!1,!1)});["tabIndex","crossOrigin"].forEach(function(e){ge[e]=new Le(e,1,!1,e.toLowerCase(),null,!1,!1)});ge.xlinkHref=new Le("xlinkHref",1,!1,"xlink:href","http://www.w3.org/1999/xlink",!0,!1);["src","href","action","formAction"].forEach(function(e){ge[e]=new Le(e,1,!1,e.toLowerCase(),null,!0,!0)});function js(e,t,n,r){var l=ge.hasOwnProperty(t)?ge[t]:null;(l!==null?l.type!==0:r||!(2<t.length)||t[0]!=="o"&&t[0]!==" Line truncated
`+to+e}var no=!1;function ro(e,t){if(!e||no)return"";no=!0;var n=Error.prepareStackTrace;Error.prepareStackTrace=void 0;try{if(t)if(t=function(){throw Error()},Object.defineProperty(t.prototype,"props",{set:function(){throw Error()}}),typeof Reflect=="object"&&Reflect.construct){try{Reflect.construct(t,[])}catch(a){var r=a}Reflect.construct(e,[],t)}else{try{t.call()}catch(a){r=a}e.call(t.prototype)}else{try{throw Error()}catch(a){r=a}e()}}catch(a){if(a&&r&&typeof a.stack=="string"){for(var l=a.stack.split(`
`),i=r.stack.split(`
`),o=l.length-1,s=i.length-1;1<=o&&0<=s&&l[o]!==i[s];)s--;for(;1<=o&&0<=s;o--,s--)if(l[o]!==i[s]){if(o!==1||s!==1)do if(o--,s--,0>s||l[o]!==i[s]){var u=`
`+l[o].replace(" at new "," at ");return e.displayName&&u.includes("<anonymous>")&&(u=u.replace("<anonymous>",e.displayName)),u}while(1<=o&&0<=s);break}}}finally{no=!1,Error.prepareStackTrace=n}return(e=e?e.displayName||e.name:"")?Or(e):""}function Ip(e){switch(e.tag){case 5:return Or(e.type);case 16:return Or("Lazy");case 13:return Or("Suspense");case 19:return Or("SuspenseList");case 0:case 2:case 15:return e=ro(e.type,!1),e;case 11:return e=ro(e.type.render,!1),e;case 1:return e=ro(e.type,!0),e;default:return""}}function Uo(e){if(e==null)return null;if(typeof e=="function")return e.displayName||e.name||null;if(typeof e=="string")return e;switch(e){case Mn:return"Fragment";case Dn:return"Portal";case Mo:return"Profiler";case Fs:return"StrictMode";case jo:return"Suspense";case Fo:return"SuspenseList"}if(typeof e=="object")switch(e.$$typeof){case Dc:return(e.displayName||"Context")+".Consumer";case zc:return(e._context.displayName||"Context")+".Provider";case Us:var t=e.render;return e=e.displayName,e||(e=t.displayName||t.name||"",e=e!==""?"ForwardRef("+e+")":"ForwardRef"),e;case $s:return t=e.displayName||null,t!==null?t:Uo(e.type)||"Memo";case Ut:t=e._payload,e=e._init;try{return Uo(e(t))}catch{}}return null}function zp(e){var t=e.type;switch(e.tag){case 24:return"Cache";case 9:return(t.displayName||"Context")+".Consumer";case 10:return(t._context.displayName||"Context")+".Provider";case 18:return"DehydratedFragment";case 11:return e=t.render,e=e.displayName||e.name||"",t.displayName||(e!==""?"ForwardRef("+e+")":"ForwardRef");case 7:return"Fragment";case 5:return t;case 4:return"Portal";case 3:return"Root";case 6:return"Text";case 16:return Uo(t);case 8:return t===Fs?"StrictMode":"Mode";case 22:return"Offscreen";case 12:return"Profiler";case 21:return"Scope";case 13:return"Suspense";case 19:return"SuspenseList";case 25:return"TracingMarker";case 1:case 0:case 17:case 2:case 14:case 15:if(typeof t=="function")return t.displayName||t.name||null;if(typeof t=="string")return t}return null}function bt(e){switch(typeof e){case"boolean":case"number":case"string":case"undefined":return e;case"object":return e;default:return""}}function jc(e){var t=e.type;return(e=e.nodeName)&&e.toLowerCase()==="input"&&(t==="checkbox"||t==="radio")}function Dp(e){var t=jc(e)?"checked":"value",n=Object.getOwnPropertyDescriptor(e.constructor.prototype,t),r=""+e[t];if(!e.hasOwnProperty(t)&&typeof n<"u"&&typeof n.get=="function"&&typeof n.set=="function"){var l=n.get,i=n.set;return Object.defineProperty(e,t,{configurable:!0,get:function(){return l.call(this)},set:function(o){r=""+o,i.call(this,o)}}),Object.defineProperty(e,t,{enumerable:n.enumerable}),{getValue:function(){return r},setValue:function(o){r=""+o},stopTracking:function(){e._valueTracker=null,delete e[t]}}}}function Tl(e){e._valueTracker||(e._valueTracker=Dp(e))}function Fc(e){if(!e)return!1;var t=e._valueTracker;if(!t)return!0;var n=t.getValue(),r="";return e&&(r=jc(e)?e.checked?"true":"false":e.value),e=r,e!==n?(t.setValue(e),!0):!1}function li(e){if(e=e||(typeof document<"u"?document:void 0),typeof e>"u")return null;try{return e.activeElement||e.body}catch{return e.body}}function $o(e,t){var n=t.checked;return re({},t,{defaultChecked:void 0,defaultValue:void 0,value:void 0,checked:n??e._wrapperState.initialChecked})}function ta(e,t){var n=t.defaultValue==null?"":t.defaultValue,r=t.checked!=null?t.checked:t.defaultChecked;n=bt(t.value!=null?t.value:n),e._wrapperState={initialChecked:r,initialValue:n,controlled:t.type==="checkbox"||t.type==="radio"?t.checked!=null:t.value!=null}}function Uc(e,t){t=t.checked,t!=null&&js(e,"checked",t,!1)}function Ho(e,t){Uc(e,t);var n=bt(t.value),r=t.type;if(n!=null)r==="number"?(n===0&&e.value===""||e.value!=n)&&(e.value=""+n):e.value!==""+n&&(e.value=""+n);else if(r==="submit"||r==="reset"){e.removeAttribute("value");return}t.hasOwnProperty("value")?Bo(e,t.type,n):t.hasOwnProperty("defaultValue")&&Bo(e,t.type,bt(t.defaultValue)),t.checked==null&&t.defaultChecked!=null&&(e.defaultChecked=!!t.defaultChecked)}function na(e,t,n){if(t.hasOwnProperty("value")||t.hasOwnProperty("defaultValue")){var r=t.type;if(!(r!=="submit"&&r!=="reset"||t.value!==void 0&&t.value!==null))return;t=""+e._wrapperState.initialValue,n||t===e.value||(e.value=t),e.defaultValue=t}n=e.name,n!==""&&(e.name=""),e.defaultChecked=!!e._wrapperState.initialChecked,n!==""&&(e.name=n)}function Bo(e,t,n){(t!=="number"||li(e.ownerDocument)!==e)&&(n==null?e.defaultValue=""+e._wrapperState.initialValue:e.defaultValue!==""+n&&(e.defaultValue=""+n))}var Ir=Array.isArray;function Yn(e,t,n,r){if(e=e.options,t){t={};for(var l=0;l<n.length;l++)t["$"+n[l]]=!0;for(n=0;n<e.length;n++)l=t.hasOwnProperty("$"+e[n].value),e[n].selected!==l&&(e[n].selected=l),l&&r&&(e[n].defaultSelected=!0)}else{for(n=""+bt(n),t=null,l=0;l<e.length;l++){if(e[l].value===n){e[l].selected=!0,r&&(e[l].defaultSelected=!0);return}t!==null||e[l].disabled||(t=e[l])}t!==null&&(t.selected=!0)}}function Wo(e,t){if(t.dan Line truncated
`).replace(Qh,"")}function Il(e,t,n){if(t=Ta(t),Ta(e)!==t&&n)throw Error(S(425))}function di(){}var ns=null,rs=null;function ls(e,t){return e==="textarea"||e==="noscript"||typeof t.children=="string"||typeof t.children=="number"||typeof t.dangerouslySetInnerHTML=="object"&&t.dangerouslySetInnerHTML!==null&&t.dangerouslySetInnerHTML.__html!=null}var is=typeof setTimeout=="function"?setTimeout:void 0,Gh=typeof clearTimeout=="function"?clearTimeout:void 0,Ca=typeof Promise=="function"?Promise:void 0,Yh=typeof queueMicrotask=="function"?queueMicrotask:typeof Ca<"u"?function(e){return Ca.resolve(null).then(e).catch(Xh)}:is;function Xh(e){setTimeout(function(){throw e})}function yo(e,t){var n=t,r=0;do{var l=n.nextSibling;if(e.removeChild(n),l&&l.nodeType===8)if(n=l.data,n==="/$"){if(r===0){e.removeChild(l),Jr(t);return}r--}else n!=="$"&&n!=="$?"&&n!=="$!"||r++;n=l}while(n);Jr(t)}function Xt(e){for(;e!=null;e=e.nextSibling){var t=e.nodeType;if(t===1||t===3)break;if(t===8){if(t=e.data,t==="$"||t==="$!"||t==="$?")break;if(t==="/$")return null}}return e}function Na(e){e=e.previousSibling;for(var t=0;e;){if(e.nodeType===8){var n=e.data;if(n==="$"||n==="$!"||n==="$?"){if(t===0)return e;t--}else n==="/$"&&t++}e=e.previousSibling}return null}var ur=Math.random().toString(36).slice(2),vt="__reactFiber$"+ur,rl="__reactProps$"+ur,It="__reactContainer$"+ur,os="__reactEvents$"+ur,Kh="__reactListeners$"+ur,Zh="__reactHandles$"+ur;function dn(e){var t=e[vt];if(t)return t;for(var n=e.parentNode;n;){if(t=n[It]||n[vt]){if(n=t.alternate,t.child!==null||n!==null&&n.child!==null)for(e=Na(e);e!==null;){if(n=e[vt])return n;e=Na(e)}return t}e=n,n=e.parentNode}return null}function hl(e){return e=e[vt]||e[It],!e||e.tag!==5&&e.tag!==6&&e.tag!==13&&e.tag!==3?null:e}function $n(e){if(e.tag===5||e.tag===6)return e.stateNode;throw Error(S(33))}function Di(e){return e[rl]||null}var ss=[],Hn=-1;function nn(e){return{current:e}}function q(e){0>Hn||(e.current=ss[Hn],ss[Hn]=null,Hn--)}function Y(e,t){Hn++,ss[Hn]=e.current,e.current=t}var en={},xe=nn(en),ze=nn(!1),yn=en;function er(e,t){var n=e.type.contextTypes;if(!n)return en;var r=e.stateNode;if(r&&r.__reactInternalMemoizedUnmaskedChildContext===t)return r.__reactInternalMemoizedMaskedChildContext;var l={},i;for(i in n)l[i]=t[i];return r&&(e=e.stateNode,e.__reactInternalMemoizedUnmaskedChildContext=t,e.__reactInternalMemoizedMaskedChildContext=l),l}function De(e){return e=e.childContextTypes,e!=null}function pi(){q(ze),q(xe)}function Ra(e,t,n){if(xe.current!==en)throw Error(S(168));Y(xe,t),Y(ze,n)}function Rf(e,t,n){var r=e.stateNode;if(t=t.childContextTypes,typeof r.getChildContext!="function")return n;r=r.getChildContext();for(var l in r)if(!(l in t))throw Error(S(108,zp(e)||"Unknown",l));return re({},n,r)}function hi(e){return e=(e=e.stateNode)&&e.__reactInternalMemoizedMergedChildContext||en,yn=xe.current,Y(xe,e),Y(ze,ze.current),!0}function Aa(e,t,n){var r=e.stateNode;if(!r)throw Error(S(169));n?(e=Rf(e,t,yn),r.__reactInternalMemoizedMergedChildContext=e,q(ze),q(xe),Y(xe,e)):q(ze),Y(ze,n)}var Rt=null,Mi=!1,vo=!1;function Af(e){Rt===null?Rt=[e]:Rt.push(e)}function qh(e){Mi=!0,Af(e)}function rn(){if(!vo&&Rt!==null){vo=!0;var e=0,t=W;try{var n=Rt;for(W=1;e<n.length;e++){var r=n[e];do r=r(!0);while(r!==null)}Rt=null,Mi=!1}catch(l){throw Rt!==null&&(Rt=Rt.slice(e+1)),bc(Bs,rn),l}finally{W=t,vo=!1}}return null}var Bn=[],Wn=0,mi=null,gi=0,Ze=[],qe=0,vn=null,At=1,Lt="";function cn(e,t){Bn[Wn++]=gi,Bn[Wn++]=mi,mi=e,gi=t}function Lf(e,t,n){Ze[qe++]=At,Ze[qe++]=Lt,Ze[qe++]=vn,vn=e;var r=At;e=Lt;var l=32-ct(r)-1;r&=~(1<<l),n+=1;var i=32-ct(t)+l;if(30<i){var o=l-l%5;i=(r&(1<<o)-1).toString(32),r>>=o,l-=o,At=1<<32-ct(t)+l|n<<l|r,Lt=i+e}else At=1<<i|n<<l|r,Lt=e}function qs(e){e.return!==null&&(cn(e,1),Lf(e,1,0))}function Js(e){for(;e===mi;)mi=Bn[--Wn],Bn[Wn]=null,gi=Bn[--Wn],Bn[Wn]=null;for(;e===vn;)vn=Ze[--qe],Ze[qe]=null,Lt=Ze[--qe],Ze[qe]=null,At=Ze[--qe],Ze[qe]=null}var Be=null,He=null,ee=!1,at=null;function Pf(e,t){var n=Je(5,null,null,0);n.elementType="DELETED",n.stateNode=t,n.return=e,t=e.deletions,t===null?(e.deletions=[n],e.flags|=16):t.push(n)}function La(e,t){switch(e.tag){case 5:var n=e.type;return t=t.nodeType!==1||n.toLowerCase()!==t.nodeName.toLowerCase()?null:t,t!==null?(e.stateNode=t,Be=e,He=Xt(t.firstChild),!0):!1;case 6:return t=e.pendingProps===""||t.nodeType!==3?null:t,t!==null?(e.stateNode=t,Be=e,He=null,!0):!1;case 13:return t=t.nodeType!==8?null:t,t!==null?(n=vn!==null?{id:At,overflow:Lt}:null,e.memoizedState={dehydrated:t,treeContext:n,retryLane:1073741824},n=Je(18,null,null,0),n.stateNode=t,n.return=e,e.child=n,Be=e,He=null,!0):!1;default:return!1}}function us(e){return(e.mode&1)!==0&&(e.flags&128)===0}function as(e){if(ee){var t=He;if(t){var n=t;if(!La(e,t)){if(us(e))throw Error(S(418));t=Xt(n.nextSibling);var r=Be;t&&La(e,t)?Pf(r,n):(e.flags=e.flags&-4097|2,ee=!1,Be=e)}}else{if(us(e))throw Error(S(418));e.flags=e.flags&-4097|2,ee=!1,Be=e}}}function Pa(e){for(e=e.return;e!==null Line truncated
Error generating stack: `+i.message+`
`+i.stack}return{value:e,source:t,stack:l,digest:null}}function xo(e,t,n){return{value:e,source:null,stack:n??null,digest:t??null}}function ps(e,t){try{console.error(t.value)}catch(n){setTimeout(function(){throw n})}}var om=typeof WeakMap=="function"?WeakMap:Map;function ld(e,t,n){n=Pt(-1,n),n.tag=3,n.payload={element:null};var r=t.value;return n.callback=function(){_i||(_i=!0,xs=r),ps(e,t)},n}function id(e,t,n){n=Pt(-1,n),n.tag=3;var r=e.type.getDerivedStateFromError;if(typeof r=="function"){var l=t.value;n.payload=function(){return r(l)},n.callback=function(){ps(e,t)}}var i=e.stateNode;return i!==null&&typeof i.componentDidCatch=="function"&&(n.callback=function(){ps(e,t),typeof r!="function"&&(Zt===null?Zt=new Set([this]):Zt.add(this));var o=t.stack;this.componentDidCatch(t.value,{componentStack:o!==null?o:""})}),n}function Ua(e,t,n){var r=e.pingCache;if(r===null){r=e.pingCache=new om;var l=new Set;r.set(t,l)}else l=r.get(t),l===void 0&&(l=new Set,r.set(t,l));l.has(n)||(l.add(n),e=wm.bind(null,e,t,n),t.then(e,e))}function $a(e){do{var t;if((t=e.tag===13)&&(t=e.memoizedState,t=t!==null?t.dehydrated!==null:!0),t)return e;e=e.return}while(e!==null);return null}function Ha(e,t,n,r,l){return e.mode&1?(e.flags|=65536,e.lanes=l,e):(e===t?e.flags|=65536:(e.flags|=128,n.flags|=131072,n.flags&=-52805,n.tag===1&&(n.alternate===null?n.tag=17:(t=Pt(-1,1),t.tag=2,Kt(n,t,1))),n.lanes|=1),e)}var sm=Mt.ReactCurrentOwner,Ie=!1;function Te(e,t,n,r){t.child=e===null?zf(t,null,n,r):nr(t,e.child,n,r)}function Ba(e,t,n,r,l){n=n.render;var i=t.ref;return qn(t,l),r=au(e,t,n,r,i,l),n=cu(),e!==null&&!Ie?(t.updateQueue=e.updateQueue,t.flags&=-2053,e.lanes&=~l,Dt(e,t,l)):(ee&&n&&qs(t),t.flags|=1,Te(e,t,r,l),t.child)}function Wa(e,t,n,r,l){if(e===null){var i=n.type;return typeof i=="function"&&!wu(i)&&i.defaultProps===void 0&&n.compare===null&&n.defaultProps===void 0?(t.tag=15,t.type=i,od(e,t,i,r,l)):(e=ti(n.type,null,r,t,t.mode,l),e.ref=t.ref,e.return=t,t.child=e)}if(i=e.child,!(e.lanes&l)){var o=i.memoizedProps;if(n=n.compare,n=n!==null?n:el,n(o,r)&&e.ref===t.ref)return Dt(e,t,l)}return t.flags|=1,e=Jt(i,r),e.ref=t.ref,e.return=t,t.child=e}function od(e,t,n,r,l){if(e!==null){var i=e.memoizedProps;if(el(i,r)&&e.ref===t.ref)if(Ie=!1,t.pendingProps=r=i,(e.lanes&l)!==0)e.flags&131072&&(Ie=!0);else return t.lanes=e.lanes,Dt(e,t,l)}return hs(e,t,n,r,l)}function sd(e,t,n){var r=t.pendingProps,l=r.children,i=e!==null?e.memoizedState:null;if(r.mode==="hidden")if(!(t.mode&1))t.memoizedState={baseLanes:0,cachePool:null,transitions:null},Y(Gn,Ue),Ue|=n;else{if(!(n&1073741824))return e=i!==null?i.baseLanes|n:n,t.lanes=t.childLanes=1073741824,t.memoizedState={baseLanes:e,cachePool:null,transitions:null},t.updateQueue=null,Y(Gn,Ue),Ue|=e,null;t.memoizedState={baseLanes:0,cachePool:null,transitions:null},r=i!==null?i.baseLanes:n,Y(Gn,Ue),Ue|=r}else i!==null?(r=i.baseLanes|n,t.memoizedState=null):r=n,Y(Gn,Ue),Ue|=r;return Te(e,t,l,n),t.child}function ud(e,t){var n=t.ref;(e===null&&n!==null||e!==null&&e.ref!==n)&&(t.flags|=512,t.flags|=2097152)}function hs(e,t,n,r,l){var i=De(n)?yn:xe.current;return i=er(t,i),qn(t,l),n=au(e,t,n,r,i,l),r=cu(),e!==null&&!Ie?(t.updateQueue=e.updateQueue,t.flags&=-2053,e.lanes&=~l,Dt(e,t,l)):(ee&&r&&qs(t),t.flags|=1,Te(e,t,n,l),t.child)}function Va(e,t,n,r,l){if(De(n)){var i=!0;hi(t)}else i=!1;if(qn(t,l),t.stateNode===null)Jl(e,t),rd(t,n,r),ds(t,n,r,l),r=!0;else if(e===null){var o=t.stateNode,s=t.memoizedProps;o.props=s;var u=o.context,a=n.contextType;typeof a=="object"&&a!==null?a=et(a):(a=De(n)?yn:xe.current,a=er(t,a));var m=n.getDerivedStateFromProps,g=typeof m=="function"||typeof o.getSnapshotBeforeUpdate=="function";g||typeof o.UNSAFE_componentWillReceiveProps!="function"&&typeof o.componentWillReceiveProps!="function"||(s!==r||u!==a)&&Fa(t,o,r,a),$t=!1;var d=t.memoizedState;o.state=d,ki(t,r,o,l),u=t.memoizedState,s!==r||d!==u||ze.current||$t?(typeof m=="function"&&(fs(t,n,m,r),u=t.memoizedState),(s=$t||ja(t,n,s,r,d,u,a))?(g||typeof o.UNSAFE_componentWillMount!="function"&&typeof o.componentWillMount!="function"||(typeof o.componentWillMount=="function"&&o.componentWillMount(),typeof o.UNSAFE_componentWillMount=="function"&&o.UNSAFE_componentWillMount()),typeof o.componentDidMount=="function"&&(t.flags|=4194308)):(typeof o.componentDidMount=="function"&&(t.flags|=4194308),t.memoizedProps=r,t.memoizedState=u),o.props=r,o.state=u,o.context=a,r=s):(typeof o.componentDidMount=="function"&&(t.flags|=4194308),r=!1)}else{o=t.stateNode,Mf(e,t),s=t.memoizedProps,a=t.type===t.elementType?s:st(t.type,s),o.props=a,g=t.pendingProps,d=o.context,u=n.contextType,typeof u=="object"&&u!==null?u=et(u):(u=De(n)?yn:xe.current,u=er(t,u));var y=n.getDerivedStateFromProps;(m=typeof y=="function"||typeof o.getSnapshotBeforeUpdate=="function")||typeof o.UNSAFE_componentWillReceiveProps!="function"&&typeof o.componentWillReceiveProps!="function"||(s!==g||d!==u)&&Fa(t,o,r,u),$t=!1,d=t.memoizedState,o.state=d,ki(t,r,o,l);var w=t.memoizedState Line truncated
`).map(l=>{const i=l.match(/^\s+/);if(i===null)return l;const[o]=i;return o.length>=r.length?l.slice(r.length):l}).join(`
`)}class Ri{constructor(t){G(this,"options");G(this,"rules");G(this,"lexer");this.options=t||Cn}space(t){const n=this.rules.block.newline.exec(t);if(n&&n[0].length>0)return{type:"space",raw:n[0]}}code(t){const n=this.rules.block.code.exec(t);if(n){const r=n[0].replace(/^ {1,4}/gm,"");return{type:"code",raw:n[0],codeBlockStyle:"indented",text:this.options.pedantic?r:$l(r,`
`)}}}fences(t){const n=this.rules.block.fences.exec(t);if(n){const r=n[0],l=$m(r,n[3]||"");return{type:"code",raw:r,lang:n[2]?n[2].trim().replace(this.rules.inline.anyPunctuation,"$1"):n[2],text:l}}}heading(t){const n=this.rules.block.heading.exec(t);if(n){let r=n[2].trim();if(/#$/.test(r)){const l=$l(r,"#");(this.options.pedantic||!l||/ $/.test(l))&&(r=l.trim())}return{type:"heading",raw:n[0],depth:n[1].length,text:r,tokens:this.lexer.inline(r)}}}hr(t){const n=this.rules.block.hr.exec(t);if(n)return{type:"hr",raw:n[0]}}blockquote(t){const n=this.rules.block.blockquote.exec(t);if(n){let r=n[0].replace(/\n {0,3}((?:=+|-+) *)(?=\n|$)/g,`
$1`);r=$l(r.replace(/^ *>[ \t]?/gm,""),`
`);const l=this.lexer.state.top;this.lexer.state.top=!0;const i=this.lexer.blockTokens(r);return this.lexer.state.top=l,{type:"blockquote",raw:n[0],tokens:i,text:r}}}list(t){let n=this.rules.block.list.exec(t);if(n){let r=n[1].trim();const l=r.length>1,i={type:"list",raw:"",ordered:l,start:l?+r.slice(0,-1):"",loose:!1,items:[]};r=l?`\\d{1,9}\\${r.slice(-1)}`:`\\${r}`,this.options.pedantic&&(r=l?r:"[*+-]");const o=new RegExp(`^( {0,3}${r})((?:[ ][^\\n]*)?(?:\\n|$))`);let s="",u="",a=!1;for(;t;){let m=!1;if(!(n=o.exec(t))||this.rules.block.hr.test(t))break;s=n[0],t=t.substring(s.length);let g=n[2].split(`
`,1)[0].replace(/^\t+/,p=>" ".repeat(3*p.length)),d=t.split(`
`,1)[0],y=0;this.options.pedantic?(y=2,u=g.trimStart()):(y=n[2].search(/[^ ]/),y=y>4?1:y,u=g.slice(y),y+=n[1].length);let w=!1;if(!g&&/^ *$/.test(d)&&(s+=d+`
`,t=t.substring(d.length+1),m=!0),!m){const p=new RegExp(`^ {0,${Math.min(3,y-1)}}(?:[*+-]|\\d{1,9}[.)])((?:[ ][^\\n]*)?(?:\\n|$))`),c=new RegExp(`^ {0,${Math.min(3,y-1)}}((?:- *){3,}|(?:_ *){3,}|(?:\\* *){3,})(?:\\n+|$)`),h=new RegExp(`^ {0,${Math.min(3,y-1)}}(?:\`\`\`|~~~)`),v=new RegExp(`^ {0,${Math.min(3,y-1)}}#`);for(;t;){const T=t.split(`
`,1)[0];if(d=T,this.options.pedantic&&(d=d.replace(/^ {1,4}(?=( {4})*[^ ])/g," ")),h.test(d)||v.test(d)||p.test(d)||c.test(t))break;if(d.search(/[^ ]/)>=y||!d.trim())u+=`
`+d.slice(y);else{if(w||g.search(/[^ ]/)>=4||h.test(g)||v.test(g)||c.test(g))break;u+=`
`+d}!w&&!d.trim()&&(w=!0),s+=T+`
`,t=t.substring(T.length+1),g=d.slice(y)}}i.loose||(a?i.loose=!0:/\n *\n *$/.test(s)&&(a=!0));let k=null,O;this.options.gfm&&(k=/^\[[ xX]\] /.exec(u),k&&(O=k[0]!=="[ ] ",u=u.replace(/^\[[ xX]\] +/,""))),i.items.push({type:"list_item",raw:s,task:!!k,checked:O,loose:!1,text:u,tokens:[]}),i.raw+=s}i.items[i.items.length-1].raw=s.trimEnd(),i.items[i.items.length-1].text=u.trimEnd(),i.raw=i.raw.trimEnd();for(let m=0;m<i.items.length;m++)if(this.lexer.state.top=!1,i.items[m].tokens=this.lexer.blockTokens(i.items[m].text,[]),!i.loose){const g=i.items[m].tokens.filter(y=>y.type==="space"),d=g.length>0&&g.some(y=>/\n.*\n/.test(y.raw));i.loose=d}if(i.loose)for(let m=0;m<i.items.length;m++)i.items[m].loose=!0;return i}}html(t){const n=this.rules.block.html.exec(t);if(n)return{type:"html",block:!0,raw:n[0],pre:n[1]==="pre"||n[1]==="script"||n[1]==="style",text:n[0]}}def(t){const n=this.rules.block.def.exec(t);if(n){const r=n[1].toLowerCase().replace(/\s+/g," "),l=n[2]?n[2].replace(/^<(.*)>$/,"$1").replace(this.rules.inline.anyPunctuation,"$1"):"",i=n[3]?n[3].substring(1,n[3].length-1).replace(this.rules.inline.anyPunctuation,"$1"):n[3];return{type:"def",tag:r,raw:n[0],href:l,title:i}}}table(t){const n=this.rules.block.table.exec(t);if(!n||!/[:|]/.test(n[2]))return;const r=oc(n[1]),l=n[2].replace(/^\||\| *$/g,"").split("|"),i=n[3]&&n[3].trim()?n[3].replace(/\n[ \t]*$/,"").split(`
`):[],o={type:"table",raw:n[0],header:[],align:[],rows:[]};if(r.length===l.length){for(const s of l)/^ *-+: *$/.test(s)?o.align.push("right"):/^ *:-+: *$/.test(s)?o.align.push("center"):/^ *:-+ *$/.test(s)?o.align.push("left"):o.align.push(null);for(const s of r)o.header.push({text:s,tokens:this.lexer.inline(s)});for(const s of i)o.rows.push(oc(s,o.header.length).map(u=>({text:u,tokens:this.lexer.inline(u)})));return o}}lheading(t){const n=this.rules.block.lheading.exec(t);if(n)return{type:"heading",raw:n[0],depth:n[2].charAt(0)==="="?1:2,text:n[1],tokens:this.lexer.inline(n[1])}}paragraph(t){const n=this.rules.block.paragraph.exec(t);if(n){const r=n[1].charAt(n[1].length-1)===`
`?n[1].slice(0,-1):n[1];return{type:"paragraph",raw:n[0],text:r,tokens:this.lexer.inline(r)}}}text(t){const n=this.rules.block.text.exec(t);if(n)return{type:"text",raw:n[0],text:n[0],tokens:this.lexer.inline(n[0])}}escape(t){const n=this.rules.inline.escape.exec(t);if(n)return{type:"escape",raw:n[0],text:$e(n[1])}}tag(t){const n=this.rules.inline.tag.exec(t);if(n)return!this.lexer.state.inLink&&/^<a /i.test(n[0])?this.lexer.state.inLink=!0:this.lexer.state.inLink&&/^<\/a>/i.test(n[0])&&(this.lexer.state.inLink=!1),!this.lexer.state.inRawBlock&&/^<(pre|code|kbd|script)(\s|>)/i.test(n[0])?this.lexer.state.inRawBlock=!0:this.lexer.state.inRawBlock&&/^<\/(pre|code|kbd|script)(\s|>)/i.test(n[0])&&(this.lexer.state.inRawBlock=!1),{type:"html",raw:n[0],inLink:this.lexer.state.inLink,inRawBlock:this.lexer.state.inRawBlock,block:!1,text:n[0]}}link(t){const n=this.rules.inline.link.exec(t);if(n){const r=n[2].trim();if(!this.options.pedantic&&/^</.test(r)){if(!/>$/.test(r))return;const o=$l(r.slice(0,-1),"\\");if((r.length-o.length)%2===0)return}else{const o=Um(n[2],"()");if(o>-1){const u=(n[0].indexOf("!")===0?5:4)+n[1].length+o;n[2]=n[2].substring(0,o),n[0]=n[0].substring(0,u).trim(),n[3]=""}}let l=n[2],i="";if(this.options.pedantic){const o=/^([^'"]*[^\s])\s+(['"])(.*)\2/.exec(l);o&&(l=o[1],i=o[3])}else i=n[3]?n[3].slice(1,-1):"";return l=l.trim(),/^</.test(l)&&(this.options.pedantic&&!/>$/.test(r)?l=l.slice(1):l=l.slice(1,-1)),sc(n,{href:l&&l.replace(this.rules.inline.anyPunctuation,"$1"),title:i&&i.replace(this.rules.inline.anyPunctuation,"$1")},n[0],this.lexer)}}reflink(t,n){let r;if((r=this.rules.inline.reflink.exec(t))||(r=this.rules.inline.nolink.exec(t))){const l=(r[2]||r[1]).replace(/\s+/g," "),i=n[l.toLowerCase()];if(!i){const o=r[0].charAt(0);return{type:"text",raw:o,text:o}}return sc(r,i,r[0],this.lexer)}}emStrong(t,n,r=""){let l=this.rules.inline.emStrongLDelim.exec(t);if(!l||l[3]&&r.match(/[\p{L}\p{N}]/u))return;if(!(l[1]||l[2]||"")||!r||this.rules.inline.punctuation.exec(r)){const o=[...l[0]].length-1;let s,u,a=o,m=0;const g=l[0][0]==="*"?this.rules.inline.emStrongRDelimAst:this.rules.inline.emStrongRDelimUnd;for(g.lastIndex=0,n=n.slice(-1*t.length+o);(l=g.exec(n))!=null;){if(s=l[1]||l[2]||l[3]||l[4]||l[5]||l[6],!s)continue;if(u=[...s].length,l[3]||l[4]){a+=u;continue}else if((l[5]||l[6])&&o%3&&!((o+u)%3)){m+=u;continue}if(a-=u,a>0)continue;u=Math.min(u,u+a+m);const d=[...l[0]][0].length,y=t.slice(0,o+l.index+d+u);if(Math.min(o,u)%2){const k=y.slice(1,-1);return{type:"em",raw:y,text:k,tokens:this.lexer.inlineTokens(k)}}const w=y.slice(2,-2);return{type:"strong",raw:y,text:w,tokens:this.lexer.inlineTokens(w)}}}}codespan(t){const n=this.rules.inline.code.exec(t);if(n){let r=n[2].replace(/\n/g," ");const l=/[^ ]/.test(r),i=/^ /.test(r)&&/ $/.test(r);return l&&i&&(r=r.substring(1,r.length-1)),r=$e(r,!0),{type:"codespan",raw:n[0],text:r}}}br(t){const n=this.rules.inline.br.exec(t);if(n)return{type:"br",raw:n[0]}}del(t){const n=this.rules.inline.del.exec(t);if(n)return{type:"del",raw:n[0],text:n[2],tokens:this.lexer.inlineTokens(n[2])}}autolink(t){const n=this.rules.inline.autolink.exec(t);if(n){let r,l;return n[2]==="@"?(r=$e(n[1]),l="mailto:"+r):(r=$e(n[1]),l=r),{type:"link",raw:n[0],text:r,href:l,tokens:[{type:"text",raw:r,text:r}]}}}url(t){var r;let n;if(n=this.rules.inline.url.exec(t)){let l,i;if(n[2]==="@")l=$e(n[0]),i="mailto:"+l;else{let o;do o=n[0],n[0]=((r=this.rules.inline._backpedal.exec(n[0]))==null?void 0:r[0])??"";while(o!==n[0]);l=$e(n[0]),n[1]==="www."?i="http://"+n[0]:i=n[0]}return{type:"link",raw:n[0],text:l,href:i,tokens:[{type:"text",raw:l,text:l}]}}}inlineText(t){const n=this.rules.inline.text.exec(t);if(n){let r;return this.lexer.state.inRawBlock?r=n[0]:r=$e(n[0]),{type:"text",raw:n[0],text:r}}}}const Hm=/^(?: *(?:\n|$))+/,Bm=/^( {4}[^\n]+(?:\n(?: *(?:\n|$))*)?)+/,Wm=/^ {0,3}(`{3,}(?=[^`\n]*(?:\n|$))|~{3,})([^\n]*)(?:\n|$)(?:|([\s\S]*?)(?:\n|$))(?: {0,3}\1[~`]* *(?=\n|$)|$)/,gl=/^ {0,3}((?:-[\t ]*){3,}|(?:_[ \t]*){3,}|(?:\*[ \t]*){3,})(?:\n+|$)/,Vm=/^ {0,3}(#{1,6})(?=\s|$)(.*)(?:\n+|$)/,Dd=/(?:[*+-]|\d{1,9}[.)])/,Md=Q(/^(?!bull |blockCode|fences|blockquote|heading|html)((?:.|\n(?!\s*?\n|bull |blockCode|fences|blockquote|heading|html))+?)\n {0,3}(=+|-+) *(?:\n+|$)/).replace(/bull/g,Dd).replace(/blockCode/g,/ {4}/).replace(/fences/g,/ {0,3}(?:`{3,}|~{3,})/).replace(/blockquote/g,/ {0,3}>/).replace(/heading/g,/ {0,3}#{1,6}/).replace(/html/g,/ {0,3}<[^\n>]+>\n/).getRegex(),Cu=/^([^\n]+(?:\n(?!hr|heading|lheading|blockquote|fences|list|html|table| +\n)[^\n]+)*)/,Qm=/^[^\n]+/,Nu=/(?!\s*\])(?:\\.|[^\[\]\\])+/,Gm=Q(/^ {0,3}\[(label)\]: *(?:\n *)?([^<\s][^\s]*|<.*?>)(?:(?: +(?:\n *)?| *\n *)(title))? *(?:\n+|$)/).replace("label",Nu).replace("title",/(?:"(?:\\"?|[^"\\])*"|'[^'\n]*(?:\n[^'\n]+)*\n?'|\([^()]*\))/).getRegex(),Ym=Q(/^( {0,3}bull)([ \t][^\n]+?)?(?:\n|$)/).replace(/bull/g,Dd).getRegex(),Gi="address|article|aside|base|basefont|blockquote|body|caption|center|col|colgroup|dd|details|diLine truncated
]`).replace("lheading",Md).replace("|table","").replace("blockquote"," {0,3}>").replace("|fences","").replace("|list","").replace("|html","").replace("|tag","").getRegex()},Fd=/^\\([!"#$%&'()*+,\-./:;<=>?@\[\]\\^_`{|}~])/,Jm=/^(`+)([^`]|[^`][\s\S]*?[^`])\1(?!`)/,Ud=/^( {2,}|\\)\n(?!\s*$)/,bm=/^(`+|[^`])(?:(?= {2,}\n)|[\s\S]*?(?:(?=[\\<!\[`*_]|\b_|$)|[^ ](?= {2,}\n)))/,yl="\\p{P}\\p{S}",eg=Q(/^((?![*_])[\spunctuation])/,"u").replace(/punctuation/g,yl).getRegex(),tg=/\[[^[\]]*?\]\([^\(\)]*?\)|`[^`]*?`|<[^<>]*?>/g,ng=Q(/^(?:\*+(?:((?!\*)[punct])|[^\s*]))|^_+(?:((?!_)[punct])|([^\s_]))/,"u").replace(/punct/g,yl).getRegex(),rg=Q("^[^_*]*?__[^_*]*?\\*[^_*]*?(?=__)|[^*]+(?=[^*])|(?!\\*)[punct](\\*+)(?=[\\s]|$)|[^punct\\s](\\*+)(?!\\*)(?=[punct\\s]|$)|(?!\\*)[punct\\s](\\*+)(?=[^punct\\s])|[\\s](\\*+)(?!\\*)(?=[punct])|(?!\\*)[punct](\\*+)(?!\\*)(?=[punct])|[^punct\\s](\\*+)(?=[^punct\\s])","gu").replace(/punct/g,yl).getRegex(),lg=Q("^[^_*]*?\\*\\*[^_*]*?_[^_*]*?(?=\\*\\*)|[^_]+(?=[^_])|(?!_)[punct](_+)(?=[\\s]|$)|[^punct\\s](_+)(?!_)(?=[punct\\s]|$)|(?!_)[punct\\s](_+)(?=[^punct\\s])|[\\s](_+)(?!_)(?=[punct])|(?!_)[punct](_+)(?!_)(?=[punct])","gu").replace(/punct/g,yl).getRegex(),ig=Q(/\\([punct])/,"gu").replace(/punct/g,yl).getRegex(),og=Q(/^<(scheme:[^\s\x00-\x1f<>]*|email)>/).replace("scheme",/[a-zA-Z][a-zA-Z0-9+.-]{1,31}/).replace("email",/[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+(@)[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)+(?![-_])/).getRegex(),sg=Q(Ru).replace("(?:-->|$)","-->").getRegex(),ug=Q("^comment|^</[a-zA-Z][\\w:-]*\\s*>|^<[a-zA-Z][\\w-]*(?:attribute)*?\\s*/?>|^<\\?[\\s\\S]*?\\?>|^<![a-zA-Z]+\\s[\\s\\S]*?>|^<!\\[CDATA\\[[\\s\\S]*?\\]\\]>").replace("comment",sg).replace("attribute",/\s+[a-zA-Z:_][\w.:-]*(?:\s*=\s*"[^"]*"|\s*=\s*'[^']*'|\s*=\s*[^\s"'=<>`]+)?/).getRegex(),Ai=/(?:\[(?:\\.|[^\[\]\\])*\]|\\.|`[^`]*`|[^\[\]\\`])*?/,ag=Q(/^!?\[(label)\]\(\s*(href)(?:\s+(title))?\s*\)/).replace("label",Ai).replace("href",/<(?:\\.|[^\n<>\\])+>|[^\s\x00-\x1f]*/).replace("title",/"(?:\\"?|[^"\\])*"|'(?:\\'?|[^'\\])*'|\((?:\\\)?|[^)\\])*\)/).getRegex(),$d=Q(/^!?\[(label)\]\[(ref)\]/).replace("label",Ai).replace("ref",Nu).getRegex(),Hd=Q(/^!?\[(ref)\](?:\[\])?/).replace("ref",Nu).getRegex(),cg=Q("reflink|nolink(?!\\()","g").replace("reflink",$d).replace("nolink",Hd).getRegex(),Lu={_backpedal:Qr,anyPunctuation:ig,autolink:og,blockSkip:tg,br:Ud,code:Jm,del:Qr,emStrongLDelim:ng,emStrongRDelimAst:rg,emStrongRDelimUnd:lg,escape:Fd,link:ag,nolink:Hd,punctuation:eg,reflink:$d,reflinkSearch:cg,tag:ug,text:bm,url:Qr},fg={...Lu,link:Q(/^!?\[(label)\]\((.*?)\)/).replace("label",Ai).getRegex(),reflink:Q(/^!?\[(label)\]\s*\[([^\]]*)\]/).replace("label",Ai).getRegex()},Ns={...Lu,escape:Q(Fd).replace("])","~|])").getRegex(),url:Q(/^((?:ftp|https?):\/\/|www\.)(?:[a-zA-Z0-9\-]+\.?)+[^\s<]*|^email/,"i").replace("email",/[A-Za-z0-9._+-]+(@)[a-zA-Z0-9-_]+(?:\.[a-zA-Z0-9-_]*[a-zA-Z0-9])+(?![-_])/).getRegex(),_backpedal:/(?:[^?!.,:;*_'"~()&]+|\([^)]*\)|&(?![a-zA-Z0-9]+;$)|[?!.,:;*_'"~)]+(?!$))+/,del:/^(~~?)(?=[^\s~])([\s\S]*?[^\s~])\1(?=[^~]|$)/,text:/^([`~]+|[^`~])(?:(?= {2,}\n)|(?=[a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-]+@)|[\s\S]*?(?:(?=[\\<!\[`*~_]|\b_|https?:\/\/|ftp:\/\/|www\.|$)|[^ ](?= {2,}\n)|[^a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-](?=[a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-]+@)))/},dg={...Ns,br:Q(Ud).replace("{2,}","*").getRegex(),text:Q(Ns.text).replace("\\b_","\\b_| {2,}\\n").replace(/\{2,\}/g,"*").getRegex()},Hl={normal:Au,gfm:Zm,pedantic:qm},Cr={normal:Lu,gfm:Ns,breaks:dg,pedantic:fg};class kt{constructor(t){G(this,"tokens");G(this,"options");G(this,"state");G(this,"tokenizer");G(this,"inlineQueue");this.tokens=[],this.tokens.links=Object.create(null),this.options=t||Cn,this.options.tokenizer=this.options.tokenizer||new Ri,this.tokenizer=this.options.tokenizer,this.tokenizer.options=this.options,this.tokenizer.lexer=this,this.inlineQueue=[],this.state={inLink:!1,inRawBlock:!1,top:!0};const n={block:Hl.normal,inline:Cr.normal};this.options.pedantic?(n.block=Hl.pedantic,n.inline=Cr.pedantic):this.options.gfm&&(n.block=Hl.gfm,this.options.breaks?n.inline=Cr.breaks:n.inline=Cr.gfm),this.tokenizer.rules=n}static get rules(){return{block:Hl,inline:Cr}}static lex(t,n){return new kt(n).lex(t)}static lexInline(t,n){return new kt(n).inlineTokens(t)}lex(t){t=t.replace(/\r\n|\r/g,`
`),this.blockTokens(t,this.tokens);for(let n=0;n<this.inlineQueue.length;n++){const r=this.inlineQueue[n];this.inlineTokens(r.src,r.tokens)}return this.inlineQueue=[],this.tokens}blockTokens(t,n=[]){this.options.pedantic?t=t.replace(/\t/g," ").replace(/^ +$/gm,""):t=t.replace(/^( *)(\t+)/gm,(s,u,a)=>u+" ".repeat(a.length));let r,l,i,o;for(;t;)if(!(this.options.extensions&&this.options.extensions.block&&this.options.extensions.block.some(s=>(r=s.call({lexer:this},t,n))?(t=t.substring(r.raw.length),n.push(r),!0):!1))){if(r=this.tokenizer.space(t)){t=t.substring(r.raw.length),r.raw.length===1&&n.length>0?n[n.length-1].raw+=`
`:n.push(r);continue}if(r=this.tokenizer.code(t)){t=t.substring(r.raw.length),l=n[n.length-1],l&&(l.type==="paragraph"||l.type==="text")?(l.raw+=`
`+r.raw,l.text+=`
`+r.text,this.inlineQueue[this.inlineQueue.length-1].src=l.text):n.push(r);continue}if(r=this.tokenizer.fences(t)){t=t.substring(r.raw.length),n.push(r);continue}if(r=this.tokenizer.heading(t)){t=t.substring(r.raw.length),n.push(r);continue}if(r=this.tokenizer.hr(t)){t=t.substring(r.raw.length),n.push(r);continue}if(r=this.tokenizer.blockquote(t)){t=t.substring(r.raw.length),n.push(r);continue}if(r=this.tokenizer.list(t)){t=t.substring(r.raw.length),n.push(r);continue}if(r=this.tokenizer.html(t)){t=t.substring(r.raw.length),n.push(r);continue}if(r=this.tokenizer.def(t)){t=t.substring(r.raw.length),l=n[n.length-1],l&&(l.type==="paragraph"||l.type==="text")?(l.raw+=`
`+r.raw,l.text+=`
`+r.raw,this.inlineQueue[this.inlineQueue.length-1].src=l.text):this.tokens.links[r.tag]||(this.tokens.links[r.tag]={href:r.href,title:r.title});continue}if(r=this.tokenizer.table(t)){t=t.substring(r.raw.length),n.push(r);continue}if(r=this.tokenizer.lheading(t)){t=t.substring(r.raw.length),n.push(r);continue}if(i=t,this.options.extensions&&this.options.extensions.startBlock){let s=1/0;const u=t.slice(1);let a;this.options.extensions.startBlock.forEach(m=>{a=m.call({lexer:this},u),typeof a=="number"&&a>=0&&(s=Math.min(s,a))}),s<1/0&&s>=0&&(i=t.substring(0,s+1))}if(this.state.top&&(r=this.tokenizer.paragraph(i))){l=n[n.length-1],o&&l.type==="paragraph"?(l.raw+=`
`+r.raw,l.text+=`
`+r.text,this.inlineQueue.pop(),this.inlineQueue[this.inlineQueue.length-1].src=l.text):n.push(r),o=i.length!==t.length,t=t.substring(r.raw.length);continue}if(r=this.tokenizer.text(t)){t=t.substring(r.raw.length),l=n[n.length-1],l&&l.type==="text"?(l.raw+=`
`+r.raw,l.text+=`
`+r.text,this.inlineQueue.pop(),this.inlineQueue[this.inlineQueue.length-1].src=l.text):n.push(r);continue}if(t){const s="Infinite loop on byte: "+t.charCodeAt(0);if(this.options.silent){console.error(s);break}else throw new Error(s)}}return this.state.top=!0,n}inline(t,n=[]){return this.inlineQueue.push({src:t,tokens:n}),n}inlineTokens(t,n=[]){let r,l,i,o=t,s,u,a;if(this.tokens.links){const m=Object.keys(this.tokens.links);if(m.length>0)for(;(s=this.tokenizer.rules.inline.reflinkSearch.exec(o))!=null;)m.includes(s[0].slice(s[0].lastIndexOf("[")+1,-1))&&(o=o.slice(0,s.index)+"["+"a".repeat(s[0].length-2)+"]"+o.slice(this.tokenizer.rules.inline.reflinkSearch.lastIndex))}for(;(s=this.tokenizer.rules.inline.blockSkip.exec(o))!=null;)o=o.slice(0,s.index)+"["+"a".repeat(s[0].length-2)+"]"+o.slice(this.tokenizer.rules.inline.blockSkip.lastIndex);for(;(s=this.tokenizer.rules.inline.anyPunctuation.exec(o))!=null;)o=o.slice(0,s.index)+"++"+o.slice(this.tokenizer.rules.inline.anyPunctuation.lastIndex);for(;t;)if(u||(a=""),u=!1,!(this.options.extensions&&this.options.extensions.inline&&this.options.extensions.inline.some(m=>(r=m.call({lexer:this},t,n))?(t=t.substring(r.raw.length),n.push(r),!0):!1))){if(r=this.tokenizer.escape(t)){t=t.substring(r.raw.length),n.push(r);continue}if(r=this.tokenizer.tag(t)){t=t.substring(r.raw.length),l=n[n.length-1],l&&r.type==="text"&&l.type==="text"?(l.raw+=r.raw,l.text+=r.text):n.push(r);continue}if(r=this.tokenizer.link(t)){t=t.substring(r.raw.length),n.push(r);continue}if(r=this.tokenizer.reflink(t,this.tokens.links)){t=t.substring(r.raw.length),l=n[n.length-1],l&&r.type==="text"&&l.type==="text"?(l.raw+=r.raw,l.text+=r.text):n.push(r);continue}if(r=this.tokenizer.emStrong(t,o,a)){t=t.substring(r.raw.length),n.push(r);continue}if(r=this.tokenizer.codespan(t)){t=t.substring(r.raw.length),n.push(r);continue}if(r=this.tokenizer.br(t)){t=t.substring(r.raw.length),n.push(r);continue}if(r=this.tokenizer.del(t)){t=t.substring(r.raw.length),n.push(r);continue}if(r=this.tokenizer.autolink(t)){t=t.substring(r.raw.length),n.push(r);continue}if(!this.state.inLink&&(r=this.tokenizer.url(t))){t=t.substring(r.raw.length),n.push(r);continue}if(i=t,this.options.extensions&&this.options.extensions.startInline){let m=1/0;const g=t.slice(1);let d;this.options.extensions.startInline.forEach(y=>{d=y.call({lexer:this},g),typeof d=="number"&&d>=0&&(m=Math.min(m,d))}),m<1/0&&m>=0&&(i=t.substring(0,m+1))}if(r=this.tokenizer.inlineText(i)){t=t.substring(r.raw.length),r.raw.slice(-1)!=="_"&&(a=r.raw.slice(-1)),u=!0,l=n[n.length-1],l&&l.type==="text"?(l.raw+=r.raw,l.text+=r.text):n.push(r);continue}if(t){const m="Infinite loop on byte: "+t.charCodeAt(0);if(this.options.silent){console.error(m);break}else throw new Error(m)}}return n}}class cl{constructor(t){G(this,"options");this.options=t||Cn}code(t,n,r){var i;const l=(i=(n||"").match(/^\S*/))==null?void 0:i[0];return t=t.replace(/\n$/,"")+`
`,l?'<pre><code class="language-'+$e(l)+'">'+(r?t:$e(t,!0))+`</code></pre>
`:"<pre><code>"+(r?t:$e(t,!0))+`</code></pre>
`}blockquote(t){return`<blockquote>
${t}</blockquote>
`}html(t,n){return t}heading(t,n,r){return`<h${n}>${t}</h${n}>
`}hr(){return`<hr>
`}list(t,n,r){const l=n?"ol":"ul",i=n&&r!==1?' start="'+r+'"':"";return"<"+l+i+`>
`+t+"</"+l+`>
`}listitem(t,n,r){return`<li>${t}</li>
`}checkbox(t){return"<input "+(t?'checked="" ':"")+'disabled="" type="checkbox">'}paragraph(t){return`<p>${t}</p>
`}table(t,n){return n&&(n=`<tbody>${n}</tbody>`),`<table>
<thead>
`+t+`</thead>
`+n+`</table>
`}tablerow(t){return`<tr>
${t}</tr>
`}tablecell(t,n){const r=n.header?"th":"td";return(n.align?`<${r} align="${n.align}">`:`<${r}>`)+t+`</${r}>
`}strong(t){return`<strong>${t}</strong>`}em(t){return`<em>${t}</em>`}codespan(t){return`<code>${t}</code>`}br(){return"<br>"}del(t){return`<del>${t}</del>`}link(t,n,r){const l=ic(t);if(l===null)return r;t=l;let i='<a href="'+t+'"';return n&&(i+=' title="'+n+'"'),i+=">"+r+"</a>",i}image(t,n,r){const l=ic(t);if(l===null)return r;t=l;let i=`<img src="${t}" alt="${r}"`;return n&&(i+=` title="${n}"`),i+=">",i}text(t){return t}}class Pu{strong(t){return t}em(t){return t}codespan(t){return t}del(t){return t}html(t){return t}text(t){return t}link(t,n,r){return""+r}image(t,n,r){return""+r}br(){return""}}class wt{constructor(t){G(this,"options");G(this,"renderer");G(this,"textRenderer");this.options=t||Cn,this.options.renderer=this.options.renderer||new cl,this.renderer=this.options.renderer,this.renderer.options=this.options,this.textRenderer=new Pu}static parse(t,n){return new wt(n).parse(t)}static parseInline(t,n){return new wt(n).parseInline(t)}parse(t,n=!0){let r="";for(let l=0;l<t.length;l++){const i=t[l];if(this.options.extensions&&this.options.extensions.renderers&&this.options.extensions.renderers[i.type]){const o=i,s=this.options.extensions.renderers[o.type].call({parser:this},o);if(s!==!1||!["space","hr","heading","code","table","blockquote","list","html","paragraph","text"].includes(o.type)){r+=s||"";continue}}switch(i.type){case"space":continue;case"hr":{r+=this.renderer.hr();continue}case"heading":{const o=i;r+=this.renderer.heading(this.parseInline(o.tokens),o.depth,jm(this.parseInline(o.tokens,this.textRenderer)));continue}case"code":{const o=i;r+=this.renderer.code(o.text,o.lang,!!o.escaped);continue}case"table":{const o=i;let s="",u="";for(let m=0;m<o.header.length;m++)u+=this.renderer.tablecell(this.parseInline(o.header[m].tokens),{header:!0,align:o.align[m]});s+=this.renderer.tablerow(u);let a="";for(let m=0;m<o.rows.length;m++){const g=o.rows[m];u="";for(let d=0;d<g.length;d++)u+=this.renderer.tablecell(this.parseInline(g[d].tokens),{header:!1,align:o.align[d]});a+=this.renderer.tablerow(u)}r+=this.renderer.table(s,a);continue}case"blockquote":{const o=i,s=this.parse(o.tokens);r+=this.renderer.blockquote(s);continue}case"list":{const o=i,s=o.ordered,u=o.start,a=o.loose;let m="";for(let g=0;g<o.items.length;g++){const d=o.items[g],y=d.checked,w=d.task;let k="";if(d.task){const O=this.renderer.checkbox(!!y);a?d.tokens.length>0&&d.tokens[0].type==="paragraph"?(d.tokens[0].text=O+" "+d.tokens[0].text,d.tokens[0].tokens&&d.tokens[0].tokens.length>0&&d.tokens[0].tokens[0].type==="text"&&(d.tokens[0].tokens[0].text=O+" "+d.tokens[0].tokens[0].text)):d.tokens.unshift({type:"text",text:O+" "}):k+=O+" "}k+=this.parse(d.tokens,a),m+=this.renderer.listitem(k,w,!!y)}r+=this.renderer.list(m,s,u);continue}case"html":{const o=i;r+=this.renderer.html(o.text,o.block);continue}case"paragraph":{const o=i;r+=this.renderer.paragraph(this.parseInline(o.tokens));continue}case"text":{let o=i,s=o.tokens?this.parseInline(o.tokens):o.text;for(;l+1<t.length&&t[l+1].type==="text";)o=t[++l],s+=`
`+(o.tokens?this.parseInline(o.tokens):o.text);r+=n?this.renderer.paragraph(s):s;continue}default:{const o='Token with "'+i.type+'" type was not found.';if(this.options.silent)return console.error(o),"";throw new Error(o)}}}return r}parseInline(t,n){n=n||this.renderer;let r="";for(let l=0;l<t.length;l++){const i=t[l];if(this.options.extensions&&this.options.extensions.renderers&&this.options.extensions.renderers[i.type]){const o=this.options.extensions.renderers[i.type].call({parser:this},i);if(o!==!1||!["escape","html","link","image","strong","em","codespan","br","del","text"].includes(i.type)){r+=o||"";continue}}switch(i.type){case"escape":{const o=i;r+=n.text(o.text);break}case"html":{const o=i;r+=n.html(o.text);break}case"link":{const o=i;r+=n.link(o.href,o.title,this.parseInline(o.tokens,n));break}case"image":{const o=i;r+=n.image(o.href,o.title,o.text);break}case"strong":{const o=i;r+=n.strong(this.parseInline(o.tokens,n));break}case"em":{const o=i;r+=n.em(this.parseInline(o.tokens,n));break}case"codespan":{const o=i;r+=n.codespan(o.text);break}case"br":{r+=n.br();break}case"del":{const o=i;r+=n.del(this.parseInline(o.tokens,n));break}case"text":{const o=i;r+=n.text(o.text);break}default:{const o='Token with "'+i.type+'" type was not found.';if(this.options.silent)return console.error(o),"";throw new Error(o)}}}return r}}class Gr{constructor(t){G(this,"options");this.options=t||Cn}preprocess(t){return t}postprocess(t){return t}processAllTokens(t){return t}}G(Gr,"passThroughHooks",new Set(["preprocess","postprocess","processAllTokens"]));var xn,Rs,Bd;class pg{constructor(...t){Xu(this,xn);G(this,"defaults",Tu());G(this,"options",this.setOptions);G(this,"parse",El(this,xn,Rs).call(this,kt.lex,wt.parse));G(this,"parseInline",El(this,xn,Rs).call(this,kt.lexInline,wt.parseInline));G(this,"Parser",wt);G(this,"Renderer",cl);G(this,"TextRenderer",Pu);G(this,"Lexer",kt);G(this,"Tokenizer",Ri);G(this,"Hooks",Gr);this.use(...t)}walkTokens(t,n){var l,i;let r=[];for(const o of t)switch(r=r.concat(n.call(this,o)),o.type){case"table":{const s=o;for(const u of s.header)r=r.concat(this.walkTokens(u.tokens,n));for(const u of s.rows)for(const a of u)r=r.concat(this.walkTokens(a.tokens,n));break}case"list":{const s=o;r=r.concat(this.walkTokens(s.items,n));break}default:{const s=o;(i=(l=this.defaults.extensions)==null?void 0:l.childTokens)!=null&&i[s.type]?this.defaults.extensions.childTokens[s.type].forEach(u=>{const a=s[u].flat(1/0);r=r.concat(this.walkTokens(a,n))}):s.tokens&&(r=r.concat(this.walkTokens(s.tokens,n)))}}return r}use(...t){const n=this.defaults.extensions||{renderers:{},childTokens:{}};return t.forEach(r=>{const l={...r};if(l.async=this.defaults.async||l.async||!1,r.extensions&&(r.extensions.forEach(i=>{if(!i.name)throw new Error("extension name required");if("renderer"in i){const o=n.renderers[i.name];o?n.renderers[i.name]=function(...s){let u=i.renderer.apply(this,s);return u===!1&&(u=o.apply(this,s)),u}:n.renderers[i.name]=i.renderer}if("tokenizer"in i){if(!i.level||i.level!=="block"&&i.level!=="inline")throw new Error("extension level must be 'block' or 'inline'");const o=n[i.level];o?o.unshift(i.tokenizer):n[i.level]=[i.tokenizer],i.start&&(i.level==="block"?n.startBlock?n.startBlock.push(i.start):n.startBlock=[i.start]:i.level==="inline"&&(n.startInline?n.startInline.push(i.start):n.startInline=[i.start]))}"childTokens"in i&&i.childTokens&&(n.childTokens[i.name]=i.childTokens)}),l.extensions=n),r.renderer){const i=this.defaults.renderer||new cl(this.defaults);for(const o in r.renderer){if(!(o in i))throw new Error(`renderer '${o}' does not exist`);if(o==="options")continue;const s=o,u=r.renderer[s],a=i[s];i[s]=(...m)=>{let g=u.apply(i,m);return g===!1&&(g=a.apply(i,m)),g||""}}l.renderer=i}if(r.tokenizer){const i=this.defaults.tokenizer||new Ri(this.defaults);for(const o in r.tokenizer){if(!(o in i))throw new Error(`tokenizer '${o}' does not exist`);if(["options","rules","lexer"].includes(o))continue;const s=o,u=r.tokenizer[s],a=i[s];i[s]=(...m)=>{let g=u.apply(i,m);return g===!1&&(g=a.apply(i,m)),g}}l.tokenizer=i}if(r.hooks){const i=this.defaults.hooks||new Gr;for(const o in r.hooks){if(!(o in i))throw new Error(`hook '${o}' does not exist`);if(o==="options")continue;const s=o,u=r.hooks[s],a=i[s];Gr.passThroughHooks.has(o)?i[s]=m=>{if(this.defaults.async)return Promise.resolve(u.call(i,m)).then(d=>a.call(i,d));const g=u.call(i,m);return a.call(i,g)}:i[s]=(...m)=>{let g=u.apply(i,m);return g===!1&&(g=a.apply(i,m)),g}}l.hooks=i}if(r.walkTokens){const i=this.defaults.walkTokens,o=r.walkTokens;l.walkTokens=function(s){let u=[];return u.push(o.call(this,s)),i&&(u=u.concat(i.call(this,s))),u}}this.defaults={...this.defaults,...l}}),this}setOptions(t){return this.defaults={...this.defaults,...t},this}lexer(t,n){return kt.lex(t,n??this.defaults)}parser(t,n){return wt.parse(t,n??this.defaults)}}xn=new WeakSet,Rs=function(t,n){return(r,l)=>{const i={...l},o={...this.defaults,...i};this.defaults.async===!0&&i Line truncated
Please report this to https://github.com/markedjs/marked.`,t){const l="<p>An error occurred:</p><pre>"+$e(r.message+"",!0)+"</pre>";return n?Promise.resolve(l):l}if(n)return Promise.reject(r);throw r}};const En=new pg;function H(e,t){return En.parse(e,t)}H.options=H.setOptions=function(e){return En.setOptions(e),H.defaults=En.defaults,Od(H.defaults),H};H.getDefaults=Tu;H.defaults=Cn;H.use=function(...e){return En.use(...e),H.defaults=En.defaults,Od(H.defaults),H};H.walkTokens=function(e,t){return En.walkTokens(e,t)};H.parseInline=En.parseInline;H.Parser=wt;H.parser=wt.parse;H.Renderer=cl;H.TextRenderer=Pu;H.Lexer=kt;H.lexer=kt.lex;H.Tokenizer=Ri;H.Hooks=Gr;H.parse=H;H.options;H.setOptions;H.use;H.walkTokens;H.parseInline;wt.parse;kt.lex;/*! @license DOMPurify 3.3.3 | (c) Cure53 and other contributors | Released under the Apache license 2.0 and Mozilla Public License 2.0 | github.com/cure53/DOMPurify/blob/3.3.3/LICENSE */const{entries:Wd,setPrototypeOf:ac,isFrozen:hg,getPrototypeOf:mg,getOwnPropertyDescriptor:gg}=Object;let{freeze:Ne,seal:nt,create:ni}=Object,{apply:As,construct:Ls}=typeof Reflect<"u"&&Reflect;Ne||(Ne=function(t){return t});nt||(nt=function(t){return t});As||(As=function(t,n){for(var r=arguments.length,l=new Array(r>2?r-2:0),i=2;i<r;i++)l[i-2]=arguments[i];return t.apply(n,l)});Ls||(Ls=function(t){for(var n=arguments.length,r=new Array(n>1?n-1:0),l=1;l<n;l++)r[l-1]=arguments[l];return new t(...r)});const Bl=Re(Array.prototype.forEach),yg=Re(Array.prototype.lastIndexOf),cc=Re(Array.prototype.pop),Nr=Re(Array.prototype.push),vg=Re(Array.prototype.splice),ri=Re(String.prototype.toLowerCase),No=Re(String.prototype.toString),Ro=Re(String.prototype.match),Rr=Re(String.prototype.replace),kg=Re(String.prototype.indexOf),wg=Re(String.prototype.trim),Fe=Re(Object.prototype.hasOwnProperty),_e=Re(RegExp.prototype.test),Ar=Sg(TypeError);function Re(e){return function(t){t instanceof RegExp&&(t.lastIndex=0);for(var n=arguments.length,r=new Array(n>1?n-1:0),l=1;l<n;l++)r[l-1]=arguments[l];return As(e,t,r)}}function Sg(e){return function(){for(var t=arguments.length,n=new Array(t),r=0;r<t;r++)n[r]=arguments[r];return Ls(e,n)}}function F(e,t){let n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:ri;ac&&ac(e,null);let r=t.length;for(;r--;){let l=t[r];if(typeof l=="string"){const i=n(l);i!==l&&(hg(t)||(t[r]=i),l=i)}e[l]=!0}return e}function Eg(e){for(let t=0;t<e.length;t++)Fe(e,t)||(e[t]=null);return e}function gt(e){const t=ni(null);for(const[n,r]of Wd(e))Fe(e,n)&&(Array.isArray(r)?t[n]=Eg(r):r&&typeof r=="object"&&r.constructor===Object?t[n]=gt(r):t[n]=r);return t}function Lr(e,t){for(;e!==null;){const r=gg(e,t);if(r){if(r.get)return Re(r.get);if(typeof r.value=="function")return Re(r.value)}e=mg(e)}function n(){return null}return n}const fc=Ne(["a","abbr","acronym","address","area","article","aside","audio","b","bdi","bdo","big","blink","blockquote","body","br","button","canvas","caption","center","cite","code","col","colgroup","content","data","datalist","dd","decorator","del","details","dfn","dialog","dir","div","dl","dt","element","em","fieldset","figcaption","figure","font","footer","form","h1","h2","h3","h4","h5","h6","head","header","hgroup","hr","html","i","img","input","ins","kbd","label","legend","li","main","map","mark","marquee","menu","menuitem","meter","nav","nobr","ol","optgroup","option","output","p","picture","pre","progress","q","rp","rt","ruby","s","samp","search","section","select","shadow","slot","small","source","spacer","span","strike","strong","style","sub","summary","sup","table","tbody","td","template","textarea","tfoot","th","thead","time","tr","track","tt","u","ul","var","video","wbr"]),Ao=Ne(["svg","a","altglyph","altglyphdef","altglyphitem","animatecolor","animatemotion","animatetransform","circle","clippath","defs","desc","ellipse","enterkeyhint","exportparts","filter","font","g","glyph","glyphref","hkern","image","inputmode","line","lineargradient","marker","mask","metadata","mpath","part","path","pattern","polygon","polyline","radialgradient","rect","stop","style","switch","symbol","text","textpath","title","tref","tspan","view","vkern"]),Lo=Ne(["feBlend","feColorMatrix","feComponentTransfer","feComposite","feConvolveMatrix","feDiffuseLighting","feDisplacementMap","feDistantLight","feDropShadow","feFlood","feFuncA","feFuncB","feFuncG","feFuncR","feGaussianBlur","feImage","feMerge","feMergeNode","feMorphology","feOffset","fePointLight","feSpecularLighting","feSpotLight","feTile","feTurbulence"]),xg=Ne(["animate","color-profile","cursor","discard","font-face","font-face-format","font-face-name","font-face-src","font-face-uri","foreignobject","hatch","hatchpath","mesh","meshgradient","meshpatch","meshrow","missing-glyph","script","set","solidcolor","unknown","use"]),Po=Ne(["math","menclose","merror","mfenced","mfrac","mglyph","mi","mlabeledtr","mmultiscripts","mn","mo","mover","mpadded","mphantom","mroot","mrow","ms","mspace","msqrt","mstyle","msub","msup","msubsup","mta Line truncated
`+Pe),lt&&Bl([Ge,Ye,xt],Ct=>{Pe=Rr(Pe,Ct," ")}),v&&un?v.createHTML(Pe):Pe},t.setConfig=function(){let z=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};qi(z),dr=!0},t.clearConfig=function(){On=null,dr=!1},t.isValidAttribute=function(z,f,x){On||qi({});const P=ue(z),b=ue(f);return Bu(P,b,x)},t.addHook=function(z,f){typeof f=="function"&&Nr(B[z],f)},t.removeHook=function(z,f){if(f!==void 0){const x=yg(B[z],f);return x===-1?void 0:vg(B[z],x,1)[0]}return cc(B[z])},t.removeHooks=function(z){B[z]=[]},t.removeAllHooks=function(){B=gc()},t}var Dg=Gd();let Io=!1;async function Mg(){if(Io||window.hljs){Io=!0;return}const e=["javascript","typescript","python","rust","bash","json","sql","css","xml","go","cpp","c"],t="https://cdn.jsdelivr.net/npm/highlight.js@11/lib";await yc(`${t}/core.min.js`),await Promise.all(e.map(n=>yc(`${t}/languages/${n}.min.js`))),Io=!0}function yc(e){return new Promise((t,n)=>{if(document.querySelector(`script[src="${e}"]`)){t();return}const r=document.createElement("script");r.src=e,r.onload=()=>t(),r.onerror=n,document.head.appendChild(r)})}const Yd=new cl;Yd.code=function(e,t){var i;const n=t&&((i=window.hljs)!=null&&i.getLanguage(t))?t:"plaintext";let r=e;try{window.hljs&&(r=n!=="plaintext"?window.hljs.highlight(e,{language:n}).value:window.hljs.highlightAuto(e).value)}catch{}const l=e.replace(/&/g,"&amp;").replace(/'/g,"&#39;");return`<div class="code-block">
<div class="code-header">
<span class="code-lang">${n}</span>
<button class="copy-code-btn" data-code='${l}'>Copy</button>
</div>
<pre><code class="hljs language-${n}">${r}</code></pre>
</div>`};H.setOptions({breaks:!0,gfm:!0});H.use({renderer:Yd});function vc(e){const t=H.parse(e);return Dg.sanitize(t,{ADD_TAGS:["div","span","button","pre","code"],ADD_ATTR:["class","data-code"],FORCE_BODY:!1})}function jg({message:e,onDelete:t,onEditAndResend:n,onEditAssistant:r,renderMarkdown:l}){const[i,o]=M.useState(!1),[s,u]=M.useState(e.content),[a,m]=M.useState(!1),g=M.useRef(null),d=M.useRef(null);M.useEffect(()=>{if(!d.current)return;d.current.querySelectorAll(".copy-code-btn").forEach(h=>{h.onclick=()=>{const v=h.getAttribute("data-code")||"";navigator.clipboard.writeText(v).then(()=>{h.textContent="Copied!",h.style.color="var(--success)",setTimeout(()=>{h.textContent="Copy",h.style.color=""},2e3)})}})});const y=()=>{const c=g.current;c&&(c.style.height="auto",c.style.height=Math.min(c.scrollHeight,300)+"px")},w=()=>{u(e.content),o(!0),setTimeout(()=>{var c;(c=g.current)==null||c.focus(),y()},0)},k=()=>o(!1),O=c=>{const h=s.trim();h&&(o(!1),c&&n?n(e,h):r&&r(e.id,h))},p=()=>{navigator.clipboard.writeText(e.content).then(()=>{m(!0),setTimeout(()=>m(!1),2e3)})};return _.jsx("div",{className:`msg-wrapper ${e.role}`,children:i?_.jsxs("div",{className:"msg-edit-container",children:[_.jsx("textarea",{ref:g,className:"msg-edit-textarea",value:s,onChange:c=>{u(c.target.value),y()},onKeyDown:c=>{c.key==="Escape"&&k(),c.key==="Enter"&&c.ctrlKey&&O(!1)}}),_.jsxs("div",{className:"msg-edit-actions",children:[n&&_.jsx("button",{className:"btn-primary",onClick:()=>O(!0),children:"Save & Resend"}),_.jsx("button",{className:"btn-secondary",onClick:()=>O(!1),children:"Save only"}),_.jsx("button",{className:"btn-ghost",onClick:k,children:"Cancel"})]})]}):_.jsxs(_.Fragment,{children:[e.role==="assistant"?_.jsx("div",{ref:d,className:"msg-bubble",dangerouslySetInnerHTML:{__html:l(e.content)}}):_.jsx("div",{className:"msg-bubble",children:e.content}),_.jsxs("div",{className:"msg-actions",children:[_.jsx("button",{className:`action-btn ${a?"copied":""}`,onClick:p,children:a?"✓ Copied":"⎘ Copy"}),_.jsxs("button",{className:"action-btn",onClick:w,children:["✎ Edit",n?" & Resend":""]}),_.jsx("button",{className:"action-btn danger",onClick:()=>t(e.id),children:"✕ Delete"})]})]})})}const Fg=20;function Ug({db:e,chatId:t,server:n,apiKey:r,model:l,onChatCreated:i,onChatUpdated:o}){const[s,u]=M.useState([]),[a,m]=M.useState(""),[g,d]=M.useState(!1),[y,w]=M.useState(null),[k,O]=M.useState(null),[p,c]=M.useState(!0),[h,v]=M.useState(!0),T=M.useRef(null),N=M.useRef(null),A=M.useRef(null);M.useEffect(()=>{Mg()},[]);const L=M.useCallback(()=>{if(!t){u([]);return}const E=e.query("SELECT * FROM messages WHERE chat_id = ? ORDER BY created_at ASC",[t]);u(E)},[e,t]);M.useEffect(()=>{L()},[L]),M.useEffect(()=>{var E;(E=T.current)==null||E.scrollIntoView({behavior:"smooth"})},[s,y]);const X=()=>{const E=N.current;E&&(E.style.height="auto",E.style.height=Math.min(E.scrollHeight,200)+"px")},j=M.useCallback(()=>{if(t)return t;e.run("INSERT INTO chats (title) VALUES ('New Chat')");const I=e.get("SELECT last_insert_rowid() as id").id;return i(I),I},[t,e,i]),B=M.useCallback((E,I)=>{const D=I.slice(0,50)+(I.length>50?"…":"");e.run("UPDATE chats SET title = ?, updated_at = strftime('%s','now') WHERE id = ?",[D,E]),o()},[e,o]),Ge=M.useCallback(E=>{const I=h?Fg:1;return e.query("SELECT role, content FROM messages WHERE chat_id = ? ORDER BY created_at DESC LIMIT ?",[E,I]).reverse()},[e,h]),Ye=M.useCallback(async(E,I)=>{var V,ye,Xe,rt,cr,Nn,fr;if(!E.trim()||g)return;if(!l){alert("No model selected");return}d(!0),w(null);const D=I??j();e.run("INSERT INTO messages (chat_id, role, content) VALUES (?, 'user', ?)",[D,E]);const K=e.get("SELECT COUNT(*) as c FROM messages WHERE chat_id = ?",[D]);(K==null?void 0:K.c)===1&&B(D,E),L();const J=Ge(D),je={"Content-Type":"application/json"};r&&(je.Authorization=`Bearer ${r}`),A.current=new AbortController;try{const Ke=await fetch(`${n}/v1/chat/completions`,{method:"POST",headers:je,signal:A.current.signal,body:JSON.stringify({model:l,messages:J,stream:p,stream_options:p?{include_usage:!0}:void 0,max_tokens:2048})});if(!Ke.ok){const ve=await Ke.json().catch(()=>({}));throw new Error(((V=ve==null?void 0:ve.error)==null?void 0:V.message)||`HTTP ${Ke.status}`)}let lt="",it=null;if(p){const ve=Ke.body.getReader(),dr=new TextDecoder;let sn="";for(;;){const{done:jt,value:Rn}=await ve.read();if(jt)break;sn+=dr.decode(Rn,{stream:!0});const un=sn.split(`
`);sn=un.pop();for(const pr of un){if(!pr.startsWith("data: "))continue;const hr=pr.slice(6).trim();if(hr!=="[DONE]")try{const mr=JSON.parse(hr),An=(rt=(Xe=(ye=mr.choices)==null?void 0:ye[0])==null?void 0:Xe.delta)==null?void 0:rt.content;An&&(lt+=An,w(lt)),mr.usage&&(it=mr.usage)}catch{}}}}else{const ve=await Ke.json();lt=((fr=(Nn=(cr=ve.choices)==null?void 0:cr[0])==null?void 0:Nn.message)==null?void 0:fr.content)||"",it=ve.usage}e.run("INSERT INTO messages (chat_id, role, content) VALUES (?, 'assistant', ?)",[D,lt]),e.run("UPDATE chats SET updated_at = strftime('%s','now') WHERE id = ?",[D]),it!=null&&it.tokens_per_second&&O(it.tokens_per_second),o()}catch(Ke){Ke instanceof Error&&Ke.name!=="AbortError"&&e.run("INSERT INTO messages (chat_id, role, content) VALUES (?, 'assistant', ?)",[D,`⚠️ Error: ${Ke.message}`])}finally{d(!1),w(null),L(),A.current=null}},[g,l,n,r,p,e,j,B,Ge,L,o]),xt=()=>{const E=a.trim();E&&(m(""),N.current&&(N.current.style.height="auto"),Ye(E))},ar=()=>{var E;(E=A.current)==null||E.abort()},ln=E=>{e.run("DELETE FROM messages WHERE id = ?",[E]),L()},on=(E,I)=>{e.run("UPDATE messages SET content = ? WHERE id = ?",[I,E.id]),e.run("DELETE FROM messages WHERE chat_id = ? AND id > ?",[E.chat_id,E.id]),L(),Ye(I,E.chat_id)},C=(E,I)=>{e.run("UPDATE messages SET content = ? WHERE id = ?",[I,E]),L()};return _.jsxs("div",{className:"chat-view",children:[_.jsxs("div",{className:"chat-topbar",children:[_.jsx("div",{className:"chat-topbar-left",children:k!==null&&_.jsxs("span",{className:"tps-badge",children:[k.toFixed(1)," tok/s"]})}),_.jsxs("div",{className:"chat-topbar-right",children:[_.jsxs("label",{className:"toggle-label",children:[_.jsx("input",{type:"checkbox",checked:p,onChange:E=>c(E.target.checked)}),"Streaming"]}),_.jsxs("label",{className:"toggle-label",children:[_.jsx("input",{type:"checkbox",checked:h,onChange:E=>v(E.target.checked)}),"Memory"]})]})]}),_.jsxs("div",{className:"messages-area",children:[!t&&s.length===0&&_.jsxs("div",{className:"empty-state",children:[_.jsx("div",{className:"empty-icon",children:"⚡"}),_.jsx("h2",{children:"ForgeLM Chat"}),_.jsx("p",{children:"Start a conversation. Supports full Markdown, code highlighting, and persistent history."})]}),s.map(E=>_.jsx(jg,{message:E,onDelete:ln,onEditAndResend:E.role==="user"?on:void 0,onEditAssistant:E.role==="assistant"?C:void 0,renderMarkdown:vc},E.id)),g&&y!==null&&_.jsx("div",{className:"msg-wrapper assistant",children:_.jsx("div",{className:"msg-bubble",dangerouslySetInnerHTML:{__html:vc(y)}})}),g&&y===null&&_.jsx("div",{className:"msg-wrapper assistant",children:_.jsxs("div",{className:"thinking",children:[_.jsx("span",{}),_.jsx("span",{}),_.jsx("span",{})]})}),_.jsx("div",{ref:T})]}),_.jsxs("div",{className:"input-area",children:[_.jsxs("div",{className:"input-row",children:[_.jsx("textarea",{ref:N,className:"input-textarea",value:a,onChange:E=>{m(E.target.value),X()},onKeyDown:E=>{E.key==="Enter"&&!E.shiftKey&&(E.preventDefault(),xt())},placeholder:"Message… (Enter to send, Shift+Enter for new line)",rows:1,disabled:g}),g?_.jsx("button",{className:"stop-btn",onClick:ar,children:"■ Stop"}):_.jsx("button",{className:"send-btn",onClick:xt,disabled:!a.trim(),children:"Send ↑"})]}),_.jsx("div",{className:"input-meta",children:_.jsxs("span",{className:"char-count",children:[a.length," chars"]})})]})]})}class $g{constructor(t){G(this,"inner");this.inner=t}run(t,n=[]){this.inner.run(t,n),this.persist()}query(t,n=[]){const r=this.inner.prepare(t);r.bind(n);const l=[];for(;r.step();)l.push(r.getAsObject());return r.free(),l}get(t,n=[]){return this.query(t,n)[0]??null}persist(){try{const t=this.inner.export(),n=btoa(String.fromCharCode(...t));localStorage.setItem("forgelm_db_v2",n)}catch{}}}async function Hg(){window.initSqlJs||await new Promise((l,i)=>{const o=document.createElement("script");o.src="https://cdn.jsdelivr.net/npm/[email protected]/dist/sql-wasm.js",o.onload=()=>l(),o.onerror=i,document.head.appendChild(o)});const e=await window.initSqlJs({locateFile:l=>`https://cdn.jsdelivr.net/npm/[email protected]/dist/${l}`}),t=localStorage.getItem("forgelm_db_v2");let n;if(t){const l=Uint8Array.from(atob(t),i=>i.charCodeAt(0));n=new e.Database(l)}else n=new e.Database;const r=new $g(n);return r.run(`
CREATE TABLE IF NOT EXISTS chats (
id INTEGER PRIMARY KEY AUTOINCREMENT,
title TEXT NOT NULL DEFAULT 'New Chat',
created_at INTEGER NOT NULL DEFAULT (strftime('%s','now')),
updated_at INTEGER NOT NULL DEFAULT (strftime('%s','now'))
)
`),r.run(`
CREATE TABLE IF NOT EXISTS messages (
id INTEGER PRIMARY KEY AUTOINCREMENT,
chat_id INTEGER NOT NULL,
role TEXT NOT NULL,
content TEXT NOT NULL,
created_at INTEGER NOT NULL DEFAULT (strftime('%s','now'))
)
`),r.run("CREATE INDEX IF NOT EXISTS idx_msg_chat ON messages(chat_id, created_at)"),r}function Bg(){const[e,t]=M.useState(null),[n,r]=M.useState(!1);return M.useEffect(()=>{Hg().then(l=>{t(l),r(!0)})},[]),{db:e,ready:n}}function Wg(e,t){const[n,r]=M.useState([]),[l,i]=M.useState(""),[o,s]=M.useState("loading"),u=M.useCallback(async()=>{s("loading");try{const a={};t&&(a.Authorization=`Bearer ${t}`);const d=(await(await fetch(`${e}/v1/models`,{headers:a})).json()).data||[];r(d),d.length>0&&!l&&i(d[0].id),s("ok")}catch{s("error")}},[e,t,l]);return M.useEffect(()=>{u();const a=setInterval(u,3e4);return()=>clearInterval(a)},[u]),{models:n,selectedModel:l,setSelectedModel:i,status:o,refresh:u}}function Vg(){const{db:e,ready:t}=Bg(),[n,r]=M.useState(null),[l,i]=M.useState([]),[o,s]=M.useState(()=>localStorage.getItem("forgelm_server")||"http://127.0.0.1:8080"),[u,a]=M.useState(()=>localStorage.getItem("forgelm_apikey")||""),{models:m,selectedModel:g,setSelectedModel:d,status:y,refresh:w}=Wg(o,u);M.useEffect(()=>{localStorage.setItem("forgelm_server",o)},[o]),M.useEffect(()=>{localStorage.setItem("forgelm_apikey",u)},[u]);const k=M.useCallback(()=>{if(!e)return;const c=e.query("SELECT * FROM chats ORDER BY updated_at DESC");i(c)},[e]);M.useEffect(()=>{k()},[k]);const O=M.useCallback(()=>{if(!e)return;e.run("INSERT INTO chats (title) VALUES ('New Chat')");const c=e.get("SELECT last_insert_rowid() as id");c&&(r(c.id),k())},[e,k]),p=M.useCallback(c=>{e&&(e.run("DELETE FROM chats WHERE id = ?",[c]),n===c&&r(null),k())},[e,n,k]);return t?_.jsxs("div",{className:"app-layout",children:[_.jsx(Om,{chats:l,currentChatId:n,onSelectChat:r,onNewChat:O,onDeleteChat:p,server:o,onServerChange:s,apiKey:u,onApiKeyChange:a,models:m,selectedModel:g,onModelChange:d,status:y,onRefreshModels:w}),_.jsx(Ug,{db:e,chatId:n,server:o,apiKey:u,model:g,onChatCreated:c=>{r(c),k()},onChatUpdated:k})]}):_.jsxs("div",{className:"app-loading",children:[_.jsx("div",{className:"loading-spinner"}),_.jsx("span",{children:"Initializing…"})]})}zo.createRoot(document.getElementById("root")).render(_.jsx(wp.StrictMode,{children:_.jsx(Vg,{})}));
+13
View File
@@ -0,0 +1,13 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>ForgeLM Chat</title>
<script type="module" crossorigin src="/assets/index-DyFHx2Ao.js"></script>
<link rel="stylesheet" crossorigin href="/assets/index-Ci29W9gt.css">
</head>
<body>
<div id="root"></div>
</body>
</html>