mcp-memory-bucket 0.5.0 → 0.5.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/client/assets/{index-DSHtiYCt.js → index-CqgDoHFV.js} +484 -215
- package/dist/client/index.html +1 -1
- package/dist/src/memory/repository.js +1 -1
- package/dist/src/memory/tools.js +9 -6
- package/dist/src/shared/relocate-tool.js +2 -1
- package/dist/src/shared/status.js +23 -0
- package/dist/src/skills/tools.js +7 -6
- package/package.json +1 -1
|
@@ -1,23 +1,23 @@
|
|
|
1
|
-
(function(){const e=document.createElement("link").relList;if(e&&e.supports&&e.supports("modulepreload"))return;for(const i of document.querySelectorAll('link[rel="modulepreload"]'))s(i);new MutationObserver(i=>{for(const n of i)if(n.type==="childList")for(const
|
|
1
|
+
(function(){const e=document.createElement("link").relList;if(e&&e.supports&&e.supports("modulepreload"))return;for(const i of document.querySelectorAll('link[rel="modulepreload"]'))s(i);new MutationObserver(i=>{for(const n of i)if(n.type==="childList")for(const o of n.addedNodes)o.tagName==="LINK"&&o.rel==="modulepreload"&&s(o)}).observe(document,{childList:!0,subtree:!0});function t(i){const n={};return i.integrity&&(n.integrity=i.integrity),i.referrerPolicy&&(n.referrerPolicy=i.referrerPolicy),i.crossOrigin==="use-credentials"?n.credentials="include":i.crossOrigin==="anonymous"?n.credentials="omit":n.credentials="same-origin",n}function s(i){if(i.ep)return;i.ep=!0;const n=t(i);fetch(i.href,n)}})();/**
|
|
2
2
|
* @license
|
|
3
3
|
* Copyright 2019 Google LLC
|
|
4
4
|
* SPDX-License-Identifier: BSD-3-Clause
|
|
5
|
-
*/const
|
|
5
|
+
*/const ee=globalThis,ke=ee.ShadowRoot&&(ee.ShadyCSS===void 0||ee.ShadyCSS.nativeShadow)&&"adoptedStyleSheets"in Document.prototype&&"replace"in CSSStyleSheet.prototype,ve=Symbol(),Ie=new WeakMap;let at=class{constructor(e,t,s){if(this._$cssResult$=!0,s!==ve)throw Error("CSSResult is not constructable. Use `unsafeCSS` or `css` instead.");this.cssText=e,this.t=t}get styleSheet(){let e=this.o;const t=this.t;if(ke&&e===void 0){const s=t!==void 0&&t.length===1;s&&(e=Ie.get(t)),e===void 0&&((this.o=e=new CSSStyleSheet).replaceSync(this.cssText),s&&Ie.set(t,e))}return e}toString(){return this.cssText}};const zt=r=>new at(typeof r=="string"?r:r+"",void 0,ve),O=(r,...e)=>{const t=r.length===1?r[0]:e.reduce((s,i,n)=>s+(o=>{if(o._$cssResult$===!0)return o.cssText;if(typeof o=="number")return o;throw Error("Value passed to 'css' function must be a 'css' function result: "+o+". Use 'unsafeCSS' to pass non-literal values, but take care to ensure page security.")})(i)+r[n+1],r[0]);return new at(t,r,ve)},Pt=(r,e)=>{if(ke)r.adoptedStyleSheets=e.map(t=>t instanceof CSSStyleSheet?t:t.styleSheet);else for(const t of e){const s=document.createElement("style"),i=ee.litNonce;i!==void 0&&s.setAttribute("nonce",i),s.textContent=t.cssText,r.appendChild(s)}},Oe=ke?r=>r:r=>r instanceof CSSStyleSheet?(e=>{let t="";for(const s of e.cssRules)t+=s.cssText;return zt(t)})(r):r;/**
|
|
6
6
|
* @license
|
|
7
7
|
* Copyright 2017 Google LLC
|
|
8
8
|
* SPDX-License-Identifier: BSD-3-Clause
|
|
9
|
-
*/const{is:
|
|
9
|
+
*/const{is:Lt,defineProperty:Dt,getOwnPropertyDescriptor:It,getOwnPropertyNames:Ot,getOwnPropertySymbols:Mt,getPrototypeOf:Nt}=Object,ne=globalThis,Me=ne.trustedTypes,qt=Me?Me.emptyScript:"",Ut=ne.reactiveElementPolyfillSupport,Q=(r,e)=>r,ue={toAttribute(r,e){switch(e){case Boolean:r=r?qt:null;break;case Object:case Array:r=r==null?r:JSON.stringify(r)}return r},fromAttribute(r,e){let t=r;switch(e){case Boolean:t=r!==null;break;case Number:t=r===null?null:Number(r);break;case Object:case Array:try{t=JSON.parse(r)}catch{t=null}}return t}},lt=(r,e)=>!Lt(r,e),Ne={attribute:!0,type:String,converter:ue,reflect:!1,useDefault:!1,hasChanged:lt};Symbol.metadata??=Symbol("metadata"),ne.litPropertyMetadata??=new WeakMap;let q=class extends HTMLElement{static addInitializer(e){this._$Ei(),(this.l??=[]).push(e)}static get observedAttributes(){return this.finalize(),this._$Eh&&[...this._$Eh.keys()]}static createProperty(e,t=Ne){if(t.state&&(t.attribute=!1),this._$Ei(),this.prototype.hasOwnProperty(e)&&((t=Object.create(t)).wrapped=!0),this.elementProperties.set(e,t),!t.noAccessor){const s=Symbol(),i=this.getPropertyDescriptor(e,s,t);i!==void 0&&Dt(this.prototype,e,i)}}static getPropertyDescriptor(e,t,s){const{get:i,set:n}=It(this.prototype,e)??{get(){return this[t]},set(o){this[t]=o}};return{get:i,set(o){const a=i?.call(this);n?.call(this,o),this.requestUpdate(e,a,s)},configurable:!0,enumerable:!0}}static getPropertyOptions(e){return this.elementProperties.get(e)??Ne}static _$Ei(){if(this.hasOwnProperty(Q("elementProperties")))return;const e=Nt(this);e.finalize(),e.l!==void 0&&(this.l=[...e.l]),this.elementProperties=new Map(e.elementProperties)}static finalize(){if(this.hasOwnProperty(Q("finalized")))return;if(this.finalized=!0,this._$Ei(),this.hasOwnProperty(Q("properties"))){const t=this.properties,s=[...Ot(t),...Mt(t)];for(const i of s)this.createProperty(i,t[i])}const e=this[Symbol.metadata];if(e!==null){const t=litPropertyMetadata.get(e);if(t!==void 0)for(const[s,i]of t)this.elementProperties.set(s,i)}this._$Eh=new Map;for(const[t,s]of this.elementProperties){const i=this._$Eu(t,s);i!==void 0&&this._$Eh.set(i,t)}this.elementStyles=this.finalizeStyles(this.styles)}static finalizeStyles(e){const t=[];if(Array.isArray(e)){const s=new Set(e.flat(1/0).reverse());for(const i of s)t.unshift(Oe(i))}else e!==void 0&&t.push(Oe(e));return t}static _$Eu(e,t){const s=t.attribute;return s===!1?void 0:typeof s=="string"?s:typeof e=="string"?e.toLowerCase():void 0}constructor(){super(),this._$Ep=void 0,this.isUpdatePending=!1,this.hasUpdated=!1,this._$Em=null,this._$Ev()}_$Ev(){this._$ES=new Promise(e=>this.enableUpdating=e),this._$AL=new Map,this._$E_(),this.requestUpdate(),this.constructor.l?.forEach(e=>e(this))}addController(e){(this._$EO??=new Set).add(e),this.renderRoot!==void 0&&this.isConnected&&e.hostConnected?.()}removeController(e){this._$EO?.delete(e)}_$E_(){const e=new Map,t=this.constructor.elementProperties;for(const s of t.keys())this.hasOwnProperty(s)&&(e.set(s,this[s]),delete this[s]);e.size>0&&(this._$Ep=e)}createRenderRoot(){const e=this.shadowRoot??this.attachShadow(this.constructor.shadowRootOptions);return Pt(e,this.constructor.elementStyles),e}connectedCallback(){this.renderRoot??=this.createRenderRoot(),this.enableUpdating(!0),this._$EO?.forEach(e=>e.hostConnected?.())}enableUpdating(e){}disconnectedCallback(){this._$EO?.forEach(e=>e.hostDisconnected?.())}attributeChangedCallback(e,t,s){this._$AK(e,s)}_$ET(e,t){const s=this.constructor.elementProperties.get(e),i=this.constructor._$Eu(e,s);if(i!==void 0&&s.reflect===!0){const n=(s.converter?.toAttribute!==void 0?s.converter:ue).toAttribute(t,s.type);this._$Em=e,n==null?this.removeAttribute(i):this.setAttribute(i,n),this._$Em=null}}_$AK(e,t){const s=this.constructor,i=s._$Eh.get(e);if(i!==void 0&&this._$Em!==i){const n=s.getPropertyOptions(i),o=typeof n.converter=="function"?{fromAttribute:n.converter}:n.converter?.fromAttribute!==void 0?n.converter:ue;this._$Em=i;const a=o.fromAttribute(t,n.type);this[i]=a??this._$Ej?.get(i)??a,this._$Em=null}}requestUpdate(e,t,s,i=!1,n){if(e!==void 0){const o=this.constructor;if(i===!1&&(n=this[e]),s??=o.getPropertyOptions(e),!((s.hasChanged??lt)(n,t)||s.useDefault&&s.reflect&&n===this._$Ej?.get(e)&&!this.hasAttribute(o._$Eu(e,s))))return;this.C(e,t,s)}this.isUpdatePending===!1&&(this._$ES=this._$EP())}C(e,t,{useDefault:s,reflect:i,wrapped:n},o){s&&!(this._$Ej??=new Map).has(e)&&(this._$Ej.set(e,o??t??this[e]),n!==!0||o!==void 0)||(this._$AL.has(e)||(this.hasUpdated||s||(t=void 0),this._$AL.set(e,t)),i===!0&&this._$Em!==e&&(this._$Eq??=new Set).add(e))}async _$EP(){this.isUpdatePending=!0;try{await this._$ES}catch(t){Promise.reject(t)}const e=this.scheduleUpdate();return e!=null&&await e,!this.isUpdatePending}scheduleUpdate(){return this.performUpdate()}performUpdate(){if(!this.isUpdatePending)return;if(!this.hasUpdated){if(this.renderRoot??=this.createRenderRoot(),this._$Ep){for(const[i,n]of this._$Ep)this[i]=n;this._$Ep=void 0}const s=this.constructor.elementProperties;if(s.size>0)for(const[i,n]of s){const{wrapped:o}=n,a=this[i];o!==!0||this._$AL.has(i)||a===void 0||this.C(i,void 0,n,a)}}let e=!1;const t=this._$AL;try{e=this.shouldUpdate(t),e?(this.willUpdate(t),this._$EO?.forEach(s=>s.hostUpdate?.()),this.update(t)):this._$EM()}catch(s){throw e=!1,this._$EM(),s}e&&this._$AE(t)}willUpdate(e){}_$AE(e){this._$EO?.forEach(t=>t.hostUpdated?.()),this.hasUpdated||(this.hasUpdated=!0,this.firstUpdated(e)),this.updated(e)}_$EM(){this._$AL=new Map,this.isUpdatePending=!1}get updateComplete(){return this.getUpdateComplete()}getUpdateComplete(){return this._$ES}shouldUpdate(e){return!0}update(e){this._$Eq&&=this._$Eq.forEach(t=>this._$ET(t,this[t])),this._$EM()}updated(e){}firstUpdated(e){}};q.elementStyles=[],q.shadowRootOptions={mode:"open"},q[Q("elementProperties")]=new Map,q[Q("finalized")]=new Map,Ut?.({ReactiveElement:q}),(ne.reactiveElementVersions??=[]).push("2.1.2");/**
|
|
10
10
|
* @license
|
|
11
11
|
* Copyright 2017 Google LLC
|
|
12
12
|
* SPDX-License-Identifier: BSD-3-Clause
|
|
13
|
-
*/const
|
|
14
|
-
\f\r]`,
|
|
15
|
-
\f\r"'\`<>=]|("|')|))|$)`,"g"),Be=/'/g,
|
|
13
|
+
*/const $e=globalThis,qe=r=>r,te=$e.trustedTypes,Ue=te?te.createPolicy("lit-html",{createHTML:r=>r}):void 0,ct="$lit$",R=`lit$${Math.random().toFixed(9).slice(2)}$`,ht="?"+R,Ft=`<${ht}>`,L=document,W=()=>L.createComment(""),V=r=>r===null||typeof r!="object"&&typeof r!="function",ye=Array.isArray,Ht=r=>ye(r)||typeof r?.[Symbol.iterator]=="function",he=`[
|
|
14
|
+
\f\r]`,j=/<(?:(!--|\/[^a-zA-Z])|(\/?[a-zA-Z][^>\s]*)|(\/?$))/g,Fe=/-->/g,He=/>/g,E=RegExp(`>|${he}(?:([^\\s"'>=/]+)(${he}*=${he}*(?:[^
|
|
15
|
+
\f\r"'\`<>=]|("|')|))|$)`,"g"),Be=/'/g,je=/"/g,pt=/^(?:script|style|textarea|title)$/i,Bt=r=>(e,...t)=>({_$litType$:r,strings:e,values:t}),h=Bt(1),D=Symbol.for("lit-noChange"),m=Symbol.for("lit-nothing"),Ze=new WeakMap,P=L.createTreeWalker(L,129);function dt(r,e){if(!ye(r)||!r.hasOwnProperty("raw"))throw Error("invalid template strings array");return Ue!==void 0?Ue.createHTML(e):e}const jt=(r,e)=>{const t=r.length-1,s=[];let i,n=e===2?"<svg>":e===3?"<math>":"",o=j;for(let a=0;a<t;a++){const l=r[a];let c,d,p=-1,g=0;for(;g<l.length&&(o.lastIndex=g,d=o.exec(l),d!==null);)g=o.lastIndex,o===j?d[1]==="!--"?o=Fe:d[1]!==void 0?o=He:d[2]!==void 0?(pt.test(d[2])&&(i=RegExp("</"+d[2],"g")),o=E):d[3]!==void 0&&(o=E):o===E?d[0]===">"?(o=i??j,p=-1):d[1]===void 0?p=-2:(p=o.lastIndex-d[2].length,c=d[1],o=d[3]===void 0?E:d[3]==='"'?je:Be):o===je||o===Be?o=E:o===Fe||o===He?o=j:(o=E,i=void 0);const k=o===E&&r[a+1].startsWith("/>")?" ":"";n+=o===j?l+Ft:p>=0?(s.push(c),l.slice(0,p)+ct+l.slice(p)+R+k):l+R+(p===-2?a:k)}return[dt(r,n+(r[t]||"<?>")+(e===2?"</svg>":e===3?"</math>":"")),s]};let ge=class ut{constructor({strings:e,_$litType$:t},s){let i;this.parts=[];let n=0,o=0;const a=e.length-1,l=this.parts,[c,d]=jt(e,t);if(this.el=ut.createElement(c,s),P.currentNode=this.el.content,t===2||t===3){const p=this.el.content.firstChild;p.replaceWith(...p.childNodes)}for(;(i=P.nextNode())!==null&&l.length<a;){if(i.nodeType===1){if(i.hasAttributes())for(const p of i.getAttributeNames())if(p.endsWith(ct)){const g=d[o++],k=i.getAttribute(p).split(R),b=/([.?@])?(.*)/.exec(g);l.push({type:1,index:n,name:b[2],strings:k,ctor:b[1]==="."?Kt:b[1]==="?"?Qt:b[1]==="@"?Wt:oe}),i.removeAttribute(p)}else p.startsWith(R)&&(l.push({type:6,index:n}),i.removeAttribute(p));if(pt.test(i.tagName)){const p=i.textContent.split(R),g=p.length-1;if(g>0){i.textContent=te?te.emptyScript:"";for(let k=0;k<g;k++)i.append(p[k],W()),P.nextNode(),l.push({type:2,index:++n});i.append(p[g],W())}}}else if(i.nodeType===8)if(i.data===ht)l.push({type:2,index:n});else{let p=-1;for(;(p=i.data.indexOf(R,p+1))!==-1;)l.push({type:7,index:n}),p+=R.length-1}n++}}static createElement(e,t){const s=L.createElement("template");return s.innerHTML=e,s}};function U(r,e,t=r,s){if(e===D)return e;let i=s!==void 0?t._$Co?.[s]:t._$Cl;const n=V(e)?void 0:e._$litDirective$;return i?.constructor!==n&&(i?._$AO?.(!1),n===void 0?i=void 0:(i=new n(r),i._$AT(r,t,s)),s!==void 0?(t._$Co??=[])[s]=i:t._$Cl=i),i!==void 0&&(e=U(r,i._$AS(r,e.values),i,s)),e}let Zt=class{constructor(e,t){this._$AV=[],this._$AN=void 0,this._$AD=e,this._$AM=t}get parentNode(){return this._$AM.parentNode}get _$AU(){return this._$AM._$AU}u(e){const{el:{content:t},parts:s}=this._$AD,i=(e?.creationScope??L).importNode(t,!0);P.currentNode=i;let n=P.nextNode(),o=0,a=0,l=s[0];for(;l!==void 0;){if(o===l.index){let c;l.type===2?c=new Y(n,n.nextSibling,this,e):l.type===1?c=new l.ctor(n,l.name,l.strings,this,e):l.type===6&&(c=new Vt(n,this,e)),this._$AV.push(c),l=s[++a]}o!==l?.index&&(n=P.nextNode(),o++)}return P.currentNode=L,i}p(e){let t=0;for(const s of this._$AV)s!==void 0&&(s.strings!==void 0?(s._$AI(e,s,t),t+=s.strings.length-2):s._$AI(e[t])),t++}};class Y{get _$AU(){return this._$AM?._$AU??this._$Cv}constructor(e,t,s,i){this.type=2,this._$AH=m,this._$AN=void 0,this._$AA=e,this._$AB=t,this._$AM=s,this.options=i,this._$Cv=i?.isConnected??!0}get parentNode(){let e=this._$AA.parentNode;const t=this._$AM;return t!==void 0&&e?.nodeType===11&&(e=t.parentNode),e}get startNode(){return this._$AA}get endNode(){return this._$AB}_$AI(e,t=this){e=U(this,e,t),V(e)?e===m||e==null||e===""?(this._$AH!==m&&this._$AR(),this._$AH=m):e!==this._$AH&&e!==D&&this._(e):e._$litType$!==void 0?this.$(e):e.nodeType!==void 0?this.T(e):Ht(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!==m&&V(this._$AH)?this._$AA.nextSibling.data=e:this.T(L.createTextNode(e)),this._$AH=e}$(e){const{values:t,_$litType$:s}=e,i=typeof s=="number"?this._$AC(e):(s.el===void 0&&(s.el=ge.createElement(dt(s.h,s.h[0]),this.options)),s);if(this._$AH?._$AD===i)this._$AH.p(t);else{const n=new Zt(i,this),o=n.u(this.options);n.p(t),this.T(o),this._$AH=n}}_$AC(e){let t=Ze.get(e.strings);return t===void 0&&Ze.set(e.strings,t=new ge(e)),t}k(e){ye(this._$AH)||(this._$AH=[],this._$AR());const t=this._$AH;let s,i=0;for(const n of e)i===t.length?t.push(s=new Y(this.O(W()),this.O(W()),this,this.options)):s=t[i],s._$AI(n),i++;i<t.length&&(this._$AR(s&&s._$AB.nextSibling,i),t.length=i)}_$AR(e=this._$AA.nextSibling,t){for(this._$AP?.(!1,!0,t);e!==this._$AB;){const s=qe(e).nextSibling;qe(e).remove(),e=s}}setConnected(e){this._$AM===void 0&&(this._$Cv=e,this._$AP?.(e))}}let oe=class{get tagName(){return this.element.tagName}get _$AU(){return this._$AM._$AU}constructor(e,t,s,i,n){this.type=1,this._$AH=m,this._$AN=void 0,this.element=e,this.name=t,this._$AM=i,this.options=n,s.length>2||s[0]!==""||s[1]!==""?(this._$AH=Array(s.length-1).fill(new String),this.strings=s):this._$AH=m}_$AI(e,t=this,s,i){const n=this.strings;let o=!1;if(n===void 0)e=U(this,e,t,0),o=!V(e)||e!==this._$AH&&e!==D,o&&(this._$AH=e);else{const a=e;let l,c;for(e=n[0],l=0;l<n.length-1;l++)c=U(this,a[s+l],t,l),c===D&&(c=this._$AH[l]),o||=!V(c)||c!==this._$AH[l],c===m?e=m:e!==m&&(e+=(c??"")+n[l+1]),this._$AH[l]=c}o&&!i&&this.j(e)}j(e){e===m?this.element.removeAttribute(this.name):this.element.setAttribute(this.name,e??"")}},Kt=class extends oe{constructor(){super(...arguments),this.type=3}j(e){this.element[this.name]=e===m?void 0:e}},Qt=class extends oe{constructor(){super(...arguments),this.type=4}j(e){this.element.toggleAttribute(this.name,!!e&&e!==m)}},Wt=class extends oe{constructor(e,t,s,i,n){super(e,t,s,i,n),this.type=5}_$AI(e,t=this){if((e=U(this,e,t,0)??m)===D)return;const s=this._$AH,i=e===m&&s!==m||e.capture!==s.capture||e.once!==s.once||e.passive!==s.passive,n=e!==m&&(s===m||i);i&&this.element.removeEventListener(this.name,this,s),n&&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)}},Vt=class{constructor(e,t,s){this.element=e,this.type=6,this._$AN=void 0,this._$AM=t,this.options=s}get _$AU(){return this._$AM._$AU}_$AI(e){U(this,e)}};const Yt=$e.litHtmlPolyfillSupport;Yt?.(ge,Y),($e.litHtmlVersions??=[]).push("3.3.3");const Gt=(r,e,t)=>{const s=t?.renderBefore??e;let i=s._$litPart$;if(i===void 0){const n=t?.renderBefore??null;s._$litPart$=i=new Y(e.insertBefore(W(),n),n,void 0,t??{})}return i._$AI(r),i};/**
|
|
16
16
|
* @license
|
|
17
17
|
* Copyright 2017 Google LLC
|
|
18
18
|
* SPDX-License-Identifier: BSD-3-Clause
|
|
19
|
-
*/const
|
|
20
|
-
↳ while computing ${this._debugParent??"root"}`);this.#s=!0,this.#o(),u.push(this);try{const e=this.#e();this._set(e)}finally{u.pop(),this.#t=!1,this.#s=!1}return this._get()}get value(){return this.get()}set value(e){throw new Error(`Cannot set value of Computed ${this}. Computed values are read-only.`)}subscribe(e,t=!1){const s=super.subscribe(e,t);return u.activeConsumer||this.get(),s}}class
|
|
19
|
+
*/const we=globalThis;let _=class extends q{constructor(){super(...arguments),this.renderOptions={host:this},this._$Do=void 0}createRenderRoot(){const e=super.createRenderRoot();return this.renderOptions.renderBefore??=e.firstChild,e}update(e){const t=this.render();this.hasUpdated||(this.renderOptions.isConnected=this.isConnected),super.update(e),this._$Do=Gt(t,this.renderRoot,this.renderOptions)}connectedCallback(){super.connectedCallback(),this._$Do?.setConnected(!0)}disconnectedCallback(){super.disconnectedCallback(),this._$Do?.setConnected(!1)}render(){return D}};_._$litElement$=!0,_.finalized=!0,we.litElementHydrateSupport?.({LitElement:_});const Jt=we.litElementPolyfillSupport;Jt?.({LitElement:_});(we.litElementVersions??=[]).push("4.2.2");var gt;let pe=0;const Ke=new Set;function Xt(r){pe++;try{r()}finally{pe--,pe===0&&es()}}function es(){const r=new Set(Ke);Ke.clear();for(const e of r)e()}function ts(r,e){return r!=r?e==e:r!==e||r&&typeof r=="object"||typeof r=="function"}function ss(r){return r&&typeof r.deref=="function"}class _e{static#e=0;#t;#s;#r=new Set;#i=gt.#e++;name;constructor(e,t){this.#t=e,this.#s=e,this.name=t}_get(){return u.activeConsumer&&u.activeConsumer.track(this),this.#t}_set(e){return ts(e,this.#t)?(this.#s=this.#t,this.#t=e,this._notify(),!0):!1}subscribe(e,t=!1){let s=e;return t&&(s=new WeakRef(e)),this.#r.add(s),()=>this.#r.delete(s)}_notify(){const e=[...this.#r];for(const t of e){let s;if(ss(t)){if(s=t.deref(),!s){this.#r.delete(t);continue}}else s=t;s()}}get id(){return this.#i}get previousValue(){return this.#s}toString(){return this.name?`${this.constructor.name}(${this.name})`:`${this.constructor.name}#${this.id}`}}gt=_e;class u extends _e{static#e=[];constructor(e,t){super(e,t)}static get activeConsumer(){return this.#e[this.#e.length-1]}static push(e){this.#e.push(e)}static pop(){this.#e.pop()}get(){return this._get()}set(e){Xt(()=>{this._set(e)})}get value(){return this.get()}set value(e){this.set(e)}update(e){this.set(e(this.get()))}}class is extends _e{#e;#t=!0;#s=!1;#r=new Map;_debugParent;#i;#d=()=>{this.#t||(this.#t=!0,this._notify())};constructor(e,t,s){super(void 0,t),this.#e=e,this.#i=s?.weak??!0}track(e){if(this.#r.has(e))return;const t=e.subscribe(this.#d,this.#i);this.#r.set(e,t)}dispose(){this.#o()}#o(){for(const e of this.#r.values())e();this.#r.clear()}get(){if(u.activeConsumer&&u.activeConsumer.track(this),!this.#t)return this._get();if(this.#s)throw new Error(`Cycle detected in ${this}
|
|
20
|
+
↳ while computing ${this._debugParent??"root"}`);this.#s=!0,this.#o(),u.push(this);try{const e=this.#e();this._set(e)}finally{u.pop(),this.#t=!1,this.#s=!1}return this._get()}get value(){return this.get()}set value(e){throw new Error(`Cannot set value of Computed ${this}. Computed values are read-only.`)}subscribe(e,t=!1){const s=super.subscribe(e,t);return u.activeConsumer||this.get(),s}}class ae{#e;#t=new Map;_debugParent;constructor(e){this.#e=e,e.addController(this);const t=e,s=t.update,i=this;t.update=function(n){u.push(i);try{s.call(this,n)}finally{u.pop()}}}track(e){this.#t.has(e)||this.#t.set(e,e.subscribe(this.#s,!0))}#s=()=>{this.#e.requestUpdate()};hostUpdate(){for(const e of this.#t.values())e();this.#t.clear()}hostDisconnected(){for(const e of this.#t.values())e();this.#t.clear()}toString(){const e=this.#e;return`SignalWatcher(${e?.localName??e?.tagName??e?.constructor?.name??"unknown"})`}}const rs=new Intl.DateTimeFormat("en-CA",{year:"numeric",month:"2-digit",day:"2-digit"});function ns(r){if(!r)return"unknown age";const e=new Date(r);return Number.isNaN(e.getTime())?"unknown age":rs.format(e)}class os extends _{static{this.properties={results:{attribute:!1},showRoot:{attribute:!1},onSelect:{attribute:!1},selectedIds:{attribute:!1},onToggleSelect:{attribute:!1}}}static{this.styles=O`
|
|
21
21
|
:host { display: block; }
|
|
22
22
|
.count-header {
|
|
23
23
|
padding: 8px 14px;
|
|
@@ -55,9 +55,9 @@
|
|
|
55
55
|
color: var(--accent); background: var(--accent-tint); border-radius: 4px; padding: 0 4px;
|
|
56
56
|
}
|
|
57
57
|
.empty { padding: 24px; opacity: 0.6; font-size: 13px; }
|
|
58
|
-
`}render(){return!this.results||this.results.length===0?
|
|
58
|
+
`}render(){return!this.results||this.results.length===0?h`<div class="empty">No results.</div>`:h`
|
|
59
59
|
<div class="count-header">${this.results.length} result${this.results.length===1?"":"s"}</div>
|
|
60
|
-
${this.results.map(e=>{const t=e._table==="skills"&&e.root==="builtin";return
|
|
60
|
+
${this.results.map(e=>{const t=e._table==="skills"&&e.root==="builtin";return h`
|
|
61
61
|
<div class="row ${e.deprecated?"deprecated":""} ${e.paused?"paused":""}" @click=${()=>this.onSelect(e)}>
|
|
62
62
|
<input
|
|
63
63
|
type="checkbox"
|
|
@@ -70,103 +70,104 @@
|
|
|
70
70
|
<div class="row-body">
|
|
71
71
|
<div class="top">
|
|
72
72
|
<span class="name">${e.name}</span>
|
|
73
|
-
<span class="meta">${
|
|
73
|
+
<span class="meta">${ns(e.created_at)} · ${e.owner??"—"} · ${e.status}</span>
|
|
74
74
|
</div>
|
|
75
75
|
<div class="desc">${e.description}</div>
|
|
76
76
|
<div class="tags">
|
|
77
77
|
<span class="type-badge">${e._table==="skills"?"skill":"memory"}</span>
|
|
78
|
-
${this.showRoot&&e.root?
|
|
79
|
-
${e.deprecated?
|
|
80
|
-
${e.paused?
|
|
81
|
-
${e.tags.map(s=>
|
|
78
|
+
${this.showRoot&&e.root?h`<span class="root-badge">${e.root}</span>`:""}
|
|
79
|
+
${e.deprecated?h`<span class="deprecated-badge">deprecated</span>`:""}
|
|
80
|
+
${e.paused?h`<span class="paused-badge">paused</span>`:""}
|
|
81
|
+
${e.tags.map(s=>h`<span class="tag">${s}</span>`)}
|
|
82
82
|
</div>
|
|
83
83
|
</div>
|
|
84
84
|
</div>
|
|
85
85
|
`})}
|
|
86
|
-
`}}customElements.define("result-list",
|
|
87
|
-
]`).replace("lheading",
|
|
86
|
+
`}}customElements.define("result-list",os);function Se(){return{async:!1,breaks:!1,extensions:null,gfm:!0,hooks:null,pedantic:!1,renderer:null,silent:!1,tokenizer:null,walkTokens:null}}var M=Se();function ft(r){M=r}var z={exec:()=>null};function N(r){let e=[];return t=>{let s=Math.max(0,Math.min(3,t-1)),i=e[s];return i||(i=r(s),e[s]=i),i}}function f(r,e=""){let t=typeof r=="string"?r:r.source,s={replace:(i,n)=>{let o=typeof n=="string"?n:n.source;return o=o.replace(v.caret,"$1"),t=t.replace(i,o),s},getRegex:()=>new RegExp(t,e)};return s}var as=((r="")=>{try{return!!new RegExp("(?<=1)(?<!1)"+r)}catch{return!1}})(),v={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,listReplaceNesting:/^ {1,4}(?=( {4})*[^ ])/g,listIsTask:/^\[[ xX]\] +\S/,listReplaceTask:/^\[[ xX]\] +/,listTaskCheckbox:/\[[ 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,caret:/(^|[^\[])\^/g,percentDecode:/%25/g,findPipe:/\|/g,splitPipe:/ \|/,slashPipe:/\\\|/g,carriageReturn:/\r\n|\r/g,spaceLine:/^ +$/gm,notSpaceStart:/^\S*/,endingNewline:/\n$/,listItemRegex:r=>new RegExp(`^( {0,3}${r})((?:[ ][^\\n]*)?(?:\\n|$))`),nextBulletRegex:N(r=>new RegExp(`^ {0,${r}}(?:[*+-]|\\d{1,9}[.)])((?:[ ][^\\n]*)?(?:\\n|$))`)),hrRegex:N(r=>new RegExp(`^ {0,${r}}((?:- *){3,}|(?:_ *){3,}|(?:\\* *){3,})(?:\\n+|$)`)),fencesBeginRegex:N(r=>new RegExp(`^ {0,${r}}(?:\`\`\`|~~~)`)),headingBeginRegex:N(r=>new RegExp(`^ {0,${r}}#`)),htmlBeginRegex:N(r=>new RegExp(`^ {0,${r}}<(?:[a-z].*>|!--)`,"i")),blockquoteBeginRegex:N(r=>new RegExp(`^ {0,${r}}>`))},ls=/^(?:[ \t]*(?:\n|$))+/,cs=/^((?: {4}| {0,3}\t)[^\n]+(?:\n(?:[ \t]*(?:\n|$))*)?)+/,hs=/^ {0,3}(`{3,}(?=[^`\n]*(?:\n|$))|~{3,})([^\n]*)(?:\n|$)(?:|([\s\S]*?)(?:\n|$))(?: {0,3}\1[~`]* *(?=\n|$)|$)/,G=/^ {0,3}((?:-[\t ]*){3,}|(?:_[ \t]*){3,}|(?:\*[ \t]*){3,})(?:\n+|$)/,ps=/^ {0,3}(#{1,6})(?=\s|$)(.*)(?:\n+|$)/,Ae=/ {0,3}(?:[*+-]|\d{1,9}[.)])/,bt=/^(?!bull |blockCode|fences|blockquote|heading|html|table)((?:.|\n(?!\s*?\n|bull |blockCode|fences|blockquote|heading|html|table))+?)\n {0,3}(=+|-+) *(?:\n+|$)/,mt=f(bt).replace(/bull/g,Ae).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}(?:\s|$)/).replace(/html/g,/ {0,3}<[^\n>]+>\n/).replace(/\|table/g,"").getRegex(),ds=f(bt).replace(/bull/g,Ae).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}(?:\s|$)/).replace(/html/g,/ {0,3}<[^\n>]+>\n/).replace(/table/g,/ {0,3}\|?(?:[:\- ]*\|)+[\:\- ]*\n/).getRegex(),Te=/^([^\n]+(?:\n(?!hr|heading|lheading|blockquote|fences|list|html|table|[ \t]+\n)[^\n]+)*)/,us=/^[^\n]+/,Ce=/(?!\s*\])(?:\\[\s\S]|[^\[\]\\])+/,gs=f(/^ {0,3}\[(label)\]: *(?:\n[ \t]*)?([^<\s][^\s]*|<.*?>)(?:(?: +(?:\n[ \t]*)?| *\n[ \t]*)(title))? *(?:\n+|$)/).replace("label",Ce).replace("title",/(?:"(?:\\"?|[^"\\])*"|'[^'\n]*(?:\n[^'\n]+)*\n?'|\([^()]*\))/).getRegex(),fs=f(/^(bull)([ \t][^\n]*?)?(?:\n|$)/).replace(/bull/g,Ae).getRegex(),le="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",Re=/<!--(?:-?>|[\s\S]*?(?:-->|$))/,bs=f("^ {0,3}(?:<(script|pre|style|textarea)[\\s>][\\s\\S]*?(?:</\\1>[^\\n]*\\n*|$)|comment[^\\n]*(\\n+|$)|<\\?[\\s\\S]*?(?:\\?>[^\\n]*\\n*|$)|<![A-Z][\\s\\S]*?(?:>[^\\n]*\\n*|$)|<!\\[CDATA\\[[\\s\\S]*?(?:\\]\\]>[^\\n]*\\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",Re).replace("tag",le).replace("attribute",/ +[a-zA-Z:_][\w.:-]*(?: *= *"[^"\n]*"| *= *'[^'\n]*'| *= *[^\s"'=<>`]+)?/).getRegex(),xt=r=>f(Te).replace("hr",G).replace("heading"," {0,3}#{1,6}(?:\\s|$)").replace("|lheading","").replace("|table","").replace("blockquote"," {0,3}>").replace("fences"," {0,3}(?:`{3,}(?=[^`\\n]*(?:\\n|$))|~~~)[^\\n]*(?:\\n|$)").replace("list",r).replace("html","</?(?:tag)(?: +|\\n|/?>)|<(?:script|pre|style|textarea|!--)").replace("tag",le).getRegex(),ms=xt(/ {0,3}(?:[*+-]|1[.)])[ \t]+[^ \t\n]/),xs=xt(/ {0,3}(?:[*+-]|\d{1,9}[.)])(?:[ \t]|\n|$)/),ks=f(/^( {0,3}> ?(paragraph|[^\n]*)(?:\n|$))+/).replace("paragraph",xs).getRegex(),Ee={blockquote:ks,code:cs,def:gs,fences:hs,heading:ps,hr:G,html:bs,lheading:mt,list:fs,newline:ls,paragraph:ms,table:z,text:us},Qe=f("^ *([^\\n ].*)\\n {0,3}((?:\\| *)?:?-+:? *(?:\\| *:?-+:? *)*(?:\\| *)?)(?:\\n((?:(?! *\\n|hr|heading|blockquote|code|fences|list|html).*(?:\\n|$))*)\\n*|$)").replace("hr",G).replace("heading"," {0,3}#{1,6}(?:\\s|$)").replace("blockquote"," {0,3}>").replace("code","(?: {4}| {0,3} )[^\\n]").replace("fences"," {0,3}(?:`{3,}(?=[^`\\n]*(?:\\n|$))|~~~)[^\\n]*(?:\\n|$)").replace("list"," {0,3}(?:[*+-]|1[.)])[ \\t]").replace("html","</?(?:tag)(?: +|\\n|/?>)|<(?:script|pre|style|textarea|!--)").replace("tag",le).getRegex(),vs={...Ee,lheading:ds,table:Qe,paragraph:f(Te).replace("hr",G).replace("heading"," {0,3}#{1,6}(?:\\s|$)").replace("|lheading","").replace("table",Qe).replace("blockquote"," {0,3}>").replace("fences"," {0,3}(?:`{3,}(?=[^`\\n]*(?:\\n|$))|~~~)[^\\n]*(?:\\n|$)").replace("list"," {0,3}(?:[*+-]|1[.)])[ \\t]+[^ \\t\\n]").replace("html","</?(?:tag)(?: +|\\n|/?>)|<(?:script|pre|style|textarea|!--)").replace("tag",le).getRegex()},$s={...Ee,html:f(`^ *(?:comment *(?:\\n|\\s*$)|<(tag)[\\s\\S]+?</\\1> *(?:\\n{2,}|\\s*$)|<tag(?:"[^"]*"|'[^']*'|\\s[^'"/>\\s]*)*?/?> *(?:\\n{2,}|\\s*$))`).replace("comment",Re).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:z,lheading:/^(.+?)\n {0,3}(=+|-+) *(?:\n+|$)/,paragraph:f(Te).replace("hr",G).replace("heading",` *#{1,6} *[^
|
|
87
|
+
]`).replace("lheading",mt).replace("|table","").replace("blockquote"," {0,3}>").replace("|fences","").replace("|list","").replace("|html","").replace("|tag","").getRegex()},ys=/^\\([!"#$%&'()*+,\-./:;<=>?@\[\]\\^_`{|}~])/,ws=/^(`+)([^`]|[^`][\s\S]*?[^`])\1(?!`)/,kt=/^( {2,}|\\)\n(?!\s*$)/,_s=/^(`+|[^`])(?:(?= {2,}\n)|[\s\S]*?(?:(?=[\\<!\[`*_]|\b_|$)|[^ ](?= {2,}\n)))/,T=/[\p{P}\p{S}]/u,F=/[\s\p{P}\p{S}]/u,J=/[^\s\p{P}\p{S}]/u,Ss=f(/^((?![*_])punctSpace)/,"u").replace(/punctSpace/g,F).getRegex(),As=/[\p{Pi}\p{Ps}"']/u,vt=/(?!~)[\p{P}\p{S}]/u,Ts=/(?!~)[\s\p{P}\p{S}]/u,Cs=/(?:[^\s\p{P}\p{S}]|~)/u,Rs=f(/link|precode-code|html/,"g").replace("link",/\[(?:[^\[\]`]|(?<a>`+)[^`]+\k<a>(?!`))*?\]\((?:\\[\s\S]|[^\\\(\)]|\((?:\\[\s\S]|[^\\\(\)])*\))*\)/).replace("precode-",as?"(?<!`)()":"(^^|[^`])").replace("code",/(?<b>`+)[^`]+\k<b>(?!`)/).replace("html",/<(?! )[^<>]*?>/).getRegex(),$t=/^(?:\*+(?:((?!\*)punct)|([^\s*]))?)|^_+(?:((?!_)punct)|([^\s_]))?/,Es=f($t,"u").replace(/punct/g,T).getRegex(),zs=f($t,"u").replace(/punct/g,vt).getRegex(),Ps=/^(?:\*+(?:((?!\*)(?!openQuote)punct)|([^\s*]))?)|^_+(?:((?!_)(?!openQuote)punct)|([^\s_]))?/,Ls=f(Ps,"u").replace(/openQuote/g,As).replace(/punct/g,T).getRegex(),yt="^[^_*]*?__[^_*]*?\\*[^_*]*?(?=__)|[^*]+(?=[^*])|(?!\\*)punct(\\*+)(?=[\\s]|$)|notPunctSpace(\\*+)(?!\\*)(?=punctSpace|$)|(?!\\*)punctSpace(\\*+)(?=notPunctSpace)|[\\s](\\*+)(?!\\*)(?=punct)|(?!\\*)punct(\\*+)(?!\\*)(?=punct)|notPunctSpace(\\*+)(?=notPunctSpace)",Ds=f(yt,"gu").replace(/notPunctSpace/g,J).replace(/punctSpace/g,F).replace(/punct/g,T).getRegex(),Is=f(yt,"gu").replace(/notPunctSpace/g,Cs).replace(/punctSpace/g,Ts).replace(/punct/g,vt).getRegex(),Os="^[^_*]*?__[^_*]*?\\*[^_*]*?(?=__)|[^*]+(?=[^*])|(?!\\*)punct(\\*+)(?=[\\s]|$)|notPunctSpace(\\*+)(?!\\*)(?=punctSpace|$)|(?!\\*)[\\s](\\*+)(?=notPunctSpace)|[\\s](\\*+)(?!\\*)(?=punct)|(?!\\*)punct(\\*+)(?!\\*)(?=punct)|(?:(?!\\*)punct|notPunctSpace)(\\*+)(?!\\*)(?=notPunctSpace)",Ms=f(Os,"gu").replace(/notPunctSpace/g,J).replace(/punctSpace/g,F).replace(/punct/g,T).getRegex(),Ns=f("^[^_*]*?\\*\\*[^_*]*?_[^_*]*?(?=\\*\\*)|[^_]+(?=[^_])|(?!_)punct(_+)(?=[\\s]|$)|notPunctSpace(_+)(?!_)(?=punctSpace|$)|(?!_)punctSpace(_+)(?=notPunctSpace)|[\\s](_+)(?!_)(?=punct)|(?!_)punct(_+)(?!_)(?=punct)","gu").replace(/notPunctSpace/g,J).replace(/punctSpace/g,F).replace(/punct/g,T).getRegex(),qs="^[^_*]*?\\*\\*[^_*]*?_[^_*]*?(?=\\*\\*)|[^_]+(?=[^_])|(?!_)punct(_+)(?=[\\s]|$)|notPunctSpace(_+)(?!_)(?=punctSpace|$)|(?!_)[\\s](_+)(?=notPunctSpace)|[\\s](_+)(?!_)(?=punct)|(?!_)punct(_+)(?!_)(?=punct)|(?:(?!_)punct|notPunctSpace)(_+)(?!_)(?=notPunctSpace)",Us=f(qs,"gu").replace(/notPunctSpace/g,J).replace(/punctSpace/g,F).replace(/punct/g,T).getRegex(),Fs=f(/^~~?(?:((?!~)punct)|[^\s~])/,"u").replace(/punct/g,T).getRegex(),Hs="^[^~]+(?=[^~])|(?!~)punct(~~?)(?=[\\s]|$)|notPunctSpace(~~?)(?!~)(?=punctSpace|$)|(?!~)punctSpace(~~?)(?=notPunctSpace)|[\\s](~~?)(?!~)(?=punct)|(?!~)punct(~~?)(?!~)(?=punct)|notPunctSpace(~~?)(?=notPunctSpace)",Bs=f(Hs,"gu").replace(/notPunctSpace/g,J).replace(/punctSpace/g,F).replace(/punct/g,T).getRegex(),js=f(/\\(punct)/,"gu").replace(/punct/g,T).getRegex(),Zs=f(/^<(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(),Ks=f(Re).replace("(?:-->|$)","-->").getRegex(),Qs=f("^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",Ks).replace("attribute",/\s+[a-zA-Z:_][\w.:-]*(?:\s*=\s*"[^"]*"|\s*=\s*'[^']*'|\s*=\s*[^\s"'=<>`]+)?/).getRegex(),se=/(?:\[(?:\\[\s\S]|[^\[\]\\])*\]|\\[\s\S]|`+(?!`)[^`]*?`+(?!`)|``+(?=\])|[^\[\]\\`])*?/,Ws=f(/^!?\[(label)\]\(\s*(href)(?:(?:[ \t]+(?:\n[ \t]*)?|\n[ \t]*)(title))?\s*\)/).replace("label",se).replace("href",/<(?:\\.|[^\n<>\\])+>|[^ \t\n\x00-\x1f]+|(?=\))/).replace("title",/"(?:\\"?|[^"\\])*"|'(?:\\'?|[^'\\])*'|\((?:\\\)?|[^)\\])*\)/).getRegex(),wt=f(/^!?\[(label)\]\[(ref)\]/).replace("label",se).replace("ref",Ce).getRegex(),_t=f(/^!?\[(ref)\](?:\[\])?/).replace("ref",Ce).getRegex(),Vs=f("reflink|nolink(?!\\()","g").replace("reflink",wt).replace("nolink",_t).getRegex(),We=/[hH][tT][tT][pP][sS]?|[fF][tT][pP]/,ze={_backpedal:z,anyPunctuation:js,autolink:Zs,blockSkip:Rs,br:kt,code:ws,del:z,delLDelim:z,delRDelim:z,emStrongLDelim:Es,emStrongRDelimAst:Ds,emStrongRDelimUnd:Ns,escape:ys,link:Ws,nolink:_t,punctuation:Ss,reflink:wt,reflinkSearch:Vs,tag:Qs,text:_s,url:z},Ys={...ze,emStrongLDelim:Ls,emStrongRDelimAst:Ms,emStrongRDelimUnd:Us,link:f(/^!?\[(label)\]\((.*?)\)/).replace("label",se).getRegex(),reflink:f(/^!?\[(label)\]\s*\[([^\]]*)\]/).replace("label",se).getRegex()},fe={...ze,emStrongRDelimAst:Is,emStrongLDelim:zs,delLDelim:Fs,delRDelim:Bs,url:f(/^((?:protocol):\/\/|www\.)(?:[a-zA-Z0-9\-]+\.?)+[^\s<]*|^email/).replace("protocol",We).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:f(/^(`+|~+|[^`~])(?:(?=[`~])|(?= {2,}\n)|(?=[a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-]+@)|[\s\S]*?(?:(?=[\\<!\[`*~_]|\b_|protocol:\/\/|www\.|$)|[^ ](?= {2,}\n)|[^a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-](?=[a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-]+@)))/).replace("protocol",We).getRegex()},Gs={...fe,br:f(kt).replace("{2,}","*").getRegex(),text:f(fe.text).replace("\\b_","\\b_| {2,}\\n").replace(/\{2,\}/g,"*").getRegex()},X={normal:Ee,gfm:vs,pedantic:$s},Z={normal:ze,gfm:fe,breaks:Gs,pedantic:Ys},Js={"&":"&","<":"<",">":">",'"':""","'":"'"},Ve=r=>Js[r];function A(r,e){if(e){if(v.escapeTest.test(r))return r.replace(v.escapeReplace,Ve)}else if(v.escapeTestNoEncode.test(r))return r.replace(v.escapeReplaceNoEncode,Ve);return r}function Ye(r){try{r=encodeURI(r).replace(v.percentDecode,"%")}catch{return null}return r}function Ge(r,e){let t=r.replace(v.findPipe,(n,o,a)=>{let l=!1,c=o;for(;--c>=0&&a[c]==="\\";)l=!l;return l?"|":" |"}),s=t.split(v.splitPipe),i=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(;i<s.length;i++)s[i]=s[i].trim().replace(v.slashPipe,"|");return s}function C(r,e,t){let s=r.length;if(s===0)return"";let i=0;for(;i<s&&r.charAt(s-i-1)===e;)i++;return r.slice(0,s-i)}function Je(r){let e=r.split(`
|
|
88
88
|
`),t=e.length-1;for(;t>=0&&v.blankLine.test(e[t]);)t--;return e.length-t<=2?r:e.slice(0,t+1).join(`
|
|
89
|
-
`)}function
|
|
90
|
-
`).map(n=>{let
|
|
91
|
-
`)}var
|
|
92
|
-
`),depth:e[1].length,text:t,tokens:this.lexer.inline(t)}}}hr(r){let e=this.rules.block.hr.exec(r);if(e)return{type:"hr",raw:
|
|
93
|
-
`)}}blockquote(r){let e=this.rules.block.blockquote.exec(r);if(e){let t=
|
|
89
|
+
`)}function Xs(r,e){if(r.indexOf(e[1])===-1)return-1;let t=0;for(let s=0;s<r.length;s++)if(r[s]==="\\")s++;else if(r[s]===e[0])t++;else if(r[s]===e[1]&&(t--,t<0))return s;return t>0?-2:-1}function ei(r,e=0){let t=e,s="";for(let i of r)if(i===" "){let n=4-t%4;s+=" ".repeat(n),t+=n}else s+=i,t++;return s}function Xe(r,e,t,s,i){let n=e.href,o=e.title||null,a=r[1].replace(i.other.outputLinkReplace,"$1");s.state.inLink=!0;let l={type:r[0].charAt(0)==="!"?"image":"link",raw:t,href:n,title:o,text:a,tokens:s.inlineTokens(a)};return s.state.inLink=!1,l}function ti(r,e,t){let s=r.match(t.other.indentCodeCompensation);if(s===null)return e;let i=s[1];return e.split(`
|
|
90
|
+
`).map(n=>{let o=n.match(t.other.beginningSpace);if(o===null)return n;let[a]=o;return a.length>=i.length?n.slice(i.length):n}).join(`
|
|
91
|
+
`)}var ie=class{options;rules;lexer;constructor(r){this.options=r||M}space(r){let e=this.rules.block.newline.exec(r);if(e&&e[0].length>0)return{type:"space",raw:e[0]}}code(r){let e=this.rules.block.code.exec(r);if(e){let t=this.options.pedantic?e[0]:Je(e[0]),s=t.replace(this.rules.other.codeRemoveIndent,"");return{type:"code",raw:t,codeBlockStyle:"indented",text:s}}}fences(r){let e=this.rules.block.fences.exec(r);if(e){let t=e[0],s=ti(t,e[3]||"",this.rules);return{type:"code",raw:t,lang:e[2]?e[2].trim().replace(this.rules.inline.anyPunctuation,"$1"):e[2],text:s}}}heading(r){let e=this.rules.block.heading.exec(r);if(e){let t=e[2].trim();if(this.rules.other.endingHash.test(t)){let s=C(t,"#");(this.options.pedantic||!s||this.rules.other.endingSpaceChar.test(s))&&(t=s.trim())}return{type:"heading",raw:C(e[0],`
|
|
92
|
+
`),depth:e[1].length,text:t,tokens:this.lexer.inline(t)}}}hr(r){let e=this.rules.block.hr.exec(r);if(e)return{type:"hr",raw:C(e[0],`
|
|
93
|
+
`)}}blockquote(r){let e=this.rules.block.blockquote.exec(r);if(e){let t=C(e[0],`
|
|
94
94
|
`).split(`
|
|
95
|
-
`),s="",i="",n=[];for(;t.length>0;){let
|
|
95
|
+
`),s="",i="",n=[];for(;t.length>0;){let o=!1,a=[],l;for(l=0;l<t.length;l++)if(this.rules.other.blockquoteStart.test(t[l]))a.push(t[l]),o=!0;else if(!o)a.push(t[l]);else break;t=t.slice(l);let c=a.join(`
|
|
96
96
|
`),d=c.replace(this.rules.other.blockquoteSetextReplace,`
|
|
97
97
|
$1`).replace(this.rules.other.blockquoteSetextReplace2,"");s=s?`${s}
|
|
98
98
|
${c}`:c,i=i?`${i}
|
|
99
|
-
${d}`:d;let
|
|
100
|
-
`),
|
|
101
|
-
`+b.replace(this.rules.other.blockquoteSetextReplace2,""),
|
|
102
|
-
${b}`,i=i.substring(0,i.length-k.text.length)+
|
|
99
|
+
${d}`:d;let p=this.lexer.state.top;if(this.lexer.state.top=!0,this.lexer.blockTokens(d,n,!0),this.lexer.state.top=p,t.length===0)break;let g=n.at(-1);if(g?.type==="code")break;if(g?.type==="blockquote"){let k=g,b=t.join(`
|
|
100
|
+
`),S=k.raw+`
|
|
101
|
+
`+b.replace(this.rules.other.blockquoteSetextReplace2,""),H=this.blockquote(S);n[n.length-1]=H,s=`${s}
|
|
102
|
+
${b}`,i=i.substring(0,i.length-k.text.length)+H.text;break}else if(g?.type==="list"){let k=g,b=k.raw+`
|
|
103
103
|
`+t.join(`
|
|
104
|
-
`),
|
|
105
|
-
`);continue}}return{type:"blockquote",raw:s,tokens:n,text:i}}}list(r){let e=this.rules.block.list.exec(r);if(e){let t=e[1].trim(),s=t.length>1,i={type:"list",raw:"",ordered:s,start:s?+t.slice(0,-1):"",loose:!1,items:[]};t=s?`\\d{1,9}\\${t.slice(-1)}`:`\\${t}`,this.options.pedantic&&(t=s?t:"[*+-]");let n=this.rules.other.listItemRegex(t),
|
|
104
|
+
`),S=this.list(b);n[n.length-1]=S,s=s.substring(0,s.length-g.raw.length)+S.raw,i=i.substring(0,i.length-k.raw.length)+S.raw,t=b.substring(n.at(-1).raw.length).split(`
|
|
105
|
+
`);continue}}return{type:"blockquote",raw:s,tokens:n,text:i}}}list(r){let e=this.rules.block.list.exec(r);if(e){let t=e[1].trim(),s=t.length>1,i={type:"list",raw:"",ordered:s,start:s?+t.slice(0,-1):"",loose:!1,items:[]};t=s?`\\d{1,9}\\${t.slice(-1)}`:`\\${t}`,this.options.pedantic&&(t=s?t:"[*+-]");let n=this.rules.other.listItemRegex(t),o=!1;for(;r;){let l=!1,c="",d="";if(!(e=n.exec(r))||this.rules.block.hr.test(r))break;c=e[0],r=r.substring(c.length);let p=ei(e[2].split(`
|
|
106
106
|
`,1)[0],e[1].length),g=r.split(`
|
|
107
|
-
`,1)[0],k=!
|
|
108
|
-
`,r=r.substring(g.length+1),l=!0),!l){let
|
|
109
|
-
`,1)[0],
|
|
110
|
-
`+
|
|
111
|
-
`+g}k=!g.trim(),c+=
|
|
112
|
-
`,r=r.substring(
|
|
113
|
-
`),href:s,title:i}}}table(r){let e=this.rules.block.table.exec(r);if(!e||!this.rules.other.tableDelimiter.test(e[2]))return;let t=
|
|
114
|
-
`):[],n={type:"table",raw:
|
|
115
|
-
`),header:[],align:[],rows:[]};if(t.length===s.length){for(let
|
|
107
|
+
`,1)[0],k=!p.trim(),b=0;if(this.options.pedantic?(b=2,d=p.trimStart()):k?b=e[1].length+1:(b=p.search(this.rules.other.nonSpaceChar),b=b>4?1:b,d=p.slice(b),b+=e[1].length),k&&this.rules.other.blankLine.test(g)&&(c+=g+`
|
|
108
|
+
`,r=r.substring(g.length+1),l=!0),!l){let S=this.rules.other.nextBulletRegex(b),H=this.rules.other.hrRegex(b),Le=this.rules.other.fencesBeginRegex(b),De=this.rules.other.headingBeginRegex(b),Rt=this.rules.other.htmlBeginRegex(b),Et=this.rules.other.blockquoteBeginRegex(b);for(;r;){let ce=r.split(`
|
|
109
|
+
`,1)[0],B;if(g=ce,this.options.pedantic?(g=g.replace(this.rules.other.listReplaceNesting," "),B=g):B=g.replace(this.rules.other.tabCharGlobal," "),Le.test(g)||De.test(g)||Rt.test(g)||Et.test(g)||S.test(g)||H.test(g))break;if(B.search(this.rules.other.nonSpaceChar)>=b||!g.trim())d+=`
|
|
110
|
+
`+B.slice(b);else{if(k||p.replace(this.rules.other.tabCharGlobal," ").search(this.rules.other.nonSpaceChar)>=4||Le.test(p)||De.test(p)||H.test(p))break;d+=`
|
|
111
|
+
`+g}k=!g.trim(),c+=ce+`
|
|
112
|
+
`,r=r.substring(ce.length+1),p=B.slice(b)}}i.loose||(o?i.loose=!0:this.rules.other.doubleBlankLine.test(c)&&(o=!0)),i.items.push({type:"list_item",raw:c,task:!!this.options.gfm&&this.rules.other.listIsTask.test(d),loose:!1,text:d,tokens:[]}),i.raw+=c}let a=i.items.at(-1);if(a)a.raw=a.raw.trimEnd(),a.text=a.text.trimEnd();else return;i.raw=i.raw.trimEnd();for(let l of i.items)if(this.lexer.state.top=!1,l.tokens=this.lexer.blockTokens(l.text,[]),!i.loose){let c=l.tokens.filter(p=>p.type==="space"),d=c.length>0&&c.some(p=>this.rules.other.anyLine.test(p.raw));i.loose=d}for(let l of i.items){let c=l.tokens[0];if(l.task&&(c?.type==="text"||c?.type==="paragraph")){l.text=l.text.replace(this.rules.other.listReplaceTask,""),c.raw=c.raw.replace(this.rules.other.listReplaceTask,""),c.text=c.text.replace(this.rules.other.listReplaceTask,"");for(let p=this.lexer.inlineQueue.length-1;p>=0;p--)if(this.rules.other.listIsTask.test(this.lexer.inlineQueue[p].src)){this.lexer.inlineQueue[p].src=this.lexer.inlineQueue[p].src.replace(this.rules.other.listReplaceTask,"");break}let d=this.rules.other.listTaskCheckbox.exec(l.raw);if(d){let p={type:"checkbox",raw:d[0]+" ",checked:d[0]!=="[ ]"};l.checked=p.checked,i.loose?l.tokens[0]&&["paragraph","text"].includes(l.tokens[0].type)&&"tokens"in l.tokens[0]&&l.tokens[0].tokens?(l.tokens[0].raw=p.raw+l.tokens[0].raw,l.tokens[0].text=p.raw+l.tokens[0].text,l.tokens[0].tokens.unshift(p)):l.tokens.unshift({type:"paragraph",raw:p.raw,text:p.raw,tokens:[p]}):l.tokens.unshift(p)}}else l.task&&(l.task=!1)}if(i.loose)for(let l of i.items){l.loose=!0;for(let c of l.tokens)c.type==="text"&&(c.type="paragraph")}return i}}html(r){let e=this.rules.block.html.exec(r);if(e){let t=Je(e[0]);return{type:"html",block:!0,raw:t,pre:e[1]==="pre"||e[1]==="script"||e[1]==="style",text:t}}}def(r){let e=this.rules.block.def.exec(r);if(e){let t=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"):"",i=e[3]?e[3].substring(1,e[3].length-1).replace(this.rules.inline.anyPunctuation,"$1"):e[3];return{type:"def",tag:t,raw:C(e[0],`
|
|
113
|
+
`),href:s,title:i}}}table(r){let e=this.rules.block.table.exec(r);if(!e||!this.rules.other.tableDelimiter.test(e[2]))return;let t=Ge(e[1]),s=e[2].replace(this.rules.other.tableAlignChars,"").split("|"),i=e[3]?.trim()?e[3].replace(this.rules.other.tableRowBlankLine,"").split(`
|
|
114
|
+
`):[],n={type:"table",raw:C(e[0],`
|
|
115
|
+
`),header:[],align:[],rows:[]};if(t.length===s.length){for(let o of s)this.rules.other.tableAlignRight.test(o)?n.align.push("right"):this.rules.other.tableAlignCenter.test(o)?n.align.push("center"):this.rules.other.tableAlignLeft.test(o)?n.align.push("left"):n.align.push(null);for(let o=0;o<t.length;o++)n.header.push({text:t[o],tokens:this.lexer.inline(t[o]),header:!0,align:n.align[o]});for(let o of i)n.rows.push(Ge(o,n.header.length).map((a,l)=>({text:a,tokens:this.lexer.inline(a),header:!1,align:n.align[l]})));return n}}lheading(r){let e=this.rules.block.lheading.exec(r);if(e){let t=e[1].trim();return{type:"heading",raw:C(e[0],`
|
|
116
116
|
`),depth:e[2].charAt(0)==="="?1:2,text:t,tokens:this.lexer.inline(t)}}}paragraph(r){let e=this.rules.block.paragraph.exec(r);if(e){let t=e[1].charAt(e[1].length-1)===`
|
|
117
|
-
`?e[1].slice(0,-1):e[1];return{type:"paragraph",raw:e[0],text:t,tokens:this.lexer.inline(t)}}}text(r){let e=this.rules.block.text.exec(r);if(e)return{type:"text",raw:e[0],text:e[0],tokens:this.lexer.inline(e[0])}}escape(r){let e=this.rules.inline.escape.exec(r);if(e)return{type:"escape",raw:e[0],text:e[1]}}tag(r){let e=this.rules.inline.tag.exec(r);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(r){let e=this.rules.inline.link.exec(r);if(e){let t=e[2].trim();if(!this.options.pedantic&&this.rules.other.startAngleBracket.test(t)){if(!this.rules.other.endAngleBracket.test(t))return;let n=
|
|
118
|
-
`),this.blockTokens(e,this.tokens);for(let t=0;t<this.inlineQueue.length;t++){let s=this.inlineQueue[t];this.inlineTokens(s.src,s.tokens)}return this.inlineQueue=[],this.tokens}blockTokens(e,t=[],s=!1){this.tokenizer.lexer=this,this.options.pedantic&&(e=e.replace(v.tabCharGlobal," ").replace(v.spaceLine,""));let i=1/0;for(;e;){if(e.length<i)i=e.length;else{this.infiniteLoopError(e.charCodeAt(0));break}let n;if(this.options.extensions?.block?.some(
|
|
119
|
-
`:t.push(n);continue}if(n=this.tokenizer.code(e)){e=e.substring(n.raw.length);let
|
|
117
|
+
`?e[1].slice(0,-1):e[1];return{type:"paragraph",raw:e[0],text:t,tokens:this.lexer.inline(t)}}}text(r){let e=this.rules.block.text.exec(r);if(e)return{type:"text",raw:e[0],text:e[0],tokens:this.lexer.inline(e[0])}}escape(r){let e=this.rules.inline.escape.exec(r);if(e)return{type:"escape",raw:e[0],text:e[1]}}tag(r){let e=this.rules.inline.tag.exec(r);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(r){let e=this.rules.inline.link.exec(r);if(e){let t=e[2].trim();if(!this.options.pedantic&&this.rules.other.startAngleBracket.test(t)){if(!this.rules.other.endAngleBracket.test(t))return;let n=C(t.slice(0,-1),"\\");if((t.length-n.length)%2===0)return}else{let n=Xs(e[2],"()");if(n===-2)return;if(n>-1){let o=(e[0].indexOf("!")===0?5:4)+e[1].length+n;e[2]=e[2].substring(0,n),e[0]=e[0].substring(0,o).trim(),e[3]=""}}let s=e[2],i="";if(this.options.pedantic){let n=this.rules.other.pedanticHrefTitle.exec(s);n&&(s=n[1],i=n[3])}else i=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(t)?s=s.slice(1):s=s.slice(1,-1)),Xe(e,{href:s&&s.replace(this.rules.inline.anyPunctuation,"$1"),title:i&&i.replace(this.rules.inline.anyPunctuation,"$1")},e[0],this.lexer,this.rules)}}reflink(r,e){let t;if((t=this.rules.inline.reflink.exec(r))||(t=this.rules.inline.nolink.exec(r))){let s=(t[2]||t[1]).replace(this.rules.other.multipleSpaceGlobal," "),i=e[s.toLowerCase()];if(!i){let n=t[0].charAt(0);return{type:"text",raw:n,text:n}}return Xe(t,i,t[0],this.lexer,this.rules)}}emStrong(r,e,t=""){let s=this.rules.inline.emStrongLDelim.exec(r);if(!(!s||!s[1]&&!s[2]&&!s[3]&&!s[4]||s[4]&&t.match(this.rules.other.unicodeAlphaNumeric))&&(!(s[1]||s[3])||!t||this.rules.inline.punctuation.exec(t))){let i=[...s[0]].length-1,n,o,a=i,l=0,c=s[0][0],d=t===c,p=c==="*"?this.rules.inline.emStrongRDelimAst:this.rules.inline.emStrongRDelimUnd;for(p.lastIndex=0,e=e.slice(-1*r.length+i);(s=p.exec(e))!==null;){if(n=s[1]||s[2]||s[3]||s[4]||s[5]||s[6],!n)continue;if(o=[...n].length,s[3]||s[4]){a+=o;continue}else if(s[5]||s[6]){if(i%3&&!((i+o)%3)){l+=o;continue}if(d)break}if(a-=o,a>0)continue;o=Math.min(o,o+a+l);let g=[...s[0]][0].length,k=r.slice(0,i+s.index+g+o);if(Math.min(i,o)%2){let S=k.slice(1,-1);return{type:"em",raw:k,text:S,tokens:this.lexer.inlineTokens(S)}}let b=k.slice(2,-2);return{type:"strong",raw:k,text:b,tokens:this.lexer.inlineTokens(b)}}}}codespan(r){let e=this.rules.inline.code.exec(r);if(e){let t=e[2].replace(this.rules.other.newLineCharGlobal," "),s=this.rules.other.nonSpaceChar.test(t),i=this.rules.other.startingSpaceChar.test(t)&&this.rules.other.endingSpaceChar.test(t);return s&&i&&(t=t.substring(1,t.length-1)),{type:"codespan",raw:e[0],text:t}}}br(r){let e=this.rules.inline.br.exec(r);if(e)return{type:"br",raw:e[0]}}del(r,e,t=""){let s=this.rules.inline.delLDelim.exec(r);if(s&&(!s[1]||!t||this.rules.inline.punctuation.exec(t))){let i=[...s[0]].length-1,n,o,a=i,l=this.rules.inline.delRDelim;for(l.lastIndex=0,e=e.slice(-1*r.length+i);(s=l.exec(e))!==null;){if(n=s[1]||s[2]||s[3]||s[4]||s[5]||s[6],!n||(o=[...n].length,o!==i))continue;if(s[3]||s[4]){a+=o;continue}if(a-=o,a>0)continue;o=Math.min(o,o+a);let c=[...s[0]][0].length,d=r.slice(0,i+s.index+c+o),p=d.slice(i,-i);return{type:"del",raw:d,text:p,tokens:this.lexer.inlineTokens(p)}}}}autolink(r){let e=this.rules.inline.autolink.exec(r);if(e){let t,s;return e[2]==="@"?(t=e[1],s="mailto:"+t):(t=e[1],s=t),{type:"link",raw:e[0],text:t,href:s,tokens:[{type:"text",raw:t,text:t}]}}}url(r){let e;if(e=this.rules.inline.url.exec(r)){let t,s;if(e[2]==="@")t=e[0],s="mailto:"+t;else{let i;do i=e[0],e[0]=this.rules.inline._backpedal.exec(e[0])?.[0]??"";while(i!==e[0]);t=e[0],e[1]==="www."?s="http://"+e[0]:s=e[0]}return{type:"link",raw:e[0],text:t,href:s,tokens:[{type:"text",raw:t,text:t}]}}}inlineText(r){let e=this.rules.inline.text.exec(r);if(e){let t=this.lexer.state.inRawBlock;return{type:"text",raw:e[0],text:e[0],escaped:t}}}},y=class be{tokens;options;state;inlineQueue;tokenizer;constructor(e){this.tokens=[],this.tokens.links=Object.create(null),this.options=e||M,this.options.tokenizer=this.options.tokenizer||new ie,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 t={other:v,block:X.normal,inline:Z.normal};this.options.pedantic?(t.block=X.pedantic,t.inline=Z.pedantic):this.options.gfm&&(t.block=X.gfm,this.options.breaks?t.inline=Z.breaks:t.inline=Z.gfm),this.tokenizer.rules=t}static get rules(){return{block:X,inline:Z}}static lex(e,t){return new be(t).lex(e)}static lexInline(e,t){return new be(t).inlineTokens(e)}lex(e){e=e.replace(v.carriageReturn,`
|
|
118
|
+
`),this.blockTokens(e,this.tokens);for(let t=0;t<this.inlineQueue.length;t++){let s=this.inlineQueue[t];this.inlineTokens(s.src,s.tokens)}return this.inlineQueue=[],this.tokens}blockTokens(e,t=[],s=!1){this.tokenizer.lexer=this,this.options.pedantic&&(e=e.replace(v.tabCharGlobal," ").replace(v.spaceLine,""));let i=1/0;for(;e;){if(e.length<i)i=e.length;else{this.infiniteLoopError(e.charCodeAt(0));break}let n;if(this.options.extensions?.block?.some(a=>(n=a.call({lexer:this},e,t))?(e=e.substring(n.raw.length),t.push(n),!0):!1))continue;if(n=this.tokenizer.space(e)){e=e.substring(n.raw.length);let a=t.at(-1);n.raw.length===1&&a!==void 0?a.raw+=`
|
|
119
|
+
`:t.push(n);continue}if(n=this.tokenizer.code(e)){e=e.substring(n.raw.length);let a=t.at(-1);a?.type==="paragraph"||a?.type==="text"?(a.raw+=(a.raw.endsWith(`
|
|
120
120
|
`)?"":`
|
|
121
|
-
`)+n.raw,
|
|
122
|
-
`+n.text,this.inlineQueue.at(-1).src=
|
|
121
|
+
`)+n.raw,a.text+=`
|
|
122
|
+
`+n.text,this.inlineQueue.at(-1).src=a.text):t.push(n);continue}if(n=this.tokenizer.fences(e)){e=e.substring(n.raw.length),t.push(n);continue}if(n=this.tokenizer.heading(e)){e=e.substring(n.raw.length),t.push(n);continue}if(n=this.tokenizer.hr(e)){e=e.substring(n.raw.length),t.push(n);continue}if(n=this.tokenizer.blockquote(e)){e=e.substring(n.raw.length),t.push(n);continue}if(n=this.tokenizer.list(e)){e=e.substring(n.raw.length),t.push(n);continue}if(n=this.tokenizer.html(e)){e=e.substring(n.raw.length),t.push(n);continue}if(n=this.tokenizer.def(e)){e=e.substring(n.raw.length);let a=t.at(-1);a?.type==="paragraph"||a?.type==="text"?(a.raw+=(a.raw.endsWith(`
|
|
123
123
|
`)?"":`
|
|
124
|
-
`)+n.raw,
|
|
125
|
-
`+n.raw,this.inlineQueue.at(-1).src=
|
|
124
|
+
`)+n.raw,a.text+=`
|
|
125
|
+
`+n.raw,this.inlineQueue.at(-1).src=a.text):this.tokens.links[n.tag]||(this.tokens.links[n.tag]={href:n.href,title:n.title},t.push(n));continue}if(n=this.tokenizer.table(e)){e=e.substring(n.raw.length),t.push(n);continue}if(n=this.tokenizer.lheading(e)){e=e.substring(n.raw.length),t.push(n);continue}let o=e;if(this.options.extensions?.startBlock){let a=1/0,l=e.slice(1),c;this.options.extensions.startBlock.forEach(d=>{c=d.call({lexer:this},l),typeof c=="number"&&c>=0&&(a=Math.min(a,c))}),a<1/0&&a>=0&&(o=e.substring(0,a+1))}if(this.state.top&&(n=this.tokenizer.paragraph(o))){let a=t.at(-1);s&&a?.type==="paragraph"?(a.raw+=(a.raw.endsWith(`
|
|
126
126
|
`)?"":`
|
|
127
|
-
`)+n.raw,
|
|
128
|
-
`+n.text,this.inlineQueue.pop(),this.inlineQueue.at(-1).src=
|
|
127
|
+
`)+n.raw,a.text+=`
|
|
128
|
+
`+n.text,this.inlineQueue.pop(),this.inlineQueue.at(-1).src=a.text):t.push(n),s=o.length!==e.length,e=e.substring(n.raw.length);continue}if(n=this.tokenizer.text(e)){e=e.substring(n.raw.length);let a=t.at(-1);a?.type==="text"?(a.raw+=(a.raw.endsWith(`
|
|
129
129
|
`)?"":`
|
|
130
|
-
`)+n.raw,
|
|
131
|
-
`+n.text,this.inlineQueue.pop(),this.inlineQueue.at(-1).src=
|
|
132
|
-
`;return s?'<pre><code class="language-'+
|
|
133
|
-
`:"<pre><code>"+(t?i:
|
|
130
|
+
`)+n.raw,a.text+=`
|
|
131
|
+
`+n.text,this.inlineQueue.pop(),this.inlineQueue.at(-1).src=a.text):t.push(n);continue}if(e){this.infiniteLoopError(e.charCodeAt(0));break}}return this.state.top=!0,t}inline(e,t=[]){return this.inlineQueue.push({src:e,tokens:t}),t}inlineTokens(e,t=[]){this.tokenizer.lexer=this;let s=e;if(this.tokens.links){let a=Object.keys(this.tokens.links);a.length>0&&(s=s.replace(this.tokenizer.rules.inline.reflinkSearch,l=>a.includes(l.slice(l.lastIndexOf("[")+1,-1))?"["+"a".repeat(l.length-2)+"]":l))}s=s.replace(this.tokenizer.rules.inline.anyPunctuation,a=>"+".repeat(a.length)),s=s.replace(this.tokenizer.rules.inline.blockSkip,(a,l,c)=>{let d=c?c.length:0;return a.slice(0,d)+"["+"a".repeat(a.length-d-2)+"]"}),s=this.options.hooks?.emStrongMask?.call({lexer:this},s)??s;let i=!1,n="",o=1/0;for(;e;){if(e.length<o)o=e.length;else{this.infiniteLoopError(e.charCodeAt(0));break}i||(n=""),i=!1;let a;if(this.options.extensions?.inline?.some(c=>(a=c.call({lexer:this},e,t))?(e=e.substring(a.raw.length),t.push(a),!0):!1))continue;if(a=this.tokenizer.escape(e)){e=e.substring(a.raw.length),t.push(a);continue}if(a=this.tokenizer.tag(e)){e=e.substring(a.raw.length),t.push(a);continue}if(a=this.tokenizer.link(e)){e=e.substring(a.raw.length),t.push(a);continue}if(a=this.tokenizer.reflink(e,this.tokens.links)){e=e.substring(a.raw.length);let c=t.at(-1);a.type==="text"&&c?.type==="text"?(c.raw+=a.raw,c.text+=a.text):t.push(a);continue}if(a=this.tokenizer.emStrong(e,s,n)){e=e.substring(a.raw.length),t.push(a);continue}if(a=this.tokenizer.codespan(e)){e=e.substring(a.raw.length),t.push(a);continue}if(a=this.tokenizer.br(e)){e=e.substring(a.raw.length),t.push(a);continue}if(a=this.tokenizer.del(e,s,n)){e=e.substring(a.raw.length),t.push(a);continue}if(a=this.tokenizer.autolink(e)){e=e.substring(a.raw.length),t.push(a);continue}if(!this.state.inLink&&(a=this.tokenizer.url(e))){e=e.substring(a.raw.length),t.push(a);continue}let l=e;if(this.options.extensions?.startInline){let c=1/0,d=e.slice(1),p;this.options.extensions.startInline.forEach(g=>{p=g.call({lexer:this},d),typeof p=="number"&&p>=0&&(c=Math.min(c,p))}),c<1/0&&c>=0&&(l=e.substring(0,c+1))}if(a=this.tokenizer.inlineText(l)){e=e.substring(a.raw.length),a.raw.slice(-1)!=="_"&&(n=a.raw.slice(-1)),i=!0;let c=t.at(-1);c?.type==="text"?(c.raw+=a.raw,c.text+=a.text):t.push(a);continue}if(e){this.infiniteLoopError(e.charCodeAt(0));break}}return t}infiniteLoopError(e){let t="Infinite loop on byte: "+e;if(this.options.silent)console.error(t);else throw new Error(t)}},re=class{options;parser;constructor(r){this.options=r||M}space(r){return""}code({text:r,lang:e,escaped:t}){let s=(e||"").match(v.notSpaceStart)?.[0],i=r.replace(v.endingNewline,"")+`
|
|
132
|
+
`;return s?'<pre><code class="language-'+A(s)+'">'+(t?i:A(i,!0))+`</code></pre>
|
|
133
|
+
`:"<pre><code>"+(t?i:A(i,!0))+`</code></pre>
|
|
134
134
|
`}blockquote({tokens:r}){return`<blockquote>
|
|
135
135
|
${this.parser.parse(r)}</blockquote>
|
|
136
136
|
`}html({text:r}){return r}def(r){return""}heading({tokens:r,depth:e}){return`<h${e}>${this.parser.parseInline(r)}</h${e}>
|
|
137
137
|
`}hr(r){return`<hr>
|
|
138
|
-
`}list(r){let e=r.ordered,t=r.start,s="";for(let
|
|
138
|
+
`}list(r){let e=r.ordered,t=r.start,s="";for(let o=0;o<r.items.length;o++){let a=r.items[o];s+=this.listitem(a)}let i=e?"ol":"ul",n=e&&t!==1?' start="'+t+'"':"";return"<"+i+n+`>
|
|
139
139
|
`+s+"</"+i+`>
|
|
140
140
|
`}listitem(r){return`<li>${this.parser.parse(r.tokens)}</li>
|
|
141
141
|
`}checkbox({checked:r}){return"<input "+(r?'checked="" ':"")+'disabled="" type="checkbox"> '}paragraph({tokens:r}){return`<p>${this.parser.parseInline(r)}</p>
|
|
142
|
-
`}table(r){let e="",t="";for(let i=0;i<r.header.length;i++)t+=this.tablecell(r.header[i]);e+=this.tablerow({text:t});let s="";for(let i=0;i<r.rows.length;i++){let n=r.rows[i];t="";for(let
|
|
142
|
+
`}table(r){let e="",t="";for(let i=0;i<r.header.length;i++)t+=this.tablecell(r.header[i]);e+=this.tablerow({text:t});let s="";for(let i=0;i<r.rows.length;i++){let n=r.rows[i];t="";for(let o=0;o<n.length;o++)t+=this.tablecell(n[o]);s+=this.tablerow({text:t})}return s&&(s=`<tbody>${s}</tbody>`),`<table>
|
|
143
143
|
<thead>
|
|
144
144
|
`+e+`</thead>
|
|
145
145
|
`+s+`</table>
|
|
146
146
|
`}tablerow({text:r}){return`<tr>
|
|
147
147
|
${r}</tr>
|
|
148
148
|
`}tablecell(r){let e=this.parser.parseInline(r.tokens),t=r.header?"th":"td";return(r.align?`<${t} align="${r.align}">`:`<${t}>`)+e+`</${t}>
|
|
149
|
-
`}strong({tokens:r}){return`<strong>${this.parser.parseInline(r)}</strong>`}em({tokens:r}){return`<em>${this.parser.parseInline(r)}</em>`}codespan({text:r}){return`<code>${
|
|
150
|
-
Please report this to https://github.com/markedjs/marked.`,r){let s="<p>An error occurred:</p><pre>"+
|
|
149
|
+
`}strong({tokens:r}){return`<strong>${this.parser.parseInline(r)}</strong>`}em({tokens:r}){return`<em>${this.parser.parseInline(r)}</em>`}codespan({text:r}){return`<code>${A(r,!0)}</code>`}br(r){return"<br>"}del({tokens:r}){return`<del>${this.parser.parseInline(r)}</del>`}link({href:r,title:e,tokens:t}){let s=this.parser.parseInline(t),i=Ye(r);if(i===null)return s;r=i;let n='<a href="'+r+'"';return e&&(n+=' title="'+A(e)+'"'),n+=">"+s+"</a>",n}image({href:r,title:e,text:t,tokens:s}){s&&(t=this.parser.parseInline(s,this.parser.textRenderer));let i=Ye(r);if(i===null)return A(t);r=i;let n=`<img src="${r}" alt="${A(t)}"`;return e&&(n+=` title="${A(e)}"`),n+=">",n}text(r){return"tokens"in r&&r.tokens?this.parser.parseInline(r.tokens):"escaped"in r&&r.escaped?r.text:A(r.text)}},Pe=class{strong({text:r}){return r}em({text:r}){return r}codespan({text:r}){return r}del({text:r}){return r}html({text:r}){return r}text({text:r}){return r}link({text:r}){return""+r}image({text:r}){return""+r}br(){return""}checkbox({raw:r}){return r}},w=class me{options;renderer;textRenderer;constructor(e){this.options=e||M,this.options.renderer=this.options.renderer||new re,this.renderer=this.options.renderer,this.renderer.options=this.options,this.renderer.parser=this,this.textRenderer=new Pe}static parse(e,t){return new me(t).parse(e)}static parseInline(e,t){return new me(t).parseInline(e)}parse(e){this.renderer.parser=this;let t="";for(let s=0;s<e.length;s++){let i=e[s];if(this.options.extensions?.renderers?.[i.type]){let o=i,a=this.options.extensions.renderers[o.type].call({parser:this},o);if(a!==!1||!["space","hr","heading","code","table","blockquote","list","checkbox","html","def","paragraph","text"].includes(o.type)){t+=a||"";continue}}let n=i;switch(n.type){case"space":{t+=this.renderer.space(n);break}case"hr":{t+=this.renderer.hr(n);break}case"heading":{t+=this.renderer.heading(n);break}case"code":{t+=this.renderer.code(n);break}case"table":{t+=this.renderer.table(n);break}case"blockquote":{t+=this.renderer.blockquote(n);break}case"list":{t+=this.renderer.list(n);break}case"checkbox":{t+=this.renderer.checkbox(n);break}case"html":{t+=this.renderer.html(n);break}case"def":{t+=this.renderer.def(n);break}case"paragraph":{t+=this.renderer.paragraph(n);break}case"text":{t+=this.renderer.text(n);break}default:{let o='Token with "'+n.type+'" type was not found.';if(this.options.silent)return console.error(o),"";throw new Error(o)}}}return t}parseInline(e,t=this.renderer){this.renderer.parser=this;let s="";for(let i=0;i<e.length;i++){let n=e[i];if(this.options.extensions?.renderers?.[n.type]){let a=this.options.extensions.renderers[n.type].call({parser:this},n);if(a!==!1||!["escape","html","link","image","checkbox","strong","em","codespan","br","del","text"].includes(n.type)){s+=a||"";continue}}let o=n;switch(o.type){case"escape":{s+=t.text(o);break}case"html":{s+=t.html(o);break}case"link":{s+=t.link(o);break}case"image":{s+=t.image(o);break}case"checkbox":{s+=t.checkbox(o);break}case"strong":{s+=t.strong(o);break}case"em":{s+=t.em(o);break}case"codespan":{s+=t.codespan(o);break}case"br":{s+=t.br(o);break}case"del":{s+=t.del(o);break}case"text":{s+=t.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}},K=class{options;block;constructor(r){this.options=r||M}static passThroughHooks=new Set(["preprocess","postprocess","processAllTokens","emStrongMask"]);static passThroughHooksRespectAsync=new Set(["preprocess","postprocess","processAllTokens"]);preprocess(r){return r}postprocess(r){return r}processAllTokens(r){return r}emStrongMask(r){return r}provideLexer(r=this.block){return r?y.lex:y.lexInline}provideParser(r=this.block){return r?w.parse:w.parseInline}},si=class{defaults=Se();options=this.setOptions;parse=this.parseMarkdown(!0);parseInline=this.parseMarkdown(!1);Parser=w;Renderer=re;TextRenderer=Pe;Lexer=y;Tokenizer=ie;Hooks=K;constructor(...r){this.use(...r)}walkTokens(r,e){let t=[];for(let s of r)switch(t=t.concat(e.call(this,s)),s.type){case"table":{let i=s;for(let n of i.header)t=t.concat(this.walkTokens(n.tokens,e));for(let n of i.rows)for(let o of n)t=t.concat(this.walkTokens(o.tokens,e));break}case"list":{let i=s;t=t.concat(this.walkTokens(i.items,e));break}default:{let i=s;this.defaults.extensions?.childTokens?.[i.type]?this.defaults.extensions.childTokens[i.type].forEach(n=>{let o=i[n].flat(1/0);t=t.concat(this.walkTokens(o,e))}):i.tokens&&(t=t.concat(this.walkTokens(i.tokens,e)))}}return t}use(...r){let e=this.defaults.extensions||{renderers:{},childTokens:{}};return r.forEach(t=>{let s={...t};if(s.async=this.defaults.async||s.async||!1,t.extensions&&(t.extensions.forEach(i=>{if(!i.name)throw new Error("extension name required");if("renderer"in i){let n=e.renderers[i.name];n?e.renderers[i.name]=function(...o){let a=i.renderer.apply(this,o);return a===!1&&(a=n.apply(this,o)),a}:e.renderers[i.name]=i.renderer}if("tokenizer"in i){if(!i.level||i.level!=="block"&&i.level!=="inline")throw new Error("extension level must be 'block' or 'inline'");let n=e[i.level];n?n.unshift(i.tokenizer):e[i.level]=[i.tokenizer],i.start&&(i.level==="block"?e.startBlock?e.startBlock.push(i.start):e.startBlock=[i.start]:i.level==="inline"&&(e.startInline?e.startInline.push(i.start):e.startInline=[i.start]))}"childTokens"in i&&i.childTokens&&(e.childTokens[i.name]=i.childTokens)}),s.extensions=e),t.renderer){let i=this.defaults.renderer||new re(this.defaults);for(let n in t.renderer){if(!(n in i))throw new Error(`renderer '${n}' does not exist`);if(["options","parser"].includes(n))continue;let o=n,a=t.renderer[o],l=i[o];i[o]=(...c)=>{let d=a.apply(i,c);return d===!1&&(d=l.apply(i,c)),d||""}}s.renderer=i}if(t.tokenizer){let i=this.defaults.tokenizer||new ie(this.defaults);for(let n in t.tokenizer){if(!(n in i))throw new Error(`tokenizer '${n}' does not exist`);if(["options","rules","lexer"].includes(n))continue;let o=n,a=t.tokenizer[o],l=i[o];i[o]=(...c)=>{let d=a.apply(i,c);return d===!1&&(d=l.apply(i,c)),d}}s.tokenizer=i}if(t.hooks){let i=this.defaults.hooks||new K;for(let n in t.hooks){if(!(n in i))throw new Error(`hook '${n}' does not exist`);if(["options","block"].includes(n))continue;let o=n,a=t.hooks[o],l=i[o];K.passThroughHooks.has(n)?i[o]=c=>{if(this.defaults.async&&K.passThroughHooksRespectAsync.has(n))return(async()=>{let p=await a.call(i,c);return l.call(i,p)})();let d=a.call(i,c);return l.call(i,d)}:i[o]=(...c)=>{if(this.defaults.async)return(async()=>{let p=await a.apply(i,c);return p===!1&&(p=await l.apply(i,c)),p})();let d=a.apply(i,c);return d===!1&&(d=l.apply(i,c)),d}}s.hooks=i}if(t.walkTokens){let i=this.defaults.walkTokens,n=t.walkTokens;s.walkTokens=function(o){let a=[];return a.push(n.call(this,o)),i&&(a=a.concat(i.call(this,o))),a}}this.defaults={...this.defaults,...s}}),this}setOptions(r){return this.defaults={...this.defaults,...r},this}lexer(r,e){return y.lex(r,e??this.defaults)}parser(r,e){return w.parse(r,e??this.defaults)}parseMarkdown(r){return(e,t)=>{let s={...t},i={...this.defaults,...s},n=this.onError(!!i.silent,!!i.async);if(this.defaults.async===!0&&s.async===!1)return n(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 n(new Error("marked(): input parameter is undefined or null"));if(typeof e!="string")return n(new Error("marked(): input parameter is of type "+Object.prototype.toString.call(e)+", string expected"));if(i.hooks&&(i.hooks.options=i,i.hooks.block=r),i.async)return(async()=>{let o=i.hooks?await i.hooks.preprocess(e):e,a=await(i.hooks?await i.hooks.provideLexer(r):r?y.lex:y.lexInline)(o,i),l=i.hooks?await i.hooks.processAllTokens(a):a;i.walkTokens&&await Promise.all(this.walkTokens(l,i.walkTokens));let c=await(i.hooks?await i.hooks.provideParser(r):r?w.parse:w.parseInline)(l,i);return i.hooks?await i.hooks.postprocess(c):c})().catch(n);try{i.hooks&&(e=i.hooks.preprocess(e));let o=(i.hooks?i.hooks.provideLexer(r):r?y.lex:y.lexInline)(e,i);i.hooks&&(o=i.hooks.processAllTokens(o)),i.walkTokens&&this.walkTokens(o,i.walkTokens);let a=(i.hooks?i.hooks.provideParser(r):r?w.parse:w.parseInline)(o,i);return i.hooks&&(a=i.hooks.postprocess(a)),a}catch(o){return n(o)}}}onError(r,e){return t=>{if(t.message+=`
|
|
150
|
+
Please report this to https://github.com/markedjs/marked.`,r){let s="<p>An error occurred:</p><pre>"+A(t.message+"",!0)+"</pre>";return e?Promise.resolve(s):s}if(e)return Promise.reject(t);throw t}}},I=new si;function x(r,e){return I.parse(r,e)}x.options=x.setOptions=function(r){return I.setOptions(r),x.defaults=I.defaults,ft(x.defaults),x};x.getDefaults=Se;x.defaults=M;function ii(...r){return I.use(...r),x.defaults=I.defaults,ft(x.defaults),x}x.use=ii;x.walkTokens=function(r,e){return I.walkTokens(r,e)};x.parseInline=I.parseInline;x.Parser=w;x.parser=w.parse;x.Renderer=re;x.TextRenderer=Pe;x.Lexer=y;x.lexer=y.lex;x.Tokenizer=ie;x.Hooks=K;x.parse=x;x.options;x.setOptions;x.walkTokens;x.parseInline;w.parse;y.lex;/**
|
|
151
151
|
* @license
|
|
152
152
|
* Copyright 2017 Google LLC
|
|
153
153
|
* SPDX-License-Identifier: BSD-3-Clause
|
|
154
|
-
*/const
|
|
154
|
+
*/const ri={CHILD:2},ni=r=>(...e)=>({_$litDirective$:r,values:e});class oi{constructor(e){}get _$AU(){return this._$AM._$AU}_$AT(e,t,s){this._$Ct=e,this._$AM=t,this._$Ci=s}_$AS(e,t){return this.update(e,t)}update(e,t){return this.render(...t)}}/**
|
|
155
155
|
* @license
|
|
156
156
|
* Copyright 2017 Google LLC
|
|
157
157
|
* SPDX-License-Identifier: BSD-3-Clause
|
|
158
|
-
*/class
|
|
158
|
+
*/class xe extends oi{constructor(e){if(super(e),this.it=m,e.type!==ri.CHILD)throw Error(this.constructor.directiveName+"() can only be used in child bindings")}render(e){if(e===m||e==null)return this._t=void 0,this.it=e;if(e===D)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;const t=[e];return t.raw=t,this._t={_$litType$:this.constructor.resultType,strings:t,values:[]}}}xe.directiveName="unsafeHTML",xe.resultType=1;const ai=ni(xe);let et=0;class li extends _{static{this.properties={tags:{attribute:!1},active:{attribute:!1},onToggle:{attribute:!1},allowCreate:{attribute:!1},width:{attribute:!1}}}#e=new u("");#t=new u(!1);#s=new u(-1);#r;#i;static{this.styles=O`
|
|
159
159
|
:host {
|
|
160
160
|
display: inline-block;
|
|
161
161
|
position: relative;
|
|
162
|
-
width:
|
|
162
|
+
width: fit-content;
|
|
163
|
+
min-width: 200px;
|
|
164
|
+
max-width: 100%;
|
|
163
165
|
font: inherit;
|
|
164
166
|
font-size: 13px;
|
|
165
167
|
}
|
|
166
168
|
.field {
|
|
167
169
|
display: flex;
|
|
168
170
|
align-items: center;
|
|
169
|
-
flex-wrap: wrap;
|
|
170
171
|
gap: 4px;
|
|
171
172
|
border: 1px solid var(--border-strong);
|
|
172
173
|
border-radius: 6px;
|
|
@@ -175,6 +176,14 @@ Please report this to https://github.com/markedjs/marked.`,r){let s="<p>An error
|
|
|
175
176
|
min-height: 30px;
|
|
176
177
|
box-sizing: border-box;
|
|
177
178
|
}
|
|
179
|
+
.chips-and-input {
|
|
180
|
+
display: flex;
|
|
181
|
+
align-items: center;
|
|
182
|
+
flex-wrap: wrap;
|
|
183
|
+
gap: 4px;
|
|
184
|
+
flex: 1 1 auto;
|
|
185
|
+
min-width: 0;
|
|
186
|
+
}
|
|
178
187
|
.field:focus-within {
|
|
179
188
|
border-color: var(--accent);
|
|
180
189
|
box-shadow: 0 0 0 2px var(--accent-tint);
|
|
@@ -260,60 +269,62 @@ Please report this to https://github.com/markedjs/marked.`,r){let s="<p>An error
|
|
|
260
269
|
.option input { margin: 0; pointer-events: none; }
|
|
261
270
|
.empty { padding: 6px 8px; opacity: 0.6; font-style: italic; font-size: 12px; }
|
|
262
271
|
.create-option { color: var(--accent); font-style: italic; }
|
|
263
|
-
`}constructor(){super(),new
|
|
264
|
-
<div class="field" style=${`anchor-name: ${this.#
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
272
|
+
`}constructor(){super(),new ae(this),this.tags=[],this.active=[],this.onToggle=()=>{},this.allowCreate=!1,this.#r=`--tag-multiselect-${++et}`,this.#i=`tag-multiselect-listbox-${et}`}willUpdate(){this.style.width=this.width??""}#d=e=>{e.composedPath().includes(this)||this.#c()};connectedCallback(){super.connectedCallback(),document.addEventListener("click",this.#d)}disconnectedCallback(){document.removeEventListener("click",this.#d),super.disconnectedCallback()}get#o(){const e=this.#e.value.trim().toLowerCase();return e?this.tags.filter(t=>t.toLowerCase().includes(e)):this.tags}#a(){this.#t.set(!0),this.updateComplete.then(()=>{this.renderRoot.querySelector(".menu")?.showPopover()})}#c(){this.#t.set(!1),this.#s.set(-1),this.renderRoot.querySelector(".menu")?.hidePopover()}#h(){this.#t.value?this.#c():(this.#a(),this.renderRoot.querySelector(".input")?.focus())}#n(e){this.#e.set(e.target.value),this.#s.set(-1),this.#a()}#p(e){this.onToggle(e),this.#e.set(""),this.#s.set(-1)}get#u(){if(!this.allowCreate)return!1;const e=this.#e.value.trim();return e.length>0&&!this.tags.includes(e)&&!this.active.includes(e)}#f(e){e.stopPropagation(),this.active.forEach(t=>this.onToggle(t)),this.#e.set(""),this.renderRoot.querySelector(".input")?.focus(),this.#a()}#b(e){const t=this.#o;if(e.key==="ArrowDown")e.preventDefault(),this.#a(),t.length&&this.#s.set((this.#s.value+1)%t.length);else if(e.key==="ArrowUp")e.preventDefault(),this.#a(),t.length&&this.#s.set((this.#s.value-1+t.length)%t.length);else if(e.key==="Enter"||this.allowCreate&&e.key===","){const s=t[this.#s.value];s!==void 0?(e.preventDefault(),this.#p(s)):this.#u&&(e.preventDefault(),this.#p(this.#e.value.trim()))}else if(e.key==="Backspace"&&!this.#e.value&&this.active.length>0){const s=this.active[this.active.length-1];s!==void 0&&this.onToggle(s)}else e.key==="Escape"&&this.#c()}render(){const e=this.active,t=this.#o,s=this.#t.value,i=this.#s.value;return h`
|
|
273
|
+
<div class="field" style=${`anchor-name: ${this.#r}`}>
|
|
274
|
+
<div class="chips-and-input">
|
|
275
|
+
${e.map(n=>h`
|
|
276
|
+
<span class="selected-chip">
|
|
277
|
+
${n}
|
|
278
|
+
<span class="remove" @click=${()=>this.onToggle(n)}>✕</span>
|
|
279
|
+
</span>
|
|
280
|
+
`)}
|
|
281
|
+
<input
|
|
282
|
+
class="input"
|
|
283
|
+
role="combobox"
|
|
284
|
+
aria-autocomplete="list"
|
|
285
|
+
aria-expanded=${s}
|
|
286
|
+
aria-controls=${this.#i}
|
|
287
|
+
aria-activedescendant=${i>=0?`${this.#i}-opt-${i}`:""}
|
|
288
|
+
placeholder=${e.length===0?"Filter by tag…":""}
|
|
289
|
+
.value=${this.#e.value}
|
|
290
|
+
@input=${n=>this.#n(n)}
|
|
291
|
+
@focus=${()=>this.#a()}
|
|
292
|
+
@click=${()=>this.#a()}
|
|
293
|
+
@keydown=${n=>this.#b(n)}
|
|
294
|
+
/>
|
|
295
|
+
</div>
|
|
296
|
+
${e.length>0?h`<button class="clear-btn" tabindex="-1" @mousedown=${n=>n.preventDefault()} @click=${n=>this.#f(n)}>✕</button>`:""}
|
|
286
297
|
<button
|
|
287
298
|
class="chevron-btn ${s?"open":""}"
|
|
288
299
|
tabindex="-1"
|
|
289
300
|
@mousedown=${n=>n.preventDefault()}
|
|
290
|
-
@click=${()=>this.#
|
|
301
|
+
@click=${()=>this.#h()}
|
|
291
302
|
>
|
|
292
303
|
▾
|
|
293
304
|
</button>
|
|
294
305
|
</div>
|
|
295
306
|
|
|
296
307
|
<ul
|
|
297
|
-
id=${this.#
|
|
308
|
+
id=${this.#i}
|
|
298
309
|
class="menu ${s?"visible":""}"
|
|
299
310
|
role="listbox"
|
|
300
311
|
aria-multiselectable="true"
|
|
301
312
|
popover="manual"
|
|
302
|
-
style=${`position-anchor: ${this.#
|
|
313
|
+
style=${`position-anchor: ${this.#r}`}
|
|
303
314
|
>
|
|
304
|
-
${t.length?t.map((n,
|
|
315
|
+
${t.length?t.map((n,o)=>h`
|
|
305
316
|
<li
|
|
306
|
-
id=${`${this.#
|
|
317
|
+
id=${`${this.#i}-opt-${o}`}
|
|
307
318
|
role="option"
|
|
308
319
|
aria-selected=${e.includes(n)}
|
|
309
|
-
class=${
|
|
310
|
-
@mousedown=${
|
|
320
|
+
class=${o===i?"option highlighted":"option"}
|
|
321
|
+
@mousedown=${a=>a.preventDefault()}
|
|
311
322
|
@click=${()=>this.#p(n)}
|
|
312
323
|
>
|
|
313
324
|
<input type="checkbox" .checked=${e.includes(n)} tabindex="-1" />
|
|
314
325
|
${n}
|
|
315
326
|
</li>
|
|
316
|
-
`):this.#
|
|
327
|
+
`):this.#u?h`
|
|
317
328
|
<li
|
|
318
329
|
class="option create-option"
|
|
319
330
|
@mousedown=${n=>n.preventDefault()}
|
|
@@ -321,9 +332,260 @@ Please report this to https://github.com/markedjs/marked.`,r){let s="<p>An error
|
|
|
321
332
|
>
|
|
322
333
|
No match. Create '${this.#e.value.trim()}'
|
|
323
334
|
</li>
|
|
324
|
-
`:
|
|
335
|
+
`:h`<li class="empty">${this.allowCreate?"Type to create a tag":"No matches"}</li>`}
|
|
325
336
|
</ul>
|
|
326
|
-
`}}customElements.define("tag-multiselect",
|
|
337
|
+
`}}customElements.define("tag-multiselect",li);let tt=0;class ci extends _{static{this.properties={options:{attribute:!1},value:{attribute:!1},onChange:{attribute:!1}}}#e=new u("");#t=new u(!1);#s=new u(-1);#r;#i;static{this.styles=O`
|
|
338
|
+
:host {
|
|
339
|
+
display: inline-block;
|
|
340
|
+
position: relative;
|
|
341
|
+
width: 100%;
|
|
342
|
+
max-width: 320px;
|
|
343
|
+
font: inherit;
|
|
344
|
+
font-size: 13px;
|
|
345
|
+
}
|
|
346
|
+
.field {
|
|
347
|
+
display: flex;
|
|
348
|
+
align-items: center;
|
|
349
|
+
gap: 4px;
|
|
350
|
+
border: 1px solid var(--border-strong);
|
|
351
|
+
border-radius: 6px;
|
|
352
|
+
background: var(--bg);
|
|
353
|
+
padding: 3px 4px 3px 8px;
|
|
354
|
+
min-height: 30px;
|
|
355
|
+
box-sizing: border-box;
|
|
356
|
+
}
|
|
357
|
+
.field:focus-within {
|
|
358
|
+
border-color: var(--accent);
|
|
359
|
+
box-shadow: 0 0 0 2px var(--accent-tint);
|
|
360
|
+
}
|
|
361
|
+
.input {
|
|
362
|
+
flex: 1 1 auto;
|
|
363
|
+
min-width: 0;
|
|
364
|
+
border: none;
|
|
365
|
+
outline: none;
|
|
366
|
+
padding: 5px 2px;
|
|
367
|
+
font: inherit;
|
|
368
|
+
font-size: 13px;
|
|
369
|
+
background: transparent;
|
|
370
|
+
color: inherit;
|
|
371
|
+
}
|
|
372
|
+
.chevron-btn {
|
|
373
|
+
border: none;
|
|
374
|
+
background: transparent;
|
|
375
|
+
cursor: pointer;
|
|
376
|
+
color: inherit;
|
|
377
|
+
opacity: 0.6;
|
|
378
|
+
font-size: 12px;
|
|
379
|
+
padding: 2px 5px;
|
|
380
|
+
line-height: 1;
|
|
381
|
+
flex: 0 0 auto;
|
|
382
|
+
}
|
|
383
|
+
.chevron-btn:hover { opacity: 1; }
|
|
384
|
+
.chevron-btn { transition: transform 0.15s ease; }
|
|
385
|
+
.chevron-btn.open { transform: rotate(180deg); }
|
|
386
|
+
|
|
387
|
+
.menu {
|
|
388
|
+
position: fixed;
|
|
389
|
+
margin: 0;
|
|
390
|
+
inset: auto;
|
|
391
|
+
top: anchor(bottom);
|
|
392
|
+
left: anchor(left);
|
|
393
|
+
width: anchor-size(width);
|
|
394
|
+
position-try-fallbacks: flip-block;
|
|
395
|
+
list-style: none;
|
|
396
|
+
padding: 4px;
|
|
397
|
+
margin: 0;
|
|
398
|
+
border: 1px solid var(--border);
|
|
399
|
+
border-radius: 8px;
|
|
400
|
+
background: var(--bg);
|
|
401
|
+
color: inherit;
|
|
402
|
+
box-shadow: 0 8px 24px var(--shadow);
|
|
403
|
+
max-height: 260px;
|
|
404
|
+
overflow-y: auto;
|
|
405
|
+
box-sizing: border-box;
|
|
406
|
+
}
|
|
407
|
+
.menu:popover-open { margin-top: 4px; }
|
|
408
|
+
.menu[popover] { display: none; }
|
|
409
|
+
.menu.visible[popover] { display: block; }
|
|
410
|
+
|
|
411
|
+
.option {
|
|
412
|
+
display: flex;
|
|
413
|
+
align-items: center;
|
|
414
|
+
gap: 8px;
|
|
415
|
+
padding: 6px 8px;
|
|
416
|
+
border-radius: 5px;
|
|
417
|
+
cursor: pointer;
|
|
418
|
+
font-size: 13px;
|
|
419
|
+
}
|
|
420
|
+
.option:hover, .option.highlighted { background: var(--hover); }
|
|
421
|
+
.option.selected { font-weight: 600; }
|
|
422
|
+
.empty { padding: 6px 8px; opacity: 0.6; font-style: italic; font-size: 12px; }
|
|
423
|
+
.create-option { color: var(--accent); font-style: italic; }
|
|
424
|
+
`}constructor(){super(),new ae(this),this.options=[],this.value="",this.onChange=()=>{},this.#r=`--status-select-${++tt}`,this.#i=`status-select-listbox-${tt}`}#d=e=>{e.composedPath().includes(this)||this.#c()};connectedCallback(){super.connectedCallback(),document.addEventListener("click",this.#d)}disconnectedCallback(){document.removeEventListener("click",this.#d),super.disconnectedCallback()}get#o(){const e=this.#e.value.trim().toLowerCase();return!e||e===this.value.trim().toLowerCase()?this.options:this.options.filter(t=>t.toLowerCase().includes(e))}#a(){this.#e.set(this.value),this.#t.set(!0),this.updateComplete.then(()=>{this.renderRoot.querySelector(".menu")?.showPopover()})}#c(){this.#t.set(!1),this.#s.set(-1),this.#e.set(this.value),this.renderRoot.querySelector(".menu")?.hidePopover()}#h(){this.#t.value?this.#c():(this.#a(),this.renderRoot.querySelector(".input")?.focus())}#n(e){this.#e.set(e.target.value),this.#s.set(-1),this.#t.value||this.#a()}#p(e){return e.trim().toLowerCase().replace(/\s+/g,"-")}#u(e){const t=this.#p(e);if(!t)return this.#c();this.onChange(t),this.#e.set(t),this.#s.set(-1),this.#c()}get#f(){const e=this.#p(this.#e.value);return e.length>0&&!this.options.some(t=>t.toLowerCase()===e)}get#b(){return this.#o.length+(this.#f?1:0)}#m(e){const t=this.#b;if(e.key==="ArrowDown")e.preventDefault(),this.#a(),t&&this.#s.set((this.#s.value+1)%t);else if(e.key==="ArrowUp")e.preventDefault(),this.#a(),t&&this.#s.set((this.#s.value-1+t)%t);else if(e.key==="Enter"){e.preventDefault();const s=this.#o,i=s[this.#s.value];i!==void 0?this.#u(i):this.#s.value===s.length&&this.#f?this.#u(this.#e.value):this.#e.value.trim()&&this.#u(this.#e.value)}else e.key==="Escape"&&(e.preventDefault(),this.#c())}render(){const e=this.value,t=this.#o,s=this.#t.value,i=this.#s.value;return h`
|
|
425
|
+
<div class="field" style=${`anchor-name: ${this.#r}`}>
|
|
426
|
+
<input
|
|
427
|
+
class="input"
|
|
428
|
+
role="combobox"
|
|
429
|
+
aria-autocomplete="list"
|
|
430
|
+
aria-expanded=${s}
|
|
431
|
+
aria-controls=${this.#i}
|
|
432
|
+
aria-activedescendant=${i>=0?`${this.#i}-opt-${i}`:""}
|
|
433
|
+
.value=${s?this.#e.value:e}
|
|
434
|
+
@input=${n=>this.#n(n)}
|
|
435
|
+
@focus=${()=>this.#a()}
|
|
436
|
+
@click=${()=>this.#a()}
|
|
437
|
+
@keydown=${n=>this.#m(n)}
|
|
438
|
+
@blur=${()=>{this.#t.value&&this.#e.value.trim()&&this.#p(this.#e.value)!==e?this.#u(this.#e.value):this.#c()}}
|
|
439
|
+
/>
|
|
440
|
+
<button
|
|
441
|
+
class="chevron-btn ${s?"open":""}"
|
|
442
|
+
tabindex="-1"
|
|
443
|
+
@mousedown=${n=>n.preventDefault()}
|
|
444
|
+
@click=${()=>this.#h()}
|
|
445
|
+
>
|
|
446
|
+
▾
|
|
447
|
+
</button>
|
|
448
|
+
</div>
|
|
449
|
+
|
|
450
|
+
<ul
|
|
451
|
+
id=${this.#i}
|
|
452
|
+
class="menu ${s?"visible":""}"
|
|
453
|
+
role="listbox"
|
|
454
|
+
popover="manual"
|
|
455
|
+
style=${`position-anchor: ${this.#r}`}
|
|
456
|
+
>
|
|
457
|
+
${t.map((n,o)=>h`
|
|
458
|
+
<li
|
|
459
|
+
id=${`${this.#i}-opt-${o}`}
|
|
460
|
+
role="option"
|
|
461
|
+
aria-selected=${n===e}
|
|
462
|
+
class=${`option ${n===e?"selected":""} ${o===i?"highlighted":""}`}
|
|
463
|
+
@mousedown=${a=>a.preventDefault()}
|
|
464
|
+
@click=${()=>this.#u(n)}
|
|
465
|
+
>
|
|
466
|
+
${n}
|
|
467
|
+
</li>
|
|
468
|
+
`)}
|
|
469
|
+
${this.#f?h`
|
|
470
|
+
<li
|
|
471
|
+
id=${`${this.#i}-opt-${t.length}`}
|
|
472
|
+
role="option"
|
|
473
|
+
class=${`option create-option ${t.length===i?"highlighted":""}`}
|
|
474
|
+
@mousedown=${n=>n.preventDefault()}
|
|
475
|
+
@click=${()=>this.#u(this.#e.value)}
|
|
476
|
+
>
|
|
477
|
+
${t.length?"Create":"No match. Create"} '${this.#p(this.#e.value)}'
|
|
478
|
+
</li>
|
|
479
|
+
`:""}
|
|
480
|
+
${!t.length&&!this.#f?h`<li class="empty">No options</li>`:""}
|
|
481
|
+
</ul>
|
|
482
|
+
`}}customElements.define("status-select",ci);let hi=0;const pi={top:"top: auto; bottom: anchor(top); left: anchor(center); right: auto; translate: -50% 0; margin-top: 0; margin-bottom: 6px;",bottom:"top: anchor(bottom); bottom: auto; left: anchor(center); right: auto; translate: -50% 0; margin-top: 6px; margin-bottom: 0;",left:"top: anchor(center); bottom: auto; left: auto; right: anchor(left); translate: 0 -50%; margin-right: 6px;",right:"top: anchor(center); bottom: auto; left: anchor(right); right: auto; translate: 0 -50%; margin-left: 6px;"},di=["top","bottom","left","right"];class ui extends _{static{this.properties={text:{attribute:!1},placement:{attribute:!1}}}#e;#t=null;static{this.styles=O`
|
|
483
|
+
:host {
|
|
484
|
+
display: inline-flex;
|
|
485
|
+
position: relative;
|
|
486
|
+
vertical-align: middle;
|
|
487
|
+
}
|
|
488
|
+
.icon {
|
|
489
|
+
display: inline-flex;
|
|
490
|
+
align-items: center;
|
|
491
|
+
justify-content: center;
|
|
492
|
+
width: 14px;
|
|
493
|
+
height: 14px;
|
|
494
|
+
border-radius: 50%;
|
|
495
|
+
border: 1px solid var(--border-strong);
|
|
496
|
+
background: transparent;
|
|
497
|
+
color: inherit;
|
|
498
|
+
opacity: 0.55;
|
|
499
|
+
font-size: 10px;
|
|
500
|
+
line-height: 1;
|
|
501
|
+
cursor: help;
|
|
502
|
+
padding: 0;
|
|
503
|
+
}
|
|
504
|
+
.icon:hover, .icon:focus-visible {
|
|
505
|
+
opacity: 1;
|
|
506
|
+
border-color: var(--accent);
|
|
507
|
+
color: var(--accent);
|
|
508
|
+
}
|
|
509
|
+
|
|
510
|
+
.bubble {
|
|
511
|
+
/* Primary position (top/bottom/left/right + translate + margin) and
|
|
512
|
+
position-try-fallbacks are both set inline per-instance from the placement property —
|
|
513
|
+
see PRIMARY_POSITION/#fallbackNames and the inline style in render() below. */
|
|
514
|
+
position: fixed;
|
|
515
|
+
inset: auto;
|
|
516
|
+
border: 1px solid var(--border);
|
|
517
|
+
border-radius: 6px;
|
|
518
|
+
background: var(--bg);
|
|
519
|
+
color: inherit;
|
|
520
|
+
box-shadow: 0 6px 20px var(--shadow);
|
|
521
|
+
padding: 6px 9px;
|
|
522
|
+
max-width: 240px;
|
|
523
|
+
width: max-content;
|
|
524
|
+
font-size: 12px;
|
|
525
|
+
line-height: 1.4;
|
|
526
|
+
font-weight: 400;
|
|
527
|
+
text-align: left;
|
|
528
|
+
}
|
|
529
|
+
.bubble[popover] { display: none; }
|
|
530
|
+
.bubble:popover-open { display: block; }
|
|
531
|
+
|
|
532
|
+
/* One @position-try block per side. Named per-side (not per-placement-order) so any
|
|
533
|
+
placement's fallback list can reference the same four blocks in a different order. */
|
|
534
|
+
@position-try --bubble-top {
|
|
535
|
+
top: auto;
|
|
536
|
+
bottom: anchor(top);
|
|
537
|
+
left: anchor(center);
|
|
538
|
+
right: auto;
|
|
539
|
+
translate: -50% 0;
|
|
540
|
+
margin: 0 0 6px;
|
|
541
|
+
}
|
|
542
|
+
@position-try --bubble-bottom {
|
|
543
|
+
top: anchor(bottom);
|
|
544
|
+
bottom: auto;
|
|
545
|
+
left: anchor(center);
|
|
546
|
+
right: auto;
|
|
547
|
+
translate: -50% 0;
|
|
548
|
+
margin: 6px 0 0;
|
|
549
|
+
}
|
|
550
|
+
@position-try --bubble-left {
|
|
551
|
+
top: anchor(center);
|
|
552
|
+
bottom: auto;
|
|
553
|
+
left: auto;
|
|
554
|
+
right: anchor(left);
|
|
555
|
+
translate: 0 -50%;
|
|
556
|
+
margin: 0 6px 0 0;
|
|
557
|
+
}
|
|
558
|
+
@position-try --bubble-right {
|
|
559
|
+
top: anchor(center);
|
|
560
|
+
bottom: auto;
|
|
561
|
+
left: anchor(right);
|
|
562
|
+
right: auto;
|
|
563
|
+
translate: 0 -50%;
|
|
564
|
+
margin: 0 0 0 6px;
|
|
565
|
+
}
|
|
566
|
+
`}constructor(){super(),this.text="",this.placement="top",this.#e=`--help-tooltip-${++hi}`}get#s(){const e=di.filter(t=>t!==this.placement);return[this.placement,...e].map(t=>`--bubble-${t}`).join(", ")}disconnectedCallback(){this.#t&&clearTimeout(this.#t),super.disconnectedCallback()}#r(){this.#t&&(clearTimeout(this.#t),this.#t=null);const e=this.renderRoot.querySelector(".bubble");e&&!e.matches(":popover-open")&&e.showPopover()}#i(){this.#t=setTimeout(()=>{this.renderRoot.querySelector(".bubble")?.hidePopover()},100)}render(){return h`
|
|
567
|
+
<button
|
|
568
|
+
type="button"
|
|
569
|
+
class="icon"
|
|
570
|
+
style=${`anchor-name: ${this.#e}`}
|
|
571
|
+
aria-describedby="bubble"
|
|
572
|
+
@mouseenter=${()=>this.#r()}
|
|
573
|
+
@mouseleave=${()=>this.#i()}
|
|
574
|
+
@focus=${()=>this.#r()}
|
|
575
|
+
@blur=${()=>this.#i()}
|
|
576
|
+
>?</button>
|
|
577
|
+
<div
|
|
578
|
+
id="bubble"
|
|
579
|
+
role="tooltip"
|
|
580
|
+
class="bubble"
|
|
581
|
+
popover="manual"
|
|
582
|
+
style=${`position-anchor: ${this.#e}; position-try-fallbacks: ${this.#s}; ${pi[this.placement]}`}
|
|
583
|
+
@mouseenter=${()=>this.#r()}
|
|
584
|
+
@mouseleave=${()=>this.#i()}
|
|
585
|
+
>
|
|
586
|
+
${this.text}
|
|
587
|
+
</div>
|
|
588
|
+
`}}customElements.define("help-tooltip",ui);const st="mem-bucket-detail-view-mode";function gi(r){return new Intl.DateTimeFormat("en-CA",{year:"numeric",month:"2-digit",day:"2-digit"}).format(new Date(r))}const fi=["stable","beta","unreviewed"],bi=["active","shipped","abandoned"],it=["plan","spec","sql","testing-todo","discovery","session-summary","other"],mi=["ticket","freeform"],$={description:"What this doc is / does, shown in search results and list views. For skills, this is also the only thing an agent sees before deciding whether to load the full body — so state both what it does and when to use it.",tags:"Free-form keywords used to filter and search. Not the only thing matched during full-text search, but the fastest way to narrow a list view.",status:`Lifecycle state — stable/beta/unreviewed for skills, active/shipped/abandoned for memory docs. Skills default to "unreviewed" if left unset, so low-trust content doesn't read as equivalent to a reviewed pattern.`,name:"The skill's identifier — becomes its containing folder name on disk. Lowercase letters, numbers, and hyphens only.",owner:"Who authored or maintains this skill — a person or team name, free text.",extends:"Name of another skill this one builds on or specializes, if any. Leave blank if it doesn't extend anything.",trigger_phrases:"Extra keyword phrases beyond the description that should surface this skill in search — phrasings a user might type that don't literally appear in the description text.",key:"The lookup handle for this memory doc — usually a ticket ID, sometimes a free-form name. One key can have several docs attached (a plan, a spec, session notes) all retrievable together.",key_type:'"ticket" if the key is a real ticket ID, "freeform" for a name like "Spot Chart Design".',doc_type:"What kind of content this is — shapes how it should be read (a plan reads differently than raw SQL or a session summary).",related_to:"Another key this doc relates to, if any — free text, not validated against existing keys."};function rt(r){return{description:r.description??"",tags:r.tags??[],status:r.status??"",name:r.name??"",owner:r.owner??"",extends:r.extends??"",trigger_phrases:r.trigger_phrases??[],key:r.key??"",key_type:r.key_type??"",doc_type:r.doc_type??"",related_to:r.related_to??""}}class xi extends _{constructor(){super(...arguments),this._viewMode=localStorage.getItem(st)??"markdown",this._editing=!1,this._draft=null,this._addingFrontmatter=!1,this._renaming=!1,this._renameValue=""}static{this.properties={selected:{attribute:!1},onChanged:{attribute:!1},facets:{attribute:!1},onTagClick:{attribute:!1},onRootClick:{attribute:!1},onDateClick:{attribute:!1},_doc:{state:!0},_viewMode:{state:!0},_editing:{state:!0},_draft:{state:!0},_addingFrontmatter:{state:!0},_renaming:{state:!0},_renameValue:{state:!0}}}static{this.styles=O`
|
|
327
589
|
:host { display: block; padding: 16px; }
|
|
328
590
|
h2 { margin: 0 0 4px; font-size: 16px; }
|
|
329
591
|
.title-row {
|
|
@@ -508,6 +770,9 @@ Please report this to https://github.com/markedjs/marked.`,r){let s="<p>An error
|
|
|
508
770
|
font-size: 11px;
|
|
509
771
|
font-weight: 600;
|
|
510
772
|
opacity: 0.7;
|
|
773
|
+
display: inline-flex;
|
|
774
|
+
align-items: center;
|
|
775
|
+
gap: 4px;
|
|
511
776
|
}
|
|
512
777
|
.field input[type='text'],
|
|
513
778
|
.field select,
|
|
@@ -520,6 +785,10 @@ Please report this to https://github.com/markedjs/marked.`,r){let s="<p>An error
|
|
|
520
785
|
color: inherit;
|
|
521
786
|
font-family: inherit;
|
|
522
787
|
}
|
|
788
|
+
.field input[type='text'],
|
|
789
|
+
.field select {
|
|
790
|
+
max-width: 320px;
|
|
791
|
+
}
|
|
523
792
|
.field textarea {
|
|
524
793
|
min-height: 60px;
|
|
525
794
|
resize: vertical;
|
|
@@ -565,35 +834,35 @@ Please report this to https://github.com/markedjs/marked.`,r){let s="<p>An error
|
|
|
565
834
|
color: inherit;
|
|
566
835
|
}
|
|
567
836
|
.hint { font-size: 11px; opacity: 0.6; }
|
|
568
|
-
`}updated(e){e.has("selected")&&this.selected&&(this._editing=!1,this._addingFrontmatter=!1,this._renaming=!1,this.#e(),this.scrollTop=0)}async#e(){const{table:e,id:t}=this.selected,s=await fetch(`/api/entries/${e}/${encodeURIComponent(t)}`);this._doc=s.ok?await s.json():null,await this.updateComplete,this.shadowRoot?.querySelector(".markdown-body")?.scrollTo(0,0),this.shadowRoot?.querySelector("pre")?.scrollTo(0,0)}#t(){this._doc?.source_path&&navigator.clipboard?.writeText(this._doc.source_path)}#s(e){this._viewMode=e,localStorage.setItem(
|
|
837
|
+
`}updated(e){e.has("selected")&&this.selected&&(this._editing=!1,this._addingFrontmatter=!1,this._renaming=!1,this.#e(),this.scrollTop=0)}async#e(){const{table:e,id:t}=this.selected,s=await fetch(`/api/entries/${e}/${encodeURIComponent(t)}`);this._doc=s.ok?await s.json():null,await this.updateComplete,this.shadowRoot?.querySelector(".markdown-body")?.scrollTo(0,0),this.shadowRoot?.querySelector("pre")?.scrollTo(0,0)}#t(){this._doc?.source_path&&navigator.clipboard?.writeText(this._doc.source_path)}#s(e){this._viewMode=e,localStorage.setItem(st,e)}async#r(){const{table:e,id:t}=this.selected,s=!this._doc?.deprecated;await fetch(`/api/entries/${e}/${encodeURIComponent(t)}/deprecated`,{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify({deprecated:s})}),await this.#e(),this.onChanged?.()}async#i(){const{table:e,id:t}=this.selected,s=!this._doc?.paused;await fetch(`/api/entries/${e}/${encodeURIComponent(t)}/paused`,{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify({paused:s})}),await this.#e(),this.onChanged?.()}async#d(){if(!window.confirm("Delete this doc? This can't be undone."))return;const{table:e,id:t}=this.selected;await fetch(`/api/entries/${e}/${encodeURIComponent(t)}`,{method:"DELETE"}),this._doc=null,this.onChanged?.()}#o(){this._doc&&(this._draft=rt(this._doc),this._editing=!0,this._addingFrontmatter=!1)}#a(){this._doc&&(this._draft=rt(this._doc),this._addingFrontmatter=!0,this._editing=!1)}#c(e){this._draft&&(this._draft={...this._draft,doc_type:e},this._addingFrontmatter=!1,this._editing=!0)}#h(){this._editing=!1,this._addingFrontmatter=!1,this._draft=null}#n(e){this._draft&&(this._draft={...this._draft,...e})}#p(e){if(!this._draft)return;const t=this._draft.tags.includes(e)?this._draft.tags.filter(s=>s!==e):[...this._draft.tags,e];this.#n({tags:t})}#u(e){if(!this._draft)return;const t=this._draft.trigger_phrases.includes(e)?this._draft.trigger_phrases.filter(s=>s!==e):[...this._draft.trigger_phrases,e];this.#n({trigger_phrases:t})}async#f(){if(!this._draft||!this.selected)return;const{table:e,id:t}=this.selected,s=e==="skills",i={description:this._draft.description,tags:this._draft.tags,status:this._draft.status};s?(i.owner=this._draft.owner||null,i.extends=this._draft.extends||null,i.trigger_phrases=this._draft.trigger_phrases):(i.key=this._draft.key,i.key_type=this._draft.key_type,i.doc_type=this._draft.doc_type,i.related_to=this._draft.related_to||null);const n=await fetch(`/api/entries/${e}/${encodeURIComponent(t)}`,{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify({frontmatter:i})});if(!n.ok){const o=await n.json().catch(()=>({}));window.alert(`Save failed: ${o.error??n.statusText}`);return}this._editing=!1,this._draft=null,await this.#e(),this.onChanged?.()}async#b(){if(!this.selected||!this._doc||this.selected.table!=="memory_docs")return;const{table:e,id:t}=this.selected;if(!window.confirm(`Delete frontmatter for "${this._doc.key}"?
|
|
569
838
|
|
|
570
|
-
This removes the doc's key, tags, and status — it drops out of key-based lookup and full-text search, and becomes a plain unmanaged file, until frontmatter is added again.`))return;const i=await fetch(`/api/entries/${e}/${encodeURIComponent(t)}/frontmatter`,{method:"DELETE"});if(!i.ok){const n=await i.json().catch(()=>({}));window.alert(`Delete failed: ${n.error??i.statusText}`);return}this._doc=null,this.selected=null,this.onChanged?.()}#m(){this._doc&&(this._renameValue=this._doc.name??"",this._renaming=!0)}async#k(){if(!this._doc||!this._renameValue.trim())return;const e=this._renameValue.trim();if(e===this._doc.name){this._renaming=!1;return}const t=await fetch(`/api/entries/skills/${encodeURIComponent(this._doc.name)}/rename`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({new_name:e})});if(!t.ok){const s=await t.json().catch(()=>({}));window.alert(`Rename failed: ${s.error??t.statusText}`);return}this._renaming=!1,this.selected={table:"skills",id:e},await this.#e(),this.onChanged?.()}#
|
|
839
|
+
This removes the doc's key, tags, and status — it drops out of key-based lookup and full-text search, and becomes a plain unmanaged file, until frontmatter is added again.`))return;const i=await fetch(`/api/entries/${e}/${encodeURIComponent(t)}/frontmatter`,{method:"DELETE"});if(!i.ok){const n=await i.json().catch(()=>({}));window.alert(`Delete failed: ${n.error??i.statusText}`);return}this._doc=null,this.selected=null,this.onChanged?.()}#m(){this._doc&&(this._renameValue=this._doc.name??"",this._renaming=!0)}async#k(){if(!this._doc||!this._renameValue.trim())return;const e=this._renameValue.trim();if(e===this._doc.name){this._renaming=!1;return}const t=await fetch(`/api/entries/skills/${encodeURIComponent(this._doc.name)}/rename`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({new_name:e})});if(!t.ok){const s=await t.json().catch(()=>({}));window.alert(`Rename failed: ${s.error??t.statusText}`);return}this._renaming=!1,this.selected={table:"skills",id:e},await this.#e(),this.onChanged?.()}#x(){return h`
|
|
571
840
|
<div class="edit-form">
|
|
572
841
|
<div class="hint">What kind of doc is this? This shapes which fields apply next.</div>
|
|
573
842
|
<div class="field">
|
|
574
|
-
<label>doc_type
|
|
843
|
+
<label>doc_type <help-tooltip .text=${$.doc_type}></help-tooltip></label>
|
|
575
844
|
<select
|
|
576
|
-
@change=${e=>this.#
|
|
845
|
+
@change=${e=>this.#c(e.target.value)}
|
|
577
846
|
>
|
|
578
847
|
<option value="" selected disabled>Choose…</option>
|
|
579
|
-
${
|
|
848
|
+
${it.map(e=>h`<option value=${e}>${e}</option>`)}
|
|
580
849
|
</select>
|
|
581
850
|
</div>
|
|
582
851
|
<div class="form-actions">
|
|
583
|
-
<button class="cancel" @click=${()=>this.#
|
|
852
|
+
<button class="cancel" @click=${()=>this.#h()}>Cancel</button>
|
|
584
853
|
</div>
|
|
585
854
|
</div>
|
|
586
|
-
`}#v(e){const t=this._draft,s=this.facets;return
|
|
855
|
+
`}#v(e){const t=this._draft,s=this.facets;return h`
|
|
587
856
|
<div class="edit-form">
|
|
588
|
-
${e?
|
|
857
|
+
${e?h`
|
|
589
858
|
<div class="field">
|
|
590
|
-
<label>name
|
|
859
|
+
<label>name <help-tooltip .text=${$.name}></help-tooltip></label>
|
|
591
860
|
<div class="hint">Renaming moves the skill's folder on disk — kept as a separate action.</div>
|
|
592
861
|
</div>
|
|
593
|
-
`:
|
|
862
|
+
`:h`
|
|
594
863
|
<div class="field-row">
|
|
595
864
|
<div class="field">
|
|
596
|
-
<label>key
|
|
865
|
+
<label>key <help-tooltip .text=${$.key}></help-tooltip></label>
|
|
597
866
|
<input
|
|
598
867
|
type="text"
|
|
599
868
|
.value=${t.key}
|
|
@@ -601,34 +870,34 @@ This removes the doc's key, tags, and status — it drops out of key-based looku
|
|
|
601
870
|
/>
|
|
602
871
|
</div>
|
|
603
872
|
<div class="field">
|
|
604
|
-
<label>key_type
|
|
873
|
+
<label>key_type <help-tooltip .text=${$.key_type}></help-tooltip></label>
|
|
605
874
|
<select
|
|
606
875
|
.value=${t.key_type}
|
|
607
876
|
@change=${i=>this.#n({key_type:i.target.value})}
|
|
608
877
|
>
|
|
609
|
-
${
|
|
878
|
+
${mi.map(i=>h`<option value=${i} ?selected=${i===t.key_type}>${i}</option>`)}
|
|
610
879
|
</select>
|
|
611
880
|
</div>
|
|
612
881
|
</div>
|
|
613
882
|
<div class="field">
|
|
614
|
-
<label>doc_type
|
|
883
|
+
<label>doc_type <help-tooltip .text=${$.doc_type}></help-tooltip></label>
|
|
615
884
|
<select
|
|
616
885
|
.value=${t.doc_type}
|
|
617
886
|
@change=${i=>this.#n({doc_type:i.target.value})}
|
|
618
887
|
>
|
|
619
|
-
${
|
|
888
|
+
${it.map(i=>h`<option value=${i} ?selected=${i===t.doc_type}>${i}</option>`)}
|
|
620
889
|
</select>
|
|
621
890
|
</div>
|
|
622
891
|
`}
|
|
623
892
|
<div class="field">
|
|
624
|
-
<label>description
|
|
893
|
+
<label>description <help-tooltip .text=${$.description}></help-tooltip></label>
|
|
625
894
|
<textarea
|
|
626
895
|
.value=${t.description}
|
|
627
896
|
@input=${i=>this.#n({description:i.target.value})}
|
|
628
897
|
></textarea>
|
|
629
898
|
</div>
|
|
630
899
|
<div class="field">
|
|
631
|
-
<label>tags
|
|
900
|
+
<label>tags <help-tooltip .text=${$.tags}></help-tooltip></label>
|
|
632
901
|
<tag-multiselect
|
|
633
902
|
.tags=${s?.tags??[]}
|
|
634
903
|
.active=${t.tags}
|
|
@@ -637,18 +906,17 @@ This removes the doc's key, tags, and status — it drops out of key-based looku
|
|
|
637
906
|
></tag-multiselect>
|
|
638
907
|
</div>
|
|
639
908
|
<div class="field">
|
|
640
|
-
<label>status
|
|
641
|
-
<select
|
|
909
|
+
<label>status <help-tooltip .text=${$.status}></help-tooltip></label>
|
|
910
|
+
<status-select
|
|
911
|
+
.options=${[...new Set([...e?fi:bi,...s?.statuses??[]])]}
|
|
642
912
|
.value=${t.status}
|
|
643
|
-
|
|
644
|
-
>
|
|
645
|
-
${(e?li:ci).map(i=>p`<option value=${i} ?selected=${i===t.status}>${i}</option>`)}
|
|
646
|
-
</select>
|
|
913
|
+
.onChange=${i=>this.#n({status:i})}
|
|
914
|
+
></status-select>
|
|
647
915
|
</div>
|
|
648
|
-
${e?
|
|
916
|
+
${e?h`
|
|
649
917
|
<div class="field-row">
|
|
650
918
|
<div class="field">
|
|
651
|
-
<label>owner
|
|
919
|
+
<label>owner <help-tooltip .text=${$.owner}></help-tooltip></label>
|
|
652
920
|
<input
|
|
653
921
|
type="text"
|
|
654
922
|
.value=${t.owner}
|
|
@@ -656,7 +924,7 @@ This removes the doc's key, tags, and status — it drops out of key-based looku
|
|
|
656
924
|
/>
|
|
657
925
|
</div>
|
|
658
926
|
<div class="field">
|
|
659
|
-
<label>extends
|
|
927
|
+
<label>extends <help-tooltip .text=${$.extends}></help-tooltip></label>
|
|
660
928
|
<input
|
|
661
929
|
type="text"
|
|
662
930
|
.value=${t.extends}
|
|
@@ -665,17 +933,17 @@ This removes the doc's key, tags, and status — it drops out of key-based looku
|
|
|
665
933
|
</div>
|
|
666
934
|
</div>
|
|
667
935
|
<div class="field">
|
|
668
|
-
<label>trigger_phrases
|
|
936
|
+
<label>trigger_phrases <help-tooltip .text=${$.trigger_phrases}></help-tooltip></label>
|
|
669
937
|
<tag-multiselect
|
|
670
938
|
.tags=${[]}
|
|
671
939
|
.active=${t.trigger_phrases}
|
|
672
940
|
.allowCreate=${!0}
|
|
673
|
-
.onToggle=${i=>this.#
|
|
941
|
+
.onToggle=${i=>this.#u(i)}
|
|
674
942
|
></tag-multiselect>
|
|
675
943
|
</div>
|
|
676
|
-
`:
|
|
944
|
+
`:h`
|
|
677
945
|
<div class="field">
|
|
678
|
-
<label>related_to
|
|
946
|
+
<label>related_to <help-tooltip .text=${$.related_to}></help-tooltip></label>
|
|
679
947
|
<input
|
|
680
948
|
type="text"
|
|
681
949
|
.value=${t.related_to}
|
|
@@ -684,44 +952,44 @@ This removes the doc's key, tags, and status — it drops out of key-based looku
|
|
|
684
952
|
</div>
|
|
685
953
|
`}
|
|
686
954
|
<div class="form-actions">
|
|
687
|
-
<button class="save" @click=${()=>this.#
|
|
688
|
-
<button class="cancel" @click=${()=>this.#
|
|
955
|
+
<button class="save" @click=${()=>this.#f()}>Save</button>
|
|
956
|
+
<button class="cancel" @click=${()=>this.#h()}>Cancel</button>
|
|
689
957
|
</div>
|
|
690
958
|
</div>
|
|
691
|
-
`}#
|
|
959
|
+
`}#g(e){return h`
|
|
692
960
|
<div class="title-row">
|
|
693
961
|
<h2>${e.name??e.key??e.id}</h2>
|
|
694
962
|
<button class="pill root-pill" title="Filter by root '${e.root}'" @click=${()=>this.onRootClick?.(e.root)}>
|
|
695
963
|
${e.root}
|
|
696
964
|
</button>
|
|
697
965
|
</div>
|
|
698
|
-
`}
|
|
966
|
+
`}#y(e,t){const s=e.created_at?gi(e.created_at):null;return h`
|
|
699
967
|
<dl class="info-grid">
|
|
700
968
|
<dt>Description</dt>
|
|
701
969
|
<dd class="description">${e.description||"—"}</dd>
|
|
702
970
|
|
|
703
971
|
<dt>Tags</dt>
|
|
704
972
|
<dd>
|
|
705
|
-
${e.tags?.length?e.tags.map(i=>
|
|
973
|
+
${e.tags?.length?e.tags.map(i=>h`<button class="pill tag-pill" @click=${()=>this.onTagClick?.(i)}>${i}</button>`):h`<span class="hint">no tags</span>`}
|
|
706
974
|
</dd>
|
|
707
975
|
|
|
708
976
|
<dt>Status</dt>
|
|
709
977
|
<dd>${e.status}</dd>
|
|
710
978
|
|
|
711
|
-
${e.deprecated||e.paused?
|
|
979
|
+
${e.deprecated||e.paused?h`
|
|
712
980
|
<dt>Flags</dt>
|
|
713
981
|
<dd>
|
|
714
|
-
${e.deprecated?
|
|
715
|
-
${e.paused?
|
|
982
|
+
${e.deprecated?h`<span class="pill warn-pill">deprecated</span>`:m}
|
|
983
|
+
${e.paused?h`<span class="pill muted-pill">paused</span>`:m}
|
|
716
984
|
</dd>
|
|
717
|
-
`:
|
|
985
|
+
`:m}
|
|
718
986
|
|
|
719
|
-
${t?
|
|
720
|
-
${e.owner?
|
|
721
|
-
<dd>${e.owner}</dd>`:
|
|
722
|
-
${e.extends?
|
|
723
|
-
<dd>${e.extends}</dd>`:
|
|
724
|
-
`:
|
|
987
|
+
${t?h`
|
|
988
|
+
${e.owner?h`<dt>Owner</dt>
|
|
989
|
+
<dd>${e.owner}</dd>`:m}
|
|
990
|
+
${e.extends?h`<dt>Extends</dt>
|
|
991
|
+
<dd>${e.extends}</dd>`:m}
|
|
992
|
+
`:h`
|
|
725
993
|
<dt>Key</dt>
|
|
726
994
|
<dd>${e.key}</dd>
|
|
727
995
|
|
|
@@ -731,32 +999,32 @@ This removes the doc's key, tags, and status — it drops out of key-based looku
|
|
|
731
999
|
<dt>Doc type</dt>
|
|
732
1000
|
<dd>${e.doc_type}</dd>
|
|
733
1001
|
|
|
734
|
-
${e.related_to?
|
|
735
|
-
<dd>${e.related_to}</dd>`:
|
|
1002
|
+
${e.related_to?h`<dt>Related to</dt>
|
|
1003
|
+
<dd>${e.related_to}</dd>`:m}
|
|
736
1004
|
`}
|
|
737
1005
|
|
|
738
1006
|
<dt>Created</dt>
|
|
739
1007
|
<dd>
|
|
740
|
-
${s?
|
|
1008
|
+
${s?h`<span class="date-value" title="Filter to this day" @click=${()=>this.onDateClick?.(s)}
|
|
741
1009
|
>${s}</span
|
|
742
|
-
>`:
|
|
1010
|
+
>`:h`<span class="hint">unknown</span>`}
|
|
743
1011
|
</dd>
|
|
744
1012
|
</dl>
|
|
745
|
-
`}render(){if(!this.selected)return
|
|
746
|
-
${this.#
|
|
747
|
-
${i?
|
|
748
|
-
${s?
|
|
1013
|
+
`}render(){if(!this.selected)return h`<div class="empty">Select an entry to view its details.</div>`;if(!this._doc)return m;const e=this._doc,t=this.selected.table==="skills",s=t&&e.root==="builtin",i=!t&&e.has_frontmatter===!1;return this._addingFrontmatter?h`${this.#g(e)}${this.#x()}`:this._editing&&this._draft?h`${this.#g(e)}${this.#v(t)}`:h`
|
|
1014
|
+
${this.#g(e)}
|
|
1015
|
+
${i?h`<div class="bare-notice">No frontmatter — this is a plain, unmanaged file.</div>`:this.#y(e,t)}
|
|
1016
|
+
${s?m:h`
|
|
749
1017
|
<div class="actions">
|
|
750
|
-
${i?
|
|
1018
|
+
${i?h`<button class="primary" @click=${()=>this.#a()}>Add frontmatter</button>`:h`
|
|
751
1019
|
<button @click=${()=>this.#o()}>Edit</button>
|
|
752
|
-
${t?
|
|
753
|
-
<button @click=${()=>this.#
|
|
754
|
-
<button @click=${()=>this.#
|
|
755
|
-
${t?
|
|
1020
|
+
${t?h`<button @click=${()=>this.#m()}>Rename</button>`:m}
|
|
1021
|
+
<button @click=${()=>this.#r()}>${e.deprecated?"Un-deprecate":"Mark deprecated"}</button>
|
|
1022
|
+
<button @click=${()=>this.#i()}>${e.paused?"Resume":"Pause"}</button>
|
|
1023
|
+
${t?m:h`<button class="danger" @click=${()=>this.#b()}>Delete frontmatter</button>`}
|
|
756
1024
|
`}
|
|
757
|
-
<button class="danger" @click=${()=>this.#
|
|
1025
|
+
<button class="danger" @click=${()=>this.#d()}>Delete</button>
|
|
758
1026
|
</div>
|
|
759
|
-
${this._renaming?
|
|
1027
|
+
${this._renaming?h`
|
|
760
1028
|
<div class="rename-row">
|
|
761
1029
|
<input
|
|
762
1030
|
type="text"
|
|
@@ -767,7 +1035,7 @@ This removes the doc's key, tags, and status — it drops out of key-based looku
|
|
|
767
1035
|
<button @click=${()=>this.#k()}>Save</button>
|
|
768
1036
|
<button @click=${()=>this._renaming=!1}>Cancel</button>
|
|
769
1037
|
</div>
|
|
770
|
-
`:
|
|
1038
|
+
`:m}
|
|
771
1039
|
`}
|
|
772
1040
|
<div class="view-toggle">
|
|
773
1041
|
<button
|
|
@@ -783,9 +1051,9 @@ This removes the doc's key, tags, and status — it drops out of key-based looku
|
|
|
783
1051
|
Raw
|
|
784
1052
|
</button>
|
|
785
1053
|
</div>
|
|
786
|
-
${this._viewMode==="markdown"?
|
|
1054
|
+
${this._viewMode==="markdown"?h`<div class="markdown-body">${ai(x.parse(e.body??"",{async:!1}))}</div>`:h`<pre>${e.raw_file??e.body}</pre>`}
|
|
787
1055
|
<div class="source-path" title="click to copy" @click=${()=>this.#t()}>${e.source_path}</div>
|
|
788
|
-
`}}customElements.define("detail-panel",
|
|
1056
|
+
`}}customElements.define("detail-panel",xi);class ki extends _{static{this.properties={defaultKind:{attribute:!1},lockKind:{attribute:!1},onAdded:{attribute:!1},onCancel:{attribute:!1}}}#e=new u("skill");#t=new u("");#s=new u([]);#r=new u(null);#i=new u("");#d=new u("");#o=new u("");#a=new u(!1);#c=new u(!1);#h=new u(!1);#n=new u("");static{this.styles=O`
|
|
789
1057
|
:host { display: block; }
|
|
790
1058
|
.backdrop {
|
|
791
1059
|
position: fixed; inset: 0; background: var(--overlay);
|
|
@@ -868,11 +1136,11 @@ This removes the doc's key, tags, and status — it drops out of key-based looku
|
|
|
868
1136
|
border-radius: 6px; cursor: pointer; font-size: 13px;
|
|
869
1137
|
}
|
|
870
1138
|
.error { color: var(--danger); font-size: 12px; }
|
|
871
|
-
`}constructor(){super(),new
|
|
1139
|
+
`}constructor(){super(),new ae(this),this.defaultKind="skill",this.lockKind=!1}connectedCallback(){super.connectedCallback(),this.#e.set(this.defaultKind),this.#p()}async#p(e){const t=new URLSearchParams;e&&t.set("path",e),this.#c.value&&t.set("hidden","1");const s=await fetch(`/api/fs/list?${t.toString()}`);if(!s.ok){this.#o.set((await s.json()).error??"failed to list directory");return}const i=await s.json();this.#t.set(i.path),this.#r.set(i.parent),this.#s.set(i.entries),this.#o.set(""),this.renderRoot.querySelector(".browser")?.scrollTo(0,0)}#u(){this.#c.set(!this.#c.value),this.#p(this.#t.value)}#f(){this.#n.set(""),this.#h.set(!0)}#b(){this.#h.set(!1),this.#n.set("")}async#m(){const e=this.#n.value.trim();if(e){this.#o.set("");try{const t=await fetch("/api/fs/mkdir",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({path:this.#t.value,name:e})}),s=await t.json();if(!t.ok){this.#o.set(s.error??"failed to create folder");return}this.#h.set(!1),this.#n.set(""),await this.#p(this.#t.value)}catch(t){this.#o.set(t.message)}}}#k(){this.#i.set(this.#t.value),this.#d.value||this.#d.set(this.#t.value.split("/").filter(Boolean).pop()??"")}async#x(){const e=this.#i.value||this.#t.value;if(e){this.#a.set(!0),this.#o.set("");try{const t=await fetch("/api/roots",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({kind:this.#e.value,name:this.#d.value||void 0,path:e})}),s=await t.json();if(!t.ok){this.#o.set(s.error??"failed to add root");return}this.onAdded()}finally{this.#a.set(!1)}}}render(){const e=this.#s.value;return h`
|
|
872
1140
|
<div class="backdrop" @click=${t=>t.target===t.currentTarget&&this.onCancel()}>
|
|
873
1141
|
<div class="modal">
|
|
874
1142
|
<div class="header"><h2>Add a root</h2></div>
|
|
875
|
-
${this.lockKind?
|
|
1143
|
+
${this.lockKind?h``:h`
|
|
876
1144
|
<div class="kind-toggle">
|
|
877
1145
|
<button
|
|
878
1146
|
class=${this.#e.value==="skill"?"active":""}
|
|
@@ -890,30 +1158,30 @@ This removes the doc's key, tags, and status — it drops out of key-based looku
|
|
|
890
1158
|
`}
|
|
891
1159
|
<div class="breadcrumb-row">
|
|
892
1160
|
<div class="breadcrumb">${this.#t.value}</div>
|
|
893
|
-
<button class="new-folder-btn" @click=${()=>this.#
|
|
1161
|
+
<button class="new-folder-btn" @click=${()=>this.#f()}>+ New folder</button>
|
|
894
1162
|
<label class="hidden-toggle">
|
|
895
|
-
<input type="checkbox" .checked=${this.#
|
|
1163
|
+
<input type="checkbox" .checked=${this.#c.value} @change=${()=>this.#u()} />
|
|
896
1164
|
Show hidden
|
|
897
1165
|
</label>
|
|
898
1166
|
</div>
|
|
899
|
-
${this.#
|
|
1167
|
+
${this.#h.value?h`
|
|
900
1168
|
<div class="new-folder-row">
|
|
901
1169
|
<input
|
|
902
1170
|
type="text"
|
|
903
1171
|
placeholder="Folder name"
|
|
904
1172
|
.value=${this.#n.value}
|
|
905
1173
|
@input=${t=>this.#n.set(t.target.value)}
|
|
906
|
-
@keydown=${t=>{t.key==="Enter"&&this.#m(),t.key==="Escape"&&this.#
|
|
1174
|
+
@keydown=${t=>{t.key==="Enter"&&this.#m(),t.key==="Escape"&&this.#b()}}
|
|
907
1175
|
/>
|
|
908
1176
|
<button @click=${()=>this.#m()}>Create</button>
|
|
909
|
-
<button @click=${()=>this.#
|
|
1177
|
+
<button @click=${()=>this.#b()}>Cancel</button>
|
|
910
1178
|
</div>
|
|
911
1179
|
`:""}
|
|
912
1180
|
<div class="browser">
|
|
913
|
-
${this.#
|
|
1181
|
+
${this.#r.value?h`<div class="entry up" @click=${()=>this.#p(this.#r.value)}>
|
|
914
1182
|
<span class="icon">📁</span> ..
|
|
915
1183
|
</div>`:""}
|
|
916
|
-
${e.length===0&&!this.#
|
|
1184
|
+
${e.length===0&&!this.#r.value?h`<div class="empty">No subdirectories here.</div>`:e.map(t=>h`<div class="entry" @click=${()=>this.#p(t.path)}>
|
|
917
1185
|
<span class="icon">📁</span> ${t.name}
|
|
918
1186
|
</div>`)}
|
|
919
1187
|
</div>
|
|
@@ -921,31 +1189,31 @@ This removes the doc's key, tags, and status — it drops out of key-based looku
|
|
|
921
1189
|
<button class="secondary" @click=${()=>this.#k()}>
|
|
922
1190
|
Select this folder
|
|
923
1191
|
</button>
|
|
924
|
-
${this.#
|
|
1192
|
+
${this.#i.value?h`<div class="selected-row">Selected: <span class="path">${this.#i.value}</span></div>`:""}
|
|
925
1193
|
<div>
|
|
926
1194
|
<label>Root name</label>
|
|
927
1195
|
<input
|
|
928
1196
|
type="text"
|
|
929
|
-
.value=${this.#
|
|
1197
|
+
.value=${this.#d.value}
|
|
930
1198
|
placeholder="e.g. personal, company"
|
|
931
|
-
@input=${t=>this.#
|
|
1199
|
+
@input=${t=>this.#d.set(t.target.value)}
|
|
932
1200
|
/>
|
|
933
1201
|
</div>
|
|
934
|
-
${this.#o.value?
|
|
1202
|
+
${this.#o.value?h`<div class="error">${this.#o.value}</div>`:""}
|
|
935
1203
|
<div class="actions">
|
|
936
1204
|
<button class="secondary" @click=${()=>this.onCancel()}>Cancel</button>
|
|
937
1205
|
<button
|
|
938
1206
|
class="primary"
|
|
939
|
-
?disabled=${!this.#
|
|
940
|
-
@click=${()=>this.#
|
|
1207
|
+
?disabled=${!this.#i.value||this.#a.value}
|
|
1208
|
+
@click=${()=>this.#x()}
|
|
941
1209
|
>
|
|
942
|
-
${this.#
|
|
1210
|
+
${this.#a.value?"Adding…":"Add root"}
|
|
943
1211
|
</button>
|
|
944
1212
|
</div>
|
|
945
1213
|
</div>
|
|
946
1214
|
</div>
|
|
947
1215
|
</div>
|
|
948
|
-
`}}customElements.define("add-root-modal",
|
|
1216
|
+
`}}customElements.define("add-root-modal",ki);const vi=[{value:"all",label:"All"},{value:"skill",label:"Skills"},{value:"memory",label:"Memories"}],nt=[{value:"all",label:"Show all"},{value:"hide",label:"Hide"},{value:"only",label:"Only"}],$i={tags:[],statuses:[],owners:[],doc_types:[],key_types:[],roots:[]},yi={skill:[],memory:[]},St="mem-bucket-split-pct",At=20,Tt=80;function wi(){const r=Number(localStorage.getItem(St));return Number.isFinite(r)&&r>=At&&r<=Tt?r:40}const Ct="mem-bucket-theme",de=["system","light","dark"],_i={system:"◐",light:"☀",dark:"☾"},Si={system:"Auto",light:"Light",dark:"Dark"};function Ai(){const r=localStorage.getItem(Ct);return r==="light"||r==="dark"?r:"system"}function ot(r){r==="system"?document.documentElement.removeAttribute("data-theme"):document.documentElement.setAttribute("data-theme",r)}function Ti(){const r=location.hash.slice(1);if(!r)return{};const e=new URLSearchParams(r),t={},s=e.get("q");s&&(t.query=s);const i=e.get("type");(i==="skill"||i==="memory"||i==="all")&&(t.typeFilter=i);const n=e.getAll("tag");n.length&&(t.activeTags=n);const o=e.getAll("root");o.length&&(t.activeRoots=o);const a=e.get("sort");a&&(t.sort=a);const l=e.get("deprecated");l==="0"?t.deprecatedFilter="hide":l==="1"&&(t.deprecatedFilter="only");const c=e.get("paused");c==="0"?t.pausedFilter="hide":c==="1"&&(t.pausedFilter="only");const d=e.get("date_from");d&&(t.dateFrom=d);const p=e.get("date_to");return p&&(t.dateTo=p),t}class Ci extends _{static{this.styles=O`
|
|
949
1217
|
:host { display: flex; flex-direction: column; height: 100vh; }
|
|
950
1218
|
.theme-toggle {
|
|
951
1219
|
position: fixed;
|
|
@@ -1150,26 +1418,26 @@ This removes the doc's key, tags, and status — it drops out of key-based looku
|
|
|
1150
1418
|
cursor: pointer;
|
|
1151
1419
|
}
|
|
1152
1420
|
.bulk-bar button.danger { border-color: var(--danger); color: var(--danger); }
|
|
1153
|
-
`}#e=
|
|
1421
|
+
`}#e=Ti();#t=new u(this.#e.query??"");#s=new u(this.#e.typeFilter??"all");#r=new u(this.#e.activeTags??[]);#i=new u(this.#e.activeRoots??[]);#d=new u([]);#o=new u($i);#a=new u(null);#c=new u(yi);#h=new u(!1);#n=new u("");#p=new u(!1);#u=new u(wi());#f=new u(!1);#b=new u(this.#e.sort??"mtime_desc");#m=new u(this.#e.deprecatedFilter??"all");#k=new u(this.#e.pausedFilter??"all");#x=new u(this.#e.dateFrom??"");#v=new u(this.#e.dateTo??"");#g=new u(new Set);#y=new u(Ai());#_=new u(!1);#T=e=>this.#M(e);#C=()=>this.#N();constructor(){super(),new ae(this),ot(this.#y.value)}#L(e){this.#y.set(e),localStorage.setItem(Ct,e),ot(e)}#D(){const e=de[(de.indexOf(this.#y.value)+1)%de.length];this.#L(e)}async#I(){if(!this.#_.value){this.#_.set(!0);try{await fetch("/api/rebuild-cache",{method:"POST"}),await Promise.all([this.#w(),this.#$(),this.#l()])}finally{this.#_.set(!1)}}}#O(e){e.preventDefault(),this.#f.set(!0),document.addEventListener("pointermove",this.#T),document.addEventListener("pointerup",this.#C)}#M(e){const t=this.renderRoot.querySelector(".body-region");if(!t)return;const s=t.getBoundingClientRect(),i=(e.clientX-s.left)/s.width*100;this.#u.set(Math.min(Tt,Math.max(At,i)))}#N(){this.#f.set(!1),document.removeEventListener("pointermove",this.#T),document.removeEventListener("pointerup",this.#C),localStorage.setItem(St,String(this.#u.value))}#q=new is(()=>{const e=new URLSearchParams;this.#s.value!=="all"&&e.set("type",this.#s.value),this.#t.value.trim()&&e.set("q",this.#t.value.trim());for(const t of this.#r.value)e.append("tag",t);for(const t of this.#i.value)e.append("root",t);return this.#b.value!=="mtime_desc"&&e.set("sort",this.#b.value),this.#m.value==="hide"?e.set("deprecated","0"):this.#m.value==="only"&&e.set("deprecated","1"),this.#k.value==="hide"?e.set("paused","0"):this.#k.value==="only"&&e.set("paused","1"),this.#x.value&&e.set("date_from",this.#x.value),this.#v.value&&e.set("date_to",this.#v.value),e.toString()});#S=()=>this.#U();connectedCallback(){super.connectedCallback(),this.#l(),this.#$(),this.#w(),window.addEventListener("focus",this.#S),document.addEventListener("visibilitychange",this.#S)}disconnectedCallback(){super.disconnectedCallback(),window.removeEventListener("focus",this.#S),document.removeEventListener("visibilitychange",this.#S)}#U(){document.visibilityState==="visible"&&(this.#l(),this.#$(),this.#w())}async#l(){const e=this.#q.value;history.replaceState(null,"",e?`#${e}`:location.pathname+location.search);const t=await fetch(`/api/entries?${e}`);this.#d.set(await t.json()),this.renderRoot.querySelector("result-list")?.scrollTo(0,0)}async#$(){const e=this.#s.value==="all"?"":`?type=${this.#s.value}`,t=await fetch(`/api/facets${e}`);this.#o.set(await t.json())}async#w(){const e=await fetch("/api/roots");this.#c.set(await e.json()),this.#p.set(!0)}#F(e){const t=this.#i.value;this.#i.set(t.includes(e)?t.filter(s=>s!==e):[...t,e]),this.#l()}async#H(e,t){if(t.stopPropagation(),window.prompt(`Type "${e.name}" to remove this ${e.kind} root (files on disk are untouched):`)===e.name){this.#n.set(e.name);try{await fetch(`/api/roots/${e.kind}/${encodeURIComponent(e.name)}`,{method:"DELETE"}),this.#i.set(this.#i.value.filter(i=>i!==e.name)),await Promise.all([this.#w(),this.#$(),this.#l()])}finally{this.#n.set("")}}}#R(){this.#h.set(!1),this.#w(),this.#$(),this.#l()}#B(){return[...this.#c.value.skill,...this.#c.value.memory]}#j(e){this.#s.set(e),this.#r.set([]),this.#$(),this.#l()}#Z(e){const t=this.#r.value;this.#r.set(t.includes(e)?t.filter(s=>s!==e):[...t,e]),this.#l()}#K(e){this.#r.value.includes(e)||this.#r.set([...this.#r.value,e]),this.#l()}#Q(e){this.#i.value.includes(e)||this.#i.set([...this.#i.value,e]),this.#l()}#W(e){this.#x.set(e),this.#v.set(e),this.#l()}#V(e){this.#t.set(e.target.value),this.#l()}#Y(){this.#t.set(""),this.#l()}#G(e){this.#a.set({table:e._table,id:e.id})}#J(e){this.#b.set(e.target.value),this.#l()}#X(e){this.#m.set(e.target.value),this.#l()}#ee(e){this.#k.set(e.target.value),this.#l()}#te(e){this.#x.set(e.target.value),this.#l()}#se(e){this.#v.set(e.target.value),this.#l()}#ie(){this.#x.set(""),this.#v.set(""),this.#l()}#re(e){const t=new Set(this.#g.value);t.has(e.id)?t.delete(e.id):t.add(e.id),this.#g.set(t)}#ne(){return new Map(this.#d.value.map(e=>[e.id,e]))}#A(){const e=new Map,t=this.#ne();for(const s of this.#g.value){const i=t.get(s);if(!i)continue;const n=e.get(i._table)??[];n.push(s),e.set(i._table,n)}return e}async#E(e){const t=this.#A();await Promise.all([...t.entries()].map(([s,i])=>fetch(`/api/entries/${s}/bulk/deprecated`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({ids:i,deprecated:e})}))),this.#g.set(new Set),await this.#l()}async#z(e){const t=this.#A();await Promise.all([...t.entries()].map(([s,i])=>fetch(`/api/entries/${s}/bulk/paused`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({ids:i,paused:e})}))),this.#g.set(new Set),await this.#l()}async#oe(){if(!window.confirm(`Delete ${this.#g.value.size} doc(s)? This can't be undone.`))return;const e=this.#A();await Promise.all([...e.entries()].map(([t,s])=>fetch(`/api/entries/${t}/bulk/delete`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({ids:s})}))),this.#g.set(new Set),await this.#l()}#P(){const e=this.#y.value;return h`
|
|
1154
1422
|
<button
|
|
1155
1423
|
class="theme-toggle"
|
|
1156
|
-
title=${`Theme: ${
|
|
1424
|
+
title=${`Theme: ${Si[e]} (click to change)`}
|
|
1157
1425
|
aria-label="Toggle color theme"
|
|
1158
1426
|
@click=${()=>this.#D()}
|
|
1159
1427
|
>
|
|
1160
|
-
${
|
|
1428
|
+
${_i[e]}
|
|
1161
1429
|
</button>
|
|
1162
|
-
`}#
|
|
1430
|
+
`}#ae(){const e=this.#_.value;return h`
|
|
1163
1431
|
<button
|
|
1164
1432
|
class=${`reindex-toggle${e?" spinning":""}`}
|
|
1165
1433
|
title=${e?"Reindexing…":"Rebuild cache from disk"}
|
|
1166
1434
|
aria-label="Rebuild cache from disk"
|
|
1167
1435
|
?disabled=${e}
|
|
1168
|
-
@click=${()=>this.#
|
|
1436
|
+
@click=${()=>this.#I()}
|
|
1169
1437
|
>
|
|
1170
1438
|
♻
|
|
1171
1439
|
</button>
|
|
1172
|
-
`}render(){const e=this.#o.value,t=this.#
|
|
1440
|
+
`}render(){const e=this.#o.value,t=this.#B();return this.#p.value&&t.length===0&&!this.#h.value?h`
|
|
1173
1441
|
${this.#P()}
|
|
1174
1442
|
<div class="first-run">
|
|
1175
1443
|
<h1>No roots configured yet</h1>
|
|
@@ -1177,35 +1445,35 @@ This removes the doc's key, tags, and status — it drops out of key-based looku
|
|
|
1177
1445
|
Add a folder of skills or memory docs to get started. You can add more roots later —
|
|
1178
1446
|
e.g. a personal skills repo plus a shared company repo.
|
|
1179
1447
|
</p>
|
|
1180
|
-
<button class="add-root-btn" @click=${()=>this.#
|
|
1448
|
+
<button class="add-root-btn" @click=${()=>this.#h.set(!0)}>+ Add your first root</button>
|
|
1181
1449
|
</div>
|
|
1182
|
-
${this.#
|
|
1450
|
+
${this.#h.value?h`<add-root-modal
|
|
1183
1451
|
.defaultKind=${"skill"}
|
|
1184
1452
|
.lockKind=${!1}
|
|
1185
|
-
.onAdded=${()=>this.#
|
|
1186
|
-
.onCancel=${()=>this.#
|
|
1453
|
+
.onAdded=${()=>this.#R()}
|
|
1454
|
+
.onCancel=${()=>this.#h.set(!1)}
|
|
1187
1455
|
></add-root-modal>`:""}
|
|
1188
|
-
`:
|
|
1189
|
-
${this.#
|
|
1456
|
+
`:h`
|
|
1457
|
+
${this.#ae()}
|
|
1190
1458
|
${this.#P()}
|
|
1191
1459
|
<div class="roots-bar">
|
|
1192
1460
|
<span class="filter-label">Roots:</span>
|
|
1193
|
-
${t.map(s=>
|
|
1461
|
+
${t.map(s=>h`
|
|
1194
1462
|
<button
|
|
1195
|
-
class="root-chip ${this.#
|
|
1463
|
+
class="root-chip ${this.#i.value.includes(s.name)?"active":""}"
|
|
1196
1464
|
title=${s.path}
|
|
1197
|
-
@click=${()=>this.#
|
|
1465
|
+
@click=${()=>this.#F(s.name)}
|
|
1198
1466
|
>
|
|
1199
1467
|
${s.name}
|
|
1200
1468
|
<span
|
|
1201
1469
|
class="remove"
|
|
1202
1470
|
title="Remove root"
|
|
1203
|
-
@click=${i=>this.#
|
|
1471
|
+
@click=${i=>this.#H(s,i)}
|
|
1204
1472
|
>${this.#n.value===s.name?"…":"✕"}</span
|
|
1205
1473
|
>
|
|
1206
1474
|
</button>
|
|
1207
1475
|
`)}
|
|
1208
|
-
<button class="add-root-btn" @click=${()=>this.#
|
|
1476
|
+
<button class="add-root-btn" @click=${()=>this.#h.set(!0)}>+ Add root</button>
|
|
1209
1477
|
</div>
|
|
1210
1478
|
<div class="filters">
|
|
1211
1479
|
<div class="row search-row">
|
|
@@ -1214,9 +1482,9 @@ This removes the doc's key, tags, and status — it drops out of key-based looku
|
|
|
1214
1482
|
type="search"
|
|
1215
1483
|
placeholder="Search descriptions, bodies, tags..."
|
|
1216
1484
|
.value=${this.#t.value}
|
|
1217
|
-
@input=${s=>this.#
|
|
1485
|
+
@input=${s=>this.#V(s)}
|
|
1218
1486
|
/>
|
|
1219
|
-
${this.#t.value?
|
|
1487
|
+
${this.#t.value?h`
|
|
1220
1488
|
<button
|
|
1221
1489
|
class="search-clear-btn"
|
|
1222
1490
|
title="Clear search"
|
|
@@ -1228,7 +1496,7 @@ This removes the doc's key, tags, and status — it drops out of key-based looku
|
|
|
1228
1496
|
`:""}
|
|
1229
1497
|
</div>
|
|
1230
1498
|
<div class="row type-toggle">
|
|
1231
|
-
${
|
|
1499
|
+
${vi.map(s=>h`
|
|
1232
1500
|
<button
|
|
1233
1501
|
class=${this.#s.value===s.value?"active":""}
|
|
1234
1502
|
@click=${()=>this.#j(s.value)}
|
|
@@ -1237,11 +1505,12 @@ This removes the doc's key, tags, and status — it drops out of key-based looku
|
|
|
1237
1505
|
</button>
|
|
1238
1506
|
`)}
|
|
1239
1507
|
</div>
|
|
1240
|
-
${e.tags.length===0?
|
|
1508
|
+
${e.tags.length===0?h`<span class="filter-label">Tags:</span> <label class="small">no tags yet</label>`:h`
|
|
1241
1509
|
<tag-multiselect
|
|
1242
1510
|
.tags=${e.tags}
|
|
1243
|
-
.active=${this.#
|
|
1511
|
+
.active=${this.#r.value}
|
|
1244
1512
|
.onToggle=${s=>this.#Z(s)}
|
|
1513
|
+
.width=${"260px"}
|
|
1245
1514
|
></tag-multiselect>
|
|
1246
1515
|
`}
|
|
1247
1516
|
<span class="filter-label">Dates:</span>
|
|
@@ -1249,7 +1518,7 @@ This removes the doc's key, tags, and status — it drops out of key-based looku
|
|
|
1249
1518
|
<input
|
|
1250
1519
|
type="date"
|
|
1251
1520
|
aria-label="From date"
|
|
1252
|
-
.value=${this.#
|
|
1521
|
+
.value=${this.#x.value}
|
|
1253
1522
|
@change=${s=>this.#te(s)}
|
|
1254
1523
|
/>
|
|
1255
1524
|
<span class="date-range-sep">–</span>
|
|
@@ -1259,7 +1528,7 @@ This removes the doc's key, tags, and status — it drops out of key-based looku
|
|
|
1259
1528
|
.value=${this.#v.value}
|
|
1260
1529
|
@change=${s=>this.#se(s)}
|
|
1261
1530
|
/>
|
|
1262
|
-
${this.#
|
|
1531
|
+
${this.#x.value||this.#v.value?h`
|
|
1263
1532
|
<button
|
|
1264
1533
|
class="date-range-clear"
|
|
1265
1534
|
title="Clear date range"
|
|
@@ -1271,7 +1540,7 @@ This removes the doc's key, tags, and status — it drops out of key-based looku
|
|
|
1271
1540
|
`:""}
|
|
1272
1541
|
</div>
|
|
1273
1542
|
<span class="filter-label">Sort:</span>
|
|
1274
|
-
<select .value=${this.#
|
|
1543
|
+
<select .value=${this.#b.value} @change=${s=>this.#J(s)}>
|
|
1275
1544
|
<option value="mtime_desc">Recently touched</option>
|
|
1276
1545
|
<option value="mtime_asc">Least recently touched</option>
|
|
1277
1546
|
<option value="created_at_asc">Oldest first</option>
|
|
@@ -1279,51 +1548,51 @@ This removes the doc's key, tags, and status — it drops out of key-based looku
|
|
|
1279
1548
|
</select>
|
|
1280
1549
|
<span class="filter-label">Deprecated:</span>
|
|
1281
1550
|
<select .value=${this.#m.value} @change=${s=>this.#X(s)}>
|
|
1282
|
-
${
|
|
1551
|
+
${nt.map(s=>h`<option value=${s.value}>${s.label}</option>`)}
|
|
1283
1552
|
</select>
|
|
1284
1553
|
<span class="filter-label">Paused:</span>
|
|
1285
1554
|
<select .value=${this.#k.value} @change=${s=>this.#ee(s)}>
|
|
1286
|
-
${
|
|
1555
|
+
${nt.map(s=>h`<option value=${s.value}>${s.label}</option>`)}
|
|
1287
1556
|
</select>
|
|
1288
1557
|
</div>
|
|
1289
1558
|
</div>
|
|
1290
|
-
${this.#
|
|
1559
|
+
${this.#g.value.size>0?h`
|
|
1291
1560
|
<div class="bulk-bar">
|
|
1292
|
-
<span>${this.#
|
|
1561
|
+
<span>${this.#g.value.size} selected</span>
|
|
1293
1562
|
<button @click=${()=>this.#E(!0)}>Mark deprecated</button>
|
|
1294
1563
|
<button @click=${()=>this.#E(!1)}>Un-deprecate</button>
|
|
1295
1564
|
<button @click=${()=>this.#z(!0)}>Pause</button>
|
|
1296
1565
|
<button @click=${()=>this.#z(!1)}>Resume</button>
|
|
1297
|
-
<button class="danger" @click=${()=>this.#
|
|
1298
|
-
<button @click=${()=>this.#
|
|
1566
|
+
<button class="danger" @click=${()=>this.#oe()}>Delete</button>
|
|
1567
|
+
<button @click=${()=>this.#g.set(new Set)}>Clear</button>
|
|
1299
1568
|
</div>
|
|
1300
1569
|
`:""}
|
|
1301
1570
|
<div class="body-region">
|
|
1302
1571
|
<result-list
|
|
1303
|
-
style=${`width: ${this.#
|
|
1304
|
-
.results=${this.#
|
|
1572
|
+
style=${`width: ${this.#u.value}%; border-right: 1px solid var(--border);`}
|
|
1573
|
+
.results=${this.#d.value}
|
|
1305
1574
|
.showRoot=${t.length>1}
|
|
1306
1575
|
.onSelect=${s=>this.#G(s)}
|
|
1307
|
-
.selectedIds=${this.#
|
|
1576
|
+
.selectedIds=${this.#g.value}
|
|
1308
1577
|
.onToggleSelect=${s=>this.#re(s)}
|
|
1309
1578
|
></result-list>
|
|
1310
1579
|
<div
|
|
1311
|
-
class="splitter ${this.#
|
|
1312
|
-
@pointerdown=${s=>this.#
|
|
1580
|
+
class="splitter ${this.#f.value?"dragging":""}"
|
|
1581
|
+
@pointerdown=${s=>this.#O(s)}
|
|
1313
1582
|
></div>
|
|
1314
1583
|
<detail-panel
|
|
1315
|
-
.selected=${this.#
|
|
1584
|
+
.selected=${this.#a.value}
|
|
1316
1585
|
.facets=${e}
|
|
1317
|
-
.onChanged=${()=>this.#
|
|
1586
|
+
.onChanged=${()=>{this.#l(),this.#$()}}
|
|
1318
1587
|
.onTagClick=${s=>this.#K(s)}
|
|
1319
1588
|
.onRootClick=${s=>this.#Q(s)}
|
|
1320
|
-
.onDateClick=${s=>this.#
|
|
1589
|
+
.onDateClick=${s=>this.#W(s)}
|
|
1321
1590
|
></detail-panel>
|
|
1322
1591
|
</div>
|
|
1323
|
-
${this.#
|
|
1592
|
+
${this.#h.value?h`<add-root-modal
|
|
1324
1593
|
.defaultKind=${"skill"}
|
|
1325
1594
|
.lockKind=${!1}
|
|
1326
|
-
.onAdded=${()=>this.#
|
|
1327
|
-
.onCancel=${()=>this.#
|
|
1595
|
+
.onAdded=${()=>this.#R()}
|
|
1596
|
+
.onCancel=${()=>this.#h.set(!1)}
|
|
1328
1597
|
></add-root-modal>`:""}
|
|
1329
|
-
`}}customElements.define("mem-bucket-app"
|
|
1598
|
+
`}}customElements.define("mem-bucket-app",Ci);
|