@jant/core 0.6.2 → 0.6.4
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/{app-Ct9c4zYF.js → app-B-wKZB8f.js} +267 -205
- package/dist/app-qwMcaTML.js +6 -0
- package/dist/client/.vite/manifest.json +3 -3
- package/dist/client/_assets/{client-Bp2IPjDe.js → client-B1XjvRqE.js} +1 -1
- package/dist/client/_assets/client-BMPMuwvV.css +2 -0
- package/dist/client/_assets/{client-auth-C4hQWqH1.js → client-auth-B9T2QFl2.js} +21 -21
- package/dist/{export-O2w3AsZX.js → export-CzuQyg5h.js} +28 -15
- package/dist/{github-sync-BUzIYouS.js → github-sync-CerNYCAn.js} +2 -2
- package/dist/{github-sync-D49RADci.js → github-sync-Dbrb1DS5.js} +5 -2
- package/dist/index.js +3 -3
- package/dist/node.js +4 -4
- package/package.json +1 -1
- package/src/__tests__/export-service.test.ts +127 -0
- package/src/app.tsx +7 -0
- package/src/client/components/__tests__/jant-collection-directory.test.ts +0 -42
- package/src/client/components/collection-manager-types.ts +0 -2
- package/src/client/components/jant-collection-directory.ts +0 -23
- package/src/i18n/locales/public/en.po +0 -12
- package/src/i18n/locales/public/zh-Hans.po +0 -12
- package/src/i18n/locales/public/zh-Hant.po +0 -12
- package/src/lib/github-sync-site-config.ts +4 -2
- package/src/middleware/__tests__/cache-control.test.ts +50 -0
- package/src/middleware/cache-control.ts +60 -0
- package/src/services/export-theme/styles/main.css +4 -3
- package/src/services/export.ts +47 -17
- package/src/services/github-sync.ts +8 -2
- package/src/styles/ui.css +23 -46
- package/src/ui/feed/ThreadPreview.tsx +17 -9
- package/src/ui/feed/__tests__/thread-preview.test.ts +131 -6
- package/src/ui/feed/thread-preview-state.ts +43 -0
- package/src/ui/pages/CollectionsPage.tsx +0 -22
- package/src/ui/shared/CollectionsManager.tsx +6 -41
- package/dist/app-CUZaVgsC.js +0 -6
- package/dist/client/_assets/client-YVrRjAid.css +0 -2
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{a as e,n as t,o as n,t as r}from"./chunks/url-pLre2DM_.js";import{_ as i,a,c as o,d as s,f as c,g as l,h as u,i as d,l as f,m as p,n as m,o as h,p as g,r as _,s as v,t as y,u as b}from"./client-
|
|
1
|
+
import{a as e,n as t,o as n,t as r}from"./chunks/url-pLre2DM_.js";import{_ as i,a,c as o,d as s,f as c,g as l,h as u,i as d,l as f,m as p,n as m,o as h,p as g,r as _,s as v,t as y,u as b}from"./client-B1XjvRqE.js";var x={maxShortSide:1920,maxLongSide:8192,quality:.85,mimeType:`image/webp`};function S(e){return new Promise((t,n)=>{let r=new Image;r.onload=()=>{URL.revokeObjectURL(r.src),t(r)},r.onerror=()=>n(Error(`Failed to load image`)),r.src=URL.createObjectURL(e)})}function C(e,t,n){if(Math.max(e,t)>n.maxLongSide)return{passthrough:!0,width:e,height:t};let r=Math.min(e,t);if(r<=n.maxShortSide)return{passthrough:!1,width:e,height:t};let i=n.maxShortSide/r;return{passthrough:!1,width:Math.round(e*i),height:Math.round(t*i)}}async function ee(e,t,n){let r=await new Promise((r,i)=>{e.toBlob(e=>e?r(e):i(Error(`Failed to create blob`)),t,n)});return t!==`image/png`&&r.type===`image/png`?new Promise((t,r)=>{e.toBlob(e=>e?t(e):r(Error(`Failed to create blob`)),`image/jpeg`,n)}):r}async function te(e,t={}){let n={...x,...t},r=await S(e),i=C(r.width,r.height,n);if(i.passthrough)return{blob:e,width:i.width,height:i.height,processed:!1};let a=document.createElement(`canvas`);a.width=i.width,a.height=i.height;let o=a.getContext(`2d`);if(!o)throw Error(`Failed to get canvas context`);return o.drawImage(r,0,0,i.width,i.height),{blob:await ee(a,n.mimeType,n.quality),width:i.width,height:i.height,processed:!0}}async function ne(e,t={}){let n=await te(e,t);if(!n.processed)return{file:e,width:n.width,height:n.height};let r={"image/webp":`webp`,"image/jpeg":`jpg`,"image/png":`png`}[n.blob.type]??`png`,i=`${e.name.replace(/\.[^.]+$/,``)}.${r}`;return{file:new File([n.blob],i,{type:n.blob.type}),width:n.width,height:n.height}}var re={process:te,processToFile:ne},ie={ICO_16:16,ICO_32:32,APPLE_TOUCH:512};function ae(e){let t=e.length*16,n=6+t,r=new ArrayBuffer(6+t),i=new DataView(r);i.setUint16(0,0,!0),i.setUint16(2,1,!0),i.setUint16(4,e.length,!0);let a=[];for(let t=0;t<e.length;t++){let r=e[t],o=6+t*16;i.setUint8(o+0,r.size<256?r.size:0),i.setUint8(o+1,r.size<256?r.size:0),i.setUint8(o+2,0),i.setUint8(o+3,0),i.setUint16(o+4,1,!0),i.setUint16(o+6,32,!0),i.setUint32(o+8,r.png.byteLength,!0),i.setUint32(o+12,n,!0),n+=r.png.byteLength,a.push(r.png)}return new Blob([r,...a],{type:`image/x-icon`})}function oe(e){return typeof e==`object`&&!!e}function w(e,t){if(!oe(e))return;let n=e[t];return typeof n==`string`?n:void 0}function se(e,t){if(!oe(e))return;let n=e[t];return typeof n==`boolean`?n:void 0}function ce(e,t){if(!oe(e))return;let n=e[t];return typeof n==`number`?n:void 0}async function le(e){let t=await e.json();return oe(t)?t:{}}var ue=180;function de(e){return new Promise((t,n)=>{let r=new Image;r.onload=()=>{URL.revokeObjectURL(r.src),t(r)},r.onerror=()=>n(Error(`Failed to load image`)),r.src=URL.createObjectURL(e)})}function fe(e,t){let n=document.createElement(`canvas`);n.width=t,n.height=t;let r=n.getContext(`2d`);if(!r)throw Error(`Failed to get canvas context`);r.imageSmoothingEnabled=!0,r.imageSmoothingQuality=`high`;let i=Math.max(t/e.width,t/e.height),a=t/i,o=t/i,s=(e.width-a)/2,c=(e.height-o)/2;return r.drawImage(e,s,c,a,o,0,0,t,t),new Promise((e,t)=>{n.toBlob(n=>{n?e(n):t(Error(`Failed to create PNG blob`))},`image/png`)})}function pe(e,t){return e.type===`image/png`&&t.width===t.height&&t.width>=ue&&t.height>=ue}async function me(e,t){let n=e.closest(`form`)?.querySelector(`label`),r=n?.textContent??``;try{n&&(n.textContent=e.dataset.textProcessing||`Processing...`);let r=await de(t),a=t,o=t.name;if(t.type!==`image/svg+xml`){let e=await fe(r,512);a=new File([e],t.name.replace(/\.[^.]+$/,`.png`),{type:`image/png`}),o=a.name}let s=pe(t,r)?Promise.resolve(t):fe(r,ie.APPLE_TOUCH),[c,l,u]=await Promise.all([fe(r,16),fe(r,32),s]),[d,f]=await Promise.all([c.arrayBuffer(),l.arrayBuffer()]),p=ae([{size:16,png:d},{size:32,png:f}]);n&&(n.textContent=e.dataset.textUploading||`Uploading...`);let m=new FormData;m.append(`file`,a,o),m.append(`favicon`,p,`favicon.ico`),m.append(`appleTouch`,u,`apple-touch-icon.png`);let h=await fetch(i(`/settings/avatar`),{method:`POST`,headers:{Accept:`application/json`},body:m});if(!h.ok){let t=e.dataset.textError||`Upload failed. Please try again.`;try{let e=await le(h);t=w(e,`error`)??w(e,`message`)??t}catch{}throw Error(t)}let g=await le(h),_=w(g,`status`),v=w(g,`url`);if(_===`redirect`&&v){window.location.href=v;return}window.location.href=i(`/settings/avatar?saved`)}catch(t){n&&(n.textContent=r),d(t instanceof Error&&t.message?t.message:e.dataset.textError||`Upload failed. Please try again.`,`error`)}e.value=``}function he(){document.addEventListener(`change`,e=>{let t=e.target.closest(`[data-avatar-upload]`);t?.files?.[0]&&(e.stopPropagation(),me(t,t.files[0]))})}he();var ge=`default`,_e=class extends c{static properties={_open:{state:!0},_title:{state:!0},_message:{state:!0},_confirmLabel:{state:!0},_cancelLabel:{state:!0},_tone:{state:!0}};#e=[];#t=null;createRenderRoot(){return this.innerHTML=``,this}constructor(){super(),this._open=!1,this._title=``,this._message=``,this._confirmLabel=``,this._cancelLabel=``,this._tone=ge}disconnectedCallback(){super.disconnectedCallback();let e=this.#t;this.#t=null,e?.resolve(!1);for(let e of this.#e.splice(0))e.resolve(!1)}async confirm(e){return await new Promise(t=>{this.#e.push({...e,tone:e.tone??ge,resolve:t}),this.#t||this.#n()})}async#n(){if(this.#t||this.#e.length===0)return;let e=this.#e.shift();if(!e)return;this.#t=e,this._title=e.title??``,this._message=e.message,this._confirmLabel=e.confirmLabel,this._cancelLabel=e.cancelLabel,this._tone=e.tone??ge,this._open=!0,await this.updateComplete;let t=this.querySelector(`.confirm-dialog`);t&&(t.open||t.showModal(),t.querySelector(`.confirm-dialog-panel`)?.focus())}#r(e){let t=this.#t;if(!t)return;this.#t=null;let n=this.querySelector(`.confirm-dialog`);n?.open&&n.close(),this._open=!1,this._title=``,this._message=``,this._confirmLabel=``,this._cancelLabel=``,this._tone=ge,t.resolve(e),queueMicrotask(()=>void this.#n())}#i=e=>{e.preventDefault(),this.#r(!1)};#a=e=>{e.target===e.currentTarget&&this.#r(!1)};#o=e=>{if(e.key===`Escape`){e.preventDefault(),e.stopPropagation(),this.#r(!1);return}let t=e.target,n=t instanceof HTMLButtonElement||t instanceof HTMLInputElement||t instanceof HTMLSelectElement||t instanceof HTMLTextAreaElement||t instanceof HTMLAnchorElement;e.key===`Enter`&&!e.defaultPrevented&&!e.metaKey&&!e.ctrlKey&&!e.altKey&&!e.shiftKey&&!n&&(e.preventDefault(),this.#r(!0))};#s(){if(this._title)return{title:this._title,message:this._message};let e=this._message.match(/^(.+?[??])\s+(.+)$/u);return e?{title:e[1],message:e[2]}:{title:this._message,message:``}}render(){if(!this._open)return g;let{title:e,message:t}=this.#s(),n=this._tone===`danger`?`btn-destructive`:`btn`;return u`
|
|
2
2
|
<dialog
|
|
3
3
|
class="dialog confirm-dialog"
|
|
4
4
|
@cancel=${this.#i}
|
|
@@ -2986,7 +2986,7 @@ Check the discardedTracks field for more info.`)}return e}async execute(){if(!th
|
|
|
2986
2986
|
`}
|
|
2987
2987
|
</form>
|
|
2988
2988
|
`}};customElements.define(`jant-collection-form`,aB);function oB(e,t){let n=e[t];if(!n||n.type!==`divider`||!n.label)return null;let r=[];for(let n=t+1;n<e.length;n+=1){let t=e[n];if(!t||t.type===`divider`)break;let i=t.collection?.slug;i&&r.push(i)}return r.length<2?null:{slugExpression:r.join(`+`),collectionCount:r.length}}function sB(e){return typeof e==`string`?e:``}function cB(e){return typeof e==`number`&&Number.isFinite(e)?e:null}function lB(e){let n=sx(t(e.src));if(!n)return``;let r=` sandbox="${sx(e.sandbox)}"`,i=e.allow?` allow="${sx(e.allow)}"`:``;return`<iframe src="${n}"${` title="${sx(e.providerName)} embed"`}${r}${i} loading="lazy" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>`}function uB(e){let t=e.orientation===`portrait`?`portrait`:e.orientation===`square`?`square`:e.orientation===`auto`?`auto`:`landscape`,n=[];e.heightPx&&e.heightPx>0&&n.push(`--tiptap-embed-height:${Math.round(e.heightPx)}px`);let r=n.length>0?` style="${sx(n.join(`;`))}"`:``;return` data-orientation="${sx(t)}"${r}`}function dB(e,n){let r=lB(e);if(!r)return``;let i=sx(t(e.url||e.src)),a=sx(e.providerName),o=i?`<a class="tiptap-embed-fallback" href="${i}" target="_blank" rel="noopener noreferrer">${a} →</a>`:``,s=sx(e.provider),c=n?.trim()?`<figcaption>${sx(n.trim())}</figcaption>`:``;return`<figure class="tiptap-embed-figure" data-provider="${s}"${uB(e)}><div class="tiptap-embed-frame">${r}</div>`+o+c+`</figure>`}function fB(e){let n=e??{},r=sB(n.url),i=sB(n.src),a=null;if(i){let e=t(i);e&&(a={provider:sB(n.provider)||`iframe`,providerName:sB(n.providerName)||`Embed`,src:e,url:r||e,orientation:sB(n.orientation)||`landscape`,heightPx:cB(n.heightPx)??void 0,sandbox:sB(n.sandbox)||`allow-scripts allow-same-origin allow-popups`,allow:sB(n.allow)||void 0,cspFrameSrc:[],cspScriptSrc:[]})}if(!a&&r&&(a=RS(r)),!a){if(!r)return``;let e=sx(t(r));return e?`<p class="tiptap-embed-fallback"><a href="${e}" target="_blank" rel="noopener noreferrer">${e}</a></p>`:``}return dB(a,sB(n.caption))}function pB(e,t){let n=e?.[t];return typeof n==`string`?n:``}function mB(e,t){let n=e?.[t];return typeof n==`number`&&Number.isFinite(n)?n:null}function hB(e){switch(e.type){case`text`:return sx(e.text??``);case`hardBreak`:return`
|
|
2989
|
-
`;default:return(e.content??[]).map(hB).join(``)}}function gB(e,t,n){let r=mB(t.attrs,`colspan`),i=mB(t.attrs,`rowspan`);return`<${e}${r!==null&&r!==1?` colspan="${r}"`:``}${i!==null&&i!==1?` rowspan="${i}"`:``}>${n.renderChildren(t.content)}</${e}>`}function _B(e){let t=e.trim();return t.startsWith(`<p>`)&&t.endsWith(`</p>`)&&t.indexOf(`<p>`,1)===-1?t.slice(3,-4):t}var vB=null;function yB(e,t){let n=Qb(pB(e.attrs,`label`)),r=nx(n),i=vB?.get(n),a=i?_B(t.renderChildren(i.content)):``;return`<label for="sn-${sx(r)}" class="margin-toggle sidenote-number"></label><input type="checkbox" id="sn-${sx(r)}" class="margin-toggle"/><span class="sidenote">${a}</span>`}var bB={bold:e=>`<strong>${e}</strong>`,italic:e=>`<em>${e}</em>`,strike:e=>`<s>${e}</s>`,code:e=>`<code>${e}</code>`,link:(e,n)=>{let r=sx(t(pB(n.attrs,`href`))),i=pB(n.attrs,`target`);return`<a href="${r}"${i?` target="${sx(i)}"`:``}${i?` rel="noopener noreferrer"`:``}>${e}</a>`}},xB={doc:(e,t)=>{let n=e.content??[],r=new Map;for(let e of n)if(e.type===`footnoteDefinition`){let t=Qb(pB(e.attrs,`label`));t&&r.set(t,e)}vB=r.size>0?r:null;try{let e=n.filter(e=>e.type!==`footnoteDefinition`);return t.renderChildren(e)}finally{vB=null}},paragraph:(e,t)=>`<p>${t.renderChildren(e.content)}</p>`,heading:(e,t)=>{let n=Math.min(Math.max(mB(e.attrs,`level`)??1,1),6);return`<h${n}>${t.renderChildren(e.content)}</h${n}>`},text:(e,t)=>t.renderText(e.text??``,e.marks),bulletList:(e,t)=>`<ul>${t.renderChildren(e.content)}</ul>`,orderedList:(e,t)=>{let n=mB(e.attrs,`start`);return`<ol${n!==null&&n!==1?` start="${n}"`:``}>${t.renderChildren(e.content)}</ol>`},listItem:(e,t)=>`<li>${t.renderChildren(e.content)}</li>`,blockquote:(e,t)=>`<blockquote>${t.renderChildren(e.content)}</blockquote>`,codeBlock:e=>{let t=pB(e.attrs,`language`);return`<pre><code${t?` class="language-${sx(t)}"`:``}>${hB(e)}</code></pre>`},table:(e,t)=>`<table>${t.renderChildren(e.content)}</table>`,tableRow:(e,t)=>`<tr>${t.renderChildren(e.content)}</tr>`,tableCell:(e,t)=>gB(`td`,e,t),tableHeader:(e,t)=>gB(`th`,e,t),horizontalRule:()=>`<hr>`,hardBreak:()=>`<br>`,image:e=>ux(e.attrs??{}),embed:e=>fB(e.attrs),htmlBlock:e=>{let t=pB(e.attrs,`html`);return t?`<div class="tiptap-html-block">${t}</div>`:``},moreBreak:()=>`<!--more-->`,footnoteReference:(e,t)=>yB(e,t),footnoteDefinition:()=>``};function SB(e,t=[]){let n=sx(e);for(let e of t){let t=bB[e.type];t&&(n=t(n,e))}return n}function CB(e=[]){return e.map(TB).join(``)}function wB(e,t){return e.content?t.renderChildren(e.content):``}function TB(e){return(xB[e.type]??wB)(e,EB)}var EB={renderChildren:CB,renderNode:TB,renderText:SB};function DB(e){return e.type===`doc`?TB(ax(e)):``}function OB(e){return e.trim()?DB(Bx(e)):``}function kB(){return Math.floor(Date.now()/1e3)}function AB(e){return new Date(e*1e3).toISOString()}function jB(e,t=`UTC`){let n=kB()-e;if(n<60)return`1m`;let r=Math.floor(n/60);if(r<60)return`${r}m`;let i=Math.floor(n/3600);if(i<24)return`${i}h`;let a=Math.floor(n/86400);return a<=7?`${a}d`:new Date(e*1e3).toLocaleDateString(`en-US`,{month:`short`,day:`numeric`,timeZone:t})}function MB(e,t=`UTC`){let n=jB(e,t);return/^[0-9]+[mhd]$/.test(n)?`${n} ago`:n}var NB=class extends c{static properties={items:{type:Array},labels:{type:Object},_items:{state:!0},_reorderMode:{state:!0},_editingDividerId:{state:!0},_editingLinkId:{state:!0},_editLinkLabel:{state:!0},_editLinkUrl:{state:!0},_editLinkDescription:{state:!0},_showMoreMenu:{state:!0},_showLinkForm:{state:!0},_newLinkLabel:{state:!0},_newLinkUrl:{state:!0},_newLinkDescription:{state:!0},_addingLink:{state:!0},_hoveringId:{state:!0},_showItemMenuId:{state:!0}};#e=null;#t=!1;#n=null;#r=null;#i=null;#a=null;#o=()=>{this._showMoreMenu=!1,document.removeEventListener(`click`,this.#o)};#s=()=>{this._showItemMenuId=null,document.removeEventListener(`click`,this.#s)};#c=e=>{let t=e.target;if(!t)return;t.closest(`[data-collections-more-menu]`)&&e.stopPropagation();let n=t.closest(`[data-collections-action]`);if(!n||!this.#r?.contains(n))return;let r=n.dataset.collectionsAction;if(r)switch(e.preventDefault(),e.stopPropagation(),r!==`toggle-menu`&&this._showMoreMenu&&(this._showMoreMenu=!1,document.removeEventListener(`click`,this.#o)),r){case`done`:this.#b();break;case`toggle-menu`:this._showMoreMenu=!this._showMoreMenu,this._showMoreMenu?setTimeout(()=>{document.addEventListener(`click`,this.#o)}):document.removeEventListener(`click`,this.#o);break;case`organize`:this.#y();break;case`divider`:this.#C();break;case`link`:this.#w();break;default:break}};createRenderRoot(){return this.innerHTML=``,this}connectedCallback(){super.connectedCallback(),this.#p()}constructor(){super(),this.items=[],this.labels={},this._items=[],this._reorderMode=!1,this._editingDividerId=null,this._editingLinkId=null,this._editLinkLabel=``,this._editLinkUrl=``,this._editLinkDescription=``,this._showMoreMenu=!1,this._showLinkForm=!1,this._newLinkLabel=``,this._newLinkUrl=``,this._newLinkDescription=``,this._addingLink=!1,this._hoveringId=null,this._showItemMenuId=null}update(e){(!this.#t||e.has(`items`))&&(this._items=[...this.items??[]],this.#t=!0),super.update(e)}disconnectedCallback(){super.disconnectedCallback(),this.#e?.destroy(),this.#e=null,this.#r?.removeEventListener(`click`,this.#c),this.#r=null,this.#i?.destroy(),this.#i=null,this.#a?.destroy(),this.#a=null,document.removeEventListener(`click`,this.#o),document.removeEventListener(`click`,this.#s)}#l(){return this._items.some(e=>e.type===`collection`&&e.collection||e.type===`link`&&e.label&&e.url)}#u(){return this._items.filter(e=>e.type===`collection`&&e.collection).length}#d(){let e=this.#u();return`${e} ${e===1?this.labels.collectionSingular:this.labels.collectionPlural}`}#f(e){return`${e} ${e===1?this.labels.entrySingular:this.labels.entryPlural}`}#p(){let e=this.closest(`[data-collections-manager-root]`);e!==this.#r&&(this.#r?.removeEventListener(`click`,this.#c),this.#r=e,this.#r?.addEventListener(`click`,this.#c))}#m(e){return this.#r?.querySelector(e)??null}#h(){let e=this.#m(`[data-collections-count]`);e&&(e.textContent=this.#d(),e.hidden=!1);let t=this.#m(`[data-collections-action="done"]`);t&&(t.hidden=!this._reorderMode);let n=this.#m(`[data-collections-reorder-actions]`);n&&(n.hidden=!this._reorderMode);let r=this.#m(`[data-collections-toolbar]`);r&&(r.hidden=this._reorderMode);let i=this.#m(`[data-collections-hint]`);i&&(i.hidden=!this._reorderMode);let a=this.#m(`[data-collections-more-menu]`);a&&(a.hidden=!this._showMoreMenu||this._reorderMode);let o=this.#m(`[data-collections-action="toggle-menu"]`);o&&o.setAttribute(`aria-expanded`,String(this._showMoreMenu&&!this._reorderMode))}#g(e){let t=e.collections??[],n=e.directoryItems??[],r=new Map;for(let e of t)r.set(e.id,{id:e.id,slug:e.slug,title:e.title,description:e.description,sortOrder:e.sortOrder,postCount:e.postCount??0,recentActivityAt:e.recentActivityAt});let i=new Set,a=[];for(let e of n){let t=e.collectionId==null?void 0:r.get(e.collectionId);e.type===`collection`&&!t||(t&&i.add(t.id),a.push({id:e.id,type:e.type,collectionId:e.collectionId,label:e.label,url:e.url,description:e.description,position:e.position,collection:t}))}for(let e of t)i.has(e.id)||a.push({id:`collection-${e.id}`,type:`collection`,collectionId:e.id,label:null,url:null,position:``,collection:r.get(e.id)});return a}async#_(){try{let e=await fetch(`/api/collections`);if(!e.ok)return;let t=await e.json();this._items=this.#g(t)}catch{}}#v(){let e=this.querySelector(`#collections-manager-list`);!e||this.#e||(this.#e=H.create(e,{...gO,chosenClass:`collection-directory-chosen`,dragClass:`collection-directory-drag`,ghostClass:`collection-directory-ghost`,handle:`[data-drag-handle]`,scroll:!0,onChoose:()=>{bO(e,!0)},onStart:e=>{this.#n=vO(e)},onUnchoose:()=>{bO(e,!1)},onEnd:t=>{let n=_O(e,`[data-directory-item]`,`directoryItem`);yO(e,t,this.#n),this.#n=null,bO(e,!1),this.#e?.destroy(),this.#e=null;let{movedId:r,afterId:i,beforeId:a}=xO(n,t.newIndex);if(!r)return;let o=new Map(this._items.map(e=>[e.id,e]));this._items=n.map(e=>o.get(e)).filter(e=>e!==void 0),fetch(`/api/collections/directory-items/${r}/move`,{method:`PUT`,headers:{"Content-Type":`application/json`},body:JSON.stringify({after:i??null,before:a??null})}).then(e=>{e.ok?d(this.labels.orderSaved):d(this.labels.saveFailed,`error`)})}}))}#y(){this._reorderMode=!0,this._showLinkForm=!1,this._editingLinkId=null,this._showMoreMenu=!1,document.removeEventListener(`click`,this.#o)}#b(){this._reorderMode=!1,this._editingDividerId=null,this.#e?.destroy(),this.#e=null}updated(e){if(this.#p(),this.#h(),this._reorderMode&&this.#v(),this._editingDividerId){let e=this.querySelector(`[data-divider-input-for="${this._editingDividerId}"]`);e&&(e.focus(),e.select(),e.scrollIntoView({block:`nearest`}),this._editingDividerId=null)}if(e.has(`_showLinkForm`)&&this._showLinkForm){let e=this.querySelector(`[data-link-form-input="label"]`);e&&this.ownerDocument.activeElement!==e&&e.focus(),this.#x()}e.has(`_editingLinkId`)&&this._editingLinkId&&this.#S()}#x(){let e=this.querySelector(`[data-new-link-desc-editor]`);!e||this.#i||(this.#i=jT({element:e,placeholder:this.labels.linkDescriptionPlaceholder,content:this._newLinkDescription||void 0,onUpdate:e=>{this._newLinkDescription=e}}),this._newLinkDescription=AT(this.#i.getJSON()))}#S(){let e=this.querySelector(`[data-edit-link-desc-editor]`);!e||this.#a||(this.#a=jT({element:e,placeholder:this.labels.linkDescriptionPlaceholder,content:this._editLinkDescription||void 0,onUpdate:e=>{this._editLinkDescription=e}}),this._editLinkDescription=AT(this.#a.getJSON()))}async#C(){this._showMoreMenu=!1,document.removeEventListener(`click`,this.#o);try{let e=await fetch(`/api/collections/directory-items`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({type:`divider`})});if(!e.ok)throw Error(`HTTP ${e.status}`);let t=await e.json();this._reorderMode=!0,await this.#_(),this._editingDividerId=t.id}catch{d(this.labels.saveFailed,`error`)}}#w(){this._showMoreMenu=!1,this._showLinkForm=!0,this._newLinkLabel=``,this._newLinkUrl=``,this._newLinkDescription=``,this.#i?.destroy(),this.#i=null,document.removeEventListener(`click`,this.#o)}async#T(){let e=this._newLinkLabel.trim(),t=this._newLinkUrl.trim();if(!e||!t){d(this.labels.labelAndUrlRequired,`error`);return}this._addingLink=!0;try{let n=this._newLinkDescription.trim()||null,r=await fetch(`/api/collections/directory-items`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({type:`link`,label:e,url:t,description:n})});if(!r.ok)throw Error(`HTTP ${r.status}`);this._showLinkForm=!1,this._newLinkLabel=``,this._newLinkUrl=``,this._newLinkDescription=``,this.#i?.destroy(),this.#i=null,d(this.labels.linkCreated),await this.#_()}catch{d(this.labels.saveFailed,`error`)}finally{this._addingLink=!1}}async#E(e){try{let t=await fetch(`/api/collections/directory-items/${e}`,{method:`DELETE`});if(!t.ok)throw Error(`HTTP ${t.status}`);this._items=this._items.filter(t=>t.id!==e)}catch{d(this.labels.saveFailed,`error`)}}async#D(e,t){let n=t.trim();if(n!==(this._items.find(t=>t.id===e)?.label??``))try{let t=await fetch(`/api/collections/directory-items/${e}`,{method:`PUT`,headers:{"Content-Type":`application/json`},body:JSON.stringify({label:n||null})});if(!t.ok)throw Error(`HTTP ${t.status}`);let r=await t.json();this._items=this._items.map(t=>t.id===e?{...t,label:r.label??null}:t)}catch{d(this.labels.saveFailed,`error`),await this.#_()}}async#O(e){if(await be({message:this.labels.confirmDelete,confirmLabel:this.labels.deleteCollection,cancelLabel:this.labels.cancel,tone:`danger`})){this._showItemMenuId=null,document.removeEventListener(`click`,this.#s);try{let t=await fetch(`/api/collections/${e.id}`,{method:`DELETE`});if(!t.ok)throw Error(`HTTP ${t.status}`);d(this.labels.deleted),await this.#_()}catch{d(this.labels.saveFailed,`error`)}}}#k(e){if(e.type===`link`){if(this._editingLinkId===e.id){this._editingLinkId=null,this._editLinkLabel=``,this._editLinkUrl=``,this._editLinkDescription=``,this.#a?.destroy(),this.#a=null;return}this._editingLinkId=e.id,this._editLinkLabel=e.label??``,this._editLinkUrl=e.url??``,this._editLinkDescription=e.description??``,this.#a?.destroy(),this.#a=null}}async#A(e){let t=this._editLinkLabel.trim(),n=this._editLinkUrl.trim();if(!t||!n){d(this.labels.labelAndUrlRequired,`error`);return}try{let r=this._editLinkDescription.trim()||null,i=await fetch(`/api/collections/directory-items/${e.id}`,{method:`PUT`,headers:{"Content-Type":`application/json`},body:JSON.stringify({label:t,url:n,description:r})});if(!i.ok)throw Error(`HTTP ${i.status}`);let a=await i.json();this._items=this._items.map(r=>r.id===e.id?{...r,label:a.label??t,url:a.url??n,description:a.description??null}:r),this._editingLinkId=null,this._editLinkLabel=``,this._editLinkUrl=``,this._editLinkDescription=``,this.#a?.destroy(),this.#a=null,d(this.labels.linkSaved)}catch{d(this.labels.saveFailed,`error`),await this.#_()}}async#j(e){if(await be({message:this.labels.confirmDeleteLink,confirmLabel:this.labels.deleteLink,cancelLabel:this.labels.cancel,tone:`danger`})){this._showItemMenuId=null,document.removeEventListener(`click`,this.#s);try{let t=await fetch(`/api/collections/directory-items/${e.id}`,{method:`DELETE`});if(!t.ok)throw Error(`HTTP ${t.status}`);this._editingLinkId=null,this._editLinkLabel=``,this._editLinkUrl=``,this._editLinkDescription=``,this.#a?.destroy(),this.#a=null,d(this.labels.linkDeleted),this._items=this._items.filter(t=>t.id!==e.id)}catch{d(this.labels.saveFailed,`error`)}}}#M(){let e=e=>e.type===`collection`&&e.collection||e.type===`link`&&e.label&&e.url,t=[],n=!1,r=0;for(let i of this._items)i.type===`divider`?(n=!0,t.push(0)):e(i)&&(n?t[t.length-1]+=1:r+=1);let i=t.length>0,a=Math.max(0,t.length-1),o=i?Math.max(1,a.toString(36).length):0,s=Math.max(2,String(Math.max(0,r-1)).length),c=[],l=-1,u=0;for(let t of this._items)if(t.type===`divider`)l+=1,u=0,c.push(``);else if(e(t)){if(i){let e=Math.max(0,l).toString(36).padStart(o,`0`),t=u.toString(36);c.push(e+t)}else c.push(String(u).padStart(s,`0`));u+=1}else c.push(``);return c}#N(e,t){let n=e.collection;if(!n)return g;let r=u`
|
|
2989
|
+
`;default:return(e.content??[]).map(hB).join(``)}}function gB(e,t,n){let r=mB(t.attrs,`colspan`),i=mB(t.attrs,`rowspan`);return`<${e}${r!==null&&r!==1?` colspan="${r}"`:``}${i!==null&&i!==1?` rowspan="${i}"`:``}>${n.renderChildren(t.content)}</${e}>`}function _B(e){let t=e.trim();return t.startsWith(`<p>`)&&t.endsWith(`</p>`)&&t.indexOf(`<p>`,1)===-1?t.slice(3,-4):t}var vB=null;function yB(e,t){let n=Qb(pB(e.attrs,`label`)),r=nx(n),i=vB?.get(n),a=i?_B(t.renderChildren(i.content)):``;return`<label for="sn-${sx(r)}" class="margin-toggle sidenote-number"></label><input type="checkbox" id="sn-${sx(r)}" class="margin-toggle"/><span class="sidenote">${a}</span>`}var bB={bold:e=>`<strong>${e}</strong>`,italic:e=>`<em>${e}</em>`,strike:e=>`<s>${e}</s>`,code:e=>`<code>${e}</code>`,link:(e,n)=>{let r=sx(t(pB(n.attrs,`href`))),i=pB(n.attrs,`target`);return`<a href="${r}"${i?` target="${sx(i)}"`:``}${i?` rel="noopener noreferrer"`:``}>${e}</a>`}},xB={doc:(e,t)=>{let n=e.content??[],r=new Map;for(let e of n)if(e.type===`footnoteDefinition`){let t=Qb(pB(e.attrs,`label`));t&&r.set(t,e)}vB=r.size>0?r:null;try{let e=n.filter(e=>e.type!==`footnoteDefinition`);return t.renderChildren(e)}finally{vB=null}},paragraph:(e,t)=>`<p>${t.renderChildren(e.content)}</p>`,heading:(e,t)=>{let n=Math.min(Math.max(mB(e.attrs,`level`)??1,1),6);return`<h${n}>${t.renderChildren(e.content)}</h${n}>`},text:(e,t)=>t.renderText(e.text??``,e.marks),bulletList:(e,t)=>`<ul>${t.renderChildren(e.content)}</ul>`,orderedList:(e,t)=>{let n=mB(e.attrs,`start`);return`<ol${n!==null&&n!==1?` start="${n}"`:``}>${t.renderChildren(e.content)}</ol>`},listItem:(e,t)=>`<li>${t.renderChildren(e.content)}</li>`,blockquote:(e,t)=>`<blockquote>${t.renderChildren(e.content)}</blockquote>`,codeBlock:e=>{let t=pB(e.attrs,`language`);return`<pre><code${t?` class="language-${sx(t)}"`:``}>${hB(e)}</code></pre>`},table:(e,t)=>`<table>${t.renderChildren(e.content)}</table>`,tableRow:(e,t)=>`<tr>${t.renderChildren(e.content)}</tr>`,tableCell:(e,t)=>gB(`td`,e,t),tableHeader:(e,t)=>gB(`th`,e,t),horizontalRule:()=>`<hr>`,hardBreak:()=>`<br>`,image:e=>ux(e.attrs??{}),embed:e=>fB(e.attrs),htmlBlock:e=>{let t=pB(e.attrs,`html`);return t?`<div class="tiptap-html-block">${t}</div>`:``},moreBreak:()=>`<!--more-->`,footnoteReference:(e,t)=>yB(e,t),footnoteDefinition:()=>``};function SB(e,t=[]){let n=sx(e);for(let e of t){let t=bB[e.type];t&&(n=t(n,e))}return n}function CB(e=[]){return e.map(TB).join(``)}function wB(e,t){return e.content?t.renderChildren(e.content):``}function TB(e){return(xB[e.type]??wB)(e,EB)}var EB={renderChildren:CB,renderNode:TB,renderText:SB};function DB(e){return e.type===`doc`?TB(ax(e)):``}function OB(e){return e.trim()?DB(Bx(e)):``}function kB(){return Math.floor(Date.now()/1e3)}function AB(e){return new Date(e*1e3).toISOString()}function jB(e,t=`UTC`){let n=kB()-e;if(n<60)return`1m`;let r=Math.floor(n/60);if(r<60)return`${r}m`;let i=Math.floor(n/3600);if(i<24)return`${i}h`;let a=Math.floor(n/86400);return a<=7?`${a}d`:new Date(e*1e3).toLocaleDateString(`en-US`,{month:`short`,day:`numeric`,timeZone:t})}function MB(e,t=`UTC`){let n=jB(e,t);return/^[0-9]+[mhd]$/.test(n)?`${n} ago`:n}var NB=class extends c{static properties={items:{type:Array},labels:{type:Object},_items:{state:!0},_reorderMode:{state:!0},_editingDividerId:{state:!0},_editingLinkId:{state:!0},_editLinkLabel:{state:!0},_editLinkUrl:{state:!0},_editLinkDescription:{state:!0},_showMoreMenu:{state:!0},_showLinkForm:{state:!0},_newLinkLabel:{state:!0},_newLinkUrl:{state:!0},_newLinkDescription:{state:!0},_addingLink:{state:!0},_hoveringId:{state:!0},_showItemMenuId:{state:!0}};#e=null;#t=!1;#n=null;#r=null;#i=null;#a=null;#o=()=>{this._showMoreMenu=!1,document.removeEventListener(`click`,this.#o)};#s=()=>{this._showItemMenuId=null,document.removeEventListener(`click`,this.#s)};#c=e=>{let t=e.target;if(!t)return;t.closest(`[data-collections-more-menu]`)&&e.stopPropagation();let n=t.closest(`[data-collections-action]`);if(!n||!this.#r?.contains(n))return;let r=n.dataset.collectionsAction;if(r)switch(e.preventDefault(),e.stopPropagation(),r!==`toggle-menu`&&this._showMoreMenu&&(this._showMoreMenu=!1,document.removeEventListener(`click`,this.#o)),r){case`done`:this.#v();break;case`toggle-menu`:this._showMoreMenu=!this._showMoreMenu,this._showMoreMenu?setTimeout(()=>{document.addEventListener(`click`,this.#o)}):document.removeEventListener(`click`,this.#o);break;case`organize`:this.#_();break;case`divider`:this.#x();break;case`link`:this.#S();break;default:break}};createRenderRoot(){return this.innerHTML=``,this}connectedCallback(){super.connectedCallback(),this.#d()}constructor(){super(),this.items=[],this.labels={},this._items=[],this._reorderMode=!1,this._editingDividerId=null,this._editingLinkId=null,this._editLinkLabel=``,this._editLinkUrl=``,this._editLinkDescription=``,this._showMoreMenu=!1,this._showLinkForm=!1,this._newLinkLabel=``,this._newLinkUrl=``,this._newLinkDescription=``,this._addingLink=!1,this._hoveringId=null,this._showItemMenuId=null}update(e){(!this.#t||e.has(`items`))&&(this._items=[...this.items??[]],this.#t=!0),super.update(e)}disconnectedCallback(){super.disconnectedCallback(),this.#e?.destroy(),this.#e=null,this.#r?.removeEventListener(`click`,this.#c),this.#r=null,this.#i?.destroy(),this.#i=null,this.#a?.destroy(),this.#a=null,document.removeEventListener(`click`,this.#o),document.removeEventListener(`click`,this.#s)}#l(){return this._items.some(e=>e.type===`collection`&&e.collection||e.type===`link`&&e.label&&e.url)}#u(e){return`${e} ${e===1?this.labels.entrySingular:this.labels.entryPlural}`}#d(){let e=this.closest(`[data-collections-manager-root]`);e!==this.#r&&(this.#r?.removeEventListener(`click`,this.#c),this.#r=e,this.#r?.addEventListener(`click`,this.#c))}#f(e){return this.#r?.querySelector(e)??null}#p(){let e=this.#f(`[data-collections-action="done"]`);e&&(e.hidden=!this._reorderMode);let t=this.#f(`[data-collections-reorder-actions]`);t&&(t.hidden=!this._reorderMode);let n=this.#f(`[data-collections-toolbar]`);n&&(n.hidden=this._reorderMode);let r=this.#f(`[data-collections-hint]`);r&&(r.hidden=!this._reorderMode);let i=this.#f(`[data-collections-more-menu]`);i&&(i.hidden=!this._showMoreMenu||this._reorderMode);let a=this.#f(`[data-collections-action="toggle-menu"]`);a&&a.setAttribute(`aria-expanded`,String(this._showMoreMenu&&!this._reorderMode))}#m(e){let t=e.collections??[],n=e.directoryItems??[],r=new Map;for(let e of t)r.set(e.id,{id:e.id,slug:e.slug,title:e.title,description:e.description,sortOrder:e.sortOrder,postCount:e.postCount??0,recentActivityAt:e.recentActivityAt});let i=new Set,a=[];for(let e of n){let t=e.collectionId==null?void 0:r.get(e.collectionId);e.type===`collection`&&!t||(t&&i.add(t.id),a.push({id:e.id,type:e.type,collectionId:e.collectionId,label:e.label,url:e.url,description:e.description,position:e.position,collection:t}))}for(let e of t)i.has(e.id)||a.push({id:`collection-${e.id}`,type:`collection`,collectionId:e.id,label:null,url:null,position:``,collection:r.get(e.id)});return a}async#h(){try{let e=await fetch(`/api/collections`);if(!e.ok)return;let t=await e.json();this._items=this.#m(t)}catch{}}#g(){let e=this.querySelector(`#collections-manager-list`);!e||this.#e||(this.#e=H.create(e,{...gO,chosenClass:`collection-directory-chosen`,dragClass:`collection-directory-drag`,ghostClass:`collection-directory-ghost`,handle:`[data-drag-handle]`,scroll:!0,onChoose:()=>{bO(e,!0)},onStart:e=>{this.#n=vO(e)},onUnchoose:()=>{bO(e,!1)},onEnd:t=>{let n=_O(e,`[data-directory-item]`,`directoryItem`);yO(e,t,this.#n),this.#n=null,bO(e,!1),this.#e?.destroy(),this.#e=null;let{movedId:r,afterId:i,beforeId:a}=xO(n,t.newIndex);if(!r)return;let o=new Map(this._items.map(e=>[e.id,e]));this._items=n.map(e=>o.get(e)).filter(e=>e!==void 0),fetch(`/api/collections/directory-items/${r}/move`,{method:`PUT`,headers:{"Content-Type":`application/json`},body:JSON.stringify({after:i??null,before:a??null})}).then(e=>{e.ok?d(this.labels.orderSaved):d(this.labels.saveFailed,`error`)})}}))}#_(){this._reorderMode=!0,this._showLinkForm=!1,this._editingLinkId=null,this._showMoreMenu=!1,document.removeEventListener(`click`,this.#o)}#v(){this._reorderMode=!1,this._editingDividerId=null,this.#e?.destroy(),this.#e=null}updated(e){if(this.#d(),this.#p(),this._reorderMode&&this.#g(),this._editingDividerId){let e=this.querySelector(`[data-divider-input-for="${this._editingDividerId}"]`);e&&(e.focus(),e.select(),e.scrollIntoView({block:`nearest`}),this._editingDividerId=null)}if(e.has(`_showLinkForm`)&&this._showLinkForm){let e=this.querySelector(`[data-link-form-input="label"]`);e&&this.ownerDocument.activeElement!==e&&e.focus(),this.#y()}e.has(`_editingLinkId`)&&this._editingLinkId&&this.#b()}#y(){let e=this.querySelector(`[data-new-link-desc-editor]`);!e||this.#i||(this.#i=jT({element:e,placeholder:this.labels.linkDescriptionPlaceholder,content:this._newLinkDescription||void 0,onUpdate:e=>{this._newLinkDescription=e}}),this._newLinkDescription=AT(this.#i.getJSON()))}#b(){let e=this.querySelector(`[data-edit-link-desc-editor]`);!e||this.#a||(this.#a=jT({element:e,placeholder:this.labels.linkDescriptionPlaceholder,content:this._editLinkDescription||void 0,onUpdate:e=>{this._editLinkDescription=e}}),this._editLinkDescription=AT(this.#a.getJSON()))}async#x(){this._showMoreMenu=!1,document.removeEventListener(`click`,this.#o);try{let e=await fetch(`/api/collections/directory-items`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({type:`divider`})});if(!e.ok)throw Error(`HTTP ${e.status}`);let t=await e.json();this._reorderMode=!0,await this.#h(),this._editingDividerId=t.id}catch{d(this.labels.saveFailed,`error`)}}#S(){this._showMoreMenu=!1,this._showLinkForm=!0,this._newLinkLabel=``,this._newLinkUrl=``,this._newLinkDescription=``,this.#i?.destroy(),this.#i=null,document.removeEventListener(`click`,this.#o)}async#C(){let e=this._newLinkLabel.trim(),t=this._newLinkUrl.trim();if(!e||!t){d(this.labels.labelAndUrlRequired,`error`);return}this._addingLink=!0;try{let n=this._newLinkDescription.trim()||null,r=await fetch(`/api/collections/directory-items`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({type:`link`,label:e,url:t,description:n})});if(!r.ok)throw Error(`HTTP ${r.status}`);this._showLinkForm=!1,this._newLinkLabel=``,this._newLinkUrl=``,this._newLinkDescription=``,this.#i?.destroy(),this.#i=null,d(this.labels.linkCreated),await this.#h()}catch{d(this.labels.saveFailed,`error`)}finally{this._addingLink=!1}}async#w(e){try{let t=await fetch(`/api/collections/directory-items/${e}`,{method:`DELETE`});if(!t.ok)throw Error(`HTTP ${t.status}`);this._items=this._items.filter(t=>t.id!==e)}catch{d(this.labels.saveFailed,`error`)}}async#T(e,t){let n=t.trim();if(n!==(this._items.find(t=>t.id===e)?.label??``))try{let t=await fetch(`/api/collections/directory-items/${e}`,{method:`PUT`,headers:{"Content-Type":`application/json`},body:JSON.stringify({label:n||null})});if(!t.ok)throw Error(`HTTP ${t.status}`);let r=await t.json();this._items=this._items.map(t=>t.id===e?{...t,label:r.label??null}:t)}catch{d(this.labels.saveFailed,`error`),await this.#h()}}async#E(e){if(await be({message:this.labels.confirmDelete,confirmLabel:this.labels.deleteCollection,cancelLabel:this.labels.cancel,tone:`danger`})){this._showItemMenuId=null,document.removeEventListener(`click`,this.#s);try{let t=await fetch(`/api/collections/${e.id}`,{method:`DELETE`});if(!t.ok)throw Error(`HTTP ${t.status}`);d(this.labels.deleted),await this.#h()}catch{d(this.labels.saveFailed,`error`)}}}#D(e){if(e.type===`link`){if(this._editingLinkId===e.id){this._editingLinkId=null,this._editLinkLabel=``,this._editLinkUrl=``,this._editLinkDescription=``,this.#a?.destroy(),this.#a=null;return}this._editingLinkId=e.id,this._editLinkLabel=e.label??``,this._editLinkUrl=e.url??``,this._editLinkDescription=e.description??``,this.#a?.destroy(),this.#a=null}}async#O(e){let t=this._editLinkLabel.trim(),n=this._editLinkUrl.trim();if(!t||!n){d(this.labels.labelAndUrlRequired,`error`);return}try{let r=this._editLinkDescription.trim()||null,i=await fetch(`/api/collections/directory-items/${e.id}`,{method:`PUT`,headers:{"Content-Type":`application/json`},body:JSON.stringify({label:t,url:n,description:r})});if(!i.ok)throw Error(`HTTP ${i.status}`);let a=await i.json();this._items=this._items.map(r=>r.id===e.id?{...r,label:a.label??t,url:a.url??n,description:a.description??null}:r),this._editingLinkId=null,this._editLinkLabel=``,this._editLinkUrl=``,this._editLinkDescription=``,this.#a?.destroy(),this.#a=null,d(this.labels.linkSaved)}catch{d(this.labels.saveFailed,`error`),await this.#h()}}async#k(e){if(await be({message:this.labels.confirmDeleteLink,confirmLabel:this.labels.deleteLink,cancelLabel:this.labels.cancel,tone:`danger`})){this._showItemMenuId=null,document.removeEventListener(`click`,this.#s);try{let t=await fetch(`/api/collections/directory-items/${e.id}`,{method:`DELETE`});if(!t.ok)throw Error(`HTTP ${t.status}`);this._editingLinkId=null,this._editLinkLabel=``,this._editLinkUrl=``,this._editLinkDescription=``,this.#a?.destroy(),this.#a=null,d(this.labels.linkDeleted),this._items=this._items.filter(t=>t.id!==e.id)}catch{d(this.labels.saveFailed,`error`)}}}#A(){let e=e=>e.type===`collection`&&e.collection||e.type===`link`&&e.label&&e.url,t=[],n=!1,r=0;for(let i of this._items)i.type===`divider`?(n=!0,t.push(0)):e(i)&&(n?t[t.length-1]+=1:r+=1);let i=t.length>0,a=Math.max(0,t.length-1),o=i?Math.max(1,a.toString(36).length):0,s=Math.max(2,String(Math.max(0,r-1)).length),c=[],l=-1,u=0;for(let t of this._items)if(t.type===`divider`)l+=1,u=0,c.push(``);else if(e(t)){if(i){let e=Math.max(0,l).toString(36).padStart(o,`0`),t=u.toString(36);c.push(e+t)}else c.push(String(u).padStart(s,`0`));u+=1}else c.push(``);return c}#j(e,t){let n=e.collection;if(!n)return g;let r=u`
|
|
2990
2990
|
<div class="collection-directory-main">
|
|
2991
2991
|
<span class="collection-directory-sequence" aria-hidden="true">
|
|
2992
2992
|
${t}
|
|
@@ -3003,7 +3003,7 @@ Check the discardedTracks field for more info.`)}return e}async execute(){if(!th
|
|
|
3003
3003
|
`:g}
|
|
3004
3004
|
<p class="collection-directory-summary">
|
|
3005
3005
|
<span class="collection-directory-meta"
|
|
3006
|
-
>${this.#
|
|
3006
|
+
>${this.#u(n.postCount)}</span
|
|
3007
3007
|
>
|
|
3008
3008
|
<span class="collection-directory-meta-separator" aria-hidden="true"
|
|
3009
3009
|
>/</span
|
|
@@ -3054,16 +3054,16 @@ Check the discardedTracks field for more info.`)}return e}async execute(){if(!th
|
|
|
3054
3054
|
>
|
|
3055
3055
|
${r}
|
|
3056
3056
|
</div>
|
|
3057
|
-
${this._hoveringId===e.id||this._showItemMenuId===e.id?this.#
|
|
3057
|
+
${this._hoveringId===e.id||this._showItemMenuId===e.id?this.#P(e):g}
|
|
3058
3058
|
</div>
|
|
3059
|
-
`}#
|
|
3059
|
+
`}#M(e){return this._editingLinkId===e.id?u`
|
|
3060
3060
|
<div
|
|
3061
3061
|
class="collections-link-edit card"
|
|
3062
3062
|
@click=${e=>e.stopPropagation()}
|
|
3063
3063
|
>
|
|
3064
3064
|
<form
|
|
3065
3065
|
class="grid gap-4"
|
|
3066
|
-
@submit=${t=>{t.preventDefault(),this.#
|
|
3066
|
+
@submit=${t=>{t.preventDefault(),this.#O(e)}}
|
|
3067
3067
|
>
|
|
3068
3068
|
<div class="field">
|
|
3069
3069
|
<label class="label" for=${`collections-link-label-${e.id}`}>
|
|
@@ -3100,7 +3100,7 @@ Check the discardedTracks field for more info.`)}return e}async execute(){if(!th
|
|
|
3100
3100
|
<button
|
|
3101
3101
|
type="button"
|
|
3102
3102
|
class="btn-outline"
|
|
3103
|
-
@click=${()=>this.#
|
|
3103
|
+
@click=${()=>this.#D(e)}
|
|
3104
3104
|
>
|
|
3105
3105
|
${this.labels.cancel}
|
|
3106
3106
|
</button>
|
|
@@ -3110,7 +3110,7 @@ Check the discardedTracks field for more info.`)}return e}async execute(){if(!th
|
|
|
3110
3110
|
</div>
|
|
3111
3111
|
</form>
|
|
3112
3112
|
</div>
|
|
3113
|
-
`:g}#
|
|
3113
|
+
`:g}#N(e,t){if(!e.label||!e.url)return g;let n=i(e.url),r=e.url.startsWith(`http://`)||e.url.startsWith(`https://`),a=u`
|
|
3114
3114
|
<div class="collection-directory-main">
|
|
3115
3115
|
<span class="collection-directory-sequence" aria-hidden="true">
|
|
3116
3116
|
${t}
|
|
@@ -3200,10 +3200,10 @@ Check the discardedTracks field for more info.`)}return e}async execute(){if(!th
|
|
|
3200
3200
|
>
|
|
3201
3201
|
${a}
|
|
3202
3202
|
</div>
|
|
3203
|
-
${this._hoveringId===e.id||this._showItemMenuId===e.id?this.#
|
|
3204
|
-
${this.#
|
|
3203
|
+
${this._hoveringId===e.id||this._showItemMenuId===e.id?this.#P(e):g}
|
|
3204
|
+
${this.#M(e)}
|
|
3205
3205
|
</div>
|
|
3206
|
-
`}#
|
|
3206
|
+
`}#P(e){let t=e.collection,n=e.type===`link`&&!!e.label&&!!e.url;if(!t&&!n)return g;let r=this._showItemMenuId===e.id;return u`
|
|
3207
3207
|
<div class="collection-directory-item-menu">
|
|
3208
3208
|
<button
|
|
3209
3209
|
type="button"
|
|
@@ -3238,7 +3238,7 @@ Check the discardedTracks field for more info.`)}return e}async execute(){if(!th
|
|
|
3238
3238
|
<button
|
|
3239
3239
|
type="button"
|
|
3240
3240
|
class="collections-page-menu-item collections-page-menu-item-danger"
|
|
3241
|
-
@click=${()=>this.#
|
|
3241
|
+
@click=${()=>this.#E(t)}
|
|
3242
3242
|
>
|
|
3243
3243
|
${this.labels.deleteCollection}
|
|
3244
3244
|
</button>
|
|
@@ -3246,14 +3246,14 @@ Check the discardedTracks field for more info.`)}return e}async execute(){if(!th
|
|
|
3246
3246
|
<button
|
|
3247
3247
|
type="button"
|
|
3248
3248
|
class="collections-page-menu-item"
|
|
3249
|
-
@click=${()=>{this._showItemMenuId=null,document.removeEventListener(`click`,this.#s),this.#
|
|
3249
|
+
@click=${()=>{this._showItemMenuId=null,document.removeEventListener(`click`,this.#s),this.#D(e)}}
|
|
3250
3250
|
>
|
|
3251
3251
|
${this.labels.edit}
|
|
3252
3252
|
</button>
|
|
3253
3253
|
<button
|
|
3254
3254
|
type="button"
|
|
3255
3255
|
class="collections-page-menu-item collections-page-menu-item-danger"
|
|
3256
|
-
@click=${()=>this.#
|
|
3256
|
+
@click=${()=>this.#k(e)}
|
|
3257
3257
|
>
|
|
3258
3258
|
${this.labels.deleteLink}
|
|
3259
3259
|
</button>
|
|
@@ -3261,7 +3261,7 @@ Check the discardedTracks field for more info.`)}return e}async execute(){if(!th
|
|
|
3261
3261
|
</div>
|
|
3262
3262
|
`:g}
|
|
3263
3263
|
</div>
|
|
3264
|
-
`}#
|
|
3264
|
+
`}#F(e,t){if(this._reorderMode)return u`
|
|
3265
3265
|
<div
|
|
3266
3266
|
data-directory-item=${e.id}
|
|
3267
3267
|
class="collection-directory-divider-row"
|
|
@@ -3294,7 +3294,7 @@ Check the discardedTracks field for more info.`)}return e}async execute(){if(!th
|
|
|
3294
3294
|
placeholder=${this.labels.dividerLabelPlaceholder}
|
|
3295
3295
|
.value=${e.label??``}
|
|
3296
3296
|
aria-label=${this.labels.dividerLabelPlaceholder}
|
|
3297
|
-
@blur=${t=>this.#
|
|
3297
|
+
@blur=${t=>this.#T(e.id,t.currentTarget.value)}
|
|
3298
3298
|
@keydown=${t=>{let n=t.currentTarget;t.key===`Enter`&&(t.preventDefault(),n.blur()),t.key===`Escape`&&(n.value=e.label??``,n.blur())}}
|
|
3299
3299
|
/>
|
|
3300
3300
|
<hr class="collection-directory-divider-line" />
|
|
@@ -3304,7 +3304,7 @@ Check the discardedTracks field for more info.`)}return e}async execute(){if(!th
|
|
|
3304
3304
|
class="collections-page-icon-button"
|
|
3305
3305
|
title=${this.labels.deleteDivider}
|
|
3306
3306
|
aria-label=${this.labels.deleteDivider}
|
|
3307
|
-
@click=${()=>this.#
|
|
3307
|
+
@click=${()=>this.#w(e.id)}
|
|
3308
3308
|
>
|
|
3309
3309
|
<svg
|
|
3310
3310
|
xmlns="http://www.w3.org/2000/svg"
|
|
@@ -3345,11 +3345,11 @@ Check the discardedTracks field for more info.`)}return e}async execute(){if(!th
|
|
|
3345
3345
|
`:u`<hr class="collection-directory-divider-line" />`}
|
|
3346
3346
|
</div>
|
|
3347
3347
|
</div>
|
|
3348
|
-
`}#
|
|
3348
|
+
`}#I(){return this._showLinkForm?u`
|
|
3349
3349
|
<div class="collections-link-create card">
|
|
3350
3350
|
<form
|
|
3351
3351
|
class="grid gap-4"
|
|
3352
|
-
@submit=${e=>{e.preventDefault(),this.#
|
|
3352
|
+
@submit=${e=>{e.preventDefault(),this.#C()}}
|
|
3353
3353
|
>
|
|
3354
3354
|
<header class="grid gap-1">
|
|
3355
3355
|
<h2 class="text-base font-semibold">${this.labels.newLink}</h2>
|
|
@@ -3403,10 +3403,10 @@ Check the discardedTracks field for more info.`)}return e}async execute(){if(!th
|
|
|
3403
3403
|
</form>
|
|
3404
3404
|
</div>
|
|
3405
3405
|
`:g}render(){return u`
|
|
3406
|
-
${this.#
|
|
3406
|
+
${this.#I()}
|
|
3407
3407
|
${this.#l()?u`
|
|
3408
3408
|
<div id="collections-manager-list" class="collection-directory">
|
|
3409
|
-
${(()=>{let e=this.#
|
|
3409
|
+
${(()=>{let e=this.#A();return this._items.map((t,n)=>t.type===`collection`?this.#j(t,e[n]):t.type===`link`?this.#N(t,e[n]):this.#F(t,n))})()}
|
|
3410
3410
|
</div>
|
|
3411
3411
|
`:u`<p class="text-muted-foreground">${this.labels.emptyState}</p>`}
|
|
3412
3412
|
`}};customElements.define(`jant-collections-manager`,NB);function PB(e){try{let t=new URL(e,window.location.origin);return t.origin===window.location.origin?t:null}catch{return null}}function FB(){return document.documentElement.dataset.sitePathPrefix||``}function IB(e){let t=FB();return t?e===t?`/`:e.startsWith(`${t}/`)?e.slice(t.length)||`/`:null:e||`/`}function LB(e,t,n){let r=e.split(`+`).filter(Boolean);if(r.length===0||r.length===1)return t;if(!n)return e;let i=!1,a=r.map(e=>e===n?(i=!0,t):e);return i?a.join(`+`):e}function RB(e,t,n){let r=t.cancelHref||i(Zz());if(!e.isEdit||!n)return r;let a=PB(r);if(!a)return i(Qz(n));let o=IB(a.pathname),s=t.initial?.slug?.trim()||void 0;if(s&&o===Qz(s))return a.pathname=i(Qz(n)),`${a.pathname}${a.search}${a.hash}`;let c=o?.match(/^\/collections\/([^/]+)$/);return c&&(a.pathname=i($z(LB(c[1],n,s)))),`${a.pathname}${a.search}${a.hash}`}document.addEventListener(`jant:collection-submit`,async e=>{let t=e,n=t.detail,r=t.target instanceof HTMLElement?t.target:document.querySelector(`jant-collection-form`),i=r?.closest(`[data-collection-editor-page]`);if(!(!n?.endpoint||!r||!i)){r.loading=!0;try{let e=await fetch(n.endpoint,{method:n.isEdit?`PUT`:`POST`,headers:{"Content-Type":`application/json`,Accept:`application/json`},body:JSON.stringify(n.data)}),t=await e.json().catch(()=>null);if(!e.ok)throw Error(t?.error||i.dataset.collectionEditorSaveFailed||`Couldn't save. Try again in a moment.`);let a=RB(n,r,typeof t?.slug==`string`&&t.slug.length>0?t.slug:void 0);window.location.href=a;return}catch(e){d(e instanceof Error?e.message:i.dataset.collectionEditorSaveFailed||`Couldn't save. Try again in a moment.`,`error`)}finally{r.loading=!1}}});function zB(e){let t;if(e===`application/pdf`)t=`<text x="12" y="16.5" text-anchor="middle" fill="currentColor" stroke="none" font-size="6" font-weight="700" font-family="system-ui, sans-serif">PDF</text>`;else if(e===`text/markdown`)t=`<text x="12" y="16.5" text-anchor="middle" fill="currentColor" stroke="none" font-size="10" font-weight="700" font-family="system-ui, sans-serif">#</text>`;else if(e===`text/csv`)t=`<line x1="8" y1="12" x2="16" y2="12"/><line x1="8" y1="15" x2="16" y2="15"/><line x1="8" y1="18" x2="16" y2="18"/><line x1="10.7" y1="12" x2="10.7" y2="18"/><line x1="13.3" y1="12" x2="13.3" y2="18"/>`;else if(sS(e)===`archive`)t=`<line x1="12" y1="10" x2="12" y2="11.5"/><line x1="12" y1="13" x2="12" y2="14.5"/><line x1="12" y1="16" x2="12" y2="17.5"/>`;else if(e.startsWith(`audio/`))return u`<svg
|