beads-ui 0.3.1 → 0.4.1

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 (56) hide show
  1. package/CHANGES.md +24 -0
  2. package/README.md +15 -6
  3. package/app/main.bundle.js +617 -0
  4. package/app/main.bundle.js.map +7 -0
  5. package/bin/bdui.js +2 -1
  6. package/package.json +27 -14
  7. package/server/app.js +38 -36
  8. package/server/bd.js +2 -2
  9. package/server/cli/commands.js +8 -8
  10. package/server/cli/daemon.js +13 -5
  11. package/server/cli/index.js +17 -31
  12. package/server/cli/usage.js +3 -2
  13. package/server/db.js +6 -6
  14. package/server/index.js +10 -4
  15. package/server/logging.js +23 -0
  16. package/server/watcher.js +7 -5
  17. package/server/ws.js +23 -11
  18. package/app/data/list-selectors.js +0 -103
  19. package/app/data/providers.js +0 -78
  20. package/app/data/sort.js +0 -47
  21. package/app/data/subscription-issue-store.js +0 -161
  22. package/app/data/subscription-issue-stores.js +0 -128
  23. package/app/data/subscriptions-store.js +0 -227
  24. package/app/main.js +0 -706
  25. package/app/protocol.md +0 -66
  26. package/app/router.js +0 -117
  27. package/app/state.js +0 -105
  28. package/app/utils/issue-id-renderer.js +0 -72
  29. package/app/utils/issue-id.js +0 -11
  30. package/app/utils/issue-type.js +0 -29
  31. package/app/utils/issue-url.js +0 -10
  32. package/app/utils/markdown.js +0 -16
  33. package/app/utils/priority-badge.js +0 -48
  34. package/app/utils/priority.js +0 -1
  35. package/app/utils/status-badge.js +0 -33
  36. package/app/utils/status.js +0 -25
  37. package/app/utils/toast.js +0 -35
  38. package/app/utils/type-badge.js +0 -34
  39. package/app/views/board.js +0 -537
  40. package/app/views/detail.js +0 -1252
  41. package/app/views/epics.js +0 -281
  42. package/app/views/issue-dialog.js +0 -164
  43. package/app/views/issue-row.js +0 -191
  44. package/app/views/list.js +0 -468
  45. package/app/views/nav.js +0 -68
  46. package/app/views/new-issue-dialog.js +0 -348
  47. package/app/ws.js +0 -282
  48. package/docs/adr/001-push-only-lists.md +0 -134
  49. package/docs/adr/002-per-subscription-stores-and-full-issue-push.md +0 -200
  50. package/docs/architecture.md +0 -194
  51. package/docs/data-exchange-subscription-plan.md +0 -198
  52. package/docs/db-watching.md +0 -30
  53. package/docs/migration-v2.md +0 -54
  54. package/docs/protocol/issues-push-v2.md +0 -179
  55. package/docs/subscription-issue-store.md +0 -112
  56. package/server/protocol.js +0 -3
@@ -0,0 +1,617 @@
1
+ var Ts=Object.create;var gr=Object.defineProperty;var $s=Object.getOwnPropertyDescriptor;var Es=Object.getOwnPropertyNames;var Cs=Object.getPrototypeOf,Rs=Object.prototype.hasOwnProperty;var Is=(t,e,r)=>e in t?gr(t,e,{enumerable:!0,configurable:!0,writable:!0,value:r}):t[e]=r;var mr=(t,e)=>()=>(e||t((e={exports:{}}).exports,e),e.exports);var Ls=(t,e,r,s)=>{if(e&&typeof e=="object"||typeof e=="function")for(let n of Es(e))!Rs.call(t,n)&&n!==r&&gr(t,n,{get:()=>e[n],enumerable:!(s=$s(e,n))||s.enumerable});return t};var Ds=(t,e,r)=>(r=t!=null?Ts(Cs(t)):{},Ls(e||!t||!t.__esModule?gr(r,"default",{value:t,enumerable:!0}):r,t));var J=(t,e,r)=>Is(t,typeof e!="symbol"?e+"":e,r);var wn=mr((co,yn)=>{var pt=1e3,ft=pt*60,ht=ft*60,et=ht*24,Fs=et*7,zs=et*365.25;yn.exports=function(t,e){e=e||{};var r=typeof t;if(r==="string"&&t.length>0)return Bs(t);if(r==="number"&&isFinite(t))return e.long?Us(t):Hs(t);throw new Error("val is not a non-empty string or a valid number. val="+JSON.stringify(t))};function Bs(t){if(t=String(t),!(t.length>100)){var e=/^(-?(?:\d+)?\.?\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec(t);if(e){var r=parseFloat(e[1]),s=(e[2]||"ms").toLowerCase();switch(s){case"years":case"year":case"yrs":case"yr":case"y":return r*zs;case"weeks":case"week":case"w":return r*Fs;case"days":case"day":case"d":return r*et;case"hours":case"hour":case"hrs":case"hr":case"h":return r*ht;case"minutes":case"minute":case"mins":case"min":case"m":return r*ft;case"seconds":case"second":case"secs":case"sec":case"s":return r*pt;case"milliseconds":case"millisecond":case"msecs":case"msec":case"ms":return r;default:return}}}}function Hs(t){var e=Math.abs(t);return e>=et?Math.round(t/et)+"d":e>=ht?Math.round(t/ht)+"h":e>=ft?Math.round(t/ft)+"m":e>=pt?Math.round(t/pt)+"s":t+"ms"}function Us(t){var e=Math.abs(t);return e>=et?Zt(t,e,et,"day"):e>=ht?Zt(t,e,ht,"hour"):e>=ft?Zt(t,e,ft,"minute"):e>=pt?Zt(t,e,pt,"second"):t+" ms"}function Zt(t,e,r,s){var n=e>=r*1.5;return Math.round(t/r)+" "+s+(n?"s":"")}});var xn=mr((uo,kn)=>{function qs(t){r.debug=r,r.default=r,r.coerce=l,r.disable=o,r.enable=n,r.enabled=a,r.humanize=wn(),r.destroy=u,Object.keys(t).forEach(g=>{r[g]=t[g]}),r.names=[],r.skips=[],r.formatters={};function e(g){let d=0;for(let p=0;p<g.length;p++)d=(d<<5)-d+g.charCodeAt(p),d|=0;return r.colors[Math.abs(d)%r.colors.length]}r.selectColor=e;function r(g){let d,p=null,h,k;function _(...I){if(!_.enabled)return;let A=_,F=Number(new Date),E=F-(d||F);A.diff=E,A.prev=d,A.curr=F,d=F,I[0]=r.coerce(I[0]),typeof I[0]!="string"&&I.unshift("%O");let S=0;I[0]=I[0].replace(/%([a-zA-Z%])/g,(y,w)=>{if(y==="%%")return"%";S++;let b=r.formatters[w];if(typeof b=="function"){let $=I[S];y=b.call(A,$),I.splice(S,1),S--}return y}),r.formatArgs.call(A,I),(A.log||r.log).apply(A,I)}return _.namespace=g,_.useColors=r.useColors(),_.color=r.selectColor(g),_.extend=s,_.destroy=r.destroy,Object.defineProperty(_,"enabled",{enumerable:!0,configurable:!1,get:()=>p!==null?p:(h!==r.namespaces&&(h=r.namespaces,k=r.enabled(g)),k),set:I=>{p=I}}),typeof r.init=="function"&&r.init(_),_}function s(g,d){let p=r(this.namespace+(typeof d>"u"?":":d)+g);return p.log=this.log,p}function n(g){r.save(g),r.namespaces=g,r.names=[],r.skips=[];let d=(typeof g=="string"?g:"").trim().replace(/\s+/g,",").split(",").filter(Boolean);for(let p of d)p[0]==="-"?r.skips.push(p.slice(1)):r.names.push(p)}function i(g,d){let p=0,h=0,k=-1,_=0;for(;p<g.length;)if(h<d.length&&(d[h]===g[p]||d[h]==="*"))d[h]==="*"?(k=h,_=p,h++):(p++,h++);else if(k!==-1)h=k+1,_++,p=_;else return!1;for(;h<d.length&&d[h]==="*";)h++;return h===d.length}function o(){let g=[...r.names,...r.skips.map(d=>"-"+d)].join(",");return r.enable(""),g}function a(g){for(let d of r.skips)if(i(g,d))return!1;for(let d of r.names)if(i(g,d))return!0;return!1}function l(g){return g instanceof Error?g.stack||g.message:g}function u(){console.warn("Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.")}return r.enable(r.load()),r}kn.exports=qs});var _n=mr((Se,Kt)=>{Se.formatArgs=Gs;Se.save=Ws;Se.load=Zs;Se.useColors=js;Se.storage=Ks();Se.destroy=(()=>{let t=!1;return()=>{t||(t=!0,console.warn("Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`."))}})();Se.colors=["#0000CC","#0000FF","#0033CC","#0033FF","#0066CC","#0066FF","#0099CC","#0099FF","#00CC00","#00CC33","#00CC66","#00CC99","#00CCCC","#00CCFF","#3300CC","#3300FF","#3333CC","#3333FF","#3366CC","#3366FF","#3399CC","#3399FF","#33CC00","#33CC33","#33CC66","#33CC99","#33CCCC","#33CCFF","#6600CC","#6600FF","#6633CC","#6633FF","#66CC00","#66CC33","#9900CC","#9900FF","#9933CC","#9933FF","#99CC00","#99CC33","#CC0000","#CC0033","#CC0066","#CC0099","#CC00CC","#CC00FF","#CC3300","#CC3333","#CC3366","#CC3399","#CC33CC","#CC33FF","#CC6600","#CC6633","#CC9900","#CC9933","#CCCC00","#CCCC33","#FF0000","#FF0033","#FF0066","#FF0099","#FF00CC","#FF00FF","#FF3300","#FF3333","#FF3366","#FF3399","#FF33CC","#FF33FF","#FF6600","#FF6633","#FF9900","#FF9933","#FFCC00","#FFCC33"];function js(){if(typeof window<"u"&&window.process&&(window.process.type==="renderer"||window.process.__nwjs))return!0;if(typeof navigator<"u"&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/(edge|trident)\/(\d+)/))return!1;let t;return typeof document<"u"&&document.documentElement&&document.documentElement.style&&document.documentElement.style.WebkitAppearance||typeof window<"u"&&window.console&&(window.console.firebug||window.console.exception&&window.console.table)||typeof navigator<"u"&&navigator.userAgent&&(t=navigator.userAgent.toLowerCase().match(/firefox\/(\d+)/))&&parseInt(t[1],10)>=31||typeof navigator<"u"&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/applewebkit\/(\d+)/)}function Gs(t){if(t[0]=(this.useColors?"%c":"")+this.namespace+(this.useColors?" %c":" ")+t[0]+(this.useColors?"%c ":" ")+"+"+Kt.exports.humanize(this.diff),!this.useColors)return;let e="color: "+this.color;t.splice(1,0,e,"color: inherit");let r=0,s=0;t[0].replace(/%[a-zA-Z%]/g,n=>{n!=="%%"&&(r++,n==="%c"&&(s=r))}),t.splice(s,0,e)}Se.log=console.debug||console.log||(()=>{});function Ws(t){try{t?Se.storage.setItem("debug",t):Se.storage.removeItem("debug")}catch{}}function Zs(){let t;try{t=Se.storage.getItem("debug")||Se.storage.getItem("DEBUG")}catch{}return!t&&typeof process<"u"&&"env"in process&&(t=process.env.DEBUG),t}function Ks(){try{return localStorage}catch{}}Kt.exports=xn()(Se);var{formatters:Vs}=Kt.exports;Vs.j=function(t){try{return JSON.stringify(t)}catch(e){return"[UnexpectedJSONParseError]: "+e.message}}});var _t=globalThis,Wt=_t.trustedTypes,ln=Wt?Wt.createPolicy("lit-html",{createHTML:t=>t}):void 0,hn="$lit$",je=`lit$${Math.random().toFixed(9).slice(2)}$`,gn="?"+je,Ns=`<${gn}>`,Qe=document,vt=()=>Qe.createComment(""),At=t=>t===null||typeof t!="object"&&typeof t!="function",vr=Array.isArray,Ms=t=>vr(t)||typeof t?.[Symbol.iterator]=="function",br=`[
2
+ \f\r]`,xt=/<(?:(!--|\/[^a-zA-Z])|(\/?[a-zA-Z][^>\s]*)|(\/?$))/g,cn=/-->/g,dn=/>/g,Ye=RegExp(`>|${br}(?:([^\\s"'>=/]+)(${br}*=${br}*(?:[^
3
+ \f\r"'\`<>=]|("|')|))|$)`,"g"),un=/'/g,pn=/"/g,mn=/^(?:script|style|textarea|title)$/i,Ar=t=>(e,...r)=>({_$litType$:t,strings:e,values:r}),R=Ar(1),no=Ar(2),so=Ar(3),Je=Symbol.for("lit-noChange"),le=Symbol.for("lit-nothing"),fn=new WeakMap,Xe=Qe.createTreeWalker(Qe,129);function bn(t,e){if(!vr(t)||!t.hasOwnProperty("raw"))throw Error("invalid template strings array");return ln!==void 0?ln.createHTML(e):e}var Os=(t,e)=>{let r=t.length-1,s=[],n,i=e===2?"<svg>":e===3?"<math>":"",o=xt;for(let a=0;a<r;a++){let l=t[a],u,g,d=-1,p=0;for(;p<l.length&&(o.lastIndex=p,g=o.exec(l),g!==null);)p=o.lastIndex,o===xt?g[1]==="!--"?o=cn:g[1]!==void 0?o=dn:g[2]!==void 0?(mn.test(g[2])&&(n=RegExp("</"+g[2],"g")),o=Ye):g[3]!==void 0&&(o=Ye):o===Ye?g[0]===">"?(o=n??xt,d=-1):g[1]===void 0?d=-2:(d=o.lastIndex-g[2].length,u=g[1],o=g[3]===void 0?Ye:g[3]==='"'?pn:un):o===pn||o===un?o=Ye:o===cn||o===dn?o=xt:(o=Ye,n=void 0);let h=o===Ye&&t[a+1].startsWith("/>")?" ":"";i+=o===xt?l+Ns:d>=0?(s.push(u),l.slice(0,d)+hn+l.slice(d)+je+h):l+je+(d===-2?a:h)}return[bn(t,i+(t[r]||"<?>")+(e===2?"</svg>":e===3?"</math>":"")),s]},St=class t{constructor({strings:e,_$litType$:r},s){let n;this.parts=[];let i=0,o=0,a=e.length-1,l=this.parts,[u,g]=Os(e,r);if(this.el=t.createElement(u,s),Xe.currentNode=this.el.content,r===2||r===3){let d=this.el.content.firstChild;d.replaceWith(...d.childNodes)}for(;(n=Xe.nextNode())!==null&&l.length<a;){if(n.nodeType===1){if(n.hasAttributes())for(let d of n.getAttributeNames())if(d.endsWith(hn)){let p=g[o++],h=n.getAttribute(d).split(je),k=/([.?@])?(.*)/.exec(p);l.push({type:1,index:i,name:k[2],strings:h,ctor:k[1]==="."?wr:k[1]==="?"?kr:k[1]==="@"?xr:dt}),n.removeAttribute(d)}else d.startsWith(je)&&(l.push({type:6,index:i}),n.removeAttribute(d));if(mn.test(n.tagName)){let d=n.textContent.split(je),p=d.length-1;if(p>0){n.textContent=Wt?Wt.emptyScript:"";for(let h=0;h<p;h++)n.append(d[h],vt()),Xe.nextNode(),l.push({type:2,index:++i});n.append(d[p],vt())}}}else if(n.nodeType===8)if(n.data===gn)l.push({type:2,index:i});else{let d=-1;for(;(d=n.data.indexOf(je,d+1))!==-1;)l.push({type:7,index:i}),d+=je.length-1}i++}}static createElement(e,r){let s=Qe.createElement("template");return s.innerHTML=e,s}};function ct(t,e,r=t,s){if(e===Je)return e;let n=s!==void 0?r._$Co?.[s]:r._$Cl,i=At(e)?void 0:e._$litDirective$;return n?.constructor!==i&&(n?._$AO?.(!1),i===void 0?n=void 0:(n=new i(t),n._$AT(t,r,s)),s!==void 0?(r._$Co??(r._$Co=[]))[s]=n:r._$Cl=n),n!==void 0&&(e=ct(t,n._$AS(t,e.values),n,s)),e}var yr=class{constructor(e,r){this._$AV=[],this._$AN=void 0,this._$AD=e,this._$AM=r}get parentNode(){return this._$AM.parentNode}get _$AU(){return this._$AM._$AU}u(e){let{el:{content:r},parts:s}=this._$AD,n=(e?.creationScope??Qe).importNode(r,!0);Xe.currentNode=n;let i=Xe.nextNode(),o=0,a=0,l=s[0];for(;l!==void 0;){if(o===l.index){let u;l.type===2?u=new Tt(i,i.nextSibling,this,e):l.type===1?u=new l.ctor(i,l.name,l.strings,this,e):l.type===6&&(u=new _r(i,this,e)),this._$AV.push(u),l=s[++a]}o!==l?.index&&(i=Xe.nextNode(),o++)}return Xe.currentNode=Qe,n}p(e){let r=0;for(let s of this._$AV)s!==void 0&&(s.strings!==void 0?(s._$AI(e,s,r),r+=s.strings.length-2):s._$AI(e[r])),r++}},Tt=class t{get _$AU(){return this._$AM?._$AU??this._$Cv}constructor(e,r,s,n){this.type=2,this._$AH=le,this._$AN=void 0,this._$AA=e,this._$AB=r,this._$AM=s,this.options=n,this._$Cv=n?.isConnected??!0}get parentNode(){let e=this._$AA.parentNode,r=this._$AM;return r!==void 0&&e?.nodeType===11&&(e=r.parentNode),e}get startNode(){return this._$AA}get endNode(){return this._$AB}_$AI(e,r=this){e=ct(this,e,r),At(e)?e===le||e==null||e===""?(this._$AH!==le&&this._$AR(),this._$AH=le):e!==this._$AH&&e!==Je&&this._(e):e._$litType$!==void 0?this.$(e):e.nodeType!==void 0?this.T(e):Ms(e)?this.k(e):this._(e)}O(e){return this._$AA.parentNode.insertBefore(e,this._$AB)}T(e){this._$AH!==e&&(this._$AR(),this._$AH=this.O(e))}_(e){this._$AH!==le&&At(this._$AH)?this._$AA.nextSibling.data=e:this.T(Qe.createTextNode(e)),this._$AH=e}$(e){let{values:r,_$litType$:s}=e,n=typeof s=="number"?this._$AC(e):(s.el===void 0&&(s.el=St.createElement(bn(s.h,s.h[0]),this.options)),s);if(this._$AH?._$AD===n)this._$AH.p(r);else{let i=new yr(n,this),o=i.u(this.options);i.p(r),this.T(o),this._$AH=i}}_$AC(e){let r=fn.get(e.strings);return r===void 0&&fn.set(e.strings,r=new St(e)),r}k(e){vr(this._$AH)||(this._$AH=[],this._$AR());let r=this._$AH,s,n=0;for(let i of e)n===r.length?r.push(s=new t(this.O(vt()),this.O(vt()),this,this.options)):s=r[n],s._$AI(i),n++;n<r.length&&(this._$AR(s&&s._$AB.nextSibling,n),r.length=n)}_$AR(e=this._$AA.nextSibling,r){for(this._$AP?.(!1,!0,r);e!==this._$AB;){let s=e.nextSibling;e.remove(),e=s}}setConnected(e){this._$AM===void 0&&(this._$Cv=e,this._$AP?.(e))}},dt=class{get tagName(){return this.element.tagName}get _$AU(){return this._$AM._$AU}constructor(e,r,s,n,i){this.type=1,this._$AH=le,this._$AN=void 0,this.element=e,this.name=r,this._$AM=n,this.options=i,s.length>2||s[0]!==""||s[1]!==""?(this._$AH=Array(s.length-1).fill(new String),this.strings=s):this._$AH=le}_$AI(e,r=this,s,n){let i=this.strings,o=!1;if(i===void 0)e=ct(this,e,r,0),o=!At(e)||e!==this._$AH&&e!==Je,o&&(this._$AH=e);else{let a=e,l,u;for(e=i[0],l=0;l<i.length-1;l++)u=ct(this,a[s+l],r,l),u===Je&&(u=this._$AH[l]),o||(o=!At(u)||u!==this._$AH[l]),u===le?e=le:e!==le&&(e+=(u??"")+i[l+1]),this._$AH[l]=u}o&&!n&&this.j(e)}j(e){e===le?this.element.removeAttribute(this.name):this.element.setAttribute(this.name,e??"")}},wr=class extends dt{constructor(){super(...arguments),this.type=3}j(e){this.element[this.name]=e===le?void 0:e}},kr=class extends dt{constructor(){super(...arguments),this.type=4}j(e){this.element.toggleAttribute(this.name,!!e&&e!==le)}},xr=class extends dt{constructor(e,r,s,n,i){super(e,r,s,n,i),this.type=5}_$AI(e,r=this){if((e=ct(this,e,r,0)??le)===Je)return;let s=this._$AH,n=e===le&&s!==le||e.capture!==s.capture||e.once!==s.once||e.passive!==s.passive,i=e!==le&&(s===le||n);n&&this.element.removeEventListener(this.name,this,s),i&&this.element.addEventListener(this.name,this,e),this._$AH=e}handleEvent(e){typeof this._$AH=="function"?this._$AH.call(this.options?.host??this.element,e):this._$AH.handleEvent(e)}},_r=class{constructor(e,r,s){this.element=e,this.type=6,this._$AN=void 0,this._$AM=r,this.options=s}get _$AU(){return this._$AM._$AU}_$AI(e){ct(this,e)}};var Ps=_t.litHtmlPolyfillSupport;Ps?.(St,Tt),(_t.litHtmlVersions??(_t.litHtmlVersions=[])).push("3.3.1");var Ae=(t,e,r)=>{let s=r?.renderBefore??e,n=s._$litPart$;if(n===void 0){let i=r?.renderBefore??null;s._$litPart$=n=new Tt(e.insertBefore(vt(),i),i,void 0,r??{})}return n._$AI(t),n};function $e(t,e){let r=t.priority??2,s=e.priority??2;if(r!==s)return r-s;let n=t.created_at??0,i=e.created_at??0;if(n!==i)return n<i?-1:1;let o=t.id,a=e.id;return o<a?-1:o>a?1:0}function ut(t,e){let r=t.closed_at??0,s=e.closed_at??0;if(r!==s)return r<s?1:-1;let n=t?.id,i=e?.id;return n<i?-1:n>i?1:0}function Ge(t=void 0){function e(i){return!t||typeof t.snapshotFor!="function"?[]:t.snapshotFor(i).slice().sort($e)}function r(i,o){let a=t&&t.snapshotFor?t.snapshotFor(i).slice():[];return o==="in_progress"?a.sort($e):o==="closed"?a.sort(ut):a.sort($e),a}function s(i){if(!t||typeof t.snapshotFor!="function")return[];let a=(t.snapshotFor(`detail:${i}`)||[]).find(u=>String(u?.id||"")===String(i));return(Array.isArray(a?.dependents)?a.dependents:[]).slice().sort($e)}function n(i){return t&&typeof t.subscribe=="function"?t.subscribe(i):()=>{}}return{selectIssuesFor:e,selectBoardColumn:r,selectEpicChildren:s,subscribe:n}}var vn=Ds(_n(),1);function se(t){return(0,vn.default)(`beads-ui:${t}`)}function An(t){let e=se("data");async function r(s){let{id:n}=s;e("updateIssue %s %o",n,Object.keys(s));let i=null;return typeof s.title=="string"&&(i=await t("edit-text",{id:n,field:"title",value:s.title})),typeof s.acceptance=="string"&&(i=await t("edit-text",{id:n,field:"acceptance",value:s.acceptance})),typeof s.notes=="string"&&(i=await t("edit-text",{id:n,field:"notes",value:s.notes})),typeof s.design=="string"&&(i=await t("edit-text",{id:n,field:"design",value:s.design})),typeof s.status=="string"&&(i=await t("update-status",{id:n,status:s.status})),typeof s.priority=="number"&&(i=await t("update-priority",{id:n,priority:s.priority})),typeof s.assignee=="string"&&(i=await t("update-assignee",{id:n,assignee:s.assignee})),e("updateIssue done %s",n),i}return{updateIssue:r}}function Sr(t,e={}){let r=se(`issue-store:${t}`),s=new Map,n=[],i=0,o=new Set,a=!1,l=e.sort||$e;function u(){for(let p of Array.from(o))try{p()}catch{}}function g(){n=Array.from(s.values()).sort(l)}function d(p){if(a||!p||p.id!==t)return;let h=Number(p.revision)||0;if(r("apply %s rev=%d",p.type,h),!(h<=i&&p.type!=="snapshot")){if(p.type==="snapshot"){if(h<=i)return;s.clear();let k=Array.isArray(p.issues)?p.issues:[];for(let _ of k)_&&typeof _.id=="string"&&_.id.length>0&&s.set(_.id,_);g(),i=h,u();return}if(p.type==="upsert"){let k=p.issue;if(k&&typeof k.id=="string"&&k.id.length>0){let _=s.get(k.id);if(!_)s.set(k.id,k);else{let I=Number.isFinite(_.updated_at)?_.updated_at:0,A=Number.isFinite(k.updated_at)?k.updated_at:0;if(I<=A){for(let F of Object.keys(_))F in k||delete _[F];for(let[F,E]of Object.entries(k))_[F]=E}}g()}i=h,u()}else if(p.type==="delete"){let k=String(p.issue_id||"");k&&(s.delete(k),g()),i=h,u()}}}return{id:t,subscribe(p){return o.add(p),()=>{o.delete(p)}},applyPush:d,snapshot(){return n},size(){return s.size},getById(p){return s.get(p)},dispose(){a=!0,s.clear(),n=[],o.clear(),i=0}}}function Vt(t){let e=String(t.type||"").trim(),r={};if(t.params&&typeof t.params=="object"){let n=Object.keys(t.params).sort();for(let i of n){let o=t.params[i];r[i]=String(o)}}let s=new URLSearchParams(r).toString();return s.length>0?`${e}?${s}`:e}function Sn(t){let e=se("subs"),r=new Map,s=new Map;function n(a,l){e("applyDelta %s +%d ~%d -%d",a,(l.added||[]).length,(l.updated||[]).length,(l.removed||[]).length);let u=s.get(a);if(!u||u.size===0)return;let g=Array.isArray(l.added)?l.added:[],d=Array.isArray(l.updated)?l.updated:[],p=Array.isArray(l.removed)?l.removed:[];for(let h of Array.from(u)){let k=r.get(h);if(!k)continue;let _=k.itemsById;for(let I of g)typeof I=="string"&&I.length>0&&_.set(I,!0);for(let I of d)typeof I=="string"&&I.length>0&&_.set(I,!0);for(let I of p)typeof I=="string"&&I.length>0&&_.delete(I)}}async function i(a,l){let u=Vt(l);if(e("subscribe %s key=%s",a,u),!r.has(a))r.set(a,{key:u,itemsById:new Map});else{let d=r.get(a);if(d&&d.key!==u){let p=s.get(d.key);p&&(p.delete(a),p.size===0&&s.delete(d.key)),r.set(a,{key:u,itemsById:new Map})}}s.has(u)||s.set(u,new Set);let g=s.get(u);g&&g.add(a);try{await t("subscribe-list",{id:a,type:l.type,params:l.params})}catch{}return async()=>{e("unsubscribe %s key=%s",a,u);try{await t("unsubscribe-list",{id:a})}catch{}let d=r.get(a)||null;if(d){let p=s.get(d.key);p&&(p.delete(a),p.size===0&&s.delete(d.key))}r.delete(a)}}return{subscribeList:i,_applyDelta:n,_subKeyOf:Vt,selectors:{getIds(a){let l=r.get(a);return l?Array.from(l.itemsById.keys()):[]},has(a,l){let u=r.get(a);return u?u.itemsById.has(l):!1},count(a){let l=r.get(a);return l?l.itemsById.size:0},getItemsById(a){let l=r.get(a),u={};if(!l)return u;for(let g of l.itemsById.keys())u[g]=!0;return u}}}}function Tn(){let t=se("issue-stores"),e=new Map,r=new Map,s=new Set,n=new Map;function i(){for(let l of Array.from(s))try{l()}catch{}}function o(l,u,g){let d=u?Vt(u):"",p=r.get(l)||"",h=e.has(l);if(t("register %s key=%s (prev=%s)",l,d,p),h&&p&&d&&p!==d){let k=e.get(l);if(k)try{k.dispose()}catch{}let _=n.get(l);if(_){try{_()}catch{}n.delete(l)}let I=Sr(l,g);e.set(l,I);let A=I.subscribe(()=>i());n.set(l,A)}else if(!h){let k=Sr(l,g);e.set(l,k);let _=k.subscribe(()=>i());n.set(l,_)}return r.set(l,d),()=>a(l)}function a(l){t("unregister %s",l),r.delete(l);let u=e.get(l);u&&(u.dispose(),e.delete(l));let g=n.get(l);if(g){try{g()}catch{}n.delete(l)}}return{register:o,unregister:a,getStore(l){return e.get(l)||null},snapshotFor(l){let u=e.get(l);return u?u.snapshot().slice():[]},subscribe(l){return s.add(l),()=>s.delete(l)}}}function Pe(t,e){return`#/${t==="epics"||t==="board"?t:"issues"}?issue=${encodeURIComponent(e)}`}function Yt(t){let e=String(t||""),r=e.startsWith("#")?e.slice(1):e,s=r.indexOf("?"),n=s>=0?r.slice(s+1):"";if(n){let a=new URLSearchParams(n).get("issue");if(a)return decodeURIComponent(a)}let i=/^\/issue\/([^\s?#]+)/.exec(r);return i&&i[1]?decodeURIComponent(i[1]):null}function Tr(t){let e=String(t||"");return/^#\/epics(\b|\/|$)/.test(e)?"epics":/^#\/board(\b|\/|$)/.test(e)?"board":"issues"}function $n(t){let e=se("router"),r=()=>{let s=window.location.hash||"",n=/^#\/issue\/([^\s?#]+)/.exec(s);if(n&&n[1]){let a=decodeURIComponent(n[1]);t.setState({selected_id:a,view:"issues"});let l=`#/issues?issue=${encodeURIComponent(a)}`;if(window.location.hash!==l){window.location.hash=l;return}}let i=Yt(s),o=Tr(s);e("hash change \u2192 view=%s id=%s",o,i),t.setState({selected_id:i,view:o})};return{start(){window.addEventListener("hashchange",r),r()},stop(){window.removeEventListener("hashchange",r)},gotoIssue(s){let i=(t.getState?t.getState():{view:"issues"}).view||"issues",o=Pe(i,s);e("goto issue %s (view=%s)",s,i),window.location.hash!==o?window.location.hash=o:t.setState({selected_id:s,view:i})},gotoView(s){let i=(t.getState?t.getState():{selected_id:null}).selected_id,o=i?Pe(s,i):`#/${s}`;e("goto view %s (id=%s)",s,i||""),window.location.hash!==o?window.location.hash=o:t.setState({view:s,selected_id:null})}}}function En(t={}){let e=se("state"),r={selected_id:t.selected_id??null,view:t.view??"issues",filters:{status:t.filters?.status??"all",search:t.filters?.search??"",type:typeof t.filters?.type=="string"?t.filters?.type:""},board:{closed_filter:t.board?.closed_filter==="3"||t.board?.closed_filter==="7"||t.board?.closed_filter==="today"?t.board?.closed_filter:"today"}},s=new Set;function n(){for(let i of Array.from(s))try{i(r)}catch{}}return{getState(){return r},setState(i){let o={...r,...i,filters:{...r.filters,...i.filters||{}},board:{...r.board,...i.board||{}}};o.selected_id===r.selected_id&&o.view===r.view&&o.filters.status===r.filters.status&&o.filters.search===r.filters.search&&o.filters.type===r.filters.type&&o.board.closed_filter===r.board.closed_filter||(r=o,e("state change %o",{selected_id:r.selected_id,view:r.view,filters:r.filters,board:r.board}),n())},subscribe(i){return s.add(i),()=>s.delete(i)}}}function he(t,e="info",r=2800){let s=document.createElement("div");s.className="toast",s.textContent=t,s.style.position="fixed",s.style.right="12px",s.style.bottom="12px",s.style.zIndex="1000",s.style.color="#fff",s.style.padding="8px 10px",s.style.borderRadius="4px",s.style.fontSize="12px",e==="success"?s.style.background="#156d36":e==="error"?s.style.background="#9f2011":s.style.background="rgba(0,0,0,0.85)",(document.body||document.documentElement).appendChild(s),setTimeout(()=>{try{s.remove()}catch{}},r)}function Xt(t){let e=String(t||"").match(/(\d+)$/);return e?`#${e[1]}`:"#"}function We(t,e){let r=typeof e?.duration_ms=="number"?e.duration_ms:1200,s=document.createElement("button");s.className=(e?.class_name?e.class_name+" ":"")+"mono id-copy",s.type="button",s.setAttribute("aria-live","polite"),s.setAttribute("title","Copy issue ID"),s.setAttribute("aria-label",`Copy issue ID ${t}`);let n=Xt(t);s.textContent=n;async function i(){try{navigator.clipboard&&typeof navigator.clipboard.writeText=="function"&&await navigator.clipboard.writeText(String(t));let o=s.textContent||n;s.textContent="Copied";let a=s.getAttribute("aria-label")||"";s.setAttribute("aria-label","Copied"),setTimeout(()=>{s.textContent=o,s.setAttribute("aria-label",a)},Math.max(80,r))}catch{}}return s.addEventListener("click",o=>{o.preventDefault(),o.stopPropagation(),i()}),s.addEventListener("keydown",o=>{(o.key==="Enter"||o.key===" ")&&(o.preventDefault(),o.stopPropagation(),i())}),s}var Ze=["Critical","High","Medium","Low","Backlog"];function Cn(t){let e=typeof t=="number"?t:2,r=document.createElement("span");r.className="priority-badge",r.classList.add(`is-p${Math.max(0,Math.min(4,e))}`),r.setAttribute("role","img");let s=Ys(e);return r.setAttribute("title",s),r.setAttribute("aria-label",`Priority: ${s}`),r.textContent=$t(e)+" "+s,r}function Ys(t){let e=Math.max(0,Math.min(4,t));return Ze[e]||"Medium"}function $t(t){switch(t){case 0:return"\u{1F525}";case 1:return"\u26A1\uFE0F";case 2:return"\u{1F527}";case 3:return"\u{1FAB6}";case 4:return"\u{1F4A4}";default:return"\u{1F527}"}}function tt(t){let e=document.createElement("span");e.className="type-badge";let r=(t||"").toString().toLowerCase(),s=new Set(["bug","feature","task","epic","chore"]),n=s.has(r)?r:"neutral";e.classList.add(`type-badge--${n}`),e.setAttribute("role","img");let i=s.has(r)?r==="bug"?"Bug":r==="feature"?"Feature":r==="task"?"Task":r==="epic"?"Epic":"Chore":"\u2014";return e.setAttribute("aria-label",s.has(r)?`Issue type: ${i}`:"Issue type: unknown"),e.setAttribute("title",s.has(r)?`Type: ${i}`:"Type: unknown"),e.textContent=i,e}function Rn(t,e,r,s,n=void 0,i=void 0){let o=se("views:board"),a=[],l=[],u=[],g=[],d=[],p=i?Ge(i):null,h="today";if(s)try{let w=s.getState(),b=w&&w.board?String(w.board.closed_filter||"today"):"today";(b==="today"||b==="3"||b==="7")&&(h=b)}catch{}function k(){return R`
4
+ <div class="panel__body board-root">
5
+ ${_("Blocked","blocked-col",l)}
6
+ ${_("Ready","ready-col",a)}
7
+ ${_("In Progress","in-progress-col",u)}
8
+ ${_("Closed","closed-col",g)}
9
+ </div>
10
+ `}function _(w,b,$){return R`
11
+ <section class="board-column" id=${b}>
12
+ <header
13
+ class="board-column__header"
14
+ id=${b+"-header"}
15
+ role="heading"
16
+ aria-level="2"
17
+ >
18
+ <span>${w}</span>
19
+ ${b==="closed-col"?R`<label class="board-closed-filter">
20
+ <span class="visually-hidden">Filter closed issues</span>
21
+ <select
22
+ id="closed-filter"
23
+ aria-label="Filter closed issues"
24
+ @change=${O}
25
+ >
26
+ <option
27
+ value="today"
28
+ ?selected=${h==="today"}
29
+ >
30
+ Today
31
+ </option>
32
+ <option value="3" ?selected=${h==="3"}>
33
+ Last 3 days
34
+ </option>
35
+ <option value="7" ?selected=${h==="7"}>
36
+ Last 7 days
37
+ </option>
38
+ </select>
39
+ </label>`:""}
40
+ </header>
41
+ <div
42
+ class="board-column__body"
43
+ role="list"
44
+ aria-labelledby=${b+"-header"}
45
+ >
46
+ ${$.map(T=>I(T))}
47
+ </div>
48
+ </section>
49
+ `}function I(w){return R`
50
+ <article
51
+ class="board-card"
52
+ data-issue-id=${w.id}
53
+ role="listitem"
54
+ tabindex="-1"
55
+ @click=${()=>r(w.id)}
56
+ >
57
+ <div class="board-card__title text-truncate">
58
+ ${w.title||"(no title)"}
59
+ </div>
60
+ <div class="board-card__meta">
61
+ ${tt(w.issue_type)} ${Cn(w.priority)}
62
+ ${We(w.id,{class_name:"mono"})}
63
+ </div>
64
+ </article>
65
+ `}function A(){Ae(k(),t),F()}function F(){try{let w=Array.from(t.querySelectorAll(".board-column"));for(let b of w){let $=b.querySelector(".board-column__body");if(!$)continue;let T=Array.from($.querySelectorAll(".board-card")),L=b.querySelector(".board-column__header"),B=L&&L.textContent?.trim()||"";for(let q of T){let Z=q.querySelector(".board-card__title"),X=Z&&Z.textContent?.trim()||"";q.setAttribute("aria-label",`Issue ${X||"(no title)"} \u2014 Column ${B}`),q.tabIndex=-1}T.length>0&&(T[0].tabIndex=0)}}catch{}}t.addEventListener("keydown",w=>{let b=w.target;if(!b||!(b instanceof HTMLElement))return;let $=String(b.tagName||"").toLowerCase();if($==="input"||$==="textarea"||$==="select"||b.isContentEditable===!0)return;let T=b.closest(".board-card");if(!T)return;let L=String(w.key||"");if(L==="Enter"||L===" "){w.preventDefault();let W=T.getAttribute("data-issue-id");W&&r(W);return}if(L!=="ArrowUp"&&L!=="ArrowDown"&&L!=="ArrowLeft"&&L!=="ArrowRight")return;w.preventDefault();let B=T.closest(".board-column");if(!B)return;let q=B.querySelector(".board-column__body");if(!q)return;let Z=Array.from(q.querySelectorAll(".board-card")),X=Z.indexOf(T);if(X!==-1){if(L==="ArrowDown"&&X<Z.length-1){E(Z[X],Z[X+1]);return}if(L==="ArrowUp"&&X>0){E(Z[X],Z[X-1]);return}if(L==="ArrowRight"||L==="ArrowLeft"){let W=Array.from(t.querySelectorAll(".board-column")),ie=W.indexOf(B);if(ie===-1)return;let oe=L==="ArrowRight"?1:-1,ce=ie+oe,ae=null;for(;ce>=0&&ce<W.length;){let z=W[ce],xe=z.querySelector(".board-column__body");if((xe?Array.from(xe.querySelectorAll(".board-card")):[]).length>0){ae=z;break}ce+=oe}if(ae){let z=ae.querySelector(".board-column__body .board-card");z&&E(T,z)}return}}});function E(w,b){try{w.tabIndex=-1,b.tabIndex=0,b.focus()}catch{}}function S(){o("applyClosedFilter %s",h);let w=Array.isArray(d)?[...d]:[],b=new Date,$=0;h==="today"?$=new Date(b.getFullYear(),b.getMonth(),b.getDate(),0,0,0,0).getTime():h==="3"?$=b.getTime()-4320*60*1e3:h==="7"&&($=b.getTime()-10080*60*1e3),w=w.filter(T=>{let L=Number.isFinite(T.closed_at)?T.closed_at:NaN;return Number.isFinite(L)?L>=$:!1}),w.sort(ut),g=w}function O(w){try{let b=w.target,$=String(b.value||"today");if(h=$==="3"||$==="7"?$:"today",o("closed filter %s",h),s)try{s.setState({board:{closed_filter:h}})}catch{}S(),A()}catch{}}function y(){try{if(p){let w=p.selectBoardColumn("tab:board:in-progress","in_progress"),b=p.selectBoardColumn("tab:board:blocked","blocked"),$=p.selectBoardColumn("tab:board:ready","ready"),T=p.selectBoardColumn("tab:board:closed","closed"),L=new Set(w.map(q=>q.id));a=$.filter(q=>!L.has(q.id)),l=b,u=w,d=T}S(),A()}catch{a=[],l=[],u=[],g=[],A()}}return p&&p.subscribe(()=>{try{y()}catch{}}),{async load(){o("load"),y();try{let w=!!(n&&n.selectors),b=B=>{if(!w||!n)return 0;let q=n.selectors;if(typeof q.count=="function")return Number(q.count(B)||0);try{let Z=q.getIds(B);return Array.isArray(Z)?Z.length:0}catch{return 0}},$=b("tab:board:ready")+b("tab:board:blocked")+b("tab:board:in-progress")+b("tab:board:closed"),T=e,L=T&&typeof T.getReady=="function"&&typeof T.getBlocked=="function"&&typeof T.getInProgress=="function"&&typeof T.getClosed=="function";if($===0&&L){o("fallback fetch");let[B,q,Z,X]=await Promise.all([T.getReady().catch(()=>[]),T.getBlocked().catch(()=>[]),T.getInProgress().catch(()=>[]),T.getClosed().catch(()=>[])]),W=Array.isArray(B)?B.map(z=>z):[],ie=Array.isArray(q)?q.map(z=>z):[],oe=Array.isArray(Z)?Z.map(z=>z):[],ce=Array.isArray(X)?X.map(z=>z):[],ae=new Set(oe.map(z=>z.id));W=W.filter(z=>!ae.has(z.id)),W.sort($e),ie.sort($e),oe.sort($e),a=W,l=ie,u=oe,d=ce,S(),A()}}catch{}},clear(){t.replaceChildren(),a=[],l=[],u=[],g=[]}}}var{entries:zn,setPrototypeOf:In,isFrozen:Xs,getPrototypeOf:Qs,getOwnPropertyDescriptor:Js}=Object,{freeze:ye,seal:Te,create:Dr}=Object,{apply:Nr,construct:Mr}=typeof Reflect<"u"&&Reflect;ye||(ye=function(e){return e});Te||(Te=function(e){return e});Nr||(Nr=function(e,r){for(var s=arguments.length,n=new Array(s>2?s-2:0),i=2;i<s;i++)n[i-2]=arguments[i];return e.apply(r,n)});Mr||(Mr=function(e){for(var r=arguments.length,s=new Array(r>1?r-1:0),n=1;n<r;n++)s[n-1]=arguments[n];return new e(...s)});var Qt=we(Array.prototype.forEach),ei=we(Array.prototype.lastIndexOf),Ln=we(Array.prototype.pop),Et=we(Array.prototype.push),ti=we(Array.prototype.splice),er=we(String.prototype.toLowerCase),$r=we(String.prototype.toString),Er=we(String.prototype.match),Ct=we(String.prototype.replace),ri=we(String.prototype.indexOf),ni=we(String.prototype.trim),Ee=we(Object.prototype.hasOwnProperty),be=we(RegExp.prototype.test),Rt=si(TypeError);function we(t){return function(e){e instanceof RegExp&&(e.lastIndex=0);for(var r=arguments.length,s=new Array(r>1?r-1:0),n=1;n<r;n++)s[n-1]=arguments[n];return Nr(t,e,s)}}function si(t){return function(){for(var e=arguments.length,r=new Array(e),s=0;s<e;s++)r[s]=arguments[s];return Mr(t,r)}}function G(t,e){let r=arguments.length>2&&arguments[2]!==void 0?arguments[2]:er;In&&In(t,null);let s=e.length;for(;s--;){let n=e[s];if(typeof n=="string"){let i=r(n);i!==n&&(Xs(e)||(e[s]=i),n=i)}t[n]=!0}return t}function ii(t){for(let e=0;e<t.length;e++)Ee(t,e)||(t[e]=null);return t}function Fe(t){let e=Dr(null);for(let[r,s]of zn(t))Ee(t,r)&&(Array.isArray(s)?e[r]=ii(s):s&&typeof s=="object"&&s.constructor===Object?e[r]=Fe(s):e[r]=s);return e}function It(t,e){for(;t!==null;){let s=Js(t,e);if(s){if(s.get)return we(s.get);if(typeof s.value=="function")return we(s.value)}t=Qs(t)}function r(){return null}return r}var Dn=ye(["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"]),Cr=ye(["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"]),Rr=ye(["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"]),oi=ye(["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"]),Ir=ye(["math","menclose","merror","mfenced","mfrac","mglyph","mi","mlabeledtr","mmultiscripts","mn","mo","mover","mpadded","mphantom","mroot","mrow","ms","mspace","msqrt","mstyle","msub","msup","msubsup","mtable","mtd","mtext","mtr","munder","munderover","mprescripts"]),ai=ye(["maction","maligngroup","malignmark","mlongdiv","mscarries","mscarry","msgroup","mstack","msline","msrow","semantics","annotation","annotation-xml","mprescripts","none"]),Nn=ye(["#text"]),Mn=ye(["accept","action","align","alt","autocapitalize","autocomplete","autopictureinpicture","autoplay","background","bgcolor","border","capture","cellpadding","cellspacing","checked","cite","class","clear","color","cols","colspan","controls","controlslist","coords","crossorigin","datetime","decoding","default","dir","disabled","disablepictureinpicture","disableremoteplayback","download","draggable","enctype","enterkeyhint","exportparts","face","for","headers","height","hidden","high","href","hreflang","id","inert","inputmode","integrity","ismap","kind","label","lang","list","loading","loop","low","max","maxlength","media","method","min","minlength","multiple","muted","name","nonce","noshade","novalidate","nowrap","open","optimum","part","pattern","placeholder","playsinline","popover","popovertarget","popovertargetaction","poster","preload","pubdate","radiogroup","readonly","rel","required","rev","reversed","role","rows","rowspan","spellcheck","scope","selected","shape","size","sizes","slot","span","srclang","start","src","srcset","step","style","summary","tabindex","title","translate","type","usemap","valign","value","width","wrap","xmlns","slot"]),Lr=ye(["accent-height","accumulate","additive","alignment-baseline","amplitude","ascent","attributename","attributetype","azimuth","basefrequency","baseline-shift","begin","bias","by","class","clip","clippathunits","clip-path","clip-rule","color","color-interpolation","color-interpolation-filters","color-profile","color-rendering","cx","cy","d","dx","dy","diffuseconstant","direction","display","divisor","dur","edgemode","elevation","end","exponent","fill","fill-opacity","fill-rule","filter","filterunits","flood-color","flood-opacity","font-family","font-size","font-size-adjust","font-stretch","font-style","font-variant","font-weight","fx","fy","g1","g2","glyph-name","glyphref","gradientunits","gradienttransform","height","href","id","image-rendering","in","in2","intercept","k","k1","k2","k3","k4","kerning","keypoints","keysplines","keytimes","lang","lengthadjust","letter-spacing","kernelmatrix","kernelunitlength","lighting-color","local","marker-end","marker-mid","marker-start","markerheight","markerunits","markerwidth","maskcontentunits","maskunits","max","mask","mask-type","media","method","mode","min","name","numoctaves","offset","operator","opacity","order","orient","orientation","origin","overflow","paint-order","path","pathlength","patterncontentunits","patterntransform","patternunits","points","preservealpha","preserveaspectratio","primitiveunits","r","rx","ry","radius","refx","refy","repeatcount","repeatdur","restart","result","rotate","scale","seed","shape-rendering","slope","specularconstant","specularexponent","spreadmethod","startoffset","stddeviation","stitchtiles","stop-color","stop-opacity","stroke-dasharray","stroke-dashoffset","stroke-linecap","stroke-linejoin","stroke-miterlimit","stroke-opacity","stroke","stroke-width","style","surfacescale","systemlanguage","tabindex","tablevalues","targetx","targety","transform","transform-origin","text-anchor","text-decoration","text-rendering","textlength","type","u1","u2","unicode","values","viewbox","visibility","version","vert-adv-y","vert-origin-x","vert-origin-y","width","word-spacing","wrap","writing-mode","xchannelselector","ychannelselector","x","x1","x2","xmlns","y","y1","y2","z","zoomandpan"]),On=ye(["accent","accentunder","align","bevelled","close","columnsalign","columnlines","columnspan","denomalign","depth","dir","display","displaystyle","encoding","fence","frame","height","href","id","largeop","length","linethickness","lspace","lquote","mathbackground","mathcolor","mathsize","mathvariant","maxsize","minsize","movablelimits","notation","numalign","open","rowalign","rowlines","rowspacing","rowspan","rspace","rquote","scriptlevel","scriptminsize","scriptsizemultiplier","selection","separator","separators","stretchy","subscriptshift","supscriptshift","symmetric","voffset","width","xmlns"]),Jt=ye(["xlink:href","xml:id","xlink:title","xml:space","xmlns:xlink"]),li=Te(/\{\{[\w\W]*|[\w\W]*\}\}/gm),ci=Te(/<%[\w\W]*|[\w\W]*%>/gm),di=Te(/\$\{[\w\W]*/gm),ui=Te(/^data-[\-\w.\u00B7-\uFFFF]+$/),pi=Te(/^aria-[\-\w]+$/),Bn=Te(/^(?:(?:(?:f|ht)tps?|mailto|tel|callto|sms|cid|xmpp|matrix):|[^a-z]|[a-z+.\-]+(?:[^a-z+.\-:]|$))/i),fi=Te(/^(?:\w+script|data):/i),hi=Te(/[\u0000-\u0020\u00A0\u1680\u180E\u2000-\u2029\u205F\u3000]/g),Hn=Te(/^html$/i),gi=Te(/^[a-z][.\w]*(-[.\w]+)+$/i),Pn=Object.freeze({__proto__:null,ARIA_ATTR:pi,ATTR_WHITESPACE:hi,CUSTOM_ELEMENT:gi,DATA_ATTR:ui,DOCTYPE_NAME:Hn,ERB_EXPR:ci,IS_ALLOWED_URI:Bn,IS_SCRIPT_OR_DATA:fi,MUSTACHE_EXPR:li,TMPLIT_EXPR:di}),Lt={element:1,attribute:2,text:3,cdataSection:4,entityReference:5,entityNode:6,progressingInstruction:7,comment:8,document:9,documentType:10,documentFragment:11,notation:12},mi=function(){return typeof window>"u"?null:window},bi=function(e,r){if(typeof e!="object"||typeof e.createPolicy!="function")return null;let s=null,n="data-tt-policy-suffix";r&&r.hasAttribute(n)&&(s=r.getAttribute(n));let i="dompurify"+(s?"#"+s:"");try{return e.createPolicy(i,{createHTML(o){return o},createScriptURL(o){return o}})}catch{return console.warn("TrustedTypes policy "+i+" could not be created."),null}},Fn=function(){return{afterSanitizeAttributes:[],afterSanitizeElements:[],afterSanitizeShadowDOM:[],beforeSanitizeAttributes:[],beforeSanitizeElements:[],beforeSanitizeShadowDOM:[],uponSanitizeAttribute:[],uponSanitizeElement:[],uponSanitizeShadowNode:[]}};function Un(){let t=arguments.length>0&&arguments[0]!==void 0?arguments[0]:mi(),e=P=>Un(P);if(e.version="3.3.0",e.removed=[],!t||!t.document||t.document.nodeType!==Lt.document||!t.Element)return e.isSupported=!1,e;let{document:r}=t,s=r,n=s.currentScript,{DocumentFragment:i,HTMLTemplateElement:o,Node:a,Element:l,NodeFilter:u,NamedNodeMap:g=t.NamedNodeMap||t.MozNamedAttrMap,HTMLFormElement:d,DOMParser:p,trustedTypes:h}=t,k=l.prototype,_=It(k,"cloneNode"),I=It(k,"remove"),A=It(k,"nextSibling"),F=It(k,"childNodes"),E=It(k,"parentNode");if(typeof o=="function"){let P=r.createElement("template");P.content&&P.content.ownerDocument&&(r=P.content.ownerDocument)}let S,O="",{implementation:y,createNodeIterator:w,createDocumentFragment:b,getElementsByTagName:$}=r,{importNode:T}=s,L=Fn();e.isSupported=typeof zn=="function"&&typeof E=="function"&&y&&y.createHTMLDocument!==void 0;let{MUSTACHE_EXPR:B,ERB_EXPR:q,TMPLIT_EXPR:Z,DATA_ATTR:X,ARIA_ATTR:W,IS_SCRIPT_OR_DATA:ie,ATTR_WHITESPACE:oe,CUSTOM_ELEMENT:ce}=Pn,{IS_ALLOWED_URI:ae}=Pn,z=null,xe=G({},[...Dn,...Cr,...Rr,...Ir,...Nn]),re=null,ze=G({},[...Mn,...Lr,...On,...Jt]),ee=Object.seal(Dr(null,{tagNameCheck:{writable:!0,configurable:!1,enumerable:!0,value:null},attributeNameCheck:{writable:!0,configurable:!1,enumerable:!0,value:null},allowCustomizedBuiltInElements:{writable:!0,configurable:!1,enumerable:!0,value:!1}})),v=null,m=null,j=Object.seal(Dr(null,{tagCheck:{writable:!0,configurable:!1,enumerable:!0,value:null},attributeCheck:{writable:!0,configurable:!1,enumerable:!0,value:null}})),K=!0,_e=!0,De=!1,gt=!0,Be=!1,N=!0,Ne=!1,mt=!1,bt=!1,He=!1,st=!1,it=!1,Bt=!0,f=!1,D="user-content-",U=!0,C=!1,Q={},ue=null,yt=G({},["annotation-xml","audio","colgroup","desc","foreignobject","head","iframe","math","mi","mn","mo","ms","mtext","noembed","noframes","noscript","plaintext","script","style","svg","template","thead","title","video","xmp"]),ge=null,Ht=G({},["audio","video","img","source","image","track"]),wt=null,Ut=G({},["alt","class","for","id","label","name","pattern","placeholder","role","summary","title","value","style","xmlns"]),Ue="http://www.w3.org/1998/Math/MathML",ot="http://www.w3.org/2000/svg",H="http://www.w3.org/1999/xhtml",te=H,qe=!1,qt=null,ws=G({},[Ue,ot,H],$r),jt=G({},["mi","mo","mn","ms","mtext"]),Gt=G({},["annotation-xml"]),ks=G({},["title","style","font","a","script"]),kt=null,xs=["application/xhtml+xml","text/html"],_s="text/html",pe=null,at=null,vs=r.createElement("form"),Vr=function(c){return c instanceof RegExp||c instanceof Function},pr=function(){let c=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};if(!(at&&at===c)){if((!c||typeof c!="object")&&(c={}),c=Fe(c),kt=xs.indexOf(c.PARSER_MEDIA_TYPE)===-1?_s:c.PARSER_MEDIA_TYPE,pe=kt==="application/xhtml+xml"?$r:er,z=Ee(c,"ALLOWED_TAGS")?G({},c.ALLOWED_TAGS,pe):xe,re=Ee(c,"ALLOWED_ATTR")?G({},c.ALLOWED_ATTR,pe):ze,qt=Ee(c,"ALLOWED_NAMESPACES")?G({},c.ALLOWED_NAMESPACES,$r):ws,wt=Ee(c,"ADD_URI_SAFE_ATTR")?G(Fe(Ut),c.ADD_URI_SAFE_ATTR,pe):Ut,ge=Ee(c,"ADD_DATA_URI_TAGS")?G(Fe(Ht),c.ADD_DATA_URI_TAGS,pe):Ht,ue=Ee(c,"FORBID_CONTENTS")?G({},c.FORBID_CONTENTS,pe):yt,v=Ee(c,"FORBID_TAGS")?G({},c.FORBID_TAGS,pe):Fe({}),m=Ee(c,"FORBID_ATTR")?G({},c.FORBID_ATTR,pe):Fe({}),Q=Ee(c,"USE_PROFILES")?c.USE_PROFILES:!1,K=c.ALLOW_ARIA_ATTR!==!1,_e=c.ALLOW_DATA_ATTR!==!1,De=c.ALLOW_UNKNOWN_PROTOCOLS||!1,gt=c.ALLOW_SELF_CLOSE_IN_ATTR!==!1,Be=c.SAFE_FOR_TEMPLATES||!1,N=c.SAFE_FOR_XML!==!1,Ne=c.WHOLE_DOCUMENT||!1,He=c.RETURN_DOM||!1,st=c.RETURN_DOM_FRAGMENT||!1,it=c.RETURN_TRUSTED_TYPE||!1,bt=c.FORCE_BODY||!1,Bt=c.SANITIZE_DOM!==!1,f=c.SANITIZE_NAMED_PROPS||!1,U=c.KEEP_CONTENT!==!1,C=c.IN_PLACE||!1,ae=c.ALLOWED_URI_REGEXP||Bn,te=c.NAMESPACE||H,jt=c.MATHML_TEXT_INTEGRATION_POINTS||jt,Gt=c.HTML_INTEGRATION_POINTS||Gt,ee=c.CUSTOM_ELEMENT_HANDLING||{},c.CUSTOM_ELEMENT_HANDLING&&Vr(c.CUSTOM_ELEMENT_HANDLING.tagNameCheck)&&(ee.tagNameCheck=c.CUSTOM_ELEMENT_HANDLING.tagNameCheck),c.CUSTOM_ELEMENT_HANDLING&&Vr(c.CUSTOM_ELEMENT_HANDLING.attributeNameCheck)&&(ee.attributeNameCheck=c.CUSTOM_ELEMENT_HANDLING.attributeNameCheck),c.CUSTOM_ELEMENT_HANDLING&&typeof c.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements=="boolean"&&(ee.allowCustomizedBuiltInElements=c.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements),Be&&(_e=!1),st&&(He=!0),Q&&(z=G({},Nn),re=[],Q.html===!0&&(G(z,Dn),G(re,Mn)),Q.svg===!0&&(G(z,Cr),G(re,Lr),G(re,Jt)),Q.svgFilters===!0&&(G(z,Rr),G(re,Lr),G(re,Jt)),Q.mathMl===!0&&(G(z,Ir),G(re,On),G(re,Jt))),c.ADD_TAGS&&(typeof c.ADD_TAGS=="function"?j.tagCheck=c.ADD_TAGS:(z===xe&&(z=Fe(z)),G(z,c.ADD_TAGS,pe))),c.ADD_ATTR&&(typeof c.ADD_ATTR=="function"?j.attributeCheck=c.ADD_ATTR:(re===ze&&(re=Fe(re)),G(re,c.ADD_ATTR,pe))),c.ADD_URI_SAFE_ATTR&&G(wt,c.ADD_URI_SAFE_ATTR,pe),c.FORBID_CONTENTS&&(ue===yt&&(ue=Fe(ue)),G(ue,c.FORBID_CONTENTS,pe)),U&&(z["#text"]=!0),Ne&&G(z,["html","head","body"]),z.table&&(G(z,["tbody"]),delete v.tbody),c.TRUSTED_TYPES_POLICY){if(typeof c.TRUSTED_TYPES_POLICY.createHTML!="function")throw Rt('TRUSTED_TYPES_POLICY configuration option must provide a "createHTML" hook.');if(typeof c.TRUSTED_TYPES_POLICY.createScriptURL!="function")throw Rt('TRUSTED_TYPES_POLICY configuration option must provide a "createScriptURL" hook.');S=c.TRUSTED_TYPES_POLICY,O=S.createHTML("")}else S===void 0&&(S=bi(h,n)),S!==null&&typeof O=="string"&&(O=S.createHTML(""));ye&&ye(c),at=c}},Yr=G({},[...Cr,...Rr,...oi]),Xr=G({},[...Ir,...ai]),As=function(c){let x=E(c);(!x||!x.tagName)&&(x={namespaceURI:te,tagName:"template"});let M=er(c.tagName),ne=er(x.tagName);return qt[c.namespaceURI]?c.namespaceURI===ot?x.namespaceURI===H?M==="svg":x.namespaceURI===Ue?M==="svg"&&(ne==="annotation-xml"||jt[ne]):!!Yr[M]:c.namespaceURI===Ue?x.namespaceURI===H?M==="math":x.namespaceURI===ot?M==="math"&&Gt[ne]:!!Xr[M]:c.namespaceURI===H?x.namespaceURI===ot&&!Gt[ne]||x.namespaceURI===Ue&&!jt[ne]?!1:!Xr[M]&&(ks[M]||!Yr[M]):!!(kt==="application/xhtml+xml"&&qt[c.namespaceURI]):!1},Ie=function(c){Et(e.removed,{element:c});try{E(c).removeChild(c)}catch{I(c)}},Ve=function(c,x){try{Et(e.removed,{attribute:x.getAttributeNode(c),from:x})}catch{Et(e.removed,{attribute:null,from:x})}if(x.removeAttribute(c),c==="is")if(He||st)try{Ie(x)}catch{}else try{x.setAttribute(c,"")}catch{}},Qr=function(c){let x=null,M=null;if(bt)c="<remove></remove>"+c;else{let de=Er(c,/^[\r\n\t ]+/);M=de&&de[0]}kt==="application/xhtml+xml"&&te===H&&(c='<html xmlns="http://www.w3.org/1999/xhtml"><head></head><body>'+c+"</body></html>");let ne=S?S.createHTML(c):c;if(te===H)try{x=new p().parseFromString(ne,kt)}catch{}if(!x||!x.documentElement){x=y.createDocument(te,"template",null);try{x.documentElement.innerHTML=qe?O:ne}catch{}}let me=x.body||x.documentElement;return c&&M&&me.insertBefore(r.createTextNode(M),me.childNodes[0]||null),te===H?$.call(x,Ne?"html":"body")[0]:Ne?x.documentElement:me},Jr=function(c){return w.call(c.ownerDocument||c,c,u.SHOW_ELEMENT|u.SHOW_COMMENT|u.SHOW_TEXT|u.SHOW_PROCESSING_INSTRUCTION|u.SHOW_CDATA_SECTION,null)},fr=function(c){return c instanceof d&&(typeof c.nodeName!="string"||typeof c.textContent!="string"||typeof c.removeChild!="function"||!(c.attributes instanceof g)||typeof c.removeAttribute!="function"||typeof c.setAttribute!="function"||typeof c.namespaceURI!="string"||typeof c.insertBefore!="function"||typeof c.hasChildNodes!="function")},en=function(c){return typeof a=="function"&&c instanceof a};function Me(P,c,x){Qt(P,M=>{M.call(e,c,x,at)})}let tn=function(c){let x=null;if(Me(L.beforeSanitizeElements,c,null),fr(c))return Ie(c),!0;let M=pe(c.nodeName);if(Me(L.uponSanitizeElement,c,{tagName:M,allowedTags:z}),N&&c.hasChildNodes()&&!en(c.firstElementChild)&&be(/<[/\w!]/g,c.innerHTML)&&be(/<[/\w!]/g,c.textContent)||c.nodeType===Lt.progressingInstruction||N&&c.nodeType===Lt.comment&&be(/<[/\w]/g,c.data))return Ie(c),!0;if(!(j.tagCheck instanceof Function&&j.tagCheck(M))&&(!z[M]||v[M])){if(!v[M]&&nn(M)&&(ee.tagNameCheck instanceof RegExp&&be(ee.tagNameCheck,M)||ee.tagNameCheck instanceof Function&&ee.tagNameCheck(M)))return!1;if(U&&!ue[M]){let ne=E(c)||c.parentNode,me=F(c)||c.childNodes;if(me&&ne){let de=me.length;for(let ve=de-1;ve>=0;--ve){let Oe=_(me[ve],!0);Oe.__removalCount=(c.__removalCount||0)+1,ne.insertBefore(Oe,A(c))}}}return Ie(c),!0}return c instanceof l&&!As(c)||(M==="noscript"||M==="noembed"||M==="noframes")&&be(/<\/no(script|embed|frames)/i,c.innerHTML)?(Ie(c),!0):(Be&&c.nodeType===Lt.text&&(x=c.textContent,Qt([B,q,Z],ne=>{x=Ct(x,ne," ")}),c.textContent!==x&&(Et(e.removed,{element:c.cloneNode()}),c.textContent=x)),Me(L.afterSanitizeElements,c,null),!1)},rn=function(c,x,M){if(Bt&&(x==="id"||x==="name")&&(M in r||M in vs))return!1;if(!(_e&&!m[x]&&be(X,x))){if(!(K&&be(W,x))){if(!(j.attributeCheck instanceof Function&&j.attributeCheck(x,c))){if(!re[x]||m[x]){if(!(nn(c)&&(ee.tagNameCheck instanceof RegExp&&be(ee.tagNameCheck,c)||ee.tagNameCheck instanceof Function&&ee.tagNameCheck(c))&&(ee.attributeNameCheck instanceof RegExp&&be(ee.attributeNameCheck,x)||ee.attributeNameCheck instanceof Function&&ee.attributeNameCheck(x,c))||x==="is"&&ee.allowCustomizedBuiltInElements&&(ee.tagNameCheck instanceof RegExp&&be(ee.tagNameCheck,M)||ee.tagNameCheck instanceof Function&&ee.tagNameCheck(M))))return!1}else if(!wt[x]){if(!be(ae,Ct(M,oe,""))){if(!((x==="src"||x==="xlink:href"||x==="href")&&c!=="script"&&ri(M,"data:")===0&&ge[c])){if(!(De&&!be(ie,Ct(M,oe,"")))){if(M)return!1}}}}}}}return!0},nn=function(c){return c!=="annotation-xml"&&Er(c,ce)},sn=function(c){Me(L.beforeSanitizeAttributes,c,null);let{attributes:x}=c;if(!x||fr(c))return;let M={attrName:"",attrValue:"",keepAttr:!0,allowedAttributes:re,forceKeepAttr:void 0},ne=x.length;for(;ne--;){let me=x[ne],{name:de,namespaceURI:ve,value:Oe}=me,lt=pe(de),hr=Oe,fe=de==="value"?hr:ni(hr);if(M.attrName=lt,M.attrValue=fe,M.keepAttr=!0,M.forceKeepAttr=void 0,Me(L.uponSanitizeAttribute,c,M),fe=M.attrValue,f&&(lt==="id"||lt==="name")&&(Ve(de,c),fe=D+fe),N&&be(/((--!?|])>)|<\/(style|title|textarea)/i,fe)){Ve(de,c);continue}if(lt==="attributename"&&Er(fe,"href")){Ve(de,c);continue}if(M.forceKeepAttr)continue;if(!M.keepAttr){Ve(de,c);continue}if(!gt&&be(/\/>/i,fe)){Ve(de,c);continue}Be&&Qt([B,q,Z],an=>{fe=Ct(fe,an," ")});let on=pe(c.nodeName);if(!rn(on,lt,fe)){Ve(de,c);continue}if(S&&typeof h=="object"&&typeof h.getAttributeType=="function"&&!ve)switch(h.getAttributeType(on,lt)){case"TrustedHTML":{fe=S.createHTML(fe);break}case"TrustedScriptURL":{fe=S.createScriptURL(fe);break}}if(fe!==hr)try{ve?c.setAttributeNS(ve,de,fe):c.setAttribute(de,fe),fr(c)?Ie(c):Ln(e.removed)}catch{Ve(de,c)}}Me(L.afterSanitizeAttributes,c,null)},Ss=function P(c){let x=null,M=Jr(c);for(Me(L.beforeSanitizeShadowDOM,c,null);x=M.nextNode();)Me(L.uponSanitizeShadowNode,x,null),tn(x),sn(x),x.content instanceof i&&P(x.content);Me(L.afterSanitizeShadowDOM,c,null)};return e.sanitize=function(P){let c=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},x=null,M=null,ne=null,me=null;if(qe=!P,qe&&(P="<!-->"),typeof P!="string"&&!en(P))if(typeof P.toString=="function"){if(P=P.toString(),typeof P!="string")throw Rt("dirty is not a string, aborting")}else throw Rt("toString is not a function");if(!e.isSupported)return P;if(mt||pr(c),e.removed=[],typeof P=="string"&&(C=!1),C){if(P.nodeName){let Oe=pe(P.nodeName);if(!z[Oe]||v[Oe])throw Rt("root node is forbidden and cannot be sanitized in-place")}}else if(P instanceof a)x=Qr("<!---->"),M=x.ownerDocument.importNode(P,!0),M.nodeType===Lt.element&&M.nodeName==="BODY"||M.nodeName==="HTML"?x=M:x.appendChild(M);else{if(!He&&!Be&&!Ne&&P.indexOf("<")===-1)return S&&it?S.createHTML(P):P;if(x=Qr(P),!x)return He?null:it?O:""}x&&bt&&Ie(x.firstChild);let de=Jr(C?P:x);for(;ne=de.nextNode();)tn(ne),sn(ne),ne.content instanceof i&&Ss(ne.content);if(C)return P;if(He){if(st)for(me=b.call(x.ownerDocument);x.firstChild;)me.appendChild(x.firstChild);else me=x;return(re.shadowroot||re.shadowrootmode)&&(me=T.call(s,me,!0)),me}let ve=Ne?x.outerHTML:x.innerHTML;return Ne&&z["!doctype"]&&x.ownerDocument&&x.ownerDocument.doctype&&x.ownerDocument.doctype.name&&be(Hn,x.ownerDocument.doctype.name)&&(ve="<!DOCTYPE "+x.ownerDocument.doctype.name+`>
66
+ `+ve),Be&&Qt([B,q,Z],Oe=>{ve=Ct(ve,Oe," ")}),S&&it?S.createHTML(ve):ve},e.setConfig=function(){let P=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};pr(P),mt=!0},e.clearConfig=function(){at=null,mt=!1},e.isValidAttribute=function(P,c,x){at||pr({});let M=pe(P),ne=pe(c);return rn(M,ne,x)},e.addHook=function(P,c){typeof c=="function"&&Et(L[P],c)},e.removeHook=function(P,c){if(c!==void 0){let x=ei(L[P],c);return x===-1?void 0:ti(L[P],x,1)[0]}return Ln(L[P])},e.removeHooks=function(P){L[P]=[]},e.removeAllHooks=function(){L=Fn()},e}var qn=Un();var jn={ATTRIBUTE:1,CHILD:2,PROPERTY:3,BOOLEAN_ATTRIBUTE:4,EVENT:5,ELEMENT:6},Gn=t=>(...e)=>({_$litDirective$:t,values:e}),tr=class{constructor(e){}get _$AU(){return this._$AM._$AU}_$AT(e,r,s){this._$Ct=e,this._$AM=r,this._$Ci=s}_$AS(e,r){return this.update(e,r)}update(e,r){return this.render(...r)}};var Dt=class extends tr{constructor(e){if(super(e),this.it=le,e.type!==jn.CHILD)throw Error(this.constructor.directiveName+"() can only be used in child bindings")}render(e){if(e===le||e==null)return this._t=void 0,this.it=e;if(e===Je)return e;if(typeof e!="string")throw Error(this.constructor.directiveName+"() called with a non-string value");if(e===this.it)return this._t;this.it=e;let r=[e];return r.raw=r,this._t={_$litType$:this.constructor.resultType,strings:r,values:[]}}};Dt.directiveName="unsafeHTML",Dt.resultType=1;var Wn=Gn(Dt);function zr(){return{async:!1,breaks:!1,extensions:null,gfm:!0,hooks:null,pedantic:!1,renderer:null,silent:!1,tokenizer:null,walkTokens:null}}var nt=zr();function Jn(t){nt=t}var Pt={exec:()=>null};function V(t,e=""){let r=typeof t=="string"?t:t.source,s={replace:(n,i)=>{let o=typeof i=="string"?i:i.source;return o=o.replace(ke.caret,"$1"),r=r.replace(n,o),s},getRegex:()=>new RegExp(r,e)};return s}var ke={codeRemoveIndent:/^(?: {1,4}| {0,3}\t)/gm,outputLinkReplace:/\\([\[\]])/g,indentCodeCompensation:/^(\s+)(?:```)/,beginningSpace:/^\s+/,endingHash:/#$/,startingSpaceChar:/^ /,endingSpaceChar:/ $/,nonSpaceChar:/[^ ]/,newLineCharGlobal:/\n/g,tabCharGlobal:/\t/g,multipleSpaceGlobal:/\s+/g,blankLine:/^[ \t]*$/,doubleBlankLine:/\n[ \t]*\n[ \t]*$/,blockquoteStart:/^ {0,3}>/,blockquoteSetextReplace:/\n {0,3}((?:=+|-+) *)(?=\n|$)/g,blockquoteSetextReplace2:/^ {0,3}>[ \t]?/gm,listReplaceTabs:/^\t+/,listReplaceNesting:/^ {1,4}(?=( {4})*[^ ])/g,listIsTask:/^\[[ xX]\] /,listReplaceTask:/^\[[ xX]\] +/,anyLine:/\n.*\n/,hrefBrackets:/^<(.*)>$/,tableDelimiter:/[:|]/,tableAlignChars:/^\||\| *$/g,tableRowBlankLine:/\n[ \t]*$/,tableAlignRight:/^ *-+: *$/,tableAlignCenter:/^ *:-+: *$/,tableAlignLeft:/^ *:-+ *$/,startATag:/^<a /i,endATag:/^<\/a>/i,startPreScriptTag:/^<(pre|code|kbd|script)(\s|>)/i,endPreScriptTag:/^<\/(pre|code|kbd|script)(\s|>)/i,startAngleBracket:/^</,endAngleBracket:/>$/,pedanticHrefTitle:/^([^'"]*[^\s])\s+(['"])(.*)\2/,unicodeAlphaNumeric:/[\p{L}\p{N}]/u,escapeTest:/[&<>"']/,escapeReplace:/[&<>"']/g,escapeTestNoEncode:/[<>"']|&(?!(#\d{1,7}|#[Xx][a-fA-F0-9]{1,6}|\w+);)/,escapeReplaceNoEncode:/[<>"']|&(?!(#\d{1,7}|#[Xx][a-fA-F0-9]{1,6}|\w+);)/g,unescapeTest:/&(#(?:\d+)|(?:#x[0-9A-Fa-f]+)|(?:\w+));?/ig,caret:/(^|[^\[])\^/g,percentDecode:/%25/g,findPipe:/\|/g,splitPipe:/ \|/,slashPipe:/\\\|/g,carriageReturn:/\r\n|\r/g,spaceLine:/^ +$/gm,notSpaceStart:/^\S*/,endingNewline:/\n$/,listItemRegex:t=>new RegExp(`^( {0,3}${t})((?:[ ][^\\n]*)?(?:\\n|$))`),nextBulletRegex:t=>new RegExp(`^ {0,${Math.min(3,t-1)}}(?:[*+-]|\\d{1,9}[.)])((?:[ ][^\\n]*)?(?:\\n|$))`),hrRegex:t=>new RegExp(`^ {0,${Math.min(3,t-1)}}((?:- *){3,}|(?:_ *){3,}|(?:\\* *){3,})(?:\\n+|$)`),fencesBeginRegex:t=>new RegExp(`^ {0,${Math.min(3,t-1)}}(?:\`\`\`|~~~)`),headingBeginRegex:t=>new RegExp(`^ {0,${Math.min(3,t-1)}}#`),htmlBeginRegex:t=>new RegExp(`^ {0,${Math.min(3,t-1)}}<(?:[a-z].*>|!--)`,"i")},yi=/^(?:[ \t]*(?:\n|$))+/,wi=/^((?: {4}| {0,3}\t)[^\n]+(?:\n(?:[ \t]*(?:\n|$))*)?)+/,ki=/^ {0,3}(`{3,}(?=[^`\n]*(?:\n|$))|~{3,})([^\n]*)(?:\n|$)(?:|([\s\S]*?)(?:\n|$))(?: {0,3}\1[~`]* *(?=\n|$)|$)/,Ft=/^ {0,3}((?:-[\t ]*){3,}|(?:_[ \t]*){3,}|(?:\*[ \t]*){3,})(?:\n+|$)/,xi=/^ {0,3}(#{1,6})(?=\s|$)(.*)(?:\n+|$)/,Br=/(?:[*+-]|\d{1,9}[.)])/,es=/^(?!bull |blockCode|fences|blockquote|heading|html|table)((?:.|\n(?!\s*?\n|bull |blockCode|fences|blockquote|heading|html|table))+?)\n {0,3}(=+|-+) *(?:\n+|$)/,ts=V(es).replace(/bull/g,Br).replace(/blockCode/g,/(?: {4}| {0,3}\t)/).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/).replace(/\|table/g,"").getRegex(),_i=V(es).replace(/bull/g,Br).replace(/blockCode/g,/(?: {4}| {0,3}\t)/).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/).replace(/table/g,/ {0,3}\|?(?:[:\- ]*\|)+[\:\- ]*\n/).getRegex(),Hr=/^([^\n]+(?:\n(?!hr|heading|lheading|blockquote|fences|list|html|table| +\n)[^\n]+)*)/,vi=/^[^\n]+/,Ur=/(?!\s*\])(?:\\[\s\S]|[^\[\]\\])+/,Ai=V(/^ {0,3}\[(label)\]: *(?:\n[ \t]*)?([^<\s][^\s]*|<.*?>)(?:(?: +(?:\n[ \t]*)?| *\n[ \t]*)(title))? *(?:\n+|$)/).replace("label",Ur).replace("title",/(?:"(?:\\"?|[^"\\])*"|'[^'\n]*(?:\n[^'\n]+)*\n?'|\([^()]*\))/).getRegex(),Si=V(/^( {0,3}bull)([ \t][^\n]+?)?(?:\n|$)/).replace(/bull/g,Br).getRegex(),ar="address|article|aside|base|basefont|blockquote|body|caption|center|col|colgroup|dd|details|dialog|dir|div|dl|dt|fieldset|figcaption|figure|footer|form|frame|frameset|h[1-6]|head|header|hr|html|iframe|legend|li|link|main|menu|menuitem|meta|nav|noframes|ol|optgroup|option|p|param|search|section|summary|table|tbody|td|tfoot|th|thead|title|tr|track|ul",qr=/<!--(?:-?>|[\s\S]*?(?:-->|$))/,Ti=V("^ {0,3}(?:<(script|pre|style|textarea)[\\s>][\\s\\S]*?(?:</\\1>[^\\n]*\\n+|$)|comment[^\\n]*(\\n+|$)|<\\?[\\s\\S]*?(?:\\?>\\n*|$)|<![A-Z][\\s\\S]*?(?:>\\n*|$)|<!\\[CDATA\\[[\\s\\S]*?(?:\\]\\]>\\n*|$)|</?(tag)(?: +|\\n|/?>)[\\s\\S]*?(?:(?:\\n[ ]*)+\\n|$)|<(?!script|pre|style|textarea)([a-z][\\w-]*)(?:attribute)*? */?>(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:(?:\\n[ ]*)+\\n|$)|</(?!script|pre|style|textarea)[a-z][\\w-]*\\s*>(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:(?:\\n[ ]*)+\\n|$))","i").replace("comment",qr).replace("tag",ar).replace("attribute",/ +[a-zA-Z:_][\w.:-]*(?: *= *"[^"\n]*"| *= *'[^'\n]*'| *= *[^\s"'=<>`]+)?/).getRegex(),rs=V(Hr).replace("hr",Ft).replace("heading"," {0,3}#{1,6}(?:\\s|$)").replace("|lheading","").replace("|table","").replace("blockquote"," {0,3}>").replace("fences"," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list"," {0,3}(?:[*+-]|1[.)]) ").replace("html","</?(?:tag)(?: +|\\n|/?>)|<(?:script|pre|style|textarea|!--)").replace("tag",ar).getRegex(),$i=V(/^( {0,3}> ?(paragraph|[^\n]*)(?:\n|$))+/).replace("paragraph",rs).getRegex(),jr={blockquote:$i,code:wi,def:Ai,fences:ki,heading:xi,hr:Ft,html:Ti,lheading:ts,list:Si,newline:yi,paragraph:rs,table:Pt,text:vi},Zn=V("^ *([^\\n ].*)\\n {0,3}((?:\\| *)?:?-+:? *(?:\\| *:?-+:? *)*(?:\\| *)?)(?:\\n((?:(?! *\\n|hr|heading|blockquote|code|fences|list|html).*(?:\\n|$))*)\\n*|$)").replace("hr",Ft).replace("heading"," {0,3}#{1,6}(?:\\s|$)").replace("blockquote"," {0,3}>").replace("code","(?: {4}| {0,3} )[^\\n]").replace("fences"," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list"," {0,3}(?:[*+-]|1[.)]) ").replace("html","</?(?:tag)(?: +|\\n|/?>)|<(?:script|pre|style|textarea|!--)").replace("tag",ar).getRegex(),Ei={...jr,lheading:_i,table:Zn,paragraph:V(Hr).replace("hr",Ft).replace("heading"," {0,3}#{1,6}(?:\\s|$)").replace("|lheading","").replace("table",Zn).replace("blockquote"," {0,3}>").replace("fences"," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list"," {0,3}(?:[*+-]|1[.)]) ").replace("html","</?(?:tag)(?: +|\\n|/?>)|<(?:script|pre|style|textarea|!--)").replace("tag",ar).getRegex()},Ci={...jr,html:V(`^ *(?:comment *(?:\\n|\\s*$)|<(tag)[\\s\\S]+?</\\1> *(?:\\n{2,}|\\s*$)|<tag(?:"[^"]*"|'[^']*'|\\s[^'"/>\\s]*)*?/?> *(?:\\n{2,}|\\s*$))`).replace("comment",qr).replace(/tag/g,"(?!(?:a|em|strong|small|s|cite|q|dfn|abbr|data|time|code|var|samp|kbd|sub|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo|span|br|wbr|ins|del|img)\\b)\\w+(?!:|[^\\w\\s@]*@)\\b").getRegex(),def:/^ *\[([^\]]+)\]: *<?([^\s>]+)>?(?: +(["(][^\n]+[")]))? *(?:\n+|$)/,heading:/^(#{1,6})(.*)(?:\n+|$)/,fences:Pt,lheading:/^(.+?)\n {0,3}(=+|-+) *(?:\n+|$)/,paragraph:V(Hr).replace("hr",Ft).replace("heading",` *#{1,6} *[^
67
+ ]`).replace("lheading",ts).replace("|table","").replace("blockquote"," {0,3}>").replace("|fences","").replace("|list","").replace("|html","").replace("|tag","").getRegex()},Ri=/^\\([!"#$%&'()*+,\-./:;<=>?@\[\]\\^_`{|}~])/,Ii=/^(`+)([^`]|[^`][\s\S]*?[^`])\1(?!`)/,ns=/^( {2,}|\\)\n(?!\s*$)/,Li=/^(`+|[^`])(?:(?= {2,}\n)|[\s\S]*?(?:(?=[\\<!\[`*_]|\b_|$)|[^ ](?= {2,}\n)))/,lr=/[\p{P}\p{S}]/u,Gr=/[\s\p{P}\p{S}]/u,ss=/[^\s\p{P}\p{S}]/u,Di=V(/^((?![*_])punctSpace)/,"u").replace(/punctSpace/g,Gr).getRegex(),is=/(?!~)[\p{P}\p{S}]/u,Ni=/(?!~)[\s\p{P}\p{S}]/u,Mi=/(?:[^\s\p{P}\p{S}]|~)/u,Oi=V(/link|code|html/,"g").replace("link",/\[(?:[^\[\]`]|(?<!`)(?<a>`+)[^`]+\k<a>(?!`))*?\]\((?:\\[\s\S]|[^\\\(\)]|\((?:\\[\s\S]|[^\\\(\)])*\))*\)/).replace("code",/(?<!`)(?<b>`+)[^`]+\k<b>(?!`)/).replace("html",/<(?! )[^<>]*?>/).getRegex(),os=/^(?:\*+(?:((?!\*)punct)|[^\s*]))|^_+(?:((?!_)punct)|([^\s_]))/,Pi=V(os,"u").replace(/punct/g,lr).getRegex(),Fi=V(os,"u").replace(/punct/g,is).getRegex(),as="^[^_*]*?__[^_*]*?\\*[^_*]*?(?=__)|[^*]+(?=[^*])|(?!\\*)punct(\\*+)(?=[\\s]|$)|notPunctSpace(\\*+)(?!\\*)(?=punctSpace|$)|(?!\\*)punctSpace(\\*+)(?=notPunctSpace)|[\\s](\\*+)(?!\\*)(?=punct)|(?!\\*)punct(\\*+)(?!\\*)(?=punct)|notPunctSpace(\\*+)(?=notPunctSpace)",zi=V(as,"gu").replace(/notPunctSpace/g,ss).replace(/punctSpace/g,Gr).replace(/punct/g,lr).getRegex(),Bi=V(as,"gu").replace(/notPunctSpace/g,Mi).replace(/punctSpace/g,Ni).replace(/punct/g,is).getRegex(),Hi=V("^[^_*]*?\\*\\*[^_*]*?_[^_*]*?(?=\\*\\*)|[^_]+(?=[^_])|(?!_)punct(_+)(?=[\\s]|$)|notPunctSpace(_+)(?!_)(?=punctSpace|$)|(?!_)punctSpace(_+)(?=notPunctSpace)|[\\s](_+)(?!_)(?=punct)|(?!_)punct(_+)(?!_)(?=punct)","gu").replace(/notPunctSpace/g,ss).replace(/punctSpace/g,Gr).replace(/punct/g,lr).getRegex(),Ui=V(/\\(punct)/,"gu").replace(/punct/g,lr).getRegex(),qi=V(/^<(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(),ji=V(qr).replace("(?:-->|$)","-->").getRegex(),Gi=V("^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",ji).replace("attribute",/\s+[a-zA-Z:_][\w.:-]*(?:\s*=\s*"[^"]*"|\s*=\s*'[^']*'|\s*=\s*[^\s"'=<>`]+)?/).getRegex(),sr=/(?:\[(?:\\[\s\S]|[^\[\]\\])*\]|\\[\s\S]|`+[^`]*?`+(?!`)|[^\[\]\\`])*?/,Wi=V(/^!?\[(label)\]\(\s*(href)(?:(?:[ \t]*(?:\n[ \t]*)?)(title))?\s*\)/).replace("label",sr).replace("href",/<(?:\\.|[^\n<>\\])+>|[^ \t\n\x00-\x1f]*/).replace("title",/"(?:\\"?|[^"\\])*"|'(?:\\'?|[^'\\])*'|\((?:\\\)?|[^)\\])*\)/).getRegex(),ls=V(/^!?\[(label)\]\[(ref)\]/).replace("label",sr).replace("ref",Ur).getRegex(),cs=V(/^!?\[(ref)\](?:\[\])?/).replace("ref",Ur).getRegex(),Zi=V("reflink|nolink(?!\\()","g").replace("reflink",ls).replace("nolink",cs).getRegex(),Kn=/[hH][tT][tT][pP][sS]?|[fF][tT][pP]/,Wr={_backpedal:Pt,anyPunctuation:Ui,autolink:qi,blockSkip:Oi,br:ns,code:Ii,del:Pt,emStrongLDelim:Pi,emStrongRDelimAst:zi,emStrongRDelimUnd:Hi,escape:Ri,link:Wi,nolink:cs,punctuation:Di,reflink:ls,reflinkSearch:Zi,tag:Gi,text:Li,url:Pt},Ki={...Wr,link:V(/^!?\[(label)\]\((.*?)\)/).replace("label",sr).getRegex(),reflink:V(/^!?\[(label)\]\s*\[([^\]]*)\]/).replace("label",sr).getRegex()},Or={...Wr,emStrongRDelimAst:Bi,emStrongLDelim:Fi,url:V(/^((?:protocol):\/\/|www\.)(?:[a-zA-Z0-9\-]+\.?)+[^\s<]*|^email/).replace("protocol",Kn).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\S]|[^\s~\\]))\1(?=[^~]|$)/,text:V(/^([`~]+|[^`~])(?:(?= {2,}\n)|(?=[a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-]+@)|[\s\S]*?(?:(?=[\\<!\[`*~_]|\b_|protocol:\/\/|www\.|$)|[^ ](?= {2,}\n)|[^a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-](?=[a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-]+@)))/).replace("protocol",Kn).getRegex()},Vi={...Or,br:V(ns).replace("{2,}","*").getRegex(),text:V(Or.text).replace("\\b_","\\b_| {2,}\\n").replace(/\{2,\}/g,"*").getRegex()},rr={normal:jr,gfm:Ei,pedantic:Ci},Nt={normal:Wr,gfm:Or,breaks:Vi,pedantic:Ki},Yi={"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;","'":"&#39;"},Vn=t=>Yi[t];function Le(t,e){if(e){if(ke.escapeTest.test(t))return t.replace(ke.escapeReplace,Vn)}else if(ke.escapeTestNoEncode.test(t))return t.replace(ke.escapeReplaceNoEncode,Vn);return t}function Yn(t){try{t=encodeURI(t).replace(ke.percentDecode,"%")}catch{return null}return t}function Xn(t,e){let r=t.replace(ke.findPipe,(i,o,a)=>{let l=!1,u=o;for(;--u>=0&&a[u]==="\\";)l=!l;return l?"|":" |"}),s=r.split(ke.splitPipe),n=0;if(s[0].trim()||s.shift(),s.length>0&&!s.at(-1)?.trim()&&s.pop(),e)if(s.length>e)s.splice(e);else for(;s.length<e;)s.push("");for(;n<s.length;n++)s[n]=s[n].trim().replace(ke.slashPipe,"|");return s}function Mt(t,e,r){let s=t.length;if(s===0)return"";let n=0;for(;n<s;){let i=t.charAt(s-n-1);if(i===e&&!r)n++;else if(i!==e&&r)n++;else break}return t.slice(0,s-n)}function Xi(t,e){if(t.indexOf(e[1])===-1)return-1;let r=0;for(let s=0;s<t.length;s++)if(t[s]==="\\")s++;else if(t[s]===e[0])r++;else if(t[s]===e[1]&&(r--,r<0))return s;return r>0?-2:-1}function Qn(t,e,r,s,n){let i=e.href,o=e.title||null,a=t[1].replace(n.other.outputLinkReplace,"$1");s.state.inLink=!0;let l={type:t[0].charAt(0)==="!"?"image":"link",raw:r,href:i,title:o,text:a,tokens:s.inlineTokens(a)};return s.state.inLink=!1,l}function Qi(t,e,r){let s=t.match(r.other.indentCodeCompensation);if(s===null)return e;let n=s[1];return e.split(`
68
+ `).map(i=>{let o=i.match(r.other.beginningSpace);if(o===null)return i;let[a]=o;return a.length>=n.length?i.slice(n.length):i}).join(`
69
+ `)}var ir=class{constructor(t){J(this,"options");J(this,"rules");J(this,"lexer");this.options=t||nt}space(t){let e=this.rules.block.newline.exec(t);if(e&&e[0].length>0)return{type:"space",raw:e[0]}}code(t){let e=this.rules.block.code.exec(t);if(e){let r=e[0].replace(this.rules.other.codeRemoveIndent,"");return{type:"code",raw:e[0],codeBlockStyle:"indented",text:this.options.pedantic?r:Mt(r,`
70
+ `)}}}fences(t){let e=this.rules.block.fences.exec(t);if(e){let r=e[0],s=Qi(r,e[3]||"",this.rules);return{type:"code",raw:r,lang:e[2]?e[2].trim().replace(this.rules.inline.anyPunctuation,"$1"):e[2],text:s}}}heading(t){let e=this.rules.block.heading.exec(t);if(e){let r=e[2].trim();if(this.rules.other.endingHash.test(r)){let s=Mt(r,"#");(this.options.pedantic||!s||this.rules.other.endingSpaceChar.test(s))&&(r=s.trim())}return{type:"heading",raw:e[0],depth:e[1].length,text:r,tokens:this.lexer.inline(r)}}}hr(t){let e=this.rules.block.hr.exec(t);if(e)return{type:"hr",raw:Mt(e[0],`
71
+ `)}}blockquote(t){let e=this.rules.block.blockquote.exec(t);if(e){let r=Mt(e[0],`
72
+ `).split(`
73
+ `),s="",n="",i=[];for(;r.length>0;){let o=!1,a=[],l;for(l=0;l<r.length;l++)if(this.rules.other.blockquoteStart.test(r[l]))a.push(r[l]),o=!0;else if(!o)a.push(r[l]);else break;r=r.slice(l);let u=a.join(`
74
+ `),g=u.replace(this.rules.other.blockquoteSetextReplace,`
75
+ $1`).replace(this.rules.other.blockquoteSetextReplace2,"");s=s?`${s}
76
+ ${u}`:u,n=n?`${n}
77
+ ${g}`:g;let d=this.lexer.state.top;if(this.lexer.state.top=!0,this.lexer.blockTokens(g,i,!0),this.lexer.state.top=d,r.length===0)break;let p=i.at(-1);if(p?.type==="code")break;if(p?.type==="blockquote"){let h=p,k=h.raw+`
78
+ `+r.join(`
79
+ `),_=this.blockquote(k);i[i.length-1]=_,s=s.substring(0,s.length-h.raw.length)+_.raw,n=n.substring(0,n.length-h.text.length)+_.text;break}else if(p?.type==="list"){let h=p,k=h.raw+`
80
+ `+r.join(`
81
+ `),_=this.list(k);i[i.length-1]=_,s=s.substring(0,s.length-p.raw.length)+_.raw,n=n.substring(0,n.length-h.raw.length)+_.raw,r=k.substring(i.at(-1).raw.length).split(`
82
+ `);continue}}return{type:"blockquote",raw:s,tokens:i,text:n}}}list(t){let e=this.rules.block.list.exec(t);if(e){let r=e[1].trim(),s=r.length>1,n={type:"list",raw:"",ordered:s,start:s?+r.slice(0,-1):"",loose:!1,items:[]};r=s?`\\d{1,9}\\${r.slice(-1)}`:`\\${r}`,this.options.pedantic&&(r=s?r:"[*+-]");let i=this.rules.other.listItemRegex(r),o=!1;for(;t;){let l=!1,u="",g="";if(!(e=i.exec(t))||this.rules.block.hr.test(t))break;u=e[0],t=t.substring(u.length);let d=e[2].split(`
83
+ `,1)[0].replace(this.rules.other.listReplaceTabs,A=>" ".repeat(3*A.length)),p=t.split(`
84
+ `,1)[0],h=!d.trim(),k=0;if(this.options.pedantic?(k=2,g=d.trimStart()):h?k=e[1].length+1:(k=e[2].search(this.rules.other.nonSpaceChar),k=k>4?1:k,g=d.slice(k),k+=e[1].length),h&&this.rules.other.blankLine.test(p)&&(u+=p+`
85
+ `,t=t.substring(p.length+1),l=!0),!l){let A=this.rules.other.nextBulletRegex(k),F=this.rules.other.hrRegex(k),E=this.rules.other.fencesBeginRegex(k),S=this.rules.other.headingBeginRegex(k),O=this.rules.other.htmlBeginRegex(k);for(;t;){let y=t.split(`
86
+ `,1)[0],w;if(p=y,this.options.pedantic?(p=p.replace(this.rules.other.listReplaceNesting," "),w=p):w=p.replace(this.rules.other.tabCharGlobal," "),E.test(p)||S.test(p)||O.test(p)||A.test(p)||F.test(p))break;if(w.search(this.rules.other.nonSpaceChar)>=k||!p.trim())g+=`
87
+ `+w.slice(k);else{if(h||d.replace(this.rules.other.tabCharGlobal," ").search(this.rules.other.nonSpaceChar)>=4||E.test(d)||S.test(d)||F.test(d))break;g+=`
88
+ `+p}!h&&!p.trim()&&(h=!0),u+=y+`
89
+ `,t=t.substring(y.length+1),d=w.slice(k)}}n.loose||(o?n.loose=!0:this.rules.other.doubleBlankLine.test(u)&&(o=!0));let _=null,I;this.options.gfm&&(_=this.rules.other.listIsTask.exec(g),_&&(I=_[0]!=="[ ] ",g=g.replace(this.rules.other.listReplaceTask,""))),n.items.push({type:"list_item",raw:u,task:!!_,checked:I,loose:!1,text:g,tokens:[]}),n.raw+=u}let a=n.items.at(-1);if(a)a.raw=a.raw.trimEnd(),a.text=a.text.trimEnd();else return;n.raw=n.raw.trimEnd();for(let l=0;l<n.items.length;l++)if(this.lexer.state.top=!1,n.items[l].tokens=this.lexer.blockTokens(n.items[l].text,[]),!n.loose){let u=n.items[l].tokens.filter(d=>d.type==="space"),g=u.length>0&&u.some(d=>this.rules.other.anyLine.test(d.raw));n.loose=g}if(n.loose)for(let l=0;l<n.items.length;l++)n.items[l].loose=!0;return n}}html(t){let e=this.rules.block.html.exec(t);if(e)return{type:"html",block:!0,raw:e[0],pre:e[1]==="pre"||e[1]==="script"||e[1]==="style",text:e[0]}}def(t){let e=this.rules.block.def.exec(t);if(e){let r=e[1].toLowerCase().replace(this.rules.other.multipleSpaceGlobal," "),s=e[2]?e[2].replace(this.rules.other.hrefBrackets,"$1").replace(this.rules.inline.anyPunctuation,"$1"):"",n=e[3]?e[3].substring(1,e[3].length-1).replace(this.rules.inline.anyPunctuation,"$1"):e[3];return{type:"def",tag:r,raw:e[0],href:s,title:n}}}table(t){let e=this.rules.block.table.exec(t);if(!e||!this.rules.other.tableDelimiter.test(e[2]))return;let r=Xn(e[1]),s=e[2].replace(this.rules.other.tableAlignChars,"").split("|"),n=e[3]?.trim()?e[3].replace(this.rules.other.tableRowBlankLine,"").split(`
90
+ `):[],i={type:"table",raw:e[0],header:[],align:[],rows:[]};if(r.length===s.length){for(let o of s)this.rules.other.tableAlignRight.test(o)?i.align.push("right"):this.rules.other.tableAlignCenter.test(o)?i.align.push("center"):this.rules.other.tableAlignLeft.test(o)?i.align.push("left"):i.align.push(null);for(let o=0;o<r.length;o++)i.header.push({text:r[o],tokens:this.lexer.inline(r[o]),header:!0,align:i.align[o]});for(let o of n)i.rows.push(Xn(o,i.header.length).map((a,l)=>({text:a,tokens:this.lexer.inline(a),header:!1,align:i.align[l]})));return i}}lheading(t){let e=this.rules.block.lheading.exec(t);if(e)return{type:"heading",raw:e[0],depth:e[2].charAt(0)==="="?1:2,text:e[1],tokens:this.lexer.inline(e[1])}}paragraph(t){let e=this.rules.block.paragraph.exec(t);if(e){let r=e[1].charAt(e[1].length-1)===`
91
+ `?e[1].slice(0,-1):e[1];return{type:"paragraph",raw:e[0],text:r,tokens:this.lexer.inline(r)}}}text(t){let e=this.rules.block.text.exec(t);if(e)return{type:"text",raw:e[0],text:e[0],tokens:this.lexer.inline(e[0])}}escape(t){let e=this.rules.inline.escape.exec(t);if(e)return{type:"escape",raw:e[0],text:e[1]}}tag(t){let e=this.rules.inline.tag.exec(t);if(e)return!this.lexer.state.inLink&&this.rules.other.startATag.test(e[0])?this.lexer.state.inLink=!0:this.lexer.state.inLink&&this.rules.other.endATag.test(e[0])&&(this.lexer.state.inLink=!1),!this.lexer.state.inRawBlock&&this.rules.other.startPreScriptTag.test(e[0])?this.lexer.state.inRawBlock=!0:this.lexer.state.inRawBlock&&this.rules.other.endPreScriptTag.test(e[0])&&(this.lexer.state.inRawBlock=!1),{type:"html",raw:e[0],inLink:this.lexer.state.inLink,inRawBlock:this.lexer.state.inRawBlock,block:!1,text:e[0]}}link(t){let e=this.rules.inline.link.exec(t);if(e){let r=e[2].trim();if(!this.options.pedantic&&this.rules.other.startAngleBracket.test(r)){if(!this.rules.other.endAngleBracket.test(r))return;let i=Mt(r.slice(0,-1),"\\");if((r.length-i.length)%2===0)return}else{let i=Xi(e[2],"()");if(i===-2)return;if(i>-1){let o=(e[0].indexOf("!")===0?5:4)+e[1].length+i;e[2]=e[2].substring(0,i),e[0]=e[0].substring(0,o).trim(),e[3]=""}}let s=e[2],n="";if(this.options.pedantic){let i=this.rules.other.pedanticHrefTitle.exec(s);i&&(s=i[1],n=i[3])}else n=e[3]?e[3].slice(1,-1):"";return s=s.trim(),this.rules.other.startAngleBracket.test(s)&&(this.options.pedantic&&!this.rules.other.endAngleBracket.test(r)?s=s.slice(1):s=s.slice(1,-1)),Qn(e,{href:s&&s.replace(this.rules.inline.anyPunctuation,"$1"),title:n&&n.replace(this.rules.inline.anyPunctuation,"$1")},e[0],this.lexer,this.rules)}}reflink(t,e){let r;if((r=this.rules.inline.reflink.exec(t))||(r=this.rules.inline.nolink.exec(t))){let s=(r[2]||r[1]).replace(this.rules.other.multipleSpaceGlobal," "),n=e[s.toLowerCase()];if(!n){let i=r[0].charAt(0);return{type:"text",raw:i,text:i}}return Qn(r,n,r[0],this.lexer,this.rules)}}emStrong(t,e,r=""){let s=this.rules.inline.emStrongLDelim.exec(t);if(!(!s||s[3]&&r.match(this.rules.other.unicodeAlphaNumeric))&&(!(s[1]||s[2])||!r||this.rules.inline.punctuation.exec(r))){let n=[...s[0]].length-1,i,o,a=n,l=0,u=s[0][0]==="*"?this.rules.inline.emStrongRDelimAst:this.rules.inline.emStrongRDelimUnd;for(u.lastIndex=0,e=e.slice(-1*t.length+n);(s=u.exec(e))!=null;){if(i=s[1]||s[2]||s[3]||s[4]||s[5]||s[6],!i)continue;if(o=[...i].length,s[3]||s[4]){a+=o;continue}else if((s[5]||s[6])&&n%3&&!((n+o)%3)){l+=o;continue}if(a-=o,a>0)continue;o=Math.min(o,o+a+l);let g=[...s[0]][0].length,d=t.slice(0,n+s.index+g+o);if(Math.min(n,o)%2){let h=d.slice(1,-1);return{type:"em",raw:d,text:h,tokens:this.lexer.inlineTokens(h)}}let p=d.slice(2,-2);return{type:"strong",raw:d,text:p,tokens:this.lexer.inlineTokens(p)}}}}codespan(t){let e=this.rules.inline.code.exec(t);if(e){let r=e[2].replace(this.rules.other.newLineCharGlobal," "),s=this.rules.other.nonSpaceChar.test(r),n=this.rules.other.startingSpaceChar.test(r)&&this.rules.other.endingSpaceChar.test(r);return s&&n&&(r=r.substring(1,r.length-1)),{type:"codespan",raw:e[0],text:r}}}br(t){let e=this.rules.inline.br.exec(t);if(e)return{type:"br",raw:e[0]}}del(t){let e=this.rules.inline.del.exec(t);if(e)return{type:"del",raw:e[0],text:e[2],tokens:this.lexer.inlineTokens(e[2])}}autolink(t){let e=this.rules.inline.autolink.exec(t);if(e){let r,s;return e[2]==="@"?(r=e[1],s="mailto:"+r):(r=e[1],s=r),{type:"link",raw:e[0],text:r,href:s,tokens:[{type:"text",raw:r,text:r}]}}}url(t){let e;if(e=this.rules.inline.url.exec(t)){let r,s;if(e[2]==="@")r=e[0],s="mailto:"+r;else{let n;do n=e[0],e[0]=this.rules.inline._backpedal.exec(e[0])?.[0]??"";while(n!==e[0]);r=e[0],e[1]==="www."?s="http://"+e[0]:s=e[0]}return{type:"link",raw:e[0],text:r,href:s,tokens:[{type:"text",raw:r,text:r}]}}}inlineText(t){let e=this.rules.inline.text.exec(t);if(e){let r=this.lexer.state.inRawBlock;return{type:"text",raw:e[0],text:e[0],escaped:r}}}},Ce=class Pr{constructor(e){J(this,"tokens");J(this,"options");J(this,"state");J(this,"tokenizer");J(this,"inlineQueue");this.tokens=[],this.tokens.links=Object.create(null),this.options=e||nt,this.options.tokenizer=this.options.tokenizer||new ir,this.tokenizer=this.options.tokenizer,this.tokenizer.options=this.options,this.tokenizer.lexer=this,this.inlineQueue=[],this.state={inLink:!1,inRawBlock:!1,top:!0};let r={other:ke,block:rr.normal,inline:Nt.normal};this.options.pedantic?(r.block=rr.pedantic,r.inline=Nt.pedantic):this.options.gfm&&(r.block=rr.gfm,this.options.breaks?r.inline=Nt.breaks:r.inline=Nt.gfm),this.tokenizer.rules=r}static get rules(){return{block:rr,inline:Nt}}static lex(e,r){return new Pr(r).lex(e)}static lexInline(e,r){return new Pr(r).inlineTokens(e)}lex(e){e=e.replace(ke.carriageReturn,`
92
+ `),this.blockTokens(e,this.tokens);for(let r=0;r<this.inlineQueue.length;r++){let s=this.inlineQueue[r];this.inlineTokens(s.src,s.tokens)}return this.inlineQueue=[],this.tokens}blockTokens(e,r=[],s=!1){for(this.options.pedantic&&(e=e.replace(ke.tabCharGlobal," ").replace(ke.spaceLine,""));e;){let n;if(this.options.extensions?.block?.some(o=>(n=o.call({lexer:this},e,r))?(e=e.substring(n.raw.length),r.push(n),!0):!1))continue;if(n=this.tokenizer.space(e)){e=e.substring(n.raw.length);let o=r.at(-1);n.raw.length===1&&o!==void 0?o.raw+=`
93
+ `:r.push(n);continue}if(n=this.tokenizer.code(e)){e=e.substring(n.raw.length);let o=r.at(-1);o?.type==="paragraph"||o?.type==="text"?(o.raw+=(o.raw.endsWith(`
94
+ `)?"":`
95
+ `)+n.raw,o.text+=`
96
+ `+n.text,this.inlineQueue.at(-1).src=o.text):r.push(n);continue}if(n=this.tokenizer.fences(e)){e=e.substring(n.raw.length),r.push(n);continue}if(n=this.tokenizer.heading(e)){e=e.substring(n.raw.length),r.push(n);continue}if(n=this.tokenizer.hr(e)){e=e.substring(n.raw.length),r.push(n);continue}if(n=this.tokenizer.blockquote(e)){e=e.substring(n.raw.length),r.push(n);continue}if(n=this.tokenizer.list(e)){e=e.substring(n.raw.length),r.push(n);continue}if(n=this.tokenizer.html(e)){e=e.substring(n.raw.length),r.push(n);continue}if(n=this.tokenizer.def(e)){e=e.substring(n.raw.length);let o=r.at(-1);o?.type==="paragraph"||o?.type==="text"?(o.raw+=(o.raw.endsWith(`
97
+ `)?"":`
98
+ `)+n.raw,o.text+=`
99
+ `+n.raw,this.inlineQueue.at(-1).src=o.text):this.tokens.links[n.tag]||(this.tokens.links[n.tag]={href:n.href,title:n.title},r.push(n));continue}if(n=this.tokenizer.table(e)){e=e.substring(n.raw.length),r.push(n);continue}if(n=this.tokenizer.lheading(e)){e=e.substring(n.raw.length),r.push(n);continue}let i=e;if(this.options.extensions?.startBlock){let o=1/0,a=e.slice(1),l;this.options.extensions.startBlock.forEach(u=>{l=u.call({lexer:this},a),typeof l=="number"&&l>=0&&(o=Math.min(o,l))}),o<1/0&&o>=0&&(i=e.substring(0,o+1))}if(this.state.top&&(n=this.tokenizer.paragraph(i))){let o=r.at(-1);s&&o?.type==="paragraph"?(o.raw+=(o.raw.endsWith(`
100
+ `)?"":`
101
+ `)+n.raw,o.text+=`
102
+ `+n.text,this.inlineQueue.pop(),this.inlineQueue.at(-1).src=o.text):r.push(n),s=i.length!==e.length,e=e.substring(n.raw.length);continue}if(n=this.tokenizer.text(e)){e=e.substring(n.raw.length);let o=r.at(-1);o?.type==="text"?(o.raw+=(o.raw.endsWith(`
103
+ `)?"":`
104
+ `)+n.raw,o.text+=`
105
+ `+n.text,this.inlineQueue.pop(),this.inlineQueue.at(-1).src=o.text):r.push(n);continue}if(e){let o="Infinite loop on byte: "+e.charCodeAt(0);if(this.options.silent){console.error(o);break}else throw new Error(o)}}return this.state.top=!0,r}inline(e,r=[]){return this.inlineQueue.push({src:e,tokens:r}),r}inlineTokens(e,r=[]){let s=e,n=null;if(this.tokens.links){let a=Object.keys(this.tokens.links);if(a.length>0)for(;(n=this.tokenizer.rules.inline.reflinkSearch.exec(s))!=null;)a.includes(n[0].slice(n[0].lastIndexOf("[")+1,-1))&&(s=s.slice(0,n.index)+"["+"a".repeat(n[0].length-2)+"]"+s.slice(this.tokenizer.rules.inline.reflinkSearch.lastIndex))}for(;(n=this.tokenizer.rules.inline.anyPunctuation.exec(s))!=null;)s=s.slice(0,n.index)+"++"+s.slice(this.tokenizer.rules.inline.anyPunctuation.lastIndex);for(;(n=this.tokenizer.rules.inline.blockSkip.exec(s))!=null;)s=s.slice(0,n.index)+"["+"a".repeat(n[0].length-2)+"]"+s.slice(this.tokenizer.rules.inline.blockSkip.lastIndex);s=this.options.hooks?.emStrongMask?.call({lexer:this},s)??s;let i=!1,o="";for(;e;){i||(o=""),i=!1;let a;if(this.options.extensions?.inline?.some(u=>(a=u.call({lexer:this},e,r))?(e=e.substring(a.raw.length),r.push(a),!0):!1))continue;if(a=this.tokenizer.escape(e)){e=e.substring(a.raw.length),r.push(a);continue}if(a=this.tokenizer.tag(e)){e=e.substring(a.raw.length),r.push(a);continue}if(a=this.tokenizer.link(e)){e=e.substring(a.raw.length),r.push(a);continue}if(a=this.tokenizer.reflink(e,this.tokens.links)){e=e.substring(a.raw.length);let u=r.at(-1);a.type==="text"&&u?.type==="text"?(u.raw+=a.raw,u.text+=a.text):r.push(a);continue}if(a=this.tokenizer.emStrong(e,s,o)){e=e.substring(a.raw.length),r.push(a);continue}if(a=this.tokenizer.codespan(e)){e=e.substring(a.raw.length),r.push(a);continue}if(a=this.tokenizer.br(e)){e=e.substring(a.raw.length),r.push(a);continue}if(a=this.tokenizer.del(e)){e=e.substring(a.raw.length),r.push(a);continue}if(a=this.tokenizer.autolink(e)){e=e.substring(a.raw.length),r.push(a);continue}if(!this.state.inLink&&(a=this.tokenizer.url(e))){e=e.substring(a.raw.length),r.push(a);continue}let l=e;if(this.options.extensions?.startInline){let u=1/0,g=e.slice(1),d;this.options.extensions.startInline.forEach(p=>{d=p.call({lexer:this},g),typeof d=="number"&&d>=0&&(u=Math.min(u,d))}),u<1/0&&u>=0&&(l=e.substring(0,u+1))}if(a=this.tokenizer.inlineText(l)){e=e.substring(a.raw.length),a.raw.slice(-1)!=="_"&&(o=a.raw.slice(-1)),i=!0;let u=r.at(-1);u?.type==="text"?(u.raw+=a.raw,u.text+=a.text):r.push(a);continue}if(e){let u="Infinite loop on byte: "+e.charCodeAt(0);if(this.options.silent){console.error(u);break}else throw new Error(u)}}return r}},or=class{constructor(t){J(this,"options");J(this,"parser");this.options=t||nt}space(t){return""}code({text:t,lang:e,escaped:r}){let s=(e||"").match(ke.notSpaceStart)?.[0],n=t.replace(ke.endingNewline,"")+`
106
+ `;return s?'<pre><code class="language-'+Le(s)+'">'+(r?n:Le(n,!0))+`</code></pre>
107
+ `:"<pre><code>"+(r?n:Le(n,!0))+`</code></pre>
108
+ `}blockquote({tokens:t}){return`<blockquote>
109
+ ${this.parser.parse(t)}</blockquote>
110
+ `}html({text:t}){return t}def(t){return""}heading({tokens:t,depth:e}){return`<h${e}>${this.parser.parseInline(t)}</h${e}>
111
+ `}hr(t){return`<hr>
112
+ `}list(t){let e=t.ordered,r=t.start,s="";for(let o=0;o<t.items.length;o++){let a=t.items[o];s+=this.listitem(a)}let n=e?"ol":"ul",i=e&&r!==1?' start="'+r+'"':"";return"<"+n+i+`>
113
+ `+s+"</"+n+`>
114
+ `}listitem(t){let e="";if(t.task){let r=this.checkbox({checked:!!t.checked});t.loose?t.tokens[0]?.type==="paragraph"?(t.tokens[0].text=r+" "+t.tokens[0].text,t.tokens[0].tokens&&t.tokens[0].tokens.length>0&&t.tokens[0].tokens[0].type==="text"&&(t.tokens[0].tokens[0].text=r+" "+Le(t.tokens[0].tokens[0].text),t.tokens[0].tokens[0].escaped=!0)):t.tokens.unshift({type:"text",raw:r+" ",text:r+" ",escaped:!0}):e+=r+" "}return e+=this.parser.parse(t.tokens,!!t.loose),`<li>${e}</li>
115
+ `}checkbox({checked:t}){return"<input "+(t?'checked="" ':"")+'disabled="" type="checkbox">'}paragraph({tokens:t}){return`<p>${this.parser.parseInline(t)}</p>
116
+ `}table(t){let e="",r="";for(let n=0;n<t.header.length;n++)r+=this.tablecell(t.header[n]);e+=this.tablerow({text:r});let s="";for(let n=0;n<t.rows.length;n++){let i=t.rows[n];r="";for(let o=0;o<i.length;o++)r+=this.tablecell(i[o]);s+=this.tablerow({text:r})}return s&&(s=`<tbody>${s}</tbody>`),`<table>
117
+ <thead>
118
+ `+e+`</thead>
119
+ `+s+`</table>
120
+ `}tablerow({text:t}){return`<tr>
121
+ ${t}</tr>
122
+ `}tablecell(t){let e=this.parser.parseInline(t.tokens),r=t.header?"th":"td";return(t.align?`<${r} align="${t.align}">`:`<${r}>`)+e+`</${r}>
123
+ `}strong({tokens:t}){return`<strong>${this.parser.parseInline(t)}</strong>`}em({tokens:t}){return`<em>${this.parser.parseInline(t)}</em>`}codespan({text:t}){return`<code>${Le(t,!0)}</code>`}br(t){return"<br>"}del({tokens:t}){return`<del>${this.parser.parseInline(t)}</del>`}link({href:t,title:e,tokens:r}){let s=this.parser.parseInline(r),n=Yn(t);if(n===null)return s;t=n;let i='<a href="'+t+'"';return e&&(i+=' title="'+Le(e)+'"'),i+=">"+s+"</a>",i}image({href:t,title:e,text:r,tokens:s}){s&&(r=this.parser.parseInline(s,this.parser.textRenderer));let n=Yn(t);if(n===null)return Le(r);t=n;let i=`<img src="${t}" alt="${r}"`;return e&&(i+=` title="${Le(e)}"`),i+=">",i}text(t){return"tokens"in t&&t.tokens?this.parser.parseInline(t.tokens):"escaped"in t&&t.escaped?t.text:Le(t.text)}},Zr=class{strong({text:t}){return t}em({text:t}){return t}codespan({text:t}){return t}del({text:t}){return t}html({text:t}){return t}text({text:t}){return t}link({text:t}){return""+t}image({text:t}){return""+t}br(){return""}},Re=class Fr{constructor(e){J(this,"options");J(this,"renderer");J(this,"textRenderer");this.options=e||nt,this.options.renderer=this.options.renderer||new or,this.renderer=this.options.renderer,this.renderer.options=this.options,this.renderer.parser=this,this.textRenderer=new Zr}static parse(e,r){return new Fr(r).parse(e)}static parseInline(e,r){return new Fr(r).parseInline(e)}parse(e,r=!0){let s="";for(let n=0;n<e.length;n++){let i=e[n];if(this.options.extensions?.renderers?.[i.type]){let a=i,l=this.options.extensions.renderers[a.type].call({parser:this},a);if(l!==!1||!["space","hr","heading","code","table","blockquote","list","html","def","paragraph","text"].includes(a.type)){s+=l||"";continue}}let o=i;switch(o.type){case"space":{s+=this.renderer.space(o);continue}case"hr":{s+=this.renderer.hr(o);continue}case"heading":{s+=this.renderer.heading(o);continue}case"code":{s+=this.renderer.code(o);continue}case"table":{s+=this.renderer.table(o);continue}case"blockquote":{s+=this.renderer.blockquote(o);continue}case"list":{s+=this.renderer.list(o);continue}case"html":{s+=this.renderer.html(o);continue}case"def":{s+=this.renderer.def(o);continue}case"paragraph":{s+=this.renderer.paragraph(o);continue}case"text":{let a=o,l=this.renderer.text(a);for(;n+1<e.length&&e[n+1].type==="text";)a=e[++n],l+=`
124
+ `+this.renderer.text(a);r?s+=this.renderer.paragraph({type:"paragraph",raw:l,text:l,tokens:[{type:"text",raw:l,text:l,escaped:!0}]}):s+=l;continue}default:{let a='Token with "'+o.type+'" type was not found.';if(this.options.silent)return console.error(a),"";throw new Error(a)}}}return s}parseInline(e,r=this.renderer){let s="";for(let n=0;n<e.length;n++){let i=e[n];if(this.options.extensions?.renderers?.[i.type]){let a=this.options.extensions.renderers[i.type].call({parser:this},i);if(a!==!1||!["escape","html","link","image","strong","em","codespan","br","del","text"].includes(i.type)){s+=a||"";continue}}let o=i;switch(o.type){case"escape":{s+=r.text(o);break}case"html":{s+=r.html(o);break}case"link":{s+=r.link(o);break}case"image":{s+=r.image(o);break}case"strong":{s+=r.strong(o);break}case"em":{s+=r.em(o);break}case"codespan":{s+=r.codespan(o);break}case"br":{s+=r.br(o);break}case"del":{s+=r.del(o);break}case"text":{s+=r.text(o);break}default:{let a='Token with "'+o.type+'" type was not found.';if(this.options.silent)return console.error(a),"";throw new Error(a)}}}return s}},nr,Ot=(nr=class{constructor(t){J(this,"options");J(this,"block");this.options=t||nt}preprocess(t){return t}postprocess(t){return t}processAllTokens(t){return t}emStrongMask(t){return t}provideLexer(){return this.block?Ce.lex:Ce.lexInline}provideParser(){return this.block?Re.parse:Re.parseInline}},J(nr,"passThroughHooks",new Set(["preprocess","postprocess","processAllTokens","emStrongMask"])),J(nr,"passThroughHooksRespectAsync",new Set(["preprocess","postprocess","processAllTokens"])),nr),Ji=class{constructor(...t){J(this,"defaults",zr());J(this,"options",this.setOptions);J(this,"parse",this.parseMarkdown(!0));J(this,"parseInline",this.parseMarkdown(!1));J(this,"Parser",Re);J(this,"Renderer",or);J(this,"TextRenderer",Zr);J(this,"Lexer",Ce);J(this,"Tokenizer",ir);J(this,"Hooks",Ot);this.use(...t)}walkTokens(t,e){let r=[];for(let s of t)switch(r=r.concat(e.call(this,s)),s.type){case"table":{let n=s;for(let i of n.header)r=r.concat(this.walkTokens(i.tokens,e));for(let i of n.rows)for(let o of i)r=r.concat(this.walkTokens(o.tokens,e));break}case"list":{let n=s;r=r.concat(this.walkTokens(n.items,e));break}default:{let n=s;this.defaults.extensions?.childTokens?.[n.type]?this.defaults.extensions.childTokens[n.type].forEach(i=>{let o=n[i].flat(1/0);r=r.concat(this.walkTokens(o,e))}):n.tokens&&(r=r.concat(this.walkTokens(n.tokens,e)))}}return r}use(...t){let e=this.defaults.extensions||{renderers:{},childTokens:{}};return t.forEach(r=>{let s={...r};if(s.async=this.defaults.async||s.async||!1,r.extensions&&(r.extensions.forEach(n=>{if(!n.name)throw new Error("extension name required");if("renderer"in n){let i=e.renderers[n.name];i?e.renderers[n.name]=function(...o){let a=n.renderer.apply(this,o);return a===!1&&(a=i.apply(this,o)),a}:e.renderers[n.name]=n.renderer}if("tokenizer"in n){if(!n.level||n.level!=="block"&&n.level!=="inline")throw new Error("extension level must be 'block' or 'inline'");let i=e[n.level];i?i.unshift(n.tokenizer):e[n.level]=[n.tokenizer],n.start&&(n.level==="block"?e.startBlock?e.startBlock.push(n.start):e.startBlock=[n.start]:n.level==="inline"&&(e.startInline?e.startInline.push(n.start):e.startInline=[n.start]))}"childTokens"in n&&n.childTokens&&(e.childTokens[n.name]=n.childTokens)}),s.extensions=e),r.renderer){let n=this.defaults.renderer||new or(this.defaults);for(let i in r.renderer){if(!(i in n))throw new Error(`renderer '${i}' does not exist`);if(["options","parser"].includes(i))continue;let o=i,a=r.renderer[o],l=n[o];n[o]=(...u)=>{let g=a.apply(n,u);return g===!1&&(g=l.apply(n,u)),g||""}}s.renderer=n}if(r.tokenizer){let n=this.defaults.tokenizer||new ir(this.defaults);for(let i in r.tokenizer){if(!(i in n))throw new Error(`tokenizer '${i}' does not exist`);if(["options","rules","lexer"].includes(i))continue;let o=i,a=r.tokenizer[o],l=n[o];n[o]=(...u)=>{let g=a.apply(n,u);return g===!1&&(g=l.apply(n,u)),g}}s.tokenizer=n}if(r.hooks){let n=this.defaults.hooks||new Ot;for(let i in r.hooks){if(!(i in n))throw new Error(`hook '${i}' does not exist`);if(["options","block"].includes(i))continue;let o=i,a=r.hooks[o],l=n[o];Ot.passThroughHooks.has(i)?n[o]=u=>{if(this.defaults.async&&Ot.passThroughHooksRespectAsync.has(i))return(async()=>{let d=await a.call(n,u);return l.call(n,d)})();let g=a.call(n,u);return l.call(n,g)}:n[o]=(...u)=>{if(this.defaults.async)return(async()=>{let d=await a.apply(n,u);return d===!1&&(d=await l.apply(n,u)),d})();let g=a.apply(n,u);return g===!1&&(g=l.apply(n,u)),g}}s.hooks=n}if(r.walkTokens){let n=this.defaults.walkTokens,i=r.walkTokens;s.walkTokens=function(o){let a=[];return a.push(i.call(this,o)),n&&(a=a.concat(n.call(this,o))),a}}this.defaults={...this.defaults,...s}}),this}setOptions(t){return this.defaults={...this.defaults,...t},this}lexer(t,e){return Ce.lex(t,e??this.defaults)}parser(t,e){return Re.parse(t,e??this.defaults)}parseMarkdown(t){return(e,r)=>{let s={...r},n={...this.defaults,...s},i=this.onError(!!n.silent,!!n.async);if(this.defaults.async===!0&&s.async===!1)return i(new Error("marked(): The async option was set to true by an extension. Remove async: false from the parse options object to return a Promise."));if(typeof e>"u"||e===null)return i(new Error("marked(): input parameter is undefined or null"));if(typeof e!="string")return i(new Error("marked(): input parameter is of type "+Object.prototype.toString.call(e)+", string expected"));if(n.hooks&&(n.hooks.options=n,n.hooks.block=t),n.async)return(async()=>{let o=n.hooks?await n.hooks.preprocess(e):e,a=await(n.hooks?await n.hooks.provideLexer():t?Ce.lex:Ce.lexInline)(o,n),l=n.hooks?await n.hooks.processAllTokens(a):a;n.walkTokens&&await Promise.all(this.walkTokens(l,n.walkTokens));let u=await(n.hooks?await n.hooks.provideParser():t?Re.parse:Re.parseInline)(l,n);return n.hooks?await n.hooks.postprocess(u):u})().catch(i);try{n.hooks&&(e=n.hooks.preprocess(e));let o=(n.hooks?n.hooks.provideLexer():t?Ce.lex:Ce.lexInline)(e,n);n.hooks&&(o=n.hooks.processAllTokens(o)),n.walkTokens&&this.walkTokens(o,n.walkTokens);let a=(n.hooks?n.hooks.provideParser():t?Re.parse:Re.parseInline)(o,n);return n.hooks&&(a=n.hooks.postprocess(a)),a}catch(o){return i(o)}}}onError(t,e){return r=>{if(r.message+=`
125
+ Please report this to https://github.com/markedjs/marked.`,t){let s="<p>An error occurred:</p><pre>"+Le(r.message+"",!0)+"</pre>";return e?Promise.resolve(s):s}if(e)return Promise.reject(r);throw r}}},rt=new Ji;function Y(t,e){return rt.parse(t,e)}Y.options=Y.setOptions=function(t){return rt.setOptions(t),Y.defaults=rt.defaults,Jn(Y.defaults),Y};Y.getDefaults=zr;Y.defaults=nt;Y.use=function(...t){return rt.use(...t),Y.defaults=rt.defaults,Jn(Y.defaults),Y};Y.walkTokens=function(t,e){return rt.walkTokens(t,e)};Y.parseInline=rt.parseInline;Y.Parser=Re;Y.parser=Re.parse;Y.Renderer=or;Y.TextRenderer=Zr;Y.Lexer=Ce;Y.lexer=Ce.lex;Y.Tokenizer=ir;Y.Hooks=Ot;Y.parse=Y;var Xo=Y.options,Qo=Y.setOptions,Jo=Y.use,ea=Y.walkTokens,ta=Y.parseInline;var ra=Re.parse,na=Ce.lex;function zt(t){let e=Y.parse(t),r=qn.sanitize(e);return Wn(r)}function Ke(t){switch((t||"").toString()){case"open":return"Open";case"in_progress":return"In progress";case"closed":return"Closed";default:return(t||"").toString()||"Open"}}function eo(t){window.location.hash=t}function ds(t,e,r=eo,s=void 0){let n=se("views:detail"),i=null,o=null,a=!1,l=!1,u=!1,g=!1,d=!1,p=!1,h=!1,k="";function _(f){try{let D=Tr(window.location.hash||"");return Pe(D,f)}catch{return Pe("issues",f)}}function I(f){Ae(R`
126
+ <div class="panel__body" id="detail-root">
127
+ <p class="muted">${f}</p>
128
+ </div>
129
+ `,t)}function A(){if(!o||!s||typeof s.snapshotFor!="function")return;let f=s.snapshotFor(`detail:${o}`);Array.isArray(f)&&f.length>0&&(i=f.find(U=>String(U.id)===String(o))||f[0])}s&&typeof s.subscribe=="function"&&s.subscribe(()=>{try{let f=i&&i.id?String(i.id):null;A(),!f||i&&String(i.id),N()}catch{}});let F=()=>{l=!0,N()},E=f=>{f.key==="Enter"?(l=!0,N()):f.key==="Escape"&&(l=!1,N())},S=async()=>{if(!i||a)return;let f=t.querySelector("h2 input"),D=i.title||"",U=f?f.value:"";if(U===D){l=!1,N();return}a=!0,f&&(f.disabled=!0);try{n("save title %s \u2192 %s",String(i.id),U);let C=await e("edit-text",{id:i.id,field:"title",value:U});C&&typeof C=="object"&&(i=C,l=!1,N())}catch(C){n("save title failed %s %o",String(i.id),C),i.title=D,l=!1,N(),he("Failed to save title","error")}finally{a=!1}},O=()=>{l=!1,N()},y=()=>{h=!0,N()},w=f=>{f.key==="Enter"?(f.preventDefault(),h=!0,N()):f.key==="Escape"&&(f.preventDefault(),h=!1,N())},b=async()=>{if(!i||a)return;let f=t.querySelector("#detail-root .prop.assignee input"),D=i?.assignee??"",U=f?.value??"";if(U===D){h=!1,N();return}a=!0,f&&(f.disabled=!0);try{n("save assignee %s \u2192 %s",String(i.id),U);let C=await e("update-assignee",{id:i.id,assignee:U});C&&typeof C=="object"&&(i=C,h=!1,N())}catch(C){n("save assignee failed %s %o",String(i.id),C),i.assignee=D,h=!1,N(),he("Failed to update assignee","error")}finally{a=!1}},$=()=>{h=!1,N()},T=f=>{k=f.currentTarget.value||""};function L(f){f.key==="Enter"&&(f.preventDefault(),B())}async function B(){if(!i||a)return;let f=k.trim();if(f){a=!0;try{n("add label %s \u2192 %s",String(i.id),f);let D=await e("label-add",{id:i.id,label:f});D&&typeof D=="object"&&(i=D,k="",N())}catch(D){n("add label failed %s %o",String(i.id),D),he("Failed to add label","error")}finally{a=!1}}}async function q(f){if(!(!i||a)){a=!0;try{n("remove label %s \u2192 %s",String(i?.id||""),f);let D=await e("label-remove",{id:i.id,label:f});D&&typeof D=="object"&&(i=D,N())}catch(D){n("remove label failed %s %o",String(i?.id||""),D),he("Failed to remove label","error")}finally{a=!1}}}let Z=async f=>{if(!i||a){N();return}let D=f.currentTarget,U=i.status||"open",C=D.value;if(C!==U){a=!0,i.status=C,N();try{n("update status %s \u2192 %s",String(i.id),C);let Q=await e("update-status",{id:i.id,status:C});Q&&typeof Q=="object"&&(i=Q,N())}catch(Q){n("update status failed %s %o",String(i.id),Q),i.status=U,N(),he("Failed to update status","error")}finally{a=!1}}},X=async f=>{if(!i||a){N();return}let D=f.currentTarget,U=typeof i.priority=="number"?i.priority:2,C=Number(D.value);if(C!==U){a=!0,i.priority=C,N();try{n("update priority %s \u2192 %d",String(i.id),C);let Q=await e("update-priority",{id:i.id,priority:C});Q&&typeof Q=="object"&&(i=Q,N())}catch(Q){n("update priority failed %s %o",String(i.id),Q),i.priority=U,N(),he("Failed to update priority","error")}finally{a=!1}}},W=()=>{u=!0,N()},ie=f=>{if(f.key==="Escape")u=!1,N();else if(f.key==="Enter"&&f.ctrlKey){let D=t.querySelector("#detail-root .editable-actions button");D&&D.click()}},oe=async()=>{if(!i||a)return;let f=t.querySelector("#detail-root textarea"),D=i.description||"",U=f?f.value:"";if(U===D){u=!1,N();return}a=!0,f&&(f.disabled=!0);try{n("save description %s",String(i?.id||""));let C=await e("edit-text",{id:i.id,field:"description",value:U});C&&typeof C=="object"&&(i=C,u=!1,N())}catch(C){n("save description failed %s %o",String(i?.id||""),C),i.description=D,u=!1,N(),he("Failed to save description","error")}finally{a=!1}},ce=()=>{u=!1,N()},ae=()=>{g=!0,N();try{let f=t.querySelector("#detail-root .design textarea");f&&f.focus()}catch{}},z=f=>{if(f.key==="Escape")g=!1,N();else if(f.key==="Enter"&&(f.ctrlKey||f.metaKey)){let D=t.querySelector("#detail-root .design .editable-actions button");D&&D.click()}},xe=async()=>{if(!i||a)return;let f=t.querySelector("#detail-root .design textarea"),D=i.design||"",U=f?f.value:"";if(U===D){g=!1,N();return}a=!0,f&&(f.disabled=!0);try{n("save design %s",String(i?.id||""));let C=await e("edit-text",{id:i.id,field:"design",value:U});C&&typeof C=="object"&&(i=C,g=!1,N())}catch(C){n("save design failed %s %o",String(i?.id||""),C),i.design=D,g=!1,N(),he("Failed to save design","error")}finally{a=!1}},re=()=>{g=!1,N()},ze=()=>{d=!0,N()},ee=f=>{if(f.key==="Escape")d=!1,N();else if(f.key==="Enter"&&(f.ctrlKey||f.metaKey)){let D=t.querySelector("#detail-root .notes .editable-actions button");D&&D.click()}},v=async()=>{if(!i||a)return;let f=t.querySelector("#detail-root .notes textarea"),D=i.notes||"",U=f?f.value:"";if(U===D){d=!1,N();return}a=!0,f&&(f.disabled=!0);try{n("save notes %s",String(i?.id||""));let C=await e("edit-text",{id:i.id,field:"notes",value:U});C&&typeof C=="object"&&(i=C,d=!1,N())}catch(C){n("save notes failed %s %o",String(i?.id||""),C),i.notes=D,d=!1,N(),he("Failed to save notes","error")}finally{a=!1}},m=()=>{d=!1,N()},j=()=>{p=!0,N()},K=f=>{if(f.key==="Escape")p=!1,N();else if(f.key==="Enter"&&(f.ctrlKey||f.metaKey)){let D=t.querySelector("#detail-root .acceptance .editable-actions button");D&&D.click()}},_e=async()=>{if(!i||a)return;let f=t.querySelector("#detail-root .acceptance textarea"),D=i.acceptance||"",U=f?f.value:"";if(U===D){p=!1,N();return}a=!0,f&&(f.disabled=!0);try{n("save acceptance %s",String(i?.id||""));let C=await e("edit-text",{id:i.id,field:"acceptance",value:U});C&&typeof C=="object"&&(i=C,p=!1,N())}catch(C){n("save acceptance failed %s %o",String(i?.id||""),C),i.acceptance=D,p=!1,N(),he("Failed to save acceptance","error")}finally{a=!1}},De=()=>{p=!1,N()};function gt(f,D){let U=f==="Dependencies"?"add-dependency":"add-dependent";return R`
130
+ <div class="props-card">
131
+ <div>
132
+ <div class="props-card__title">${f}</div>
133
+ </div>
134
+ <ul>
135
+ ${!D||D.length===0?null:D.map(C=>{let Q=C.id,ue=_(Q);return R`<li
136
+ data-href=${ue}
137
+ @click=${()=>r(ue)}
138
+ >
139
+ ${tt(C.issue_type||"")}
140
+ <span class="text-truncate">${C.title||""}</span>
141
+ <button
142
+ aria-label=${`Remove dependency ${Xt(Q)}`}
143
+ @click=${Ne(Q,f)}
144
+ >
145
+ ×
146
+ </button>
147
+ </li>`})}
148
+ </ul>
149
+ <div class="props-card__footer">
150
+ <input type="text" placeholder="Issue ID" data-testid=${U} />
151
+ <button @click=${mt(D,f)}>Add</button>
152
+ </div>
153
+ </div>
154
+ `}function Be(f){let D=l?R`<div class="detail-title">
155
+ <h2>
156
+ <input
157
+ type="text"
158
+ aria-label="Edit title"
159
+ .value=${f.title||""}
160
+ @keydown=${bt}
161
+ />
162
+ <button @click=${S}>Save</button>
163
+ <button @click=${O}>Cancel</button>
164
+ </h2>
165
+ </div>`:R`<div class="detail-title">
166
+ <h2>
167
+ <span
168
+ class="editable"
169
+ tabindex="0"
170
+ role="button"
171
+ aria-label="Edit title"
172
+ @click=${F}
173
+ @keydown=${E}
174
+ >${f.title||""}</span
175
+ >
176
+ </h2>
177
+ </div>`,U=R`<select
178
+ class=${`badge-select badge--status is-${f.status||"open"}`}
179
+ @change=${Z}
180
+ .value=${f.status||"open"}
181
+ ?disabled=${a}
182
+ >
183
+ ${(()=>{let H=String(f.status||"open");return["open","in_progress","closed"].map(te=>R`<option value=${te} ?selected=${H===te}>
184
+ ${Ke(te)}
185
+ </option>`)})()}
186
+ </select>`,C=R`<select
187
+ class=${`badge-select badge--priority is-p${String(typeof f.priority=="number"?f.priority:2)}`}
188
+ @change=${X}
189
+ .value=${String(typeof f.priority=="number"?f.priority:2)}
190
+ ?disabled=${a}
191
+ >
192
+ ${(()=>{let H=String(typeof f.priority=="number"?f.priority:2);return Ze.map((te,qe)=>R`<option value=${String(qe)} ?selected=${H===String(qe)}>
193
+ ${$t(qe)} ${te}
194
+ </option>`)})()}
195
+ </select>`,Q=u?R`<div class="description">
196
+ <textarea
197
+ @keydown=${ie}
198
+ .value=${f.description||""}
199
+ rows="8"
200
+ style="width:100%"
201
+ ></textarea>
202
+ <div class="editable-actions">
203
+ <button @click=${oe}>Save</button>
204
+ <button @click=${ce}>Cancel</button>
205
+ </div>
206
+ </div>`:R`<div
207
+ class="md editable"
208
+ tabindex="0"
209
+ role="button"
210
+ aria-label="Edit description"
211
+ @click=${W}
212
+ @keydown=${He}
213
+ >
214
+ ${(()=>{let H=f.description||"";return H.trim()===""?R`<div class="muted">Description</div>`:zt(H)})()}
215
+ </div>`,ue=(()=>{let H=f;return String(f.acceptance||H.acceptance_criteria||"")})(),yt=p?R`<div class="acceptance">
216
+ ${ue.trim().length>0?R`<div class="props-card__title">Acceptance Criteria</div>`:""}
217
+ <textarea
218
+ @keydown=${K}
219
+ .value=${ue}
220
+ rows="6"
221
+ style="width:100%"
222
+ ></textarea>
223
+ <div class="editable-actions">
224
+ <button @click=${_e}>Save</button>
225
+ <button @click=${De}>Cancel</button>
226
+ </div>
227
+ </div>`:R`<div class="acceptance">
228
+ ${(()=>{let H=ue,te=H.trim().length>0;return R`${te?R`<div class="props-card__title">Acceptance Criteria</div>`:""}
229
+ <div
230
+ class="md editable"
231
+ tabindex="0"
232
+ role="button"
233
+ aria-label="Edit acceptance criteria"
234
+ @click=${j}
235
+ @keydown=${st}
236
+ >
237
+ ${te?zt(H):R`<div class="muted">Add acceptance criteria…</div>`}
238
+ </div>`})()}
239
+ </div>`,ge=String(f.notes||""),Ht=d?R`<div class="notes">
240
+ ${ge.trim().length>0?R`<div class="props-card__title">Notes</div>`:""}
241
+ <textarea
242
+ @keydown=${ee}
243
+ .value=${ge}
244
+ rows="6"
245
+ style="width:100%"
246
+ ></textarea>
247
+ <div class="editable-actions">
248
+ <button @click=${v}>Save</button>
249
+ <button @click=${m}>Cancel</button>
250
+ </div>
251
+ </div>`:R`<div class="notes">
252
+ ${(()=>{let H=ge,te=H.trim().length>0;return R`${te?R`<div class="props-card__title">Notes</div>`:""}
253
+ <div
254
+ class="md editable"
255
+ tabindex="0"
256
+ role="button"
257
+ aria-label="Edit notes"
258
+ @click=${ze}
259
+ @keydown=${it}
260
+ >
261
+ ${te?zt(H):R`<div class="muted">Add notes…</div>`}
262
+ </div>`})()}
263
+ </div>`,wt=Array.isArray(f.labels)?f.labels:[],Ut=R`<div class="prop labels">
264
+ <div class="label">Labels</div>
265
+ <div class="value">
266
+ <div>
267
+ ${wt.map(H=>R`<span class="badge" title=${H}
268
+ >${H}
269
+ <button
270
+ class="icon-button"
271
+ title="Remove label"
272
+ aria-label=${"Remove label "+H}
273
+ @click=${()=>q(H)}
274
+ style="margin-left:6px"
275
+ >
276
+ ×
277
+ </button></span
278
+ >`)}
279
+ <input
280
+ type="text"
281
+ aria-label="Add label"
282
+ placeholder="Add label"
283
+ .value=${k}
284
+ @input=${T}
285
+ @keydown=${L}
286
+ size=${Math.max(12,Math.min(28,k.length+3))}
287
+ />
288
+ </div>
289
+ </div>
290
+ </div>`,Ue=String(f.design||""),ot=g?R`<div class="design">
291
+ ${Ue.trim().length>0?R`<div class="props-card__title">Design</div>`:""}
292
+ <textarea
293
+ @keydown=${z}
294
+ .value=${Ue}
295
+ rows="6"
296
+ style="width:100%"
297
+ ></textarea>
298
+ <div class="editable-actions">
299
+ <button @click=${xe}>Save</button>
300
+ <button @click=${re}>Cancel</button>
301
+ </div>
302
+ </div>`:R`<div class="design">
303
+ ${(()=>{let H=Ue,te=H.trim().length>0;return R`${te?R`<div class="props-card__title">Design</div>`:""}
304
+ <div
305
+ class="md editable"
306
+ tabindex="0"
307
+ role="button"
308
+ aria-label="Edit design"
309
+ @click=${ae}
310
+ @keydown=${Bt}
311
+ >
312
+ ${te?zt(H):R`<div class="muted">Add design…</div>`}
313
+ </div>`})()}
314
+ </div>`;return R`
315
+ <div class="panel__body" id="detail-root">
316
+ <div style="position:relative">
317
+ <div class="detail-layout">
318
+ <div class="detail-main">
319
+ ${D} ${Q} ${ot} ${Ht}
320
+ ${yt}
321
+ </div>
322
+ <div class="detail-side">
323
+ <div class="props-card">
324
+ <div class="props-card__title">Properties</div>
325
+ <div class="prop">
326
+ <div class="label">Type</div>
327
+ <div class="value">
328
+ ${tt(f.issue_type)}
329
+ </div>
330
+ </div>
331
+ <div class="prop">
332
+ <div class="label">Status</div>
333
+ <div class="value">${U}</div>
334
+ </div>
335
+ <div class="prop">
336
+ <div class="label">Priority</div>
337
+ <div class="value">${C}</div>
338
+ </div>
339
+ <div class="prop assignee">
340
+ <div class="label">Assignee</div>
341
+ <div class="value">
342
+ ${h?R`<input
343
+ type="text"
344
+ aria-label="Edit assignee"
345
+ .value=${f.assignee||""}
346
+ size=${Math.min(40,Math.max(12,(f.assignee||"").length+3))}
347
+ @keydown=${H=>{H.key==="Escape"?(H.preventDefault(),$()):H.key==="Enter"&&(H.preventDefault(),b())}}
348
+ />
349
+ <button
350
+ class="btn"
351
+ style="margin-left:6px"
352
+ @click=${b}
353
+ >
354
+ Save
355
+ </button>
356
+ <button
357
+ class="btn"
358
+ style="margin-left:6px"
359
+ @click=${$}
360
+ >
361
+ Cancel
362
+ </button>`:R`${(()=>{let H=f.assignee||"",te=H.trim().length>0;return R`<span
363
+ class=${te?"editable":"editable muted"}
364
+ tabindex="0"
365
+ role="button"
366
+ aria-label="Edit assignee"
367
+ @click=${y}
368
+ @keydown=${w}
369
+ >${te?H:"Unassigned"}</span
370
+ >`})()}`}
371
+ </div>
372
+ </div>
373
+ ${Ut}
374
+ </div>
375
+ ${gt("Dependencies",f.dependencies||[])}
376
+ ${gt("Dependents",f.dependents||[])}
377
+ </div>
378
+ </div>
379
+ </div>
380
+ </div>
381
+ `}function N(){if(!i){I(o?"Loading\u2026":"No issue selected");return}Ae(Be(i),t)}function Ne(f,D){return async U=>{if(U.stopPropagation(),!(!i||a)){a=!0;try{if(D==="Dependencies"){let C=await e("dep-remove",{a:i.id,b:f,view_id:i.id});C&&typeof C=="object"&&(i=C,N())}else{let C=await e("dep-remove",{a:f,b:i.id,view_id:i.id});C&&typeof C=="object"&&(i=C,N())}}catch{}finally{a=!1}}}}function mt(f,D){return async U=>{if(!i||a)return;let C=U.currentTarget,Q=C.previousElementSibling,ue=Q?Q.value.trim():"";if(!ue||ue===i.id){he("Enter a different issue id");return}if(new Set((f||[]).map(ge=>ge.id)).has(ue)){he("Link already exists");return}a=!0,C&&(C.disabled=!0),Q&&(Q.disabled=!0);try{if(D==="Dependencies"){let ge=await e("dep-add",{a:i.id,b:ue,view_id:i.id});ge&&typeof ge=="object"&&(i=ge,N())}else{let ge=await e("dep-add",{a:ue,b:i.id,view_id:i.id});ge&&typeof ge=="object"&&(i=ge,N())}}catch{he("Failed to add dependency","error")}finally{a=!1}}}function bt(f){f.key==="Escape"?(l=!1,N()):f.key==="Enter"&&(f.preventDefault(),S())}function He(f){f.key==="Enter"&&W()}function st(f){f.key==="Enter"&&j()}function it(f){f.key==="Enter"&&ze()}function Bt(f){f.key==="Enter"&&ae()}return{async load(f){if(!f){I("No issue selected");return}o=String(f),i=null,A(),i||I("Loading\u2026"),a=!1,N()},clear(){I("Select an issue to view details")},destroy(){t.replaceChildren()}}}function cr(t){let e=t.navigate,r=t.onUpdate,s=t.requestRender,n=t.getSelectedId||(()=>null),i=t.row_class||"issue-row",o=new Set;function a(d,p,h,k=""){let _=`${d}:${p}`;return o.has(_)?R`<span>
382
+ <input
383
+ type="text"
384
+ .value=${h}
385
+ class="inline-edit"
386
+ @keydown=${async A=>{if(A.key==="Escape")o.delete(_),s();else if(A.key==="Enter"){let E=A.currentTarget.value||"";E!==h&&await r(d,{[p]:E}),o.delete(_),s()}}}
387
+ @blur=${async A=>{let E=A.currentTarget.value||"";E!==h&&await r(d,{[p]:E}),o.delete(_),s()}}
388
+ autofocus
389
+ />
390
+ </span>`:R`<span
391
+ class="editable text-truncate ${h?"":"muted"}"
392
+ tabindex="0"
393
+ role="button"
394
+ @click=${A=>{A.stopPropagation(),A.preventDefault(),o.add(_),s()}}
395
+ @keydown=${A=>{A.key==="Enter"&&(A.preventDefault(),A.stopPropagation(),o.add(_),s())}}
396
+ >${h||k}</span
397
+ >`}function l(d,p){return async h=>{let _=h.currentTarget.value||"",I={};I[p]=p==="priority"?Number(_):_,await r(d,I)}}function u(d){return p=>{let h=p.target;h&&(h.tagName==="INPUT"||h.tagName==="SELECT")||e(d)}}function g(d){let p=String(d.status||"open"),h=String(d.priority??2),k=n()===d.id;return R`<tr
398
+ role="row"
399
+ class="${i} ${k?"selected":""}"
400
+ data-issue-id=${d.id}
401
+ @click=${u(d.id)}
402
+ >
403
+ <td role="gridcell" class="mono">${We(d.id)}</td>
404
+ <td role="gridcell">${tt(d.issue_type)}</td>
405
+ <td role="gridcell">${a(d.id,"title",d.title||"")}</td>
406
+ <td role="gridcell">
407
+ <select
408
+ class="badge-select badge--status is-${p}"
409
+ .value=${p}
410
+ @change=${l(d.id,"status")}
411
+ >
412
+ ${["open","in_progress","closed"].map(_=>R`<option value=${_} ?selected=${p===_}>
413
+ ${Ke(_)}
414
+ </option>`)}
415
+ </select>
416
+ </td>
417
+ <td role="gridcell">
418
+ ${a(d.id,"assignee",d.assignee||"","Unassigned")}
419
+ </td>
420
+ <td role="gridcell">
421
+ <select
422
+ class="badge-select badge--priority ${"is-p"+h}"
423
+ .value=${h}
424
+ @change=${l(d.id,"priority")}
425
+ >
426
+ ${Ze.map((_,I)=>R`<option
427
+ value=${String(I)}
428
+ ?selected=${h===String(I)}
429
+ >
430
+ ${$t(I)} ${_}
431
+ </option>`)}
432
+ </select>
433
+ </td>
434
+ </tr>`}return g}function us(t,e,r,s=void 0,n=void 0){let i=[],o=new Set,a=new Set,l=new Map,u=n?Ge(n):null;u&&u.subscribe(()=>{let A=i.length===0;if(i=I(),d(),A&&i.length>0){let F=String(i[0].epic?.id||"");F&&!o.has(F)&&_(F)}});let g=cr({navigate:A=>r(A),onUpdate:k,requestRender:d,getSelectedId:()=>null,row_class:"epic-row"});function d(){Ae(p(),t)}function p(){return i.length?R`${i.map(A=>h(A))}`:R`<div class="panel__header muted">No epics found.</div>`}function h(A){let F=A.epic||{},E=String(F.id||""),S=o.has(E),O=u?u.selectEpicChildren(E):[],y=a.has(E);return R`
435
+ <div class="epic-group" data-epic-id=${E}>
436
+ <div
437
+ class="epic-header"
438
+ @click=${()=>_(E)}
439
+ role="button"
440
+ tabindex="0"
441
+ aria-expanded=${S}
442
+ >
443
+ ${We(E,{class_name:"mono"})}
444
+ <span class="text-truncate" style="margin-left:8px"
445
+ >${F.title||"(no title)"}</span
446
+ >
447
+ <span
448
+ class="epic-progress"
449
+ style="margin-left:auto; display:flex; align-items:center; gap:8px;"
450
+ >
451
+ <progress
452
+ value=${Number(A.closed_children||0)}
453
+ max=${Math.max(1,Number(A.total_children||0))}
454
+ ></progress>
455
+ <span class="muted mono"
456
+ >${A.closed_children}/${A.total_children}</span
457
+ >
458
+ </span>
459
+ </div>
460
+ ${S?R`<div class="epic-children">
461
+ ${y?R`<div class="muted">Loading…</div>`:O.length===0?R`<div class="muted">No issues found</div>`:R`<table class="table">
462
+ <colgroup>
463
+ <col style="width: 100px" />
464
+ <col style="width: 120px" />
465
+ <col />
466
+ <col style="width: 120px" />
467
+ <col style="width: 160px" />
468
+ <col style="width: 130px" />
469
+ </colgroup>
470
+ <thead>
471
+ <tr>
472
+ <th>ID</th>
473
+ <th>Type</th>
474
+ <th>Title</th>
475
+ <th>Status</th>
476
+ <th>Assignee</th>
477
+ <th>Priority</th>
478
+ </tr>
479
+ </thead>
480
+ <tbody>
481
+ ${O.map(w=>g(w))}
482
+ </tbody>
483
+ </table>`}
484
+ </div>`:null}
485
+ </div>
486
+ `}async function k(A,F){try{await e.updateIssue({id:A,...F}),d()}catch{}}async function _(A){if(o.has(A)){if(o.delete(A),l.has(A)){try{let F=l.get(A);F&&await F()}catch{}l.delete(A);try{n&&n.unregister&&n.unregister(`detail:${A}`)}catch{}}}else{if(o.add(A),a.add(A),d(),s&&typeof s.subscribeList=="function")try{try{n&&n.register&&n.register(`detail:${A}`,{type:"issue-detail",params:{id:A}})}catch{}let F=await s.subscribeList(`detail:${A}`,{type:"issue-detail",params:{id:A}});l.set(A,F)}catch{}a.delete(A)}d()}function I(){let A=n&&n.snapshotFor?n.snapshotFor("tab:epics")||[]:[],F=[];for(let E of A){let S=Array.isArray(E.dependents)?E.dependents:[],O=Number.isFinite(E.total_children),y=Number.isFinite(E.closed_children),w=O?Number(E.total_children)||0:S.length,b=y&&Number(E.closed_children)||0;if(!y)for(let $ of S)String($.status||"")==="closed"&&b++;F.push({epic:E,total_children:w,closed_children:b})}return F}return{async load(){i=I(),d();try{if(i.length>0){let A=String(i[0].epic?.id||"");A&&!o.has(A)&&await _(A)}}catch{}}}}function ps(t,e,r){let s=document.createElement("dialog");s.id="issue-dialog",s.setAttribute("role","dialog"),s.setAttribute("aria-modal","true"),s.innerHTML=`
487
+ <div class="issue-dialog__container" part="container">
488
+ <header class="issue-dialog__header">
489
+ <div class="issue-dialog__title">
490
+ <span class="mono" id="issue-dialog-title"></span>
491
+ </div>
492
+ <button type="button" class="issue-dialog__close" aria-label="Close">\xD7</button>
493
+ </header>
494
+ <div class="issue-dialog__body" id="issue-dialog-body"></div>
495
+ </div>
496
+ `,t.appendChild(s);let n=s.querySelector("#issue-dialog-body"),i=s.querySelector("#issue-dialog-title"),o=s.querySelector(".issue-dialog__close");function a(h){i.replaceChildren(),i.appendChild(We(h))}s.addEventListener("mousedown",h=>{h.target===s&&(h.preventDefault(),u())}),s.addEventListener("cancel",h=>{h.preventDefault(),u()}),o.addEventListener("click",()=>u());let l=null;function u(){try{typeof s.close=="function"?s.close():s.removeAttribute("open")}catch{s.removeAttribute("open")}try{r()}catch{}p()}function g(h){try{let k=document.activeElement;k&&k instanceof HTMLElement?l=k:l=null}catch{l=null}a(h);try{"showModal"in s&&typeof s.showModal=="function"?s.showModal():s.setAttribute("open",""),setTimeout(()=>{try{o.focus()}catch{}},0)}catch{s.setAttribute("open","")}}function d(){try{typeof s.close=="function"?s.close():s.removeAttribute("open")}catch{s.removeAttribute("open")}p()}function p(){try{l&&document.contains(l)&&l.focus()}catch{}finally{l=null}}return{open:g,close:d,getMount(){return n}}}var dr=["bug","feature","task","epic","chore"];function ur(t){switch((t||"").toString().toLowerCase()){case"bug":return"Bug";case"feature":return"Feature";case"task":return"Task";case"epic":return"Epic";case"chore":return"Chore";default:return""}}function fs(t,e,r,s,n=void 0,i=void 0){let o=se("views:list"),a="all",l="",u=[],g="",d=s?s.getState().selected_id:null,p=null,h=cr({navigate:y=>{let w=r||($=>window.location.hash=$),b=s?s.getState().view:"issues";w(Pe(b,y))},onUpdate:S,requestRender:E,getSelectedId:()=>d,row_class:"issue-row"}),k=async y=>{a=y.currentTarget.value,o("status change %s",a),s&&s.setState({filters:{status:a}}),await O()},_=y=>{l=y.currentTarget.value,o("search input %s",l),s&&s.setState({filters:{search:l}}),E()},I=y=>{g=y.currentTarget.value||"",o("type change %s",g||"(all)"),s&&s.setState({filters:{type:g}}),E()};if(s){let y=s.getState();y&&y.filters&&typeof y.filters=="object"&&(a=y.filters.status||"all",l=y.filters.search||"",g=typeof y.filters.type=="string"?y.filters.type:"")}let A=i?Ge(i):null;function F(){let y=u;if(a!=="all"&&a!=="ready"&&(y=y.filter(w=>String(w.status||"")===a)),l){let w=l.toLowerCase();y=y.filter(b=>{let $=String(b.id).toLowerCase(),T=String(b.title||"").toLowerCase();return $.includes(w)||T.includes(w)})}return g&&(y=y.filter(w=>String(w.issue_type||"")===String(g))),a==="closed"&&(y=y.slice().sort(ut)),R`
497
+ <div class="panel__header">
498
+ <select @change=${k} .value=${a}>
499
+ <option value="all">All</option>
500
+ <option value="ready">Ready</option>
501
+ <option value="open">${Ke("open")}</option>
502
+ <option value="in_progress">${Ke("in_progress")}</option>
503
+ <option value="closed">${Ke("closed")}</option>
504
+ </select>
505
+ <select
506
+ @change=${I}
507
+ .value=${g}
508
+ aria-label="Filter by type"
509
+ >
510
+ <option value="">All types</option>
511
+ ${dr.map(w=>R`<option value=${w} ?selected=${g===w}>
512
+ ${ur(w)}
513
+ </option>`)}
514
+ </select>
515
+ <input
516
+ type="search"
517
+ placeholder="Search…"
518
+ @input=${_}
519
+ .value=${l}
520
+ />
521
+ </div>
522
+ <div class="panel__body" id="list-root">
523
+ ${y.length===0?R`<div class="issues-block">
524
+ <div class="muted" style="padding:10px 12px;">No issues</div>
525
+ </div>`:R`<div class="issues-block">
526
+ <table
527
+ class="table"
528
+ role="grid"
529
+ aria-rowcount=${String(y.length)}
530
+ aria-colcount="6"
531
+ >
532
+ <colgroup>
533
+ <col style="width: 100px" />
534
+ <col style="width: 120px" />
535
+ <col />
536
+ <col style="width: 120px" />
537
+ <col style="width: 160px" />
538
+ <col style="width: 130px" />
539
+ </colgroup>
540
+ <thead>
541
+ <tr role="row">
542
+ <th role="columnheader">ID</th>
543
+ <th role="columnheader">Type</th>
544
+ <th role="columnheader">Title</th>
545
+ <th role="columnheader">Status</th>
546
+ <th role="columnheader">Assignee</th>
547
+ <th role="columnheader">Priority</th>
548
+ </tr>
549
+ </thead>
550
+ <tbody role="rowgroup">
551
+ ${y.map(w=>h(w))}
552
+ </tbody>
553
+ </table>
554
+ </div>`}
555
+ </div>
556
+ `}function E(){Ae(F(),t)}E();async function S(y,w){try{o("updateInline %s %o",y,Object.keys(w)),typeof w.title=="string"&&await e("edit-text",{id:y,field:"title",value:w.title}),typeof w.assignee=="string"&&await e("update-assignee",{id:y,assignee:w.assignee}),typeof w.status=="string"&&await e("update-status",{id:y,status:w.status}),typeof w.priority=="number"&&await e("update-priority",{id:y,priority:w.priority})}catch{}}async function O(){o("load");let y=t.querySelector("#list-root"),w=y?y.scrollTop:0;try{A?u=A.selectIssuesFor("tab:issues"):u=[]}catch(b){o("load failed: %o",b),u=[]}E();try{let b=t.querySelector("#list-root");b&&w>0&&(b.scrollTop=w)}catch{}}return t.tabIndex=0,t.addEventListener("keydown",y=>{if(y.key==="ArrowDown"||y.key==="ArrowUp"){let T=y.target;if((T&&typeof T.closest=="function"?T.closest("#list-root table.table"):null)&&!!!(T&&typeof T.closest=="function"&&(T.closest("input")||T.closest("textarea")||T.closest("select")))){let q=T&&typeof T.closest=="function"?T.closest("td"):null;if(q&&q.parentElement){let Z=q.parentElement,X=Z.parentElement;if(X&&X.querySelectorAll){let W=Array.from(X.querySelectorAll("tr")),ie=Math.max(0,W.indexOf(Z)),oe=q.cellIndex||0,ce=y.key==="ArrowDown"?Math.min(ie+1,W.length-1):Math.max(ie-1,0),ae=W[ce],z=ae&&ae.cells?ae.cells[oe]:null;if(z){let xe=z.querySelector('button:not([disabled]), [tabindex]:not([tabindex="-1"]), a[href], select:not([disabled]), input:not([disabled]):not([type="hidden"]), textarea:not([disabled])');if(xe&&typeof xe.focus=="function"){y.preventDefault(),xe.focus();return}}}}}}let w=t.querySelector("#list-root tbody"),b=w?w.querySelectorAll("tr"):[];if(b.length===0)return;let $=0;if(d&&($=Array.from(b).findIndex(L=>(L.getAttribute("data-issue-id")||"")===d),$<0&&($=0)),y.key==="ArrowDown"){y.preventDefault();let T=b[Math.min($+1,b.length-1)],L=T?T.getAttribute("data-issue-id"):"",B=L||null;s&&B&&s.setState({selected_id:B}),d=B,E()}else if(y.key==="ArrowUp"){y.preventDefault();let T=b[Math.max($-1,0)],L=T?T.getAttribute("data-issue-id"):"",B=L||null;s&&B&&s.setState({selected_id:B}),d=B,E()}else if(y.key==="Enter"){y.preventDefault();let T=b[$],L=T?T.getAttribute("data-issue-id"):"";if(L){let B=r||(Z=>window.location.hash=Z),q=s?s.getState().view:"issues";B(Pe(q,L))}}}),s&&(p=s.subscribe(y=>{if(y.selected_id!==d&&(d=y.selected_id,o("selected %s",d||"(none)"),E()),y.filters&&typeof y.filters=="object"){let w=y.filters.status,b=y.filters.search||"",$=typeof y.filters.type=="string"?y.filters.type:"",T=!1;if(w!==a){a=w,O();return}b!==l&&(l=b,T=!0),$!==g&&(g=$,T=!0),T&&E()}})),A&&A.subscribe(()=>{try{u=A.selectIssuesFor("tab:issues"),E()}catch{}}),{load:O,destroy(){t.replaceChildren(),p&&(p(),p=null)}}}function hs(t,e,r){let s=se("views:nav"),n=null;function i(l){return u=>{u.preventDefault(),s("click tab %s",l),r.gotoView(l)}}function o(){let u=e.getState().view||"issues";return R`
557
+ <nav class="header-nav" aria-label="Primary">
558
+ <a
559
+ href="#/issues"
560
+ class="tab ${u==="issues"?"active":""}"
561
+ @click=${i("issues")}
562
+ >Issues</a
563
+ >
564
+ <a
565
+ href="#/epics"
566
+ class="tab ${u==="epics"?"active":""}"
567
+ @click=${i("epics")}
568
+ >Epics</a
569
+ >
570
+ <a
571
+ href="#/board"
572
+ class="tab ${u==="board"?"active":""}"
573
+ @click=${i("board")}
574
+ >Board</a
575
+ >
576
+ </nav>
577
+ `}function a(){Ae(o(),t)}return a(),n=e.subscribe(()=>a()),{destroy(){n&&(n(),n=null),Ae(R``,t)}}}function gs(t,e,r,s){let n=document.createElement("dialog");n.id="new-issue-dialog",n.setAttribute("role","dialog"),n.setAttribute("aria-modal","true"),n.innerHTML=`
578
+ <div class="new-issue__container" part="container">
579
+ <header class="new-issue__header">
580
+ <div class="new-issue__title">New Issue</div>
581
+ <button type="button" class="new-issue__close" aria-label="Close">\xD7</button>
582
+ </header>
583
+ <div class="new-issue__body">
584
+ <form id="new-issue-form" class="new-issue__form">
585
+ <label for="new-title">Title</label>
586
+ <input id="new-title" name="title" type="text" required placeholder="Short summary" />
587
+
588
+ <label for="new-type">Type</label>
589
+ <select id="new-type" name="type" aria-label="Issue type"></select>
590
+
591
+ <label for="new-priority">Priority</label>
592
+ <select id="new-priority" name="priority" aria-label="Priority"></select>
593
+
594
+ <label for="new-labels">Labels</label>
595
+ <input id="new-labels" name="labels" type="text" placeholder="comma,separated" />
596
+
597
+ <label for="new-description">Description</label>
598
+ <textarea id="new-description" name="description" rows="6" placeholder="Optional markdown description"></textarea>
599
+
600
+ <div aria-live="polite" role="status" class="new-issue__error" id="new-issue-error"></div>
601
+
602
+ <div class="new-issue__actions" style="grid-column: 1 / -1">
603
+ <button type="button" id="btn-cancel">Cancel (Esc)</button>
604
+ <button type="submit" id="btn-create">Create</button>
605
+ </div>
606
+ </form>
607
+ </div>
608
+ </div>
609
+ `,t.appendChild(n);let i=n.querySelector("#new-issue-form"),o=n.querySelector("#new-title"),a=n.querySelector("#new-type"),l=n.querySelector("#new-priority"),u=n.querySelector("#new-labels"),g=n.querySelector("#new-description"),d=n.querySelector("#new-issue-error"),p=n.querySelector("#btn-cancel"),h=n.querySelector("#btn-create"),k=n.querySelector(".new-issue__close");function _(){a.replaceChildren();let b=document.createElement("option");b.value="",b.textContent="\u2014 Select \u2014",a.appendChild(b);for(let $ of dr){let T=document.createElement("option");T.value=$,T.textContent=ur($),a.appendChild(T)}l.replaceChildren();for(let $=0;$<=4;$+=1){let T=document.createElement("option");T.value=String($);let L=Ze[$]||"Medium";T.textContent=`${$} \u2013 ${L}`,l.appendChild(T)}}_();function I(){try{typeof n.close=="function"?n.close():n.removeAttribute("open")}catch{n.removeAttribute("open")}}function A(b){o.disabled=b,a.disabled=b,l.disabled=b,u.disabled=b,g.disabled=b,p.disabled=b,h.disabled=b,h.textContent=b?"Creating\u2026":"Create"}function F(){d.textContent=""}function E(b){d.textContent=b}function S(){try{let b=window.localStorage.getItem("beads-ui.new.type");b?a.value=b:a.value="";let $=window.localStorage.getItem("beads-ui.new.priority");$&&/^\d$/.test($)?l.value=$:l.value="2"}catch{a.value="",l.value="2"}}function O(){try{let b=a.value||"",$=l.value||"";b.length>0&&window.localStorage.setItem("beads-ui.new.type",b),$.length>0&&window.localStorage.setItem("beads-ui.new.priority",$)}catch{}}function y(b){let $=/-(\d+)$/.exec(String(b||""));return $&&$[1]?Number($[1]):-1}async function w(){F();let b=String(o.value||"").trim();if(b.length===0){E("Title is required"),o.focus();return}let $=Number(l.value||"2");if(!($>=0&&$<=4)){E("Priority must be 0..4"),l.focus();return}let T=String(a.value||""),L=String(g.value||""),B=String(u.value||"").split(",").map(W=>W.trim()).filter(W=>W.length>0),q={title:b};T.length>0&&(q.type=T),String($).length>0&&(q.priority=$),L.length>0&&(q.description=L),A(!0);try{await e("create-issue",q)}catch{A(!1),E("Failed to create issue");return}O();let Z=null;try{Z=await e("list-issues",{filters:{status:"open",limit:50}})}catch{Z=null}let X="";if(Array.isArray(Z)){let W=Z.filter(ie=>String(ie.title||"")===b);if(W.length>0){let ie=W[0];for(let oe of W){let ce=y(ie.id||"");y(oe.id||"")>ce&&(ie=oe)}X=String(ie.id||"")}}if(X&&B.length>0)for(let W of B)try{await e("label-add",{id:X,label:W})}catch{}if(X){try{r.gotoIssue(X)}catch{}try{s&&s.setState({selected_id:X})}catch{}}A(!1),I()}return n.addEventListener("cancel",b=>{b.preventDefault(),I()}),k.addEventListener("click",()=>I()),p.addEventListener("click",()=>I()),n.addEventListener("keydown",b=>{b.key==="Enter"&&(b.ctrlKey||b.metaKey)&&(b.preventDefault(),w())}),i.addEventListener("submit",b=>{b.preventDefault(),w()}),{open(){i.reset(),F(),S();try{"showModal"in n&&typeof n.showModal=="function"?n.showModal():n.setAttribute("open","")}catch{n.setAttribute("open","")}setTimeout(()=>{try{o.focus()}catch{}},0)},close(){I()}}}var ms=["list-issues","update-status","edit-text","update-priority","create-issue","list-ready","dep-add","dep-remove","epic-status","update-assignee","label-add","label-remove","subscribe-list","unsubscribe-list","snapshot","upsert","delete"];function Kr(){let t=Date.now().toString(36),e=Math.random().toString(36).slice(2,8);return`${t}-${e}`}function bs(t,e,r=Kr()){return{id:r,type:t,payload:e}}function ys(t={}){let e=se("ws"),r={initialMs:t.backoff?.initialMs??1e3,maxMs:t.backoff?.maxMs??3e4,factor:t.backoff?.factor??2,jitterRatio:t.backoff?.jitterRatio??.2},s=()=>t.url&&t.url.length>0?t.url:typeof location<"u"?(location.protocol==="https:"?"wss://":"ws://")+location.host+"/ws":"ws://localhost/ws",n=null,i="closed",o=0,a=null,l=!0,u=new Map,g=[],d=new Map,p=new Set;function h(S){for(let O of Array.from(p))try{O(S)}catch{}}function k(){if(!l||a)return;i="reconnecting",e("ws reconnecting\u2026"),h(i);let S=Math.min(r.maxMs||0,(r.initialMs||0)*Math.pow(r.factor||1,o)),O=(r.jitterRatio||0)*S,y=Math.max(0,Math.round(S+(Math.random()*2-1)*O));e("ws retry in %d ms (attempt %d)",y,o+1),a=setTimeout(()=>{a=null,E()},y)}function _(S){try{n?.send(JSON.stringify(S))}catch(O){e("ws send failed",O)}}function I(){for(i="open",e("ws open"),h(i),o=0;g.length;){let S=g.shift();S&&_(S)}}function A(S){let O;try{O=JSON.parse(String(S.data))}catch{e("ws received non-JSON message");return}if(!O||typeof O.id!="string"||typeof O.type!="string"){e("ws received invalid envelope");return}if(u.has(O.id)){let w=u.get(O.id);u.delete(O.id),O.ok?w?.resolve(O.payload):w?.reject(O.error||new Error("ws error"));return}let y=d.get(O.type);if(y&&y.size>0)for(let w of Array.from(y))try{w(O.payload)}catch(b){e("ws event handler error",b)}else e("ws received unhandled message type: %s",O.type)}function F(){i="closed",e("ws closed"),h(i);for(let[S,O]of u.entries())O.reject(new Error("ws disconnected")),u.delete(S);o+=1,k()}function E(){if(!l)return;let S=s();try{n=new WebSocket(S),e("ws connecting %s",S),i="connecting",h(i),n.addEventListener("open",I),n.addEventListener("message",A),n.addEventListener("error",()=>{}),n.addEventListener("close",F)}catch(O){e("ws connect failed %o",O),k()}}return E(),{send(S,O){if(!ms.includes(S))return Promise.reject(new Error(`unknown message type: ${S}`));let y=Kr(),w=bs(S,O,y);return e("send %s id=%s",S,y),new Promise((b,$)=>{u.set(y,{resolve:b,reject:$,type:S}),n&&n.readyState===n.OPEN?_(w):(e("queue %s id=%s (state=%s)",S,y,i),g.push(w))})},on(S,O){d.has(S)||d.set(S,new Set);let y=d.get(S);return y?.add(O),()=>{y?.delete(O)}},onConnection(S){return p.add(S),()=>{p.delete(S)}},close(){l=!1,a&&(clearTimeout(a),a=null);try{n?.close()}catch{}},getState(){return i}}}function to(t){let e=se("main");e("bootstrap start");let r=R`
610
+ <section id="issues-root" class="route issues">
611
+ <aside id="list-panel" class="panel"></aside>
612
+ </section>
613
+ <section id="epics-root" class="route epics" hidden></section>
614
+ <section id="board-root" class="route board" hidden></section>
615
+ <section id="detail-panel" class="route detail" hidden></section>
616
+ `;Ae(r,t);let s=document.getElementById("top-nav"),n=document.getElementById("issues-root"),i=document.getElementById("epics-root"),o=document.getElementById("board-root"),a=document.getElementById("list-panel"),l=document.getElementById("detail-panel");if(a&&n&&i&&o&&l){let xe=function(v){let m=String(v?.status||"all");return m==="ready"?{type:"ready-issues"}:m==="in_progress"?{type:"in-progress-issues"}:m==="closed"?{type:"closed-issues"}:{type:"all-issues"}},ze=function(v){if(v.view==="issues"){let m=xe(v.filters||{}),j=JSON.stringify(m);try{h.register("tab:issues",m)}catch(K){e("register issues store failed: %o",K)}(!W||j!==re)&&p.subscribeList("tab:issues",m).then(K=>{W=K,re=j}).catch(K=>{e("subscribe issues failed: %o",K)})}else if(W){W().catch(()=>{}),W=null,re=null;try{h.unregister("tab:issues")}catch(m){e("unregister issues store failed: %o",m)}}if(v.view==="epics"){try{h.register("tab:epics",{type:"epics"})}catch(m){e("register epics store failed: %o",m)}p.subscribeList("tab:epics",{type:"epics"}).then(m=>{ie=m}).catch(()=>{})}else if(ie){ie().catch(()=>{}),ie=null;try{h.unregister("tab:epics")}catch(m){e("unregister epics store failed: %o",m)}}if(v.view==="board"){if(!oe){try{h.register("tab:board:ready",{type:"ready-issues"})}catch(m){e("register board:ready store failed: %o",m)}p.subscribeList("tab:board:ready",{type:"ready-issues"}).then(m=>oe=m).catch(()=>{})}if(!ce){try{h.register("tab:board:in-progress",{type:"in-progress-issues"})}catch(m){e("register board:in-progress store failed: %o",m)}p.subscribeList("tab:board:in-progress",{type:"in-progress-issues"}).then(m=>ce=m).catch(()=>{})}if(!ae){try{h.register("tab:board:closed",{type:"closed-issues"})}catch(m){e("register board:closed store failed: %o",m)}p.subscribeList("tab:board:closed",{type:"closed-issues"}).then(m=>ae=m).catch(()=>{})}if(!z){try{h.register("tab:board:blocked",{type:"blocked-issues"})}catch(m){e("register board:blocked store failed: %o",m)}p.subscribeList("tab:board:blocked",{type:"blocked-issues"}).then(m=>z=m).catch(()=>{})}}else{if(oe){oe().catch(()=>{}),oe=null;try{h.unregister("tab:board:ready")}catch(m){e("unregister board:ready failed: %o",m)}}if(ce){ce().catch(()=>{}),ce=null;try{h.unregister("tab:board:in-progress")}catch(m){e("unregister board:in-progress failed: %o",m)}}if(ae){ae().catch(()=>{}),ae=null;try{h.unregister("tab:board:closed")}catch(m){e("unregister board:closed failed: %o",m)}}if(z){z().catch(()=>{}),z=null;try{h.unregister("tab:board:blocked")}catch(m){e("unregister board:blocked failed: %o",m)}}}};var u=xe,g=ze;let d=ys(),p=Sn((v,m)=>d.send(v,m)),h=Tn();d.on("snapshot",v=>{let m=v,j=m&&typeof m.id=="string"?m.id:"",K=j?h.getStore(j):null;if(K&&m&&m.type==="snapshot")try{K.applyPush(m)}catch{}}),d.on("upsert",v=>{let m=v,j=m&&typeof m.id=="string"?m.id:"",K=j?h.getStore(j):null;if(K&&m&&m.type==="upsert")try{K.applyPush(m)}catch{}}),d.on("delete",v=>{let m=v,j=m&&typeof m.id=="string"?m.id:"",K=j?h.getStore(j):null;if(K&&m&&m.type==="delete")try{K.applyPush(m)}catch{}});let k=Ge(h),_=!1;if(typeof d.onConnection=="function"){let v=m=>{e("ws state %s",m),m==="reconnecting"||m==="closed"?(_=!0,he("Connection lost. Reconnecting\u2026","error",4e3)):m==="open"&&_&&(_=!1,he("Reconnected","success",2200))};d.onConnection(v)}let I={status:"all",search:"",type:""};try{let v=window.localStorage.getItem("beads-ui.filters");if(v){let m=JSON.parse(v);if(m&&typeof m=="object"){let j=["bug","feature","task","epic","chore"],K="";if(typeof m.type=="string"&&j.includes(m.type))K=m.type;else if(Array.isArray(m.types)){let _e="";for(let De of m.types)if(j.includes(String(De))){_e=De;break}K=_e}I={status:["all","open","in_progress","closed","ready"].includes(m.status)?m.status:"all",search:typeof m.search=="string"?m.search:"",type:K}}}}catch(v){e("filters parse error: %o",v)}let A="issues";try{let v=window.localStorage.getItem("beads-ui.view");(v==="issues"||v==="epics"||v==="board")&&(A=v)}catch(v){e("view parse error: %o",v)}let F={closed_filter:"today"};try{let v=window.localStorage.getItem("beads-ui.board");if(v){let m=JSON.parse(v);if(m&&typeof m=="object"){let j=String(m.closed_filter||"today");(j==="today"||j==="3"||j==="7")&&(F.closed_filter=j)}}}catch(v){e("board prefs parse error: %o",v)}let E=En({filters:I,view:A,board:F}),S=$n(E);S.start();let O=async(v,m)=>{try{return await d.send(v,m)}catch{return[]}};s&&hs(s,E,S);let y=gs(t,(v,m)=>d.send(v,m),S,E);try{let v=document.getElementById("new-issue-btn");v&&v.addEventListener("click",()=>y.open())}catch{}let b=fs(a,async(v,m)=>{if(v==="list-issues")try{return k.selectIssuesFor("tab:issues")}catch(j){return e("list selectors failed: %o",j),[]}return O(v,m)},v=>{let m=Yt(v);m&&S.gotoIssue(m)},E,p,h);E.subscribe(v=>{try{let m={status:v.filters.status,search:v.filters.search,type:typeof v.filters.type=="string"?v.filters.type:""};window.localStorage.setItem("beads-ui.filters",JSON.stringify(m))}catch{}}),E.subscribe(v=>{try{window.localStorage.setItem("beads-ui.board",JSON.stringify({closed_filter:v.board.closed_filter}))}catch{}}),b.load();let $=ps(l,E,()=>{let v=E.getState();E.setState({selected_id:null});try{let m=v.view||"issues";S.gotoView(m)}catch{}}),T=null;T=ds($.getMount(),O,v=>{let m=Yt(v);m&&S.gotoIssue(m)},h);let L=E.getState().selected_id;if(L){l.hidden=!1,$.open(L),T&&T.load(L);let v=`detail:${L}`,m={type:"issue-detail",params:{id:L}};try{h.register(v,m)}catch(j){e("register detail store failed: %o",j)}p.subscribeList(v,m).catch(()=>{})}let B=null;E.subscribe(v=>{let m=v.selected_id;if(m){l.hidden=!1,$.open(m),T&&T.load(m);let j=`detail:${m}`,K={type:"issue-detail",params:{id:m}};try{h.register(j,K)}catch{}p.subscribeList(j,K).then(_e=>{B&&B().catch(()=>{}),B=_e}).catch(()=>{})}else{try{$.close()}catch{}T&&T.clear(),l.hidden=!0,B&&(B().catch(()=>{}),B=null)}});let q=An(O),Z=us(i,q,v=>S.gotoIssue(v),p,h),X=Rn(o,q,v=>S.gotoIssue(v),E,p,h),W=null,ie=null,oe=null,ce=null,ae=null,z=null,re=null,ee=v=>{n&&i&&o&&l&&(n.hidden=v.view!=="issues",i.hidden=v.view!=="epics",o.hidden=v.view!=="board"),ze(v),!v.selected_id&&v.view==="epics"&&Z.load(),!v.selected_id&&v.view==="board"&&X.load();try{window.localStorage.setItem("beads-ui.view",v.view)}catch(m){e("persist view failed: %o",m)}};E.subscribe(ee),ee(E.getState()),window.addEventListener("keydown",v=>{let m=v.ctrlKey||v.metaKey,j=String(v.key||"").toLowerCase(),K=v.target,_e=K&&K.tagName?String(K.tagName).toLowerCase():"",De=_e==="input"||_e==="textarea"||_e==="select"||K&&typeof K.isContentEditable=="boolean"&&K.isContentEditable;m&&j==="n"&&(De||(v.preventDefault(),y.open()))})}}typeof window<"u"&&typeof document<"u"&&window.addEventListener("DOMContentLoaded",()=>{try{let r=window.localStorage.getItem("beads-ui.theme"),s=window.matchMedia&&window.matchMedia("(prefers-color-scheme: dark)").matches,n=r==="dark"||r==="light"?r:s?"dark":"light";document.documentElement.setAttribute("data-theme",n);let i=document.getElementById("theme-switch");i&&(i.checked=n==="dark")}catch{}let t=document.getElementById("theme-switch");t&&t.addEventListener("change",()=>{let r=t.checked?"dark":"light";document.documentElement.setAttribute("data-theme",r);try{window.localStorage.setItem("beads-ui.theme",r)}catch{}});let e=document.getElementById("app");e&&to(e)});export{to as bootstrap};
617
+ //# sourceMappingURL=main.bundle.js.map